VOS_VOID TAF_MMA_ReadImeiNvim(VOS_VOID) { TAF_PH_MEINFO_STRU *pstMeInfo = VOS_NULL_PTR; VOS_UINT8 aucBuf[TAF_PH_IMEI_LEN + 1]; VOS_UINT8 ucCheckData; VOS_UINT32 ulDataLen; VOS_UINT32 i; MODEM_ID_ENUM_UINT16 enModemId; ulDataLen = TAF_PH_IMEI_LEN; ucCheckData = 0; pstMeInfo = &(gstMmaValue.stMeInfo); PS_MEM_SET(aucBuf, 0x00, sizeof(aucBuf)); /* 由PID获取MODEMID */ enModemId = VOS_GetModemIDFromPid(WUEPS_PID_MMA); /* 调用SC接口读取IMEI号码 */ SC_PERS_NvRead(enModemId, en_NV_Item_IMEI, aucBuf, NV_ITEM_IMEI_SIZE); for (i = 0; i < (TAF_PH_IMEI_LEN-2); i += 2) { ucCheckData += aucBuf[i] +((aucBuf[i+1] + aucBuf[i+1])/10) +((aucBuf[i+1] + aucBuf[i+1])%10); } ucCheckData = (10 - (ucCheckData%10))%10; MMA_ImeiBcd2Ascii((VOS_UINT8)ulDataLen, aucBuf, (pstMeInfo->ImeisV.aucImei)); (pstMeInfo->ImeisV.aucImei)[TAF_PH_IMEI_LEN-2] = (VOS_UINT8)(ucCheckData + 0x30); (pstMeInfo->ImeisV.aucImei)[TAF_PH_IMEI_LEN-1] = 0; PS_MEM_CPY(g_MmaNewValue.aucImeiBcd, aucBuf, ulDataLen); PS_MEM_CPY(g_aucMmaImei, pstMeInfo->ImeisV.aucImei, TAF_PH_IMEI_LEN - 1); return; }
VOS_VOID TAF_MTA_RcvQryCgsnReq(VOS_VOID *pMsg) { MODEM_ID_ENUM_UINT16 enModemId; AT_MTA_MSG_STRU *pstAtMtaReqMsg = VOS_NULL_PTR; MTA_AT_CGSN_QRY_CNF_STRU stCgsnCnf; /* 初始化 */ pstAtMtaReqMsg = (AT_MTA_MSG_STRU *)pMsg; PS_MEM_SET(&stCgsnCnf, 0x00, sizeof(MTA_AT_CGSN_QRY_CNF_STRU)); /* 由PID获取MODEMID */ enModemId = VOS_GetModemIDFromPid(UEPS_PID_MTA); /* 调用SC接口读取IMEI号码 */ SC_PERS_NvRead(enModemId, en_NV_Item_IMEI, stCgsnCnf.aucImei, NV_ITEM_IMEI_SIZE); /* 返回跨核消息ID_MTA_AT_IMEI_VERIFY_QRY_CNF到AT模块 */ TAF_MTA_SndAtMsg( &pstAtMtaReqMsg->stAppCtrl, ID_MTA_AT_CGSN_QRY_CNF, sizeof(MTA_AT_CGSN_QRY_CNF_STRU), (VOS_UINT8*)&stCgsnCnf ); return; }
VOS_VOID TAF_MTA_RcvAtNvwrSecCtrlSetReq( VOS_VOID *pMsg ) { AT_MTA_MSG_STRU *pstAtMtaReqMsg; AT_MTA_NVWRSECCTRL_SET_REQ_STRU *pstNvwrSecCtrlReq; MTA_AT_RESULT_CNF_STRU stNvwrSecCtrlCnf; TAF_NV_NVWR_SEC_CTRL_STRU stNvwrSecCtrlNV; IMEI_STRU stImeiSrc; IMEI_STRU stImeiPara; VOS_UINT32 ulResult; VOS_UINT32 ulImeiLen; MODEM_ID_ENUM_UINT16 enModemId; VOS_UINT8 aucImeiStr[TAF_NVIM_ITEM_IMEI_SIZE + 1]; /* 局部变量初始化 */ pstAtMtaReqMsg = (AT_MTA_MSG_STRU *)pMsg; pstNvwrSecCtrlReq = (AT_MTA_NVWRSECCTRL_SET_REQ_STRU *)pstAtMtaReqMsg->aucContent; /* SC提供的RSA封装需要调用者将解密后结果的预期长度传入 */ ulImeiLen = MTA_IMEI_LEN; PS_MEM_SET(&stNvwrSecCtrlNV, 0x00, sizeof(stNvwrSecCtrlNV)); PS_MEM_SET(&stNvwrSecCtrlCnf, 0x00, sizeof(stNvwrSecCtrlCnf)); PS_MEM_SET(&stImeiSrc, 0x00, sizeof(stImeiSrc)); PS_MEM_SET(&stImeiPara, 0x00, sizeof(stImeiPara)); PS_MEM_SET(aucImeiStr, 0x00, sizeof(aucImeiStr)); /* 如果单板没有HUK则不作安全校验 */ if (VOS_TRUE == DRV_CHECK_HUK_IS_VALID()) { /* 单板已经写入HUK但未下发安全密文则返回失败 */ if (VOS_TRUE != pstNvwrSecCtrlReq->ucSecStrFlg) { stNvwrSecCtrlCnf.enResult = MTA_AT_RESULT_DEVICE_SEC_SIGNATURE_FAIL; /* 返回跨核消息ID_MTA_AT_APSEC_SET_CNF到AT模块 */ TAF_MTA_SndAtMsg( &pstAtMtaReqMsg->stAppCtrl, ID_MTA_AT_NVWRSECCTRL_SET_CNF, sizeof(stNvwrSecCtrlCnf), (VOS_UINT8*)&stNvwrSecCtrlCnf ); return; } /* 由PID获取MODEMID */ enModemId = VOS_GetModemIDFromPid(UEPS_PID_MTA); /* 调用SC接口读取IMEI号码 */ ulResult = SC_PERS_NvRead(enModemId, en_NV_Item_IMEI, stImeiSrc.aucImei, TAF_NVIM_ITEM_IMEI_SIZE); if (SC_ERROR_CODE_NO_ERROR != ulResult) { /* 异常,返回结果给AT模块 */ stNvwrSecCtrlCnf.enResult = TAF_MTA_ConvertScErr(ulResult); /* 返回跨核消息ID_MTA_AT_APSEC_SET_CNF到AT模块 */ TAF_MTA_SndAtMsg( &pstAtMtaReqMsg->stAppCtrl, ID_MTA_AT_NVWRSECCTRL_SET_CNF, sizeof(stNvwrSecCtrlCnf), (VOS_UINT8*)&stNvwrSecCtrlCnf ); return; } /* 调用SC模块接口, 对密文进行RSA解密 */ ulResult = SC_FAC_RsaDecrypt(pstNvwrSecCtrlReq->aucSecString, AT_RSA_CIPHERTEXT_LEN, aucImeiStr, &ulImeiLen); if (MTA_IMEI_LEN != ulImeiLen) { ulResult = SC_ERROR_CODE_RSA_DECRYPT_FAIL; } if (SC_ERROR_CODE_NO_ERROR != ulResult) { /* 异常,返回结果给AT模块 */ stNvwrSecCtrlCnf.enResult = TAF_MTA_ConvertScErr(ulResult); /* 返回跨核消息ID_MTA_AT_APSEC_SET_CNF到AT模块 */ TAF_MTA_SndAtMsg( &pstAtMtaReqMsg->stAppCtrl, ID_MTA_AT_NVWRSECCTRL_SET_CNF, sizeof(stNvwrSecCtrlCnf), (VOS_UINT8*)&stNvwrSecCtrlCnf ); return; } /* 数字字符串转换为数字串 */ if (VOS_OK != TAF_MTA_AcNums2DecNums(aucImeiStr, stImeiPara.aucImei, ulImeiLen)) { stNvwrSecCtrlCnf.enResult = MTA_AT_RESULT_DEVICE_SEC_SIGNATURE_FAIL; /* 返回跨核消息ID_MTA_AT_APSEC_SET_CNF到AT模块 */ TAF_MTA_SndAtMsg( &pstAtMtaReqMsg->stAppCtrl, ID_MTA_AT_NVWRSECCTRL_SET_CNF, sizeof(stNvwrSecCtrlCnf), (VOS_UINT8*)&stNvwrSecCtrlCnf ); return; } /* 校验IMEI码 */ if (0 != PS_MEM_CMP(stImeiPara.aucImei, stImeiSrc.aucImei, ulImeiLen)) { stNvwrSecCtrlCnf.enResult = MTA_AT_RESULT_DEVICE_SEC_SIGNATURE_FAIL; /* 返回跨核消息ID_MTA_AT_APSEC_SET_CNF到AT模块 */ TAF_MTA_SndAtMsg( &pstAtMtaReqMsg->stAppCtrl, ID_MTA_AT_NVWRSECCTRL_SET_CNF, sizeof(stNvwrSecCtrlCnf), (VOS_UINT8*)&stNvwrSecCtrlCnf ); return; } } /* 修改安全控制NV */ if (NV_OK == NV_Read(en_NV_Item_NVWR_SEC_CTRL, &stNvwrSecCtrlNV, sizeof(stNvwrSecCtrlNV))) { stNvwrSecCtrlNV.ucSecType = pstNvwrSecCtrlReq->ucSecType; if (NV_OK == NV_Write(en_NV_Item_NVWR_SEC_CTRL, &stNvwrSecCtrlNV, sizeof(stNvwrSecCtrlNV))) { /* 设置成功 */ stNvwrSecCtrlCnf.enResult = MTA_AT_RESULT_NO_ERROR; /* 返回跨核消息ID_MTA_AT_APSEC_SET_CNF到AT模块 */ TAF_MTA_SndAtMsg( &pstAtMtaReqMsg->stAppCtrl, ID_MTA_AT_NVWRSECCTRL_SET_CNF, sizeof(stNvwrSecCtrlCnf), (VOS_UINT8*)&stNvwrSecCtrlCnf ); return; } } /* NV修改失败 */ stNvwrSecCtrlCnf.enResult = MTA_AT_RESULT_ERROR; /* 返回跨核消息ID_MTA_AT_APSEC_SET_CNF到AT模块 */ TAF_MTA_SndAtMsg( &pstAtMtaReqMsg->stAppCtrl, ID_MTA_AT_NVWRSECCTRL_SET_CNF, sizeof(stNvwrSecCtrlCnf), (VOS_UINT8*)&stNvwrSecCtrlCnf ); return; }