From 15b206e26c18916b34578ae1521cc13274fb8340 Mon Sep 17 00:00:00 2001 From: chen <15335560115@163.com> Date: 星期五, 27 六月 2025 18:49:04 +0800 Subject: [PATCH] 加入delay去掉进入休眠打印(会导致无法休眠),lora加mk进入休眠功耗16ua左右 --- keil/include/components/internet/src/AIR780EFSM.c | 1598 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 1,598 insertions(+), 0 deletions(-) diff --git a/keil/include/components/internet/src/AIR780EFSM.c b/keil/include/components/internet/src/AIR780EFSM.c new file mode 100644 index 0000000..1d65fce --- /dev/null +++ b/keil/include/components/internet/src/AIR780EFSM.c @@ -0,0 +1,1598 @@ +/******************************************************************************* + * File Name : AIR780EFSM.c + * Description : + * Created on : 2018年5月22日 + * Author : www.hido-studio.com + *******************************************************************************/ + +/******************************************************************************* + * Include Files * + *******************************************************************************/ +#include "AIR780EFSM.h" + +#include "string.h" +#include "Module.h" +#include "Socket.h" +#include "Module.h" +#include "AIR780ECSQ.h" +#include "AIR780EDriver.h" +#include "AIR780ESocket.h" +#include "HIDO_FSM.h" +#include "HIDO_Timer.h" +#include "HIDO_Util.h" +#include "HIDO_Debug.h" +#include "ATConfig.h" +#include "UART.h" +#include "Module.h" + +/******************************************************************************* + * Macro * + *******************************************************************************/ +#define TTS_SPEED "-10000" +#define TTS_VOLUME "-20000" + +/******************************************************************************* + * Type Definition * + *******************************************************************************/ + +/******************************************************************************* + * Global Variable * + *******************************************************************************/ +HIDO_FSM_DECLARE_IMPLEMENT(AIR780E); +HIDO_FSM_DETACHED_STATE(AIR780ERunATCmd) +HIDO_FSM_DETACHED_STATE(AIR780ECloseWireless) +HIDO_FSM_DETACHED_STATE(AIR780EOpenWireless) + +/******************************************************************************* + * Local Variable * + *******************************************************************************/ +static HIDO_BOOL l_bDeact = HIDO_FALSE; +static HIDO_UINT32 l_u32IPCheckTick = 0; +//static HIDO_UINT32 l_u32CSQGetTick = 0; +static HIDO_StateArgStruct l_stStateArg; + +/******************************************************************************* + * Local Function Declaration * + *******************************************************************************/ + +/******************************************************************************* + * Local Function * + *******************************************************************************/ +static HIDO_INT32 AIR780E_Poll(HIDO_ATLiteDeviceStruct *_pstATDevice); +static HIDO_INT32 AIR780E_PollOnIPReady(HIDO_ATLiteDeviceStruct *_pstATDevice); + +/******************************************************************************* + * Global Function * + *******************************************************************************/ + +/******************************************************************************* + * State Name : AIR780E + * Parent State : None + * Description : AIR780E主状态 + * Author : www.hido-studio.com + * Modified Date: : 2018-05-01 + *******************************************************************************/ +HIDO_FSM_STATE_IMPLEMENT(AIR780E, HIDO_NULL, HIDO_FSM_STATE(AIR780EPowerOn)) +{ + switch (_u32Event) + { + case HIDO_EVENT_ENTRY: + { + break; + } + case HIDO_EVENT_EXIT: + { + break; + } + case HIDO_AT_EVENT_TIMEOUT: + { + HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EInit), HIDO_NULL); + break; + } + case AIR780E_EVENT_RECEIVE: + { + HIDO_DataStruct *pstData = (HIDO_DataStruct *) _pArg; + HIDO_UINT32 u32ID = 0; + HIDO_UINT8 *pu8Data = HIDO_NULL; + HIDO_UINT32 u32Len = 0; + + if (HIDO_UtilParseFormat((HIDO_UINT8 *) pstData->m_pData, pstData->m_u32Len, "+RECEIVE,%d,%d:\r\n%e", &u32ID, &u32Len, &pu8Data) + != 3) + { + break; + } + + Socket_RecvData(u32ID, pu8Data, u32Len); + Socket_OnRecv(u32ID); + break; + } + case AIR780E_EVENT_NUM_0: + case AIR780E_EVENT_NUM_1: + case AIR780E_EVENT_NUM_2: + case AIR780E_EVENT_NUM_3: + case AIR780E_EVENT_NUM_4: + case AIR780E_EVENT_NUM_5: + { + HIDO_DataStruct *pstData = (HIDO_DataStruct *) _pArg; + HIDO_UINT32 u32ConnectID = 0; + HIDO_DataStruct stEvent; + + if (HIDO_UtilParseFormat((HIDO_UINT8 *) pstData->m_pData, pstData->m_u32Len, "%d, %p\r\n", + &u32ConnectID, &stEvent) != 2) + { + break; + } + + if (strncmp(stEvent.m_pData, "CLOSED", stEvent.m_u32Len) == 0) + { + Socket_OnClosed(u32ConnectID); + } + + break; + } + default: + { + return HIDO_EVENT_NO_PROC; + } + } + + return HIDO_EVENT_OK; +} + +/******************************************************************************* + * State Name : AIR780EInit + * Parent State : AIR780E + * Description : 初始化主状态 + * Author : www.hido-studio.com + * Modified Date: : 2018-05-01 + *******************************************************************************/ +HIDO_FSM_STATE_IMPLEMENT(AIR780EInit, HIDO_FSM_STATE(AIR780E), HIDO_FSM_STATE(AIR780EPowerOn)) +{ + switch (_u32Event) + { + case HIDO_EVENT_ENTRY: + { + break; + } + case HIDO_EVENT_EXIT: + { + break; + } + case HIDO_AT_EVENT_TIMEOUT: + { + /* AT命令相应超时,重新初始化 */ + HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EInit), HIDO_NULL); + + break; + } + default: + { + return HIDO_EVENT_NO_PROC; + } + } + + return HIDO_EVENT_OK; +} + +/******************************************************************************* + * State Name : AIR780EPowerOff + * Parent State : AIR780EInit + * Description : + * Author : www.hido-studio.com + * Modified Date: : 2018-05-01 + *******************************************************************************/ +HIDO_FSM_STATE_IMPLEMENT(AIR780EPowerOff, HIDO_FSM_STATE(AIR780E), HIDO_NULL) +{ + switch (_u32Event) + { + case HIDO_EVENT_ENTRY: + { + AIR780EDriver_PowerOff(); + Module_PowerEvent(MODULE_MAIN, MODULE_STATE_POWER_OFF); + break; + } + case HIDO_EVENT_EXIT: + { + break; + } + case AIR780E_EVENT_POLL: + { + if(Module_NeedPowerOff(MODULE_MAIN) == HIDO_TRUE) + { + Module_PowerEvent(MODULE_MAIN, MODULE_STATE_POWER_OFF); + } + + if(Module_NeedPowerOn(MODULE_MAIN) == HIDO_TRUE) + { + HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EPowerOn), HIDO_NULL); + } + + break; + } + default: + { + return HIDO_EVENT_NO_PROC; + } + } + + return HIDO_EVENT_OK; +} + +/******************************************************************************* + * State Name : AIR780EPowerOn + * Parent State : AIR780EInit + * Description : + * Author : www.hido-studio.com + * Modified Date: : 2018-05-01 + *******************************************************************************/ +HIDO_FSM_STATE_IMPLEMENT(AIR780EPowerOn, HIDO_FSM_STATE(AIR780EInit), HIDO_NULL) +{ + static enum + { + AIR780E_SUB_STATE_POWER_OFF, + AIR780E_SUB_STATE_POWER_ON, + } l_eAIR780ESubState; + + HIDO_ATLiteDeviceStruct *pstATDevice = (HIDO_ATLiteDeviceStruct *) _pstFSM->m_pPrivateData; + HIDO_UINT32 u32FSMTimerID = ((ST_AIR780EDriverData *)pstATDevice->m_pUserData)->m_u32FSMTimerID; + + switch (_u32Event) + { + case HIDO_EVENT_ENTRY: + { + pstATDevice->m_u32LineLen = 0; + while (pstATDevice->m_fnReadLine(pstATDevice) == HIDO_OK) + { + ; + } + pstATDevice->m_u32LineLen = 0; + + l_eAIR780ESubState = AIR780E_SUB_STATE_POWER_OFF; + AIR780EDriver_PowerOff(); + HIDO_FSMStartTimer(u32FSMTimerID, HIDO_TIMER_TYPE_ONCE, HIDO_TIMER_TICK_S(1), _pstFSM, AIR780E_EVENT_DELAY); + break; + } + case HIDO_EVENT_EXIT: + { + /* 退出初始化 */ + HIDO_TimerCancel(u32FSMTimerID); + + break; + } + case AIR780E_EVENT_DELAY: + { + switch(l_eAIR780ESubState) + { + case AIR780E_SUB_STATE_POWER_OFF: + { + l_eAIR780ESubState = AIR780E_SUB_STATE_POWER_ON; + AIR780EDriver_PowerOn(); + HIDO_FSMStartTimer(u32FSMTimerID, HIDO_TIMER_TYPE_ONCE, HIDO_TIMER_TICK_S(5), _pstFSM, AIR780E_EVENT_DELAY); + break; + } + case AIR780E_SUB_STATE_POWER_ON: + { + HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EATCmdTest), HIDO_NULL); + //Uart_ReConfigBaudRate(UART_ID_4G, 115200); + //HIDO_ATLiteCmdSend(pstATDevice, AT_GENERAL_TIMEOUT_TIME, "AT+IPR=9600;&W\r\n"); + //Uart_ReConfigBaudRate(UART_ID_4G, 9600); + break; + } + } + + break; + } + case AIR780E_EVENT_RDY: + { + HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EATCmdTest), HIDO_NULL); + break; + } + case HIDO_AT_EVENT_OK: + case HIDO_AT_EVENT_ERROR: + case HIDO_AT_EVENT_TIMEOUT: + { + HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EATCmdTest), HIDO_NULL); + break; + } + default: + { + return HIDO_EVENT_NO_PROC; + } + } + + return HIDO_EVENT_OK; +} + +/******************************************************************************* + * State Name : AIR780EATCmdTest + * Parent State : AIR780EInit + * Description : AT命令测试状态 + * Author : www.hido-studio.com + * Modified Date: : 2018-05-01 + *******************************************************************************/ +HIDO_FSM_STATE_IMPLEMENT(AIR780EATCmdTest, HIDO_FSM_STATE(AIR780EInit), HIDO_NULL) +{ + HIDO_ATLiteDeviceStruct *pstATDevice = (HIDO_ATLiteDeviceStruct *) _pstFSM->m_pPrivateData; + + switch (_u32Event) + { + case HIDO_EVENT_ENTRY: + { + HIDO_ATLiteCmdSend(pstATDevice, AT_GENERAL_TIMEOUT_TIME, "ATE0\r\n"); + break; + } + case HIDO_EVENT_EXIT: + { + HIDO_ATLiteCmdSendOver(pstATDevice); + break; + } + case HIDO_AT_EVENT_OK: + { + /* 上电成功 */ + Module_PowerEvent(MODULE_MAIN, MODULE_STATE_POWER_ON); + HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EWaitSimCardReady), HIDO_NULL); + + break; + } + case HIDO_AT_EVENT_ERROR: + { + break; + } + case HIDO_AT_EVENT_TIMEOUT: + { + HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EPowerOn), HIDO_NULL); + break; + } + default: + { + return HIDO_EVENT_NO_PROC; + } + } + + return HIDO_EVENT_OK; +} + +/******************************************************************************* + * State Name : AIR780EWaitSimCardReady + * Parent State : AIR780EInit + * Description : 等待SIM卡准备完成 + * Author : www.hido-studio.com + * Modified Date: : 2018-05-01 + *******************************************************************************/ +HIDO_FSM_STATE_IMPLEMENT(AIR780EWaitSimCardReady, HIDO_FSM_STATE(AIR780EInit), HIDO_NULL) +{ + static HIDO_UINT32 u32RetryCnt = 0; + HIDO_ATLiteDeviceStruct *pstATDevice = (HIDO_ATLiteDeviceStruct *) _pstFSM->m_pPrivateData; + HIDO_UINT32 u32FSMTimerID = ((ST_AIR780EDriverData *)pstATDevice->m_pUserData)->m_u32FSMTimerID; + + switch (_u32Event) + { + case HIDO_EVENT_ENTRY: + { + u32RetryCnt = 0; + HIDO_ATLiteCmdSend(pstATDevice, AT_GENERAL_TIMEOUT_TIME, "AT+CPIN?\r\n"); + break; + } + case HIDO_EVENT_EXIT: + { + HIDO_ATLiteCmdSendOver(pstATDevice); + HIDO_TimerCancel(u32FSMTimerID); + break; + } + case HIDO_AT_EVENT_OK: + { + HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EATCmdInit), HIDO_NULL); + break; + } + case HIDO_AT_EVENT_ERROR: + { + HIDO_FSMStartTimer(u32FSMTimerID, HIDO_TIMER_TYPE_ONCE, HIDO_TIMER_TICK_S(1), + _pstFSM, AIR780E_EVENT_DELAY); + break; + } + case HIDO_AT_EVENT_TIMEOUT: + { + break; + } + case AIR780E_EVENT_DELAY: + { + if(u32RetryCnt < 10) + { + u32RetryCnt++; + HIDO_ATLiteCmdSend(pstATDevice, AT_GENERAL_TIMEOUT_TIME, "AT+CPIN?\r\n"); + } + else + { + HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EIdle), HIDO_NULL); + } + break; + } + case AIR780E_EVENT_POLL: + { + if(Module_NeedPowerOff(MODULE_MAIN) == HIDO_TRUE) + { + HIDO_FSMStateChange(HIDO_FSM(AIR780E), HIDO_FSM_STATE(AIR780EPowerOff), HIDO_NULL); + + break; + } + + break; + } + default: + { + return HIDO_EVENT_NO_PROC; + } + } + + return HIDO_EVENT_OK; +} + +/******************************************************************************* + * State Name : AIR780EATCmdInit + * Parent State : AIR780EInit + * Description : + * Author : www.hido-studio.com + * Modified Date: : 2018-05-01 + *******************************************************************************/ +HIDO_FSM_STATE_IMPLEMENT(AIR780EATCmdInit, HIDO_FSM_STATE(AIR780EInit), HIDO_NULL) +{ + static HIDO_UINT32 l_u32CmdIndex = 0; + static HIDO_UINT32 l_u32RetryCnt = 0; + + const ST_ATCmd astInitCmdList[] = + { + { "AT+CGSN\r\n", AT_GENERAL_TIMEOUT_TIME, AT_CMD_RESULT_OK }, + { "AT+CIMI\r\n", AT_GENERAL_TIMEOUT_TIME, AT_CMD_RESULT_OK }, + { "AT+CCID\r\n", AT_GENERAL_TIMEOUT_TIME, AT_CMD_RESULT_OK }, + { "ATI\r\n", AT_GENERAL_TIMEOUT_TIME, AT_CMD_RESULT_OK }, + { "AT+CFGRI=1\r\n", AT_GENERAL_TIMEOUT_TIME, AT_CMD_RESULT_OK }, +// { "AT+CTTSPARAM=100,0,50,50,0,2,25,1500,150,1,0,1\r\n", AT_GENERAL_TIMEOUT_TIME, AT_CMD_RESULT_OK }, + }; + + HIDO_ATLiteDeviceStruct *pstATDevice = (HIDO_ATLiteDeviceStruct *) _pstFSM->m_pPrivateData; + HIDO_UINT32 u32FSMTimerID = ((ST_AIR780EDriverData *) pstATDevice->m_pUserData)->m_u32FSMTimerID; + + switch (_u32Event) + { + case HIDO_EVENT_ENTRY: + { + l_u32CmdIndex = 0; + l_u32RetryCnt = 0; + HIDO_ATLiteCmdSend(pstATDevice, astInitCmdList[l_u32CmdIndex].m_u32TimeOut, astInitCmdList[l_u32CmdIndex].m_pcATCmd); + l_u32RetryCnt++; + + break; + } + case HIDO_EVENT_EXIT: + { + HIDO_ATLiteCmdSendOver(pstATDevice); + HIDO_TimerCancel(u32FSMTimerID); + break; + } + case HIDO_AT_EVENT_OK: + case HIDO_AT_EVENT_ERROR: + case HIDO_AT_EVENT_TIMEOUT: + { + if(HIDO_AT_EVENT_TIMEOUT == _u32Event) + { + if(astInitCmdList[l_u32CmdIndex].m_u32Result & AT_CMD_RESULT_TIMEOUT) + { + l_u32RetryCnt = 0; + l_u32CmdIndex++; + if (l_u32CmdIndex >= HIDO_ARRARY_COUNT(astInitCmdList)) + { + HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EReady), HIDO_NULL); + } + else + { + HIDO_ATLiteCmdSend(pstATDevice, astInitCmdList[l_u32CmdIndex].m_u32TimeOut, astInitCmdList[l_u32CmdIndex].m_pcATCmd); + } + + break; + } + else + { + return HIDO_EVENT_NO_PROC; + } + } + + if (astInitCmdList[l_u32CmdIndex].m_u32Result + & (HIDO_AT_EVENT_OK == _u32Event ? AT_CMD_RESULT_OK : AT_CMD_RESULT_ERROR)) + { + l_u32RetryCnt = 0; + l_u32CmdIndex++; + if (l_u32CmdIndex >= HIDO_ARRARY_COUNT(astInitCmdList)) + { + HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EReady), HIDO_NULL); + } + else + { + HIDO_ATLiteCmdSend(pstATDevice, astInitCmdList[l_u32CmdIndex].m_u32TimeOut, astInitCmdList[l_u32CmdIndex].m_pcATCmd); + } + } + else + { + l_u32RetryCnt++; + if (l_u32RetryCnt >= 3) + { + /* 重试超限 */ + HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EPowerOn), HIDO_NULL); + } + else + { + /* 不是期待的结果,10后再次尝试 */ + HIDO_FSMStartTimer(u32FSMTimerID, HIDO_TIMER_TYPE_ONCE, HIDO_TIMER_TICK_S(10), _pstFSM, + AIR780E_EVENT_DELAY); + } + } + + break; + } + case AIR780E_EVENT_DELAY: + { + HIDO_ATLiteCmdSend(pstATDevice, astInitCmdList[l_u32CmdIndex].m_u32TimeOut, astInitCmdList[l_u32CmdIndex].m_pcATCmd); + break; + } + case AIR780E_EVENT_NUM_0: + case AIR780E_EVENT_NUM_1: + case AIR780E_EVENT_NUM_2: + case AIR780E_EVENT_NUM_3: + case AIR780E_EVENT_NUM_4: + case AIR780E_EVENT_NUM_5: + case AIR780E_EVENT_NUM_6: + case AIR780E_EVENT_NUM_7: + case AIR780E_EVENT_NUM_8: + case AIR780E_EVENT_NUM_9: + { + HIDO_DataStruct *pstData = (HIDO_DataStruct *) _pArg; + + switch(l_u32CmdIndex) + { + case 0: + { + Module_SetIMEI((HIDO_CHAR *)pstData->m_pData, pstData->m_u32Len); + break; + } + case 1: + { + Module_SetIMSI((HIDO_CHAR *)pstData->m_pData, pstData->m_u32Len); + break; + } + case 2: + { + Module_SetCCID((HIDO_CHAR *)pstData->m_pData, pstData->m_u32Len); + break; + } + default: + { + break; + } + } + + break; + } + case AIR780E_EVENT_POLL: + { + if(Module_NeedPowerOff(MODULE_MAIN) == HIDO_TRUE) + { + HIDO_FSMStateChange(HIDO_FSM(AIR780E), HIDO_FSM_STATE(AIR780EPowerOff), HIDO_NULL); + + break; + } + + break; + } + default: + { + return HIDO_EVENT_NO_PROC; + } + } + + return HIDO_EVENT_OK; +} + +/******************************************************************************* + * State Name : AIR780EIdle + * Parent State : AIR780E + * Description : + * Author : www.hido-studio.com + * Modified Date: : 2018-05-01 + *******************************************************************************/ +HIDO_FSM_STATE_IMPLEMENT(AIR780EIdle, HIDO_FSM_STATE(AIR780E), HIDO_NULL) +{ + HIDO_ATLiteDeviceStruct *pstATDevice = (HIDO_ATLiteDeviceStruct *) _pstFSM->m_pPrivateData; + + switch (_u32Event) + { + case HIDO_EVENT_ENTRY: + { + break; + } + case HIDO_EVENT_EXIT: + { + break; + } + case AIR780E_EVENT_POLL: + { + AIR780E_Poll(pstATDevice); + + break; + } + default: + { + return HIDO_EVENT_NO_PROC; + } + } + + return HIDO_EVENT_OK; +} + +/******************************************************************************* + * State Name : AIR780EReady + * Parent State : AIR780E + * Description : + * Author : www.hido-studio.com + * Modified Date: : 2018-05-01 + *******************************************************************************/ +HIDO_FSM_STATE_IMPLEMENT(AIR780EReady, HIDO_FSM_STATE(AIR780E), HIDO_FSM_STATE(AIR780ESearchingNetwork)) +{ + switch (_u32Event) + { + case HIDO_EVENT_ENTRY: + { + break; + } + case HIDO_EVENT_EXIT: + { + break; + } + default: + { + return HIDO_EVENT_NO_PROC; + } + } + + return HIDO_EVENT_OK; +} + +/******************************************************************************* + * State Name : AIR780ESearchingNetwork + * Parent State : AIR780E + * Description : 查找网络 + * Author : www.hido-studio.com + * Modified Date: : 2018-05-01 + *******************************************************************************/ +HIDO_FSM_STATE_IMPLEMENT(AIR780ESearchingNetwork, HIDO_FSM_STATE(AIR780EReady), HIDO_NULL) +{ + static enum + { + AIR780E_SUB_STATE_CREG, + AIR780E_SUB_STATE_CGREG, + } l_eAIR780ESubState; + + static HIDO_UINT32 l_u32RespCode = 0; + static HIDO_UINT32 l_u32Cnt = 0; + static HIDO_UINT32 l_u32ReadyCnt = 0; + static HIDO_BOOL l_bATBusy = HIDO_FALSE; + + HIDO_ATLiteDeviceStruct *pstATDevice = (HIDO_ATLiteDeviceStruct *) _pstFSM->m_pPrivateData; + HIDO_UINT32 u32FSMTimerID = ((ST_AIR780EDriverData *) pstATDevice->m_pUserData)->m_u32FSMTimerID; + + switch (_u32Event) + { + case HIDO_EVENT_ENTRY: + { + l_eAIR780ESubState = AIR780E_SUB_STATE_CREG; + l_u32Cnt = 0; + l_u32RespCode = 0; + l_bATBusy = HIDO_TRUE; + HIDO_ATLiteCmdSend(pstATDevice, AT_GENERAL_TIMEOUT_TIME, "AT+CREG?\r\n"); + break; + } + case HIDO_EVENT_EXIT: + { + HIDO_ATLiteCmdSendOver(pstATDevice); + HIDO_TimerCancel(u32FSMTimerID); + break; + } + case HIDO_AT_EVENT_OK: + { + if (AIR780E_SUB_STATE_CREG == l_eAIR780ESubState) + { + l_bATBusy = HIDO_FALSE; + + if (1 == l_u32RespCode || 5 == l_u32RespCode) + { + l_eAIR780ESubState = AIR780E_SUB_STATE_CGREG; + l_u32Cnt = 0; + l_u32RespCode = 0; + l_bATBusy = HIDO_TRUE; + HIDO_ATLiteCmdSend(pstATDevice, AT_GENERAL_TIMEOUT_TIME, "AT+CGREG?\r\n"); + } + else + { + l_u32Cnt++; + + if (l_u32Cnt > 100) + { + HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EInit), HIDO_NULL); + break; + } + else + { + HIDO_FSMStartTimer(u32FSMTimerID, HIDO_TIMER_TYPE_ONCE, HIDO_TIMER_TICK_S(2), _pstFSM, + AIR780E_EVENT_DELAY); + } + } + } + else if (AIR780E_SUB_STATE_CGREG == l_eAIR780ESubState) + { + l_bATBusy = HIDO_FALSE; + + if (1 == l_u32RespCode || 5 == l_u32RespCode) + { + l_u32ReadyCnt++; + } + else + { + l_u32ReadyCnt = 0; + l_u32Cnt++; + } + + if (l_u32ReadyCnt >= 1) + { + HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EIPInit), HIDO_NULL); + } + else + { + HIDO_FSMStartTimer(u32FSMTimerID, HIDO_TIMER_TYPE_ONCE, HIDO_TIMER_TICK_S(2), _pstFSM, + AIR780E_EVENT_DELAY); + } + + if (l_u32Cnt > 100) + { + /* TODO网络出错 */ + } + } + + break; + } + case AIR780E_EVENT_CREG: + { + HIDO_DataStruct *pstData = (HIDO_DataStruct *) _pArg; + + if (AIR780E_SUB_STATE_CREG == l_eAIR780ESubState) + { + if (HIDO_UtilParseFormat((HIDO_UINT8 *) pstData->m_pData, pstData->m_u32Len, "+CREG: %*,%d", + &l_u32RespCode) != 2) + { + break; + } + } + + break; + } + case AIR780E_EVENT_CGREG: + { + HIDO_DataStruct *pstData = (HIDO_DataStruct *) _pArg; + + if (AIR780E_SUB_STATE_CGREG == l_eAIR780ESubState) + { + if (HIDO_UtilParseFormat((HIDO_UINT8 *) pstData->m_pData, pstData->m_u32Len, "+CGREG: %*,%d", + &l_u32RespCode) != 2) + { + break; + } + } + break; + } + case AIR780E_EVENT_DELAY: + { + if (AIR780E_SUB_STATE_CREG == l_eAIR780ESubState) + { + l_u32RespCode = 0; + l_bATBusy = HIDO_TRUE; + HIDO_ATLiteCmdSend(pstATDevice, AT_GENERAL_TIMEOUT_TIME, "AT+CREG?\r\n"); + } + else if (AIR780E_SUB_STATE_CGREG == l_eAIR780ESubState) + { + l_u32RespCode = 0; + l_bATBusy = HIDO_TRUE; + HIDO_ATLiteCmdSend(pstATDevice, AT_GENERAL_TIMEOUT_TIME, "AT+CGREG?\r\n"); + } + + break; + } + case AIR780E_EVENT_POLL: + { + if (HIDO_FALSE == l_bATBusy) + { + AIR780E_Poll(pstATDevice); + } + + break; + } + default: + { + return HIDO_EVENT_NO_PROC; + } + } + + return HIDO_EVENT_OK; +} + +/******************************************************************************* + * State Name : AIR780EIPInit + * Parent State : AIR780E + * Description : + * Author : www.hido-studio.com + * Modified Date: : 2018-05-01 + *******************************************************************************/ +HIDO_FSM_STATE_IMPLEMENT(AIR780EIPInit, HIDO_FSM_STATE(AIR780EReady), HIDO_NULL) +{ + static HIDO_UINT32 l_u32CmdIndex = 0; + static HIDO_UINT32 l_u32RetryCnt = 0; + + HIDO_CHAR *pcIMSI = HIDO_NULL; + HIDO_CHAR acAPN[32] = { 0 }; + HIDO_ATLiteDeviceStruct *pstATDevice = (HIDO_ATLiteDeviceStruct *) _pstFSM->m_pPrivateData; + HIDO_UINT32 u32FSMTimerID = ((ST_AIR780EDriverData *) pstATDevice->m_pUserData)->m_u32FSMTimerID; + + const ST_ATCmd astInitCmdList[] = + { + { "AT+CIPRXF=1\r\n", AT_GENERAL_TIMEOUT_TIME, AT_CMD_RESULT_OK }, + { "AT+CIPMUX=1\r\n", AT_GENERAL_TIMEOUT_TIME, AT_CMD_RESULT_OK }, + { "AT+CSTT=\"%s\",\"\",\"\"\r\n", 60000, AT_CMD_RESULT_OK | AT_CMD_RESULT_ERROR }, + { "AT+CIICR\r\n", 60000, AT_CMD_RESULT_OK | AT_CMD_RESULT_ERROR }, + { "AT+CIFSR\r\n", 1000, AT_CMD_RESULT_OK | AT_CMD_RESULT_TIMEOUT }, + { "AT+POWERMODE=\"PRO\"\r\n", 5000, AT_CMD_RESULT_OK | AT_CMD_RESULT_TIMEOUT }, + }; + + pcIMSI = Module_GetIMSI(); + if(strncmp(pcIMSI, "46000", 5) == 0 || strncmp(pcIMSI, "46002", 5) == 0) + { + HIDO_UtilSnprintf(acAPN, sizeof(acAPN), "CMNET"); + } + else if(strncmp(pcIMSI, "46001", 5) == 0) + { + HIDO_UtilSnprintf(acAPN, sizeof(acAPN), "UNINET"); + } + else if(strncmp(pcIMSI, "46006", 5) == 0) + { + HIDO_UtilSnprintf(acAPN, sizeof(acAPN), "CMNET"); + } + else if(strncmp(pcIMSI, "46003", 5) == 0) + { + HIDO_UtilSnprintf(acAPN, sizeof(acAPN), "CTNET"); + } + + switch (_u32Event) + { + case HIDO_EVENT_ENTRY: + { + l_u32CmdIndex = 0; + l_u32RetryCnt = 0; + HIDO_ATLiteCmdSend(pstATDevice, astInitCmdList[l_u32CmdIndex].m_u32TimeOut, astInitCmdList[l_u32CmdIndex].m_pcATCmd); + l_u32RetryCnt++; + + break; + } + case HIDO_EVENT_EXIT: + { + HIDO_ATLiteCmdSendOver(pstATDevice); + HIDO_TimerCancel(u32FSMTimerID); + break; + } + case HIDO_AT_EVENT_OK: + case HIDO_AT_EVENT_ERROR: + case HIDO_AT_EVENT_TIMEOUT: + { + if(HIDO_AT_EVENT_TIMEOUT == _u32Event) + { + if(astInitCmdList[l_u32CmdIndex].m_u32Result & AT_CMD_RESULT_TIMEOUT) + { + l_u32RetryCnt = 0; + l_u32CmdIndex++; + if (l_u32CmdIndex >= HIDO_ARRARY_COUNT(astInitCmdList)) + { + HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EIPReady), HIDO_NULL); + } + else + { + HIDO_ATLiteCmdSend(pstATDevice, astInitCmdList[l_u32CmdIndex].m_u32TimeOut, astInitCmdList[l_u32CmdIndex].m_pcATCmd, acAPN); + } + + break; + } + else + { + return HIDO_EVENT_NO_PROC; + } + } +ok: + if((HIDO_AT_EVENT_OK == _u32Event && (astInitCmdList[l_u32CmdIndex].m_u32Result & AT_CMD_RESULT_OK)) + || (HIDO_AT_EVENT_ERROR == _u32Event && (astInitCmdList[l_u32CmdIndex].m_u32Result & AT_CMD_RESULT_ERROR))) + { + l_u32RetryCnt = 0; + l_u32CmdIndex++; + if (l_u32CmdIndex >= HIDO_ARRARY_COUNT(astInitCmdList)) + { + HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EIPReady), HIDO_NULL); + } + else + { + HIDO_ATLiteCmdSend(pstATDevice, astInitCmdList[l_u32CmdIndex].m_u32TimeOut, astInitCmdList[l_u32CmdIndex].m_pcATCmd, acAPN); + } + } + else + { + l_u32RetryCnt++; + if (l_u32RetryCnt >= 3) + { + /* 重试超限 */ + HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780E), HIDO_NULL); + } + else + { + /* 不是期待的结果,10后再次尝试 */ + HIDO_FSMStartTimer(u32FSMTimerID, HIDO_TIMER_TYPE_ONCE, HIDO_TIMER_TICK_S(10), _pstFSM, + AIR780E_EVENT_DELAY); + } + } + + break; + } + case AIR780E_EVENT_DELAY: + { + HIDO_ATLiteCmdSend(pstATDevice, astInitCmdList[l_u32CmdIndex].m_u32TimeOut, astInitCmdList[l_u32CmdIndex].m_pcATCmd, acAPN); + break; + } + case AIR780E_EVENT_POLL: + { + break; + } + case AIR780E_EVENT_NUM_0: + case AIR780E_EVENT_NUM_1: + case AIR780E_EVENT_NUM_2: + case AIR780E_EVENT_NUM_3: + case AIR780E_EVENT_NUM_4: + case AIR780E_EVENT_NUM_5: + case AIR780E_EVENT_NUM_6: + case AIR780E_EVENT_NUM_7: + case AIR780E_EVENT_NUM_8: + case AIR780E_EVENT_NUM_9: + { + if(l_u32CmdIndex == 4) + { + _u32Event = HIDO_AT_EVENT_OK; + goto ok; + } + break; + } + default: + { + return HIDO_EVENT_NO_PROC; + } + } + + return HIDO_EVENT_OK; +} + +/******************************************************************************* + * State Name : AIR780EIPReady + * Parent State : AIR780E + * Description : + * Author : www.hido-studio.com + * Modified Date: : 2018-05-01 + *******************************************************************************/ +HIDO_FSM_STATE_IMPLEMENT(AIR780EIPReady, HIDO_FSM_STATE(AIR780EReady), HIDO_FSM_STATE(AIR780EIPPoll)) +{ + switch (_u32Event) + { + case HIDO_EVENT_ENTRY: + { + break; + } + case HIDO_EVENT_EXIT: + { + Socket_ClosedAll(); +#ifdef __AIR780E_MQTT__ + MQTT_ClosedAll(); +#endif + break; + } + case AIR780E_EVENT_POLL: + { + break; + } + case HIDO_AT_EVENT_TIMEOUT: + { + HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EInit), HIDO_NULL); + break; + } + case AIR780E_EVENT_CLOSE: + { + HIDO_DataStruct *pstData = (HIDO_DataStruct *) _pArg; + HIDO_UINT32 u32ID = 0; + + if (HIDO_UtilParseFormat((HIDO_UINT8 *) pstData->m_pData, pstData->m_u32Len, "+QIURC: \"closed\",%d\r\n", &u32ID) != 1) + { + break; + } + + Socket_OnClosed(u32ID); + + break; + } + case AIR780E_EVENT_PDPDEACT: + { + l_bDeact = HIDO_TRUE; + break; + } +#ifdef __AIR780E_MQTT__ + case AIR780E_EVENT_QMTSTAT: + { + HIDO_DataStruct *pstData = (HIDO_DataStruct *) _pArg; + HIDO_UINT32 u32Err = 0; + HIDO_UINT32 u32ClientID = 0; + + if (HIDO_UtilParseFormat((HIDO_UINT8 *) pstData->m_pData, pstData->m_u32Len, "+QMTSTAT: %d,%d\r\n", + &u32ClientID, &u32Err) != 2) + { + break; + } + + if(u32Err != 0) + { + MQTT_OnClosed(u32ClientID); + + break; + } + + break; + } + case AIR780E_EVENT_QMTPUBEX: + { + AIR780EMQTT_SendAck((HIDO_DataStruct *) _pArg); + + break; + } +#endif + default: + { + return HIDO_EVENT_NO_PROC; + } + } + + return HIDO_EVENT_OK; +} + +/******************************************************************************* + * State Name : AIR780EIPPoll + * Parent State : AIR780EIPReady + * Description : + * Author : www.hido-studio.com + * Modified Date: : 2018-05-01 + *******************************************************************************/ +HIDO_FSM_STATE_IMPLEMENT(AIR780EIPPoll, HIDO_FSM_STATE(AIR780EIPReady), HIDO_NULL) +{ + HIDO_ATLiteDeviceStruct *pstATDevice = (HIDO_ATLiteDeviceStruct *) _pstFSM->m_pPrivateData; + + switch (_u32Event) + { + case HIDO_EVENT_ENTRY: + { + break; + } + case HIDO_EVENT_EXIT: + { + break; + } + case AIR780E_EVENT_POLL: + { + if (HIDO_TRUE == l_bDeact) + { + l_bDeact = HIDO_FALSE; + HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EReady), HIDO_NULL); + break; + } + + if(AIR780E_PollOnIPReady(pstATDevice) == HIDO_OK) + { + break; + } + + break; + } + default: + { + return HIDO_EVENT_NO_PROC; + } + } + + return HIDO_EVENT_OK; +} + +/******************************************************************************* + * State Name : AIR780EIPCheck + * Parent State : AIR780EIPReady + * Description : + * Author : www.hido-studio.com + * Modified Date: : 2018-05-01 + *******************************************************************************/ +HIDO_FSM_STATE_IMPLEMENT(AIR780EIPCheck, HIDO_FSM_STATE(AIR780EIPReady), HIDO_NULL) +{ + static HIDO_UINT32 l_u32CGATT = 0; + HIDO_ATLiteDeviceStruct *pstATDevice = (HIDO_ATLiteDeviceStruct *) _pstFSM->m_pPrivateData; + + switch (_u32Event) + { + case HIDO_EVENT_ENTRY: + { + l_u32CGATT = 0; + HIDO_ATLiteCmdSend(pstATDevice, AT_GENERAL_TIMEOUT_TIME, "AT+CGATT?\r\n"); + break; + } + case HIDO_EVENT_EXIT: + { + HIDO_ATLiteCmdSendOver(pstATDevice); + break; + } + case HIDO_AT_EVENT_OK: + { + if (1 == l_u32CGATT) + { + HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EIPPoll), HIDO_NULL); + } + else + { + HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EReady), HIDO_NULL); + } + + break; + } + case AIR780E_EVENT_CGATT: + { + HIDO_DataStruct *pstData = (HIDO_DataStruct *) _pArg; + + if (HIDO_UtilParseFormat((HIDO_UINT8 *) pstData->m_pData, pstData->m_u32Len, "+CGATT: %d", &l_u32CGATT) == 1) + { + + } + + break; + } + default: + { + return HIDO_EVENT_NO_PROC; + } + } + + return HIDO_EVENT_OK; +} + +/******************************************************************************* + * State Name : AIR780ERunATCmd + * Parent State : AIR780EReady + * Description : + * Author : www.hido-studio.com + * Modified Date: : 2018-05-01 + *******************************************************************************/ +HIDO_FSM_DETACHED_STATE_IMPLEMENT(AIR780ERunATCmd, HIDO_NULL, HIDO_NULL) +{ + HIDO_ATLiteDeviceStruct *pstATDevice = (HIDO_ATLiteDeviceStruct *) _pstFSM->m_pPrivateData; + + switch (_u32Event) + { + case HIDO_EVENT_ENTRY: + { + HIDO_ATLiteCmdSend(pstATDevice, AT_GENERAL_TIMEOUT_TIME, "%s\r\n", Module_GetRunATCmd()); + break; + } + case HIDO_EVENT_EXIT: + { + HIDO_ATLiteCmdSendOver(pstATDevice); + break; + } + case HIDO_AT_EVENT_OK: + case HIDO_AT_EVENT_ERROR: + case HIDO_AT_EVENT_TIMEOUT: + { + Module_RunATCmdResult((HIDO_DataStruct *)_pArg); + HIDO_FSMStateChange(_pstFSM, l_stStateArg.m_pstAfterState, HIDO_NULL); + break; + } + default: + { + return HIDO_EVENT_NO_PROC; + } + } + + return HIDO_EVENT_OK; +} + +/******************************************************************************* + * State Name : AIR780ERunATCmd + * Parent State : AIR780EReady + * Description : + * Author : www.hido-studio.com + * Modified Date: : 2018-05-01 + *******************************************************************************/ +HIDO_FSM_DETACHED_STATE_IMPLEMENT(AIR780ECloseWireless, HIDO_NULL, HIDO_NULL) +{ + HIDO_ATLiteDeviceStruct *pstATDevice = (HIDO_ATLiteDeviceStruct *) _pstFSM->m_pPrivateData; + + switch (_u32Event) + { + case HIDO_EVENT_ENTRY: + { + HIDO_ATLiteCmdSend(pstATDevice, AT_GENERAL_TIMEOUT_TIME, "AT+CFUN=0\r\n"); + break; + } + case HIDO_EVENT_EXIT: + { + HIDO_ATLiteCmdSendOver(pstATDevice); + break; + } + case HIDO_AT_EVENT_OK: + case HIDO_AT_EVENT_ERROR: + { + Module_PowerEvent(MODULE_GSM, MODULE_STATE_POWER_OFF); + HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EIdle), HIDO_NULL); + break; + } + default: + { + return HIDO_EVENT_NO_PROC; + } + } + + return HIDO_EVENT_OK; +} + +/******************************************************************************* + * State Name : OpenWireless + * Parent State : AIR780EReady + * Description : + * Author : www.hido-studio.com + * Modified Date: : 2018-05-01 + *******************************************************************************/ +HIDO_FSM_DETACHED_STATE_IMPLEMENT(AIR780EOpenWireless, HIDO_NULL, HIDO_NULL) +{ + HIDO_ATLiteDeviceStruct *pstATDevice = (HIDO_ATLiteDeviceStruct *) _pstFSM->m_pPrivateData; + + switch (_u32Event) + { + case HIDO_EVENT_ENTRY: + { + HIDO_ATLiteCmdSend(pstATDevice, AT_GENERAL_TIMEOUT_TIME, "AT+CFUN=1\r\n"); + break; + } + case HIDO_EVENT_EXIT: + { + HIDO_ATLiteCmdSendOver(pstATDevice); + break; + } + case HIDO_AT_EVENT_OK: + case HIDO_AT_EVENT_ERROR: + { + Module_PowerEvent(MODULE_GSM, MODULE_STATE_POWER_ON); + HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EReady), HIDO_NULL); + break; + } + default: + { + return HIDO_EVENT_NO_PROC; + } + } + + return HIDO_EVENT_OK; +} + +/******************************************************************************* + * Function Name : AIR780E_PowerPoll + * Description : 电源处理事件的轮询 + * Input : _pstATDevice AT设备描述 + * Output : None + * Return : HIDO_OK 成功, HIDO_ERR 失败 + * Author : www.hido-studio.com + * Modified Date: : 2018年5月22日 + *******************************************************************************/ +static HIDO_INT32 AIR780E_PowerPoll(HIDO_ATLiteDeviceStruct *_pstATDevice) +{ + if(Module_NeedPowerOn(MODULE_MAIN) == HIDO_TRUE) + { + Module_PowerEvent(MODULE_MAIN, MODULE_STATE_POWER_ON); + } + + if(Module_NeedPowerOff(MODULE_MAIN) == HIDO_TRUE) + { + HIDO_FSMStateChange(HIDO_FSM(AIR780E), HIDO_FSM_STATE(AIR780EPowerOff), HIDO_NULL); + return HIDO_OK; + } + + return HIDO_ERR; +} + +/******************************************************************************* + * Function Name : AIR780E_RunATCmdPoll + * Description : 运行用户AT命令处理轮询 + * Input : _pstATDevice AT设备描述 + * Output : None + * Return : HIDO_OK 成功, HIDO_ERR 失败 + * Author : www.hido-studio.com + * Modified Date: : 2018年5月22日 + *******************************************************************************/ +static HIDO_INT32 AIR780E_RunATCmdPoll(HIDO_ATLiteDeviceStruct *_pstATDevice) +{ + if(Module_RunATCmdEnable() == HIDO_TRUE) + { + l_stStateArg.m_pArg = HIDO_NULL; + l_stStateArg.m_pstAfterState = _pstATDevice->m_pstFSM->m_pstCurrentState; + HIDO_FSM_DETACHED_STATE_SETTLE(AIR780ERunATCmd, _pstATDevice->m_pstFSM->m_pstCurrentState->m_pstParent, HIDO_NULL); + HIDO_FSMStateChange(_pstATDevice->m_pstFSM, HIDO_FSM_STATE(AIR780ERunATCmd), HIDO_NULL); + + return HIDO_OK; + } + + return HIDO_ERR; +} + +/******************************************************************************* + * Function Name : AIR780E_CloseWirelessPoll + * Description : 关闭无线数据轮询 + * Input : _pstATDevice AT设备描述 + * Output : None + * Return : HIDO_OK 成功, HIDO_ERR 失败 + * Author : www.hido-studio.com + * Modified Date: : 2018年5月22日 + *******************************************************************************/ +static HIDO_INT32 AIR780E_CloseWirelessPoll(HIDO_ATLiteDeviceStruct *_pstATDevice) +{ + if(Module_NeedPowerOff(MODULE_GSM) == HIDO_TRUE) + { + l_stStateArg.m_pArg = HIDO_NULL; + l_stStateArg.m_pstAfterState = _pstATDevice->m_pstFSM->m_pstCurrentState; + HIDO_FSM_DETACHED_STATE_SETTLE(AIR780ECloseWireless, _pstATDevice->m_pstFSM->m_pstCurrentState->m_pstParent, HIDO_NULL); + HIDO_FSMStateChange(_pstATDevice->m_pstFSM, HIDO_FSM_STATE(AIR780ECloseWireless), HIDO_NULL); + + return HIDO_OK; + } + + return HIDO_ERR; +} + +/******************************************************************************* + * Function Name : AIR780E_OpenWirelessPoll + * Description : 打开无线数据轮询 + * Input : _pstATDevice AT设备描述 + * Output : None + * Return : HIDO_OK 成功, HIDO_ERR 失败 + * Author : www.hido-studio.com + * Modified Date: : 2018年5月22日 + *******************************************************************************/ +static HIDO_INT32 AIR780E_OpenWirelessPoll(HIDO_ATLiteDeviceStruct *_pstATDevice) +{ + if(Module_NeedPowerOn(MODULE_GSM) == HIDO_TRUE) + { + l_stStateArg.m_pArg = HIDO_NULL; + l_stStateArg.m_pstAfterState = _pstATDevice->m_pstFSM->m_pstCurrentState; + HIDO_FSM_DETACHED_STATE_SETTLE(AIR780EOpenWireless, _pstATDevice->m_pstFSM->m_pstCurrentState->m_pstParent, HIDO_NULL); + HIDO_FSMStateChange(_pstATDevice->m_pstFSM, HIDO_FSM_STATE(AIR780EOpenWireless), HIDO_NULL); + + return HIDO_OK; + } + + return HIDO_ERR; +} + +/******************************************************************************* + * Function Name : AIR780E_Poll + * Description : 在非IPReady状态时的轮询处理 + * Input : _pstATDevice AT设备描述 + * Output : None + * Return : HIDO_OK 成功, HIDO_ERR 失败 + * Author : www.hido-studio.com + * Modified Date: : 2018年5月22日 + *******************************************************************************/ +static HIDO_INT32 AIR780E_Poll(HIDO_ATLiteDeviceStruct *_pstATDevice) +{ + /* Power */ + if(AIR780E_PowerPoll(_pstATDevice) == HIDO_OK) + { + return HIDO_OK; + } + +#ifdef __AIR780E_GNSS__ + /* GNSS */ + if(AIR780EGNSS_Poll(_pstATDevice) == HIDO_OK) + { + return HIDO_OK; + } +#endif + +#if 0 + /* Audio */ + if (AIR780EAudio_Poll(_pstATDevice) == HIDO_OK) + { + return HIDO_OK; + } +#endif + + /* CSQ */ + if (AIR780ECSQ_Poll(_pstATDevice) == HIDO_OK) + { + return HIDO_OK; + } + + /* RunATCmd */ + if (AIR780E_RunATCmdPoll(_pstATDevice) == HIDO_OK) + { + return HIDO_OK; + } + + /* GSM */ + if (AIR780E_CloseWirelessPoll(_pstATDevice) == HIDO_OK) + { + return HIDO_OK; + } + + if (AIR780E_OpenWirelessPoll(_pstATDevice) == HIDO_OK) + { + return HIDO_OK; + } + +#ifdef __AIR780E_FILE__ + if (AIR780EFile_Poll(_pstATDevice) == HIDO_OK) + { + return HIDO_OK; + } +#endif + + return HIDO_ERR; +} + +/******************************************************************************* + * Function Name : AIR780E_PollOnIPReady + * Description : 在IPReady状态时的轮询处理 + * Input : _pstATDevice AT设备描述 + * Output : None + * Return : HIDO_OK 成功, HIDO_ERR 失败 + * Author : www.hido-studio.com + * Modified Date: : 2018年5月22日 + *******************************************************************************/ +static HIDO_INT32 AIR780E_PollOnIPReady(HIDO_ATLiteDeviceStruct *_pstATDevice) +{ + HIDO_UINT32 u32CurTick = HIDO_TimerGetTick(); + + /* Power */ + if (AIR780E_PowerPoll(_pstATDevice) == HIDO_OK) + { + return HIDO_OK; + } + +#ifdef __AIR780E_GNSS__ + /* GNSS */ + if(AIR780EGNSS_Poll(_pstATDevice) == HIDO_OK) + { + return HIDO_OK; + } +#endif + +#if 0 + /* Audio */ + if (AIR780EAudio_Poll(_pstATDevice) == HIDO_OK) + { + return HIDO_OK; + } +#endif + + /* Socket */ + if (AIR780ESocket_Poll(_pstATDevice) == HIDO_OK) + { + return HIDO_OK; + } + +#ifdef __AIR780E_MQTT__ + /* MQTT */ + if (AIR780EMQTT_Poll(_pstATDevice) == HIDO_OK) + { + return HIDO_OK; + } +#endif + +#ifdef __AIR780E_HTTP__ + /* HTTP */ + if (AIR780EHTTP_Poll(_pstATDevice) == HIDO_OK) + { + return HIDO_OK; + } +#endif + /* CSQ */ + if (AIR780ECSQ_Poll(_pstATDevice) == HIDO_OK) + { + return HIDO_OK; + } + +#if 0 + if ((u32CurTick - l_u32IPCheckTick) > HIDO_TIMER_TICK_S(10)) + { + l_u32IPCheckTick = u32CurTick; + HIDO_FSMStateChange(HIDO_FSM(AIR780E), HIDO_FSM_STATE(AIR780EIPCheck), HIDO_NULL); + return HIDO_OK; + } +#endif + + /* RunATCmd */ + if (AIR780E_RunATCmdPoll(_pstATDevice) == HIDO_OK) + { + return HIDO_OK; + } + + /* GSM */ + if (AIR780E_CloseWirelessPoll(_pstATDevice) == HIDO_OK) + { + return HIDO_OK; + } + + if (AIR780E_OpenWirelessPoll(_pstATDevice) == HIDO_OK) + { + return HIDO_OK; + } + +#ifdef __AIR780E_FILE__ + if (AIR780EFile_Poll(_pstATDevice) == HIDO_OK) + { + return HIDO_OK; + } +#endif + + return HIDO_ERR; +} + +/******************************************************************************* + * Function Name : AIR780E_IsIPReady + * Description : 判断状态机是否处在AIR780EIPReady状态 + * Input : None + * Output : None + * Return : HIDO_TRUE 是, HIDO_FALSE 否 + * Author : www.hido-studio.com + * Modified Date: : 2018年5月22日 + *******************************************************************************/ +HIDO_BOOL AIR780E_IsIPReady(void) +{ + const HIDO_StateStruct *pstTmpState = HIDO_FSM(AIR780E)->m_pstCurrentState; + + while(pstTmpState != HIDO_NULL) + { + if(pstTmpState == HIDO_FSM_STATE(AIR780EIPReady)) + { + return HIDO_TRUE; + } + + pstTmpState = pstTmpState->m_pstParent; + } + + return HIDO_FALSE; +} + +/******************************************************************************* + * Function Name : AIR780E_IsIPIdle + * Description : 判断状态机是否处在AIR780EIPPoll状态 + * Input : None + * Output : None + * Return : HIDO_TRUE 是, HIDO_FALSE 否 + * Author : www.hido-studio.com + * Modified Date: : 2018年5月22日 + *******************************************************************************/ +HIDO_BOOL AIR780E_IsIPIdle(void) +{ + const HIDO_StateStruct *pstTmpState = HIDO_FSM(AIR780E)->m_pstCurrentState; + + if(pstTmpState == HIDO_FSM_STATE(AIR780EIPPoll)) + { + return HIDO_TRUE; + } + + return HIDO_FALSE; +} -- Gitblit v1.9.3