add win_warn and fix uart speed

This commit is contained in:
smayzy 2026-04-27 13:26:39 +02:00
parent 4ca757c738
commit 9047546be0

View File

@ -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: