VOS_VOID TAF_SPM_FillImsaEconfCallList( TAF_CALL_ECONF_CALL_LIST_STRU *pstCallList ) { TAF_SPM_CALL_ECONF_INFO_STRU *pstEconfInfoAddr = VOS_NULL_PTR; VOS_UINT32 ulIndex; VOS_UINT32 ulCallNum; pstEconfInfoAddr = TAF_SPM_GetCallEconfInfoAddr(); ulCallNum = 0; for (ulIndex = 0; ulIndex < pstEconfInfoAddr->ucCallNum; ulIndex++) { if (TAF_CS_CAUSE_SUCCESS == pstEconfInfoAddr->astEconfCheckInfo[ulIndex].enCheckRslt) { PS_MEM_CPY(&pstCallList->astDialNumber[ulCallNum], &pstEconfInfoAddr->astEconfCheckInfo[ulIndex].stCalledNumber, sizeof(MN_CALL_CALLED_NUM_STRU)); PS_MEM_CPY(&pstCallList->astSubaddr[ulCallNum], &pstEconfInfoAddr->astEconfCheckInfo[ulIndex].stSubaddr, sizeof(MN_CALL_SUBADDR_STRU)); ulCallNum++; } } pstCallList->ulCallNum = ulCallNum; return; }
VOS_UINT32 TAF_SPM_SendUsimEconfFdnReq( VOS_UINT16 usClientId, struct MsgCB *pstMsg ) { TAF_SPM_CALL_ECONF_INFO_STRU *pstEconfInfoAddr = VOS_NULL_PTR; MN_CALL_CALLED_NUM_STRU *pstCalledNumber = VOS_NULL_PTR; PS_PB_FDN_NUM_STRU stFdnInfo; VOS_UINT32 ulRet; VOS_UINT8 ucIndex; VOS_UINT32 ulSendPara; PS_MEM_SET(&stFdnInfo, 0x0, sizeof(stFdnInfo)); pstEconfInfoAddr = TAF_SPM_GetCallEconfInfoAddr(); pstEconfInfoAddr->ucSendSuccNum = 0; pstEconfInfoAddr->ucRcvNum = 0; for (ucIndex = 0; ucIndex < pstEconfInfoAddr->ucCallNum; ucIndex++) { pstEconfInfoAddr->astEconfCheckInfo[ucIndex].ulCheckCnfFlag = VOS_FALSE; pstCalledNumber = &pstEconfInfoAddr->astEconfCheckInfo[ucIndex].stCalledNumber; stFdnInfo.ulNum1Len = pstCalledNumber->ucNumLen <= MN_CALL_MAX_BCD_NUM_LEN ? pstCalledNumber->ucNumLen : MN_CALL_MAX_BCD_NUM_LEN; PS_MEM_CPY(stFdnInfo.aucNum1, pstCalledNumber->aucBcdNum, stFdnInfo.ulNum1Len); /* 增强型多方通话情况下,高16位为表示第几个电话号码,低16位为ClinedId */ ulSendPara = TAF_SPM_ECONF_SET_SEND_PARA(ucIndex, usClientId); ulRet = NAS_PBAPI_FdnNumCheck(WUEPS_PID_TAF, 0, ulSendPara, &stFdnInfo); if (VOS_OK != ulRet) { /* 记录为失败 */ TAF_SPM_RecordEconfCheckRslt(ucIndex, TAF_CS_CAUSE_FDN_CHECK_FAILURE); } else { pstEconfInfoAddr->ucSendSuccNum++; } } /* 全部发送失败,则退出 */ if (0 == pstEconfInfoAddr->ucSendSuccNum) { /* 上报结果 */ TAF_SPM_ReportEconfCheckRslt(); return VOS_FALSE; } return VOS_TRUE; }
VOS_VOID TAF_SPM_SetEconfPreRslt( TAF_CS_CAUSE_ENUM_UINT32 enCause ) { TAF_SPM_CALL_ECONF_INFO_STRU *pstEconfInfoAddr = VOS_NULL_PTR; VOS_UINT32 ulIndex; pstEconfInfoAddr = TAF_SPM_GetCallEconfInfoAddr(); for (ulIndex = 0; ulIndex < pstEconfInfoAddr->ucCallNum; ulIndex++) { TAF_SPM_RecordEconfCheckRslt(ulIndex, enCause); } return; }
VOS_VOID TAF_SPM_GetEconfCheckResultSuccNum( VOS_UINT32 *pulSuccNum ) { TAF_SPM_CALL_ECONF_INFO_STRU *pstEconfInfoAddr = VOS_NULL_PTR; VOS_UINT32 ulIndex; pstEconfInfoAddr = TAF_SPM_GetCallEconfInfoAddr(); for (ulIndex = 0; ulIndex < pstEconfInfoAddr->ucCallNum; ulIndex++) { if (TAF_CS_CAUSE_SUCCESS == pstEconfInfoAddr->astEconfCheckInfo[ulIndex].enCheckRslt) { (*pulSuccNum)++; } } return; }
VOS_VOID TAF_SPM_RecordEconfCheckRslt( VOS_UINT32 ulIndex, VOS_UINT32 ulResult ) { TAF_SPM_CALL_ECONF_INFO_STRU *pstEconfInfoAddr = VOS_NULL_PTR; pstEconfInfoAddr = TAF_SPM_GetCallEconfInfoAddr(); /* ulIndex错误 */ if (ulIndex >= pstEconfInfoAddr->ucCallNum) { return; } pstEconfInfoAddr->astEconfCheckInfo[ulIndex].enCheckRslt = ulResult; pstEconfInfoAddr->astEconfCheckInfo[ulIndex].ulCheckCnfFlag = VOS_TRUE; return; }
VOS_VOID TAF_SPM_ParseEconfDailInfoFromMsg( struct MsgCB *pstMsg ) { MN_CALL_APP_REQ_MSG_STRU *pstAppMsg = VOS_NULL_PTR; TAF_CALL_ECONF_DIAL_REQ_STRU *pstEconfParam = VOS_NULL_PTR; TAF_SPM_CALL_ECONF_INFO_STRU *pstEconfInfoAddr = VOS_NULL_PTR; VOS_UINT32 ulIndex; pstEconfInfoAddr = TAF_SPM_GetCallEconfInfoAddr(); pstAppMsg = (MN_CALL_APP_REQ_MSG_STRU *)pstMsg; pstEconfParam = &pstAppMsg->unParm.stEconfDial; PS_MEM_SET(pstEconfInfoAddr, 0x0, sizeof(TAF_SPM_CALL_ECONF_INFO_STRU)); pstEconfInfoAddr->ucCallNum = (VOS_UINT8)((pstEconfParam->stEconfCalllist.ulCallNum > TAF_CALL_MAX_ECONF_CALLED_NUM) ? TAF_CALL_MAX_ECONF_CALLED_NUM : pstEconfParam->stEconfCalllist.ulCallNum); pstEconfInfoAddr->usClientId = pstAppMsg->clientId; pstEconfInfoAddr->ucopId = pstAppMsg->opId; pstEconfInfoAddr->enCallMode = pstEconfParam->enCallMode; pstEconfInfoAddr->enCallType = pstEconfParam->enCallType; /* 将电话号码存到上下文中 */ for (ulIndex = 0; ulIndex < pstEconfInfoAddr->ucCallNum; ulIndex++) { PS_MEM_CPY(&pstEconfInfoAddr->astEconfCheckInfo[ulIndex].stCalledNumber, &pstEconfParam->stEconfCalllist.astDialNumber[ulIndex], sizeof(MN_CALL_CALLED_NUM_STRU)); PS_MEM_CPY(&pstEconfInfoAddr->astEconfCheckInfo[ulIndex].stSubaddr, &pstEconfParam->stEconfCalllist.astSubaddr[ulIndex], sizeof(MN_CALL_SUBADDR_STRU)); } PS_MEM_CPY(&pstEconfInfoAddr->stDataCfg, &pstEconfParam->stDataCfg, sizeof(pstEconfParam->stDataCfg)); return; }
VOS_VOID TAF_SPM_ReportEconfCheckRslt(VOS_VOID) { TAF_SPM_CALL_ECONF_INFO_STRU *pstEconfInfoAddr = VOS_NULL_PTR; TAF_CALL_ECONF_INFO_PARAM_STRU *pstCallInfo = VOS_NULL_PTR; TAF_CALL_ECONF_INFO_PARAM_STRU *pstTemp = VOS_NULL_PTR; VOS_UINT32 ulIndex; MN_OPERATION_ID_T ucOpId; pstEconfInfoAddr = TAF_SPM_GetCallEconfInfoAddr(); ucOpId = pstEconfInfoAddr->ucopId; pstCallInfo = (TAF_CALL_ECONF_INFO_PARAM_STRU *)PS_MEM_ALLOC(WUEPS_PID_TAF, sizeof(TAF_CALL_ECONF_INFO_PARAM_STRU) * TAF_CALL_MAX_ECONF_CALLED_NUM); if (VOS_NULL_PTR == pstCallInfo) { return; } PS_MEM_SET(pstCallInfo, 0, sizeof(TAF_CALL_ECONF_INFO_PARAM_STRU) * TAF_CALL_MAX_ECONF_CALLED_NUM); pstTemp = pstCallInfo; for (ulIndex = 0; ulIndex < pstEconfInfoAddr->ucCallNum; ulIndex++) { pstTemp->enCause = pstEconfInfoAddr->astEconfCheckInfo[ulIndex].enCheckRslt; PS_MEM_CPY(&pstTemp->stCallNumber, &pstEconfInfoAddr->astEconfCheckInfo[ulIndex].stCalledNumber, sizeof(MN_CALL_CALLED_NUM_STRU)); pstTemp++; } /* 给AT上报TAF_CALL_EVT_ECONF_NOTIFY_IND */ TAF_SPM_SendEconfNotifyInd(ucOpId, pstEconfInfoAddr->ucCallNum, pstCallInfo); PS_MEM_FREE(WUEPS_PID_TAF, pstCallInfo); return; }
VOS_UINT32 TAF_SPM_ProcEconfCheckResult(VOS_VOID) { TAF_SPM_CALL_ECONF_INFO_STRU *pstEconfInfoAddr = VOS_NULL_PTR; VOS_UINT32 ulSuccNum; pstEconfInfoAddr = TAF_SPM_GetCallEconfInfoAddr(); ulSuccNum = 0; TAF_SPM_GetEconfCheckResultSuccNum(&ulSuccNum); /* 全部成功 */ if (pstEconfInfoAddr->ucCallNum == ulSuccNum) { /* 不需要给AT上报结果 */ return VOS_TRUE; } /* 部分失败或者全部失败 */ else { TAF_SPM_ReportEconfCheckRslt(); return VOS_FALSE; } }
VOS_UINT32 TAF_SPM_SendUsimEconfEnvelopeReq( VOS_UINT16 usClientId, struct MsgCB *pstMsg ) { TAF_SPM_CALL_ECONF_INFO_STRU *pstEconfInfoAddr = VOS_NULL_PTR; MN_CALL_CS_DATA_CFG_INFO_STRU stDataCfgInfo; MN_CALL_CALLED_NUM_STRU stCalledNumber; VOS_UINT32 ulRet; VOS_UINT8 ucIndex; MN_CALL_TYPE_ENUM_U8 enCallType; MN_CALL_MODE_ENUM_U8 enCallMode; VOS_UINT32 ulSendPara; PS_MEM_SET(&stCalledNumber, 0x0, sizeof(stCalledNumber)); PS_MEM_SET(&stDataCfgInfo, 0x0, sizeof(MN_CALL_CS_DATA_CFG_INFO_STRU)); pstEconfInfoAddr = TAF_SPM_GetCallEconfInfoAddr(); pstEconfInfoAddr->ucSendSuccNum = 0; pstEconfInfoAddr->ucRcvNum = 0; enCallType = pstEconfInfoAddr->enCallType; enCallMode = pstEconfInfoAddr->enCallMode; PS_MEM_CPY(&stDataCfgInfo, &pstEconfInfoAddr->stDataCfg, sizeof(stDataCfgInfo)); for (ucIndex = 0; ucIndex < pstEconfInfoAddr->ucCallNum; ucIndex++) { PS_MEM_CPY(&stCalledNumber, &pstEconfInfoAddr->astEconfCheckInfo[ucIndex].stCalledNumber, sizeof(MN_CALL_CALLED_NUM_STRU)); pstEconfInfoAddr->astEconfCheckInfo[ucIndex].ulCheckCnfFlag = VOS_FALSE; /* 增强型多方通话情况下,高16位为表示第几个电话号码,低16位为ClinedId */ ulSendPara = TAF_SPM_ECONF_SET_SEND_PARA(ucIndex, usClientId); ulRet = TAF_SPM_SendUsimCallEnvelopeReq(&stCalledNumber, &stDataCfgInfo, ulSendPara, enCallType, enCallMode); if (VOS_FALSE == ulRet) { /* 记录为失败 */ TAF_SPM_RecordEconfCheckRslt(ucIndex, TAF_CS_CAUSE_CALL_CTRL_INVALID_PARAMETER); } else { pstEconfInfoAddr->ucSendSuccNum++; } } /* 全部发送失败,则退出 */ if (0 == pstEconfInfoAddr->ucSendSuccNum) { /* 上报结果 */ TAF_SPM_ReportEconfCheckRslt(); return VOS_FALSE; } return VOS_TRUE; }