1
0
Fork 0
forked from len0rd/rockbox

Fixes: (1) metronome didn't yield() at all, (2) possible race condition, (3) complete cleanup when detecting USB connection, (4) removed TAB chars

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@5022 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Jens Arnold 2004-08-28 09:07:21 +00:00
parent bf955a8b6b
commit 0df29b2157

View file

@ -91,15 +91,15 @@ static unsigned char sound[]={
void led(bool on){ void led(bool on){
if(on) if(on)
or_b(0x40, &PBDRL); or_b(0x40, &PBDRL);
else else
and_b(~0x40, &PBDRL); and_b(~0x40, &PBDRL);
} }
void calc_period(void){ void calc_period(void){
period = 61440/bpm-1; // (60*1024)/bpm; period = 61440/bpm-1; // (60*1024)/bpm;
} }
void callback(unsigned char** start, int* size){ void callback(unsigned char** start, int* size){
(void)start; /* unused parameter, avoid warning */ (void)start; /* unused parameter, avoid warning */
*size = NULL; /* end of data */ *size = NULL; /* end of data */
@ -140,9 +140,9 @@ void draw_display(void){
#ifdef HAVE_LCD_BITMAP #ifdef HAVE_LCD_BITMAP
rb->lcd_drawline(0, 12, 111, 12); rb->lcd_drawline(0, 12, 111, 12);
if(sound_paused) if(sound_paused)
rb->lcd_puts(0,2,"press play"); rb->lcd_puts(0,2,"press play");
else else
rb->lcd_puts(0,2,"press pause"); rb->lcd_puts(0,2,"press pause");
rb->lcd_update(); rb->lcd_update();
#endif #endif
} }
@ -157,10 +157,10 @@ void change_volume(int delta){
if (vol != rb->global_settings->volume) { if (vol != rb->global_settings->volume) {
rb->mpeg_sound_set(SOUND_VOLUME, vol); rb->mpeg_sound_set(SOUND_VOLUME, vol);
rb->global_settings->volume = vol; rb->global_settings->volume = vol;
rb->snprintf(buffer, sizeof(buffer), "Vol: %d ", vol); rb->snprintf(buffer, sizeof(buffer), "Vol: %d ", vol);
#ifdef HAVE_LCD_BITMAP #ifdef HAVE_LCD_BITMAP
rb->lcd_puts(10,7, buffer); rb->lcd_puts(10,7, buffer);
rb->lcd_update(); rb->lcd_update();
#else #else
rb->lcd_puts(0,1, buffer); rb->lcd_puts(0,1, buffer);
#endif #endif
@ -169,13 +169,13 @@ void change_volume(int delta){
void timer_callback(void){ void timer_callback(void){
if(minitick>=period){ if(minitick>=period){
minitick = 0; minitick = 0;
if(!sound_active && !sound_paused){ if(!sound_active && !sound_paused){
play_tock(); play_tock();
} }
} }
else { else {
minitick++; minitick++;
} }
} }
@ -189,7 +189,7 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter){
rb->bitswap(sound, sizeof(sound)); rb->bitswap(sound, sizeof(sound));
if (rb->mp3_is_playing()) if (rb->mp3_is_playing())
rb->mp3_play_stop(); // stop audio ISR rb->mp3_play_stop(); // stop audio ISR
calc_period(); calc_period();
rb->plugin_register_timer((FREQ/1024), 1, timer_callback); rb->plugin_register_timer((FREQ/1024), 1, timer_callback);
@ -198,83 +198,85 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter){
/* main loop */ /* main loop */
while (true){ while (true){
switch (rb->button_get(false)) { switch (rb->button_get(true)) {
#ifdef HAVE_RECORDER_KEYPAD #ifdef HAVE_RECORDER_KEYPAD
case BUTTON_OFF: case BUTTON_OFF:
#else #else
case BUTTON_STOP: case BUTTON_STOP:
#endif #endif
/* get out of here */ /* get out of here */
rb->mp3_play_stop(); /* stop audio ISR */ rb->plugin_unregister_timer();
rb->plugin_unregister_timer(); rb->mp3_play_stop(); /* stop audio ISR */
led(0); led(0);
return PLUGIN_OK; return PLUGIN_OK;
case BUTTON_PLAY: case BUTTON_PLAY:
if(sound_paused) if(sound_paused)
sound_paused = false; sound_paused = false;
else else
sound_paused = true; sound_paused = true;
calc_period(); calc_period();
draw_display(); draw_display();
break; break;
#ifdef HAVE_RECORDER_KEYPAD #ifdef HAVE_RECORDER_KEYPAD
case BUTTON_UP: case BUTTON_UP:
case BUTTON_UP | BUTTON_REPEAT: case BUTTON_UP | BUTTON_REPEAT:
#else #else
case BUTTON_ON | BUTTON_RIGHT: case BUTTON_ON | BUTTON_RIGHT:
case BUTTON_ON | BUTTON_RIGHT | BUTTON_REPEAT: case BUTTON_ON | BUTTON_RIGHT | BUTTON_REPEAT:
#endif #endif
change_volume(1); change_volume(1);
calc_period(); calc_period();
break; break;
#ifdef HAVE_RECORDER_KEYPAD #ifdef HAVE_RECORDER_KEYPAD
case BUTTON_DOWN: case BUTTON_DOWN:
case BUTTON_DOWN | BUTTON_REPEAT: case BUTTON_DOWN | BUTTON_REPEAT:
#else #else
case BUTTON_ON | BUTTON_LEFT: case BUTTON_ON | BUTTON_LEFT:
case BUTTON_ON | BUTTON_LEFT | BUTTON_REPEAT: case BUTTON_ON | BUTTON_LEFT | BUTTON_REPEAT:
#endif #endif
change_volume(-1); change_volume(-1);
calc_period(); calc_period();
break; break;
case BUTTON_LEFT: case BUTTON_LEFT:
if (bpm > 1) if (bpm > 1)
bpm--; bpm--;
calc_period(); calc_period();
draw_display(); draw_display();
break; break;
case BUTTON_LEFT | BUTTON_REPEAT: case BUTTON_LEFT | BUTTON_REPEAT:
if (bpm > 10) if (bpm > 10)
bpm=bpm-10; bpm=bpm-10;
calc_period(); calc_period();
draw_display(); draw_display();
break; break;
case BUTTON_RIGHT: case BUTTON_RIGHT:
if(bpm < 400) if(bpm < 400)
bpm++; bpm++;
calc_period(); calc_period();
draw_display(); draw_display();
break; break;
case BUTTON_RIGHT | BUTTON_REPEAT: case BUTTON_RIGHT | BUTTON_REPEAT:
if (bpm < 400) if (bpm < 400)
bpm=bpm+10; bpm=bpm+10;
calc_period(); calc_period();
draw_display(); draw_display();
break; break;
case SYS_USB_CONNECTED: case SYS_USB_CONNECTED:
rb->plugin_unregister_timer(); rb->plugin_unregister_timer();
rb->usb_screen(); rb->mp3_play_stop(); /* stop audio ISR */
return PLUGIN_USB_CONNECTED; led(0);
} rb->usb_screen();
return PLUGIN_USB_CONNECTED;
}
} }
} }
#endif /* #ifndef SIMULATOR */ #endif /* #ifndef SIMULATOR */