| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237 |
- #include "CONFIG.h"
- #if AIWB2
- #include "stm32f10x.h"
- #include <stdio.h>
- #include <stdarg.h>
- #include <string.h>
- #include <stdlib.h>
- #include "Regist.h"
- #include "PumpBusiness.h"
- #include "Log_Module.h"
- #include "Initialize.h"
- #include "aiwb2.h"
- #include "Process_Control.h"
- #include "UDP_Client.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 PowerStep{
- STEP_START, // 开始
- STEP_START_AT,//开始AT
- STEP_EXIT_SLEEP, // 退出睡眠
- STEP_ENTER_SLEEP, // 进入睡眠
- STEP_SET_SLEEP ,// 设置休眠模式
- STEP_WAIT, // 等待
- STEP_SUCCESS, // 成功
- STEP_FAILURE, // 失败
- STEP_FINISH,//结束流程
- };
- // 步骤跳转时的监听
- //static uint8_t STEP_QUERY_CGREG_times = 0; // 查询网络状态的次数
- //static void initialize()
- //{
- //// STEP_QUERY_CGREG_times = 0;
- //}
- static uint16_t goto_step_event(uint16_t ns)
- {
- // 重置aiwb2状态
- aiwb2.reset();
-
- // 流程控制
- uint16_t step = ns;
- // if(ns == STEP_QUERY_CGREG && STEP_QUERY_CGREG_times++ >= 20)
- // {
- // 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)
- {
- // initialize();
- 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 =aiwb2.ready();
- if(result==Result_Success)
- {
- Log_Printf_Debug("初始化诱因处理!!!\r\n");
- INITIALIZE_Start();
- }
- }
- }
- static enum Result result = Result_None;
- /**
- * @brief WiFi_Aiwb2模块初始化
- * @param 无
- * @retval 无
- */
- static void INITIALIZE_Process(void)
- {
- switch(pctrl.current_step)
- {
- case STEP_START: //开始
- PCTRL_GotoStep(&pctrl, STEP_EXIT_SLEEP, "退出休眠");
- break;
- case STEP_EXIT_SLEEP: //退出休眠
- aiwb2.exit_sleep_io();
- PCTRL_GotoStepWait(&pctrl,STEP_START_AT, 350,"开始AT");
- break;
- case STEP_START_AT: //开始AT,检测模块是否唤醒
- result = aiwb2.test_at();
- if(result == Result_Success)
- {
- goto_success();
- }
- else if(result == Result_Failed)
- {
- goto_failure("发送AT失败,模块未唤醒");
- }
- break;
- case STEP_WAIT: //等待
- PCTRL_Wait(&pctrl);
- break;
- case STEP_SUCCESS: // 成功
- Log_Printf_Debug("初始化成功\r\n");
- PCTRL_GotoStep(&pctrl, STEP_ENTER_SLEEP, "进入睡眠");
- break;
- case STEP_FAILURE:// 失败
- Log_Printf_Debug("初始化失败\r\n");
- PCTRL_GotoStep(&pctrl, STEP_ENTER_SLEEP, "进入休眠");
- break;
- case STEP_ENTER_SLEEP:// 进入睡眠
- aiwb2.enter_sleep_io();
- goto_finish();
- break;
- case STEP_FINISH: // 结束流程
- break;
- default:
- goto_failure("步骤不存在");
- break;
- }
- }
- #endif
|