diff --git a/src/main.c b/src/main.c index 52f2e21..3e007b1 100644 --- a/src/main.c +++ b/src/main.c @@ -18,13 +18,13 @@ const int digit_bitmaps[10][5][3] = { {{1,1,1},{1,0,1},{1,1,1},{0,0,1},{1,1,1}} // 9 }; -void get_fake_data(int *speed, int *power, int *bat, float *tq, int *rpm, int *eff, float *bat_temp, float *var_temp, float *mot_temp) { +void get_fake_data(int *speed, int *power, int *bat, float *tq, int *rpm, float *eff, float *bat_temp, float *var_temp, float *mot_temp) { *speed = rand() % 201; *power = rand() % 1251; *bat = rand() % 101; *tq = 1.8f + ((float)rand() / (float)RAND_MAX) * (3.5f - 1.8f); *rpm = rand() % 6000; - *eff = rand() % 100; + *eff = (float)rand() / (float)RAND_MAX * 300.0f; *bat_temp = (float)rand() / (float)RAND_MAX * 150.0f; *var_temp = (float)rand() / (float)RAND_MAX * 150.0f; *mot_temp = (float)rand() / (float)RAND_MAX * 150.0f; @@ -143,6 +143,31 @@ void win_float(WINDOW *lwin, float data, int digits) { wrefresh(lwin); } +void win_bar(WINDOW *lwin, int data, int data_max) { + int lwiny, lwinx; + getmaxyx(lwin, lwiny, lwinx); + + win_clear(lwin); + + int bar_width = lwinx - 4; + int bar_height = lwiny - 2; + int filled = (data * bar_width) / data_max; + + for (int y = 1; y <= bar_height; y++) { + for (int x = 0; x < bar_width; x++) { + if (x < filled) + mvwaddch(lwin, y, 2 + x, ACS_CKBOARD); + } + } + + char buf[16]; + snprintf(buf, sizeof(buf), "%d rpm", data); + mvwprintw(lwin, lwiny / 2 - 1, 3, "%s", buf); + + wrefresh(lwin); +} + + int main(int argc, char **argv) { int option; int delay = 1; @@ -217,8 +242,8 @@ int main(int argc, char **argv) { wrefresh(win[i]); } - int speed = 0, power = 0, bat = 0, rpm = 0, eff = 0; - float tq = 0.0f, bat_temp = 0.0f, var_temp = 0.0f, mot_temp = 0.0f; + int speed = 0, power = 0, bat = 0, rpm = 0; + float tq = 0.0f, eff = 0.0f, bat_temp = 0.0f, var_temp = 0.0f, mot_temp = 0.0f; long t100 = 0, t1000 = 0; int ch = ERR; while(ch == ERR) { @@ -234,8 +259,8 @@ int main(int argc, char **argv) { win_int(win[0], speed, 3); win_int(win[1], power, 4); win_float(win[3], tq, 3); - //win[4] - //win[5] + win_bar(win[4], rpm, 6000); + win_float(win[5], eff, 5); t100 = now; } if (now - t1000 >= 1000 * delay) {