gbacycle

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