summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/plugins/SOURCES2
-rw-r--r--apps/plugins/chessclock.c229
-rw-r--r--apps/plugins/wormlet.c7
3 files changed, 130 insertions, 108 deletions
diff --git a/apps/plugins/SOURCES b/apps/plugins/SOURCES
index 1ce417d847..a42b919a8d 100644
--- a/apps/plugins/SOURCES
+++ b/apps/plugins/SOURCES
@@ -1,5 +1,6 @@
1/* plugins common to all models */ 1/* plugins common to all models */
2battery_test.c 2battery_test.c
3chessclock.c
3favorites.c 4favorites.c
4firmware_flash.c 5firmware_flash.c
5helloworld.c 6helloworld.c
@@ -48,7 +49,6 @@ wormlet.c
48#endif /*#ifdef HAVE_LCD_BITMAP */ 49#endif /*#ifdef HAVE_LCD_BITMAP */
49 50
50#ifdef HAVE_LCD_CHARCELLS /* Player model only */ 51#ifdef HAVE_LCD_CHARCELLS /* Player model only */
51chessclock.c
52euroconverter.c 52euroconverter.c
53jackpot.c 53jackpot.c
54nim.c 54nim.c
diff --git a/apps/plugins/chessclock.c b/apps/plugins/chessclock.c
index 4df169669a..a25221d619 100644
--- a/apps/plugins/chessclock.c
+++ b/apps/plugins/chessclock.c
@@ -17,9 +17,49 @@
17 * 17 *
18 ****************************************************************************/ 18 ****************************************************************************/
19#include "plugin.h" 19#include "plugin.h"
20#ifdef HAVE_LCD_CHARCELLS 20
21/* We only support players at a start. I don't have simulator capacity at 21/* variable button definitions */
22 the time. */ 22#if CONFIG_KEYPAD == RECORDER_PAD
23#define CHC_QUIT BUTTON_OFF
24#define CHC_STARTSTOP BUTTON_PLAY
25#define CHC_RESET BUTTON_LEFT
26#define CHC_MENU BUTTON_F1
27#define CHC_SETTINGS_INC BUTTON_UP
28#define CHC_SETTINGS_DEC BUTTON_DOWN
29#define CHC_SETTINGS_OK BUTTON_PLAY
30#define CHC_SETTINGS_OK2 BUTTON_LEFT
31#define CHC_SETTINGS_CANCEL BUTTON_OFF
32
33#elif CONFIG_KEYPAD == ONDIO_PAD
34#define CHC_QUIT BUTTON_OFF
35#define CHC_STARTSTOP BUTTON_RIGHT
36#define CHC_RESET BUTTON_LEFT
37#define CHC_MENU BUTTON_MENU
38#define CHC_SETTINGS_INC BUTTON_UP
39#define CHC_SETTINGS_DEC BUTTON_DOWN
40#define CHC_SETTINGS_OK BUTTON_RIGHT
41#define CHC_SETTINGS_OK2 BUTTON_LEFT
42#define CHC_SETTINGS_CANCEL BUTTON_MENU
43
44#elif CONFIG_KEYPAD == PLAYER_PAD
45#define CHC_QUIT BUTTON_ON
46#define CHC_STARTSTOP BUTTON_PLAY
47#define CHC_RESET BUTTON_STOP
48#define CHC_MENU BUTTON_MENU
49#define CHC_SETTINGS_INC BUTTON_RIGHT
50#define CHC_SETTINGS_DEC BUTTON_LEFT
51#define CHC_SETTINGS_OK BUTTON_PLAY
52#define CHC_SETTINGS_CANCEL BUTTON_STOP
53#define CHC_SETTINGS_CANCEL2 BUTTON_MENU
54
55#endif
56
57/* leave first line blank on bitmap display, for pause icon */
58#ifdef HAVE_LCD_BITMAP
59#define FIRST_LINE 1
60#else
61#define FIRST_LINE 0
62#endif
23 63
24/* here is a global api struct pointer. while not strictly necessary, 64/* here is a global api struct pointer. while not strictly necessary,
25 it's nice not to have to pass the api pointer in all function calls 65 it's nice not to have to pass the api pointer in all function calls
@@ -99,7 +139,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
99 break; 139 break;
100 } 140 }
101 if (res==-1) { 141 if (res==-1) {
102 rb->usb_screen();
103 return PLUGIN_USB_CONNECTED; 142 return PLUGIN_USB_CONNECTED;
104 } 143 }
105 if (res==0) { 144 if (res==0) {
@@ -140,7 +179,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
140 done=true; 179 done=true;
141 break; 180 break;
142 case 3: 181 case 3:
143 rb->usb_screen();
144 return PLUGIN_USB_CONNECTED; 182 return PLUGIN_USB_CONNECTED;
145 case 1: 183 case 1:
146 nr++; 184 nr++;
@@ -157,6 +195,18 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
157 return PLUGIN_OK; 195 return PLUGIN_OK;
158} 196}
159 197
198#ifdef HAVE_LCD_BITMAP
199static void show_pause_mode(bool enabled)
200{
201 static const char pause_icon[] = {0x00,0x7f,0x7f,0x00,0x7f,0x7f,0x00};
202
203 if (enabled)
204 rb->lcd_bitmap(pause_icon, 52, 0, 7, 8, true);
205 else
206 rb->lcd_clearrect(52, 0, 7, 8);
207}
208#endif
209
160/* 210/*
161 -1= exit 211 -1= exit
162 1 = next player 212 1 = next player
@@ -173,15 +223,19 @@ static int run_timer(int nr)
173 long max_ticks=timer_holder[nr].total_time*HZ-timer_holder[nr].used_time; 223 long max_ticks=timer_holder[nr].total_time*HZ-timer_holder[nr].used_time;
174 long ticks=0; 224 long ticks=0;
175 bool round_time=false; 225 bool round_time=false;
176 226
227#ifdef HAVE_LCD_CHARCELLS
177 rb->lcd_icon(ICON_PAUSE, pause); 228 rb->lcd_icon(ICON_PAUSE, pause);
229#else
230 show_pause_mode(pause);
231#endif
178 232
179 if (settings.round_time*HZ<max_ticks) { 233 if (settings.round_time*HZ<max_ticks) {
180 max_ticks=settings.round_time*HZ; 234 max_ticks=settings.round_time*HZ;
181 round_time=true; 235 round_time=true;
182 } 236 }
183 rb->snprintf(player_info, sizeof(player_info), "Player %d", nr+1); 237 rb->snprintf(player_info, sizeof(player_info), "Player %d", nr+1);
184 rb->lcd_puts(0, 0, player_info); 238 rb->lcd_puts(0, FIRST_LINE, player_info);
185 last_tick=*rb->current_tick; 239 last_tick=*rb->current_tick;
186 240
187 while (!done) { 241 while (!done) {
@@ -189,19 +243,19 @@ static int run_timer(int nr)
189 long now; 243 long now;
190 if (ticks>max_ticks) { 244 if (ticks>max_ticks) {
191 if (round_time) 245 if (round_time)
192 rb->lcd_puts(0, 1, "ROUND UP!"); 246 rb->lcd_puts(0, FIRST_LINE+1, "ROUND UP!");
193 else 247 else
194 rb->lcd_puts(0, 1, "TIME OUT!"); 248 rb->lcd_puts(0, FIRST_LINE+1, "TIME OUT!");
195 rb->backlight_on(); 249 rb->backlight_on();
196 } else { 250 } else {
197 /* 251 /*
198 if (((int)(rb->current_tick - start_ticks)/HZ)&1) { 252 if (((int)(rb->current_tick - start_ticks)/HZ)&1) {
199 rb->lcd_puts(0, 0, player_info); 253 rb->lcd_puts(0, FIRST_LINE, player_info);
200 } else { 254 } else {
201 rb->lcd_puts(0, 0, player_info); 255 rb->lcd_puts(0, FIRST_LINE, player_info);
202 } 256 }
203 */ 257 */
204 rb->lcd_puts(0, 0, player_info); 258 rb->lcd_puts(0, FIRST_LINE, player_info);
205 now=*rb->current_tick; 259 now=*rb->current_tick;
206 if (!pause) { 260 if (!pause) {
207 ticks+=now-last_tick; 261 ticks+=now-last_tick;
@@ -219,34 +273,37 @@ static int run_timer(int nr)
219 show_time((timer_holder[nr].total_time*HZ- 273 show_time((timer_holder[nr].total_time*HZ-
220 timer_holder[nr].used_time- 274 timer_holder[nr].used_time-
221 ticks+HZ-1)/HZ)); 275 ticks+HZ-1)/HZ));
222 rb->lcd_puts(0, 1, buf); 276 rb->lcd_puts(0, FIRST_LINE+1, buf);
223 } else { 277 } else {
224 rb->lcd_puts(0, 1, show_time((max_ticks-ticks+HZ-1)/HZ)); 278 rb->lcd_puts(0, FIRST_LINE+1, show_time((max_ticks-ticks+HZ-1)/HZ));
225 } 279 }
226 } 280 }
227 button = rb->button_get_w_tmo(10); 281#ifdef HAVE_LCD_BITMAP
228 switch (button) { 282 rb->lcd_update();
229 /* OFF/MENU key to exit */
230#if CONFIG_KEYPAD == RECORDER_PAD
231 case BUTTON_OFF:
232#else
233 case BUTTON_ON:
234#endif 283#endif
284 button = rb->button_get(false);
285 switch (button) {
286 /* OFF/ON key to exit */
287 case CHC_QUIT:
235 return -1; /* Indicate exit */ 288 return -1; /* Indicate exit */
236 289
237 /* PLAY = Stop/Start toggle */ 290 /* PLAY = Stop/Start toggle */
238 case BUTTON_PLAY: 291 case CHC_STARTSTOP:
239 pause=!pause; 292 pause=!pause;
293#ifdef HAVE_LCD_CHARCELLS
240 rb->lcd_icon(ICON_PAUSE, pause); 294 rb->lcd_icon(ICON_PAUSE, pause);
295#else
296 show_pause_mode(pause);
297#endif
241 break; 298 break;
242 299
243 /* LEFT = Reset timer */ 300 /* LEFT = Reset timer */
244 case BUTTON_STOP: 301 case CHC_RESET:
245 ticks=0; 302 ticks=0;
246 break; 303 break;
247 304
248 /* MENU */ 305 /* MENU */
249 case BUTTON_MENU: 306 case CHC_MENU:
250 { 307 {
251 int ret; 308 int ret;
252 char *menu[]={"Delete player", "Restart round", 309 char *menu[]={"Delete player", "Restart round",
@@ -299,35 +356,29 @@ static int run_timer(int nr)
299 break; 356 break;
300 357
301 /* UP (RIGHT/+) = Scroll Lap timer up */ 358 /* UP (RIGHT/+) = Scroll Lap timer up */
302#if CONFIG_KEYPAD == RECORDER_PAD 359 case CHC_SETTINGS_INC:
303 case BUTTON_UP:
304#else
305 case BUTTON_RIGHT:
306#endif
307 retval = 1; 360 retval = 1;
308 done = true; 361 done = true;
309 break; 362 break;
310 363
311 /* DOWN (LEFT/-) = Scroll Lap timer down */ 364 /* DOWN (LEFT/-) = Scroll Lap timer down */
312#if CONFIG_KEYPAD == RECORDER_PAD 365 case CHC_SETTINGS_DEC:
313 case BUTTON_DOWN:
314#else
315 case BUTTON_LEFT:
316#endif
317 retval = 2; 366 retval = 2;
318 done = true; 367 done = true;
319 break; 368 break;
320 369
321 case SYS_USB_CONNECTED: 370 default:
322 retval = 3; 371 if (rb->default_event_handler(button) == SYS_USB_CONNECTED) {
323 done=true; 372 done = true;
373 return 3; /* been in usb mode */
374 }
324 break; 375 break;
325 } 376 }
326 rb->sleep(HZ/4); /* Sleep 1/4 of a second */ 377 rb->sleep(HZ/4); /* Sleep 1/4 of a second */
327 } 378 }
328 379
329 timer_holder[nr].used_time+=ticks; 380 timer_holder[nr].used_time+=ticks;
330 381
331 return retval; 382 return retval;
332} 383}
333 384
@@ -341,15 +392,8 @@ static int chessclock_set_int(char* string,
341 bool done = false; 392 bool done = false;
342 int button; 393 int button;
343 394
344#ifdef HAVE_LCD_BITMAP
345 if(global_settings.statusbar)
346 rb->lcd_setmargins(0, STATUSBAR_HEIGHT);
347 else
348 rb->lcd_setmargins(0, 0);
349#endif
350
351 rb->lcd_clear_display(); 395 rb->lcd_clear_display();
352 rb->lcd_puts_scroll(0, 0, string); 396 rb->lcd_puts_scroll(0, FIRST_LINE, string);
353 397
354 while (!done) { 398 while (!done) {
355 char str[32]; 399 char str[32];
@@ -357,53 +401,40 @@ static int chessclock_set_int(char* string,
357 rb->snprintf(str, sizeof str,"%s (m:s)", show_time(*variable)); 401 rb->snprintf(str, sizeof str,"%s (m:s)", show_time(*variable));
358 else 402 else
359 rb->snprintf(str, sizeof str,"%d", *variable); 403 rb->snprintf(str, sizeof str,"%d", *variable);
360 rb->lcd_puts(0, 1, str); 404 rb->lcd_puts(0, FIRST_LINE+1, str);
361#ifdef HAVE_LCD_BITMAP 405#ifdef HAVE_LCD_BITMAP
362 rb->status_draw(true);
363 rb->lcd_update(); 406 rb->lcd_update();
364#endif 407#endif
365 button = rb->button_get_w_tmo(HZ/2); 408 button = rb->button_get(true);
366 switch(button) { 409 switch(button) {
367#if CONFIG_KEYPAD == RECORDER_PAD 410 case CHC_SETTINGS_INC:
368 case BUTTON_UP: 411 case CHC_SETTINGS_INC | BUTTON_REPEAT:
369 case BUTTON_UP | BUTTON_REPEAT:
370#else
371 case BUTTON_RIGHT:
372 case BUTTON_RIGHT | BUTTON_REPEAT:
373#endif
374 *variable += step; 412 *variable += step;
375 break; 413 break;
376 414
377#if CONFIG_KEYPAD == RECORDER_PAD 415 case CHC_SETTINGS_DEC:
378 case BUTTON_DOWN: 416 case CHC_SETTINGS_DEC | BUTTON_REPEAT:
379 case BUTTON_DOWN | BUTTON_REPEAT:
380#else
381 case BUTTON_LEFT:
382 case BUTTON_LEFT | BUTTON_REPEAT:
383#endif
384 *variable -= step; 417 *variable -= step;
385 break; 418 break;
386 419
387#if CONFIG_KEYPAD == RECORDER_PAD 420 case CHC_SETTINGS_OK:
388 case BUTTON_LEFT: 421#ifdef CHC_SETTINGS_OK2
389 case BUTTON_PLAY: 422 case CHC_SETTINGS_OK2:
390#else
391 case BUTTON_PLAY:
392#endif 423#endif
393 done = true; 424 done = true;
394 break; 425 break;
395 426
396#if CONFIG_KEYPAD == RECORDER_PAD 427 case CHC_SETTINGS_CANCEL:
397 case BUTTON_OFF: 428#ifdef CHC_SETTINGS_CANCEL2
398#else 429 case CHC_SETTINGS_CANCEL2:
399 case BUTTON_STOP:
400 case BUTTON_MENU:
401#endif 430#endif
402 return 0; /* cancel */ 431 return 0; /* cancel */
403 break; 432 break;
404 433
405 case SYS_USB_CONNECTED: 434 default:
406 return -1; 435 if (rb->default_event_handler(button) == SYS_USB_CONNECTED)
436 return -1; /* been in usb mode */
437 break;
407 438
408 } 439 }
409 if(*variable > max ) 440 if(*variable > max )
@@ -439,51 +470,41 @@ static int simple_menu(int nr, char **strarr)
439 show=0; 470 show=0;
440 if (show<0) 471 if (show<0)
441 show=nr-1; 472 show=nr-1;
442 rb->lcd_puts_scroll(0, 0, strarr[show]); 473 rb->lcd_puts_scroll(0, FIRST_LINE, strarr[show]);
443 button = rb->button_get(false); 474#ifdef HAVE_LCD_BITMAP
444 switch(button) { 475 rb->lcd_update();
445#if CONFIG_KEYPAD == RECORDER_PAD
446 case BUTTON_UP:
447 case BUTTON_UP | BUTTON_REPEAT:
448#else
449 case BUTTON_RIGHT:
450 case BUTTON_RIGHT | BUTTON_REPEAT:
451#endif 476#endif
477 button = rb->button_get(true);
478 switch(button) {
479 case CHC_SETTINGS_INC:
480 case CHC_SETTINGS_INC | BUTTON_REPEAT:
452 show++; 481 show++;
453 break; 482 break;
454 483
455#if CONFIG_KEYPAD == RECORDER_PAD 484 case CHC_SETTINGS_DEC:
456 case BUTTON_DOWN: 485 case CHC_SETTINGS_DEC | BUTTON_REPEAT:
457 case BUTTON_DOWN | BUTTON_REPEAT:
458#else
459 case BUTTON_LEFT:
460 case BUTTON_LEFT | BUTTON_REPEAT:
461#endif
462 show--; 486 show--;
463 break; 487 break;
464 488
465#if CONFIG_KEYPAD == RECORDER_PAD 489 case CHC_SETTINGS_OK:
466 case BUTTON_LEFT: 490#ifdef CHC_SETTINGS_OK2
467 case BUTTON_PLAY: 491 case CHC_SETTINGS_OK2:
468#else
469 case BUTTON_PLAY:
470#endif 492#endif
471 return show; 493 return show;
472 break; 494 break;
473 495
474#if CONFIG_KEYPAD == RECORDER_PAD 496 case CHC_SETTINGS_CANCEL:
475 case BUTTON_OFF: 497#ifdef CHC_SETTINGS_CANCEL2
476#else 498 case CHC_SETTINGS_CANCEL2:
477 case BUTTON_STOP:
478 case BUTTON_MENU:
479#endif 499#endif
480 return -2; /* cancel */ 500 return -2; /* cancel */
481 break; 501 break;
482 502
483 case SYS_USB_CONNECTED: 503 default:
484 return -1; 504 if (rb->default_event_handler(button) == SYS_USB_CONNECTED)
505 return -1; /* been in usb mode */
506 break;
485 } 507 }
486 } 508 }
487} 509}
488 510
489#endif /* HAVE_LCD_CHARCELLS */
diff --git a/apps/plugins/wormlet.c b/apps/plugins/wormlet.c
index be089cdb7c..8ded341bec 100644
--- a/apps/plugins/wormlet.c
+++ b/apps/plugins/wormlet.c
@@ -1967,9 +1967,10 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
1967 } 1967 }
1968 break; 1968 break;
1969 1969
1970 case SYS_USB_CONNECTED: 1970 default:
1971 rb->usb_screen(); 1971 if (rb->default_event_handler(button) == SYS_USB_CONNECTED)
1972 return PLUGIN_USB_CONNECTED; 1972 return PLUGIN_USB_CONNECTED;
1973 break;
1973 } 1974 }
1974 } while (button != BUTTON_PLAY && 1975 } while (button != BUTTON_PLAY &&
1975 button != BUTTON_OFF && button != BUTTON_ON); 1976 button != BUTTON_OFF && button != BUTTON_ON);