FreeCalypso > hg > freecalypso-sw
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 } | 
