Aiwb2_Initialize.c 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. #include "CONFIG.h"
  2. #if AIWB2
  3. #include "stm32f10x.h"
  4. #include <stdio.h>
  5. #include <stdarg.h>
  6. #include <string.h>
  7. #include <stdlib.h>
  8. #include "Regist.h"
  9. #include "PumpBusiness.h"
  10. #include "Log_Module.h"
  11. #include "Initialize.h"
  12. #include "aiwb2.h"
  13. #include "Process_Control.h"
  14. #include "UDP_Client.h"
  15. // 函数声明
  16. static void INITIALIZE_Process(void); // 流程
  17. static void INITIALIZE_SetStatus(enum INITIALIZE_StatusEnum status); // 设置状态
  18. static void INITIALIZE_SetResult(enum INITIALIZE_ResultEnum result); // 设置结果
  19. static void goto_start(void); // 开始
  20. static void goto_success(void); // 成功
  21. static void goto_failure(char * _info); // 失败
  22. static void goto_finish(void); // 结束
  23. // 流程
  24. enum PowerStep{
  25. STEP_START, // 开始
  26. STEP_START_AT,//开始AT
  27. STEP_EXIT_SLEEP, // 退出睡眠
  28. STEP_ENTER_SLEEP, // 进入睡眠
  29. STEP_SET_SLEEP ,// 设置休眠模式
  30. STEP_WAIT, // 等待
  31. STEP_SUCCESS, // 成功
  32. STEP_FAILURE, // 失败
  33. STEP_FINISH,//结束流程
  34. };
  35. // 步骤跳转时的监听
  36. //static uint8_t STEP_QUERY_CGREG_times = 0; // 查询网络状态的次数
  37. //static void initialize()
  38. //{
  39. //// STEP_QUERY_CGREG_times = 0;
  40. //}
  41. static uint16_t goto_step_event(uint16_t ns)
  42. {
  43. // 重置aiwb2状态
  44. aiwb2.reset();
  45. // 流程控制
  46. uint16_t step = ns;
  47. // if(ns == STEP_QUERY_CGREG && STEP_QUERY_CGREG_times++ >= 20)
  48. // {
  49. // goto_failure("查询网络状态的次数过多,联网失败");
  50. // step = STEP_FAILURE;
  51. // }
  52. return step;
  53. }
  54. // 流程控制
  55. static struct PCTRL_Struct pctrl = {
  56. .current_step = STEP_FINISH,
  57. .next_step = STEP_FINISH,
  58. .step_wait = STEP_WAIT,
  59. .goto_step_listener = goto_step_event,
  60. };
  61. // 备注
  62. static char info[40];
  63. // 开始
  64. static void goto_start(void)
  65. {
  66. // initialize();
  67. PCTRL_GotoStep(&pctrl, STEP_START, "开始");
  68. }
  69. // 成功
  70. static void goto_success(void)
  71. {
  72. INITIALIZE_SetResult(INITIALIZE_Result_Success);
  73. PCTRL_GotoStep(&pctrl, STEP_SUCCESS, "成功");
  74. }
  75. // 失败
  76. static void goto_failure(char * _info)
  77. {
  78. INITIALIZE_SetResult(INITIALIZE_Result_Failure);
  79. memset(info, 0, sizeof(info));
  80. strcpy(info, _info);
  81. PCTRL_GotoStep(&pctrl, STEP_FAILURE, "失败");
  82. Log_Printf_Debug("info:%s!\r\n", info);
  83. }
  84. // 结束
  85. static void goto_finish(void)
  86. {
  87. INITIALIZE_SetStatus(INITIALIZE_Status_Done);
  88. PCTRL_GotoStep(&pctrl, STEP_FINISH, "结束");
  89. }
  90. // 状态
  91. static enum INITIALIZE_StatusEnum udpclient_status = INITIALIZE_Status_None;
  92. // 结果
  93. static enum INITIALIZE_ResultEnum udpclient_result = INITIALIZE_Result_None;
  94. // 设置状态
  95. static void INITIALIZE_SetStatus(enum INITIALIZE_StatusEnum status)
  96. {
  97. udpclient_status = status;
  98. }
  99. // 获取状态
  100. enum INITIALIZE_StatusEnum INITIALIZE_GetStatus(void)
  101. {
  102. return udpclient_status;
  103. }
  104. // 设置结果
  105. static void INITIALIZE_SetResult(enum INITIALIZE_ResultEnum result)
  106. {
  107. udpclient_result = result;
  108. }
  109. // 获取结果
  110. enum INITIALIZE_ResultEnum INITIALIZE_GetResult(void)
  111. {
  112. return udpclient_result;
  113. }
  114. // 重置
  115. enum EXECUTE_ResultEnum INITIALIZE_Reset(void)
  116. {
  117. if(INITIALIZE_GetStatus() == INITIALIZE_Status_Being)
  118. {
  119. Log_Printf_Debug("初始化流程重置错误!\r\n");
  120. return EXECUTE_Result_Failure;
  121. }
  122. INITIALIZE_SetStatus(INITIALIZE_Status_None);
  123. INITIALIZE_SetResult(INITIALIZE_Result_None);
  124. return EXECUTE_Result_Success;
  125. }
  126. // 开始
  127. enum EXECUTE_ResultEnum INITIALIZE_Start(void)
  128. {
  129. INITIALIZE_Reset();
  130. if(INITIALIZE_GetStatus() != INITIALIZE_Status_None)
  131. {
  132. Log_Printf_Debug("初始化流程启动错误!\r\n");
  133. return EXECUTE_Result_Failure;
  134. }
  135. goto_start();
  136. INITIALIZE_SetStatus(INITIALIZE_Status_Being);
  137. return EXECUTE_Result_Success;
  138. }
  139. // 流程处理,放到循环里
  140. void INITIALIZE_ProcessHandle(void)
  141. {
  142. if(INITIALIZE_GetStatus() == INITIALIZE_Status_Being)
  143. {
  144. INITIALIZE_Process();
  145. }
  146. }
  147. // 初始化诱因处理
  148. void INITIALIZE_TriggerHandle(void)
  149. {
  150. if((REGIST_GetStatus() != REGIST_Status_Being) && (UDPCLIENT_GetStatus() != UDPCLIENT_Status_Being))
  151. {
  152. enum Result result =aiwb2.ready();
  153. if(result==Result_Success)
  154. {
  155. Log_Printf_Debug("初始化诱因处理!!!\r\n");
  156. INITIALIZE_Start();
  157. }
  158. }
  159. }
  160. static enum Result result = Result_None;
  161. /**
  162. * @brief WiFi_Aiwb2模块初始化
  163. * @param 无
  164. * @retval 无
  165. */
  166. static void INITIALIZE_Process(void)
  167. {
  168. switch(pctrl.current_step)
  169. {
  170. case STEP_START: //开始
  171. PCTRL_GotoStep(&pctrl, STEP_EXIT_SLEEP, "退出休眠");
  172. break;
  173. case STEP_EXIT_SLEEP: //退出休眠
  174. aiwb2.exit_sleep_io();
  175. PCTRL_GotoStepWait(&pctrl,STEP_START_AT, 350,"开始AT");
  176. break;
  177. case STEP_START_AT: //开始AT,检测模块是否唤醒
  178. result = aiwb2.test_at();
  179. if(result == Result_Success)
  180. {
  181. goto_success();
  182. }
  183. else if(result == Result_Failed)
  184. {
  185. goto_failure("发送AT失败,模块未唤醒");
  186. }
  187. break;
  188. case STEP_WAIT: //等待
  189. PCTRL_Wait(&pctrl);
  190. break;
  191. case STEP_SUCCESS: // 成功
  192. Log_Printf_Debug("初始化成功\r\n");
  193. PCTRL_GotoStep(&pctrl, STEP_ENTER_SLEEP, "进入睡眠");
  194. break;
  195. case STEP_FAILURE:// 失败
  196. Log_Printf_Debug("初始化失败\r\n");
  197. PCTRL_GotoStep(&pctrl, STEP_ENTER_SLEEP, "进入休眠");
  198. break;
  199. case STEP_ENTER_SLEEP:// 进入睡眠
  200. aiwb2.enter_sleep_io();
  201. goto_finish();
  202. break;
  203. case STEP_FINISH: // 结束流程
  204. break;
  205. default:
  206. goto_failure("步骤不存在");
  207. break;
  208. }
  209. }
  210. #endif