Prepare new maemo release
[maemo-rb.git] / apps / plugins / stopwatch.c
blob49f633a2a9573b97d0407e9f785880e86f3bdbff
1 /***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
10 * Copyright (C) 2004 Mike Holden
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation; either version 2
15 * of the License, or (at your option) any later version.
17 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
18 * KIND, either express or implied.
20 ****************************************************************************/
22 #include "plugin.h"
26 #ifdef HAVE_LCD_BITMAP
27 #define TIMER_Y 1
28 #else
29 #define TIMER_Y 0
30 #endif
32 #define LAP_Y TIMER_Y+1
33 #define MAX_LAPS 64
35 #define STOPWATCH_FILE PLUGIN_APPS_DATA_DIR "/stopwatch.dat"
37 /* variable button definitions */
38 #if CONFIG_KEYPAD == RECORDER_PAD
39 #define STOPWATCH_QUIT BUTTON_OFF
40 #define STOPWATCH_START_STOP BUTTON_PLAY
41 #define STOPWATCH_RESET_TIMER BUTTON_LEFT
42 #define STOPWATCH_LAP_TIMER BUTTON_ON
43 #define STOPWATCH_SCROLL_UP BUTTON_UP
44 #define STOPWATCH_SCROLL_DOWN BUTTON_DOWN
46 #elif CONFIG_KEYPAD == ARCHOS_AV300_PAD
47 #define STOPWATCH_QUIT BUTTON_OFF
48 #define STOPWATCH_START_STOP BUTTON_SELECT
49 #define STOPWATCH_RESET_TIMER BUTTON_LEFT
50 #define STOPWATCH_LAP_TIMER BUTTON_ON
51 #define STOPWATCH_SCROLL_UP BUTTON_UP
52 #define STOPWATCH_SCROLL_DOWN BUTTON_DOWN
54 #elif CONFIG_KEYPAD == ONDIO_PAD
55 #define STOPWATCH_QUIT BUTTON_OFF
56 #define STOPWATCH_START_STOP BUTTON_RIGHT
57 #define STOPWATCH_RESET_TIMER BUTTON_LEFT
58 #define STOPWATCH_LAP_TIMER BUTTON_MENU
59 #define STOPWATCH_SCROLL_UP BUTTON_UP
60 #define STOPWATCH_SCROLL_DOWN BUTTON_DOWN
62 #elif CONFIG_KEYPAD == PLAYER_PAD
63 #define STOPWATCH_QUIT BUTTON_MENU
64 #define STOPWATCH_START_STOP BUTTON_PLAY
65 #define STOPWATCH_RESET_TIMER BUTTON_STOP
66 #define STOPWATCH_LAP_TIMER BUTTON_ON
67 #define STOPWATCH_SCROLL_UP BUTTON_RIGHT
68 #define STOPWATCH_SCROLL_DOWN BUTTON_LEFT
70 #elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \
71 (CONFIG_KEYPAD == IRIVER_H300_PAD)
72 #define STOPWATCH_QUIT BUTTON_OFF
73 #define STOPWATCH_START_STOP BUTTON_SELECT
74 #define STOPWATCH_RESET_TIMER BUTTON_DOWN
75 #define STOPWATCH_LAP_TIMER BUTTON_ON
76 #define STOPWATCH_SCROLL_UP BUTTON_RIGHT
77 #define STOPWATCH_SCROLL_DOWN BUTTON_LEFT
78 #define STOPWATCH_RC_QUIT BUTTON_RC_STOP
80 #elif (CONFIG_KEYPAD == IPOD_4G_PAD) || \
81 (CONFIG_KEYPAD == IPOD_3G_PAD) || \
82 (CONFIG_KEYPAD == IPOD_1G2G_PAD)
83 #define STOPWATCH_QUIT BUTTON_MENU
84 #define STOPWATCH_START_STOP BUTTON_SELECT
85 #define STOPWATCH_RESET_TIMER BUTTON_LEFT
86 #define STOPWATCH_LAP_TIMER BUTTON_RIGHT
87 #define STOPWATCH_SCROLL_UP BUTTON_SCROLL_FWD
88 #define STOPWATCH_SCROLL_DOWN BUTTON_SCROLL_BACK
90 #elif CONFIG_KEYPAD == IRIVER_IFP7XX_PAD
91 #define STOPWATCH_QUIT BUTTON_PLAY
92 #define STOPWATCH_START_STOP BUTTON_MODE
93 #define STOPWATCH_RESET_TIMER BUTTON_EQ
94 #define STOPWATCH_LAP_TIMER BUTTON_SELECT
95 #define STOPWATCH_SCROLL_UP BUTTON_UP
96 #define STOPWATCH_SCROLL_DOWN BUTTON_DOWN
98 #elif CONFIG_KEYPAD == IAUDIO_X5M5_PAD
99 #define STOPWATCH_QUIT BUTTON_POWER
100 #define STOPWATCH_START_STOP BUTTON_PLAY
101 #define STOPWATCH_RESET_TIMER BUTTON_REC
102 #define STOPWATCH_LAP_TIMER BUTTON_SELECT
103 #define STOPWATCH_SCROLL_UP BUTTON_UP
104 #define STOPWATCH_SCROLL_DOWN BUTTON_DOWN
106 #elif CONFIG_KEYPAD == GIGABEAT_PAD
107 #define STOPWATCH_QUIT BUTTON_POWER
108 #define STOPWATCH_START_STOP BUTTON_SELECT
109 #define STOPWATCH_RESET_TIMER BUTTON_A
110 #define STOPWATCH_LAP_TIMER BUTTON_MENU
111 #define STOPWATCH_SCROLL_UP BUTTON_UP
112 #define STOPWATCH_SCROLL_DOWN BUTTON_DOWN
114 #elif (CONFIG_KEYPAD == SANSA_E200_PAD) || \
115 (CONFIG_KEYPAD == SANSA_C200_PAD) || \
116 (CONFIG_KEYPAD == SANSA_CLIP_PAD) || \
117 (CONFIG_KEYPAD == SANSA_M200_PAD)
118 #define STOPWATCH_QUIT BUTTON_POWER
119 #define STOPWATCH_START_STOP BUTTON_RIGHT
120 #define STOPWATCH_RESET_TIMER BUTTON_LEFT
121 #define STOPWATCH_LAP_TIMER BUTTON_SELECT
122 #define STOPWATCH_SCROLL_UP BUTTON_UP
123 #define STOPWATCH_SCROLL_DOWN BUTTON_DOWN
125 #elif (CONFIG_KEYPAD == SANSA_FUZE_PAD)
126 #define STOPWATCH_QUIT (BUTTON_HOME|BUTTON_REPEAT)
127 #define STOPWATCH_START_STOP BUTTON_RIGHT
128 #define STOPWATCH_RESET_TIMER BUTTON_LEFT
129 #define STOPWATCH_LAP_TIMER BUTTON_SELECT
130 #define STOPWATCH_SCROLL_UP BUTTON_SCROLL_BACK
131 #define STOPWATCH_SCROLL_DOWN BUTTON_SCROLL_FWD
133 #elif CONFIG_KEYPAD == IRIVER_H10_PAD
134 #define STOPWATCH_QUIT BUTTON_POWER
135 #define STOPWATCH_START_STOP BUTTON_PLAY
136 #define STOPWATCH_RESET_TIMER BUTTON_REW
137 #define STOPWATCH_LAP_TIMER BUTTON_FF
138 #define STOPWATCH_SCROLL_UP BUTTON_SCROLL_UP
139 #define STOPWATCH_SCROLL_DOWN BUTTON_SCROLL_DOWN
141 #elif CONFIG_KEYPAD == MROBE500_PAD
142 #define STOPWATCH_QUIT BUTTON_POWER
144 #elif CONFIG_KEYPAD == GIGABEAT_S_PAD
145 #define STOPWATCH_QUIT BUTTON_BACK
146 #define STOPWATCH_START_STOP BUTTON_PLAY
147 #define STOPWATCH_RESET_TIMER BUTTON_MENU
148 #define STOPWATCH_LAP_TIMER BUTTON_SELECT
149 #define STOPWATCH_SCROLL_UP BUTTON_UP
150 #define STOPWATCH_SCROLL_DOWN BUTTON_DOWN
152 #elif CONFIG_KEYPAD == MROBE100_PAD
153 #define STOPWATCH_QUIT BUTTON_POWER
154 #define STOPWATCH_START_STOP BUTTON_SELECT
155 #define STOPWATCH_RESET_TIMER BUTTON_DISPLAY
156 #define STOPWATCH_LAP_TIMER BUTTON_MENU
157 #define STOPWATCH_SCROLL_UP BUTTON_UP
158 #define STOPWATCH_SCROLL_DOWN BUTTON_DOWN
160 #elif CONFIG_KEYPAD == IAUDIO_M3_PAD
161 #define STOPWATCH_QUIT BUTTON_RC_REC
162 #define STOPWATCH_START_STOP BUTTON_RC_PLAY
163 #define STOPWATCH_RESET_TIMER BUTTON_RC_REW
164 #define STOPWATCH_LAP_TIMER BUTTON_RC_FF
165 #define STOPWATCH_SCROLL_UP BUTTON_RC_VOL_UP
166 #define STOPWATCH_SCROLL_DOWN BUTTON_RC_VOL_DOWN
167 #define STOPWATCH_RC_QUIT BUTTON_REC
169 #elif CONFIG_KEYPAD == COWON_D2_PAD
170 #define STOPWATCH_QUIT BUTTON_POWER
172 #elif CONFIG_KEYPAD == IAUDIO67_PAD
173 #define STOPWATCH_QUIT BUTTON_MENU
174 #define STOPWATCH_START_STOP BUTTON_PLAY
175 #define STOPWATCH_RESET_TIMER BUTTON_STOP
176 #define STOPWATCH_LAP_TIMER BUTTON_LEFT
177 #define STOPWATCH_SCROLL_UP BUTTON_VOLUP
178 #define STOPWATCH_SCROLL_DOWN BUTTON_VOLDOWN
179 #define STOPWATCH_RC_QUIT BUTTON_POWER
181 #elif CONFIG_KEYPAD == CREATIVEZVM_PAD
182 #define STOPWATCH_QUIT BUTTON_BACK
183 #define STOPWATCH_START_STOP BUTTON_PLAY
184 #define STOPWATCH_RESET_TIMER BUTTON_SELECT
185 #define STOPWATCH_LAP_TIMER BUTTON_CUSTOM
186 #define STOPWATCH_SCROLL_UP BUTTON_UP
187 #define STOPWATCH_SCROLL_DOWN BUTTON_DOWN
189 #elif CONFIG_KEYPAD == PHILIPS_HDD1630_PAD
190 #define STOPWATCH_QUIT BUTTON_POWER
191 #define STOPWATCH_START_STOP BUTTON_SELECT
192 #define STOPWATCH_RESET_TIMER BUTTON_MENU
193 #define STOPWATCH_LAP_TIMER BUTTON_VIEW
194 #define STOPWATCH_SCROLL_UP BUTTON_UP
195 #define STOPWATCH_SCROLL_DOWN BUTTON_DOWN
197 #elif CONFIG_KEYPAD == PHILIPS_HDD6330_PAD
198 #define STOPWATCH_QUIT BUTTON_POWER
199 #define STOPWATCH_START_STOP BUTTON_PLAY
200 #define STOPWATCH_RESET_TIMER BUTTON_MENU
201 #define STOPWATCH_LAP_TIMER BUTTON_NEXT
202 #define STOPWATCH_SCROLL_UP BUTTON_UP
203 #define STOPWATCH_SCROLL_DOWN BUTTON_DOWN
205 #elif CONFIG_KEYPAD == PHILIPS_SA9200_PAD
206 #define STOPWATCH_QUIT BUTTON_POWER
207 #define STOPWATCH_START_STOP BUTTON_PLAY
208 #define STOPWATCH_RESET_TIMER BUTTON_MENU
209 #define STOPWATCH_LAP_TIMER BUTTON_RIGHT
210 #define STOPWATCH_SCROLL_UP BUTTON_UP
211 #define STOPWATCH_SCROLL_DOWN BUTTON_DOWN
213 #elif CONFIG_KEYPAD == ONDAVX747_PAD
214 #define STOPWATCH_QUIT BUTTON_POWER
215 #elif CONFIG_KEYPAD == ONDAVX777_PAD
216 #define STOPWATCH_QUIT BUTTON_POWER
218 #elif CONFIG_KEYPAD == SAMSUNG_YH_PAD
219 #define STOPWATCH_QUIT BUTTON_REC
220 #define STOPWATCH_START_STOP BUTTON_PLAY
221 #define STOPWATCH_RESET_TIMER BUTTON_LEFT
222 #define STOPWATCH_LAP_TIMER BUTTON_RIGHT
223 #define STOPWATCH_SCROLL_UP BUTTON_UP
224 #define STOPWATCH_SCROLL_DOWN BUTTON_DOWN
226 #elif CONFIG_KEYPAD == PBELL_VIBE500_PAD
227 #define STOPWATCH_QUIT BUTTON_REC
228 #define STOPWATCH_START_STOP BUTTON_PLAY
229 #define STOPWATCH_RESET_TIMER BUTTON_OK
230 #define STOPWATCH_LAP_TIMER BUTTON_MENU
231 #define STOPWATCH_SCROLL_UP BUTTON_UP
232 #define STOPWATCH_SCROLL_DOWN BUTTON_DOWN
234 #elif CONFIG_KEYPAD == MPIO_HD200_PAD
235 #define STOPWATCH_QUIT (BUTTON_REC|BUTTON_PLAY)
236 #define STOPWATCH_START_STOP BUTTON_PLAY
237 #define STOPWATCH_RESET_TIMER BUTTON_REW
238 #define STOPWATCH_LAP_TIMER BUTTON_FF
239 #define STOPWATCH_SCROLL_UP BUTTON_VOL_UP
240 #define STOPWATCH_SCROLL_DOWN BUTTON_VOL_DOWN
242 #elif CONFIG_KEYPAD == MPIO_HD300_PAD
243 #define STOPWATCH_QUIT (BUTTON_MENU|BUTTON_REPEAT)
244 #define STOPWATCH_START_STOP BUTTON_PLAY
245 #define STOPWATCH_RESET_TIMER BUTTON_REW
246 #define STOPWATCH_LAP_TIMER BUTTON_FF
247 #define STOPWATCH_SCROLL_UP BUTTON_UP
248 #define STOPWATCH_SCROLL_DOWN BUTTON_DOWN
250 #elif CONFIG_KEYPAD == SANSA_FUZEPLUS_PAD
251 #define STOPWATCH_QUIT BUTTON_POWER
252 #define STOPWATCH_START_STOP BUTTON_PLAYPAUSE
253 #define STOPWATCH_RESET_TIMER BUTTON_BACK
254 #define STOPWATCH_LAP_TIMER BUTTON_RIGHT
255 #define STOPWATCH_SCROLL_UP BUTTON_UP
256 #define STOPWATCH_SCROLL_DOWN BUTTON_DOWN
258 #elif CONFIG_KEYPAD == SANSA_CONNECT_PAD
259 #define STOPWATCH_QUIT BUTTON_POWER
260 #define STOPWATCH_START_STOP BUTTON_SELECT
261 #define STOPWATCH_RESET_TIMER BUTTON_LEFT
262 #define STOPWATCH_LAP_TIMER BUTTON_RIGHT
263 #define STOPWATCH_SCROLL_UP BUTTON_UP
264 #define STOPWATCH_SCROLL_DOWN BUTTON_DOWN
266 #elif CONFIG_KEYPAD == SAMSUNG_YPR0_PAD
267 #define STOPWATCH_QUIT BUTTON_BACK
268 #define STOPWATCH_START_STOP BUTTON_SELECT
269 #define STOPWATCH_RESET_TIMER BUTTON_MENU
270 #define STOPWATCH_LAP_TIMER BUTTON_USER
271 #define STOPWATCH_SCROLL_UP BUTTON_UP
272 #define STOPWATCH_SCROLL_DOWN BUTTON_DOWN
274 #elif (CONFIG_KEYPAD == HM60X_PAD) || \
275 (CONFIG_KEYPAD == HM801_PAD)
276 #define STOPWATCH_QUIT BUTTON_POWER
277 #define STOPWATCH_START_STOP BUTTON_SELECT
278 #define STOPWATCH_RESET_TIMER BUTTON_LEFT
279 #define STOPWATCH_LAP_TIMER BUTTON_RIGHT
280 #define STOPWATCH_SCROLL_UP BUTTON_UP
281 #define STOPWATCH_SCROLL_DOWN BUTTON_DOWN
283 #else
284 #error No keymap defined!
285 #endif
287 #ifdef HAVE_TOUCHSCREEN
288 #ifndef STOPWATCH_QUIT
289 #define STOPWATCH_QUIT BUTTON_TOPLEFT
290 #endif
291 #ifndef STOPWATCH_START_STOP
292 #define STOPWATCH_START_STOP BUTTON_CENTER
293 #endif
294 #ifndef STOPWATCH_RESET_TIMER
295 #define STOPWATCH_RESET_TIMER BUTTON_MIDRIGHT
296 #endif
297 #ifndef STOPWATCH_LAP_TIMER
298 #define STOPWATCH_LAP_TIMER BUTTON_MIDLEFT
299 #endif
300 #ifndef STOPWATCH_SCROLL_UP
301 #define STOPWATCH_SCROLL_UP BUTTON_TOPMIDDLE
302 #endif
303 #ifndef STOPWATCH_SCROLL_DOWN
304 #define STOPWATCH_SCROLL_DOWN BUTTON_BOTTOMMIDDLE
305 #endif
306 #endif
308 static int stopwatch = 0;
309 static long start_at = 0;
310 static int prev_total = 0;
311 static bool counting = false;
312 static int curr_lap = 0;
313 static int lap_scroll = 0;
314 static int lap_start;
315 static int lap_times[MAX_LAPS];
317 static void ticks_to_string(int ticks,int lap,int buflen, char * buf)
319 int hours, minutes, seconds, cs;
321 hours = ticks / (HZ * 3600);
322 ticks -= (HZ * hours * 3600);
323 minutes = ticks / (HZ * 60);
324 ticks -= (HZ * minutes * 60);
325 seconds = ticks / HZ;
326 ticks -= (HZ * seconds);
327 cs = ticks;
328 if (!lap)
330 rb->snprintf(buf, buflen,
331 "%2d:%02d:%02d.%02d",
332 hours, minutes, seconds, cs);
334 else
337 if (lap > 1)
339 int last_ticks, last_hours, last_minutes, last_seconds, last_cs;
340 last_ticks = lap_times[(lap-1)%MAX_LAPS] - lap_times[(lap-2)%MAX_LAPS];
341 last_hours = last_ticks / (HZ * 3600);
342 last_ticks -= (HZ * last_hours * 3600);
343 last_minutes = last_ticks / (HZ * 60);
344 last_ticks -= (HZ * last_minutes * 60);
345 last_seconds = last_ticks / HZ;
346 last_ticks -= (HZ * last_seconds);
347 last_cs = last_ticks;
349 rb->snprintf(buf, buflen,
350 "%2d %2d:%02d:%02d.%02d [%2d:%02d:%02d.%02d]",
351 lap, hours, minutes, seconds, cs, last_hours,
352 last_minutes, last_seconds, last_cs);
354 else
356 rb->snprintf(buf, buflen,
357 "%2d %2d:%02d:%02d.%02d",
358 lap, hours, minutes, seconds, cs);
364 * Load saved stopwatch state, if exists.
366 static void load_stopwatch(void)
368 int fd;
370 fd = rb->open(STOPWATCH_FILE, O_RDONLY);
372 if (fd < 0)
374 return;
377 /* variable stopwatch isn't saved/loaded, because it is only used
378 * temporarily in main loop
381 rb->read(fd, &start_at, sizeof(start_at));
382 rb->read(fd, &prev_total, sizeof(prev_total));
383 rb->read(fd, &counting, sizeof(counting));
384 rb->read(fd, &curr_lap, sizeof(curr_lap));
385 rb->read(fd, &lap_scroll, sizeof(lap_scroll));
386 rb->read(fd, &lap_start, sizeof(lap_start));
387 rb->read(fd, lap_times, sizeof(lap_times));
389 if (counting && start_at > *rb->current_tick)
391 /* Stopwatch started in the future? Unlikely; probably started on a
392 * previous session and powered off in-between. We'll keep
393 * everything intact (user can clear manually) but stop the
394 * stopwatch to avoid negative timing.
396 start_at = 0;
397 counting = false;
400 rb->close(fd);
404 * Save stopwatch state.
406 static void save_stopwatch(void)
408 int fd;
410 fd = rb->open(STOPWATCH_FILE, O_CREAT|O_WRONLY|O_TRUNC, 0666);
412 if (fd < 0)
414 return;
417 /* variable stopwatch isn't saved/loaded, because it is only used
418 * temporarily in main loop
421 rb->write(fd, &start_at, sizeof(start_at));
422 rb->write(fd, &prev_total, sizeof(prev_total));
423 rb->write(fd, &counting, sizeof(counting));
424 rb->write(fd, &curr_lap, sizeof(curr_lap));
425 rb->write(fd, &lap_scroll, sizeof(lap_scroll));
426 rb->write(fd, &lap_start, sizeof(lap_start));
427 rb->write(fd, lap_times, sizeof(lap_times));
429 rb->close(fd);
432 enum plugin_status plugin_start(const void* parameter)
434 char buf[32];
435 int button;
436 int lap;
437 int done = false;
438 bool update_lap = true;
439 int lines;
441 (void)parameter;
443 #ifdef HAVE_LCD_BITMAP
444 int h;
445 rb->lcd_setfont(FONT_UI);
446 rb->lcd_getstringsize("M", NULL, &h);
447 lines = (LCD_HEIGHT / h) - (LAP_Y);
448 #else
449 lines = 1;
450 #endif
452 load_stopwatch();
454 rb->lcd_clear_display();
456 while (!done)
458 if (counting)
460 stopwatch = prev_total + *rb->current_tick - start_at;
462 else
464 stopwatch = prev_total;
467 ticks_to_string(stopwatch,0,32,buf);
468 rb->lcd_puts(0, TIMER_Y, buf);
470 if(update_lap)
472 lap_start = curr_lap - lap_scroll;
473 for (lap = lap_start; lap > lap_start - lines; lap--)
475 if (lap > 0)
477 ticks_to_string(lap_times[(lap-1)%MAX_LAPS],lap,32,buf);
478 rb->lcd_puts_scroll(0, LAP_Y + lap_start - lap, buf);
480 else
482 rb->lcd_puts(0, LAP_Y + lap_start - lap,
483 " ");
486 update_lap = false;
489 rb->lcd_update();
491 if (! counting)
493 button = rb->button_get(true);
495 else
497 button = rb->button_get_w_tmo(10);
499 /* Make sure that the jukebox isn't powered off
500 automatically */
501 rb->reset_poweroff_timer();
503 switch (button)
506 /* exit */
507 #ifdef STOPWATCH_RC_QUIT
508 case STOPWATCH_RC_QUIT:
509 #endif
510 case STOPWATCH_QUIT:
511 save_stopwatch();
512 done = true;
513 break;
515 /* Stop/Start toggle */
516 case STOPWATCH_START_STOP:
517 counting = ! counting;
518 if (counting)
520 start_at = *rb->current_tick;
521 stopwatch = prev_total + *rb->current_tick - start_at;
523 else
525 prev_total += *rb->current_tick - start_at;
526 stopwatch = prev_total;
528 break;
530 /* Reset timer */
531 case STOPWATCH_RESET_TIMER:
532 if (!counting)
534 prev_total = 0;
535 curr_lap = 0;
536 update_lap = true;
538 break;
540 /* Lap timer */
541 case STOPWATCH_LAP_TIMER:
542 /*check if we're timing, and start if not*/
543 if (counting)
545 lap_times[curr_lap%MAX_LAPS] = stopwatch;
546 curr_lap++;
547 update_lap = true;
549 else
551 counting = ! counting;
552 start_at = *rb->current_tick;
553 stopwatch = prev_total + *rb->current_tick - start_at;
555 break;
557 /* Scroll Lap timer up */
558 case STOPWATCH_SCROLL_UP:
559 if (lap_scroll > 0)
561 lap_scroll --;
562 update_lap = true;
564 break;
566 /* Scroll Lap timer down */
567 case STOPWATCH_SCROLL_DOWN:
568 if ((lap_scroll < curr_lap - lines) &&
569 (lap_scroll < (MAX_LAPS - lines)) )
571 lap_scroll ++;
572 update_lap = true;
574 break;
576 default:
577 if (rb->default_event_handler(button) == SYS_USB_CONNECTED)
578 return PLUGIN_USB_CONNECTED;
579 break;
582 return PLUGIN_OK;