summaryrefslogtreecommitdiff
path: root/uisimulator/win32/kernel.c
diff options
context:
space:
mode:
authorFelix Arends <edx@rockbox.org>2002-06-25 21:01:08 +0000
committerFelix Arends <edx@rockbox.org>2002-06-25 21:01:08 +0000
commit64bde94ecf65b752a15250fb5ff05438502c4fde (patch)
tree254e2c1c0e1168d9c6f23b84df1313477efb961e /uisimulator/win32/kernel.c
parent969dcb78719e3210eeb2e7fa8b37ce422f16f2f2 (diff)
downloadrockbox-64bde94ecf65b752a15250fb5ff05438502c4fde.tar.gz
rockbox-64bde94ecf65b752a15250fb5ff05438502c4fde.zip
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
Diffstat (limited to 'uisimulator/win32/kernel.c')
-rw-r--r--uisimulator/win32/kernel.c46
1 files changed, 46 insertions, 0 deletions
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 @@
21#include "uisw32.h" 21#include "uisw32.h"
22#include "kernel.h" 22#include "kernel.h"
23#include "thread-win32.h" 23#include "thread-win32.h"
24#include "thread.h"
24 25
25void sleep(int ticks) 26void sleep(int ticks)
26{ 27{
@@ -31,4 +32,49 @@ void sleep(int ticks)
31void yield (void) 32void yield (void)
32{ 33{
33 PostThreadMessage (GetWindowThreadProcessId (hGUIWnd,NULL), TM_YIELD, 0, 0); 34 PostThreadMessage (GetWindowThreadProcessId (hGUIWnd,NULL), TM_YIELD, 0, 0);
35}
36
37void queue_init(struct event_queue *q)
38{
39 q->read = 0;
40 q->write = 0;
41}
42
43void queue_wait(struct event_queue *q, struct event *ev)
44{
45 while(q->read == q->write)
46 {
47 switch_thread();
48 }
49
50 *ev = q->events[(q->read++) & QUEUE_LENGTH_MASK];
51}
52
53void queue_post(struct event_queue *q, int id, void *data)
54{
55 int wr;
56 int oldlevel;
57
58 oldlevel = set_irq_level(15);
59 wr = (q->write++) & QUEUE_LENGTH_MASK;
60
61 q->events[wr].id = id;
62 q->events[wr].data = data;
63 set_irq_level(oldlevel);
64}
65
66bool queue_empty(struct event_queue* q)
67{
68 return ( q->read == q->write );
69}
70
71void switch_thread (void)
72{
73 yield ();
74}
75
76int set_irq_level (int level)
77{
78 static int _lv = 0;
79 return (_lv = level);
34} \ No newline at end of file 80} \ No newline at end of file