BST_VOID BST_SYS_MntnChangedInd( BST_VOID ) { BST_SYS_MNTN_SetMntnMsgChgFlag(); if ( BST_TRUE == BST_OS_TimerIsStop( BST_SYS_MNTN_GetTimerId() ) ) { BST_OS_TimerStart( BST_SYS_MNTN_GetTimerId(), BST_SYS_MNTN_REPORT_TIMER_LEN ); } return; }
BST_VOID BST_CTaskSchdler::AsEventCallback( BST_AS_EVT_ENUM_UINT32 enEvent, BST_UINT32 ulLength, BST_VOID *pvData ) { BST_UINT32 ulPara; switch( enEvent ) { /* * 仅处理RRC状态信息,当RRC连接成功时,查看当前剩余时间是否靠近 */ case BST_AS_EVT_L3_RRC_STATE: if ( BST_OS_SIZEOF(ulPara) != ulLength ) { break; } if ( BST_NULL_PTR == pvData ) { break; } BST_OS_MEMCPY( &ulPara, pvData, ulLength ); if( BST_AS_RRC_CONNECTED == ulPara ) { ulPara = BST_OS_TimerIsStop( m_ulTimerId ); if ( BST_TRUE == ulPara ) { break; } ulPara = BST_OS_TimeGetRemain( m_ulTimerId ); if ( 0 == ulPara ) { break; } ulPara = NearRrcTrig ( ulPara ); BST_OS_TimerStart( m_ulTimerId, ulPara ); } break; case BST_AS_EVT_L3_BLOCK_INFO: if ( BST_OS_SIZEOF(BST_UINT32) != ulLength ) { BST_RLS_LOG1("BST_CTaskSchdler::AsEventCallback Error blockinfo Length = %u:", ulLength ); break; } UtranBlockInfoChgProc( (BST_UINT32 *)pvData ); break; default: break; } }
/*lint -e429*/ BST_VOID BST_CTaskSchdler::Attach ( BST_CORE_CPTask *pC_PTask ) { BST_CORE_PTASK_NODE_STRU *pstPtaskNode; if ( !BST_OS_IsTimerValid (m_ulTimerId) ) { BST_RLS_LOG1( "BST_CTaskSchdler::Attach m_ulTimerId=%u is invalid", m_ulTimerId ); return; } if ( BST_NULL_PTR == pC_PTask ) { BST_RLS_LOG( "BST_CTaskSchdler::Attach pC_PTask=NULL" ); return; } for ( pstPtaskNode = (BST_CORE_PTASK_NODE_STRU *)lstFirst( &g_stPTaskList ); pstPtaskNode!= BST_NULL_PTR; pstPtaskNode = (BST_CORE_PTASK_NODE_STRU *)lstNext((NODE *)pstPtaskNode) ) { if( pstPtaskNode->pcTask == pC_PTask ) { return; } } /* * 申请链表节点资源,用于存储任务 */ pstPtaskNode = ( BST_CORE_PTASK_NODE_STRU *)BST_OS_MALLOC ( BST_OS_SIZEOF( BST_CORE_PTASK_NODE_STRU ) ); if( BST_NULL_PTR == pstPtaskNode ) { BST_RLS_LOG( "BST_CTaskSchdler::Attach pstPtaskNode=NULL" ); return; } /* * 初始化任务数据,添加如任务列表 */ pC_PTask->m_ulSuspCounter = 0; pstPtaskNode->pcTask = pC_PTask; lstAdd( &g_stPTaskList, (NODE *)pstPtaskNode ); /* * 如果此时系统TICK定时已经关闭,且PS域服务状态正常,那么需要再次启动定时 */ if( BST_TRUE == BST_OS_TimerIsStop( m_ulTimerId ) ) { m_ulSystemTick = 0; BST_OS_TimerStart ( m_ulTimerId, BST_TASK_SYS_BASE_TIMELEN ); BST_DBG_LOG1( "BST_CTaskSchdler::Attach Start Scheduler Timer:%u", BST_TASK_SYS_BASE_TIMELEN ); } }
BST_VOID BST_SRV_CHNL_Send_Suspend( BST_SRV_CHNL_LINK_STRU *pstChnlLink, BST_SRV_CHNL_HEAD_STRU *pstPktItem ) { BST_ASSERT_NULL( pstChnlLink ); BST_ASSERT_NULL( pstPktItem ); BST_DBG_LOG1("BST_SRV_CHNL_Send_Suspend state",pstChnlLink->enState); BST_SRV_Q_PushToTail( (BST_SRV_CHNL_Q **)&pstChnlLink->pUnsendList, (BST_SRV_CHNL_Q *)pstPktItem ); if( BST_SRV_CHNL_STATE_RUN == pstChnlLink->enState ) { pstChnlLink->ulRetryTimes = 0; } if( BST_OS_TimerIsStop( pstChnlLink->ulTimerId ) ) { BST_OS_TimerStart( pstChnlLink->ulTimerId, BST_SRV_CHNL_RTX_INTERVAL ); } }
BST_VOID BST_CTaskSchdler::UtranBlockInfoChgProc( BST_UINT32 *pulBlockInfo ) { BST_INT32 lTaskCnt; BST_UINT32 ulNextTickRemainTime; BST_UINT32 ulBlockInfo; BST_CORE_PTASK_NODE_STRU *pstPtaskNode; BST_CORE_PTASK_NODE_STRU *pstPtaskNodeNext; BST_BOOL bTimerStop; if( BST_NULL_PTR == pulBlockInfo) { return; } ulBlockInfo = (BST_UINT32 )*pulBlockInfo; BST_DBG_LOG2( "BST_CTaskSchdler::UtranBlockInfoChgProc blockold=u%, blockNew=u%", m_ulBlockInfo,ulBlockInfo); if ( m_ulBlockInfo == ulBlockInfo ) { return; } m_ulBlockInfo = ulBlockInfo; if ( BST_AS_UNBLOCKED == m_ulBlockInfo ) { BST_DBG_LOG1( "BST_CTaskSchdler::UtranBlockInfoChgProc :%d", m_bTaskMissExec ); if(BST_FALSE == m_bTaskMissExec) { return; } lTaskCnt = lstCount( &g_stPTaskList ); BST_DBG_LOG1( "BST_CTaskSchdler::UtranBlockInfoChgProc TaskNum=u%", lTaskCnt ); if ( 0 == lTaskCnt ) { return; } ulNextTickRemainTime = 0; bTimerStop = BST_OS_TimerIsStop( m_ulTimerId ); if ( BST_FALSE == bTimerStop ) { ulNextTickRemainTime = BST_OS_TimeGetRemain( m_ulTimerId ); BST_OS_TimerStop ( m_ulTimerId ); } BST_DBG_LOG2( "BST_CTaskSchdler::UtranBlockInfoChgProc stop:%d,timerremain=u%", bTimerStop,ulNextTickRemainTime ); /* * 遍历任务列表,获取任务并进行相应调度 */ for ( pstPtaskNode = ( BST_CORE_PTASK_NODE_STRU *)lstFirst( &g_stPTaskList ); pstPtaskNode!= BST_NULL_PTR; pstPtaskNode = pstPtaskNodeNext ) { pstPtaskNodeNext = ( BST_CORE_PTASK_NODE_STRU *) lstNext((NODE *)pstPtaskNode); if ( BST_NULL_PTR == pstPtaskNode->pcTask ) { continue; } /* * 如果任务不为空,则根据状态进行调度 */ TrigScheduleTask ( pstPtaskNode->pcTask); } if((0 == ulNextTickRemainTime) || (ulNextTickRemainTime > BST_TASK_SYS_BASE_TIMELEN)) { ulNextTickRemainTime = BST_TASK_SYS_BASE_TIMELEN; } BST_OS_TimerStart ( m_ulTimerId, ulNextTickRemainTime ); } }