From 64bde94ecf65b752a15250fb5ff05438502c4fde Mon Sep 17 00:00:00 2001 From: Felix Arends Date: Tue, 25 Jun 2002 21:01:08 +0000 Subject: Finally, again a working version of the win32 simulator. I re-wrote the makefile, it is much more compact now. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@1191 a1c6a512-1295-4272-9138-f99709370657 --- uisimulator/win32/kernel.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) (limited to 'uisimulator/win32/kernel.c') diff --git a/uisimulator/win32/kernel.c b/uisimulator/win32/kernel.c index 102bb6c82a..3410bc9cc9 100644 --- a/uisimulator/win32/kernel.c +++ b/uisimulator/win32/kernel.c @@ -21,6 +21,7 @@ #include "uisw32.h" #include "kernel.h" #include "thread-win32.h" +#include "thread.h" void sleep(int ticks) { @@ -31,4 +32,49 @@ void sleep(int ticks) void yield (void) { PostThreadMessage (GetWindowThreadProcessId (hGUIWnd,NULL), TM_YIELD, 0, 0); +} + +void queue_init(struct event_queue *q) +{ + q->read = 0; + q->write = 0; +} + +void queue_wait(struct event_queue *q, struct event *ev) +{ + while(q->read == q->write) + { + switch_thread(); + } + + *ev = q->events[(q->read++) & QUEUE_LENGTH_MASK]; +} + +void queue_post(struct event_queue *q, int id, void *data) +{ + int wr; + int oldlevel; + + oldlevel = set_irq_level(15); + wr = (q->write++) & QUEUE_LENGTH_MASK; + + q->events[wr].id = id; + q->events[wr].data = data; + set_irq_level(oldlevel); +} + +bool queue_empty(struct event_queue* q) +{ + return ( q->read == q->write ); +} + +void switch_thread (void) +{ + yield (); +} + +int set_irq_level (int level) +{ + static int _lv = 0; + return (_lv = level); } \ No newline at end of file -- cgit v1.2.3