diff --git a/examples/cluster.c b/examples/cluster.c index f6f99ed..b9c8b53 100644 --- a/examples/cluster.c +++ b/examples/cluster.c @@ -1,5 +1,6 @@ #include #include +#include #include #include @@ -9,7 +10,7 @@ #include typedef struct _hexagram_cluster_state { - double rpm, rps, temp, level; + double rpm, rps, temp, fuel; } hexagram_cluster_state; static hexagram_cluster_state state = { @@ -328,7 +329,7 @@ static void cluster_update(struct can_frame *frame) { } case 0x320: { - state.level = (double)(frame->data[2]); + state.fuel = (double)(frame->data[2] & 0xf) / 16.0; break; } @@ -368,7 +369,22 @@ static void cluster_draw(cairo_t *cr, width * 0.57, height * 0.76, height * 0.11, - 0.5); + state.fuel); +} + +static int usage(int argc, char **argv, const char *message, ...) { + if (message) { + va_list args; + + va_start(args, message); + vfprintf(stderr, message, args); + fprintf(stderr, "\n"); + va_end(args); + } + + fprintf(stderr, "usage: %s canif\n", argv[0]); + + return 1; } int main(int argc, char **argv) { @@ -389,11 +405,17 @@ int main(int argc, char **argv) { cairo_t *fg, *bg; - if ((can_if = hexagram_can_if_open("vcan0")) == NULL) - exit(1); + if (argc != 2) { + return usage(argc, argv, "No CAN interface specified"); + } - if ((window = hexagram_window_new_x11(NULL, width, height)) == NULL) - exit(1); + if ((can_if = hexagram_can_if_open(argv[1])) == NULL) { + return 1; + } + + if ((window = hexagram_window_new_x11(NULL, width, height)) == NULL) { + return 1; + } display = hexagram_window_display(window); diff --git a/examples/view.c b/examples/view.c index 3678c5e..8d84417 100644 --- a/examples/view.c +++ b/examples/view.c @@ -15,6 +15,7 @@ static int usage(int argc, char **argv, const char *message, ...) { va_start(args, message); vfprintf(stderr, message, args); + fprintf(stderr, "\n"); va_end(args); } @@ -57,17 +58,17 @@ int main(int argc, char **argv) { wprintw(win, "%6.1lf RPM", rpm); } else if (frame.can_id == 0x540) { - wmove(win, 6, 0); + wmove(win, 7, 0); if ((frame.data[7] & 0xc) == 0xc) { uint8_t gear = ((frame.data[7] & 0xf0) >> 4) - 2; wprintw(win, "1 2 3 4 5 6"); - wmove(win, 7, 0); + wmove(win, 8, 0); wprintw(win, " "); - wmove(win, 7, gear * 2); + wmove(win, 8, gear * 2); wprintw(win, "_"); } else { @@ -75,10 +76,10 @@ int main(int argc, char **argv) { wprintw(win, "P R N D S "); - wmove(win, 7, 0); + wmove(win, 8, 0); wprintw(win, " "); - wmove(win, 7, pos * 2); + wmove(win, 8, pos * 2); wprintw(win, "_"); } @@ -104,8 +105,11 @@ int main(int argc, char **argv) { wmove(win, 3, 0); wprintw(win, "%6.1lf °C ambient", temp); - } else if (frame.can_id == 0x4a0) { - + } else if (frame.can_id == 0x320) { + double fuel = (double)(frame.data[2] & 0xf) / 16.0; + + wmove(win, 5, 0); + wprintw(win, "%5.0lf%% Fuel", fuel * 100.0); } if (((now.tv_sec * 1000000) + now.tv_usec) - ((last.tv_sec * 1000000) + last.tv_usec) > 100000) {