From c09f0a81b05071127f855a5237be7dcd27d0167c Mon Sep 17 00:00:00 2001 From: smayzy Date: Sat, 2 May 2026 12:30:15 +0200 Subject: [PATCH] add error message display --- src/main.c | 60 ++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 47 insertions(+), 13 deletions(-) diff --git a/src/main.c b/src/main.c index 6326134..4d97d4c 100644 --- a/src/main.c +++ b/src/main.c @@ -52,6 +52,12 @@ typedef struct{ WINDOW *lwin; char title[30]; } StFlt; + +typedef struct { + int err; + long last_err; +} Error; + typedef struct{ long last_error; int error_level; @@ -61,6 +67,13 @@ typedef struct{ int startx; WINDOW *lwin; char title[30]; + Error speed; + Error rpm; + Error power; + Error eff; + Error bat; + Error tens; + Error amp; } StStr; typedef struct { @@ -412,28 +425,36 @@ 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->tens.hdata) || (t->tens.data < t->tens.ldata)) warn_lvl++; - if ((t->amp.data > t->amp.hdata) || (t->amp.data < t->amp.ldata)) warn_lvl++; + int lwiny, lwinx; + getmaxyx(t->message.lwin, lwiny, lwinx); + win_clear(t->message.lwin); + + t->message.speed.err = 0; + t->message.rpm.err = 0; + t->message.power.err = 0; + t->message.eff.err = 0; + t->message.bat.err = 0; + t->message.tens.err = 0; + t->message.amp.err = 0; + + if ((t->speed.data > t->speed.hdata) || (t->speed.data < t->speed.ldata)) {warn_lvl++; t->message.speed.err = 1; t->message.speed.last_err = now; } + if ((t->rpm.data > t->rpm.hdata) || (t->rpm.data < t->rpm.ldata)) {warn_lvl++; t->message.rpm.err = 1; t->message.rpm.last_err = now; } + if ((t->power.data > t->power.hdata) || (t->power.data < t->power.ldata)) {warn_lvl++; t->message.power.err = 1; t->message.power.last_err = now; } + if ((t->bat.data > t->bat.hdata) || (t->bat.data < t->bat.ldata)) {warn_lvl++; t->message.bat.err = 1; t->message.bat.last_err = now; } + if ((t->eff.data > t->eff.hdata) || (t->eff.data < t->eff.ldata)) {warn_lvl++; t->message.eff.err = 1; t->message.eff.last_err = now; } + if ((t->tens.data > t->tens.hdata) || (t->tens.data < t->tens.ldata)) {warn_lvl++; t->message.tens.err = 1; t->message.tens.last_err = now; } + if ((t->amp.data > t->amp.hdata) || (t->amp.data < t->amp.ldata)) {warn_lvl++; t->message.amp.err = 1; t->message.amp.last_err = now; } 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) { + if (warn_lvl > 0 || (now - t->message.last_error) < 3000) { for (int y = 1; y < lwiny - 1; y++) { for (int x = 1; x < lwinx - 1; x++) { mvwaddch(t->message.lwin, y, x, ACS_CKBOARD); @@ -442,6 +463,19 @@ void win_warn(Tel *t, bool use_color, long now) { } if (use_color) wattroff(t->message.lwin, COLOR_PAIR(2)); + + if (use_color) wattron(t->message.lwin, COLOR_PAIR(1)); + + if (t->message.speed.err != 0 || (now - t->message.speed.last_err) < 3000 ) mvwprintw(t->message.lwin, 2 + 0 * ((lwiny - 2) / 4), 2 , "SPEED ERROR"); + if (t->message.rpm.err != 0 || (now - t->message.rpm.last_err) < 3000 ) mvwprintw(t->message.lwin, 2 + 1 * ((lwiny - 2) / 4), 2 , "RPM ERROR" ); + if (t->message.power.err != 0 || (now - t->message.power.last_err) < 3000 ) mvwprintw(t->message.lwin, 2 + 2 * ((lwiny - 2) / 4), 2 , "POWER ERROR"); + if (t->message.eff.err != 0 || (now - t->message.eff.last_err) < 3000 ) mvwprintw(t->message.lwin, 2 + 3 * ((lwiny - 2) / 4), 2 , "EFF ERROR" ); + if (t->message.bat.err != 0 || (now - t->message.bat.last_err) < 3000 ) mvwprintw(t->message.lwin, 2 + 0 * ((lwiny - 2) / 4), lwinx / 2, "BAT ERROR" ); + if (t->message.tens.err != 0 || (now - t->message.tens.last_err) < 3000 ) mvwprintw(t->message.lwin, 2 + 1 * ((lwiny - 2) / 4), lwinx / 2, "TENS ERROR" ); + if (t->message.amp.err != 0 || (now - t->message.amp.last_err) < 3000 ) mvwprintw(t->message.lwin, 2 + 2 * ((lwiny - 2) / 4), lwinx / 2, "AMP ERROR" ); + + if (use_color) wattroff(t->message.lwin, COLOR_PAIR(1)); + wrefresh(t->message.lwin); } @@ -577,7 +611,7 @@ int main(int argc, char **argv) { tel.eff = (StFlt){0.0f, 0.0f , 100.0f, 5, 1, y4r , x3r , y4 , x-x3r , NULL, "efficiency (Wh/Km)" }; tel.tens = (StFlt){0.0f, 36.0f, 55.0f , 4, 1, y2r4 , x3r , y2 , x-x3r , NULL, "tension (V)" }; tel.amp = (StFlt){0.0f, 0.0f , 30.0f , 4, 1, y2r4r, x3r , y-y2r4r, x-x3r , NULL, "intensity (A)" }; - tel.message = (StStr){0 , 0 , y6r , 2*x3, y-y6r , 0 , NULL, "warnings" }; + tel.message = (StStr){0 , 0 , y6r , 2*x3, y-y6r , 0 , NULL, "warnings" , {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}}; win_init_int(&tel.speed); win_init_int(&tel.rpm);