From 6b48126f7e809ec99ddb6f147fab504136f6fd3d Mon Sep 17 00:00:00 2001 From: smayzy Date: Sun, 28 Dec 2025 17:09:57 +0100 Subject: [PATCH] add args and better delay logic --- src/main.c | 73 +++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 59 insertions(+), 14 deletions(-) diff --git a/src/main.c b/src/main.c index 9cc1d9c..ee05838 100644 --- a/src/main.c +++ b/src/main.c @@ -2,6 +2,8 @@ #include #include #include +#include +#include const int digit_bitmaps[10][5][3] = { {{1,1,1},{1,0,1},{1,0,1},{1,0,1},{1,1,1}}, // 0 @@ -16,7 +18,7 @@ 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_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, int *eff, float *bat_temp, float *var_temp, float *mot_temp) { *speed = rand() % 201; *power = rand() % 1251; @@ -29,6 +31,13 @@ void get_data(int *speed, int *power, int *bat, float *tq, int *rpm, int *eff, f *mot_temp = (float)rand() / (float)RAND_MAX * 150.0f; } +long now_ms(void) +{ + struct timespec ts; + clock_gettime(CLOCK_MONOTONIC, &ts); + return ts.tv_sec * 1000 + ts.tv_nsec / 1000000; +} + void win_clear(WINDOW *lwin) { int y, x; getmaxyx(lwin, y, x); @@ -81,8 +90,29 @@ void win_number(WINDOW *lwin, int data, int digits){ wrefresh(lwin); } -int main() +int main(int argc, char **argv) { + int option; + int delay = 1; + int fake_data = 0; + + while ((option = getopt(argc, argv, "d:hf")) !=-1) { + switch (option) { + case 'd' : + delay = atoi(optarg); + if (delay < 0) { + delay = 0; + } + break; + case 'f' : + fake_data = 1; + break; + case 'h' : + printf("Usage: ./dashboard [-d int DELAY by how much to slow down] [-h HELP] [-f generate fake data]\n"); + return(0); + } + } + initscr(); noecho(); cbreak(); @@ -135,23 +165,38 @@ int main() wrefresh(win[i]); } - int speed, power, bat, rpm, eff; - float tq, bat_temp, var_temp, mot_temp; + 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; + long t100 = 0, t1000 = 0; int ch = ERR; while(ch == ERR) { - get_data(&speed, &power, &bat, &tq, &rpm, &eff, &bat_temp, &var_temp, &mot_temp); - win_number(win[0], speed, 3); - win_number(win[1], power, 4); - win_number(win[2], bat, 3); - //win[3] - //win[4] - //win[5] - //win_number(win[6], bat_temp, 3); - //win_number(win[7], var_temp, 3); - //win_number(win[8], mot_temp, 3); + if (fake_data) { + get_fake_data(&speed, &power, &bat, &tq, &rpm, &eff, &bat_temp, &var_temp, &mot_temp); + } else { + //real_data() + } + + long now = now_ms(); + + if (now - t100 >= 100 * delay) { + win_number(win[0], speed, 3); + win_number(win[1], power, 4); + //win[3] + //win[4] + //win[5] + t100 = now; + } + if (now - t1000 >= 1000 * delay){ + win_number(win[2], bat, 3); + //win[6] + //win[7] + //win[8] + t1000 = now; + } //win[9]; ch = getch(); + napms(10); }; for (int i = 0; i < 10; i++) {