VOS_VOID Ss_TaskEntry_T( struct MsgCB* pMsg )
{
    MSG_HEADER_STRU         *pMsgHeader;
    REL_TIMER_MSG           *pTimer;                                            /* 定义TIMER消息指针                        */
    VOS_UINT16               usMsgType;
    VOS_UINT16               usClientId;
    VOS_UINT8                ucOpId;
    MN_APP_REQ_MSG_STRU     *pMnAppReqMsg;

    pMsgHeader = ( MSG_HEADER_STRU* )pMsg;                                      /* 得到消息头                               */
    pTimer     = ( REL_TIMER_MSG* ) pMsg;                                       /* 获取TIMER消息指针                        */
    pMnAppReqMsg = ( MN_APP_REQ_MSG_STRU* )pMsg;

    if (VOS_TRUE == TAF_SDC_GetSvlteSupportFlag())
    {
        /* svlte特性开启时,modem1可能收到usim0的消息,需要将消息中send pid进行转换 */
        pMsg->ulSenderPid = TAF_SDC_ConvertOamSendPid(pMsg->ulSenderPid);
    }

    if ( VOS_PID_TIMER == pMsg->ulSenderPid )
    {
        Ss_RcvTimerOut((VOS_UINT8)pTimer->ulPara , (VOS_UINT8)pTimer->ulName);      /* TIMER溢出消息分发函数                    */
    }
    else
    {
        switch( pMsgHeader->ulSenderPid )
        {                                                                   /* 根据Src Tsk Id分发消息                   */
            case WUEPS_PID_MM:                                                  /* MM 发来的消息                            */
                Ss_RcvMmMsg( pMsg );                                            /* 调用MM消息处理                           */
                break;

            case WUEPS_PID_ADMIN:
                break;

            /* Delete MAPS_STK_PID and WUEPS_PID_AT */
            case WUEPS_PID_TAF:
                usMsgType = pMnAppReqMsg->usMsgName;

                /*usClientId*/
                usClientId = pMnAppReqMsg->clientId;

                /*ucOpId*/
                ucOpId = pMnAppReqMsg->opId;

                Taf_SsaProc(usMsgType, usClientId, ucOpId, pMnAppReqMsg->aucContent);
                break;
            default :                                                           /* 其他TASK发来的消息                       */
                SS_WARN_LOG( "\n [Error]SenderPid Error! \r" );
                break;
        }
    }

}
VOS_VOID  TAF_MMA_MsgProc(
    struct MsgCB                       *pstMsg
)
{
    VOS_UINT32                          ulRet;
    VOS_UINT32                          ulEventType;
    VOS_UINT16                          usNewStackDepth;
    VOS_UINT16                          usOldStackDepth;

    if ( VOS_NULL_PTR == pstMsg )
    {
        TAF_ERROR_LOG(WUEPS_PID_MMA, "TAF_MMA_MsgProc:null pointer");

        return;
    }

    /* svlte特性开启时,modem1可能收到usim0的消息,需要将消息中send pid进行转换 */
    if (VOS_TRUE == TAF_SDC_GetSvlteSupportFlag())
    {
        pstMsg->ulSenderPid = TAF_SDC_ConvertOamSendPid(pstMsg->ulSenderPid);
    }

    usOldStackDepth = TAF_MMA_GetFsmStackDepth();
    ulEventType     = TAF_MMA_BuildEventType(pstMsg);

    /* 如果已经预处理完成则直接返回 */
    if (VOS_TRUE == TAF_MMA_PreProcessMsg(ulEventType, pstMsg))
    {
        return;
    }

    /* 进入状态机处理 */
    ulRet  = TAF_MMA_ProcessMsgInFsm(ulEventType, pstMsg);

    /* 状态机中会收到连接释放、状态机退出等消息,所以不能直接返回
    还需要判断能否处理缓存*/
    usNewStackDepth    = TAF_MMA_GetFsmStackDepth();

    /* 如果栈的深度减少,说明肯定进行了退栈操作,需要优先处理该状态机的结果消息,直接返回 */
    if ( usNewStackDepth < usOldStackDepth )
    {
        /* 记录退栈操作,只要发生了退栈后续就可以处理缓存 */
        TAF_MMA_SetFsmStackPopFlg(VOS_TRUE);
        return;
    }

    /* 该消息在状态机中已经处理完成,可尝试处理一下缓存 */
    if ( VOS_TRUE == ulRet)
    {
        /* 当前仅收到状态机的退出消息才能够处理缓存 */
        if (VOS_TRUE == TAF_MMA_GetFsmStackPopFlg())
        {
            TAF_MMA_ProcessBufferMsg();
            TAF_MMA_SetFsmStackPopFlg(VOS_FALSE);
        }
    }
    /* 在当前状态机中未处理完毕,判断消息是否需要打断当前的L2状态机,后处理 */
    else
    {
        TAF_MMA_PostProcessMsg(ulEventType, pstMsg);
    }

    return;
}
Esempio n. 3
0
VOS_VOID  MN_DispatchMsg (struct MsgCB * pstMsg)
{
    struct MsgCB                      *pstSrcMsg = VOS_NULL_PTR;
    struct MsgCB                      *pstDestMsg = VOS_NULL_PTR;

    if (VOS_NULL_PTR == pstMsg)
    {
        return;
    }

    if (VOS_TRUE == TAF_SDC_GetSvlteSupportFlag())
    {
        /* svlte特性开启时,modem1可能收到usim0的消息,需要将消息中send pid进行转换 */
        pstMsg->ulSenderPid = TAF_SDC_ConvertOamSendPid(pstMsg->ulSenderPid);
    }


    /* 支持TD-SCDMA特性时,需对消息进行适配处理 */
    if ( VOS_TRUE == NAS_UTRANCTRL_MsgProc(pstMsg, &pstDestMsg) )
    {
        /* 消息在UTRANCTRL模块处理完成,直接返回,不进入后续处理 */
        return;
    }

    pstSrcMsg = pstDestMsg;

    if (VOS_TRUE == TAF_SPM_MsgProc(pstSrcMsg, &pstDestMsg))
    {
        /* 消息在SPM模块处理完成,直接返回,不需要进入后续处理 */
        return;
    }

    /* 替换消息指针 */
    switch (pstDestMsg->ulSenderPid)
    {
    case VOS_PID_TIMER:
        MN_ProcTimerMsg(pstDestMsg);
        break;

    case UEPS_PID_CST:
        MN_CALL_ProcCstCallPrimitive(pstDestMsg);
        break;

    case MAPS_STK_PID:
        MN_DispatchStkMsg(pstDestMsg);
        break;

    case WUEPS_PID_TAF:
        MN_DispatchTafMsg(pstDestMsg);
        break;

    case WUEPS_PID_AT:
        MN_DispatchAppMsg(pstDestMsg);
        break;

    case WUEPS_PID_CC:
        MN_CALL_ProcMnccPrimMsg(pstDestMsg);
        break;

    case WUEPS_PID_MMC:
        MN_ProcMmcMsg(pstDestMsg);
        break;

    case WUEPS_PID_MMA:
        MN_ProcMmaMsg(pstDestMsg);
        break;

    case WUEPS_PID_MM:
        break;

    case WUEPS_PID_SS:
        break;

    case WUEPS_PID_SMS:
        MN_MSG_ProcSmsMsg((VOS_VOID*)pstDestMsg);
        break;

#if (FEATURE_IMS == FEATURE_ON)
    case PS_PID_IMSA:
        MN_DispatchImsaMsg((VOS_VOID*)pstDestMsg);
        break;
#endif

    case WUEPS_PID_SM:
        TAF_APS_ProcMsg(pstDestMsg);
        break;

#if (FEATURE_ON == FEATURE_LTE)
    case PS_PID_ESM:
        TAF_APS_ProcMsg(pstDestMsg);
        break;

    case MSP_L4_L4A_PID:
        TAF_APS_ProcMsg(pstDestMsg);
        break;

#endif

    case WUEPS_PID_RABM:
        MN_DispatchRabmMsg(pstDestMsg);
        break;

    case UEPS_PID_SN:
        TAF_APS_ProcMsg(pstDestMsg);
        break;

    case WUEPS_PID_USIM:
    case MAPS_PB_PID:
        MN_ProcUsimMsg(pstDestMsg);
        break;
    case MAPS_PIH_PID:
        MN_ProcPihMsg(pstDestMsg);
        break;

    case WUEPS_PID_OM:
        MN_ProcOmMsg(pstDestMsg);
        break;

    case WUEPS_PID_VC:

         MN_CALL_ProcVCMsg(pstDestMsg);
        break;


#if ((FEATURE_ON == FEATURE_GCBS) || (FEATURE_ON == FEATURE_WCBS))
    case UEPS_PID_GAS:
    case WUEPS_PID_BMC:
#if (FEATURE_ON == FEATURE_LTE)
    case PS_PID_ERRC:
#endif
    case WUEPS_PID_WRR:
        TAF_CBA_MsgProc(pstDestMsg);
        break;

#endif

    case UEPS_PID_NDCLIENT:
        TAF_APS_ProcMsg(pstDestMsg);
        break;

    case ACPU_PID_TAFAGENT:
        TAF_APS_ProcMsg(pstDestMsg);
        break;

    default:
        MN_ERR_LOG1("MN_DispatchMsg: Unknown message sender, SenderPid, ", (VOS_INT32)pstMsg->ulSenderPid);
        break;
    }
}