comparison gsm-fw/gpf/osl/os_pro_fl.c @ 339:2f88c5b89113

OSL reconstruction: got to os_GetTaskData()
author Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
date Fri, 02 May 2014 23:44:12 +0000
parents 42bc1d7068ac
children de7141ad907e
comparison
equal deleted inserted replaced
338:42bc1d7068ac 339:2f88c5b89113
15 #include "os_glob.h" 15 #include "os_glob.h"
16 16
17 typedef unsigned char u_char; 17 typedef unsigned char u_char;
18 18
19 extern T_OS_TASK_TABLE_ENTRY TaskTable[]; 19 extern T_OS_TASK_TABLE_ENTRY TaskTable[];
20 extern VOID *TCD_Current_Thread;
20 21
21 /* .bss */ 22 /* .bss */
22 static NU_SEMAPHORE ProSemCB; 23 static NU_SEMAPHORE ProSemCB;
24
25 #define OS_NU_TASK_MAGIC 0xdeafbeef
23 26
24 static int 27 static int
25 os_GetTaskEntry(USHORT Index, OS_HANDLE *Handle) 28 os_GetTaskEntry(USHORT Index, OS_HANDLE *Handle)
26 { 29 {
27 static USHORT Idx; 30 static USHORT Idx;
50 CHAR Name[NU_MAX_NAME]; 53 CHAR Name[NU_MAX_NAME];
51 u_char *StackBase, *sp; 54 u_char *StackBase, *sp;
52 USHORT Untouched; 55 USHORT Untouched;
53 56
54 if (os_GetTaskEntry(Index, &Handle) < 0) 57 if (os_GetTaskEntry(Index, &Handle) < 0)
55 return(-1); 58 return(OS_ERROR);
56 if (NU_Task_Information(&TaskTable[Handle].TaskCB.TCB, Name, 59 if (NU_Task_Information(&TaskTable[Handle].TaskCB.TCB, Name,
57 &TaskStatus, &Count, &Prio, &Preempt, 60 &TaskStatus, &Count, &Prio, &Preempt,
58 &TimeSlice, (VOID **) &StackBase, 61 &TimeSlice, (VOID **) &StackBase,
59 &Size, &MinStack) != NU_SUCCESS) 62 &Size, &MinStack) != NU_SUCCESS)
60 return(-1); 63 return(OS_ERROR);
61 Untouched = 0; 64 Untouched = 0;
62 for (sp = StackBase; sp < StackBase + Size; sp++) { 65 for (sp = StackBase; sp < StackBase + Size; sp++) {
63 if (*sp != 0xFE) 66 if (*sp != 0xFE)
64 break; 67 break;
65 Untouched++; 68 Untouched++;
66 } 69 }
67 sprintf(Buffer, 70 sprintf(Buffer,
68 "Name:%s Stat:%d Count:%ld Prio:%d Stack:%lx Size:%ld Untouched:%d", 71 "Name:%s Stat:%d Count:%ld Prio:%d Stack:%lx Size:%ld Untouched:%d",
69 Name, TaskStatus, Count, 255 - Prio, (ULONG) StackBase, 72 Name, TaskStatus, Count, 255 - Prio, (ULONG) StackBase,
70 (ULONG) Size, Untouched); 73 (LONG) Size, Untouched);
71 return(0); 74 return(OS_OK);
72 } 75 }
76
77 GLOBAL LONG
78 os_StopTask(OS_HANDLE Caller, OS_HANDLE TaskHandle)
79 {
80 if (NU_Suspend_Task(&TaskTable[TaskHandle].TaskCB.TCB) == NU_SUCCESS)
81 return(OS_OK);
82 else
83 return(OS_ERROR);
84 }
85
86 GLOBAL LONG
87 os_StartTask(OS_HANDLE Caller, OS_HANDLE TaskHandle, ULONG Value)
88 {
89 if (NU_Resume_Task(&TaskTable[TaskHandle].TaskCB.TCB) == NU_SUCCESS)
90 return(OS_OK);
91 else
92 return(OS_ERROR);
93 }
94
95 GLOBAL LONG
96 os_ProInit(void)
97 {
98 USHORT i;
99
100 if (NU_Create_Semaphore(&ProSemCB, "PROSEM", 1, NU_PRIORITY)
101 != NU_SUCCESS)
102 return(OS_ERROR);
103 for (i = 1; i <= MaxTasks; i++)
104 bzero(&TaskTable[i], sizeof(T_OS_TASK_TABLE_ENTRY));
105 return(OS_OK);
106 }
107
108 GLOBAL unsigned char
109 os_GetTaskState(OS_HANDLE Caller, OS_HANDLE Handle)
110 {
111 if (TaskTable[Handle].Name[0])
112 return(TaskTable[Handle].TaskCB.TCB.tc_status);
113 else
114 return(255);
115 }
116
117 GLOBAL LONG
118 os_GetTaskHandle(OS_HANDLE Caller, char *Name, OS_HANDLE *TaskHandle)
119 {
120 USHORT i;
121
122 if (!Name) {
123 OS_NU_TASK *os_nu_task = (OS_NU_TASK *) TCD_Current_Thread;
124
125 if (os_nu_task && os_nu_task->magic_nr == OS_NU_TASK_MAGIC)
126 *TaskHandle = os_nu_task->handle;
127 else
128 *TaskHandle = OS_NOTASK;
129 return(OS_OK);
130 }
131 for (i = 1; i <= MaxTasks; i++)
132 if (TaskTable[i].Name[0] &&
133 !strncmp(Name, TaskTable[i].Name, RESOURCE_NAMELEN - 1)) {
134 *TaskHandle = i;
135 return(OS_OK);
136 }
137 return(OS_ERROR);
138 }
139
140 GLOBAL LONG
141 os_GetTaskData(OS_HANDLE Handle, unsigned **tcb,
142 u_char **stackbegin, u_char **stackend)
143 {
144 NU_TASK *task;
145
146 if (!TaskTable[Handle].Name[0])
147 return(OS_ERROR);
148 task = &TaskTable[Handle].TaskCB.TCB;
149 *tcb = (unsigned *) task;
150 *stackbegin = (u_char *) task->tc_stack_start;
151 *stackend = (u_char *) task->tc_stack_end;
152 return(OS_OK);
153 }