VOS_VOID RRM_ClearRFIDUsedInfo ( RRM_RFID_ENUM_UINT16 enRFIDIndex ) { RRM_RFID_INFO_STRU *pstRFIDInfoAddr = VOS_NULL_PTR; pstRFIDInfoAddr = RRM_GetRFIDInfoAddr(enRFIDIndex); if (VOS_NULL_PTR == pstRFIDInfoAddr) { RRM_ERROR_LOG1(UEPS_PID_RRM, "RRM_ClearRFIDUsedInfo: pstRFIDInfoAddr is null.", enRFIDIndex); return; } if (PS_TRUE == pstRFIDInfoAddr->enRFIDUsedFlg) { /* 清除RFID信息 */ pstRFIDInfoAddr->enRFIDUsedFlg = PS_FALSE; pstRFIDInfoAddr->enUsingModemId = MODEM_ID_BUTT; pstRFIDInfoAddr->usUsingRFIDValue = RRM_RFID_DEFAULT_VALUE; pstRFIDInfoAddr->stRFIDTimer.enRFIDTimerId = RRM_RFID_BUTT; pstRFIDInfoAddr->stRFIDTimer.pstStaTHandle = VOS_NULL_PTR; } return; }
VOS_UINT32 RRM_StartTimer ( RRM_RFID_ENUM_UINT16 enRFIDTimerId ) { RRM_RFID_TIMER_CTRL_STRU *pstRFIDTimerAddr; VOS_UINT32 ulRslt; /*获取该状态定时器控制块地址*/ pstRFIDTimerAddr = RRM_GetRFIDTimerAddr(enRFIDTimerId); /*无法获取该定时器控制块地址,说明定时器ID非法*/ if( VOS_NULL_PTR == pstRFIDTimerAddr) { /* 打印错误信息 */ RRM_WARNING_LOG1(UEPS_PID_RRM, "TimerId is Error!", enRFIDTimerId); return VOS_ERR; } /*检查该状态定时器是否在运行,如果正在运行,先停止该定时器。 停止定时器时,VOS会直接将该定时器句柄清除为VOS_NULL_PTR*/ if(VOS_NULL_PTR != pstRFIDTimerAddr->pstStaTHandle) { VOS_StopRelTimer(&(pstRFIDTimerAddr->pstStaTHandle)); } /* 定时器ID设置 */ pstRFIDTimerAddr->enRFIDTimerId = enRFIDTimerId; /* 定时器无参数信息,启动定时器时将定时器参数设置为0 非循环定时器,定时器模式为VOS_RELTIMER_NOLOOP*/ ulRslt = VOS_StartRelTimer( &(pstRFIDTimerAddr->pstStaTHandle), UEPS_PID_RRM, RRM_TMR_DEF_LEN, pstRFIDTimerAddr->enRFIDTimerId, 0, VOS_RELTIMER_NOLOOP, VOS_TIMER_PRECISION_0); /*这里调用的是VOS的接口函数,因此需要使用VOS的返回值进行检查*/ if( VOS_OK != ulRslt) { /* 启动失败,打印失败信息 */ RRM_ERROR_LOG1(UEPS_PID_RRM, "Start TimerId Failure!", enRFIDTimerId); return VOS_ERR; } return VOS_OK; }
VOS_VOID RRM_RcvTimeOutProc(RRM_RFID_ENUM_UINT16 enRFIDIndex) { VOS_UINT16 usIndex; VOS_UINT32 ulRecievePid; RRM_REG_INFO_STRU *pstRegInfoAddr = VOS_NULL_PTR; RRM_RFID_TIMER_CTRL_STRU *pstRFIDTimerAddr = VOS_NULL_PTR; /* 获取该状态定时器控制块地址 */ pstRFIDTimerAddr = RRM_GetRFIDTimerAddr(enRFIDIndex); /* 无法获取该定时器控制块地址,说明定时器ID非法 */ if( VOS_NULL_PTR == pstRFIDTimerAddr) { /* 打印错误信息 */ RRM_ERROR_LOG1(UEPS_PID_RRM, "TimerId is Error!", (VOS_INT32)enRFIDIndex); return; } /* 防止其他分支停止定时器后,缓存的超时处理的消息又收到的场景 */ if (RRM_RFID_BUTT == pstRFIDTimerAddr->enRFIDTimerId) { /* 打印错误信息 */ RRM_WARNING_LOG1(UEPS_PID_RRM, "Timer is already stop!", (VOS_INT32)enRFIDIndex); return; } /* 清除RF资源信息 */ RRM_ClearRFIDUsedInfo(enRFIDIndex); /* 注册信息处理 */ for (usIndex = 0; usIndex < RRM_REG_MAX_NUMBER; usIndex++) { pstRegInfoAddr = RRM_GetRegInfoAddr(usIndex); if (VOS_NULL_PTR != pstRegInfoAddr) { if (PS_TRUE == pstRegInfoAddr->enRegisteredFlg) { ulRecievePid = pstRegInfoAddr->ulPid; /* 向已注册的协议栈任务发送通知 */ RRM_SndPSStatusInd(ulRecievePid); } } } }
VOS_VOID RRM_RcvPSMsg(MsgBlock *pstMsg) { VOS_UINT32 ulMsgCnt; VOS_UINT32 ulResult; /* 获取消息个数 */ ulMsgCnt = sizeof(g_astRrmPsMsgProcTab) / sizeof(RRM_MSG_PROC_STRU); /* 查表,进行消息分发*/ ulResult = RRM_HandleMsgTab(ulMsgCnt, pstMsg, g_astRrmPsMsgProcTab); /* 没有找到匹配的消息 */ if (VOS_ERR == ulResult) { RRM_ERROR_LOG1(UEPS_PID_RRM, "MTC_RcvPSMsg, ulResult is false, ulMsgCnt is error.", (VOS_INT32)ulMsgCnt); } return; }
VOS_VOID RRM_InitModemInfo(VOS_VOID) { VOS_UINT32 ulRet; VOS_UINT16 usIndex; NV_MODEM_RF_SHARE_CFG_STRU stModemRFShareCfg; NV_MODEM_RF_SHARE_CFG_STRU *pstModemCfgInfoAddr = VOS_NULL_PTR; for (usIndex = 0; usIndex < MODEM_ID_BUTT; usIndex++) { PS_MEM_SET(&stModemRFShareCfg, 0, sizeof(stModemRFShareCfg)); /* 获取Modem配置信息地址 */ pstModemCfgInfoAddr = RRM_GetModemCfgInfoAddr(usIndex); if (VOS_NULL_PTR != pstModemCfgInfoAddr) { /* 初始化Modem配置信息 */ RRM_InitModemCfgInfo(pstModemCfgInfoAddr); /* 读取Modem射频配置nv项 */ ulRet = NV_ReadEx(usIndex, en_NV_MODEM_RF_SHARE_CFG, &stModemRFShareCfg, sizeof(NV_MODEM_RF_SHARE_CFG_STRU)); if (VOS_OK != ulRet) { RRM_ERROR_LOG1(UEPS_PID_RRM, "RRM_InitModemInfo: Read Nv Fail.", usIndex); continue; } /* 更新MODEM的配置信息 */ PS_MEM_CPY(pstModemCfgInfoAddr, &stModemRFShareCfg, sizeof(NV_MODEM_RF_SHARE_CFG_STRU)); } } return; }