FreeCalypso > hg > freecalypso-sw
annotate gsm-fw/gpf/osl/os_tim_ir.c @ 473:658b141a1600
os_com_fl.c: small buglet in the reconstruction
author | Michael Spacefalcon <msokolov@ivan.Harhan.ORG> |
---|---|
date | Fri, 27 Jun 2014 00:05:23 +0000 |
parents | 6adbacc0f255 |
children | 5639b4fa8672 |
rev | line source |
---|---|
461
7017da4978bb
OSL: os_tim_ir.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
1 /* |
7017da4978bb
OSL: os_tim_ir.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
2 * This C module is a reconstruction based on the disassembly of |
7017da4978bb
OSL: os_tim_ir.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
3 * os_tim.obj in frame_na7_db_ir.lib from the Leonardo package. |
7017da4978bb
OSL: os_tim_ir.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
4 */ |
7017da4978bb
OSL: os_tim_ir.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
5 |
7017da4978bb
OSL: os_tim_ir.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
6 /* set of included headers from COFF symtab: */ |
7017da4978bb
OSL: os_tim_ir.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
7 #include <stdio.h> |
7017da4978bb
OSL: os_tim_ir.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
8 #include "gpfconf.h" /* FreeCalypso addition */ |
7017da4978bb
OSL: os_tim_ir.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
9 #include "../../nucleus/nucleus.h" |
7017da4978bb
OSL: os_tim_ir.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
10 #include "typedefs.h" |
7017da4978bb
OSL: os_tim_ir.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
11 #include "os.h" |
7017da4978bb
OSL: os_tim_ir.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
12 #include "gdi.h" |
7017da4978bb
OSL: os_tim_ir.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
13 #include "os_types.h" |
7017da4978bb
OSL: os_tim_ir.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
14 #include "os_glob.h" |
7017da4978bb
OSL: os_tim_ir.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
15 |
7017da4978bb
OSL: os_tim_ir.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
16 extern T_OS_TIMER_ENTRY TimerTable[]; |
7017da4978bb
OSL: os_tim_ir.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
17 extern T_OS_TIMER_TABLE_ENTRY *p_list[]; |
7017da4978bb
OSL: os_tim_ir.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
18 |
7017da4978bb
OSL: os_tim_ir.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
19 extern unsigned os_time_to_tick_multiplier; |
7017da4978bb
OSL: os_tim_ir.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
20 extern unsigned os_tick_to_time_multiplier; |
7017da4978bb
OSL: os_tim_ir.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
21 |
7017da4978bb
OSL: os_tim_ir.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
22 extern unsigned t_start_ticks; |
7017da4978bb
OSL: os_tim_ir.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
23 extern T_OS_TIMER_TABLE_ENTRY * volatile t_running; |
7017da4978bb
OSL: os_tim_ir.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
24 extern int used_timers; |
7017da4978bb
OSL: os_tim_ir.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
25 extern int next_t_handle; |
7017da4978bb
OSL: os_tim_ir.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
26 extern int volatile t_list_access; |
7017da4978bb
OSL: os_tim_ir.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
27 extern int max_used_timers; |
7017da4978bb
OSL: os_tim_ir.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
28 extern NU_SEMAPHORE TimSemCB; |
7017da4978bb
OSL: os_tim_ir.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
29 extern NU_TIMER os_timer_cb; |
7017da4978bb
OSL: os_tim_ir.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
30 |
7017da4978bb
OSL: os_tim_ir.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
31 void |
7017da4978bb
OSL: os_tim_ir.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
32 timer_error(int err) |
7017da4978bb
OSL: os_tim_ir.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
33 { |
7017da4978bb
OSL: os_tim_ir.c started
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
34 } |
464
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
35 |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
36 /* |
472
6adbacc0f255
os_tim_ir.c: reconstruction complete
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
471
diff
changeset
|
37 * The following function reconstructions have been contributed by Das Signal, |
6adbacc0f255
os_tim_ir.c: reconstruction complete
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
471
diff
changeset
|
38 * then reviewed and fixed in a few places by Space Falcon. |
464
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
39 */ |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
40 |
465
d5cf423dad3a
os_tim_ir.c: os_Timeout() fixed
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
464
diff
changeset
|
41 void |
d5cf423dad3a
os_tim_ir.c: os_Timeout() fixed
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
464
diff
changeset
|
42 os_Timeout(UNSIGNED t_handle) /* argument is unused */ |
464
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
43 { |
465
d5cf423dad3a
os_tim_ir.c: os_Timeout() fixed
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
464
diff
changeset
|
44 ULONG s_ticks; |
d5cf423dad3a
os_tim_ir.c: os_Timeout() fixed
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
464
diff
changeset
|
45 OS_HANDLE task_handle, e_handle; |
d5cf423dad3a
os_tim_ir.c: os_Timeout() fixed
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
464
diff
changeset
|
46 USHORT t_index; |
d5cf423dad3a
os_tim_ir.c: os_Timeout() fixed
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
464
diff
changeset
|
47 int i, done; |
464
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
48 T_OS_TIMER_TABLE_ENTRY **t_r4; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
49 T_OS_TIMER_TABLE_ENTRY *timer; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
50 void (*timeout_func) (OS_HANDLE, OS_HANDLE, USHORT); |
465
d5cf423dad3a
os_tim_ir.c: os_Timeout() fixed
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
464
diff
changeset
|
51 OS_TIME resched_time; |
464
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
52 |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
53 if (t_list_access) { |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
54 t_start_ticks++; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
55 NU_Reset_Timer(&os_timer_cb, os_Timeout, 1, 0, |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
56 NU_ENABLE_TIMER); |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
57 return; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
58 } |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
59 |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
60 t_list_access = 1; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
61 timer = t_running; |
465
d5cf423dad3a
os_tim_ir.c: os_Timeout() fixed
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
464
diff
changeset
|
62 if (timer) { |
464
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
63 s_ticks = 0; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
64 done = 0; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
65 i = 0; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
66 do { |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
67 timeout_func = timer->TimeoutProc; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
68 if (timer->p_ticks) |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
69 p_list[i++] = timer; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
70 task_handle = timer->task_handle; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
71 e_handle = timer->entity_handle; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
72 t_index = timer->t_index; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
73 timer->status = 1; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
74 if (timer->next == timer) { |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
75 t_running = NULL; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
76 done = 1; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
77 } else { |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
78 timer->prev->next = timer->next; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
79 timer->next->prev = timer->prev; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
80 if (timer->next->r_ticks) { |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
81 t_running = timer->next; |
465
d5cf423dad3a
os_tim_ir.c: os_Timeout() fixed
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
464
diff
changeset
|
82 s_ticks = timer->next->r_ticks; |
464
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
83 done = 1; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
84 } else |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
85 timer = timer->next; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
86 } |
465
d5cf423dad3a
os_tim_ir.c: os_Timeout() fixed
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
464
diff
changeset
|
87 timeout_func(task_handle, e_handle, t_index); |
464
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
88 } |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
89 while (!done); |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
90 |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
91 if (s_ticks) { |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
92 t_start_ticks = NU_Retrieve_Clock(); |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
93 NU_Reset_Timer(&os_timer_cb, os_Timeout, s_ticks, 0, |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
94 NU_ENABLE_TIMER); |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
95 } |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
96 } |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
97 for (t_r4 = p_list; *t_r4; t_r4++) { |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
98 timer = *t_r4; |
465
d5cf423dad3a
os_tim_ir.c: os_Timeout() fixed
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
464
diff
changeset
|
99 resched_time = SYSTEM_TICKS_TO_TIME(timer->p_ticks); |
464
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
100 os_StartTimer(timer->entity_handle, timer->t_handle, |
465
d5cf423dad3a
os_tim_ir.c: os_Timeout() fixed
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
464
diff
changeset
|
101 timer->t_index, resched_time, resched_time); |
464
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
102 *t_r4 = NULL; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
103 } |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
104 |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
105 t_list_access = 0; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
106 return; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
107 } |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
108 |
466
d43bf2d301de
os_tim_ir.c: os_remove_timer_from_list(): minor cosmetic polish
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
465
diff
changeset
|
109 static int |
d43bf2d301de
os_tim_ir.c: os_remove_timer_from_list(): minor cosmetic polish
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
465
diff
changeset
|
110 os_remove_timer_from_list(T_OS_TIMER_TABLE_ENTRY *timer) |
464
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
111 { |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
112 OS_TICK c_ticks; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
113 |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
114 if (timer != t_running) { |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
115 if (timer->next != t_running) |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
116 timer->next->r_ticks += timer->r_ticks; |
466
d43bf2d301de
os_tim_ir.c: os_remove_timer_from_list(): minor cosmetic polish
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
465
diff
changeset
|
117 } else { |
464
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
118 c_ticks = NU_Retrieve_Clock(); |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
119 if (timer->next == timer) { |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
120 t_running = 0; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
121 } else { |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
122 timer->next->r_ticks = |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
123 t_start_ticks + timer->r_ticks + |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
124 timer->next->r_ticks - c_ticks; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
125 t_running = timer->next; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
126 } |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
127 NU_Control_Timer(&os_timer_cb, NU_DISABLE_TIMER); |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
128 if (t_running != NULL) { |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
129 t_start_ticks = c_ticks; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
130 if (t_running->r_ticks != 0) |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
131 NU_Reset_Timer(&os_timer_cb, os_Timeout, |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
132 t_running->r_ticks, 0, |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
133 NU_ENABLE_TIMER); |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
134 } |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
135 } |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
136 if (timer->next != timer) { |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
137 timer->prev->next = timer->next; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
138 timer->next->prev = timer->prev; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
139 } |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
140 timer->next = NULL; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
141 timer->prev = NULL; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
142 timer->status = 1; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
143 return 1; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
144 } |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
145 |
467
aa9aec3ba437
os_tim_ir.c: os_add_timer_to_list(): minor polish
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
466
diff
changeset
|
146 static unsigned |
aa9aec3ba437
os_tim_ir.c: os_add_timer_to_list(): minor polish
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
466
diff
changeset
|
147 os_add_timer_to_list(T_OS_TIMER_TABLE_ENTRY *timer, OS_TICK ticks) |
464
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
148 { |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
149 T_OS_TIMER_TABLE_ENTRY *t_list; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
150 OS_TICK c_ticks, r1_ticks, return_ticks; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
151 |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
152 if (ticks == 0) |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
153 ticks = 1; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
154 |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
155 c_ticks = NU_Retrieve_Clock(); |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
156 t_list = t_running; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
157 if (t_list != NULL) { |
467
aa9aec3ba437
os_tim_ir.c: os_add_timer_to_list(): minor polish
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
466
diff
changeset
|
158 if (t_list->r_ticks >= c_ticks - t_start_ticks) { |
aa9aec3ba437
os_tim_ir.c: os_add_timer_to_list(): minor polish
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
466
diff
changeset
|
159 r1_ticks = t_list->r_ticks - c_ticks + t_start_ticks; |
aa9aec3ba437
os_tim_ir.c: os_add_timer_to_list(): minor polish
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
466
diff
changeset
|
160 t_list->r_ticks = r1_ticks; |
464
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
161 } else { |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
162 r1_ticks = 0; |
467
aa9aec3ba437
os_tim_ir.c: os_add_timer_to_list(): minor polish
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
466
diff
changeset
|
163 t_list->r_ticks = 0; |
464
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
164 } |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
165 t_start_ticks = c_ticks; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
166 return_ticks = 0; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
167 while (ticks >= r1_ticks) { |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
168 ticks -= r1_ticks; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
169 t_list = t_list->next; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
170 if (t_list == t_running) |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
171 goto out; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
172 r1_ticks = t_list->r_ticks; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
173 } |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
174 t_list->r_ticks -= ticks; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
175 if (t_list == t_running) { |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
176 t_running = timer; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
177 t_start_ticks = c_ticks; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
178 NU_Control_Timer(&os_timer_cb, NU_DISABLE_TIMER); |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
179 return_ticks = ticks; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
180 } |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
181 out: |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
182 timer->next = t_list; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
183 timer->prev = t_list->prev; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
184 t_list->prev->next = timer; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
185 t_list->prev = timer; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
186 timer->r_ticks = ticks; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
187 } else { |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
188 timer->next = timer; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
189 timer->prev = timer; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
190 timer->r_ticks = ticks; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
191 t_start_ticks = c_ticks; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
192 t_running = timer; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
193 return_ticks = ticks; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
194 } |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
195 timer->status = 2; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
196 return return_ticks; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
197 } |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
198 |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
199 GLOBAL LONG os_StartTimer(OS_HANDLE TaskHandle, OS_HANDLE TimerHandle, |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
200 USHORT Index, OS_TIME InitialTime, |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
201 OS_TIME RescheduleTime) |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
202 { |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
203 T_OS_TIMER_TABLE_ENTRY *timer; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
204 OS_TICK ticks; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
205 USHORT status; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
206 STATUS sts; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
207 |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
208 t_list_access = 1; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
209 timer = &TimerTable[TimerHandle].entry; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
210 if (TimerHandle > MaxSimultaneousTimer || timer->status == 0) { |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
211 t_list_access = 0; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
212 return OS_ERROR; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
213 } |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
214 |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
215 sts = NU_Obtain_Semaphore(&TimSemCB, NU_SUSPEND); |
468
6389bfe95f23
os_tim_ir.c: os_StartTimer(): polish
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
467
diff
changeset
|
216 /* Disassembly reveals this bogon in the original code: |
6389bfe95f23
os_tim_ir.c: os_StartTimer(): polish
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
467
diff
changeset
|
217 if (sts != NU_SUCCESS) |
6389bfe95f23
os_tim_ir.c: os_StartTimer(): polish
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
467
diff
changeset
|
218 os_MyHandle(); |
464
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
219 */ |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
220 status = timer->status; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
221 if (status == 2) |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
222 status = os_remove_timer_from_list(timer); |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
223 timer->t_handle = TimerHandle; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
224 timer->task_handle = os_MyHandle(); |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
225 timer->entity_handle = TaskHandle; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
226 timer->t_index = Index; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
227 timer->p_ticks = TIME_TO_SYSTEM_TICKS(RescheduleTime); |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
228 ticks = os_add_timer_to_list(timer, TIME_TO_SYSTEM_TICKS(InitialTime)); |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
229 if (ticks) |
468
6389bfe95f23
os_tim_ir.c: os_StartTimer(): polish
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
467
diff
changeset
|
230 NU_Reset_Timer(&os_timer_cb, os_Timeout, ticks, 0, |
6389bfe95f23
os_tim_ir.c: os_StartTimer(): polish
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
467
diff
changeset
|
231 NU_ENABLE_TIMER); |
464
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
232 if (sts == NU_SUCCESS) |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
233 NU_Release_Semaphore(&TimSemCB); |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
234 t_list_access = 0; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
235 return OS_OK; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
236 } |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
237 |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
238 GLOBAL LONG os_StopTimer(OS_HANDLE TaskHandle, OS_HANDLE TimerHandle) |
469
5031958cea52
os_tim_ir.c: os_StopTimer(): comment fix
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
468
diff
changeset
|
239 /* TaskHandle argument is unused */ |
464
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
240 { |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
241 T_OS_TIMER_ENTRY *timer_e; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
242 STATUS sts; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
243 |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
244 t_list_access = 1; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
245 timer_e = &TimerTable[TimerHandle]; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
246 if (TimerHandle > MaxSimultaneousTimer || timer_e->entry.status == 0) { |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
247 t_list_access = 0; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
248 return OS_ERROR; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
249 } |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
250 sts = NU_Obtain_Semaphore(&TimSemCB, NU_SUSPEND); |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
251 if (timer_e->entry.status == 2) |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
252 os_remove_timer_from_list(&timer_e->entry); |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
253 if (sts == NU_SUCCESS) |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
254 NU_Release_Semaphore(&TimSemCB); |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
255 t_list_access = 0; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
256 return OS_OK; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
257 } |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
258 |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
259 GLOBAL LONG os_IncrementTick(OS_TICK ticks) |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
260 { |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
261 return OS_OK; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
262 } |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
263 |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
264 GLOBAL LONG os_DestroyTimer(OS_HANDLE TaskHandle, OS_HANDLE TimerHandle) |
470
81b941dd415d
os_tim_ir.c: os_DestroyTimer(): missed assignment line
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
469
diff
changeset
|
265 /* TaskHandle argument is unused */ |
464
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
266 { |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
267 STATUS sts; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
268 T_OS_TIMER_ENTRY *timer_e; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
269 |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
270 t_list_access = 1; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
271 sts = NU_Obtain_Semaphore(&TimSemCB, NU_SUSPEND); |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
272 timer_e = &TimerTable[TimerHandle]; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
273 if (TimerHandle > MaxSimultaneousTimer || timer_e->entry.status == 0) { |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
274 if (sts == NU_SUCCESS) |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
275 NU_Release_Semaphore(&TimSemCB); |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
276 t_list_access = 0; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
277 return OS_ERROR; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
278 } |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
279 timer_e->next_t_handle = next_t_handle; |
470
81b941dd415d
os_tim_ir.c: os_DestroyTimer(): missed assignment line
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
469
diff
changeset
|
280 next_t_handle = TimerHandle; |
464
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
281 timer_e->entry.status = 0; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
282 used_timers--; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
283 t_list_access = 0; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
284 if (sts == NU_SUCCESS) |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
285 NU_Release_Semaphore(&TimSemCB); |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
286 return OS_OK; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
287 } |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
288 |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
289 GLOBAL LONG os_CreateTimer(OS_HANDLE TaskHandle, |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
290 void (*TimeoutProc) (OS_HANDLE, OS_HANDLE, USHORT), |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
291 OS_HANDLE *TimerHandle, OS_HANDLE MemPoolHandle) |
471
c8b5a8e84ef7
os_tim_ir.c: os_CreateTimer(): minor fixes
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
470
diff
changeset
|
292 /* TaskHandle and MemPoolHandle arguments are unused */ |
464
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
293 { |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
294 STATUS sts; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
295 T_OS_TIMER_ENTRY *timer_e; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
296 |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
297 t_list_access = 1; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
298 sts = NU_Obtain_Semaphore(&TimSemCB, NU_SUSPEND); |
471
c8b5a8e84ef7
os_tim_ir.c: os_CreateTimer(): minor fixes
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
470
diff
changeset
|
299 if (next_t_handle == 0) { /* no free timers left */ |
464
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
300 if (sts == NU_SUCCESS) |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
301 NU_Release_Semaphore(&TimSemCB); |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
302 t_list_access = 0; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
303 return OS_ERROR; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
304 } |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
305 |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
306 timer_e = &TimerTable[next_t_handle]; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
307 timer_e->entry.status = 1; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
308 timer_e->entry.TimeoutProc = TimeoutProc; |
471
c8b5a8e84ef7
os_tim_ir.c: os_CreateTimer(): minor fixes
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
470
diff
changeset
|
309 *TimerHandle = next_t_handle; |
464
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
310 next_t_handle = timer_e->next_t_handle; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
311 used_timers++; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
312 if (max_used_timers < used_timers) |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
313 max_used_timers = used_timers; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
314 if (sts == NU_SUCCESS) |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
315 NU_Release_Semaphore(&TimSemCB); |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
316 t_list_access = 0; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
317 return OS_OK; |
14d2a7f473c3
OSL: os_tim_ir.c reconstruction by Das Signal
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
461
diff
changeset
|
318 } |