VOS_UINT32 USIMM_VsimHUKDecode(VOS_UINT8 *pucSrc, VOS_UINT32 ulSrcLen, VOS_UINT8 *pucDst, VOS_UINT32 *pulDstLen) { #if (FEATURE_ON == FEATURE_SECURITY_PHONE) VOS_UINT8 auckey[USIMM_HUK_LEN]; VOS_INT32 lDstLen; if (BSP_OK != efuseReadHUK((BSP_U32 *)auckey, (sizeof(auckey)/sizeof(BSP_U32)))) { USIMM_ERROR_LOG("USIMM_VsimHUKDecode: efuseReadHUK Failed"); return VOS_ERR; } lDstLen = AESDecryptS(pucSrc, (VOS_INT)ulSrcLen, auckey, USIMM_HUK_BITS, pucDst, VSIM_DH_AGREE_KEY); if (VOS_NULL == lDstLen) { USIMM_ERROR_LOG("USIMM_VsimHUKDecode: AESEncrypt Fail"); return VOS_ERR; } *pulDstLen = (VOS_UINT32)lDstLen; #else VOS_MemCpy(pucDst, pucSrc, ulSrcLen); *pulDstLen = ulSrcLen; #endif /*(FEATURE_ON == FEATURE_SECURITY_PHONE)*/ return VOS_OK; }
VOS_VOID USIMM_VsimDecodeCardType(VOS_CHAR *pucStr, VOS_UINT32 ulStrLen, USIMM_CARD_TYPE_ENUM_UINT32 *pulCardType) { VOS_CHAR *pcTemp; VOS_UINT32 ulDataLen; *pulCardType = USIMM_CARD_NOCARD; /*默认返回无卡*/ if(VOS_NULL == ulStrLen) { USIMM_ERROR_LOG("USIMM_VSIMDecodeCardType: Card Type is NULL!"); return; } /*申请用于存放卡类型的内存*/ pcTemp = (VOS_CHAR*)VOS_MemAlloc(WUEPS_PID_USIM, DYNAMIC_MEM_PT, ulStrLen); if(VOS_NULL_PTR == pcTemp) { USIMM_ERROR_LOG("USIMM_VSIMDecodeCardType: VOS_MemAlloc is NULL!"); return; } /*过滤特殊字符*/ OAM_XML_GetStrContent(pucStr, ulStrLen, pcTemp, &ulDataLen); if(VOS_NULL == ulDataLen) { USIMM_ERROR_LOG("USIMM_VSIMDecodeCardType: Card Type Content is NULL!"); VOS_MemFree(WUEPS_PID_USIM, pcTemp); return; } /*lint -e418*/ if(VOS_OK == VOS_MemCmp(USIMM_VSIM_USIM_STR, pcTemp, ulDataLen)) { *pulCardType = USIMM_CARD_USIM; } else if(VOS_OK == VOS_MemCmp(USIMM_VSIM_SIM_STR, pcTemp, ulDataLen)) /*lint +e418*/ { *pulCardType = USIMM_CARD_SIM; } else { USIMM_ERROR_LOG("USIMM_VSIMDecodeCardType: Card Type is not support!"); } VOS_MemFree(WUEPS_PID_USIM, pcTemp); /*释放用于存放卡类型的内存*/ return; }
VOS_UINT32 USIMM_DecodeVsimRoot(OAM_XML_NODE_STRU *pstXmlNode, USIMM_CARD_TYPE_ENUM_UINT32 *pulCardType, USIMM_VSIM_AUTH_ENUM_UINT8 *pucAuthType) { OAM_XML_NODE_ATTRIBUTE_STRU *pstAttr; USIMM_CARD_TYPE_ENUM_UINT32 ulCardType = USIMM_CARD_NOCARD; USIMM_VSIM_AUTH_ENUM_UINT32 ulAuthType = USIMM_VSIM_AUTH_NULL; if(VOS_NULL_PTR == pstXmlNode->pstFirstAttrib) /*必须依赖属性节点解析卡类型等内容*/ { USIMM_ERROR_LOG("USIMM_DecodeVsimRoot: Xml Root FirstAttrib is NULL!"); return VOS_ERR; } pstAttr = OAM_XML_SearchAttNodeByName(pstXmlNode->pstFirstAttrib, USIMM_VSIM_TYPE_STR); if(VOS_NULL_PTR == pstAttr) { USIMM_ERROR_LOG("USIMM_DecodeVsimRoot: Search TYPE is NULL!"); return VOS_ERR; } USIMM_VsimDecodeCardType(pstAttr->pcAttribValue, pstAttr->ulValueLength, &ulCardType); pstAttr = OAM_XML_SearchAttNodeByName(pstXmlNode->pstFirstAttrib, USIMM_VSIM_AUTH_STR); if(VOS_NULL_PTR == pstAttr) { USIMM_ERROR_LOG("USIMM_DecodeVsimRoot: Search ALGORITHM is NULL!"); return VOS_ERR; } USIMM_VsimDecodeAuthType(pstAttr->pcAttribValue, pstAttr->ulValueLength, &ulAuthType); /*节点信息不具备或者错误*/ if((USIMM_CARD_NOCARD == ulCardType)||(USIMM_VSIM_AUTH_NULL == ulAuthType)) { USIMM_ERROR_LOG("USIMM_DecodeVsimRoot: Card Type or Auth Type is NULL!"); return VOS_ERR; } if(VOS_NULL_PTR != pulCardType) { *pulCardType = ulCardType; } if(VOS_NULL_PTR != pucAuthType) { *pucAuthType = (VOS_UINT8)ulAuthType; } return VOS_OK; }
VOS_UINT32 USIMM_DecodeVsimFile(VOS_UINT8 *pucData) { OAM_XML_CTX_STRU stXmlCtx; OAM_XML_NODE_STRU *pstXmlNode; /*解析xml文件*/ VOS_MemSet(&stXmlCtx, 0x00, sizeof(stXmlCtx)); /* 调用XML码流解析函数,构造XML结构树 */ if (OAM_XML_RESULT_SUCCEED != OAM_XML_InitXMLCtx(&stXmlCtx)) { USIMM_ERROR_LOG("USIMM_DecodeVSIMFile: Xml initialization failed!"); return VOS_ERR; } pstXmlNode = OAM_XML_BuildXMLTree( (VOS_CHAR*)pucData, &stXmlCtx); if (VOS_NULL_PTR == pstXmlNode) { USIMM_ERROR_LOG("USIMM_DecodeVSIMFile: Build xml tree failed!"); OAM_XML_ClearXMLCtx(&stXmlCtx); return VOS_ERR; } /*解析文件根节点*/ if(VOS_OK != USIMM_DecodeVsimRoot(pstXmlNode, &gastUSIMMCardAppInfo[USIMM_UICC_USIM].enCardType, &g_stUSIMMVSimAuthInfo.enAuthType)) { USIMM_ERROR_LOG("USIMM_DecodeVSIMFile: USIMM_DecodeVsimRoot failed!"); OAM_XML_ClearXMLCtx(&stXmlCtx); return VOS_ERR; } /*内容插入POOL*/ if(VOS_OK != USIMM_DecodeVsimEf(pstXmlNode)) { USIMM_ERROR_LOG("USIMM_DecodeVSIMFile: USIMM_AddVSIMFileToPoll failed!"); OAM_XML_ClearXMLCtx(&stXmlCtx); return VOS_ERR; } OAM_XML_ClearXMLCtx(&stXmlCtx); return VOS_OK; }
VOS_VOID USIMM_PinHandleCnf(VOS_UINT32 ulReceiverPid, USIMM_PIN_CMD_TYPE_ENUM_UINT32 enCmdType, USIMM_PIN_TYPE_ENUM_UINT32 enPINType, VOS_UINT32 ulResult, USIMM_PIN_INFO_STRU *pstPINinfo) { PS_USIM_PIN_CNF_STRU *pUsimMsg; pUsimMsg = (PS_USIM_PIN_CNF_STRU*)VOS_AllocMsg(WUEPS_PID_USIM, sizeof(PS_USIM_PIN_CNF_STRU)-VOS_MSG_HEAD_LENGTH); if (VOS_NULL_PTR == pUsimMsg) { USIMM_ERROR_LOG("USIMM_PinHandleCnf: VOS_AllocMsg is Failed"); return; } pUsimMsg->ulReceiverPid = ulReceiverPid; pUsimMsg->ulMsgName = PS_USIM_PIN_OPERATE_RSP; pUsimMsg->ulResult = ulResult; pUsimMsg->enCmdType = enCmdType; pUsimMsg->enPinType = enPINType; VOS_MemCpy(&pUsimMsg->stPinInfo, pstPINinfo, sizeof(USIMM_PIN_INFO_STRU)); (VOS_VOID)VOS_SendMsg(pUsimMsg->ulSenderPid, pUsimMsg); return; }
VOS_VOID USIMM_ResetCnf(VOS_UINT32 ulReceiverPid, USIMM_REFRESH_TYPE_ENUM_UINT32 enRefreshType, VOS_UINT32 ulResult, VOS_UINT16 usSATLen) { PS_USIM_REFRESH_CNF_STRU *pUsimMsg; pUsimMsg = (PS_USIM_REFRESH_CNF_STRU*)VOS_AllocMsg(WUEPS_PID_USIM, sizeof(PS_USIM_REFRESH_CNF_STRU)-VOS_MSG_HEAD_LENGTH); if (VOS_NULL_PTR == pUsimMsg) { USIMM_ERROR_LOG("USIMM_ResetCnf: VOS_AllocMsg is Failed"); return; } pUsimMsg->ulReceiverPid = ulReceiverPid; pUsimMsg->ulMsgName = PS_USIM_REFRESH_CNF; pUsimMsg->enRefreshType = enRefreshType; pUsimMsg->ulResult = ulResult; pUsimMsg->ulSatLen = usSATLen; (VOS_VOID)VOS_SendMsg(pUsimMsg->ulSenderPid, pUsimMsg); return; }
VOS_VOID USIMM_SearchHandleCnf(VOS_UINT32 ulReceiverPid, VOS_UINT32 ulErrorCode, USIMM_SEARCHCNF_INFO_STRU *pstCnfInfo) { PS_USIM_SEARCH_CNF_STRU *pUsimMsg; pUsimMsg = (PS_USIM_SEARCH_CNF_STRU *)VOS_AllocMsg(WUEPS_PID_USIM, (sizeof(PS_USIM_SEARCH_CNF_STRU) - VOS_MSG_HEAD_LENGTH) + pstCnfInfo->ulLen); if (VOS_NULL_PTR == pUsimMsg) { USIMM_ERROR_LOG("USIMM_SearchHandleCnf: VOS_AllocMsg is Failed"); return; } pUsimMsg->ulReceiverPid = ulReceiverPid; pUsimMsg->ulMsgName = PS_USIM_SEARCH_CNF; pUsimMsg->ulErrorCode = ulErrorCode; pUsimMsg->usTotalRecNum = pstCnfInfo->usTotalRecNum; pUsimMsg->usEfId = pstCnfInfo->usEfid; pUsimMsg->ulResult = ulErrorCode; pUsimMsg->ucLen = 0; if ((VOS_NULL_PTR != pstCnfInfo->pucData) && (pstCnfInfo->ulLen <= 255)) { VOS_MemCpy(pUsimMsg->aucContent, pstCnfInfo->pucData, pstCnfInfo->ulLen); pUsimMsg->ucLen = (VOS_UINT8)pstCnfInfo->ulLen; } (VOS_VOID)VOS_SendMsg(pUsimMsg->ulSenderPid, pUsimMsg); return; }
/***************************************************************************** 函 数 名 : SI_STK_SMSCtrlResultInd_Instance 功能描述 : 将MO SMS CONTROL的结果广播上报给AT 输入参数 : enModemID --Modem ID pstRspData--指向SMS CONTROL的解码后码流 输出参数 : 无 返 回 值 : 执行结果 History : 1.日 期 : 2013年06月14日 作 者 : zhuli 修改内容 : Create *****************************************************************************/ VOS_VOID SI_STK_SMSCtrlResultInd_Instance( MODEM_ID_ENUM_UINT16 enModemID, SI_STK_ENVELOPE_RSP_STRU *pstRspData) { if (MODEM_ID_0 == enModemID) { USIMM_NORMAL_LOG("SI_STK_SMSCtrlResultInd_Instance: call SI_STK_SMSCtrlResultInd"); SI_STK_SMSCtrlResultInd(pstRspData); return; } #if (FEATURE_MULTI_MODEM == FEATURE_ON) if (MODEM_ID_1 == enModemID) { USIMM_NORMAL_LOG("SI_STK_SMSCtrlResultInd_Instance: call I1_SI_STK_SMSCtrlResultInd"); I1_SI_STK_SMSCtrlResultInd(pstRspData); return; } #endif USIMM_ERROR_LOG("SI_STK_SMSCtrlResultInd_Instance: Para Is Error"); return; }
VOS_VOID USIMM_AccessChannelCnf(VOS_UINT32 ulReceiverPid, VOS_UINT32 ulResult, VOS_UINT32 ulErrCode, USIMM_ACCESS_CHANNEL_CNF_STRU *pstDataCnf) { PS_USIM_ACCESS_CHANNEL_CNF_STRU *pstUsimMsg = VOS_NULL_PTR; pstUsimMsg = (PS_USIM_ACCESS_CHANNEL_CNF_STRU *)VOS_AllocMsg(WUEPS_PID_USIM, sizeof(PS_USIM_ACCESS_CHANNEL_CNF_STRU) - VOS_MSG_HEAD_LENGTH); if (VOS_NULL_PTR == pstUsimMsg) { USIMM_ERROR_LOG("USIMM_AccessChannelCnf: VOS_AllocMsg is Failed"); return; } pstUsimMsg->ulReceiverPid = ulReceiverPid; pstUsimMsg->ulMsgName = PS_USIMM_ACCESSCHANNEL_CNF; pstUsimMsg->ulResult = ulResult; pstUsimMsg->ulErrCode = ulErrCode; pstUsimMsg->ucSw1 = pstDataCnf->ucSw1; pstUsimMsg->ucSw2 = pstDataCnf->ucSw2; pstUsimMsg->usLen = pstDataCnf->usDataLen; if (VOS_NULL != pstDataCnf->usDataLen) { VOS_MemCpy(pstUsimMsg->aucContent, pstDataCnf->pucData, pstDataCnf->usDataLen); } (VOS_VOID)VOS_SendMsg(pstUsimMsg->ulSenderPid, pstUsimMsg); return; }
VOS_UINT32 SI_PB_FdnNumCheck_Instance( MODEM_ID_ENUM_UINT16 enModemID, VOS_UINT32 ulPid, VOS_UINT32 ulContextIndex, VOS_UINT32 ulSendPara, PS_PB_FDN_NUM_STRU *pstFdnInfo) { if (MODEM_ID_0 == enModemID) { USIMM_NORMAL_LOG("SI_PB_FdnNumCheck_Instance: call SI_PB_FdnNumCheck"); return SI_PB_FdnNumCheck(ulPid, ulContextIndex, ulSendPara, pstFdnInfo); } #if (FEATURE_MULTI_MODEM == FEATURE_ON) if (MODEM_ID_1 == enModemID) { USIMM_NORMAL_LOG("SI_PB_FdnNumCheck_Instance: call I1_SI_PB_FdnNumCheck"); return I1_SI_PB_FdnNumCheck(ulPid, ulContextIndex, ulSendPara, pstFdnInfo); } #endif USIMM_ERROR_LOG("SI_PB_FdnNumCheck_Instance: Para Is Error"); return VOS_ERR; }
VOS_UINT32 USIMM_MaxEFRecordNumReq_Instance( MODEM_ID_ENUM_UINT16 enModemID, VOS_UINT32 ulSenderPid, USIMM_APP_TYPE_ENUM_UINT32 enAppType, VOS_UINT16 usEFid) { if (MODEM_ID_0 == enModemID) { USIMM_NORMAL_LOG("USIMM_MaxEFRecordNumReq_Instance: call USIMM_MaxEFRecordNumReq"); return USIMM_MaxEFRecordNumReq(ulSenderPid, enAppType, usEFid); } #if (FEATURE_MULTI_MODEM == FEATURE_ON) if (MODEM_ID_1 == enModemID) { USIMM_NORMAL_LOG("USIMM_MaxEFRecordNumReq_Instance: call USIMM_MaxEFRecordNumReq"); return I1_USIMM_MaxEFRecordNumReq(ulSenderPid, enAppType, usEFid); } #endif USIMM_ERROR_LOG("USIMM_PinReq_Instance: Para Is Error"); return USIMM_API_WRONG_PARA; }
VOS_UINT32 USIMM_GetCachedFile_Instance( MODEM_ID_ENUM_UINT16 enModemID, VOS_UINT16 usFileID, VOS_UINT32 *pulDataLen, VOS_UINT8 **ppucData, USIMM_APP_TYPE_ENUM_UINT32 enAppType) { if (MODEM_ID_0 == enModemID) { USIMM_NORMAL_LOG("USIMM_GetCachedFile_Instance: call USIMM_GetCachedFile"); return USIMM_GetCachedFile(usFileID, pulDataLen, ppucData, enAppType); } #if (FEATURE_MULTI_MODEM == FEATURE_ON) if (MODEM_ID_1 == enModemID) { USIMM_NORMAL_LOG("USIMM_GetCachedFile_Instance: call I1_USIMM_GetCachedFile"); return I1_USIMM_GetCachedFile(usFileID, pulDataLen, ppucData, enAppType); } #endif USIMM_ERROR_LOG("USIMM_GetCachedFile_Instance: Para Is Error"); return USIMM_API_WRONG_PARA; }
VOS_VOID USIMM_FdnQuery_Instance( MODEM_ID_ENUM_UINT16 enModemID, VOS_UINT32 *pulState) { if (MODEM_ID_0 == enModemID) { USIMM_NORMAL_LOG("USIMM_FdnQuery_Instance: call USIMM_FdnQuery"); USIMM_FdnQuery(pulState); return; } #if (FEATURE_MULTI_MODEM == FEATURE_ON) if (MODEM_ID_1 == enModemID) { USIMM_NORMAL_LOG("USIMM_FdnQuery_Instance: call I1_USIMM_FdnQuery"); I1_USIMM_FdnQuery(pulState); return; } #endif USIMM_ERROR_LOG("USIMM_FdnQuery_Instance: Para Is Error"); *pulState = USIMM_FDNSTATUS_BUTT; return; }
VOS_UINT32 USIMM_GetPinStatus_Instance( MODEM_ID_ENUM_UINT16 enModemID, VOS_UINT8 *pucType, VOS_UINT8 *pucBeEnable, VOS_UINT8 *pucBeNeed, VOS_UINT8 *pucNum) { if (MODEM_ID_0 == enModemID) { USIMM_NORMAL_LOG("USIMM_GetPinStatus_Instance: call USIMM_GetPinStatus"); return USIMM_GetPinStatus(pucType, pucBeEnable, pucBeNeed, pucNum); } #if (FEATURE_MULTI_MODEM == FEATURE_ON) if (MODEM_ID_1 == enModemID) { USIMM_NORMAL_LOG("USIMM_GetPinStatus_Instance: call I1_USIMM_GetPinStatus"); return I1_USIMM_GetPinStatus(pucType, pucBeEnable, pucBeNeed, pucNum); } #endif USIMM_ERROR_LOG("USIMM_GetPinStatus_Instance: Para Is Error"); return USIMM_API_WRONG_PARA; }
VOS_UINT32 USIMM_GetCardType_Instance( MODEM_ID_ENUM_UINT16 enModemID, VOS_UINT8 *pucCardStatus, VOS_UINT8 *pucCardType) { if (MODEM_ID_0 == enModemID) { USIMM_NORMAL_LOG("USIMM_GetCardType_Instance: call USIMM_GetCardType"); return USIMM_GetCardType(pucCardStatus, pucCardType); } #if (FEATURE_MULTI_MODEM == FEATURE_ON) if (MODEM_ID_1 == enModemID) { USIMM_NORMAL_LOG("USIMM_GetCardType_Instance: call I1_USIMM_GetCardType"); return I1_USIMM_GetCardType(pucCardStatus, pucCardType); } #endif USIMM_ERROR_LOG("USIMM_GetCardType_Instance: Para Is Error"); return USIMM_API_WRONG_PARA; }
VOS_UINT32 USIMM_PinReq_Instance( MODEM_ID_ENUM_UINT16 enModemID, VOS_UINT32 ulSenderPid, VOS_UINT8 ucCmdType, VOS_UINT8 ucPINType, VOS_UINT8 *pucOldPIN, VOS_UINT8 *pucNewPIN) { if (MODEM_ID_0 == enModemID) { USIMM_NORMAL_LOG("USIMM_PinReq_Instance: call USIMM_PinReq"); return USIMM_PinReq(ulSenderPid, ucCmdType, ucPINType, pucOldPIN, pucNewPIN); } #if (FEATURE_MULTI_MODEM == FEATURE_ON) if (MODEM_ID_1 == enModemID) { USIMM_NORMAL_LOG("USIMM_PinReq_Instance: call I1_USIMM_PinReq"); return I1_USIMM_PinReq(ulSenderPid, ucCmdType, ucPINType, pucOldPIN, pucNewPIN); } #endif USIMM_ERROR_LOG("USIMM_PinReq_Instance: Para Is Error"); return USIMM_API_WRONG_PARA; }
VOS_VOID USIMM_CloseChannelCnf(VOS_UINT32 ulReceiverPid, VOS_UINT32 ulResult, VOS_UINT32 ulErrCode) { PS_USIM_CLOSE_CHANNEL_CNF_STRU *pstUsimMsg = VOS_NULL_PTR; pstUsimMsg = (PS_USIM_CLOSE_CHANNEL_CNF_STRU *)VOS_AllocMsg(WUEPS_PID_USIM, sizeof(PS_USIM_CLOSE_CHANNEL_CNF_STRU) - VOS_MSG_HEAD_LENGTH); if (VOS_NULL_PTR == pstUsimMsg) { USIMM_ERROR_LOG("USIMM_CloseChannelCnf: VOS_AllocMsg is Failed"); return; } pstUsimMsg->ulReceiverPid = ulReceiverPid; pstUsimMsg->ulMsgName = PS_USIMM_CLOSECHANNEL_CNF; pstUsimMsg->ulResult = ulResult; pstUsimMsg->ulErrCode = ulErrCode; (VOS_VOID)VOS_SendMsg(pstUsimMsg->ulSenderPid, pstUsimMsg); return; }
VOS_UINT32 SI_STK_EnvelopeRsp_Decode_Instance( MODEM_ID_ENUM_UINT16 enModemID, SI_STK_ENVELOPE_TYPE enDataType, VOS_UINT32 ulDataLen, VOS_UINT8 *pucCmdData, SI_STK_ENVELOPE_RSP_STRU *pstRspData) { if (MODEM_ID_0 == enModemID) { USIMM_NORMAL_LOG("SI_STK_EnvelopeRsp_Decode_Instance: call SI_STK_EnvelopeRsp_Decode"); return SI_STK_EnvelopeRsp_Decode(enDataType, ulDataLen, pucCmdData, pstRspData); } #if (FEATURE_MULTI_MODEM == FEATURE_ON) if (MODEM_ID_1 == enModemID) { USIMM_NORMAL_LOG("SI_STK_EnvelopeRsp_Decode_Instance: call I1_SI_STK_EnvelopeRsp_Decode"); return I1_SI_STK_EnvelopeRsp_Decode(enDataType, ulDataLen, pucCmdData, pstRspData); } #endif USIMM_ERROR_LOG("SI_STK_EnvelopeRsp_Decode_Instance: Para Is Error"); return VOS_ERR; }
VOS_UINT32 USIMM_GetFileReq_Instance( MODEM_ID_ENUM_UINT16 enModemID, VOS_UINT32 ulSenderPid, VOS_UINT32 ulSendPara, USIMM_GET_FILE_INFO_STRU *pstGetFileInfo) { if (MODEM_ID_0 == enModemID) { USIMM_NORMAL_LOG("USIMM_GetFileReq_Instance: call USIMM_GetFileReq"); return USIMM_GetFileReq(ulSenderPid, ulSendPara, pstGetFileInfo); } #if (FEATURE_MULTI_MODEM == FEATURE_ON) if (MODEM_ID_1 == enModemID) { USIMM_NORMAL_LOG("USIMM_GetFileReq_Instance: call I1_USIMM_GetFileReq"); return I1_USIMM_GetFileReq(ulSenderPid, ulSendPara, pstGetFileInfo); } #endif USIMM_ERROR_LOG("USIMM_GetFileReq_Instance: Para is Error"); return USIMM_API_WRONG_PARA; }
VOS_VOID USIMM_GetFileCnf(VOS_UINT32 ulReceiverPid, VOS_UINT32 ulSendPara, VOS_UINT32 ulErrorCode, USIMM_GETCNF_INFO_STRU *pstCnfInfo) { PS_USIM_GET_FILE_CNF_STRU *pUsimMsg; VOS_UINT32 ulResult; if(ulErrorCode != USIMM_SW_OK) { ulResult = VOS_ERR; } else { ulResult = VOS_OK; } if( WUEPS_PID_OM == ulReceiverPid ) { USIMM_OmFileCnf(ulResult,pstCnfInfo->usEfLen,pstCnfInfo->pucEf,USIMM_OM_GET_CNF); return; } pUsimMsg = (PS_USIM_GET_FILE_CNF_STRU*)VOS_AllocMsg(WUEPS_PID_USIM, (sizeof(PS_USIM_GET_FILE_CNF_STRU)-VOS_MSG_HEAD_LENGTH)+pstCnfInfo->usDataLen); if(VOS_NULL_PTR == pUsimMsg) { USIMM_ERROR_LOG("USIMM_GetFileCnf: VOS_AllocMsg is Failed"); return; } pUsimMsg->ulMsgName = PS_USIM_GET_FILE_RSP; pUsimMsg->ulReceiverPid = ulReceiverPid; pUsimMsg->ulErrorCode = ulErrorCode; pUsimMsg->ulSendPara = ulSendPara; pUsimMsg->usEfId = pstCnfInfo->usEfId; if(USIMM_SW_OK == ulErrorCode) { pUsimMsg->ucRecordNum = pstCnfInfo->ucRecordNum; pUsimMsg->usEfLen = pstCnfInfo->usEfLen; pUsimMsg->ucTotalNum = pstCnfInfo->ucTotalNum; pUsimMsg->ulResult = VOS_OK; VOS_MemCpy(pUsimMsg->aucEf, pstCnfInfo->pucEf, pstCnfInfo->usDataLen); } else { pUsimMsg->ucRecordNum = 0; pUsimMsg->usEfLen = 0; pUsimMsg->ucTotalNum = 0; pUsimMsg->ulResult = VOS_ERR; } (VOS_VOID)VOS_SendMsg(pUsimMsg->ulSenderPid, pUsimMsg); return; }
VOS_VOID SI_STK_EnvelopeRspDataFree_Instance( MODEM_ID_ENUM_UINT16 enModemID, SI_STK_ENVELOPE_RSP_STRU *pstData) { if (MODEM_ID_0 == enModemID) { USIMM_NORMAL_LOG("SI_STK_EnvelopeRspDataFree_Instance: call SI_STK_EnvelopeRspDataFree"); SI_STK_EnvelopeRspDataFree(pstData); return; } #if (FEATURE_MULTI_MODEM == FEATURE_ON) if (MODEM_ID_1 == enModemID) { USIMM_NORMAL_LOG("SI_STK_EnvelopeRspDataFree_Instance: call I1_SI_STK_EnvelopeRspDataFree"); I1_SI_STK_EnvelopeRspDataFree(pstData); return; } #endif USIMM_ERROR_LOG("SI_STK_EnvelopeRsp_Decode_Instance: Para Is Error"); return; }
VOS_UINT32 SI_STK_EnvelopeDownload_Instance( MODEM_ID_ENUM_UINT16 enModemID, VOS_UINT32 ulSenderPid, VOS_UINT32 ulSendPara, SI_STK_ENVELOPE_STRU *pstENStru) { if (MODEM_ID_0 == enModemID) { USIMM_NORMAL_LOG("SI_STK_EnvelopeDownload_Instance: call SI_STK_EnvelopeDownload"); return SI_STK_EnvelopeDownload(ulSenderPid, ulSendPara, pstENStru); } #if (FEATURE_MULTI_MODEM == FEATURE_ON) if (MODEM_ID_1 == enModemID) { USIMM_NORMAL_LOG("SI_STK_EnvelopeDownload_Instance: call I1_SI_STK_EnvelopeDownload"); return I1_SI_STK_EnvelopeDownload(ulSenderPid, ulSendPara, pstENStru); } #endif USIMM_ERROR_LOG("SI_STK_EnvelopeDownload_Instance: Para Is Error"); return VOS_ERR; }
VOS_UINT32 USIMM_AddVsimVerifyHashPara(VOS_CHAR *pucFileStr, VOS_UINT32 ulFileLen, VOS_CHAR *pcValue, VOS_UINT32 ulValueLen) { VOS_UINT32 ulContentLen; VOS_CHAR *pcContent; if((VOS_NULL_PTR == pcValue)||(VOS_NULL == ulValueLen)) { USIMM_ERROR_LOG("USIMM_AddVsimVerifyHashPara: Para is NULL!"); return VOS_ERR; } pcContent = (VOS_CHAR*)VOS_MemAlloc(WUEPS_PID_USIM, DYNAMIC_MEM_PT, ulValueLen); if(VOS_NULL_PTR == pcContent) { USIMM_ERROR_LOG("USIMM_AddVsimVerifyHashPara: VOS_MemAlloc is NULL!"); return VOS_ERR; } /*过滤特殊字符*/ OAM_XML_FilterStrInvalidChar(pcValue, ulValueLen, pcContent, &ulContentLen); if(VOS_NULL == ulContentLen) { USIMM_ERROR_LOG("USIMM_AddVsimVerifyHashPara: OAM_XML_GetStrContent return 0!"); VOS_MemFree(WUEPS_PID_USIM, pcContent); return VOS_ERR; } if(USIMM_VSIM_SIM_KEY_HASH_LEN < ulContentLen) /*检查Base16编码长度,不能超过当前全局变量的最大值*/ { USIMM_ERROR_LOG("USIMM_AddVsimVerifyHashPara: Base16Decode Result is too long!"); VOS_MemFree(WUEPS_PID_USIM, pcContent); return VOS_ERR; } VOS_MemCpy(g_stUSIMMVSimAuthInfo.aucSimKeyHash, pcContent, ulContentLen); VOS_MemFree(WUEPS_PID_USIM, pcContent); return VOS_OK; }
VOS_VOID USIMM_TelecomAuthCnf(USIMM_AUTH_REQ_STRU *pstMsg, USIMM_TELECOM_AUTH_INFO_STRU *pstCnfInfo) { USIMM_AUTH_CNF_STRU *pstCnfMsg; /* 分配消息内存 */ pstCnfMsg = (USIMM_AUTH_CNF_STRU*)VOS_AllocMsg(WUEPS_PID_USIM, sizeof(USIMM_AUTH_CNF_STRU)-VOS_MSG_HEAD_LENGTH); if (VOS_NULL_PTR == pstCnfMsg) { USIMM_ERROR_LOG("USIMM_TelecomAuthCnf: VOS_AllocMsg is Failed"); return; } VOS_MemSet((VOS_UINT8*)pstCnfMsg + VOS_MSG_HEAD_LENGTH, 0, pstCnfMsg->ulLength); pstCnfMsg->ulReceiverPid = pstMsg->ulSenderPid; pstCnfMsg->ulMsgName = PS_USIM_AUTHENTICATION_CNF; pstCnfMsg->enAppType = pstMsg->enAppType; pstCnfMsg->enAuthType = pstMsg->enAuthType; pstCnfMsg->ucOpId = pstMsg->ucOpId; pstCnfMsg->enResult = pstCnfInfo->enResult; if ((VOS_NULL_PTR != pstCnfInfo->pucIK) && (sizeof(pstCnfMsg->cnfdata.stTELECnf.aucIK) > pstCnfInfo->pucIK[0])) { VOS_MemCpy(pstCnfMsg->cnfdata.stTELECnf.aucIK, pstCnfInfo->pucIK, pstCnfInfo->pucIK[0] + 1); } if ((VOS_NULL_PTR != pstCnfInfo->pucCK) && (sizeof(pstCnfMsg->cnfdata.stTELECnf.aucCK) > pstCnfInfo->pucCK[0])) { VOS_MemCpy(pstCnfMsg->cnfdata.stTELECnf.aucCK, pstCnfInfo->pucCK, pstCnfInfo->pucCK[0] + 1); } if ((VOS_NULL_PTR != pstCnfInfo->pucGsmKC) && (sizeof(pstCnfMsg->cnfdata.stTELECnf.aucGsmKc) > pstCnfInfo->pucGsmKC[0])) { VOS_MemCpy(pstCnfMsg->cnfdata.stTELECnf.aucGsmKc, pstCnfInfo->pucGsmKC, pstCnfInfo->pucGsmKC[0] + 1); } if ((VOS_NULL_PTR != pstCnfInfo->pucAuts) && (sizeof(pstCnfMsg->cnfdata.stTELECnf.aucAuts) > pstCnfInfo->pucAuts[0])) { VOS_MemCpy(pstCnfMsg->cnfdata.stTELECnf.aucAuts, pstCnfInfo->pucAuts, pstCnfInfo->pucAuts[0] + 1); } if ((VOS_NULL_PTR != pstCnfInfo->pucAuthRes) && (sizeof(pstCnfMsg->cnfdata.stTELECnf.aucAuthRes) > pstCnfInfo->pucAuthRes[0])) { VOS_MemCpy(pstCnfMsg->cnfdata.stTELECnf.aucAuthRes, pstCnfInfo->pucAuthRes, pstCnfInfo->pucAuthRes[0] + 1); } /* 回复消息 */ (VOS_VOID)VOS_SendMsg(pstCnfMsg->ulSenderPid, pstCnfMsg); return; }
VOS_UINT32 USIMM_CheckVsimFileInPool(VOS_VOID) { VOS_UINT32 i; VOS_UINT32 ulIndex; VOS_UINT32 ulResult; ulResult = VOS_OK; for(i=0; i<ARRAYSIZE(g_astUSIMMVSimFileInfo); i++) { if (USIMM_VSIM_IS_FILE_ATTR_VALID(i)) { ulResult = USIMM_VsimPoolSearchFile(g_astUSIMMVSimFileInfo[i].usFileID, &ulIndex); } if(VOS_OK != ulResult) { USIMM_ERROR_LOG("USIMM_CheckVSIMFileInPoll: the File is not in POOL!"); return ulResult; } } if((USIMM_CARD_USIM == gastUSIMMCardAppInfo[USIMM_UICC_USIM].enCardType) /*USIM卡必须具备KI,OPC, 鉴权类型目前仅支持标准方式*/ &&((VOS_NULL == g_stUSIMMVSimAuthInfo.ucKILen)||(VOS_NULL == g_stUSIMMVSimAuthInfo.ucOpcLen)) &&(USIMM_VSIM_MILENAGE != g_stUSIMMVSimAuthInfo.enAuthType)) { USIMM_ERROR_LOG("USIMM_CheckVSIMFileInPoll: USIM Auth Para is Error!"); return VOS_ERR; } if((USIMM_CARD_SIM == gastUSIMMCardAppInfo[USIMM_UICC_USIM].enCardType)/*SIM卡必须具备KI,鉴权类型为标准*/ &&(VOS_NULL == g_stUSIMMVSimAuthInfo.ucKILen) &&((USIMM_VSIM_AUTH_NULL == g_stUSIMMVSimAuthInfo.enAuthType)||(USIMM_VSIM_MILENAGE == g_stUSIMMVSimAuthInfo.enAuthType))) { USIMM_ERROR_LOG("USIMM_CheckVSIMFileInPoll: SIM Auth Para is Error!"); return VOS_ERR; } return VOS_OK; }
VOS_VOID USIMM_CardStatusInd(VOS_UINT32 ulReceiverPid, USIMM_CARD_TYPE_ENUM_UINT32 enCardType, USIMM_CARD_SERVIC_ENUM_UINT32 enCardStatus) { PS_USIM_STATUS_IND_STRU *pUsimMsg = VOS_NULL_PTR; VOS_UINT32 ulResult; VOS_UINT32 ulFileNum; VOS_UINT8 *pucIMSI = VOS_NULL_PTR; if(USIMM_CARD_SERVIC_AVAILABLE == enCardStatus) { ulResult = USIMM_PoolFindFile(EFIMSI, &ulFileNum, USIMM_UNLIMIT_APP); if(VOS_OK == ulResult) { pucIMSI = gstUSIMMPOOL.astpoolRecord[ulFileNum].pucContent; } } pUsimMsg = (PS_USIM_STATUS_IND_STRU *)VOS_AllocMsg(WUEPS_PID_USIM, sizeof(PS_USIM_STATUS_IND_STRU)-VOS_MSG_HEAD_LENGTH); if( VOS_NULL_PTR == pUsimMsg ) { USIMM_ERROR_LOG("USIMM_CardStatusInd: VOS_AllocMsg is Failed"); return; } pUsimMsg->ulReceiverPid = ulReceiverPid; pUsimMsg->ulMsgName = PS_USIM_GET_STATUS_IND; /* 设置消息名称 */ pUsimMsg->enCardType = enCardType; pUsimMsg->enCardStatus = enCardStatus; if(VOS_NULL_PTR != pucIMSI) { VOS_MemCpy(pUsimMsg->aucIMSI, pucIMSI, sizeof(pUsimMsg->aucIMSI)); pUsimMsg->ucIMSILen = sizeof(pUsimMsg->aucIMSI); } else { pUsimMsg->ucIMSILen = VOS_NULL; } (VOS_VOID)VOS_SendMsg(pUsimMsg->ulSenderPid, pUsimMsg); if(USIMM_CARD_SERVIC_AVAILABLE != enCardStatus) /*卡状态不是有卡,保存数据*/ { USIMM_SaveLogFile(); } g_stUSIMMLogData.enLogState = USIMM_NO_NEED_LOG;/*上报卡状态就不需要记录log*/ return; }
VOS_VOID USIMM_EnvelopeCnf(VOS_UINT32 ulReceiverPid, VOS_UINT32 ulSendPara, VOS_UINT32 ulErrorCode, USIMM_ENVELOPECNF_INFO_STRU *pstCnfInfo) { PS_USIM_ENVELOPE_CNF_STRU *pUsimMsg; pUsimMsg = (PS_USIM_ENVELOPE_CNF_STRU*)VOS_AllocMsg(WUEPS_PID_USIM, sizeof(PS_USIM_ENVELOPE_CNF_STRU)-VOS_MSG_HEAD_LENGTH); if (VOS_NULL_PTR == pUsimMsg) { USIMM_ERROR_LOG("USIMM_EnvelopeCnf: VOS_AllocMsg is Failed"); return; } pUsimMsg->ulReceiverPid = ulReceiverPid; pUsimMsg->ulMsgName = PS_USIM_ENVELOPE_CNF; pUsimMsg->ulErrorCode = ulErrorCode; pUsimMsg->ulSendPara = ulSendPara; pUsimMsg->ucDataType = pstCnfInfo->ucDataType; pUsimMsg->ucSW1 = pstCnfInfo->ucSW1; pUsimMsg->ucSW2 = pstCnfInfo->ucSW2; if(ulErrorCode != USIMM_SW_OK) { pUsimMsg->ulResult = VOS_ERR; } else { pUsimMsg->ulResult = VOS_OK; } /* 对于SMS PP DOWNLOAD,可能有数据要回复到网侧,需要上报给TAF */ if (pstCnfInfo->ulDataLen > VOS_NULL) { VOS_MemCpy(pUsimMsg->aucData, pstCnfInfo->pucData, pstCnfInfo->ulDataLen); pUsimMsg->ucDataLen = (VOS_UINT8)pstCnfInfo->ulDataLen; } else { pUsimMsg->ucDataLen = 0; } (VOS_VOID)VOS_SendMsg(pUsimMsg->ulSenderPid, pUsimMsg); return; }
VOS_VOID USIMM_SetFileCnf(VOS_UINT32 ulReceiverPid, VOS_UINT32 ulSendPara, VOS_UINT32 ulErrorCode, USIMM_SETCNF_INFO_STRU *pstCnfInfo) { PS_USIM_SET_FILE_CNF_STRU *pUsimMsg; VOS_UINT32 ulResult; if(ulErrorCode != USIMM_SW_OK) { ulResult = VOS_ERR; } else { ulResult = VOS_OK; } if( WUEPS_PID_OM == ulReceiverPid ) { USIMM_OmFileCnf(ulResult,0,0,USIMM_OM_SET_CNF);/*最后一个参数1表示更新文件*/ return; } pUsimMsg = (PS_USIM_SET_FILE_CNF_STRU*)VOS_AllocMsg(WUEPS_PID_USIM, sizeof(PS_USIM_SET_FILE_CNF_STRU)-VOS_MSG_HEAD_LENGTH); if(VOS_NULL_PTR == pUsimMsg) { USIMM_ERROR_LOG("USIMM_SetFileCnf: VOS_AllocMsg is Failed"); return; } pUsimMsg->ulMsgName = PS_USIM_SET_FILE_RSP; pUsimMsg->ulReceiverPid = ulReceiverPid; pUsimMsg->ulResult = ulResult; pUsimMsg->ulErrorCode = ulErrorCode; pUsimMsg->ulSendPara = ulSendPara; pUsimMsg->usEfId = pstCnfInfo->usEfid; pUsimMsg->usEfLen = pstCnfInfo->usEFLen; pUsimMsg->ucRecordNum = pstCnfInfo->ucRecordNum ; (VOS_VOID)VOS_SendMsg(pUsimMsg->ulSenderPid, pUsimMsg); return; }
VOS_VOID USIMM_SetSPBFileCnf(VOS_UINT32 ulReceiverPid, VOS_UINT32 ulErrorCode, USIMM_SET_SPBFILE_REQ_STRU *pstMsg) { PS_USIM_SPB_CNF_STRU *pUsimMsg = VOS_NULL_PTR; VOS_UINT32 i; pUsimMsg = (PS_USIM_SPB_CNF_STRU *)VOS_AllocMsg(WUEPS_PID_USIM, sizeof(PS_USIM_SPB_CNF_STRU)-VOS_MSG_HEAD_LENGTH); if (VOS_NULL_PTR == pUsimMsg) { USIMM_ERROR_LOG("USIMM_SetSPBFileCnf: VOS_AllocMsg is Failed"); return; } if(ulErrorCode != USIMM_SW_OK) { pUsimMsg->ulResult = VOS_ERR; } else { pUsimMsg->ulResult = VOS_OK; } pUsimMsg->ulReceiverPid = ulReceiverPid; pUsimMsg->ulMsgName = PS_USIM_SET_SPBFILE_CNF; pUsimMsg->ulErrorCode = ulErrorCode; pUsimMsg->ucFileNum = (VOS_UINT8)pstMsg->ulSPBReqCount; if (VOS_OK == pUsimMsg->ulResult) { for(i = 0; i < pstMsg->ulSPBReqCount; i++) { pUsimMsg->ausEfId[i] = pstMsg->stSPBReq[i].usFileID; pUsimMsg->aucRecordNum[i] = pstMsg->stSPBReq[i].ucRecordNum; pUsimMsg->ausEfLen[i] = pstMsg->stSPBReq[i].usDataLen; } } (VOS_VOID)VOS_SendMsg(pUsimMsg->ulSenderPid, pUsimMsg); return; }
VOS_UINT32 USIMM_IsSvlte(VOS_VOID) { #if (FEATURE_MULTI_MODEM == FEATURE_ON) SVLTE_SUPPORT_FLAG_STRU stSvlteFlag; if (VOS_OK != NV_ReadEx(MODEM_ID_0, en_NV_Item_SVLTE_FLAG, &stSvlteFlag, sizeof(SVLTE_SUPPORT_FLAG_STRU))) { USIMM_ERROR_LOG("USIMM_IsSvlte: Read NV en_NV_Item_SVLTE_FLAG Fail"); return VOS_FALSE; } return (VOS_UINT32)stSvlteFlag.ucSvlteSupportFlag; #else return VOS_FALSE; #endif }