SC_ERROR_CODE_ENUM_UINT32 SC_FAC_SetDhKey( MODEM_ID_ENUM_UINT16 enModemID, SC_DH_KEY_TYPE_ENUM_UINT32 enKeyType, VOS_UINT32 ulKeyLen, VOS_UINT8 *pucKey ) { VOS_UINT32 ulResult; NVIM_VSIM_HVSDH_NV_STRU stDhNv; /* 判断鉴权是否通过 */ if (SC_AUTH_STATUS_DONE != SC_CTX_GetFacAuthStatus()) { SC_ERROR_LOG("SC_FAC_SetDhKey: SC_CTX_GetFacAuthStatus is not done."); return SC_ERROR_CODE_IDENTIFY_NOT_FINISH; } /* 从NV项中读出密钥信息 */ ulResult = NV_ReadEx(enModemID, en_NV_Item_VSIM_HVSDH_INFO, &stDhNv, sizeof(stDhNv)); if (NV_OK != ulResult) { SC_ERROR_LOG("SC_FAC_SetDhKey: NV_Read fail."); return SC_ERROR_CODE_NV_READ_FAIL; } if (SC_DH_KEY_SERVER_PUBLIC_KEY == enKeyType) { VOS_MemCpy(stDhNv.stSPublicKey.aucKey, pucKey, ulKeyLen); stDhNv.stSPublicKey.ulKeyLen = ulKeyLen; } else if (SC_DH_KEY_MODEM_PUBLIC_KEY == enKeyType) { VOS_MemCpy(stDhNv.stCPublicKey.aucKey, pucKey, ulKeyLen); stDhNv.stCPublicKey.ulKeyLen = ulKeyLen; } else { VOS_MemCpy(stDhNv.stCPrivateKey.aucKey, pucKey, ulKeyLen); stDhNv.stCPrivateKey.ulKeyLen = ulKeyLen; } /* 将服务器公钥写入NV项中 */ ulResult = NV_WriteEx(enModemID, en_NV_Item_VSIM_HVSDH_INFO, &stDhNv, sizeof(stDhNv)); if (NV_OK != ulResult) { SC_ERROR_LOG("SC_FAC_SetDhKey: NV_Write fail."); return SC_ERROR_CODE_NV_WRITE_FAIL; } return SC_ERROR_CODE_NO_ERROR; }
VOS_UINT32 OM_AcpuWriteNv(APP_OM_MSG_EX_STRU *pstAppToOmMsg, VOS_UINT16 usReturnPrimId) { APP_OM_WRITE_NV_STRU *pstAppOmWriteNv; VOS_UINT16 *pusAppToOmPara; VOS_UINT32 ulCount; VOS_UINT32 ulIndex; VOS_UINT16 usNvId; VOS_UINT16 usNvLen; VOS_UINT32 ulResult; pstAppOmWriteNv = (APP_OM_WRITE_NV_STRU*)(pstAppToOmMsg->aucPara); /*Get the number of all NV Id.*/ ulCount = pstAppOmWriteNv->ulCount; pusAppToOmPara = (VOS_UINT16*)(pstAppOmWriteNv->ausNvItemData); /*Write the NV content by NV Id.*/ for (ulIndex = 0; ulIndex < ulCount; ulIndex++) { usNvId = *pusAppToOmPara; pusAppToOmPara++; usNvLen = *pusAppToOmPara; pusAppToOmPara++; /*判断此NV项是否需要进行鉴权*/ if (VOS_YES != OM_IsAcpuAuthNv(usNvId)) { OM_AcpuSendResultChannel(pstAppToOmMsg->ucCpuId, pstAppToOmMsg->ucFuncType, OM_NEED_AUTH, usReturnPrimId); PS_LOG1(WUEPS_PID_OM, 0, PS_PRINT_WARNING, "OM_AcpuWriteNv:OM_IsAcpuAuthNv, NV id:", (VOS_INT32)usNvId); return VOS_ERR; } ulResult = NV_WriteEx(OM_GET_FUNCID_MODEMINFO(pstAppToOmMsg->ucFuncType), usNvId, pusAppToOmPara, (VOS_UINT32)usNvLen); if(NV_OK != ulResult) { //ulResult &= 0x0000FFFF; NV_GET_RETURN(ulResult, usNvId); OM_AcpuSendResultChannel(pstAppToOmMsg->ucCpuId, pstAppToOmMsg->ucFuncType, ulResult, usReturnPrimId); PS_LOG1(WUEPS_PID_OM, 0, PS_PRINT_ERROR, "OM_AcpuWriteNv:NV_Write, NV id:", (VOS_INT32)usNvId); return VOS_ERR; } /*由于返回的usNvLen以byte为单位,所以需要除以指针指向类型的大小*/ pusAppToOmPara += (usNvLen/sizeof(VOS_UINT16)); } OM_AcpuSendResultChannel(pstAppToOmMsg->ucCpuId, pstAppToOmMsg->ucFuncType, NV_OK, usReturnPrimId); return VOS_OK; }
/***************************************************************************** Function : WD_TaskFunc Description: timer task entry Input : void Return : void Other : *****************************************************************************/ VOS_VOID WD_TaskFunc( VOS_UINT32 Para0, VOS_UINT32 Para1, VOS_UINT32 Para2, VOS_UINT32 Para3 ) { OM_LIVE_TIME_CONTROL_STRU stLiveTime = {0}; VOS_UINT32 ulCountCycle = 0; VOS_UINT32 ulCycle = 0; OM_LIVE_TIME_STRU stTotalTime; stTotalTime.ulLiveTime = 0; if ( VOS_OK != NV_ReadEx(MODEM_ID_0, en_NV_Item_LiveTimeControl, (VOS_VOID *)(&stLiveTime), sizeof(OM_LIVE_TIME_CONTROL_STRU))) { stLiveTime.ulEnable= 0; } /* record */ if ( VOS_OK != NV_ReadEx(MODEM_ID_0, en_NV_Item_LiveTime, (VOS_VOID *)(&stTotalTime), sizeof(OM_LIVE_TIME_STRU))) { stLiveTime.ulEnable= 0; } if ( stLiveTime.ulEnable ) { /* minute -> second */ ulCycle = (stLiveTime.ulCycle) * 60; } for( ; ; ) { /* SemTake SEM when releas*/ VOS_TaskDelay(WD_TIME_UNIT); if ( stLiveTime.ulEnable ) { ulCountCycle++; if ( ulCountCycle >= ulCycle ) { ulCountCycle = 0; /* record */ stTotalTime.ulLiveTime += stLiveTime.ulCycle; NV_WriteEx(MODEM_ID_0, en_NV_Item_LiveTime, (VOS_VOID *)(&stTotalTime), sizeof(stTotalTime)); } } } return ; }
VOS_VOID OM_WriteDspNv(MsgBlock* pMsg) { VOS_UINT32 usIndex; VOS_UINT16 usCount; VOS_UINT16 usNvId; VOS_UINT16 usNvLen; VOS_UINT32 ulResult; DSP_WRITE_NV_STRU *pstWriteNVMsg; DSP_WRITE_NV_CONTEXT_STRU *pstWrteNvContext; VOS_UINT8 *pucNvData; MODEM_ID_ENUM_UINT16 enModemID; enModemID = VOS_GetModemIDFromPid(pMsg->ulSenderPid); /*如果DCXO确认双份再调试*/ pstWriteNVMsg = (DSP_WRITE_NV_STRU *)pMsg; usCount = pstWriteNVMsg->usCount; pstWrteNvContext = (DSP_WRITE_NV_CONTEXT_STRU *)(pstWriteNVMsg->aucNVData); for ( usIndex = 0; usIndex < usCount; usIndex++ ) { usNvId = pstWrteNvContext->usNvId; usNvLen = pstWrteNvContext->usNvLen; pucNvData = pstWrteNvContext->aucNVData; ulResult = NV_WriteEx(enModemID, usNvId, pucNvData, (VOS_UINT32)usNvLen); if ( NV_OK != ulResult ) { PS_LOG2(CCPU_PID_PAM_OM, 0, PS_PRINT_ERROR, "OM_WriteDspNv:NV_Write, NV id: ErrCode :", (VOS_INT32)usNvId, (VOS_INT32)ulResult); return; } pstWrteNvContext = (DSP_WRITE_NV_CONTEXT_STRU *)(pstWrteNvContext->aucNVData + usNvLen); } return; }
VOS_UINT32 AT_SetActiveModem(VOS_UINT8 ucIndex) { TAF_NV_DSDS_ACTIVE_MODEM_MODE_STRU stMode; /* 参数个数检查 */ if (gucAtParaIndex != 1) { return AT_CME_INCORRECT_PARAMETERS; } PS_MEM_SET(&stMode, 0, sizeof(stMode)); stMode.enActiveModem = (TAF_NV_ACTIVE_MODEM_MODE_ENUM_UINT8)gastAtParaList[0].ulParaValue; /* 写NV, 返回AT_OK */ if (NV_OK != NV_WriteEx(MODEM_ID_0, en_NV_Item_DSDS_Active_Modem_Mode, &stMode, sizeof(stMode))) { AT_ERR_LOG("AT_SetActiveModem(): en_NV_Item_DSDS_Active_Modem_Mode NV Write Fail!"); return AT_ERROR; } return AT_OK; }
VOS_UINT32 diag_NvWrProc(VOS_UINT8* pstReq) { VOS_UINT32 ret; MSP_DIAG_CNF_INFO_STRU stDiagInfo = {0}; DIAG_CMD_NV_WR_REQ_STRU* pstNVWRReq = NULL; DIAG_FRAME_INFO_STRU *pstDiagHead = NULL; DIAG_CMD_NV_WR_CNF_STRU stNVWRCnf = {0}; VOS_UINT32 i = 0; VOS_UINT32 ulOffset = 0; VOS_UINT32 ulNvid, ulLen; VOS_UINT8 *pData; pstDiagHead = (DIAG_FRAME_INFO_STRU*)(pstReq); pstNVWRReq = (DIAG_CMD_NV_WR_REQ_STRU*)(pstDiagHead->aucData + sizeof(MSP_DIAG_DATA_REQ_STRU)); stDiagInfo.ulMsgType = DIAG_MSG_TYPE_BSP; pData = (VOS_UINT8*)(&pstNVWRReq->ulNVId); for(i = 0; i < pstNVWRReq->ulCount; i++) { ulNvid = *(VOS_UINT32*)(pData + ulOffset); ulOffset += sizeof(VOS_UINT32); ulLen = *(VOS_UINT32*)(pData + ulOffset); ulOffset += sizeof(VOS_UINT32); if (VOS_YES != diag_IsAuthNv(ulNvid)) { goto DIAG_ERROR2; } printk(KERN_ERR "NV Write ulNVId=0x%x\n", ulNvid); /*写入NV项*/ ret = NV_WriteEx(pstNVWRReq->ulModemid, ulNvid, (pData + ulOffset), ulLen); if(ret != ERR_MSP_SUCCESS) { printk(KERN_ERR "[%s]:NV Write ERR 0x%x,ulNVId=0x%x\n",__FUNCTION__, ret, ulNvid); goto DIAG_ERROR2; } ulOffset += ulLen; } DIAG_MSG_COMMON_PROC(stDiagInfo, stNVWRCnf, pstDiagHead); stNVWRCnf.ulModemid = pstNVWRReq->ulModemid; stNVWRCnf.ulRc = ret; ret = DIAG_MsgReport(&stDiagInfo, &stNVWRCnf, sizeof(stNVWRCnf)); return ret; DIAG_ERROR2: DIAG_MSG_COMMON_PROC(stDiagInfo, stNVWRCnf, pstDiagHead); stNVWRCnf.ulModemid = pstNVWRReq->ulModemid; stNVWRCnf.ulRc = ERR_MSP_FAILURE; ret = DIAG_MsgReport(&stDiagInfo, &stNVWRCnf, sizeof(stNVWRCnf)); return ret; }