Exemple #1
0
/*****************************************************************************
 Function Name   : diag_DisConnProc
 Description     : 该函数用于处理ConnProcEntry传进来的HSO断开命令
 Input           : pstReq 待处理数据
 Output          : None
 Return          : VOS_UINT32

 History         :
    1.y00228784      2012-11-22  Draft Enact

*****************************************************************************/
VOS_UINT32 diag_DisConnProc(VOS_UINT8* pstReq,VOS_UINT32 ulCmdId)
{
    DIAG_CMD_HOST_DISCONNECT_CNF_STRU stCnfDisConn = {0};
    VOS_UINT32 ulRst = ERR_MSP_SUCCESS;

    /*重置所有开关状态为未打开*/
    diag_CfgResetAllSwt();

    DIAG_DEBUG_SDM_FUN(EN_DIAG_DEBUG_DIS_CONN_CFG, 0, 0, 0);

    stCnfDisConn.ulRc = ulRst;

#if(VOS_OS_VER == VOS_LINUX)
    /*组包给FW回复*/
    ulRst = diag_AgentCnfFun((VOS_UINT8*)&stCnfDisConn,ulCmdId,sizeof(DIAG_CMD_HOST_DISCONNECT_CNF_STRU));
#endif
    return ulRst;
}
VOS_VOID diag_AgentMsgProc(MsgBlock* pMsgBlock)
{
    DIAG_DATA_MSG_STRU* pMsgTmp =NULL;
    REL_TIMER_MSG *pTimer =NULL;

     /*入参判断*/
     /*lint -save -e830*/
    if (NULL == pMsgBlock)
    {
        return;
    }
    /*lint -restore*/

    /*任务开始处理,不允许睡眠*/
    drx_msp_fid_vote_lock(DRX_DIAG_MODEM_AGENT_VOTE);

    /*根据发送PID,执行不同处理*/
    switch(pMsgBlock->ulSenderPid)
    {
        /*超时消息,用于低功耗数采*/
        case DOPRA_PID_TIMER:
            /*lint -save -e740*/
            pTimer   = (REL_TIMER_MSG*)pMsgBlock;
            /*lint -restore*/
            diag_AgentTimeOutProcEntry(pTimer);
            break;

        /*处理fw发过来的数据 */
        case MSP_PID_DIAG_FW:
            /*lint -save -e740*/
            pMsgTmp = (DIAG_DATA_MSG_STRU*)pMsgBlock;
            /*lint -restore*/
            if(ID_MSG_DIAG_HSO_DISCONN_IND == pMsgTmp->ulMsgId)
            {
               diag_CfgResetAllSwt();
#if (FEATURE_BSP_LCH_OM == FEATURE_ON)
               DRV_OM_SET_HSO_CONN_FLAG(0);
#endif
#if(FEATURE_SOCP_ON_DEMAND == FEATURE_ON)
               diag_PortDisconnMsgProc();
#endif
            }
            else
            {
                /*根据命令ID分发处理*/
                diag_AgentDispatchCmd(pMsgTmp->pContext);
            }
            break;

#if(FEATURE_SOCP_ON_DEMAND == FEATURE_ON)
        case MSP_PID_DIAG_AGENT:
            diag_AgentDspMsgProc(pMsgBlock);
            break;
        case MSP_PID_DIAG_APP_AGENT:
            diag_SocpVoteCnfMsgProc(pMsgBlock);
            break;
#endif
        /*PS路测消息上报*/
        case PS_PID_ERRC:
        case PS_PID_MM:
        case PS_PID_ESM:
            diag_AgentPsTransRcv(pMsgBlock);
            break;
         /*lint -save -e616*/
         default:
        /*lint -restore*/
            break;
    }

    /*任务开始结束,允许睡眠*/
    drx_msp_fid_vote_unlock(DRX_DIAG_MODEM_AGENT_VOTE);
    return;
}
Exemple #3
0
/*****************************************************************************
 Function Name   : diag_ConnProc
 Description     : 该函数用于处理ConnProcEntry传进来的HSO连接命令
 Input           : pstReq 待处理数据
 Output          : None
 Return          : VOS_UINT32

 History         :
    1.y00228784      2012-11-22  Draft Enact

*****************************************************************************/
VOS_UINT32 diag_ConnProc(VOS_UINT8* pstReq,VOS_UINT32 ulCmdId)
{
    VOS_UINT32 ret      = ERR_MSP_SUCCESS;
    VOS_UINT32 ulCnfRst = ERR_MSP_UNAVAILABLE;
#if (VOS_OS_VER == VOS_LINUX)
    DIAG_CMD_HOST_CONNECT_CNF_STRU stCnf = {0};
    NV_ITEM_PWC_SWITCH_STRU stPwrctrlSwitch = {0};
    VOS_UINT32 ulPwrFlag = 0;
    LPS_SWITCH_PARA_STRU stDrxControlFlag = {0};
    UE_SW_BUILD_VER_INFO_STRU *pstBuildVer =NULL;
    DIAG_CMD_REPLAY_SET_REQ_STRU stReplay= {0};
#endif

    /*重置所有开关状态为未打开*/
    diag_CfgResetAllSwt();

    /*设置连接状态开关值*/
    ulCnfRst = diag_CfgSetGlobalBitValue(&g_ulDiagCfgInfo,DIAG_CFG_CONN_BIT,DIAG_CFG_SWT_OPEN);

    DIAG_DEBUG_SDM_FUN(EN_DIAG_DEBUG_CONN_CFG, ulCnfRst, 0, 0);

#if (VOS_OS_VER == VOS_LINUX)
    VOS_MemSet(&(stCnf.stBuildVersion), 0, sizeof(DIAG_CMD_UE_BUILD_VER_STRU));

    /*获取版本信息*/
    pstBuildVer = BSP_GetBuildVersion();
    if(pstBuildVer!=NULL)
    {
        pstBuildVer->ulProductNo = BSP_HwGetVerMain();
        stCnf.stBuildVersion.usVVerNo        = pstBuildVer->ulVVerNo;
        stCnf.stBuildVersion.usRVerNo        = pstBuildVer->ulRVerNo;
        stCnf.stBuildVersion.usCVerNo        = pstBuildVer->ulCVerNo;
        stCnf.stBuildVersion.usBVerNo        = pstBuildVer->ulBVerNo;
        stCnf.stBuildVersion.usSpcNo         = pstBuildVer->ulSpcNo;
        stCnf.stBuildVersion.usHardwareVerNo = pstBuildVer->ulCustomVer;
        stCnf.stBuildVersion.ulProductNo     = pstBuildVer->ulProductNo;
    }

    /*获取IMEI号*/
    ret = diag_GetImei(stCnf.szImei);
    if(ret)
    {
    }

    /*获取软件版本号*/
    VOS_MemSet(&stCnf.stUeSoftVersion,0,sizeof(DIAG_CMD_UE_SOFT_VERSION_STRU));

    /*获取数采基地址*/
    stCnf.ulChipBaseAddr = (VOS_UINT32)BSP_OM_GetChipType();
    //stCnf.ulChipBaseAddr = (VOS_UINT32)V7R1_PILOT_CHIP;

    /*路测信息获取*/
    ret = NVM_Read(EN_NV_ID_AGENT_FLAG,&(stCnf.stAgentFlag),sizeof(NV_ITEM_AGENT_FLAG_STRU));
    if(ret)
    {
    }

    /*低功耗开关获取*/
    ret = NVM_Read(EN_NV_ID_PWC_SWITCH,&stPwrctrlSwitch,sizeof(NV_ITEM_PWC_SWITCH_STRU));
    if(ret)
    {
    }
    ulPwrFlag = stPwrctrlSwitch.drxLBbpPd;

    ret = NVM_Read(EN_NV_ID_SWITCH_PARA,&stDrxControlFlag,sizeof(stDrxControlFlag));
    if(ret)
    {
    }
    stCnf.ulDrxControlFlag = stDrxControlFlag.ulDrxControlFlag & ulPwrFlag;
    /*lint -save -e40*/

    ulCnfRst |= diag_SendMsg(diag_GetAgentPid(),PS_PID_MM,ID_MSG_DIAG_CMD_REPLAY_TO_PS,(VOS_UINT8*)&stReplay,\
                             sizeof(DIAG_CMD_REPLAY_SET_REQ_STRU));
    /*lint -restore  +e40*/
    /*获取当前存取模式*/
    stCnf.ulLpdMode = diag_GetLogSendType();

    /*处理结果*/
    stCnf.ulRc = ulCnfRst;

    /*组包给FW回复*/
    ret = diag_AgentCnfFun((VOS_UINT8*)&stCnf,ulCmdId,sizeof(DIAG_CMD_HOST_CONNECT_CNF_STRU));
#else
    /*lint -e18 -e718 -e628 -e830 -e746*/
    diag_EnableSocpChan();
    /*lint +e18 +e718 +e628 +e830 +e746*/
#endif
    return ret;
}