VOS_VOID BST_FidTask ( VOS_UINT32 Para1, VOS_UINT32 Para2, VOS_UINT32 Para3, VOS_UINT32 Para4 ) { MsgBlock *pMsg = VOS_NULL_PTR; VOS_UINT32 ulEvent = 0; VOS_UINT32 ulTaskID = 0; VOS_UINT32 ulEventMask = 0; VOS_UINT32 ulExpectEvent = 0; ulTaskID = VOS_GetCurrentTaskID(); if ( PS_NULL_UINT32 == ulTaskID ) { BST_RLS_LOG ( "BST_FidTask: This Task Id is Error" ); return; } if ( VOS_OK != VOS_CreateEvent(ulTaskID) ) { BST_RLS_LOG ( "BST_FidTask:, Create Event Fail"); return; } ulExpectEvent = VOS_MSG_SYNC_EVENT|BST_CDS_EVENT_RCV_DL_PROC; ulEventMask = (VOS_EVENT_ANY | VOS_EVENT_WAIT); g_ulBastetTaskId = VOS_GetCurrentTaskID(); g_ulBstTaskReadyFlag = BST_TRUE; for (;;) { if ( VOS_OK != VOS_EventRead(ulExpectEvent,ulEventMask,0,&ulEvent) ) { BST_RLS_LOG ( "BST_FidTask: BASTET Read Event Error" ); continue; } /*事件处理*/ if (VOS_MSG_SYNC_EVENT != ulEvent) { BST_SYS_EvtProcEntry(ulEvent); continue; } pMsg = (MsgBlock *)VOS_GetMsg(ulTaskID); if ( VOS_NULL_PTR != pMsg ) { switch ( TTF_GET_MSG_RECV_PID( pMsg ) ) { case UEPS_PID_BASTET: BST_SYS_MsgProcEntry( pMsg ); break; default: BST_RLS_LOG1 ( "BST_FidTask: Recv Unkown Message %d\r\n", TTF_GET_MSG_NAME(pMsg) ); break; } PS_FREE_MSG ( UEPS_PID_BASTET, pMsg ); } } }
VOS_VOID ADS_DL_FidTask( VOS_UINT32 ulQueueID, VOS_UINT32 FID_value, VOS_UINT32 Para1, VOS_UINT32 Para2 ) { MsgBlock *pMsg = VOS_NULL_PTR; VOS_UINT32 ulEvent = 0; VOS_UINT32 ulTaskID = 0; VOS_UINT32 ulRtn = PS_FAIL; VOS_UINT32 ulEventMask = 0; VOS_UINT32 ulExpectEvent = 0; ulTaskID = VOS_GetCurrentTaskID(); if (PS_NULL_UINT32 == ulTaskID) { ADS_ERROR_LOG(ACPU_PID_ADS_DL, "ADS_DL_FidTask: ERROR, TaskID is invalid."); return; } if (VOS_OK != VOS_CreateEvent(ulTaskID)) { ADS_ERROR_LOG(ACPU_PID_ADS_DL, "ADS_DL_FidTask: ERROR, create event fail."); return; } g_ulAdsDLTaskId = ulTaskID; g_ulAdsDLTaskReadyFlag = 1; ulExpectEvent = ADS_DL_EVENT_IPF_RD_INT | ADS_DL_EVENT_IPF_ADQ_EMPTY_INT | VOS_MSG_SYNC_EVENT; ulEventMask = (VOS_EVENT_ANY | VOS_EVENT_WAIT); /*lint -e716*/ while (1) /*lint +e716*/ { ulRtn = VOS_EventRead(ulExpectEvent, ulEventMask, 0, &ulEvent); if (VOS_OK != ulRtn) { ADS_ERROR_LOG(ACPU_PID_ADS_DL, "ADS_DL_FidTask: ERROR, read event error."); continue; } /* 统计所有事件 */ ADS_DBG_DL_PROC_ALL_EVENT_NUM(1); /*RD事件处理*/ if (VOS_MSG_SYNC_EVENT != ulEvent) { ADS_DL_ProcEvent(ulEvent); #ifdef __PC_UT__ break; #endif continue; } pMsg = (MsgBlock*)VOS_GetMsg(ulTaskID); if (VOS_NULL_PTR != pMsg) { if (ACPU_PID_ADS_DL == pMsg->ulReceiverPid) { ADS_DL_ProcMsg(pMsg); } PS_FREE_MSG(ACPU_PID_ADS_DL, pMsg); } else { /* 统计空事件 */ ADS_DBG_DL_PROC_EMPTY_EVENT_NUM(1); } } }
/***************************************************************************** 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; }
VOS_VOID ADS_UL_FidTask( VOS_UINT32 ulQueueID, VOS_UINT32 FID_value, VOS_UINT32 Para1, VOS_UINT32 Para2 ) { MsgBlock *pMsg = VOS_NULL_PTR; VOS_UINT32 ulEvent = 0; VOS_UINT32 ulTaskID = 0; VOS_UINT32 ulRtn = VOS_ERR; VOS_UINT32 ulEventMask = 0; VOS_UINT32 ulExpectEvent = 0; ulTaskID = VOS_GetCurrentTaskID(); if (PS_NULL_UINT32 == ulTaskID) { ADS_ERROR_LOG(ACPU_PID_ADS_UL, "ADS_UL_FidTask: ERROR, TaskID is invalid."); return; } if (VOS_OK != VOS_CreateEvent(ulTaskID)) { ADS_ERROR_LOG(ACPU_PID_ADS_UL, "ADS_UL_FidTask: ERROR, create event fail."); return; } g_ulAdsULTaskId = ulTaskID; g_ulAdsULTaskReadyFlag = 1; ulExpectEvent = ADS_UL_EVENT_DATA_PROC | VOS_MSG_SYNC_EVENT; ulEventMask = (VOS_EVENT_ANY | VOS_EVENT_WAIT); /*lint -e716*/ while (1) /*lint +e716*/ { ulRtn = VOS_EventRead(ulExpectEvent, ulEventMask, 0, &ulEvent); if (VOS_OK != ulRtn) { ADS_ERROR_LOG(ACPU_PID_ADS_UL, "ADS_UL_FidTask: ERROR, read event error."); continue; } /*事件处理*/ if (VOS_MSG_SYNC_EVENT != ulEvent) { ADS_UL_ProcEvent(ulEvent); continue; } pMsg = (MsgBlock*)VOS_GetMsg(ulTaskID); if (VOS_NULL_PTR != pMsg) { if (ACPU_PID_ADS_UL == pMsg->ulReceiverPid) { ADS_UL_ProcMsg(pMsg); } PS_FREE_MSG(ACPU_PID_ADS_UL, pMsg); } } }