#include "CONFIG.h" #if ESP32 #include "stm32f10x.h" #include #include #include #include #include "Regist.h" #include "UDP_Client.h" #include "Initialize.h" #include "esp32.h" #include "PumpBusiness.h" #include "Log_Module.h" // 函数声明 static void INITIALIZE_Process(void); // 流程 static void INITIALIZE_SetStatus(enum INITIALIZE_StatusEnum status); // 设置状态 static void INITIALIZE_SetResult(enum INITIALIZE_ResultEnum result); // 设置结果 static void goto_start(void); // 开始 static void goto_success(void); // 成功 static void goto_failure(char * _info); // 失败 static void goto_finish(void); // 结束 // 流程 enum Step{ STEP_NONE, // 空闲 STEP_START, // 开始 STEP_READY, // 模块是否唤醒 STEP_EXIT_DEEP_SLEEP, // 退出深睡眠 STEP_ENTER_DEEP_SLEEP, // 进入深睡眠 STEP_WAIT, // 等待 STEP_CONNECT_AP, // 连接AP STEP_SUCCESS, // 成功 STEP_FAILURE, // 失败 STEP_FINISH, // 流程结束 }; // 步骤跳转时的监听 static uint16_t goto_step_event(uint16_t ns) { // 重置esp32状态 esp32.reset(); // 流程控制 uint16_t step = ns; // if(ns == STEP_SET_CFUN_1 && STEP_SET_CFUN_1_times++ >= 1) // { // goto_failure("重新联网次数过多"); // step = STEP_FAILURE; // } return step; } // 流程控制 static struct PCTRL_Struct pctrl = { .current_step = STEP_FINISH, .next_step = STEP_FINISH, .step_wait = STEP_WAIT, .goto_step_listener = goto_step_event, }; // 备注 static char info[40]; // 开始 static void goto_start(void) { PCTRL_GotoStep(&pctrl, STEP_START, "开始"); } // 成功 static void goto_success(void) { INITIALIZE_SetResult(INITIALIZE_Result_Success); PCTRL_GotoStep(&pctrl, STEP_SUCCESS, "成功"); } // 失败 static void goto_failure(char * _info) { INITIALIZE_SetResult(INITIALIZE_Result_Failure); memset(info, 0, sizeof(info)); strcpy(info, _info); PCTRL_GotoStep(&pctrl, STEP_FAILURE, "失败"); Log_Printf_Debug("info:%s!\r\n", info); } // 结束 static void goto_finish(void) { INITIALIZE_SetStatus(INITIALIZE_Status_Done); PCTRL_GotoStep(&pctrl, STEP_FINISH, "结束"); } // 状态 static enum INITIALIZE_StatusEnum udpclient_status = INITIALIZE_Status_None; // 结果 static enum INITIALIZE_ResultEnum udpclient_result = INITIALIZE_Result_None; // 设置状态 static void INITIALIZE_SetStatus(enum INITIALIZE_StatusEnum status) { udpclient_status = status; } // 获取状态 enum INITIALIZE_StatusEnum INITIALIZE_GetStatus(void) { return udpclient_status; } // 设置结果 static void INITIALIZE_SetResult(enum INITIALIZE_ResultEnum result) { udpclient_result = result; } // 获取结果 enum INITIALIZE_ResultEnum INITIALIZE_GetResult(void) { return udpclient_result; } // 重置 enum EXECUTE_ResultEnum INITIALIZE_Reset(void) { if(INITIALIZE_GetStatus() == INITIALIZE_Status_Being) { Log_Printf_Debug("初始化流程重置错误!\r\n"); return EXECUTE_Result_Failure; } INITIALIZE_SetStatus(INITIALIZE_Status_None); INITIALIZE_SetResult(INITIALIZE_Result_None); return EXECUTE_Result_Success; } // 开始 enum EXECUTE_ResultEnum INITIALIZE_Start(void) { INITIALIZE_Reset(); if(INITIALIZE_GetStatus() != INITIALIZE_Status_None) { Log_Printf_Debug("初始化流程启动错误!\r\n"); return EXECUTE_Result_Failure; } goto_start(); INITIALIZE_SetStatus(INITIALIZE_Status_Being); return EXECUTE_Result_Success; } // 流程处理,放到循环里 void INITIALIZE_ProcessHandle(void) { if(INITIALIZE_GetStatus() == INITIALIZE_Status_Being) { INITIALIZE_Process(); } } // 初始化诱因处理 void INITIALIZE_TriggerHandle(void) { if((REGIST_GetStatus() != REGIST_Status_Being) && (UDPCLIENT_GetStatus() != UDPCLIENT_Status_Being)) { enum Result result =esp32.ready(); if(result==Result_Success) { Log_Printf_Debug("初始化诱因处理!!!\r\n"); INITIALIZE_Start(); } } } static enum Result result = Result_None; static void INITIALIZE_Process(void) { switch(pctrl.current_step) { case STEP_NONE: break; // 空闲 case STEP_START: // 开始 PCTRL_GotoStep(&pctrl, STEP_EXIT_DEEP_SLEEP, "退出深休眠"); break; case STEP_EXIT_DEEP_SLEEP: // 退出深休眠 esp32.exit_deepsleep(); PCTRL_GotoStep(&pctrl, STEP_READY, "判断模块是否启动"); break; case STEP_READY: // 判断模块是否启动 result = esp32.ready(); if(result == Result_Success) { PCTRL_GotoStep(&pctrl, STEP_CONNECT_AP, "连接AP"); } else if(result == Result_Failed) { goto_failure("WiFi模块启动失败"); } break; case STEP_CONNECT_AP: // 连接AP result = esp32.connect_ap(WIFI_ID,WIFI_PASSWORD); if(result == Result_Success) { goto_success(); } else if(result == Result_Failed) { goto_failure("连接AP失败"); } break; case STEP_WAIT: // 等待 PCTRL_Wait(&pctrl); break; case STEP_SUCCESS: // 成功 PCTRL_GotoStep(&pctrl, STEP_ENTER_DEEP_SLEEP, "泵数据发送成功,进入深休眠"); break; case STEP_FAILURE: // 失败 PCTRL_GotoStep(&pctrl, STEP_ENTER_DEEP_SLEEP, "泵数据发送失败,进入深休眠"); break; case STEP_ENTER_DEEP_SLEEP: esp32.enter_deepsleep(); Log_Printf_Debug("WiFi模块进入深休眠模式\r\n"); goto_finish(); break; case STEP_FINISH: // 流程结束 break; default: goto_failure("步骤不存在"); break; } } #endif