diff --git a/examples/cluster.c b/examples/cluster.c index 1fcbbef..f2aa682 100644 --- a/examples/cluster.c +++ b/examples/cluster.c @@ -45,36 +45,8 @@ static void cluster_update(hexagram_cluster *cluster, struct timeval *last) { struct timeval now; - switch (frame->can_id) { - case 0x280: { - cluster->state.rpm = 0.25 * - (double)(frame->data[2] | (frame->data[3] << 8)); - - break; - } - - case 0x288: { - cluster->state.temp = (double)(frame->data[1] - 48 * 0.75); - - break; - } - - case 0x320: { - cluster->state.fuel = (double)(frame->data[2] & 0xf) / 16.0; - - break; - } - - case 0x5a0: { - cluster->state.rps = 0.001 * (double)(frame->data[1] - | (frame->data[2] << 8)); - - break; - } - - default: { - return; - } + if (!hexagram_cluster_update(cluster, frame)) { + return; } gettimeofday(&now, NULL); diff --git a/include/hexagram/cluster.h b/include/hexagram/cluster.h index 86b33e8..a3f1cad 100644 --- a/include/hexagram/cluster.h +++ b/include/hexagram/cluster.h @@ -1,6 +1,8 @@ #ifndef _HEXAGRAM_CLUSTER_H #define _HEXAGRAM_CLUSTER_H +#include + #include #include @@ -35,6 +37,9 @@ void hexagram_cluster_init(hexagram_cluster *cluster, hexagram_cluster *hexagram_cluster_new(double width, double height); +int hexagram_cluster_update(hexagram_cluster *cluster, + struct can_frame *frame); + void hexagram_cluster_draw_bg(hexagram_cluster *cluster, cairo_t *cr); diff --git a/src/cluster.c b/src/cluster.c index 1338366..8dd3b89 100644 --- a/src/cluster.c +++ b/src/cluster.c @@ -71,6 +71,39 @@ error_malloc_cluster: return NULL; } +int hexagram_cluster_update(hexagram_cluster *cluster, + struct can_frame *frame) { + switch (frame->can_id) { + case 0x280: { + cluster->state.rpm = 0.25 * + (double)(frame->data[2] | (frame->data[3] << 8)); + + return 1; + } + + case 0x288: { + cluster->state.temp = (double)(frame->data[1] - 48 * 0.75); + + return 1; + } + + case 0x320: { + cluster->state.fuel = (double)(frame->data[2] & 0xf) / 16.0; + + return 1; + } + + case 0x5a0: { + cluster->state.rps = 0.001 * (double)(frame->data[1] + | (frame->data[2] << 8)); + + return 1; + } + } + + return 0; +} + void hexagram_cluster_draw_bg(hexagram_cluster *cluster, cairo_t *cr) { /*