Consolidate cluster state into cluster object
This commit is contained in:
		
							parent
							
								
									d167b58b24
								
							
						
					
					
						commit
						7cd217bef4
					
				
					 3 changed files with 26 additions and 25 deletions
				
			
		| 
						 | 
				
			
			@ -10,33 +10,30 @@
 | 
			
		|||
#include <hexagram/window.h>
 | 
			
		||||
#include <hexagram/cluster.h>
 | 
			
		||||
 | 
			
		||||
static hexagram_cluster_state state = {
 | 
			
		||||
    0, 0, 0, 0
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static void cluster_update(struct can_frame *frame) {
 | 
			
		||||
static void cluster_update(hexagram_cluster *cluster,
 | 
			
		||||
                           struct can_frame *frame) {
 | 
			
		||||
    switch (frame->can_id) {
 | 
			
		||||
        case 0x280: {
 | 
			
		||||
            state.rpm = 0.25 *
 | 
			
		||||
            cluster->state.rpm = 0.25 *
 | 
			
		||||
                (double)(frame->data[2] | (frame->data[3] << 8));
 | 
			
		||||
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        case 0x288: {
 | 
			
		||||
            state.temp = (double)(frame->data[1] - 48 * 0.75);
 | 
			
		||||
            cluster->state.temp = (double)(frame->data[1] - 48 * 0.75);
 | 
			
		||||
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        case 0x320: {
 | 
			
		||||
            state.fuel = (double)(frame->data[2] & 0xf) / 16.0;
 | 
			
		||||
            cluster->state.fuel = (double)(frame->data[2] & 0xf) / 16.0;
 | 
			
		||||
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        case 0x5a0: {
 | 
			
		||||
            state.rps = 0.001 * (double)(frame->data[1]
 | 
			
		||||
            cluster->state.rps = 0.001 * (double)(frame->data[1]
 | 
			
		||||
                                               | (frame->data[2] << 8));
 | 
			
		||||
 | 
			
		||||
            break;
 | 
			
		||||
| 
						 | 
				
			
			@ -136,7 +133,7 @@ int main(int argc, char **argv) {
 | 
			
		|||
                case MapNotify:
 | 
			
		||||
                case Expose:
 | 
			
		||||
                    hexagram_window_refresh_bg(window);
 | 
			
		||||
                    hexagram_cluster_draw_fg(cluster, fg, &state);
 | 
			
		||||
                    hexagram_cluster_draw_fg(cluster, fg);
 | 
			
		||||
                    hexagram_window_swap_buffer(window);
 | 
			
		||||
 | 
			
		||||
                    break;
 | 
			
		||||
| 
						 | 
				
			
			@ -168,14 +165,14 @@ int main(int argc, char **argv) {
 | 
			
		|||
                case 0x5a0: {
 | 
			
		||||
                    struct timeval now;
 | 
			
		||||
 | 
			
		||||
                    cluster_update(&frame);
 | 
			
		||||
                    cluster_update(cluster, &frame);
 | 
			
		||||
 | 
			
		||||
                    (void)gettimeofday(&now, NULL);
 | 
			
		||||
 | 
			
		||||
                    if (now.tv_sec  - last.tv_sec
 | 
			
		||||
                     || now.tv_usec - last.tv_usec > 16666) {
 | 
			
		||||
                        hexagram_window_refresh_bg(window);
 | 
			
		||||
                        hexagram_cluster_draw_fg(cluster, fg, &state);
 | 
			
		||||
                        hexagram_cluster_draw_fg(cluster, fg);
 | 
			
		||||
                        hexagram_window_swap_buffer(window);
 | 
			
		||||
 | 
			
		||||
                        (void)memcpy(&last, &now, sizeof(now));
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,10 +9,6 @@
 | 
			
		|||
#include <hexagram/fuel.h>
 | 
			
		||||
#include <hexagram/mfd.h>
 | 
			
		||||
 | 
			
		||||
typedef struct _hexagram_cluster_state {
 | 
			
		||||
    double rpm, rps, temp, fuel;
 | 
			
		||||
} hexagram_cluster_state;
 | 
			
		||||
 | 
			
		||||
typedef struct _hexagram_cluster {
 | 
			
		||||
    hexagram_tacho  tacho;
 | 
			
		||||
    hexagram_speedo speedo;
 | 
			
		||||
| 
						 | 
				
			
			@ -22,6 +18,10 @@ typedef struct _hexagram_cluster {
 | 
			
		|||
 | 
			
		||||
    double width,
 | 
			
		||||
           height;
 | 
			
		||||
 | 
			
		||||
    struct {
 | 
			
		||||
        double rpm, rps, temp, fuel;
 | 
			
		||||
    } state;
 | 
			
		||||
} hexagram_cluster;
 | 
			
		||||
 | 
			
		||||
hexagram_cluster *hexagram_cluster_new(double width,
 | 
			
		||||
| 
						 | 
				
			
			@ -31,7 +31,6 @@ void hexagram_cluster_draw_bg(hexagram_cluster *cluster,
 | 
			
		|||
                              cairo_t *cr);
 | 
			
		||||
 | 
			
		||||
void hexagram_cluster_draw_fg(hexagram_cluster *cluster,
 | 
			
		||||
                              cairo_t *cr,
 | 
			
		||||
                              hexagram_cluster_state *state);
 | 
			
		||||
                              cairo_t *cr);
 | 
			
		||||
 | 
			
		||||
#endif /* _HEXAGRAM_CLUSTER_H */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,4 +1,5 @@
 | 
			
		|||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
 | 
			
		||||
#include <hexagram/cluster.h>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -41,6 +42,11 @@ hexagram_cluster *hexagram_cluster_new(double width, double height) {
 | 
			
		|||
    cluster->width  = width;
 | 
			
		||||
    cluster->height = height;
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
     * Initialize mutable state
 | 
			
		||||
     */
 | 
			
		||||
    memset(&cluster->state, '\0', sizeof(cluster->state));
 | 
			
		||||
 | 
			
		||||
    return cluster;
 | 
			
		||||
 | 
			
		||||
error_malloc_cluster:
 | 
			
		||||
| 
						 | 
				
			
			@ -63,16 +69,15 @@ void hexagram_cluster_draw_bg(hexagram_cluster *cluster,
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
void hexagram_cluster_draw_fg(hexagram_cluster *cluster,
 | 
			
		||||
                              cairo_t *cr,
 | 
			
		||||
                              hexagram_cluster_state *state) {
 | 
			
		||||
    hexagram_tacho_draw_needle(&cluster->tacho, cr, state->rpm);
 | 
			
		||||
                              cairo_t *cr) {
 | 
			
		||||
    hexagram_tacho_draw_needle(&cluster->tacho, cr, cluster->state.rpm);
 | 
			
		||||
 | 
			
		||||
    hexagram_speedo_draw_needle(&cluster->speedo, cr,
 | 
			
		||||
                                (2.032 * state->rps * 3600) / 1000.0);
 | 
			
		||||
                                (2.032 * cluster->state.rps * 3600) / 1000.0);
 | 
			
		||||
 | 
			
		||||
    hexagram_thermo_draw_needle(&cluster->thermo, cr,
 | 
			
		||||
                                state->temp);
 | 
			
		||||
                                cluster->state.temp);
 | 
			
		||||
 | 
			
		||||
    hexagram_fuel_draw_needle(&cluster->fuel, cr,
 | 
			
		||||
                              state->fuel);
 | 
			
		||||
                              cluster->state.fuel);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		
		Reference in a new issue