FreeCalypso > hg > fc-selenite
annotate src/gpf/osl/os_tim_ir.c @ 112:fdecfb3bd860
.../drv_app/r2d/r2d_*.c: LCD include case fixes from Magnetite
R2D is not used in Selenite, but we strive to keep the two source trees
in sync as much as possible to reduce the diffs.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sat, 13 Oct 2018 16:56:22 +0000 |
parents | 8b2a9a374324 |
children |
rev | line source |
---|---|
6
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 /* |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
2 * This C module is a reconstruction based on the disassembly of |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
3 * os_tim.obj in frame_na7_db_ir.lib from the Leonardo package, |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
4 * subsequently reworked by Space Falcon. |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
5 * |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 * The original decompilation has been contributed by Das Signal. |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 */ |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
8 |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 /* set of included headers from COFF symtab: */ |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10 #include <stdio.h> |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
11 #include "nucleus.h" |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
12 #include "typedefs.h" |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 #include "os.h" |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 #include "gdi.h" |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 #include "os_types.h" |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 #include "os_glob.h" |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
17 |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
18 extern T_OS_TIMER_ENTRY TimerTable[]; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
19 extern T_OS_TIMER_TABLE_ENTRY *p_list[]; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
20 |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
21 extern unsigned os_time_to_tick_multiplier; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
22 extern unsigned os_tick_to_time_multiplier; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
23 |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 extern unsigned volatile t_start_ticks; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
25 extern T_OS_TIMER_TABLE_ENTRY *t_running; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
26 extern int used_timers; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27 extern int next_t_handle; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28 extern int volatile t_list_access; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 extern int max_used_timers; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
30 extern NU_SEMAPHORE TimSemCB; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
31 extern NU_TIMER os_timer_cb; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
32 |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
33 #ifdef __GNUC__ |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
34 #define BARRIER asm volatile ("": : :"memory") |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
35 #else |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
36 #define BARRIER /* prayer */ |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
37 #endif |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
38 |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
39 void |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
40 timer_error(int err) |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
41 { |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
42 } |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
43 |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
44 /* forward declaration */ |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
45 void os_Timeout(UNSIGNED t_handle); |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
46 |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
47 static int |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
48 os_remove_timer_from_list(T_OS_TIMER_TABLE_ENTRY *timer) |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
49 { |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
50 OS_TICK c_ticks; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
51 |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
52 if (timer != t_running) { |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
53 if (timer->next != t_running) |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
54 timer->next->r_ticks += timer->r_ticks; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
55 } else { |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
56 c_ticks = NU_Retrieve_Clock(); |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
57 if (timer->next == timer) { |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
58 t_running = 0; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
59 } else { |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
60 timer->next->r_ticks = |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
61 t_start_ticks + timer->r_ticks + |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
62 timer->next->r_ticks - c_ticks; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
63 t_running = timer->next; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
64 } |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
65 NU_Control_Timer(&os_timer_cb, NU_DISABLE_TIMER); |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
66 if (t_running != NULL) { |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
67 t_start_ticks = c_ticks; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
68 if (t_running->r_ticks != 0) |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
69 NU_Reset_Timer(&os_timer_cb, os_Timeout, |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
70 t_running->r_ticks, 0, |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
71 NU_ENABLE_TIMER); |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
72 } |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
73 } |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
74 if (timer->next != timer) { |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
75 timer->prev->next = timer->next; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
76 timer->next->prev = timer->prev; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
77 } |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
78 timer->next = NULL; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
79 timer->prev = NULL; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
80 timer->status = TMR_USED; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
81 return TMR_USED; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
82 } |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
83 |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
84 static unsigned |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
85 os_add_timer_to_list(T_OS_TIMER_TABLE_ENTRY *timer, OS_TICK ticks) |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
86 { |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
87 T_OS_TIMER_TABLE_ENTRY *t_list; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
88 OS_TICK c_ticks, e_ticks, r1_ticks, return_ticks; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
89 |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
90 if (ticks == 0) |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
91 ticks = 1; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
92 |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
93 c_ticks = NU_Retrieve_Clock(); |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
94 t_list = t_running; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
95 if (t_list != NULL) { |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
96 e_ticks = c_ticks - t_start_ticks; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
97 if (t_list->r_ticks >= e_ticks) { |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
98 r1_ticks = t_list->r_ticks - e_ticks; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
99 t_list->r_ticks = r1_ticks; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
100 } else { |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
101 r1_ticks = 0; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
102 t_list->r_ticks = 0; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
103 } |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
104 t_start_ticks = c_ticks; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
105 return_ticks = 0; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
106 while (ticks >= r1_ticks) { |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
107 ticks -= r1_ticks; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
108 t_list = t_list->next; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
109 if (t_list == t_running) |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
110 goto out; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
111 r1_ticks = t_list->r_ticks; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
112 } |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
113 t_list->r_ticks -= ticks; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
114 if (t_list == t_running) { |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
115 t_running = timer; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
116 t_start_ticks = c_ticks; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
117 NU_Control_Timer(&os_timer_cb, NU_DISABLE_TIMER); |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
118 return_ticks = ticks; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
119 } |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
120 out: |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
121 timer->next = t_list; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
122 timer->prev = t_list->prev; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
123 t_list->prev->next = timer; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
124 t_list->prev = timer; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
125 timer->r_ticks = ticks; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
126 } else { |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
127 timer->next = timer; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
128 timer->prev = timer; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
129 timer->r_ticks = ticks; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
130 t_start_ticks = c_ticks; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
131 t_running = timer; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
132 return_ticks = ticks; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
133 } |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
134 timer->status = TMR_ACTIVE; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
135 return return_ticks; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
136 } |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
137 |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
138 void |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
139 os_Timeout(UNSIGNED t_handle) /* argument is unused */ |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
140 { |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
141 ULONG s_ticks; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
142 OS_HANDLE task_handle, e_handle; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
143 USHORT t_index; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
144 int i, done; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
145 T_OS_TIMER_TABLE_ENTRY **t_r4; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
146 T_OS_TIMER_TABLE_ENTRY *timer; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
147 void (*timeout_func) (OS_HANDLE, OS_HANDLE, USHORT); |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
148 |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
149 if (t_list_access) { |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
150 t_start_ticks++; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
151 NU_Reset_Timer(&os_timer_cb, os_Timeout, 1, 0, |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
152 NU_ENABLE_TIMER); |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
153 return; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
154 } |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
155 |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
156 timer = t_running; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
157 if (timer) { |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
158 s_ticks = 0; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
159 done = 0; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
160 i = 0; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
161 do { |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
162 timeout_func = timer->TimeoutProc; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
163 if (timer->p_ticks) |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
164 p_list[i++] = timer; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
165 task_handle = timer->task_handle; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
166 e_handle = timer->entity_handle; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
167 t_index = timer->t_index; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
168 timer->status = TMR_USED; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
169 if (timer->next == timer) { |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
170 t_running = NULL; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
171 done = 1; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
172 } else { |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
173 timer->prev->next = timer->next; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
174 timer->next->prev = timer->prev; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
175 if (timer->next->r_ticks) { |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
176 t_running = timer->next; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
177 s_ticks = timer->next->r_ticks; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
178 done = 1; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
179 } else |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
180 timer = timer->next; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
181 } |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
182 timeout_func(task_handle, e_handle, t_index); |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
183 } |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
184 while (!done); |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
185 |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
186 if (s_ticks) { |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
187 t_start_ticks = NU_Retrieve_Clock(); |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
188 NU_Reset_Timer(&os_timer_cb, os_Timeout, s_ticks, 0, |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
189 NU_ENABLE_TIMER); |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
190 } |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
191 } |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
192 for (t_r4 = p_list; *t_r4; t_r4++) { |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
193 timer = *t_r4; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
194 s_ticks = os_add_timer_to_list(timer, timer->p_ticks); |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
195 if (s_ticks) |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
196 NU_Reset_Timer(&os_timer_cb, os_Timeout, s_ticks, 0, |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
197 NU_ENABLE_TIMER); |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
198 *t_r4 = NULL; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
199 } |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
200 } |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
201 |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
202 GLOBAL LONG os_StartTimer(OS_HANDLE TaskHandle, OS_HANDLE TimerHandle, |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
203 USHORT Index, OS_TIME InitialTime, |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
204 OS_TIME RescheduleTime) |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
205 { |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
206 T_OS_TIMER_TABLE_ENTRY *timer; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
207 OS_TICK ticks; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
208 STATUS sts; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
209 |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
210 if (TimerHandle > MaxSimultaneousTimer) |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
211 return(OS_ERROR); |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
212 timer = &TimerTable[TimerHandle].entry; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
213 sts = NU_Obtain_Semaphore(&TimSemCB, NU_SUSPEND); |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
214 if (timer->status == TMR_FREE) { |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
215 if (sts == NU_SUCCESS) |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
216 NU_Release_Semaphore(&TimSemCB); |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
217 return(OS_ERROR); |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
218 } |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
219 t_list_access = 1; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
220 BARRIER; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
221 if (timer->status == TMR_ACTIVE) |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
222 os_remove_timer_from_list(timer); |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
223 timer->t_handle = TimerHandle; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
224 timer->task_handle = os_MyHandle(); |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
225 timer->entity_handle = TaskHandle; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
226 timer->t_index = Index; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
227 timer->p_ticks = TIME_TO_SYSTEM_TICKS(RescheduleTime); |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
228 ticks = os_add_timer_to_list(timer, TIME_TO_SYSTEM_TICKS(InitialTime)); |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
229 if (ticks) |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
230 NU_Reset_Timer(&os_timer_cb, os_Timeout, ticks, 0, |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
231 NU_ENABLE_TIMER); |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
232 BARRIER; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
233 t_list_access = 0; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
234 if (sts == NU_SUCCESS) |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
235 NU_Release_Semaphore(&TimSemCB); |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
236 return OS_OK; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
237 } |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
238 |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
239 GLOBAL LONG os_StopTimer(OS_HANDLE TaskHandle, OS_HANDLE TimerHandle) |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
240 /* TaskHandle argument is unused */ |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
241 { |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
242 T_OS_TIMER_ENTRY *timer_e; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
243 STATUS sts; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
244 |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
245 if (TimerHandle > MaxSimultaneousTimer) |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
246 return(OS_ERROR); |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
247 timer_e = &TimerTable[TimerHandle]; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
248 sts = NU_Obtain_Semaphore(&TimSemCB, NU_SUSPEND); |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
249 if (timer_e->entry.status == TMR_FREE) { |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
250 if (sts == NU_SUCCESS) |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
251 NU_Release_Semaphore(&TimSemCB); |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
252 return OS_ERROR; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
253 } |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
254 t_list_access = 1; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
255 BARRIER; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
256 if (timer_e->entry.status == TMR_ACTIVE) |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
257 os_remove_timer_from_list(&timer_e->entry); |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
258 BARRIER; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
259 t_list_access = 0; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
260 if (sts == NU_SUCCESS) |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
261 NU_Release_Semaphore(&TimSemCB); |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
262 return OS_OK; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
263 } |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
264 |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
265 GLOBAL LONG os_IncrementTick(OS_TICK ticks) |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
266 { |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
267 return OS_OK; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
268 } |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
269 |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
270 GLOBAL LONG os_DestroyTimer(OS_HANDLE TaskHandle, OS_HANDLE TimerHandle) |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
271 /* TaskHandle argument is unused */ |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
272 { |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
273 STATUS sts; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
274 T_OS_TIMER_ENTRY *timer_e; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
275 |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
276 if (TimerHandle > MaxSimultaneousTimer) |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
277 return(OS_ERROR); |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
278 sts = NU_Obtain_Semaphore(&TimSemCB, NU_SUSPEND); |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
279 timer_e = &TimerTable[TimerHandle]; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
280 if (timer_e->entry.status != TMR_USED) { |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
281 if (sts == NU_SUCCESS) |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
282 NU_Release_Semaphore(&TimSemCB); |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
283 return OS_ERROR; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
284 } |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
285 timer_e->next_t_handle = next_t_handle; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
286 next_t_handle = TimerHandle; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
287 timer_e->entry.status = TMR_FREE; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
288 used_timers--; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
289 if (sts == NU_SUCCESS) |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
290 NU_Release_Semaphore(&TimSemCB); |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
291 return OS_OK; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
292 } |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
293 |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
294 GLOBAL LONG os_CreateTimer(OS_HANDLE TaskHandle, |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
295 void (*TimeoutProc) (OS_HANDLE, OS_HANDLE, USHORT), |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
296 OS_HANDLE *TimerHandle, OS_HANDLE MemPoolHandle) |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
297 /* TaskHandle and MemPoolHandle arguments are unused */ |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
298 { |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
299 STATUS sts; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
300 T_OS_TIMER_ENTRY *timer_e; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
301 |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
302 sts = NU_Obtain_Semaphore(&TimSemCB, NU_SUSPEND); |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
303 if (next_t_handle == 0) { /* no free timers left */ |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
304 if (sts == NU_SUCCESS) |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
305 NU_Release_Semaphore(&TimSemCB); |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
306 return OS_ERROR; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
307 } |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
308 |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
309 timer_e = &TimerTable[next_t_handle]; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
310 timer_e->entry.status = TMR_USED; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
311 timer_e->entry.TimeoutProc = TimeoutProc; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
312 *TimerHandle = next_t_handle; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
313 next_t_handle = timer_e->next_t_handle; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
314 used_timers++; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
315 if (max_used_timers < used_timers) |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
316 max_used_timers = used_timers; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
317 if (sts == NU_SUCCESS) |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
318 NU_Release_Semaphore(&TimSemCB); |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
319 return OS_OK; |
8b2a9a374324
src/gpf: addition of Magnetite src/gpf2
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
320 } |