BST_ERR_ENUM_UINT8 BST_CORE_CNPTask::ReportTrafficFlow( BST_VOID ) { BST_ERR_ENUM_UINT8 enRtnVal; BST_IP_ERR_T enIpErr; BST_IP_TRAFFIC_FLOW_STRU stSktTrFlow; enRtnVal = BST_ERR_UNREACHABLE; stSktTrFlow.ulRxByte = 0; stSktTrFlow.ulTxByte = 0; enIpErr = m_pSocket->IoCtrl ( BST_SCKT_CMD_GET_TRAFFIC_FLOW, &stSktTrFlow ); if ( BST_IP_ERR_OK == enIpErr ) { if( ( 0 != stSktTrFlow.ulRxByte ) || ( 0 != stSktTrFlow.ulTxByte ) ) { enRtnVal = m_pExptReport->Report ( BST_PID_TRAFFIC_FLOW, BST_OS_SIZEOF ( BST_IP_TRAFFIC_FLOW_STRU ), &stSktTrFlow ); } if ( BST_NO_ERROR_MSG == enRtnVal ) { return enRtnVal; } } BST_RLS_LOG2( "BST_CORE_CNPTask::Report Traffic Flow, Ip_Err =%u, Rpt_Err=%u",\ enIpErr, enRtnVal ); return BST_ERR_UNREACHABLE; }
BST_VOID BST_CTaskSchdler::TimerExpired( BST_OS_TIMERID_T ulId, BST_VOID *pvPara) { BST_CORE_PTASK_NODE_STRU *pstPtaskNode; BST_CORE_PTASK_NODE_STRU *pstPtaskNodeNext; if ( !BST_OS_IsTimerValid (m_ulTimerId) ) { BST_RLS_LOG1( "BST_CTaskSchdler::TimerExpired m_ulTimerId=%u is invalid", m_ulTimerId ); return; } if ( ulId != m_ulTimerId ) { BST_RLS_LOG2( "BST_CTaskSchdler::TimerExpired ulId=%u,m_ulTimerId=%u", ulId, m_ulTimerId ); return; } /* * 如果没有任务,则直接返回,不做任何操作 */ if ( 0 == lstCount( &g_stPTaskList ) ) { BST_RLS_LOG( "BST_CTaskSchdler::TimerExpired g_stPTaskList count=0" ); return; } /* * 更新系统TICK值 */ m_ulSystemTick += BST_TASK_SYS_TICKS; BST_DBG_LOG1 ( "BST_CTaskSchdler::TimerExpired Scheduler TimeOut, Tick=%d ", m_ulSystemTick ); /* * 遍历任务列表,获取任务并进行相应调度 */ 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; } /* * 如果任务不为空,则根据状态进行调度 */ ScheduleTask ( pstPtaskNode->pcTask ); } /* * 再次启动系统TICK定时器 */ BST_OS_TimerStart ( m_ulTimerId, BST_TASK_SYS_BASE_TIMELEN ); }
BST_UINT16 BST_CORE_CNPTask::Inquired( BST_CORE_PID_ENUM_UINT16 enParamId, BST_UINT16 usDataSize, BST_VOID *const pData ) { if ( !BST_CORE_IsPidValid ( enParamId ) ) { BST_RLS_LOG1( "BST_CORE_CNPTask::Inquired enParamId=%u is invalid", usDataSize ); return BST_CORE_INVALID_INQUIRED_LEN; } if ( ( BST_NULL_PTR == pData ) || ( 0 == usDataSize ) ) { BST_RLS_LOG2( "BST_CORE_CNPTask::Inquired pData=%p,usDataSize=%u", pData, usDataSize ); return BST_CORE_INVALID_INQUIRED_LEN; } if ( BST_NULL_PTR == m_pSocket ) { BST_RLS_LOG( "BST_CORE_CNPTask::Inquired m_pSocket=NULL" ); return BST_CORE_INVALID_INQUIRED_LEN; } switch ( enParamId ) { case BST_PID_SOCKET_PROPERTY: return InquiredSocketProperty( usDataSize, pData ); case BST_PID_TRAFFIC_FLOW: return InquiredTrafficFlow( usDataSize, pData ); default: return PidInquired ( enParamId, usDataSize, pData ); } }
BST_ERR_ENUM_UINT8 BST_CORE_CNPTask::ReportNoneHb( BST_VOID ) { BST_ERR_ENUM_UINT8 enRtnVal; BST_IP_ERR_T enIpErr; BST_IP_SKT_PROPTY_STRU stSktProperty; enRtnVal = BST_ERR_UNREACHABLE; enIpErr = m_pSocket->IoCtrl ( BST_SCKT_CMD_RPT_PROPERTY, &stSktProperty ); if ( BST_IP_ERR_OK == enIpErr ) { enRtnVal = m_pExptReport->Report ( BST_PID_SOCKET_PROPERTY, BST_OS_SIZEOF ( BST_IP_SKT_PROPTY_STRU ), &stSktProperty ); if ( BST_NO_ERROR_MSG == enRtnVal ) { return enRtnVal; } } BST_RLS_LOG2( "BST_CORE_CNPTask::Report Get Propery Error, Ip_Err =%u, Rpt_Err=%u",\ enIpErr, enRtnVal ); return BST_ERR_UNREACHABLE; }
BST_VOID BST_CTask::Stop ( BST_VOID ) { m_enState = BST_TASK_STATE_STOPED; BST_DBG_UPDATE_STATE( m_usProcId, m_usTaskId, m_enState); BST_RLS_LOG2("Task stop: procid=%u, taskid=%u", m_usProcId, m_usTaskId ); }
BST_VOID BST_PAL_NetProcDlPacket( const TTF_MEM_ST *pstTtfPacket ) { BST_IP_PKT_PROC_ENUM_INT8 enPktProcMode; BST_UINT8 *pucTmpdata; BST_UINT32 ulIsMalloced; BST_UINT32 ulTotalBytes; pucTmpdata = BST_NULL_PTR; ulTotalBytes = 0x00U; ulIsMalloced = BST_FALSE; if ( BST_NULL_PTR == pstTtfPacket ) { BST_RLS_LOG( "BST_PAL_NetProcDlPacket: pstTtfPacket Invalide" ); return; } if( ( 0 == pstTtfPacket->usUsed ) ||( BST_NULL_PTR == pstTtfPacket->pData ) ) { BST_RLS_LOG2( "BST_PAL_NetProcDlPacket: No Data tot=%u, used=%u, pData=%p", pstTtfPacket->usUsed, pstTtfPacket->pData ); return; } ulTotalBytes = BST_PAL_NetApiPacketLen( (BST_VOID*)pstTtfPacket ); if ( BST_NULL_PTR == pstTtfPacket->pNext ) { pucTmpdata = pstTtfPacket->pData; ulIsMalloced = BST_FALSE; } else { pucTmpdata = (BST_UINT8 *)BST_OS_MALLOC( ulTotalBytes ); BST_ASSERT_NULL( pucTmpdata ); if( TTF_MemGet( UEPS_PID_BASTET, ( TTF_MEM_ST *)pstTtfPacket, 0U, pucTmpdata, (BST_UINT16)ulTotalBytes ) ) { /*lint -e438*/ BST_OS_FREE( pucTmpdata ); return; /*lint +e438*/ } ulIsMalloced = BST_TRUE; } BST_DBG_LOG1( "BST_PAL_NetProcDlPacket: TolLen=%u", ulTotalBytes ); enPktProcMode = BST_IP_ApiFastCheckDL( pucTmpdata, ulTotalBytes ); if ( BST_IP_PKT_TO_AP == enPktProcMode) { BST_RLS_LOG( "BST_PAL_NetProcDlPacket: NOT Bastet Packet" ); BST_PAL_NetApiPacketResume( (BST_VOID*)pstTtfPacket ); } else { if ( BST_IP_PKT_FREE == enPktProcMode ) { BST_RLS_LOG( "BST_PAL_NetProcDlPacket: Free Packet" ); BST_PAL_NetApiPacketFree( (BST_VOID*)pstTtfPacket ); } else { BST_RLS_LOG1( "BST_PAL_NetProcDlPacket: Bastet Packet, Length=", ulTotalBytes ); if ( ulTotalBytes != BST_PAL_NetIpStackInput( ulTotalBytes, pucTmpdata, pstTtfPacket ) ) { BST_RLS_LOG( "BST_PAL_NetProcDlPacket: BST_PAL_NetIpStackInput Error" ); BST_PAL_NetApiPacketFree( (BST_VOID*)pstTtfPacket ); } } } if ( BST_TRUE == ulIsMalloced ) { BST_OS_FREE( pucTmpdata ); } /*lint -e429 -e438 */ } /*pucTmpdata 是否free需要判断ulIsMalloced,如果指针不是Malloc的,则不需FREE*/