diff options
author | Felix Arends <edx@rockbox.org> | 2002-06-25 21:01:08 +0000 |
---|---|---|
committer | Felix Arends <edx@rockbox.org> | 2002-06-25 21:01:08 +0000 |
commit | 64bde94ecf65b752a15250fb5ff05438502c4fde (patch) | |
tree | 254e2c1c0e1168d9c6f23b84df1313477efb961e /uisimulator/win32/kernel.c | |
parent | 969dcb78719e3210eeb2e7fa8b37ce422f16f2f2 (diff) | |
download | rockbox-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.c | 46 |
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 | ||
25 | void sleep(int ticks) | 26 | void sleep(int ticks) |
26 | { | 27 | { |
@@ -31,4 +32,49 @@ void sleep(int ticks) | |||
31 | void yield (void) | 32 | void yield (void) |
32 | { | 33 | { |
33 | PostThreadMessage (GetWindowThreadProcessId (hGUIWnd,NULL), TM_YIELD, 0, 0); | 34 | PostThreadMessage (GetWindowThreadProcessId (hGUIWnd,NULL), TM_YIELD, 0, 0); |
35 | } | ||
36 | |||
37 | void queue_init(struct event_queue *q) | ||
38 | { | ||
39 | q->read = 0; | ||
40 | q->write = 0; | ||
41 | } | ||
42 | |||
43 | void 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 | |||
53 | void 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 | |||
66 | bool queue_empty(struct event_queue* q) | ||
67 | { | ||
68 | return ( q->read == q->write ); | ||
69 | } | ||
70 | |||
71 | void switch_thread (void) | ||
72 | { | ||
73 | yield (); | ||
74 | } | ||
75 | |||
76 | int 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 |