PumpBusiness.c 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  1. #include "stm32f10x.h"
  2. #include <stdio.h>
  3. #include <stdarg.h>
  4. #include <string.h>
  5. #include <stdlib.h>
  6. #include "PumpBusiness.h"
  7. #include "Usart1.h"
  8. #include "CONFIG.h"
  9. #include "Initialize.h"
  10. #include "UDP_Client.h"
  11. #include "Timer_Module.h"
  12. #include "Log_Module.h"
  13. #include "At_Module.h"
  14. #include "Pump_Dicts_Util.h"
  15. #include "Tuoreniot.h"
  16. #include "Regist.h"
  17. #include "UDP_Client.h"
  18. // 联网成功标识
  19. uint8_t Network_Success_Flag = 0;
  20. struct PUMPDICTS_ParamsStruct pump_params; // 泵参数
  21. static uint16_t Data_Number = 0; // 数据编号
  22. static uint16_t Data_success_Number = 0; // 成功包
  23. static uint16_t Data_fail_Number = 0; // 失败包
  24. int RSRP1=0;
  25. int RSRQ2=0;
  26. int RSSI3=0;
  27. int SINR4=0;
  28. // 泵参数初始化
  29. static void PUMPBUSINESS_ParamsInit(void)
  30. {
  31. pump_params.userId = 0;
  32. pump_params.pumpType = 0;
  33. pump_params.infusionId = 0;
  34. pump_params.appendDose=0;
  35. //报警初始化
  36. pump_params.alarm_BubbleOrAneroid = 0;
  37. pump_params.alarm_Blocked = 0;
  38. pump_params.alarm_Total = 0;
  39. pump_params.alarm_Ultimate = 0;
  40. pump_params.alarm_LowPower = 0;
  41. pump_params.alarm_Finished = 0;
  42. pump_params.alarm_MotorOutofcontrol = 0;
  43. pump_params.alarm_MechanicalBreakdown = 0;
  44. pump_params.alarm_UnfilledPillBox = 0;
  45. //预报初始化
  46. pump_params.forcast_WillFinished = 0;
  47. pump_params.forcast_InsufficientAnalgesia = 0;
  48. pump_params.forcast_LowPowerForecast = 0;
  49. #if BC260Y
  50. pump_params.networkType=2;
  51. #endif
  52. #if EC800M
  53. pump_params.networkType=1;
  54. #endif
  55. }
  56. // 刷新泵数据
  57. void PUMPBUSINESS_ParamsRefresh(void)
  58. {
  59. // 初始化
  60. PUMPBUSINESS_ParamsInit();
  61. pump_params.userId = 1000;
  62. pump_params.pumpType = 1;
  63. pump_params.infusionId = 234;
  64. pump_params.dataNumber = Data_Number;
  65. pump_params.electricity=99;
  66. pump_params.validTimes=10;
  67. pump_params.appendDose=3;
  68. pump_params.invalidTimes=4;
  69. pump_params.patientCode = 2000;
  70. pump_params.totalDose=11;
  71. pump_params.ward=2; // 编号124,病区。
  72. pump_params.bedNo=3; // 编号125,床号。
  73. pump_params.alarm_LowPower = 1;
  74. pump_params.alarm_Total = 1;
  75. pump_params.finishDose =20;
  76. pump_params.alarm_UnfilledPillBox = 1;
  77. pump_params.forcast_WillFinished =1;
  78. pump_params.forcast_InsufficientAnalgesia = 0;
  79. pump_params.forcast_LowPowerForecast = 0;
  80. }
  81. // 初始化结果处理
  82. static void Initialize_ResultHandle()
  83. {
  84. // 初始化过程处理
  85. if(INITIALIZE_GetStatus() == INITIALIZE_Status_Being)
  86. {
  87. // 初始化流程处理
  88. INITIALIZE_ProcessHandle();
  89. }
  90. else if(INITIALIZE_GetStatus() == INITIALIZE_Status_Done)
  91. {
  92. Log_Printf_Debug("初始化结束\r\n");
  93. if(INITIALIZE_GetResult() == INITIALIZE_Result_Success)
  94. {
  95. Log_Printf_Debug("初始化成功: %d\r\n", INITIALIZE_GetResult());
  96. Network_Success_Flag = 1;
  97. }
  98. else if(INITIALIZE_GetResult() == INITIALIZE_Result_Failure)
  99. {
  100. Log_Printf_Debug("初始化失败: %d\r\n", INITIALIZE_GetResult());
  101. Network_Success_Flag = 0;
  102. }
  103. // 重置初始化
  104. INITIALIZE_Reset();
  105. }
  106. }
  107. // 注册结果处理
  108. static void Regist_ResultHandle()
  109. {
  110. // 注册过程处理
  111. if(REGIST_GetStatus() == REGIST_Status_Being)
  112. {
  113. // 注册流程处理
  114. REGIST_ProcessHandle();
  115. }
  116. else if(REGIST_GetStatus() == REGIST_Status_Done)
  117. {
  118. Log_Printf_Debug("注册结束\r\n");
  119. if(REGIST_GetResult() == REGIST_Result_Success)
  120. {
  121. Log_Printf_Debug("注册成功: %d\r\n", REGIST_GetResult());
  122. Network_Success_Flag = 1;
  123. }
  124. else if(REGIST_GetResult() == REGIST_Result_None)
  125. {
  126. Log_Printf_Debug("注册失败: %d\r\n", REGIST_GetResult());
  127. Network_Success_Flag = 0;
  128. }
  129. // 重置注册
  130. REGIST_Reset();
  131. }
  132. }
  133. // 定时发送
  134. // 计时相关的变量
  135. static struct TIMER_Struct timer;
  136. static uint32_t Business_wait_time = 1200; // 秒
  137. uint8_t send_data_switch = 1; // 发送数据的开关,0表示发送数据
  138. static void UDPClient_SendDataInterval()
  139. {
  140. // 定时发送数据
  141. if(time_get_delay(&timer) > 1000 * Business_wait_time) // // 定时时间,20分钟
  142. {
  143. // 20分钟计时完成,处理业务
  144. send_data_switch = 1; // 发送数据标志
  145. time_clear(&timer); // 重新定时
  146. Log_Printf_Debug("PumpBusines_Handle\r\n");
  147. }
  148. // 判断发送
  149. if(send_data_switch == 1)
  150. {
  151. // 初始化流程处于空闲, 注册流程处于空闲,注册成功时发送
  152. if(INITIALIZE_GetStatus() == INITIALIZE_Status_None
  153. && REGIST_GetStatus() == REGIST_Status_None
  154. && TUORENIOT_GetCodeOfRegistResponse() == 200)
  155. {
  156. Log_Printf_Debug("开始发送\r\n");
  157. UDPCLIENT_Start();
  158. send_data_switch = 0;
  159. // 数据编号加1
  160. Data_Number++;
  161. }
  162. }
  163. }
  164. // 发送结果处理
  165. static void UDPClient_ResultHandle()
  166. {
  167. // 发送过程处理
  168. if(UDPCLIENT_GetStatus() == UDPCLIENT_Status_Being)
  169. {
  170. // 发送流程处理
  171. UDPCLIENT_ProcessHandle();
  172. }
  173. else if(UDPCLIENT_GetStatus() == UDPCLIENT_Status_Done)
  174. {
  175. Log_Printf_Debug("发送结束\r\n");
  176. if(UDPCLIENT_GetResult() == UDPCLIENT_Result_Success)
  177. {
  178. Log_Printf_Debug("发送成功: %d\r\n", UDPCLIENT_GetResult());
  179. if(UDPCLIENT_TestModeFlag==1){
  180. UDPCLIENT_QuerySignal(&RSRP1,&RSRQ2,&RSSI3,&SINR4);
  181. Log_Printf("\r\nRSRP1:%d,RSRQ2:%d,RSSI3:%d,SINR4:%d\r\n", RSRP1,RSRQ2,RSSI3,SINR4);
  182. }
  183. Network_Success_Flag = 1;
  184. Data_success_Number++;
  185. }
  186. else if(UDPCLIENT_GetResult() == UDPCLIENT_Result_Failure)
  187. {
  188. Log_Printf_Debug("发送失败: %d\r\n", UDPCLIENT_GetResult());
  189. Network_Success_Flag = 0;
  190. Data_fail_Number++;
  191. }
  192. // 重置发送
  193. UDPCLIENT_Reset();
  194. }
  195. }
  196. // 业务处理
  197. static void PUMPBUSINESS_Process(void)
  198. {
  199. // 初始化诱因处理
  200. INITIALIZE_TriggerHandle();
  201. // 初始化结果处理
  202. Initialize_ResultHandle();
  203. // 注册结果处理
  204. Regist_ResultHandle();
  205. // 定时发送数据
  206. UDPClient_SendDataInterval();
  207. // 发送结果处理
  208. UDPClient_ResultHandle();
  209. // 一些未处理的数据
  210. AT_ResidueHandle();
  211. }
  212. // 初始化,放到while前
  213. void PUMPBUSINESS_Init(void)
  214. {
  215. TUORENIOT_Init();
  216. }
  217. // 流程处理,放到while循环
  218. void PUMPBUSINESS_ProcessHandle(void)
  219. {
  220. PUMPBUSINESS_Process();
  221. }