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;
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);