yincheng.zhong
7 天以前 b53fff11e6f0d560594834de32886239cbba90a3
STM32H743/FML/Internet/Module/EG800/EG800FSM.c
@@ -1,7 +1,7 @@
/*******************************************************************************
 * File Name         : EG800FSM.c
 * Description       :
 * Created on        : 2018年5月22日
 * Created on        : 2018??5??22??
 * Author            : www.hido-studio.com
 *******************************************************************************/
@@ -25,6 +25,7 @@
#include "ATConfig.h"
#include "Uart.h"
#include "Module.h"
#include "MQTT.h"
/*******************************************************************************
 *                                  Macro                                      *
@@ -69,9 +70,8 @@
/*******************************************************************************
 * State Name        : EG800
 * Parent State      : None
 * Description       : EG800主状态
 * Description       : EG800????
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018-05-01
 *******************************************************************************/
HIDO_FSM_STATE_IMPLEMENT(EG800, HIDO_NULL, HIDO_FSM_STATE(EG800PowerOn))
{
@@ -103,6 +103,22 @@
        Socket_HaveRecvData(u32ID);
        break;
    }
    case EG800_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;
    }
    default:
    {
        return HIDO_EVENT_NO_PROC;
@@ -115,9 +131,8 @@
/*******************************************************************************
 * State Name        : EG800Init
 * Parent State      : EG800
 * Description       : 初始化主状态
 * Description       : ?????????
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018-05-01
 *******************************************************************************/
HIDO_FSM_STATE_IMPLEMENT(EG800Init, HIDO_FSM_STATE(EG800), HIDO_FSM_STATE(EG800PowerOn))
{
@@ -133,7 +148,7 @@
    }
    case HIDO_AT_EVENT_TIMEOUT:
    {
        /* AT命令相应超时,重新初始化 */
        /* AT??????????,???3???? */
        HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(EG800Init), HIDO_NULL);
        break;
@@ -152,7 +167,6 @@
 * Parent State      : EG800Init
 * Description       :
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018-05-01
 *******************************************************************************/
HIDO_FSM_STATE_IMPLEMENT(EG800PowerOff, HIDO_FSM_STATE(EG800), HIDO_NULL)
{
@@ -196,7 +210,6 @@
 * Parent State      : EG800Init
 * Description       :
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018-05-01
 *******************************************************************************/
HIDO_FSM_STATE_IMPLEMENT(EG800PowerOn, HIDO_FSM_STATE(EG800Init), HIDO_NULL)
{
@@ -228,7 +241,7 @@
    }
    case HIDO_EVENT_EXIT:
    {
        /* 退出初始化 */
        /* ???????? */
        HIDO_TimerCancel(u32FSMTimerID);
        break;
@@ -282,7 +295,6 @@
 * Parent State      : EG800Init
 * Description       :
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018-05-01
 *******************************************************************************/
extern int Last4G;
@@ -332,9 +344,8 @@
/*******************************************************************************
 * State Name        : EG800ATCmdTest
 * Parent State      : EG800Init
 * Description       : AT命令测试状态
 * Description       : AT?????????
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018-05-01
 *******************************************************************************/
HIDO_FSM_STATE_IMPLEMENT(EG800ATCmdTest, HIDO_FSM_STATE(EG800Init), HIDO_NULL)
{
@@ -405,7 +416,7 @@
            }
            else
            {
                /* 上电成功 */
                /* ????? */
                Module_PowerEvent(MODULE_MAIN, MODULE_STATE_POWER_ON);
                HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(EG800WaitSimCardReady), HIDO_NULL);
            }
@@ -455,7 +466,7 @@
    {
        if (HIDO_TRUE == l_bConfigBaudRate)
        {
            /* 上电成功 */
            /* ????? */
            Module_PowerEvent(MODULE_MAIN, MODULE_STATE_POWER_ON);
            HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(EG800WaitSimCardReady), HIDO_NULL);
            break;
@@ -489,9 +500,8 @@
/*******************************************************************************
 * State Name        : EG800WaitSimCardReady
 * Parent State      : EG800Init
 * Description       : 等待SIM卡准备完成
 * Description       : ???SIM????????
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018-05-01
 *******************************************************************************/
HIDO_FSM_STATE_IMPLEMENT(EG800WaitSimCardReady, HIDO_FSM_STATE(EG800Init), HIDO_NULL)
{
@@ -591,7 +601,6 @@
 * Parent State      : EG800Init
 * Description       :
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018-05-01
 *******************************************************************************/
HIDO_FSM_STATE_IMPLEMENT(EG800ATCmdInit, HIDO_FSM_STATE(EG800Init), HIDO_NULL)
{
@@ -603,8 +612,8 @@
            {"AT+GSN\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},
//            {"AT+QTTSETUP=1,1," TTS_SPEED "\r\n", AT_GENERAL_TIMEOUT_TIME, AT_CMD_RESULT_OK},
//            {"AT+QTTSETUP=1,2," TTS_VOLUME "\r\n", AT_GENERAL_TIMEOUT_TIME, AT_CMD_RESULT_OK},
            //            {"AT+QTTSETUP=1,1," TTS_SPEED "\r\n", AT_GENERAL_TIMEOUT_TIME, AT_CMD_RESULT_OK},
            //            {"AT+QTTSETUP=1,2," TTS_VOLUME "\r\n", AT_GENERAL_TIMEOUT_TIME, AT_CMD_RESULT_OK},
        };
    HIDO_ATLiteDeviceStruct *pstATDevice = (HIDO_ATLiteDeviceStruct *)_pstFSM->m_pPrivateData;
@@ -672,12 +681,12 @@
            l_u32RetryCnt++;
            if (l_u32RetryCnt >= 3)
            {
                /* 重试超限 */
                /* ??????? */
                HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(EG800PowerOn), HIDO_NULL);
            }
            else
            {
                /* 不是期待的结果,10后再次尝试 */
                /* ?????????????10????γ??? */
                HIDO_FSMStartTimer(u32FSMTimerID, HIDO_TIMER_TYPE_ONCE, HIDO_TIMER_TICK_S(10), _pstFSM,
                                   EG800_EVENT_DELAY);
            }
@@ -762,7 +771,6 @@
 * Parent State      : EG800
 * Description       :
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018-05-01
 *******************************************************************************/
HIDO_FSM_STATE_IMPLEMENT(EG800Idle, HIDO_FSM_STATE(EG800), HIDO_NULL)
{
@@ -798,7 +806,6 @@
 * Parent State      : EG800
 * Description       :
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018-05-01
 *******************************************************************************/
HIDO_FSM_STATE_IMPLEMENT(EG800Ready, HIDO_FSM_STATE(EG800), HIDO_FSM_STATE(EG800SearchingNetwork))
{
@@ -824,9 +831,8 @@
/*******************************************************************************
 * State Name        : EG800SearchingNetwork
 * Parent State      : EG800
 * Description       : 查找网络
 * Description       : ????????
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018-05-01
 *******************************************************************************/
HIDO_FSM_STATE_IMPLEMENT(EG800SearchingNetwork, HIDO_FSM_STATE(EG800Ready), HIDO_NULL)
{
@@ -916,7 +922,7 @@
            if (l_u32Cnt > 100)
            {
                /* TODO网络出错 */
                /* TODO??????? */
            }
        }
@@ -991,7 +997,6 @@
 * Parent State      : EG800
 * Description       :
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018-05-01
 *******************************************************************************/
HIDO_FSM_STATE_IMPLEMENT(EG800IPInit, HIDO_FSM_STATE(EG800Ready), HIDO_NULL)
{
@@ -1005,29 +1010,10 @@
    const ST_ATCmd astInitCmdList[] =
        {
            {"AT+QICSGP=1,1,\"%s\",\"\",\"\",1\r\n", 60000, AT_CMD_RESULT_OK | AT_CMD_RESULT_ERROR},
            {"AT+QIACT=1\r\n", 60000, AT_CMD_RESULT_OK | AT_CMD_RESULT_ERROR},
            {"AT+QIACT?\r\n", AT_GENERAL_TIMEOUT_TIME, 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:
@@ -1090,12 +1076,12 @@
            l_u32RetryCnt++;
            if (l_u32RetryCnt >= 3)
            {
                /* 重试超限 */
                /* ??????? */
                HIDO_FSMStateChange(_pstFSM, HIDO_FSM_STATE(EG800), HIDO_NULL);
            }
            else
            {
                /* 不是期待的结果,10后再次尝试 */
                /* ?????????????10????γ??? */
                HIDO_FSMStartTimer(u32FSMTimerID, HIDO_TIMER_TYPE_ONCE, HIDO_TIMER_TICK_S(10), _pstFSM,
                                   EG800_EVENT_DELAY);
            }
@@ -1126,7 +1112,6 @@
 * Parent State      : EG800
 * Description       :
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018-05-01
 *******************************************************************************/
HIDO_FSM_STATE_IMPLEMENT(EG800IPReady, HIDO_FSM_STATE(EG800Ready), HIDO_FSM_STATE(EG800IPPoll))
{
@@ -1139,9 +1124,8 @@
    case HIDO_EVENT_EXIT:
    {
        Socket_ClosedAll();
#ifdef __EG800_MQTT__
        MQTT_ClosedAll();
#endif
        break;
    }
    case EG800_EVENT_POLL:
@@ -1172,7 +1156,7 @@
        l_bDeact = HIDO_TRUE;
        break;
    }
#ifdef __EG800_MQTT__
    case EG800_EVENT_QMTSTAT:
    {
        HIDO_DataStruct *pstData = (HIDO_DataStruct *)_pArg;
@@ -1200,7 +1184,6 @@
        break;
    }
#endif
    default:
    {
        return HIDO_EVENT_NO_PROC;
@@ -1215,7 +1198,6 @@
 * Parent State      : EG800IPReady
 * Description       :
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018-05-01
 *******************************************************************************/
HIDO_FSM_STATE_IMPLEMENT(EG800IPPoll, HIDO_FSM_STATE(EG800IPReady), HIDO_NULL)
{
@@ -1263,7 +1245,6 @@
 * Parent State      : EG800IPReady
 * Description       :
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018-05-01
 *******************************************************************************/
HIDO_FSM_STATE_IMPLEMENT(EG800IPCheck, HIDO_FSM_STATE(EG800IPReady), HIDO_NULL)
{
@@ -1320,7 +1301,6 @@
 * Parent State      : EG800Ready
 * Description       :
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018-05-01
 *******************************************************************************/
HIDO_FSM_DETACHED_STATE_IMPLEMENT(EG800RunATCmd, HIDO_NULL, HIDO_NULL)
{
@@ -1360,7 +1340,6 @@
 * Parent State      : EG800Ready
 * Description       :
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018-05-01
 *******************************************************************************/
HIDO_FSM_DETACHED_STATE_IMPLEMENT(EG800CloseWireless, HIDO_NULL, HIDO_NULL)
{
@@ -1399,7 +1378,6 @@
 * Parent State      : EG800Ready
 * Description       :
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018-05-01
 *******************************************************************************/
HIDO_FSM_DETACHED_STATE_IMPLEMENT(EG800OpenWireless, HIDO_NULL, HIDO_NULL)
{
@@ -1435,12 +1413,11 @@
/*******************************************************************************
 * Function Name     : EG800_PowerPoll
 * Description       : 电源处理事件的轮询
 * Input             : _pstATDevice AT设备描述
 * Description       : ???????????????
 * Input             : _pstATDevice AT?豸????
 * Output            : None
 * Return            : HIDO_OK 成功, HIDO_ERR 失败
 * Return            : HIDO_OK ???, HIDO_ERR ???
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018年5月22日
 *******************************************************************************/
static HIDO_INT32 EG800_PowerPoll(HIDO_ATLiteDeviceStruct *_pstATDevice)
{
@@ -1460,12 +1437,11 @@
/*******************************************************************************
 * Function Name     : EG800_RunATCmdPoll
 * Description       : 运行用户AT命令处理轮询
 * Input             : _pstATDevice AT设备描述
 * Description       : ???????AT?????????
 * Input             : _pstATDevice AT?豸????
 * Output            : None
 * Return            : HIDO_OK 成功, HIDO_ERR 失败
 * Return            : HIDO_OK ???, HIDO_ERR ???
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018年5月22日
 *******************************************************************************/
static HIDO_INT32 EG800_RunATCmdPoll(HIDO_ATLiteDeviceStruct *_pstATDevice)
{
@@ -1484,12 +1460,11 @@
/*******************************************************************************
 * Function Name     : EG800_CloseWirelessPoll
 * Description       : 关闭无线数据轮询
 * Input             : _pstATDevice AT设备描述
 * Description       : ??????????????
 * Input             : _pstATDevice AT?豸????
 * Output            : None
 * Return            : HIDO_OK 成功, HIDO_ERR 失败
 * Return            : HIDO_OK ???, HIDO_ERR ???
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018年5月22日
 *******************************************************************************/
static HIDO_INT32 EG800_CloseWirelessPoll(HIDO_ATLiteDeviceStruct *_pstATDevice)
{
@@ -1508,12 +1483,11 @@
/*******************************************************************************
 * Function Name     : EG800_OpenWirelessPoll
 * Description       : 打开无线数据轮询
 * Input             : _pstATDevice AT设备描述
 * Description       : ?????????????
 * Input             : _pstATDevice AT?豸????
 * Output            : None
 * Return            : HIDO_OK 成功, HIDO_ERR 失败
 * Return            : HIDO_OK ???, HIDO_ERR ???
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018年5月22日
 *******************************************************************************/
static HIDO_INT32 EG800_OpenWirelessPoll(HIDO_ATLiteDeviceStruct *_pstATDevice)
{
@@ -1532,12 +1506,11 @@
/*******************************************************************************
 * Function Name     : EG800_Poll
 * Description       : 在非IPReady状态时的轮询处理
 * Input             : _pstATDevice AT设备描述
 * Description       : ???IPReady????????????
 * Input             : _pstATDevice AT?豸????
 * Output            : None
 * Return            : HIDO_OK 成功, HIDO_ERR 失败
 * Return            : HIDO_OK ???, HIDO_ERR ???
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018年5月22日
 *******************************************************************************/
static HIDO_INT32 EG800_Poll(HIDO_ATLiteDeviceStruct *_pstATDevice)
{
@@ -1590,12 +1563,11 @@
/*******************************************************************************
 * Function Name     : EG800_PollOnIPReady
 * Description       : 在IPReady状态时的轮询处理
 * Input             : _pstATDevice AT设备描述
 * Description       : ??IPReady????????????
 * Input             : _pstATDevice AT?豸????
 * Output            : None
 * Return            : HIDO_OK 成功, HIDO_ERR 失败
 * Return            : HIDO_OK ???, HIDO_ERR ???
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018年5月22日
 *******************************************************************************/
static HIDO_INT32 EG800_PollOnIPReady(HIDO_ATLiteDeviceStruct *_pstATDevice)
{
@@ -1621,13 +1593,11 @@
        return HIDO_OK;
    }
#ifdef __EG800_MQTT__
    /* MQTT */
    if (EG800MQTT_Poll(_pstATDevice) == HIDO_OK)
    {
        return HIDO_OK;
    }
#endif
#ifdef __EG800_HTTP__
    /* HTTP */
@@ -1678,12 +1648,11 @@
/*******************************************************************************
 * Function Name     : EG800_IsIPReady
 * Description       : 判断状态机是否处在EG800IPReady状态
 * Description       : ?ж??????????EG800IPReady??
 * Input             : None
 * Output            : None
 * Return            : HIDO_TRUE 是, HIDO_FALSE 否
 * Return            : HIDO_TRUE ??, HIDO_FALSE ??
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018年5月22日
 *******************************************************************************/
HIDO_BOOL EG800_IsIPReady(void)
{
@@ -1704,12 +1673,11 @@
/*******************************************************************************
 * Function Name     : EG800_IsIPIdle
 * Description       : 判断状态机是否处在EG800IPPoll状态
 * Description       : ?ж??????????EG800IPPoll??
 * Input             : None
 * Output            : None
 * Return            : HIDO_TRUE 是, HIDO_FALSE 否
 * Return            : HIDO_TRUE ??, HIDO_FALSE ??
 * Author            : www.hido-studio.com
 * Modified Date:    : 2018年5月22日
 *******************************************************************************/
HIDO_BOOL EG800_IsIPIdle(void)
{