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*/