comparison gsm-fw/gpf/osl/os_com_fl.c @ 351:fd015570cacc

os_com_fl.c: os_FindSuspendingQueue() and os_DestroyQueue() done
author Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
date Sun, 11 May 2014 20:34:43 +0000
parents 5bc6a8f8b4a8
children 39b5b18e26b2
comparison
equal deleted inserted replaced
350:5bc6a8f8b4a8 351:fd015570cacc
140 *opc = p->Data.data32; 140 *opc = p->Data.data32;
141 *time = p->Data.time; 141 *time = p->Data.time;
142 p++; 142 p++;
143 return(OS_OK); 143 return(OS_OK);
144 } 144 }
145
146 GLOBAL unsigned char *
147 os_FindSuspendingQueue(unsigned int *tcb)
148 {
149 USHORT i;
150 SM_SUSPEND *susp, *susp2;
151
152 for (i = 1; i <= MaxCommunications; i++) {
153 if (!ComTable[i].Name[0])
154 continue;
155 if (susp = ComTable[i].FreeSemCB.sm_suspension_list) {
156 if (susp->sm_suspended_task == (NU_TASK*)tcb)
157 return(ComTable[i].FreeSemCB.sm_name + 1);
158 susp = (SM_SUSPEND *) susp->sm_suspend_link.cs_next;
159 for (susp2 = susp; ; ) {
160 if (susp2->sm_suspended_task == (NU_TASK*)tcb)
161 return(ComTable[i].FreeSemCB.sm_name+1);
162 susp2 = (SM_SUSPEND *)
163 susp2->sm_suspend_link.cs_next;
164 if (susp2 == susp)
165 break;
166 }
167 }
168 if (susp = ComTable[i].UsedSemCB.sm_suspension_list) {
169 if (susp->sm_suspended_task == (NU_TASK*)tcb)
170 return(ComTable[i].UsedSemCB.sm_name + 1);
171 susp = (SM_SUSPEND *) susp->sm_suspend_link.cs_next;
172 for (susp2 = susp; ; ) {
173 if (susp2->sm_suspended_task == (NU_TASK*)tcb)
174 return(ComTable[i].UsedSemCB.sm_name+1);
175 susp2 = (SM_SUSPEND *)
176 susp2->sm_suspend_link.cs_next;
177 if (susp2 == susp)
178 break;
179 }
180 }
181 }
182 return(0);
183 }
184
185 GLOBAL LONG
186 os_DestroyQueue(OS_HANDLE TaskHandle, OS_HANDLE ComHandle)
187 {
188 STATUS sts;
189
190 sts = NU_Obtain_Semaphore(&ComSemCB, NU_SUSPEND);
191 if (NU_Delete_Semaphore(&ComTable[ComHandle].FreeSemCB) != NU_SUCCESS) {
192 return_error: if (sts == NU_SUCCESS)
193 NU_Release_Semaphore(&ComSemCB);
194 return(OS_ERROR);
195 }
196 if (NU_Delete_Semaphore(&ComTable[ComHandle].UsedSemCB) != NU_SUCCESS)
197 goto return_error;
198 if (os_DeallocateMemory(TaskHandle, ComTable[ComHandle].QueueData)
199 == OS_ERROR)
200 goto return_error;
201 ComTable[ComHandle].Name[0] = 0;
202 if (sts == NU_SUCCESS)
203 NU_Release_Semaphore(&ComSemCB);
204 return(OS_OK);
205 }