forked from len0rd/rockbox
Moved implementation of user timer to the firmware layer, implemented it for iriver, and made it shareable based on priorities. On iriver, the user timer is shared between the backlight fading and other use, so if a plugin registers the timer, the backlight will resort to simple on/off switching until the plugin releases the timer again. Sorted and bumped the plugin api.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@7242 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
c20a00ef3e
commit
e44372ef18
12 changed files with 337 additions and 202 deletions
|
@ -230,15 +230,15 @@ void timer_set_mode(int mode)
|
|||
|
||||
if (mode == TM_RX_TIMEOUT)
|
||||
{
|
||||
rb->plugin_register_timer(gTimer.timeout, 11, timer4_isr);
|
||||
rb->timer_register(1, NULL, gTimer.timeout, 11, timer4_isr);
|
||||
}
|
||||
else if (mode == TM_TRANSMIT)
|
||||
{
|
||||
rb->plugin_register_timer(gTimer.transmit, 14, timer4_isr);
|
||||
rb->timer_register(1, NULL, gTimer.transmit, 14, timer4_isr);
|
||||
}
|
||||
else
|
||||
{
|
||||
rb->plugin_unregister_timer();
|
||||
rb->timer_unregister();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -252,7 +252,7 @@ void timer4_isr(void) /* IMIA4 */
|
|||
break;
|
||||
case TM_RX_TIMEOUT:
|
||||
receive_timeout_isr();
|
||||
rb->plugin_unregister_timer(); /* single shot */
|
||||
rb->timer_unregister(); /* single shot */
|
||||
break;
|
||||
default:
|
||||
timer_set_mode(TM_OFF); /* spurious interrupt */
|
||||
|
|
|
@ -257,11 +257,11 @@ void gray_show(bool enable)
|
|||
if (enable)
|
||||
{
|
||||
_gray_info.flags |= _GRAY_RUNNING;
|
||||
_gray_rb->plugin_register_timer(FREQ / 67, 1, _timer_isr);
|
||||
_gray_rb->timer_register(1, NULL, FREQ / 67, 1, _timer_isr);
|
||||
}
|
||||
else
|
||||
{
|
||||
_gray_rb->plugin_unregister_timer();
|
||||
_gray_rb->timer_unregister();
|
||||
_gray_info.flags &= ~_GRAY_RUNNING;
|
||||
_gray_rb->lcd_update(); /* restore whatever there was before */
|
||||
}
|
||||
|
|
|
@ -235,7 +235,7 @@ void cleanup(void *parameter)
|
|||
{
|
||||
(void)parameter;
|
||||
|
||||
rb->plugin_unregister_timer();
|
||||
rb->timer_unregister();
|
||||
rb->mp3_play_stop(); /* stop audio ISR */
|
||||
led(0);
|
||||
}
|
||||
|
@ -278,7 +278,7 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter){
|
|||
rb->mp3_play_stop(); // stop audio ISR
|
||||
|
||||
calc_period();
|
||||
rb->plugin_register_timer(((*rb->cpu_frequency)/1024), 1, timer_callback);
|
||||
rb->timer_register(1, NULL, (*rb->cpu_frequency)/1024, 1, timer_callback);
|
||||
|
||||
draw_display();
|
||||
|
||||
|
|
|
@ -192,7 +192,7 @@ void cleanup(void *parameter)
|
|||
{
|
||||
(void)parameter;
|
||||
|
||||
rb->plugin_unregister_timer();
|
||||
rb->timer_unregister();
|
||||
}
|
||||
|
||||
enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
|
||||
|
@ -205,7 +205,7 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
|
|||
(void)parameter;
|
||||
rb = api;
|
||||
|
||||
rb->plugin_register_timer(FREQ / 67, 1, timer_isr);
|
||||
rb->timer_register(1, NULL, FREQ / 67, 1, timer_isr);
|
||||
|
||||
while (!exit)
|
||||
{
|
||||
|
|
|
@ -388,7 +388,7 @@ void timer4_isr(void)
|
|||
else
|
||||
{
|
||||
gPlay.bVideoUnderrun = true;
|
||||
rb->plugin_unregister_timer(); // disable ourselves
|
||||
rb->timer_unregister(); // disable ourselves
|
||||
return; // no data available
|
||||
}
|
||||
}
|
||||
|
@ -490,7 +490,7 @@ int SeekTo(int fd, int nPos)
|
|||
if (gPlay.bHasAudio)
|
||||
rb->mp3_play_stop(); // stop audio ISR
|
||||
if (gPlay.bHasVideo)
|
||||
rb->plugin_unregister_timer(); // stop the timer
|
||||
rb->timer_unregister(); // stop the timer
|
||||
|
||||
rb->lseek(fd, nPos, SEEK_SET);
|
||||
|
||||
|
@ -538,9 +538,9 @@ int SeekTo(int fd, int nPos)
|
|||
gPlay.bVideoUnderrun = false;
|
||||
// start display interrupt
|
||||
#if FREQ == 12000000 /* Ondio speed kludge */
|
||||
rb->plugin_register_timer(gPlay.nFrameTimeAdjusted, 1, timer4_isr);
|
||||
rb->timer_register(1, NULL, gPlay.nFrameTimeAdjusted, 1, timer4_isr);
|
||||
#else
|
||||
rb->plugin_register_timer(gFileHdr.video_frametime, 1, timer4_isr);
|
||||
rb->timer_register(1, NULL, gFileHdr.video_frametime, 1, timer4_isr);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -553,7 +553,7 @@ void Cleanup(void *fd)
|
|||
rb->close(*(int*)fd); // close the file
|
||||
|
||||
if (gPlay.bHasVideo)
|
||||
rb->plugin_unregister_timer(); // stop video ISR, now I can use the display again
|
||||
rb->timer_unregister(); // stop video ISR, now I can use the display again
|
||||
|
||||
if (gPlay.bHasAudio)
|
||||
rb->mp3_play_stop(); // stop audio ISR
|
||||
|
@ -705,7 +705,7 @@ int PlayTick(int fd)
|
|||
if (gPlay.bHasAudio)
|
||||
rb->mp3_play_pause(false); // pause audio
|
||||
if (gPlay.bHasVideo)
|
||||
rb->plugin_unregister_timer(); // stop the timer
|
||||
rb->timer_unregister(); // stop the timer
|
||||
}
|
||||
else if (gPlay.state == paused)
|
||||
{
|
||||
|
@ -719,10 +719,10 @@ int PlayTick(int fd)
|
|||
if (gPlay.bHasVideo)
|
||||
{ // start the video
|
||||
#if FREQ == 12000000 /* Ondio speed kludge */
|
||||
rb->plugin_register_timer(
|
||||
rb->timer_register(1, NULL,
|
||||
gPlay.nFrameTimeAdjusted, 1, timer4_isr);
|
||||
#else
|
||||
rb->plugin_register_timer(
|
||||
rb->timer_register(1, NULL,
|
||||
gFileHdr.video_frametime, 1, timer4_isr);
|
||||
#endif
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue