| | |
| | | Socket_OnRecv(u32ID); |
| | | break; |
| | | } |
| | | #ifdef TTS |
| | | case AIR780E_EVENT_QTTS: |
| | | { |
| | | HIDO_DataStruct *pstData = (HIDO_DataStruct *) _pArg; |
| | | |
| | | if (strcmp((HIDO_CHAR *) pstData->m_pData, "+CTTS:0\r\n") != 0) |
| | | { |
| | | break; |
| | | } |
| | | |
| | | AIR780EAudio_TTSOver(); |
| | | |
| | | break; |
| | | } |
| | | case AIR780E_EVENT_QLTONE: |
| | | { |
| | | HIDO_DataStruct *pstData = (HIDO_DataStruct *) _pArg; |
| | | |
| | | if (strcmp((HIDO_CHAR *) pstData->m_pData, "+QLTONE: 0\r\n") != 0) |
| | | { |
| | | break; |
| | | } |
| | | |
| | | AIR780EAudio_TONEOver(); |
| | | |
| | | break; |
| | | } |
| | | #endif |
| | | #ifdef __AIR780E_MQTT__ |
| | | case AIR780E_EVENT_QMTRECV: |
| | | { |
| | | HIDO_UINT32 u32ClientID = 0; |
| | | HIDO_UINT32 u32MsgID = 0; |
| | | HIDO_DataStruct *pstData = (HIDO_DataStruct *) _pArg; |
| | | |
| | | if (HIDO_UtilParseFormat((HIDO_UINT8 *) pstData->m_pData, pstData->m_u32Len, "+QMTRECV: %d,%d\r\n", |
| | | &u32ClientID, &u32MsgID) != 2) |
| | | { |
| | | break; |
| | | } |
| | | |
| | | MQTT_HaveRecvData(u32ClientID); |
| | | |
| | | break; |
| | | } |
| | | #endif |
| | | default: |
| | | { |
| | | return HIDO_EVENT_NO_PROC; |
| | |
| | | { |
| | | AIR780E_SUB_STATE_POWER_OFF, |
| | | AIR780E_SUB_STATE_POWER_ON, |
| | | AIR780E_SUB_STATE_PWRKEY_RESET, |
| | | AIR780E_SUB_STATE_PWRKEY_SET, |
| | | } l_eAIR780ESubState; |
| | | |
| | | HIDO_ATLiteDeviceStruct *pstATDevice = (HIDO_ATLiteDeviceStruct *) _pstFSM->m_pPrivateData; |
| | |
| | | |
| | | l_eAIR780ESubState = AIR780E_SUB_STATE_POWER_OFF; |
| | | AIR780EDriver_PowerOff(); |
| | | HIDO_FSMStartTimer(u32FSMTimerID, HIDO_TIMER_TYPE_ONCE, HIDO_TIMER_TICK_S(3), _pstFSM, AIR780E_EVENT_DELAY); |
| | | HIDO_FSMStartTimer(u32FSMTimerID, HIDO_TIMER_TYPE_ONCE, HIDO_TIMER_TICK_S(1), _pstFSM, AIR780E_EVENT_DELAY); |
| | | break; |
| | | } |
| | | case HIDO_EVENT_EXIT: |
| | |
| | | { |
| | | l_eAIR780ESubState = AIR780E_SUB_STATE_POWER_ON; |
| | | AIR780EDriver_PowerOn(); |
| | | HIDO_FSMStartTimer(u32FSMTimerID, HIDO_TIMER_TYPE_ONCE, HIDO_TIMER_TICK_S(1), _pstFSM, AIR780E_EVENT_DELAY); |
| | | HIDO_FSMStartTimer(u32FSMTimerID, HIDO_TIMER_TYPE_ONCE, HIDO_TIMER_TICK_S(10), _pstFSM, AIR780E_EVENT_DELAY); |
| | | break; |
| | | } |
| | | case AIR780E_SUB_STATE_POWER_ON: |
| | | { |
| | | l_eAIR780ESubState = AIR780E_SUB_STATE_PWRKEY_RESET; |
| | | AIR780EDriver_PWRKEYReset(); |
| | | //Uart_ReConfigBaudRate(UART_ID_4G, 921600); |
| | | HIDO_FSMStartTimer(u32FSMTimerID, HIDO_TIMER_TYPE_ONCE, HIDO_TIMER_TICK_S(1), _pstFSM, AIR780E_EVENT_DELAY); |
| | | break; |
| | | } |
| | | case AIR780E_SUB_STATE_PWRKEY_RESET: |
| | | { |
| | | l_eAIR780ESubState = AIR780E_SUB_STATE_PWRKEY_SET; |
| | | AIR780EDriver_PWRKEYSet(); |
| | | HIDO_FSMStartTimer(u32FSMTimerID, HIDO_TIMER_TYPE_ONCE, HIDO_TIMER_TICK_MS(800), _pstFSM, AIR780E_EVENT_DELAY); |
| | | break; |
| | | } |
| | | case AIR780E_SUB_STATE_PWRKEY_SET: |
| | | { |
| | | HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EATCmdTest), HIDO_NULL); |
| | | break; |
| | |
| | | break; |
| | | } |
| | | case AIR780E_EVENT_RDY: |
| | | { |
| | | #if 0 |
| | | HIDO_UINT32 Power_r = 0,Open_PJ,dev_id; |
| | | HIDO_CHAR TTS_Open[60]; |
| | | |
| | | if(Power_GetBatteryPercentage() < 5.0) //低电量自动关机 |
| | | { |
| | | GPIOD->BSRR = 0x0004; //打开TTS电源 |
| | | HAL_Delay(800); //必要延时,延时是为了避免说不出来第一个字 |
| | | |
| | | HIDO_ATLiteCmdSend(pstATDevice, AT_GENERAL_TIMEOUT_TIME, "AT+CTTS=2,\"%s\"\r\n", "电量过低"); |
| | | HAL_Delay(2000); |
| | | |
| | | // 调用关机接口 |
| | | while(1) |
| | | { |
| | | GPIOA->BSRR = 0X0100 << 16; |
| | | } |
| | | } |
| | | #endif |
| | | #if 0 |
| | | // HIDO_ATLiteCmdSend(pstATDevice, AT_GENERAL_TIMEOUT_TIME, "AT+QTTS=2,\"开机\"\r\n"); |
| | | Power_r = Power_GetBatteryPercentage(); |
| | | |
| | | dev_id = ((g_com_map[DEV_ID]>>12)&0xf)*1000+((g_com_map[DEV_ID]>>8)&0xf)*100+((g_com_map[DEV_ID]>>4)&0xf)*10+(g_com_map[DEV_ID]&0xf); |
| | | Open_PJ = sprintf(TTS_Open, "设备编号%d剩余电量百分之%d",dev_id, Power_r); |
| | | TTS_Play((HIDO_UINT8 *)TTS_Open, strlen(TTS_Open)); |
| | | #endif |
| | | break; |
| | | } |
| | | default: |
| | | { |
| | | return HIDO_EVENT_NO_PROC; |
| | | } |
| | | } |
| | | |
| | | return HIDO_EVENT_OK; |
| | | } |
| | | |
| | | /******************************************************************************* |
| | | * State Name : AIR780EWaitReady |
| | | * Parent State : AIR780EInit |
| | | * Description : |
| | | * Author : www.hido-studio.com |
| | | * Modified Date: : 2018-05-01 |
| | | *******************************************************************************/ |
| | | extern int Last4G; |
| | | |
| | | HIDO_FSM_STATE_IMPLEMENT(AIR780EWaitReady, HIDO_FSM_STATE(AIR780EInit), HIDO_NULL) |
| | | { |
| | | static HIDO_BOOL bReady = HIDO_FALSE; |
| | | static HIDO_UINT32 u32RetryCnt = 0,Power_r = 0,Open_PJ,dev_id; |
| | | HIDO_ATLiteDeviceStruct *pstATDevice = (HIDO_ATLiteDeviceStruct *) _pstFSM->m_pPrivateData; |
| | | HIDO_UINT32 u32FSMTimerID = ((ST_AIR780EDriverData *)pstATDevice->m_pUserData)->m_u32FSMTimerID; |
| | | |
| | | HIDO_CHAR TTS_Open[60]; |
| | | |
| | | |
| | | switch (_u32Event) |
| | | { |
| | | case HIDO_EVENT_ENTRY: |
| | | { |
| | | HIDO_FSMStartTimer(u32FSMTimerID, HIDO_TIMER_TYPE_ONCE, HIDO_TIMER_TICK_S(10), |
| | | _pstFSM, AIR780E_EVENT_DELAY); |
| | | break; |
| | | } |
| | | case HIDO_EVENT_EXIT: |
| | | { |
| | | HIDO_ATLiteCmdSendOver(pstATDevice); |
| | | HIDO_TimerCancel(u32FSMTimerID); |
| | | break; |
| | | } |
| | | case AIR780E_EVENT_RDY: |
| | | { |
| | | #if 0 |
| | | if(Power_GetBatteryPercentage() < 5.0) //低电量自动关机 |
| | | { |
| | | GPIOD->BSRR = 0x0004; //打开TTS电源 |
| | | HAL_Delay(800); //必要延时,延时是为了避免说不出来第一个字 |
| | | |
| | | HIDO_ATLiteCmdSend(pstATDevice, AT_GENERAL_TIMEOUT_TIME, "AT+CTTS=2,\"%s\"\r\n", "电量过低"); |
| | | HAL_Delay(2000); |
| | | |
| | | // 调用关机接口 |
| | | while(1) |
| | | { |
| | | GPIOA->BSRR = 0X0100 << 16; |
| | | } |
| | | } |
| | | |
| | | // HIDO_ATLiteCmdSend(pstATDevice, AT_GENERAL_TIMEOUT_TIME, "AT+QTTS=2,\"开机\"\r\n"); |
| | | Power_r = Power_GetBatteryPercentage(); |
| | | |
| | | dev_id = ((g_com_map[DEV_ID]>>12)&0xf)*1000+((g_com_map[DEV_ID]>>8)&0xf)*100+((g_com_map[DEV_ID]>>4)&0xf)*10+(g_com_map[DEV_ID]&0xf); |
| | | Open_PJ = sprintf(TTS_Open, "设备编号%d剩余电量百分之%d",dev_id, Power_r); |
| | | TTS_Play((HIDO_UINT8 *)TTS_Open, strlen(TTS_Open)); |
| | | #endif |
| | | break; |
| | | } |
| | | case HIDO_AT_EVENT_OK: |
| | | case AIR780E_EVENT_DELAY: |
| | | case HIDO_AT_EVENT_TIMEOUT: |
| | | { |
| | | HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EATCmdTest), HIDO_NULL); |
| | | break; |
| | |
| | | *******************************************************************************/ |
| | | HIDO_FSM_STATE_IMPLEMENT(AIR780EATCmdTest, HIDO_FSM_STATE(AIR780EInit), HIDO_NULL) |
| | | { |
| | | #define USE_115200 |
| | | //#define USE_921600 |
| | | static HIDO_UINT32 l_u32ReadyCnt = 0; |
| | | static HIDO_UINT32 l_u32TimeoutCnt = 0; |
| | | static HIDO_UINT32 l_u32BaudRate = 0; |
| | | static HIDO_BOOL l_bConfigBaudRate = HIDO_FALSE; |
| | | HIDO_ATLiteDeviceStruct *pstATDevice = (HIDO_ATLiteDeviceStruct *) _pstFSM->m_pPrivateData; |
| | | HIDO_UINT32 u32FSMTimerID = ((ST_AIR780EDriverData *)pstATDevice->m_pUserData)->m_u32FSMTimerID; |
| | | |
| | |
| | | { |
| | | case HIDO_EVENT_ENTRY: |
| | | { |
| | | #ifdef USE_115200 |
| | | l_u32BaudRate = 115200; |
| | | #else |
| | | l_u32BaudRate = 921600; |
| | | #endif |
| | | |
| | | Uart_ReConfigBaudRate(UART_ID_4G, l_u32BaudRate); |
| | | |
| | | l_bConfigBaudRate = HIDO_FALSE; |
| | | l_u32ReadyCnt = 0; |
| | | l_u32TimeoutCnt = 0; |
| | | HIDO_FSMStartTimer(u32FSMTimerID, HIDO_TIMER_TYPE_ONCE, HIDO_TIMER_TICK_S(1), _pstFSM, AIR780E_EVENT_DELAY); |
| | |
| | | } |
| | | case HIDO_AT_EVENT_OK: |
| | | { |
| | | if (HIDO_TRUE == l_bConfigBaudRate) |
| | | { |
| | | #ifdef USE_115200 |
| | | l_u32BaudRate = 115200; |
| | | #else |
| | | l_u32BaudRate = 921600; |
| | | #endif |
| | | Uart_ReConfigBaudRate(UART_ID_4G, l_u32BaudRate); |
| | | |
| | | HIDO_FSMStartTimer(u32FSMTimerID, HIDO_TIMER_TYPE_ONCE, HIDO_TIMER_TICK_S(1), _pstFSM, AIR780E_EVENT_DELAY); |
| | | break; |
| | | } |
| | | |
| | | l_u32TimeoutCnt = 0; |
| | | l_u32ReadyCnt++; |
| | | if (l_u32ReadyCnt >= 1) |
| | | { |
| | | #ifdef USE_115200 |
| | | if (921600 == l_u32BaudRate) |
| | | #else |
| | | if (115200 == l_u32BaudRate) |
| | | #endif |
| | | { |
| | | l_bConfigBaudRate = HIDO_TRUE; |
| | | #ifdef USE_115200 |
| | | HIDO_ATLiteCmdSend(pstATDevice, AT_GENERAL_TIMEOUT_TIME, "AT+IPR=115200;&W\r\n"); |
| | | #else |
| | | HIDO_ATLiteCmdSend(pstATDevice, AT_GENERAL_TIMEOUT_TIME, "AT+IPR=921600;&W\r\n"); |
| | | #endif |
| | | |
| | | } |
| | | else |
| | | { |
| | | /* 上电成功 */ |
| | | Module_PowerEvent(MODULE_MAIN, MODULE_STATE_POWER_ON); |
| | | HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EWaitSimCardReady), HIDO_NULL); |
| | | } |
| | | /* 上电成功 */ |
| | | Module_PowerEvent(MODULE_MAIN, MODULE_STATE_POWER_ON); |
| | | HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EWaitSimCardReady), HIDO_NULL); |
| | | } |
| | | else |
| | | { |
| | |
| | | |
| | | if (5 == l_u32TimeoutCnt) |
| | | { |
| | | #ifdef USE_115200 |
| | | l_u32BaudRate = 921600; |
| | | #else |
| | | l_u32BaudRate = 115200; |
| | | #endif |
| | | Uart_ReConfigBaudRate(UART_ID_4G, l_u32BaudRate); |
| | | |
| | | HIDO_FSMStartTimer(u32FSMTimerID, HIDO_TIMER_TYPE_ONCE, HIDO_TIMER_TICK_S(1), _pstFSM, |
| | | AIR780E_EVENT_DELAY); |
| | | } |
| | | else if (l_u32TimeoutCnt > 10) |
| | | { |
| | | HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EPowerOn), HIDO_NULL); |
| | | } |
| | | else |
| | |
| | | } |
| | | case AIR780E_EVENT_DELAY: |
| | | { |
| | | if (HIDO_TRUE == l_bConfigBaudRate) |
| | | { |
| | | /* 上电成功 */ |
| | | Module_PowerEvent(MODULE_MAIN, MODULE_STATE_POWER_ON); |
| | | HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(AIR780EWaitSimCardReady), HIDO_NULL); |
| | | break; |
| | | } |
| | | else |
| | | { |
| | | HIDO_ATLiteCmdSend(pstATDevice, AT_GENERAL_TIMEOUT_TIME, "ATE0\r\n"); |
| | | } |
| | | HIDO_ATLiteCmdSend(pstATDevice, AT_GENERAL_TIMEOUT_TIME, "ATE0\r\n"); |
| | | break; |
| | | } |
| | | case AIR780E_EVENT_POLL: |