1
0
Fork 0
forked from len0rd/rockbox

Implement as genuine a set_irq_level function for the sim as possible. The yield added earlier is still nescessary since other threads won't run anyway while viewing the database screen on either sim or target.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@15321 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Michael Sevakis 2007-10-26 23:11:18 +00:00
parent f026c0fc82
commit d6af287397
6 changed files with 184 additions and 52 deletions

View file

@ -22,6 +22,7 @@
#include <setjmp.h>
#include "autoconf.h"
#include "button.h"
#include "system-sdl.h"
#include "thread.h"
#include "kernel.h"
#include "uisdl.h"
@ -75,7 +76,11 @@ Uint32 tick_timer(Uint32 interval, void *param)
if (new_tick != current_tick) {
long i;
for (i = new_tick - current_tick; i > 0; i--)
{
sim_enter_irq_handler();
sim_tick_tasks();
sim_exit_irq_handler();
}
current_tick = new_tick;
}
@ -92,10 +97,14 @@ void gui_message_loop(void)
switch(event.type)
{
case SDL_KEYDOWN:
sim_enter_irq_handler();
button_event(event.key.keysym.sym, true);
sim_exit_irq_handler();
break;
case SDL_KEYUP:
sim_enter_irq_handler();
button_event(event.key.keysym.sym, false);
sim_exit_irq_handler();
break;
case SDL_QUIT:
done = true;
@ -170,11 +179,12 @@ bool gui_startup(void)
bool gui_shutdown(void)
{
SDL_RemoveTimer(tick_timer_id);
/* Order here is relevent to prevent deadlocks and use of destroyed
sync primitives by kernel threads */
thread_sdl_shutdown();
SDL_RemoveTimer(tick_timer_id);
sim_io_shutdown();
sim_kernel_shutdown();
return true;
}
@ -228,6 +238,11 @@ int main(int argc, char *argv[])
background = false;
}
if (!sim_kernel_init()) {
fprintf(stderr, "sim_kernel_init failed\n");
return -1;
}
if (!sim_io_init()) {
fprintf(stderr, "sim_io_init failed\n");
return -1;