gbacycle
diff 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 |
line diff
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/src/dashboard.c Thu Mar 08 14:38:21 2012 +0200 1.3 @@ -0,0 +1,160 @@ 1.4 +#include <string.h> 1.5 +#include "dashboard.h" 1.6 +#include "gbasys.h" 1.7 +#include "gbacycle.h" 1.8 + 1.9 +/* data files in C arrays */ 1.10 +#include "data/dashbg.h" /* dash_img */ 1.11 +#include "data/7seg-big.h" /* digits_img */ 1.12 +#include "data/7seg-sm.h" /* digits_small_img */ 1.13 +#include "data/led_blue.h" /* led_blue_img */ 1.14 +#include "data/led_red.h" /* led_red_img */ 1.15 +#include "data/led_off.h" /* led_off_img */ 1.16 + 1.17 +static void dash_draw(void); 1.18 +static void draw_speed(void); 1.19 +static void draw_dist(void); 1.20 +static void draw_leds(void); 1.21 +static void dash_keyb(unsigned int keys); 1.22 + 1.23 +static struct pixel_buffer dash; 1.24 +static struct pixel_buffer digits, digits_small; 1.25 +static struct pixel_buffer led_blue, led_red, led_off; 1.26 + 1.27 +static struct { 1.28 + int x, y; 1.29 +} ledpos[] = { 1.30 + {31, 138}, {25, 130}, {19, 120}, {16, 111}, 1.31 + {13, 100}, {12, 90}, {12, 79}, {14, 70}, 1.32 + {17, 60}, {22, 51}, {28, 42}, {35, 34}, 1.33 + {44, 27}, {52, 22}, {63, 17}, {72, 14}, 1.34 + {83, 13}, 1.35 + {92, 13}, {103, 14}, {112, 17}, {123, 22}, 1.36 + {131, 27}, {140, 34}, {147, 42}, {153, 51}, 1.37 + {158, 60}, {161, 70}, {163, 79}, {163, 90}, 1.38 + {162, 100}, {159, 111}, {156, 120}, {150, 130}, 1.39 + {144, 138} 1.40 +}; 1.41 +static const int nleds = sizeof ledpos / sizeof *ledpos; 1.42 + 1.43 +void init_dash(void) 1.44 +{ 1.45 + dash.x = 183; 1.46 + dash.y = 160; 1.47 + dash.bpp = 16; 1.48 + dash.pixels = (unsigned short*)dash_img; 1.49 + 1.50 + digits.x = 300; 1.51 + digits.y = 34; 1.52 + digits.bpp = 16; 1.53 + digits.pixels = (unsigned short*)digits_img; 1.54 + 1.55 + digits_small.x = 150; 1.56 + digits_small.y = 17; 1.57 + digits_small.bpp = 16; 1.58 + digits_small.pixels = (unsigned short*)digits_small_img; 1.59 + 1.60 + led_blue.x = led_blue.y = 8; 1.61 + led_blue.bpp = 16; 1.62 + led_blue.pixels = (unsigned short*)led_blue_img; 1.63 + 1.64 + led_red.x = led_red.y = 8; 1.65 + led_red.bpp = 16; 1.66 + led_red.pixels = (unsigned short*)led_red_img; 1.67 + 1.68 + led_off.x = led_off.y = 8; 1.69 + led_off.bpp = 16; 1.70 + led_off.pixels = (unsigned short*)led_off_img; 1.71 +} 1.72 + 1.73 +void start_dash(void) 1.74 +{ 1.75 + draw = dash_draw; 1.76 + keyb = dash_keyb; 1.77 +} 1.78 + 1.79 +static void dash_draw(void) 1.80 +{ 1.81 + dash_keyb(get_key_state(KEY_ALL)); 1.82 + 1.83 + clear_buffer(back_buffer, 0); 1.84 + 1.85 + /* backdrop */ 1.86 + blit(&dash, 0, 0, -1, -1, back_buffer, 28, 0); 1.87 + 1.88 + draw_speed(); 1.89 + draw_dist(); 1.90 + draw_leds(); 1.91 + 1.92 + if(dbg) { 1.93 + set_text_color(RGB(255, 0, 0), RGB(1, 2, 155)); 1.94 + draw_string("rot/s", 152, 92, back_buffer); 1.95 + draw_string("rot", 156, 144, back_buffer); 1.96 + } 1.97 + 1.98 + flip(); 1.99 +} 1.100 + 1.101 +static void draw_speed(void) 1.102 +{ 1.103 + int i, digit, pos = 120; 1.104 + int speed = dbg ? (speed_rp2s / 2) : speed_kmh; 1.105 + 1.106 + for(i=0; i<2; i++) { 1.107 + digit = speed % 10; 1.108 + speed /= 10; 1.109 + 1.110 + blit(&digits, digit * 30, 0, 30, -1, back_buffer, pos, 75); 1.111 + 1.112 + pos -= 30; 1.113 + } 1.114 +} 1.115 + 1.116 +static void draw_dist(void) 1.117 +{ 1.118 + int i, digit, pos = 140; 1.119 + long dist = dbg ? nrot : (dist_cm / 10000); 1.120 + 1.121 + for(i=0; i<5; i++) { 1.122 + digit = dist % 10; 1.123 + dist /= 10; 1.124 + 1.125 + blit(&digits_small, digit * 15, 0, 15, -1, back_buffer, pos, 136); 1.126 + 1.127 + pos -= 15; 1.128 + } 1.129 +} 1.130 + 1.131 +static void draw_leds(void) 1.132 +{ 1.133 + int i; 1.134 + int speed = dbg ? (speed_rp2s / 2) : speed_kmh; 1.135 + 1.136 + for(i=0; i<nleds; i++) { 1.137 + struct pixel_buffer *img; 1.138 + 1.139 + if(i < speed) { 1.140 + img = i < 20 ? &led_blue : &led_red; 1.141 + } else { 1.142 + img = &led_off; 1.143 + } 1.144 + blit(img, 0, 0, -1, -1, back_buffer, 28 + ledpos[i].x, ledpos[i].y); 1.145 + } 1.146 +} 1.147 + 1.148 +static void dash_keyb(unsigned int keys) 1.149 +{ 1.150 + if(keys & KEY_UP) { 1.151 + speed_kmh += 1; 1.152 + } 1.153 + if((keys & KEY_DOWN) && speed_kmh > 0) { 1.154 + speed_kmh -= 1; 1.155 + } 1.156 + 1.157 + if(keys & KEY_RIGHT) { 1.158 + dist_cm += 10; 1.159 + } 1.160 + if((keys & KEY_LEFT) && dist_cm >= 10) { 1.161 + dist_cm -= 10; 1.162 + } 1.163 +}