From 9047546be0c8a76a8c16eca3e42c8b1eefd43341 Mon Sep 17 00:00:00 2001 From: smayzy Date: Mon, 27 Apr 2026 13:26:39 +0200 Subject: [PATCH] add win_warn and fix uart speed --- src/main.c | 46 +++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 43 insertions(+), 3 deletions(-) diff --git a/src/main.c b/src/main.c index efe93b9..7a3883c 100644 --- a/src/main.c +++ b/src/main.c @@ -53,6 +53,8 @@ typedef struct{ char title[30]; } StFlt; typedef struct{ + int last_error; + int error_level; int height; int width; int starty; @@ -403,6 +405,41 @@ void win_bar(StInt *st, bool use_color) { } } +void win_warn(Tel *t, bool use_color, long now) { + int warn_lvl = 0; + if ((t->speed.data > t->speed.hdata) || (t->speed.data < t->speed.ldata)) warn_lvl++; + if ((t->rpm.data > t->rpm.hdata) || (t->rpm.data < t->rpm.ldata)) warn_lvl++; + if ((t->power.data > t->power.hdata) || (t->power.data < t->power.ldata)) warn_lvl++; + if ((t->bat.data > t->bat.hdata) || (t->bat.data < t->bat.ldata)) warn_lvl++; + if ((t->eff.data > t->eff.hdata) || (t->eff.data < t->eff.ldata)) warn_lvl++; + if ((t->tens.data > t->eff.hdata) || (t->eff.data < t->eff.ldata)) warn_lvl++; + if ((t->amp.data > t->amp.hdata) || (t->amp.data < t->amp.ldata)) warn_lvl++; + + if (warn_lvl > 0) { + t->message.error_level = warn_lvl; + t->message.last_error = now; + } else if ((now - t->message.last_error) > 3000) { + t->message.error_level = 0; + win_clear(t->message.lwin); + } + + int lwiny, lwinx; + getmaxyx(t->message.lwin, lwiny, lwinx); + + if (use_color) wattron(t->message.lwin, COLOR_PAIR(2)); + + if (warn_lvl > 0) { + for (int y = 1; y < lwiny - 1; y++) { + for (int x = 1; x < lwinx - 1; x++) { + mvwaddch(t->message.lwin, y, x, ACS_CKBOARD); + } + } + } + + if (use_color) wattroff(t->message.lwin, COLOR_PAIR(2)); + wrefresh(t->message.lwin); +} + int main(int argc, char **argv) { int option; int delay = 1; @@ -475,7 +512,10 @@ int main(int argc, char **argv) { tcgetattr(uart_fd, &uart_str); uart_str.c_cflag &= ~CSIZE; // clear bit size - uart_str.c_cflag |= (CLOCAL | CREAD | CS8 | B115200); + uart_str.c_cflag |= (CLOCAL | CREAD | CS8); + + cfsetispeed(&uart_str, B115200); + cfsetospeed(&uart_str, B115200); uart_str.c_lflag = 0; // raw mode uart_str.c_iflag = 0; @@ -529,7 +569,7 @@ int main(int argc, char **argv) { tel.eff = (StFlt){0.0f, 0.0f, 300.0f, 5, 1, y4r , x3r , y4 , x-x3r , NULL, "efficiency (Wh/Km)" }; tel.tens = (StFlt){0.0f, 0.0f, 55.0f , 4, 1, y2r4 , x3r , y2 , x-x3r , NULL, "tension (V)" }; tel.amp = (StFlt){0.0f, 0.0f, 55.0f , 4, 1, y2r4r, x3r , y-y2r4r, x-x3r , NULL, "intensity (A)" }; - tel.message = (StStr){ y6r , 2*x3, y-y6r , 0 , NULL, "warnings" }; + tel.message = (StStr){0 , 0 , y6r , 2*x3, y-y6r , 0 , NULL, "warnings" }; win_init_int(&tel.speed); win_init_int(&tel.rpm); @@ -573,9 +613,9 @@ int main(int argc, char **argv) { win_float(&tel.tens, use_color); win_float(&tel.amp, use_color); win_int(&tel.bat, use_color); + win_warn(&tel, use_color, now); t100 = now; } - //message; napms(10); } end: