add error message display

This commit is contained in:
smayzy 2026-05-02 12:30:15 +02:00
parent ed516cc804
commit c09f0a81b0

View File

@ -52,6 +52,12 @@ typedef struct{
WINDOW *lwin; WINDOW *lwin;
char title[30]; char title[30];
} StFlt; } StFlt;
typedef struct {
int err;
long last_err;
} Error;
typedef struct{ typedef struct{
long last_error; long last_error;
int error_level; int error_level;
@ -61,6 +67,13 @@ typedef struct{
int startx; int startx;
WINDOW *lwin; WINDOW *lwin;
char title[30]; char title[30];
Error speed;
Error rpm;
Error power;
Error eff;
Error bat;
Error tens;
Error amp;
} StStr; } StStr;
typedef struct { typedef struct {
@ -412,28 +425,36 @@ void win_bar(StInt *st, bool use_color) {
void win_warn(Tel *t, bool use_color, long now) { void win_warn(Tel *t, bool use_color, long now) {
int warn_lvl = 0; int warn_lvl = 0;
if ((t->speed.data > t->speed.hdata) || (t->speed.data < t->speed.ldata)) warn_lvl++; int lwiny, lwinx;
if ((t->rpm.data > t->rpm.hdata) || (t->rpm.data < t->rpm.ldata)) warn_lvl++; getmaxyx(t->message.lwin, lwiny, lwinx);
if ((t->power.data > t->power.hdata) || (t->power.data < t->power.ldata)) warn_lvl++; win_clear(t->message.lwin);
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++; t->message.speed.err = 0;
if ((t->tens.data > t->tens.hdata) || (t->tens.data < t->tens.ldata)) warn_lvl++; t->message.rpm.err = 0;
if ((t->amp.data > t->amp.hdata) || (t->amp.data < t->amp.ldata)) warn_lvl++; 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) { if (warn_lvl > 0) {
t->message.error_level = warn_lvl; t->message.error_level = warn_lvl;
t->message.last_error = now; t->message.last_error = now;
} else if ((now - t->message.last_error) > 3000) { } else if ((now - t->message.last_error) > 3000) {
t->message.error_level = 0; 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 (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 y = 1; y < lwiny - 1; y++) {
for (int x = 1; x < lwinx - 1; x++) { for (int x = 1; x < lwinx - 1; x++) {
mvwaddch(t->message.lwin, y, x, ACS_CKBOARD); 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) 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); 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.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.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.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.speed);
win_init_int(&tel.rpm); win_init_int(&tel.rpm);