gbacycle

annotate src/dashboard.c @ 0:858dd5fbfef2

gbacycle import
author John Tsiombikas <nuclear@member.fsf.org>
date Thu, 08 Mar 2012 14:38:21 +0200
parents
children
rev   line source
nuclear@0 1 #include <string.h>
nuclear@0 2 #include "dashboard.h"
nuclear@0 3 #include "gbasys.h"
nuclear@0 4 #include "gbacycle.h"
nuclear@0 5
nuclear@0 6 /* data files in C arrays */
nuclear@0 7 #include "data/dashbg.h" /* dash_img */
nuclear@0 8 #include "data/7seg-big.h" /* digits_img */
nuclear@0 9 #include "data/7seg-sm.h" /* digits_small_img */
nuclear@0 10 #include "data/led_blue.h" /* led_blue_img */
nuclear@0 11 #include "data/led_red.h" /* led_red_img */
nuclear@0 12 #include "data/led_off.h" /* led_off_img */
nuclear@0 13
nuclear@0 14 static void dash_draw(void);
nuclear@0 15 static void draw_speed(void);
nuclear@0 16 static void draw_dist(void);
nuclear@0 17 static void draw_leds(void);
nuclear@0 18 static void dash_keyb(unsigned int keys);
nuclear@0 19
nuclear@0 20 static struct pixel_buffer dash;
nuclear@0 21 static struct pixel_buffer digits, digits_small;
nuclear@0 22 static struct pixel_buffer led_blue, led_red, led_off;
nuclear@0 23
nuclear@0 24 static struct {
nuclear@0 25 int x, y;
nuclear@0 26 } ledpos[] = {
nuclear@0 27 {31, 138}, {25, 130}, {19, 120}, {16, 111},
nuclear@0 28 {13, 100}, {12, 90}, {12, 79}, {14, 70},
nuclear@0 29 {17, 60}, {22, 51}, {28, 42}, {35, 34},
nuclear@0 30 {44, 27}, {52, 22}, {63, 17}, {72, 14},
nuclear@0 31 {83, 13},
nuclear@0 32 {92, 13}, {103, 14}, {112, 17}, {123, 22},
nuclear@0 33 {131, 27}, {140, 34}, {147, 42}, {153, 51},
nuclear@0 34 {158, 60}, {161, 70}, {163, 79}, {163, 90},
nuclear@0 35 {162, 100}, {159, 111}, {156, 120}, {150, 130},
nuclear@0 36 {144, 138}
nuclear@0 37 };
nuclear@0 38 static const int nleds = sizeof ledpos / sizeof *ledpos;
nuclear@0 39
nuclear@0 40 void init_dash(void)
nuclear@0 41 {
nuclear@0 42 dash.x = 183;
nuclear@0 43 dash.y = 160;
nuclear@0 44 dash.bpp = 16;
nuclear@0 45 dash.pixels = (unsigned short*)dash_img;
nuclear@0 46
nuclear@0 47 digits.x = 300;
nuclear@0 48 digits.y = 34;
nuclear@0 49 digits.bpp = 16;
nuclear@0 50 digits.pixels = (unsigned short*)digits_img;
nuclear@0 51
nuclear@0 52 digits_small.x = 150;
nuclear@0 53 digits_small.y = 17;
nuclear@0 54 digits_small.bpp = 16;
nuclear@0 55 digits_small.pixels = (unsigned short*)digits_small_img;
nuclear@0 56
nuclear@0 57 led_blue.x = led_blue.y = 8;
nuclear@0 58 led_blue.bpp = 16;
nuclear@0 59 led_blue.pixels = (unsigned short*)led_blue_img;
nuclear@0 60
nuclear@0 61 led_red.x = led_red.y = 8;
nuclear@0 62 led_red.bpp = 16;
nuclear@0 63 led_red.pixels = (unsigned short*)led_red_img;
nuclear@0 64
nuclear@0 65 led_off.x = led_off.y = 8;
nuclear@0 66 led_off.bpp = 16;
nuclear@0 67 led_off.pixels = (unsigned short*)led_off_img;
nuclear@0 68 }
nuclear@0 69
nuclear@0 70 void start_dash(void)
nuclear@0 71 {
nuclear@0 72 draw = dash_draw;
nuclear@0 73 keyb = dash_keyb;
nuclear@0 74 }
nuclear@0 75
nuclear@0 76 static void dash_draw(void)
nuclear@0 77 {
nuclear@0 78 dash_keyb(get_key_state(KEY_ALL));
nuclear@0 79
nuclear@0 80 clear_buffer(back_buffer, 0);
nuclear@0 81
nuclear@0 82 /* backdrop */
nuclear@0 83 blit(&dash, 0, 0, -1, -1, back_buffer, 28, 0);
nuclear@0 84
nuclear@0 85 draw_speed();
nuclear@0 86 draw_dist();
nuclear@0 87 draw_leds();
nuclear@0 88
nuclear@0 89 if(dbg) {
nuclear@0 90 set_text_color(RGB(255, 0, 0), RGB(1, 2, 155));
nuclear@0 91 draw_string("rot/s", 152, 92, back_buffer);
nuclear@0 92 draw_string("rot", 156, 144, back_buffer);
nuclear@0 93 }
nuclear@0 94
nuclear@0 95 flip();
nuclear@0 96 }
nuclear@0 97
nuclear@0 98 static void draw_speed(void)
nuclear@0 99 {
nuclear@0 100 int i, digit, pos = 120;
nuclear@0 101 int speed = dbg ? (speed_rp2s / 2) : speed_kmh;
nuclear@0 102
nuclear@0 103 for(i=0; i<2; i++) {
nuclear@0 104 digit = speed % 10;
nuclear@0 105 speed /= 10;
nuclear@0 106
nuclear@0 107 blit(&digits, digit * 30, 0, 30, -1, back_buffer, pos, 75);
nuclear@0 108
nuclear@0 109 pos -= 30;
nuclear@0 110 }
nuclear@0 111 }
nuclear@0 112
nuclear@0 113 static void draw_dist(void)
nuclear@0 114 {
nuclear@0 115 int i, digit, pos = 140;
nuclear@0 116 long dist = dbg ? nrot : (dist_cm / 10000);
nuclear@0 117
nuclear@0 118 for(i=0; i<5; i++) {
nuclear@0 119 digit = dist % 10;
nuclear@0 120 dist /= 10;
nuclear@0 121
nuclear@0 122 blit(&digits_small, digit * 15, 0, 15, -1, back_buffer, pos, 136);
nuclear@0 123
nuclear@0 124 pos -= 15;
nuclear@0 125 }
nuclear@0 126 }
nuclear@0 127
nuclear@0 128 static void draw_leds(void)
nuclear@0 129 {
nuclear@0 130 int i;
nuclear@0 131 int speed = dbg ? (speed_rp2s / 2) : speed_kmh;
nuclear@0 132
nuclear@0 133 for(i=0; i<nleds; i++) {
nuclear@0 134 struct pixel_buffer *img;
nuclear@0 135
nuclear@0 136 if(i < speed) {
nuclear@0 137 img = i < 20 ? &led_blue : &led_red;
nuclear@0 138 } else {
nuclear@0 139 img = &led_off;
nuclear@0 140 }
nuclear@0 141 blit(img, 0, 0, -1, -1, back_buffer, 28 + ledpos[i].x, ledpos[i].y);
nuclear@0 142 }
nuclear@0 143 }
nuclear@0 144
nuclear@0 145 static void dash_keyb(unsigned int keys)
nuclear@0 146 {
nuclear@0 147 if(keys & KEY_UP) {
nuclear@0 148 speed_kmh += 1;
nuclear@0 149 }
nuclear@0 150 if((keys & KEY_DOWN) && speed_kmh > 0) {
nuclear@0 151 speed_kmh -= 1;
nuclear@0 152 }
nuclear@0 153
nuclear@0 154 if(keys & KEY_RIGHT) {
nuclear@0 155 dist_cm += 10;
nuclear@0 156 }
nuclear@0 157 if((keys & KEY_LEFT) && dist_cm >= 10) {
nuclear@0 158 dist_cm -= 10;
nuclear@0 159 }
nuclear@0 160 }