diff options
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 |