VOS_UINT32 diag_GetNvListProc(VOS_UINT8* pstReq) { VOS_UINT32 ret, ulNvNum, ulTotalLen; DIAG_CMD_NV_LIST_CNF_STRU* pstNVCnf = NULL; DIAG_CMD_NV_LIST_CNF_STRU stNVCnf = {0}; MSP_DIAG_CNF_INFO_STRU stDiagInfo = {0}; DIAG_FRAME_INFO_STRU *pstDiagHead; pstDiagHead = (DIAG_FRAME_INFO_STRU*)(pstReq); stDiagInfo.ulMsgType = DIAG_MSG_TYPE_BSP; ulNvNum = NV_GetNVIdListNum(); if (0 == ulNvNum) { diag_printf("[%s]: ulNvNum=%d!\n",__FUNCTION__, ulNvNum); goto DIAG_ERROR; } /*APP_HEAD + Result + NV nums + NV ID/LEN lists*/ ulTotalLen = sizeof(DIAG_CMD_NV_LIST_CNF_STRU) + (ulNvNum*sizeof(NV_LIST_INFO_STRU)); pstNVCnf = (DIAG_CMD_NV_LIST_CNF_STRU*)VOS_MemAlloc(MSP_PID_DIAG_APP_AGENT, DYNAMIC_MEM_PT, ulTotalLen); if (VOS_NULL_PTR == pstNVCnf) { diag_printf("[%s]:malloc error!\n",__FUNCTION__); goto DIAG_ERROR; } /*获取每个NV项的ID和长度*/ ret = NV_GetNVIdList(pstNVCnf->astNvList); if (NV_OK != ret) { VOS_MemFree(MSP_PID_DIAG_APP_AGENT, pstNVCnf); goto DIAG_ERROR; } DIAG_MSG_COMMON_PROC(stDiagInfo, (*pstNVCnf), pstDiagHead); pstNVCnf->ulCount = ulNvNum; pstNVCnf->ulRc = ERR_MSP_SUCCESS; ret = DIAG_MsgReport(&stDiagInfo, pstNVCnf, ulTotalLen); VOS_MemFree(MSP_PID_DIAG_APP_AGENT, pstNVCnf); return ret; DIAG_ERROR: DIAG_MSG_COMMON_PROC(stDiagInfo, stNVCnf, pstDiagHead); stNVCnf.ulCount = 0; stNVCnf.ulRc = ERR_MSP_FAILURE; ret = DIAG_MsgReport(&stDiagInfo, &stNVCnf, sizeof(stNVCnf)); return ret; }
VOS_UINT32 OM_AcpuGetNvIdList(APP_OM_MSG_EX_STRU *pstAppToOmMsg, VOS_UINT16 usReturnPrimId) { VOS_UINT32 ulNvNum; VOS_UINT32 ulTotalLen; OM_APP_MSG_EX_STRU *pstOmToAppMsg; VOS_UINT32 ulResult; OM_APP_GET_NV_LIST_STRU *pstOmGetNvList; ulNvNum = NV_GetNVIdListNum(); /*No NV exist*/ if (0 == ulNvNum) { OM_AcpuSendResultChannel(pstAppToOmMsg->ucCpuId, pstAppToOmMsg->ucFuncType, VOS_ERR, usReturnPrimId); PS_LOG(WUEPS_PID_OM, 0, PS_PRINT_ERROR, "OM_AcpuGetNvIdList:No NV exist.\n"); return VOS_ERR; } /*APP_HEAD + Result + NV nums + NV ID/LEN lists*/ ulTotalLen = sizeof(OM_APP_MSG_EX_STRU) + sizeof(VOS_UINT32) + (ulNvNum*sizeof(NV_LIST_INFO_STRU)); pstOmToAppMsg = (OM_APP_MSG_EX_STRU*)VOS_MemAlloc( WUEPS_PID_OM, DYNAMIC_MEM_PT, ulTotalLen); if (VOS_NULL_PTR == pstOmToAppMsg) { OM_AcpuSendResultChannel(pstAppToOmMsg->ucCpuId, pstAppToOmMsg->ucFuncType, VOS_ERR, usReturnPrimId); PS_LOG(WUEPS_PID_OM, 0, PS_PRINT_ERROR, "OM_AcpuGetNvIdList:VOS_MemAlloc Fail."); return VOS_ERR; } pstOmGetNvList = (OM_APP_GET_NV_LIST_STRU*)(pstOmToAppMsg->aucPara); /*获取每个NV项的ID和长度*/ ulResult = NV_GetNVIdList(pstOmGetNvList->astNvInfo); if (NV_OK != ulResult) { VOS_MemFree(WUEPS_PID_OM, pstOmToAppMsg); OM_AcpuSendResultChannel(pstAppToOmMsg->ucCpuId, pstAppToOmMsg->ucFuncType, ulResult, usReturnPrimId); PS_LOG(WUEPS_PID_OM, 0, PS_PRINT_ERROR, "OM_AcpuGetNvIdList:VOS_MemAlloc Fail."); return VOS_ERR; } /*填写执行结果和NV项数目*/ pstOmGetNvList->ulErrorCode = VOS_OK; pstOmGetNvList->usCount = (VOS_UINT16)ulNvNum; pstOmGetNvList->ucMsgIndex = 1; /*分包索引,先默认为1*/ pstOmGetNvList->ucTotalMsgCnt = 1; /*分包总数,先默认为1*/ pstOmToAppMsg->usLength = (VOS_UINT16)(ulTotalLen - VOS_OM_HEADER_LEN); OM_AcpuSendContentChannel(pstAppToOmMsg->ucCpuId, pstAppToOmMsg->ucFuncType, (OM_RSP_PACKET_STRU *)pstOmToAppMsg, usReturnPrimId); VOS_MemFree(WUEPS_PID_OM, pstOmToAppMsg); return VOS_OK; }