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; }
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; }
VOS_UINT32 OM_AcpuCbtEstablishProc(APP_OM_MSG_EX_STRU *pstAppToOmMsg, VOS_UINT16 usReturnPrimId) { VOS_UINT32 ulRet; /* 先断开链路 */ g_stAcpuCbtCtrlInfo.ulOMSwitchOnOff = OM_STATE_IDLE; /* 以兼容校准工具,建链成功回复状态字0x02 */ ulRet = 0x02; /* 给工具回复建链成功状态 */ OM_AcpuSendResultChannel(OM_LOGIC_CHANNEL_CBT, OM_QUERY_FUNC, ulRet, OM_APP_ESTABLISH_CNF); /* 激活链路 */ g_stAcpuCbtCtrlInfo.ulOMSwitchOnOff = OM_STATE_ACTIVE; /* 通知CCPU链路状态 */ if(VOS_OK != GU_OamSndPcMsgToCcpu(&g_stAcpuCbtCtrlInfo,(VOS_UINT8*)pstAppToOmMsg, sizeof(APP_OM_MSG_EX_STRU))) { /* 打印错误 */ } return VOS_OK; }
VOS_VOID Om_AcpuBbpConfigMsgProc(OM_REQ_PACKET_STRU *pRspPacket, OM_RSP_FUNC *pRspFuncPtr) { APP_OM_MSG_EX_STRU *pstAppToOmMsg; VOS_UINT32 ulIndex; VOS_UINT32 ulTotalNum; VOS_UINT16 usPrimId; VOS_UINT16 usReturnPrimId; VOS_UINT32 ulResult = VOS_ERR; pstAppToOmMsg = (APP_OM_MSG_EX_STRU*)pRspPacket; ulTotalNum = sizeof(g_astAcpuOmBbpMsgFunTbl) / sizeof(OM_MSG_FUN_STRU); usPrimId = pstAppToOmMsg->usPrimId; /* 查询处理函数 */ for (ulIndex = 0; ulIndex < ulTotalNum; ulIndex++) { if (usPrimId == (VOS_UINT16)(g_astAcpuOmBbpMsgFunTbl[ulIndex].ulPrimId)) { usReturnPrimId = (VOS_UINT16)(g_astAcpuOmBbpMsgFunTbl[ulIndex].ulReturnPrimId); ulResult = g_astAcpuOmBbpMsgFunTbl[ulIndex].pfFun(pstAppToOmMsg, usReturnPrimId); break; } } /* 没有查询到处理函数 */ if (ulIndex == ulTotalNum) { OM_AcpuSendResultChannel(pstAppToOmMsg->ucCpuId, pstAppToOmMsg->ucFuncType, ulResult, usPrimId); } return; }
VOS_UINT32 OM_AcpuCnfEstablishProc(APP_OM_MSG_EX_STRU *pstAppToOmMsg, VOS_UINT16 usReturnPrimId) { VOS_UINT32 ulRet; #ifdef SCM_SNCHECK g_stSnCheck.ulCount = 0; g_ulSnErrCount = 0; #endif VOS_MemSet(&g_stAcpuTraceEventConfig, 0, sizeof(OM_TRACE_EVENT_CONFIG_PS_STRU)); VOS_MemSet(g_astOmPrintfOutPutLev, 0, OM_PRINTF_MODULE_MAX_NUM*sizeof(LOG_LEVEL_EN)); VOS_MemSet(g_aulLogPrintLevPsTable, 0, LOG_PS_MODULE_MAX_NUM*sizeof(LOG_LEVEL_EN)); VOS_MemSet(g_aulLogPrintLevDrvTable, 0, LOG_DRV_MODULE_MAX_NUM*sizeof(LOG_LEVEL_EN)); /* 先断开链路 */ g_stAcpuCnfCtrlInfo.ulOMSwitchOnOff = OM_STATE_IDLE; /* OM建链后投票禁止睡眠 */ #if(FEATURE_ON == FEATURE_SOCP_ON_DEMAND) OM_AcpuSocpVoteInfoAdd(OM_SOCPVOTE_CALLBEGIN); DRV_SOCP_VOTE(SOCP_VOTE_GU_OM_APP, SOCP_VOTE_FOR_WAKE); OM_AcpuSocpVoteInfoAdd(OM_SOCPVOTE_CALLEND); #endif /* 以兼容校准工具,建链成功回复状态字0x02 */ ulRet = 0x02; g_ulAcpuEstRcvCnt++; /* 给工具回复建链成功状态 */ OM_AcpuSendResultChannel(OM_LOGIC_CHANNEL_CNF, OM_QUERY_FUNC, ulRet, usReturnPrimId); /* 激活链路 */ g_stAcpuCnfCtrlInfo.ulOMSwitchOnOff = OM_STATE_ACTIVE; /* 通知CCPU链路状态 */ if(VOS_OK != GU_OamSndPcMsgToCcpu(&g_stAcpuCnfCtrlInfo,(VOS_UINT8*)pstAppToOmMsg, sizeof(APP_OM_MSG_EX_STRU))) { /* 打印错误 */ } return VOS_OK; }
VOS_UINT32 OM_AcpuReadNv(APP_OM_MSG_EX_STRU *pstAppToOmMsg, VOS_UINT16 usReturnPrimId) { OM_APP_MSG_EX_STRU *pstOmToAppMsg; APP_OM_READ_NV_STRU *pstAppOmReadNv; OM_APP_READ_NV_STRU *pstOmAppReadNv; VOS_UINT16 *pusOmToAppPara; VOS_UINT32 ulCount; VOS_UINT32 ulIndex; VOS_UINT32 ulTotalSize = 0; VOS_UINT32 ulResult; VOS_UINT16 usNvId; VOS_UINT32 ulNvLen; pstAppOmReadNv = (APP_OM_READ_NV_STRU*)(pstAppToOmMsg->aucPara); ulCount = pstAppOmReadNv->ulCount; /*Get the total length of all NV items.*/ for (ulIndex = 0; ulIndex < ulCount; ulIndex++) { usNvId = pstAppOmReadNv->ausNvItemId[ulIndex]; ulResult = NV_GetLength(usNvId, &ulNvLen); vos_printf("OM_AcpuReadNv NV_GetLength ulResult = %x\r\n", ulResult); if (VOS_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_AcpuReadNv:NV_GetLength, NV id: ",(VOS_INT32)usNvId); return ulResult; } ulTotalSize += ulNvLen; } /*Allocate the memory space.*/ ulTotalSize += OM_APP_MSG_EX_LEN + OM_READ_NV_HEAD_SIZE + (ulCount*OM_NV_ITEM_SIZE); pstOmToAppMsg = (OM_APP_MSG_EX_STRU*)VOS_AssistantMemAlloc(WUEPS_PID_OM, DYNAMIC_MEM_PT, ulTotalSize); if (VOS_NULL_PTR == pstOmToAppMsg) { OM_AcpuSendResultChannel(pstAppToOmMsg->ucCpuId, pstAppToOmMsg->ucFuncType, VOS_ERR, usReturnPrimId); PS_LOG(WUEPS_PID_OM, 0, PS_PRINT_ERROR, "OM_AcpuReadNv:VOS_MemAlloc.\n"); return VOS_ERR; } /*Assign the return value and the count to struct's fields.*/ pstOmAppReadNv = (OM_APP_READ_NV_STRU*)(pstOmToAppMsg->aucPara); pstOmAppReadNv->ulErrorCode = VOS_OK; pstOmAppReadNv->ulCount = ulCount; pusOmToAppPara = (VOS_UINT16*)(pstOmAppReadNv->ausNVItemData); /*Read the NV content by the NV Id.*/ for(ulIndex = 0; ulIndex < ulCount; ulIndex++) { usNvId = pstAppOmReadNv->ausNvItemId[ulIndex]; NV_GetLength(usNvId, &ulNvLen); *pusOmToAppPara = usNvId; pusOmToAppPara++; *pusOmToAppPara = (VOS_UINT16)ulNvLen; pusOmToAppPara++; ulResult = NV_ReadEx(OM_GET_FUNCID_MODEMINFO(pstAppToOmMsg->ucFuncType), usNvId, pusOmToAppPara, ulNvLen); vos_printf("OM_AcpuReadNv ulResult = %x\r\n", ulResult); if (NV_OK != ulResult) { //ulResult &= 0x0000FFFF; NV_GET_RETURN(ulResult, usNvId); OM_AcpuSendResultChannel(pstAppToOmMsg->ucCpuId, pstAppToOmMsg->ucFuncType, ulResult, usReturnPrimId); VOS_MemFree(WUEPS_PID_OM, pstOmToAppMsg); PS_LOG1(WUEPS_PID_OM, 0, PS_PRINT_ERROR, "OM_AcpuReadNv:NV_Read, NV id:", (VOS_INT32)usNvId); return ulResult; } pusOmToAppPara += ulNvLen/sizeof(VOS_UINT16); } pstOmToAppMsg->usLength = (VOS_UINT16)(ulTotalSize - 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; }