/***************************************************************************** Function :VOS_UINT32 VOS_EventWrite( VOS_UINT32 ulTaskID, VOS_UINT32 ulEvents ) Description:Send Event to the TaskID. Calls :VOS_TRACE_SEND_EVENT(), VOS_CheckTaskIDValid(),VOS_SplIMP(),VOS_Splx() Called By :Application Input :ulTaskID, ulEvents Output :NULL Return : VOS_OK when sucess ERRNO when fail Other : *****************************************************************************/ VOS_UINT32 VOS_EventWrite( VOS_UINT32 ulTaskID, VOS_UINT32 ulEvents ) { /* the functin should be full later */ VOS_UINT32 ulLockLevel; VOS_UINT32 ulTempQueue; VOS_UINT32 ulTempSem; if ( VOS_OK != VOS_CheckEvent(ulTaskID) ) { LogPrint("# VOS_EventWrite EVENT not exist.\r\n"); return VOS_ERR; } /*intLockLevel = VOS_SplIMP();*/ VOS_SpinLockIntLock(&g_stVosTaskSpinLock, ulLockLevel); vos_TaskCtrlBlk[ulTaskID].ulEvents |= ulEvents; /*VOS_Splx( intLockLevel );*/ VOS_SpinUnlockIntUnlock(&g_stVosTaskSpinLock, ulLockLevel); ulTempQueue = VOS_GetQueueIDFromFid(vos_TaskCtrlBlk[ulTaskID].ulFid); #if (VOS_YES == VOS_CHECK_PARA) if ( 0xffffffff == ulTempQueue ) { return VOS_ERR; } #endif ulTempSem = VOS_GetSemIDFromQueue(ulTempQueue); #if (VOS_YES == VOS_CHECK_PARA) if ( 0xffffffff == ulTempSem ) { return VOS_ERR; } #endif if ( VOS_OK != VOS_SmV( ulTempSem ) ) { LogPrint("# VOS_EventWrite error.\r\n"); return VOS_ERR; } else { return VOS_OK; } }
VOS_UINT32 VOS_EventWrite( VOS_UINT32 ulTaskID, VOS_UINT32 ulEvents ) { /* the functin should be full later */ int intLockLevel; VOS_UINT32 ulTempQueue; VOS_SEM ulTempSem; if ( VOS_OK != VOS_CheckEvent(ulTaskID) ) { /*lint -e534*/ LogPrint("# VOS_EventWrite EVENT not exist.\r\n"); /*lint +e534*/ return VOS_ERR; } intLockLevel = VOS_SplIMP(); vos_TaskCtrlBlk[ulTaskID].ulEvents |= ulEvents; VOS_Splx( intLockLevel ); ulTempQueue = VOS_GetQueueIDFromFid(vos_TaskCtrlBlk[ulTaskID].ulFid); if ( 0xffffffff == ulTempQueue ) { return VOS_ERR; } ulTempSem = VOS_GetSemIDFromQueue(ulTempQueue); if ( 0xffffffff == ulTempSem ) { return VOS_ERR; } if ( VOS_OK != VOS_SmV( ulTempSem ) ) { /*lint -e534*/ LogPrint("# VOS_EventWrite error.\r\n"); /*lint +e534*/ return VOS_ERR; } else { return VOS_OK; } }
/***************************************************************************** Function :VOS_UINT32 VOS_EventRead( VOS_UINT32 ulEvents, VOS_UINT32 ulFlags, VOS_UINT32 ulTimeOutInMillSec, VOS_UINT32 * pulRetEvents ) Description:Read event Calls :VOS_TRACE_SEND_EVENT(),VOS_GetCurrentTaskID(), VOS_SplIMP(),VOS_Splx(),VOS_Dispater() Called By :Application Input : ulEvents the expect event, while 0 refers to check event only, NOT get it while return. ulFlags the Flags, refers to WAIT or NOWAIT, ANY or ALL, etc. ulTimeOutInMillSec the deadline while WAIT for event Output :pulRetEvents the received Event. Return : VOS_OK when sucess ERRNO when failure Other : *****************************************************************************/ VOS_UINT32 VOS_EventRead( VOS_UINT32 ulEvents, VOS_UINT32 ulFlags, VOS_UINT32 ulTimeOutInMillSec, VOS_UINT32 *pulRetEvents ) { /* the functin should be full later */ VOS_UINT32 ulTaskSelf; /*Self task ID*/ VOS_UINT32 ulTempQueue; VOS_UINT32 ulTempSem; VOS_UINT32 ulLockLevel; VOS_UINT32 ulTempEvent; ulTaskSelf = VOS_GetCurrentTaskID(); #if (VOS_YES == VOS_CHECK_PARA) if ( 0xffffffff == ulTaskSelf ) { return VOS_ERR; } if( VOS_EVENT_NOWAIT & ulFlags ) { LogPrint("# OSA don't support VOS_EVENT_NOWAIT.\r\n"); VOS_SuspendTask(ulTaskSelf); return VOS_ERR; } #endif if( !(VOS_EVENT_ANY & ulFlags) ) { LogPrint("# OSA don't support VOS_EVENT_ALL.\r\n"); VOS_SuspendTask(ulTaskSelf); return VOS_ERR; } if( 0 == ulEvents ) { LogPrint("# OSA don't support event = 0.\r\n"); VOS_SuspendTask(ulTaskSelf); return VOS_ERR; } if ( VOS_OK != VOS_CheckEvent(ulTaskSelf) ) { LogPrint("# VOS_EventRead EVENT not exist.\r\n"); VOS_SuspendTask(ulTaskSelf); return VOS_ERR; } ulTempQueue = VOS_GetQueueIDFromFid(vos_TaskCtrlBlk[ulTaskSelf].ulFid); #if (VOS_YES == VOS_CHECK_PARA) if ( 0xffffffff == ulTempQueue ) { return VOS_ERR; } #endif ulTempSem = VOS_GetSemIDFromQueue(ulTempQueue); #if (VOS_YES == VOS_CHECK_PARA) if ( 0xffffffff == ulTempSem ) { return VOS_ERR; } #endif if( VOS_OK != VOS_SmP( ulTempSem, ulTimeOutInMillSec ) ) { Print("# VOS_EventRead error.\r\n"); return VOS_ERR; } /*intLockLevel = VOS_SplIMP();*/ VOS_SpinLockIntLock(&g_stVosTaskSpinLock, ulLockLevel); ulTempEvent = vos_TaskCtrlBlk[ulTaskSelf].ulEvents & ulEvents; if ( ulTempEvent ) { vos_TaskCtrlBlk[ulTaskSelf].ulEvents &= ~ulTempEvent; *pulRetEvents = ulTempEvent; } else { *pulRetEvents = VOS_MSG_SYNC_EVENT; } /*VOS_Splx( intLockLevel );*/ VOS_SpinUnlockIntUnlock(&g_stVosTaskSpinLock, ulLockLevel); return VOS_OK; }