VOS_VOID OM_AcpuQueryMsgProc(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_astAcpuOmMsgFunTbl)/sizeof(OM_MSG_FUN_STRU); usPrimId = pstAppToOmMsg->usPrimId; /*Search the corresponding function and return PrimId*/ for (ulIndex = 0; ulIndex < ulTotalNum; ulIndex++) { if (usPrimId == (VOS_UINT16)(g_astAcpuOmMsgFunTbl[ulIndex].ulPrimId)) { usReturnPrimId = (VOS_UINT16)(g_astAcpuOmMsgFunTbl[ulIndex].ulReturnPrimId); ulResult = g_astAcpuOmMsgFunTbl[ulIndex].pfFun(pstAppToOmMsg, usReturnPrimId); break; } } /*Can't find the function handles the usPrimId.*/ if (ulIndex == ulTotalNum) { OM_AcpuSendResult(pstAppToOmMsg->ucFuncType, ulResult, usPrimId); } return; }
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) { #if (FEATURE_OFF == FEATURE_MERGE_OM_CHAN) OM_AcpuSendResult(pstAppToOmMsg->ucFuncType, ulResult, usPrimId); #else OM_AcpuSendResultChannel(pstAppToOmMsg->ucCpuId, pstAppToOmMsg->ucFuncType, ulResult, usPrimId); #endif } return; }
VOS_UINT32 OM_AcpuEstablishReq(APP_OM_MSG_EX_STRU *pstAppToOmMsg, VOS_UINT16 usReturnPrimId) { VOS_UINT32 ulRet; #if (FEATURE_ON == FEATURE_CBT_LOG) VOS_UINT32 ulState; ulState = g_ulAcpuOMSwitchOnOff; #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_ulAcpuOMSwitchOnOff = OM_STATE_IDLE; #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; /* 给工具回复建链成功状态 */ OM_AcpuSendResult(OM_QUERY_FUNC, ulRet, usReturnPrimId); /* 激活链路 */ g_ulAcpuOMSwitchOnOff = OM_STATE_ACTIVE; #if (FEATURE_ON == FEATURE_CBT_LOG) if ((OM_STATE_ACTIVE == ulState) && (OM_CBT_LOG_ENABLE_FLAG == g_ulCBTLogEnable)) { return VOS_OK; } #endif /* 通知CCPU链路状态 */ if(VOS_OK != GU_OamSndPcMsgToCcpu((VOS_UINT8*)pstAppToOmMsg, sizeof(APP_OM_MSG_EX_STRU))) { /* 打印错误 */ LogPrint("OM_AcpuEstablishReq: The ICC UDI Write is Error.\n"); } return VOS_OK; }
VOS_VOID OM_AcpuAgentMsgProc(MsgBlock* pMsg) { VOS_UINT16 usPrimId; VOS_UINT32 ulRet = VOS_OK; OM_AUTOCONFIG_CNF_STRU *pstSendCnf; /* 从消息前两个字节中取出原语ID */ usPrimId = *(VOS_UINT16*)(pMsg->aucValue); OM_RecordInfoStart(VOS_EXC_DUMP_MEM_NUM_1, pMsg->ulSenderPid, ACPU_PID_OMAGENT, *((VOS_UINT32*)pMsg->aucValue)); /* 判断是否为CCCPU AGENT发来的回复消息 */ if (IS_CAGENT_CNF_MSG(usPrimId)) { /* 判断消息是否被释放 */ if (VOS_NULL_PTR == g_pstOmAcpuCnfMsg) { /* 标记该消息不用释放 */ VOS_ReserveMsg(ACPU_PID_OMAGENT, pMsg); g_pstOmAcpuCnfMsg = pMsg; /* 释放信号量,使得调用API任务继续运行 */ VOS_SmV(g_ulOmAcpuCnfSem); } /* CCPU 已经OK,可以进行SD卡配置信息 */ if(OM_AUTOCONFIG_CNF == usPrimId) { OM_AutoConfigProc(); } OM_RecordInfoEnd(VOS_EXC_DUMP_MEM_NUM_1); return; } /* 否则为CCPU发来不需要回复的请求消息 */ if (OM_OLED_CLEAR_REQ == usPrimId) { OM_RecordInfoEnd(VOS_EXC_DUMP_MEM_NUM_1); return; } if (OM_OLED_DISPLAY_REQ == usPrimId) { OM_RecordInfoEnd(VOS_EXC_DUMP_MEM_NUM_1); return; } if (OM_HSIC_CONNECT_REQ == usPrimId) { Om_HsicConnectProc(); OM_RecordInfoEnd(VOS_EXC_DUMP_MEM_NUM_1); return; } if(OM_RECORD_DBU_INFO_REQ == usPrimId) { pstSendCnf = (OM_AUTOCONFIG_CNF_STRU *)pMsg; OM_AcpuLogShowToFile(VOS_FALSE); /* 将写文件的结果发送给PC侧 */ OM_AcpuSendResult(pstSendCnf->aucData[0], ulRet, OM_APP_WRITE_NV_LOG_FILE_CNF); } if(OM_SET_FTM_MODE_REQ == usPrimId) { g_ulAcpuFTMFlag = VOS_TRUE; } OM_RecordInfoEnd(VOS_EXC_DUMP_MEM_NUM_1); return; }