diff options
author | Jens Arnold <amiconn@rockbox.org> | 2004-10-17 00:54:09 +0000 |
---|---|---|
committer | Jens Arnold <amiconn@rockbox.org> | 2004-10-17 00:54:09 +0000 |
commit | 79afbafa669bee52059d980ae887dfa06948c252 (patch) | |
tree | b359f4cb336fbd477ec990a37b86a73f8266e455 /apps/plugins | |
parent | 7c2496d35a1046d6383a7df8a78a1e9ba5cf7607 (diff) | |
download | rockbox-79afbafa669bee52059d980ae887dfa06948c252.tar.gz rockbox-79afbafa669bee52059d980ae887dfa06948c252.zip |
Plugin rework 2: (most) Compile-time keyboard configuration, for Ondio adaption. (all) Now using the default event handler, standard placement is now in switch() default case. (calendar, chip8) Fixed usb handling.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@5295 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/plugins')
-rw-r--r-- | apps/plugins/SOURCES | 22 | ||||
-rw-r--r-- | apps/plugins/bounce.c | 27 | ||||
-rw-r--r-- | apps/plugins/calculator.c | 84 | ||||
-rw-r--r-- | apps/plugins/calendar.c | 4 | ||||
-rw-r--r-- | apps/plugins/chip8.c | 87 | ||||
-rw-r--r-- | apps/plugins/clock.c | 46 | ||||
-rw-r--r-- | apps/plugins/cube.c | 58 |
7 files changed, 236 insertions, 92 deletions
diff --git a/apps/plugins/SOURCES b/apps/plugins/SOURCES index 80a6fde2e0..b2f632032c 100644 --- a/apps/plugins/SOURCES +++ b/apps/plugins/SOURCES | |||
@@ -1,4 +1,4 @@ | |||
1 | /* plugins common to both Player+Recorder model */ | 1 | /* plugins common to all models */ |
2 | battery_test.c | 2 | battery_test.c |
3 | favorites.c | 3 | favorites.c |
4 | firmware_flash.c | 4 | firmware_flash.c |
@@ -11,20 +11,24 @@ stopwatch.c | |||
11 | vbrfix.c | 11 | vbrfix.c |
12 | viewer.c | 12 | viewer.c |
13 | 13 | ||
14 | #ifdef HAVE_LCD_BITMAP /* recorder model only */ | 14 | #ifdef HAVE_LCD_BITMAP /* Recorder/Ondio models only */ |
15 | bounce.c | ||
16 | calculator.c | ||
17 | chip8.c | ||
18 | cube.c | ||
15 | grayscale.c | 19 | grayscale.c |
16 | jpeg.c | 20 | jpeg.c |
17 | rockblox.c | 21 | rockblox.c |
18 | snow.c | 22 | snow.c |
19 | video.c | 23 | video.c |
20 | #if CONFIG_KEYPAD != ONDIO_PAD | 24 | |
21 | /* gradually bring in the ones not working yet */ | 25 | #ifdef HAVE_RTC /* Recorder models only */ |
22 | bounce.c | ||
23 | calculator.c | ||
24 | calendar.c | 26 | calendar.c |
25 | chip8.c | ||
26 | clock.c | 27 | clock.c |
27 | cube.c | 28 | #endif |
29 | |||
30 | #if CONFIG_KEYPAD != ONDIO_PAD | ||
31 | /* gradually bring in the ones not working yet */ | ||
28 | flipit.c | 32 | flipit.c |
29 | mandelbrot.c | 33 | mandelbrot.c |
30 | minesweeper.c | 34 | minesweeper.c |
diff --git a/apps/plugins/bounce.c b/apps/plugins/bounce.c index d4244745bc..9cf1ccf341 100644 --- a/apps/plugins/bounce.c +++ b/apps/plugins/bounce.c | |||
@@ -30,6 +30,17 @@ | |||
30 | #define XSPEED 3 | 30 | #define XSPEED 3 |
31 | #define YADD -4 | 31 | #define YADD -4 |
32 | 32 | ||
33 | /* variable button definitions */ | ||
34 | #if CONFIG_KEYPAD == RECORDER_PAD | ||
35 | #define BOUNCE_QUIT (BUTTON_OFF | BUTTON_REL) | ||
36 | #define BOUNCE_MODE (BUTTON_ON | BUTTON_REL) | ||
37 | |||
38 | #elif CONFIG_KEYPAD == ONDIO_PAD | ||
39 | #define BOUNCE_QUIT (BUTTON_OFF | BUTTON_REL) | ||
40 | #define BOUNCE_MODE (BUTTON_MENU | BUTTON_REL) | ||
41 | |||
42 | #endif | ||
43 | |||
33 | static struct plugin_api* rb; | 44 | static struct plugin_api* rb; |
34 | 45 | ||
35 | static unsigned char table[]={ | 46 | static unsigned char table[]={ |
@@ -172,6 +183,7 @@ struct counter values[]={ | |||
172 | {"ydistt", -6}, | 183 | {"ydistt", -6}, |
173 | }; | 184 | }; |
174 | 185 | ||
186 | #ifdef HAVE_RTC | ||
175 | static unsigned char yminute[]={ | 187 | static unsigned char yminute[]={ |
176 | 53,53,52,52,51,50,49,47,46,44,42,40,38,36,34,32,29,27,25,23,21,19,17,16,14,13,12,11,11,10,10,10,11,11,12,13,14,16,17,19,21,23,25,27,29,31,34,36,38,40,42,44,46,47,49,50,51,52,52,53, | 188 | 53,53,52,52,51,50,49,47,46,44,42,40,38,36,34,32,29,27,25,23,21,19,17,16,14,13,12,11,11,10,10,10,11,11,12,13,14,16,17,19,21,23,25,27,29,31,34,36,38,40,42,44,46,47,49,50,51,52,52,53, |
177 | }; | 189 | }; |
@@ -218,6 +230,7 @@ static void addclock(void) | |||
218 | yminute[(i+1)%60]); | 230 | yminute[(i+1)%60]); |
219 | } | 231 | } |
220 | } | 232 | } |
233 | #endif /* HAVE_RTC */ | ||
221 | 234 | ||
222 | static int scrollit(void) | 235 | static int scrollit(void) |
223 | { | 236 | { |
@@ -236,10 +249,10 @@ static int scrollit(void) | |||
236 | while(1) | 249 | while(1) |
237 | { | 250 | { |
238 | b = rb->button_get_w_tmo(HZ/10); | 251 | b = rb->button_get_w_tmo(HZ/10); |
239 | if ( b == (BUTTON_OFF|BUTTON_REL) ) | 252 | if ( b == BOUNCE_QUIT ) |
240 | return 0; | 253 | return 0; |
241 | 254 | ||
242 | if ( b == (BUTTON_ON|BUTTON_REL) ) | 255 | if ( b == BOUNCE_MODE ) |
243 | return 1; | 256 | return 1; |
244 | 257 | ||
245 | if ( rb->default_event_handler(b) == SYS_USB_CONNECTED ) | 258 | if ( rb->default_event_handler(b) == SYS_USB_CONNECTED ) |
@@ -256,7 +269,9 @@ static int scrollit(void) | |||
256 | yy += YADD; | 269 | yy += YADD; |
257 | xx+= LCD_WIDTH/LETTERS_ON_SCREEN; | 270 | xx+= LCD_WIDTH/LETTERS_ON_SCREEN; |
258 | } | 271 | } |
272 | #ifdef HAVE_RTC | ||
259 | addclock(); | 273 | addclock(); |
274 | #endif | ||
260 | rb->lcd_update(); | 275 | rb->lcd_update(); |
261 | 276 | ||
262 | x-= XSPEED; | 277 | x-= XSPEED; |
@@ -293,10 +308,10 @@ static int loopit(void) | |||
293 | while(1) | 308 | while(1) |
294 | { | 309 | { |
295 | b = rb->button_get_w_tmo(HZ/10); | 310 | b = rb->button_get_w_tmo(HZ/10); |
296 | if ( b == (BUTTON_OFF|BUTTON_REL) ) | 311 | if ( b == BOUNCE_QUIT ) |
297 | return 0; | 312 | return 0; |
298 | 313 | ||
299 | if ( b == (BUTTON_ON|BUTTON_REL) ) | 314 | if ( b == BOUNCE_MODE ) |
300 | return 1; | 315 | return 1; |
301 | 316 | ||
302 | if ( rb->default_event_handler(b) == SYS_USB_CONNECTED ) | 317 | if ( rb->default_event_handler(b) == SYS_USB_CONNECTED ) |
@@ -309,7 +324,9 @@ static int loopit(void) | |||
309 | x+= speed[xsanke&15] + values[NUM_XADD].num; | 324 | x+= speed[xsanke&15] + values[NUM_XADD].num; |
310 | 325 | ||
311 | rb->lcd_clear_display(); | 326 | rb->lcd_clear_display(); |
327 | #ifdef HAVE_RTC | ||
312 | addclock(); | 328 | addclock(); |
329 | #endif | ||
313 | if(timeout) { | 330 | if(timeout) { |
314 | switch(b) { | 331 | switch(b) { |
315 | case BUTTON_LEFT: | 332 | case BUTTON_LEFT: |
@@ -402,7 +419,7 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter) | |||
402 | 419 | ||
403 | rb->lcd_setfont(FONT_UI); | 420 | rb->lcd_setfont(FONT_UI); |
404 | 421 | ||
405 | return h = 0 ? PLUGIN_OK : PLUGIN_USB_CONNECTED; | 422 | return (h == 0) ? PLUGIN_OK : PLUGIN_USB_CONNECTED; |
406 | } | 423 | } |
407 | 424 | ||
408 | #endif | 425 | #endif |
diff --git a/apps/plugins/calculator.c b/apps/plugins/calculator.c index 35ebea6e70..5e8c31aa0f 100644 --- a/apps/plugins/calculator.c +++ b/apps/plugins/calculator.c | |||
@@ -104,6 +104,22 @@ F3: equal to "=" | |||
104 | #define SIGN(x) ((x)<0?-1:1) | 104 | #define SIGN(x) ((x)<0?-1:1) |
105 | #define ABS(x) ((x)<0?-(x):(x)) | 105 | #define ABS(x) ((x)<0?-(x):(x)) |
106 | 106 | ||
107 | /* variable button definitions */ | ||
108 | #if CONFIG_KEYPAD == RECORDER_PAD | ||
109 | #define CALCULATOR_QUIT BUTTON_OFF | ||
110 | #define CALCULATOR_INPUT BUTTON_PLAY | ||
111 | #define CALCULATOR_CALC BUTTON_F3 | ||
112 | #define CALCULATOR_OPERATORS BUTTON_F2 | ||
113 | #define CALCULATOR_CLEAR BUTTON_F1 | ||
114 | |||
115 | #elif CONFIG_KEYPAD == ONDIO_PAD | ||
116 | #define CALCULATOR_QUIT BUTTON_OFF | ||
117 | #define CALCULATOR_INPUT_CALC_PRE BUTTON_MENU | ||
118 | #define CALCULATOR_INPUT (BUTTON_MENU | BUTTON_REL) | ||
119 | #define CALCULATOR_CALC (BUTTON_MENU | BUTTON_REPEAT) | ||
120 | |||
121 | #endif | ||
122 | |||
107 | static struct plugin_api* rb; | 123 | static struct plugin_api* rb; |
108 | 124 | ||
109 | enum { | 125 | enum { |
@@ -187,6 +203,7 @@ int m, n, prev_m, prev_n; /* position index for button */ | |||
187 | #define CAL_BUTTON (m*5+n) | 203 | #define CAL_BUTTON (m*5+n) |
188 | 204 | ||
189 | int btn = BUTTON_NONE; | 205 | int btn = BUTTON_NONE; |
206 | int lastbtn = BUTTON_NONE; | ||
190 | 207 | ||
191 | /* Status of calculator */ | 208 | /* Status of calculator */ |
192 | enum {cal_normal, /* 0, normal status, display result */ | 209 | enum {cal_normal, /* 0, normal status, display result */ |
@@ -1090,7 +1107,7 @@ Handle buttons on basic screen | |||
1090 | ----------------------------------------------------------------------- */ | 1107 | ----------------------------------------------------------------------- */ |
1091 | void basicButtonsProcess(void){ | 1108 | void basicButtonsProcess(void){ |
1092 | switch (btn) { | 1109 | switch (btn) { |
1093 | case BUTTON_PLAY: | 1110 | case CALCULATOR_INPUT: |
1094 | if (calStatus == cal_error && (CAL_BUTTON != btn_C) ) break; | 1111 | if (calStatus == cal_error && (CAL_BUTTON != btn_C) ) break; |
1095 | flashButton(CAL_BUTTON); | 1112 | flashButton(CAL_BUTTON); |
1096 | switch( CAL_BUTTON ){ | 1113 | switch( CAL_BUTTON ){ |
@@ -1143,7 +1160,9 @@ void basicButtonsProcess(void){ | |||
1143 | case btn_add: | 1160 | case btn_add: |
1144 | if(!operInputted) {twoOperands(); operInputted = true;} | 1161 | if(!operInputted) {twoOperands(); operInputted = true;} |
1145 | oper = buttonChar[basicButtons][m][n][0]; | 1162 | oper = buttonChar[basicButtons][m][n][0]; |
1146 | case_BUTTON_F2: /* F2 shortkey entrance */ | 1163 | #ifdef CALCULATOR_OPERATORS |
1164 | case_cycle_operators: /* F2 shortkey entrance */ | ||
1165 | #endif | ||
1147 | calStatus = cal_normal; | 1166 | calStatus = cal_normal; |
1148 | formatResult(); | 1167 | formatResult(); |
1149 | operand = result; | 1168 | operand = result; |
@@ -1159,7 +1178,8 @@ void basicButtonsProcess(void){ | |||
1159 | } /* switch (CAL_BUTTON) */ | 1178 | } /* switch (CAL_BUTTON) */ |
1160 | break; | 1179 | break; |
1161 | 1180 | ||
1162 | case BUTTON_F2: | 1181 | #ifdef CALCULATOR_OPERATORS |
1182 | case CALCULATOR_OPERATORS: | ||
1163 | if (calStatus == cal_error) break; | 1183 | if (calStatus == cal_error) break; |
1164 | if (!operInputted) {twoOperands(); operInputted = true;} | 1184 | if (!operInputted) {twoOperands(); operInputted = true;} |
1165 | switch (oper){ | 1185 | switch (oper){ |
@@ -1169,9 +1189,11 @@ void basicButtonsProcess(void){ | |||
1169 | case '-': oper = '*'; flashButton(btn_time); break; | 1189 | case '-': oper = '*'; flashButton(btn_time); break; |
1170 | case '*': oper = '/'; flashButton(btn_div); break; | 1190 | case '*': oper = '/'; flashButton(btn_div); break; |
1171 | } | 1191 | } |
1172 | goto case_BUTTON_F2; | 1192 | goto case_cycle_operators; |
1173 | break; | 1193 | break; |
1174 | case BUTTON_F3: | 1194 | #endif |
1195 | |||
1196 | case CALCULATOR_CALC: | ||
1175 | if (calStatus == cal_error) break; | 1197 | if (calStatus == cal_error) break; |
1176 | flashButton(btn_equal); | 1198 | flashButton(btn_equal); |
1177 | goto case_btn_equal; | 1199 | goto case_btn_equal; |
@@ -1186,7 +1208,7 @@ Handle buttons on scientific screen | |||
1186 | ----------------------------------------------------------------------- */ | 1208 | ----------------------------------------------------------------------- */ |
1187 | void sciButtonsProcess(void){ | 1209 | void sciButtonsProcess(void){ |
1188 | switch (btn) { | 1210 | switch (btn) { |
1189 | case BUTTON_PLAY: | 1211 | case CALCULATOR_INPUT: |
1190 | if (calStatus == cal_error && (CAL_BUTTON != sci_sci) ) break; | 1212 | if (calStatus == cal_error && (CAL_BUTTON != sci_sci) ) break; |
1191 | flashButton(CAL_BUTTON); | 1213 | flashButton(CAL_BUTTON); |
1192 | switch( CAL_BUTTON ){ | 1214 | switch( CAL_BUTTON ){ |
@@ -1225,7 +1247,8 @@ void sciButtonsProcess(void){ | |||
1225 | } /* switch (CAL_BUTTON) */ | 1247 | } /* switch (CAL_BUTTON) */ |
1226 | break; | 1248 | break; |
1227 | 1249 | ||
1228 | case BUTTON_F2: | 1250 | #ifdef CALCULATOR_OPERATORS |
1251 | case CALCULATOR_OPERATORS: | ||
1229 | if (calStatus == cal_error) break; | 1252 | if (calStatus == cal_error) break; |
1230 | if (!operInputted) {twoOperands(); operInputted = true;} | 1253 | if (!operInputted) {twoOperands(); operInputted = true;} |
1231 | switch (oper){ | 1254 | switch (oper){ |
@@ -1240,7 +1263,9 @@ void sciButtonsProcess(void){ | |||
1240 | operand = result; | 1263 | operand = result; |
1241 | operandPower = power; | 1264 | operandPower = power; |
1242 | break; | 1265 | break; |
1243 | case BUTTON_F3: | 1266 | #endif |
1267 | |||
1268 | case CALCULATOR_CALC: | ||
1244 | if (calStatus == cal_error) break; | 1269 | if (calStatus == cal_error) break; |
1245 | formatResult(); | 1270 | formatResult(); |
1246 | calStatus = cal_normal; | 1271 | calStatus = cal_normal; |
@@ -1268,9 +1293,16 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter) | |||
1268 | while (calStatus != cal_exit ) { | 1293 | while (calStatus != cal_exit ) { |
1269 | btn = rb->button_get_w_tmo(HZ/2); | 1294 | btn = rb->button_get_w_tmo(HZ/2); |
1270 | switch (btn) { | 1295 | switch (btn) { |
1271 | case BUTTON_PLAY: | 1296 | case CALCULATOR_INPUT: |
1272 | case BUTTON_F2: | 1297 | case CALCULATOR_CALC: |
1273 | case BUTTON_F3: | 1298 | #ifdef CALCULATOR_INPUT_CALC_PRE |
1299 | if (lastbtn != CALCULATOR_INPUT_CALC_PRE) | ||
1300 | break; | ||
1301 | /* no unconditional break; here! */ | ||
1302 | #endif | ||
1303 | #ifdef CALCULATOR_OPERATORS | ||
1304 | case CALCULATOR_OPERATORS: | ||
1305 | #endif | ||
1274 | switch(buttonGroup){ | 1306 | switch(buttonGroup){ |
1275 | case basicButtons: | 1307 | case basicButtons: |
1276 | basicButtonsProcess(); | 1308 | basicButtonsProcess(); |
@@ -1281,18 +1313,20 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter) | |||
1281 | } | 1313 | } |
1282 | break; | 1314 | break; |
1283 | 1315 | ||
1284 | case BUTTON_F1: | 1316 | #ifdef CALCULATOR_CLEAR |
1285 | switch(calStatus){ | 1317 | case CALCULATOR_CLEAR: |
1286 | case cal_typing: | 1318 | switch(calStatus){ |
1287 | case cal_dotted: | 1319 | case cal_typing: |
1288 | doDelete(); | 1320 | case cal_dotted: |
1289 | break; | 1321 | doDelete(); |
1290 | default: /* cal_normal, cal_error, cal_exit */ | 1322 | break; |
1291 | clearMem(); | 1323 | default: /* cal_normal, cal_error, cal_exit */ |
1292 | break; | 1324 | clearMem(); |
1293 | } | 1325 | break; |
1294 | printResult(); | 1326 | } |
1295 | break; | 1327 | printResult(); |
1328 | break; | ||
1329 | #endif | ||
1296 | 1330 | ||
1297 | case BUTTON_LEFT: | 1331 | case BUTTON_LEFT: |
1298 | case BUTTON_LEFT | BUTTON_REPEAT: | 1332 | case BUTTON_LEFT | BUTTON_REPEAT: |
@@ -1304,7 +1338,7 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter) | |||
1304 | case BUTTON_DOWN | BUTTON_REPEAT: | 1338 | case BUTTON_DOWN | BUTTON_REPEAT: |
1305 | moveButton(); | 1339 | moveButton(); |
1306 | break; | 1340 | break; |
1307 | case BUTTON_OFF: | 1341 | case CALCULATOR_QUIT: |
1308 | calStatus = cal_exit; | 1342 | calStatus = cal_exit; |
1309 | printResult(); | 1343 | printResult(); |
1310 | break; | 1344 | break; |
@@ -1313,6 +1347,8 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter) | |||
1313 | return PLUGIN_USB_CONNECTED; | 1347 | return PLUGIN_USB_CONNECTED; |
1314 | break; | 1348 | break; |
1315 | } /* switch (btn) */ | 1349 | } /* switch (btn) */ |
1350 | if (btn != BUTTON_NONE) | ||
1351 | lastbtn = btn; | ||
1316 | } /* while (calStatus != cal_exit ) */ | 1352 | } /* while (calStatus != cal_exit ) */ |
1317 | 1353 | ||
1318 | /* rb->splash(HZ*2, true, "Hello world!"); */ | 1354 | /* rb->splash(HZ*2, true, "Hello world!"); */ |
diff --git a/apps/plugins/calendar.c b/apps/plugins/calendar.c index b501115618..8870554290 100644 --- a/apps/plugins/calendar.c +++ b/apps/plugins/calendar.c | |||
@@ -592,6 +592,7 @@ static bool any_events(struct shown *shown, bool force) | |||
592 | if(rb->default_event_handler(button) == SYS_USB_CONNECTED) | 592 | if(rb->default_event_handler(button) == SYS_USB_CONNECTED) |
593 | been_in_usb_mode = true; | 593 | been_in_usb_mode = true; |
594 | show_lines(lines_displayed,shown); | 594 | show_lines(lines_displayed,shown); |
595 | rb->lcd_update(); | ||
595 | break; | 596 | break; |
596 | } | 597 | } |
597 | } | 598 | } |
@@ -707,8 +708,7 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter) | |||
707 | break; | 708 | break; |
708 | 709 | ||
709 | case BUTTON_PLAY: | 710 | case BUTTON_PLAY: |
710 | if (any_events(&shown, true)) | 711 | any_events(&shown, true); |
711 | rb->usb_screen(); | ||
712 | draw_calendar(&shown); | 712 | draw_calendar(&shown); |
713 | break; | 713 | break; |
714 | 714 | ||
diff --git a/apps/plugins/chip8.c b/apps/plugins/chip8.c index 91c25302dd..aa81b263dc 100644 --- a/apps/plugins/chip8.c +++ b/apps/plugins/chip8.c | |||
@@ -23,6 +23,27 @@ | |||
23 | #ifdef HAVE_LCD_BITMAP | 23 | #ifdef HAVE_LCD_BITMAP |
24 | #ifndef SIMULATOR /* not unless lcd_blit() is implemented and mp3_xx stubbed */ | 24 | #ifndef SIMULATOR /* not unless lcd_blit() is implemented and mp3_xx stubbed */ |
25 | 25 | ||
26 | /* variable button definitions */ | ||
27 | #if CONFIG_KEYPAD == RECORDER_PAD /* only 9 out of 16 chip8 buttons */ | ||
28 | #define CHIP8_KEY1 BUTTON_F1 | ||
29 | #define CHIP8_KEY2 BUTTON_UP | ||
30 | #define CHIP8_KEY3 BUTTON_F3 | ||
31 | #define CHIP8_KEY4 BUTTON_LEFT | ||
32 | #define CHIP8_KEY5 BUTTON_PLAY | ||
33 | #define CHIP8_KEY6 BUTTON_RIGHT | ||
34 | #define CHIP8_KEY7 BUTTON_F2 | ||
35 | #define CHIP8_KEY8 BUTTON_DOWN | ||
36 | #define CHIP8_KEY9 BUTTON_ON | ||
37 | |||
38 | #elif CONFIG_KEYPAD == ONDIO_PAD /* even more limited */ | ||
39 | #define CHIP8_KEY2 BUTTON_UP | ||
40 | #define CHIP8_KEY4 BUTTON_LEFT | ||
41 | #define CHIP8_KEY5 BUTTON_MENU | ||
42 | #define CHIP8_KEY6 BUTTON_RIGHT | ||
43 | #define CHIP8_KEY8 BUTTON_DOWN | ||
44 | |||
45 | #endif | ||
46 | |||
26 | static struct plugin_api* rb; /* here is a global api struct pointer */ | 47 | static struct plugin_api* rb; /* here is a global api struct pointer */ |
27 | unsigned char lcd_framebuf[8][64]; /* frame buffer in hardware fomat */ | 48 | unsigned char lcd_framebuf[8][64]; /* frame buffer in hardware fomat */ |
28 | 49 | ||
@@ -407,33 +428,43 @@ static void chip8_update_display(void) | |||
407 | 428 | ||
408 | static void chip8_keyboard(void) | 429 | static void chip8_keyboard(void) |
409 | { | 430 | { |
410 | switch (rb->button_get(false)) | 431 | int button = rb->button_get(false); |
432 | switch (button) | ||
411 | { | 433 | { |
412 | case BUTTON_OFF: /* Abort Emulator */ | 434 | case BUTTON_OFF: /* Abort Emulator */ |
413 | chip8_running = false; | 435 | chip8_running = 0; |
414 | break; | 436 | break; |
415 | 437 | ||
416 | case BUTTON_UP: chip8_keys[2] = 1; break; | 438 | case CHIP8_KEY2: chip8_keys[2] = 1; break; |
417 | case BUTTON_UP | BUTTON_REL: chip8_keys[2] = 0; break; | 439 | case CHIP8_KEY2 | BUTTON_REL: chip8_keys[2] = 0; break; |
418 | case BUTTON_LEFT: chip8_keys[4] = 1; break; | 440 | case CHIP8_KEY4: chip8_keys[4] = 1; break; |
419 | case BUTTON_LEFT | BUTTON_REL: chip8_keys[4] = 0; break; | 441 | case CHIP8_KEY4 | BUTTON_REL: chip8_keys[4] = 0; break; |
420 | case BUTTON_RIGHT: chip8_keys[6] = 1; break; | 442 | case CHIP8_KEY6: chip8_keys[6] = 1; break; |
421 | case BUTTON_RIGHT | BUTTON_REL: chip8_keys[6] = 0; break; | 443 | case CHIP8_KEY6 | BUTTON_REL: chip8_keys[6] = 0; break; |
422 | case BUTTON_DOWN: chip8_keys[8] = 1; break; | 444 | case CHIP8_KEY8: chip8_keys[8] = 1; break; |
423 | case BUTTON_DOWN | BUTTON_REL: chip8_keys[8] = 0; break; | 445 | case CHIP8_KEY8 | BUTTON_REL: chip8_keys[8] = 0; break; |
424 | case BUTTON_PLAY: chip8_keys[5] = 1; break; | 446 | case CHIP8_KEY5: chip8_keys[5] = 1; break; |
425 | case BUTTON_PLAY | BUTTON_REL: chip8_keys[5] = 0; break; | 447 | case CHIP8_KEY5 | BUTTON_REL: chip8_keys[5] = 0; break; |
426 | case BUTTON_F1: chip8_keys[1] = 1; break; | 448 | #ifdef CHIP8_KEY1 |
427 | case BUTTON_F1 | BUTTON_REL: chip8_keys[1] = 0; break; | 449 | case CHIP8_KEY1: chip8_keys[1] = 1; break; |
428 | case BUTTON_F2: chip8_keys[7] = 1; break; | 450 | case CHIP8_KEY1 | BUTTON_REL: chip8_keys[1] = 0; break; |
429 | case BUTTON_F2 | BUTTON_REL: chip8_keys[7] = 0; break; | 451 | #endif |
430 | case BUTTON_F3: chip8_keys[3] = 1; break; | 452 | #ifdef CHIP8_KEY3 |
431 | case BUTTON_F3 | BUTTON_REL: chip8_keys[3] = 0; break; | 453 | case CHIP8_KEY3: chip8_keys[3] = 1; break; |
432 | case BUTTON_ON: chip8_keys[9] = 1; break; | 454 | case CHIP8_KEY3 | BUTTON_REL: chip8_keys[3] = 0; break; |
433 | case BUTTON_ON | BUTTON_REL: chip8_keys[9] = 0; break; | 455 | #endif |
434 | 456 | #ifdef CHIP8_KEY7 | |
435 | case SYS_USB_CONNECTED: | 457 | case CHIP8_KEY7: chip8_keys[7] = 1; break; |
436 | chip8_running = false; | 458 | case CHIP8_KEY7 | BUTTON_REL: chip8_keys[7] = 0; break; |
459 | #endif | ||
460 | #ifdef CHIP8_KEY9 | ||
461 | case CHIP8_KEY9: chip8_keys[9] = 1; break; | ||
462 | case CHIP8_KEY9 | BUTTON_REL: chip8_keys[9] = 0; break; | ||
463 | #endif | ||
464 | |||
465 | default: | ||
466 | if (rb->default_event_handler(button) == SYS_USB_CONNECTED) | ||
467 | chip8_running = 2; /* indicates stopped because of USB */ | ||
437 | break; | 468 | break; |
438 | } | 469 | } |
439 | } | 470 | } |
@@ -556,7 +587,7 @@ bool chip8_run(char* file) | |||
556 | } | 587 | } |
557 | 588 | ||
558 | chip8_reset(); | 589 | chip8_reset(); |
559 | while (chip8_running) chip8_execute(); | 590 | while (chip8_running == 1) chip8_execute(); |
560 | 591 | ||
561 | if (!is_playing) | 592 | if (!is_playing) |
562 | { /* stop it if we used audio */ | 593 | { /* stop it if we used audio */ |
@@ -592,7 +623,13 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter) | |||
592 | } | 623 | } |
593 | 624 | ||
594 | /* now go ahead and have fun! */ | 625 | /* now go ahead and have fun! */ |
595 | return chip8_run(filename) ? PLUGIN_OK : PLUGIN_ERROR; | 626 | if (chip8_run(filename)) |
627 | if (chip8_running == 0) | ||
628 | return PLUGIN_OK; | ||
629 | else | ||
630 | return PLUGIN_USB_CONNECTED; | ||
631 | else | ||
632 | return PLUGIN_ERROR; | ||
596 | } | 633 | } |
597 | 634 | ||
598 | #endif /* #ifndef SIMULATOR */ | 635 | #endif /* #ifndef SIMULATOR */ |
diff --git a/apps/plugins/clock.c b/apps/plugins/clock.c index 9886eb8d6f..2695bab26d 100644 --- a/apps/plugins/clock.c +++ b/apps/plugins/clock.c | |||
@@ -1276,11 +1276,27 @@ bool show_credits(void) | |||
1276 | return false; | 1276 | return false; |
1277 | } | 1277 | } |
1278 | 1278 | ||
1279 | /********************************************************************** | ||
1280 | * Cleanup on plugin return | ||
1281 | **********************************************************************/ | ||
1282 | |||
1283 | void cleanup(void *parameter) | ||
1284 | { | ||
1285 | (void)parameter; /* unused */ | ||
1286 | |||
1287 | if(settings.save_mode == 1) | ||
1288 | save_settings(true); | ||
1289 | |||
1290 | /* restore set backlight timeout */ | ||
1291 | rb->backlight_set_timeout(rb->global_settings->backlight_timeout); | ||
1292 | } | ||
1293 | |||
1279 | /****************** | 1294 | /****************** |
1280 | * F1 Screen - HELP | 1295 | * F1 Screen - HELP |
1281 | *****************/ | 1296 | *****************/ |
1282 | bool f1_screen(void) | 1297 | bool f1_screen(void) |
1283 | { | 1298 | { |
1299 | int button; | ||
1284 | int screen = 1; | 1300 | int screen = 1; |
1285 | done = false; | 1301 | done = false; |
1286 | 1302 | ||
@@ -1401,7 +1417,8 @@ bool f1_screen(void) | |||
1401 | 1417 | ||
1402 | rb->lcd_update(); | 1418 | rb->lcd_update(); |
1403 | 1419 | ||
1404 | switch(rb->button_get_w_tmo(HZ/4)) | 1420 | button = rb->button_get_w_tmo(HZ/4); |
1421 | switch(button) | ||
1405 | { | 1422 | { |
1406 | case BUTTON_F1: /* exit */ | 1423 | case BUTTON_F1: /* exit */ |
1407 | case BUTTON_OFF: | 1424 | case BUTTON_OFF: |
@@ -1418,9 +1435,10 @@ bool f1_screen(void) | |||
1418 | screen++; | 1435 | screen++; |
1419 | break; | 1436 | break; |
1420 | 1437 | ||
1421 | case SYS_USB_CONNECTED: /* leave for usb */ | 1438 | default: |
1422 | return PLUGIN_USB_CONNECTED; | 1439 | if(rb->default_event_handler_ex(button, cleanup, NULL) |
1423 | rb->usb_screen(); | 1440 | == SYS_USB_CONNECTED) |
1441 | return PLUGIN_USB_CONNECTED; | ||
1424 | break; | 1442 | break; |
1425 | } | 1443 | } |
1426 | } | 1444 | } |
@@ -2546,6 +2564,8 @@ void counter_options(void) | |||
2546 | **********************************************************************/ | 2564 | **********************************************************************/ |
2547 | enum plugin_status plugin_start(struct plugin_api* api, void* parameter) | 2565 | enum plugin_status plugin_start(struct plugin_api* api, void* parameter) |
2548 | { | 2566 | { |
2567 | int button; | ||
2568 | |||
2549 | /* time ints */ | 2569 | /* time ints */ |
2550 | int i; | 2570 | int i; |
2551 | int hour; | 2571 | int hour; |
@@ -2802,16 +2822,11 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter) | |||
2802 | /************************* | 2822 | /************************* |
2803 | * Scan for button presses | 2823 | * Scan for button presses |
2804 | ************************/ | 2824 | ************************/ |
2805 | switch (rb->button_get_w_tmo(HZ/10)) | 2825 | button = rb->button_get_w_tmo(HZ/10); |
2826 | switch (button) | ||
2806 | { | 2827 | { |
2807 | case BUTTON_OFF: /* save and exit */ | 2828 | case BUTTON_OFF: /* save and exit */ |
2808 | if(settings.save_mode == 1) | 2829 | cleanup(NULL); |
2809 | save_settings(true); | ||
2810 | |||
2811 | /* restore set backlight timeout */ | ||
2812 | rb->backlight_set_timeout( | ||
2813 | rb->global_settings->backlight_timeout); | ||
2814 | |||
2815 | return PLUGIN_OK; | 2830 | return PLUGIN_OK; |
2816 | 2831 | ||
2817 | case BUTTON_ON | BUTTON_REL: /* credit roll */ | 2832 | case BUTTON_ON | BUTTON_REL: /* credit roll */ |
@@ -2889,9 +2904,10 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter) | |||
2889 | select_mode(); | 2904 | select_mode(); |
2890 | break; | 2905 | break; |
2891 | 2906 | ||
2892 | case SYS_USB_CONNECTED: /* usb plugged? */ | 2907 | default: |
2893 | rb->usb_screen(); | 2908 | if(rb->default_event_handler_ex(button, cleanup, NULL) |
2894 | return PLUGIN_USB_CONNECTED; | 2909 | == SYS_USB_CONNECTED) |
2910 | return PLUGIN_USB_CONNECTED; | ||
2895 | break; | 2911 | break; |
2896 | } | 2912 | } |
2897 | } | 2913 | } |
diff --git a/apps/plugins/cube.c b/apps/plugins/cube.c index 17440ad496..b0c6daa656 100644 --- a/apps/plugins/cube.c +++ b/apps/plugins/cube.c | |||
@@ -24,6 +24,30 @@ | |||
24 | /* Loops that the values are displayed */ | 24 | /* Loops that the values are displayed */ |
25 | #define DISP_TIME 30 | 25 | #define DISP_TIME 30 |
26 | 26 | ||
27 | /* variable button definitions */ | ||
28 | #if CONFIG_KEYPAD == RECORDER_PAD | ||
29 | #define CUBE_QUIT (BUTTON_OFF | BUTTON_REL) | ||
30 | #define CUBE_X_INC BUTTON_RIGHT | ||
31 | #define CUBE_X_DEC BUTTON_LEFT | ||
32 | #define CUBE_Y_INC BUTTON_UP | ||
33 | #define CUBE_Y_DEC BUTTON_DOWN | ||
34 | #define CUBE_Z_INC BUTTON_F2 | ||
35 | #define CUBE_Z_DEC BUTTON_F1 | ||
36 | #define CUBE_HIGHSPEED BUTTON_PLAY | ||
37 | |||
38 | #elif CONFIG_KEYPAD == ONDIO_PAD | ||
39 | #define CUBE_QUIT (BUTTON_OFF | BUTTON_REL) | ||
40 | #define CUBE_X_INC BUTTON_RIGHT | ||
41 | #define CUBE_X_DEC BUTTON_LEFT | ||
42 | #define CUBE_Y_INC BUTTON_UP | ||
43 | #define CUBE_Y_DEC BUTTON_DOWN | ||
44 | #define CUBE_Z_INC (BUTTON_MENU | BUTTON_UP) | ||
45 | #define CUBE_Z_DEC (BUTTON_MENU | BUTTON_DOWN) | ||
46 | #define CUBE_HIGHSPEED_PRE BUTTON_MENU | ||
47 | #define CUBE_HIGHSPEED (BUTTON_MENU | BUTTON_REL) | ||
48 | |||
49 | #endif | ||
50 | |||
27 | struct point_3D { | 51 | struct point_3D { |
28 | long x, y, z; | 52 | long x, y, z; |
29 | }; | 53 | }; |
@@ -230,6 +254,8 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter) | |||
230 | int t_disp=0; | 254 | int t_disp=0; |
231 | char buffer[30]; | 255 | char buffer[30]; |
232 | 256 | ||
257 | int button; | ||
258 | int lastbutton=0; | ||
233 | int xa=0; | 259 | int xa=0; |
234 | int ya=0; | 260 | int ya=0; |
235 | int za=0; | 261 | int za=0; |
@@ -282,56 +308,64 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter) | |||
282 | if (za<0) | 308 | if (za<0) |
283 | za+=360; | 309 | za+=360; |
284 | 310 | ||
285 | switch(rb->button_get(false)) | 311 | button = rb->button_get(false); |
312 | switch(button) | ||
286 | { | 313 | { |
287 | case BUTTON_RIGHT: | 314 | case CUBE_X_INC: |
288 | xs+=1; | 315 | xs+=1; |
289 | if (xs>10) | 316 | if (xs>10) |
290 | xs=10; | 317 | xs=10; |
291 | t_disp=DISP_TIME; | 318 | t_disp=DISP_TIME; |
292 | break; | 319 | break; |
293 | case BUTTON_LEFT: | 320 | case CUBE_X_DEC: |
294 | xs-=1; | 321 | xs-=1; |
295 | if (xs<-10) | 322 | if (xs<-10) |
296 | xs=-10; | 323 | xs=-10; |
297 | t_disp=DISP_TIME; | 324 | t_disp=DISP_TIME; |
298 | break; | 325 | break; |
299 | case BUTTON_UP: | 326 | case CUBE_Y_INC: |
300 | ys+=1; | 327 | ys+=1; |
301 | if (ys>10) | 328 | if (ys>10) |
302 | ys=10; | 329 | ys=10; |
303 | t_disp=DISP_TIME; | 330 | t_disp=DISP_TIME; |
304 | break; | 331 | break; |
305 | case BUTTON_DOWN: | 332 | case CUBE_Y_DEC: |
306 | ys-=1; | 333 | ys-=1; |
307 | if (ys<-10) | 334 | if (ys<-10) |
308 | ys=-10; | 335 | ys=-10; |
309 | t_disp=DISP_TIME; | 336 | t_disp=DISP_TIME; |
310 | break; | 337 | break; |
311 | case BUTTON_F2: | 338 | case CUBE_Z_INC: |
312 | zs+=1; | 339 | zs+=1; |
313 | if (zs>10) | 340 | if (zs>10) |
314 | zs=10; | 341 | zs=10; |
315 | t_disp=DISP_TIME; | 342 | t_disp=DISP_TIME; |
316 | break; | 343 | break; |
317 | case BUTTON_F1: | 344 | case CUBE_Z_DEC: |
318 | zs-=1; | 345 | zs-=1; |
319 | if (zs<-10) | 346 | if (zs<-10) |
320 | zs=-10; | 347 | zs=-10; |
321 | t_disp=DISP_TIME; | 348 | t_disp=DISP_TIME; |
322 | break; | 349 | break; |
323 | case BUTTON_PLAY: | 350 | case CUBE_HIGHSPEED: |
351 | #ifdef CUBE_HIGHSPEED_PRE | ||
352 | if (lastbutton!=CUBE_HIGHSPEED_PRE) | ||
353 | break; | ||
354 | #endif | ||
324 | highspeed=!highspeed; | 355 | highspeed=!highspeed; |
325 | t_disp=DISP_TIME; | 356 | t_disp=DISP_TIME; |
326 | break; | 357 | break; |
327 | case BUTTON_OFF|BUTTON_REL: | 358 | case CUBE_QUIT: |
328 | exit=1; | 359 | exit=1; |
329 | break; | 360 | break; |
330 | 361 | ||
331 | case SYS_USB_CONNECTED: | 362 | default: |
332 | rb->usb_screen(); | 363 | if(rb->default_event_handler(button) == SYS_USB_CONNECTED) |
333 | return PLUGIN_USB_CONNECTED; | 364 | return PLUGIN_USB_CONNECTED; |
365 | break; | ||
334 | } | 366 | } |
367 | if (button!=BUTTON_NONE) | ||
368 | lastbutton=button; | ||
335 | } | 369 | } |
336 | 370 | ||
337 | return PLUGIN_OK; | 371 | return PLUGIN_OK; |