From 0083200cfa7cdb577731d909a479cab85a7297e4 Mon Sep 17 00:00:00 2001 From: XANTRONIX Development Date: Thu, 13 Jun 2019 16:54:55 -0500 Subject: [PATCH] Implement hexagram_cluster_update() Implement hexagram_cluster_update() to act as a central point to decode CAN frames relevant to the gauge cluster --- examples/cluster.c | 32 ++------------------------------ include/hexagram/cluster.h | 5 +++++ src/cluster.c | 33 +++++++++++++++++++++++++++++++++ 3 files changed, 40 insertions(+), 30 deletions(-) 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) { /*