summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/plugins/SOURCES2
-rw-r--r--apps/plugins/metronome.c84
2 files changed, 52 insertions, 34 deletions
diff --git a/apps/plugins/SOURCES b/apps/plugins/SOURCES
index a36ca1a2e1..494a4a631a 100644
--- a/apps/plugins/SOURCES
+++ b/apps/plugins/SOURCES
@@ -2,6 +2,7 @@
2favorites.c 2favorites.c
3firmware_flash.c 3firmware_flash.c
4helloworld.c 4helloworld.c
5metronome.c
5rockbox_flash.c 6rockbox_flash.c
6search.c 7search.c
7sort.c 8sort.c
@@ -9,7 +10,6 @@ vbrfix.c
9#if CONFIG_KEYPAD != ONDIO_PAD 10#if CONFIG_KEYPAD != ONDIO_PAD
10/* gradually bring in the ones not working yet */ 11/* gradually bring in the ones not working yet */
11battery_test.c 12battery_test.c
12metronome.c
13stopwatch.c 13stopwatch.c
14viewer.c 14viewer.c
15#endif /* #if CONFIG_KEYPAD != ONDIO_PAD */ 15#endif /* #if CONFIG_KEYPAD != ONDIO_PAD */
diff --git a/apps/plugins/metronome.c b/apps/plugins/metronome.c
index 74b7663f3f..2dd7c8950c 100644
--- a/apps/plugins/metronome.c
+++ b/apps/plugins/metronome.c
@@ -20,6 +20,30 @@
20 20
21#ifndef SIMULATOR 21#ifndef SIMULATOR
22 22
23/* variable button definitions */
24#if CONFIG_KEYPAD == RECORDER_PAD
25#define METRONOME_QUIT BUTTON_OFF
26#define METRONOME_PLAYPAUSE BUTTON_PLAY
27#define METRONOME_VOL_UP BUTTON_UP
28#define METRONOME_VOL_DOWN BUTTON_DOWN
29#define METRONOME_MSG_START "press play"
30#define METRONOME_MSG_STOP "press pause"
31
32#elif CONFIG_KEYPAD == ONDIO_PAD
33#define METRONOME_QUIT BUTTON_OFF
34#define METRONOME_PLAYPAUSE BUTTON_MENU
35#define METRONOME_VOL_UP BUTTON_UP
36#define METRONOME_VOL_DOWN BUTTON_DOWN
37#define METRONOME_MSG_START "start: menu"
38#define METRONOME_MSG_STOP "pause: menu"
39
40#elif CONFIG_KEYPAD == PLAYER_PAD
41#define METRONOME_QUIT BUTTON_STOP
42#define METRONOME_PLAYPAUSE BUTTON_PLAY
43#define METRONOME_VOL_UP (BUTTON_ON | BUTTON_RIGHT)
44#define METRONOME_VOL_DOWN (BUTTON_ON | BUTTON_LEFT)
45
46#endif
23static struct plugin_api* rb; 47static struct plugin_api* rb;
24 48
25static int bpm = 120; 49static int bpm = 120;
@@ -140,9 +164,9 @@ void draw_display(void){
140#ifdef HAVE_LCD_BITMAP 164#ifdef HAVE_LCD_BITMAP
141 rb->lcd_drawline(0, 12, 111, 12); 165 rb->lcd_drawline(0, 12, 111, 12);
142 if(sound_paused) 166 if(sound_paused)
143 rb->lcd_puts(0,2,"press play"); 167 rb->lcd_puts(0,2,METRONOME_MSG_START);
144 else 168 else
145 rb->lcd_puts(0,2,"press pause"); 169 rb->lcd_puts(0,2,METRONOME_MSG_STOP);
146 rb->lcd_update(); 170 rb->lcd_update();
147#endif 171#endif
148} 172}
@@ -179,9 +203,19 @@ void timer_callback(void){
179 } 203 }
180} 204}
181 205
206void cleanup(void *parameter)
207{
208 (void)parameter;
209
210 rb->plugin_unregister_timer();
211 rb->mp3_play_stop(); /* stop audio ISR */
212 led(0);
213}
182 214
183enum plugin_status plugin_start(struct plugin_api* api, void* parameter){ 215enum plugin_status plugin_start(struct plugin_api* api, void* parameter){
184 216
217 int button;
218
185 TEST_PLUGIN_API(api); 219 TEST_PLUGIN_API(api);
186 (void)parameter; 220 (void)parameter;
187 rb = api; 221 rb = api;
@@ -198,20 +232,21 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter){
198 232
199 /* main loop */ 233 /* main loop */
200 while (true){ 234 while (true){
235
236 button = rb->button_get(true);
201 237
202 switch (rb->button_get(true)) { 238 if (rb->default_event_handler_ex(button, cleanup, NULL)
203#if CONFIG_KEYPAD == RECORDER_PAD 239 == SYS_USB_CONNECTED)
204 case BUTTON_OFF: 240 return PLUGIN_USB_CONNECTED;
205#else 241
206 case BUTTON_STOP: 242 switch (button) {
207#endif 243
244 case METRONOME_QUIT:
208 /* get out of here */ 245 /* get out of here */
209 rb->plugin_unregister_timer(); 246 cleanup(NULL);
210 rb->mp3_play_stop(); /* stop audio ISR */
211 led(0);
212 return PLUGIN_OK; 247 return PLUGIN_OK;
213 248
214 case BUTTON_PLAY: 249 case METRONOME_PLAYPAUSE:
215 if(sound_paused) 250 if(sound_paused)
216 sound_paused = false; 251 sound_paused = false;
217 else 252 else
@@ -220,24 +255,14 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter){
220 draw_display(); 255 draw_display();
221 break; 256 break;
222 257
223#if CONFIG_KEYPAD == RECORDER_PAD 258 case METRONOME_VOL_UP:
224 case BUTTON_UP: 259 case METRONOME_VOL_UP | BUTTON_REPEAT:
225 case BUTTON_UP | BUTTON_REPEAT:
226#else
227 case BUTTON_ON | BUTTON_RIGHT:
228 case BUTTON_ON | BUTTON_RIGHT | BUTTON_REPEAT:
229#endif
230 change_volume(1); 260 change_volume(1);
231 calc_period(); 261 calc_period();
232 break; 262 break;
233 263
234#if CONFIG_KEYPAD == RECORDER_PAD 264 case METRONOME_VOL_DOWN:
235 case BUTTON_DOWN: 265 case METRONOME_VOL_DOWN | BUTTON_REPEAT:
236 case BUTTON_DOWN | BUTTON_REPEAT:
237#else
238 case BUTTON_ON | BUTTON_LEFT:
239 case BUTTON_ON | BUTTON_LEFT | BUTTON_REPEAT:
240#endif
241 change_volume(-1); 266 change_volume(-1);
242 calc_period(); 267 calc_period();
243 break; 268 break;
@@ -269,13 +294,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter){
269 calc_period(); 294 calc_period();
270 draw_display(); 295 draw_display();
271 break; 296 break;
272
273 case SYS_USB_CONNECTED:
274 rb->plugin_unregister_timer();
275 rb->mp3_play_stop(); /* stop audio ISR */
276 led(0);
277 rb->usb_screen();
278 return PLUGIN_USB_CONNECTED;
279 } 297 }
280 } 298 }
281} 299}