ProgramRun.c 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. #include "ProgramRun.h"
  2. #include "FifoQueue.h"
  3. #include "Config.h" //常用功能
  4. #include "Bat.h" //电池
  5. #include "Beep.h" //蜂鸣器
  6. #include "Keys.h" //按键
  7. #include "3G_A8500.h" //3G
  8. #include "Uart.h" //串口
  9. #include "Fas_Base.h" //fas处理
  10. #include "ParaConfig.h" //falsh配置
  11. #include "Fas_Test485.h" //测试485
  12. #include "Fas_Test232.h" //测试232
  13. #include "Mypara.h"
  14. #include "Exit.h" //外部中断
  15. #include "Led.h" //led
  16. #include "Fas_Base.h"
  17. #include "Fas_YDH30P_Alone.h"
  18. #include "Fas_ZZSA_dianhutanceqi.h"
  19. #include "Fas_CJ_xianliuqi.h"
  20. #include "Fas_YDH10P.h"
  21. tPubAppEvents PubAppEvent;
  22. tFasAppStates FasAppState;
  23. tFasAppEvents FasAppEvent;
  24. /* 此函数仅用于超时计时
  25. 计时速度必须大于T10MS_EV_Handler, 不然T10MS_EV_Handler会重复执行
  26. */
  27. void T10MS_Count_Handler ( void ) //10ms
  28. {
  29. //3g计时
  30. a8500_delay_cnt += 10;
  31. if ( a8500_delay_cnt >= 60000 ) //0~60000
  32. {
  33. a8500_delay_cnt = 0;
  34. }
  35. Fas_T10MS_Even();
  36. }
  37. /*
  38. 按测试按键切换正常模式和测试模式
  39. 测试模式:
  40. 1.发送485,原数据返回
  41. 2.发送232,生产配置IP 端口等
  42. 正常模式:
  43. 1.发送485,雅达-独立式
  44. 2.发送232,原数据返回
  45. */
  46. void T10MS_EV_Handler ( void )
  47. {
  48. A8500_Handler(); //3g模块,不要太快,最好大于1ms。模块初始化
  49. switch ( SysRunType ) //切换协议
  50. {
  51. case SysRun_Norm:
  52. Fas_Handler();
  53. break;
  54. case SysRun_Test: //按测试按键切换正常模式和测试模式
  55. Fas_Handler(); //测试:MCU -> 雅达参数
  56. ProduSet_Handler(); //测试:工具->MCU 参数
  57. Test232_Handler();
  58. Test485_Handler();
  59. break;
  60. }
  61. }
  62. void T100MS_EV_Handler ( void )
  63. {
  64. Hard_FeedDog(); //硬件看门狗
  65. LedEven(); //LED处理
  66. }
  67. void T1S_EV_Handler ( void )
  68. {
  69. DC_BAT_Handler(); //adc任务,电量采集
  70. if ( SysRunType == SysRun_Test )
  71. {
  72. Gprs_Msg_3s_Even(); //测试模式,无效
  73. }
  74. }
  75. void T1min_EV_Handler ( void )
  76. {
  77. static u8 CTime_min = 0;
  78. if ( SysPara.CTime )
  79. {
  80. if ( CTime_min++ >= SysPara.CTime * 30 ) //巡检一次,单位0.5小时
  81. {
  82. CTime_min = 0;
  83. QueueIn ( &Pub_Tasks, CTIME_EV );
  84. Set_All485_CTimeFlag(); //参数获取:巡检,之后返回成功或失败
  85. }
  86. }
  87. }
  88. void T8min_EV_Handler ( void )
  89. {
  90. DTU_Heart(); //心跳
  91. }
  92. void Time_EV_Handler ( void )
  93. {
  94. if ( System_Flag_10Ms )
  95. {
  96. System_Flag_10Ms = 0;
  97. T10MS_EV_Handler(); //设备状态获取,参数配置,以及数据的发送
  98. }
  99. if ( System_Flag_100Ms )
  100. {
  101. System_Flag_100Ms = 0;
  102. T100MS_EV_Handler(); //LED处理,和喂硬件看门狗
  103. }
  104. if ( System_Flag_1s )
  105. {
  106. System_Flag_1s = 0;
  107. T1S_EV_Handler(); //网关电池电量的计算处理,以及网关数据发送
  108. }
  109. if ( System_Flag_1min )
  110. {
  111. System_Flag_1min = 0;
  112. T1min_EV_Handler(); //切换到巡检数据发送状态
  113. }
  114. if ( System_Flag_8min )
  115. {
  116. System_Flag_8min = 0;
  117. T8min_EV_Handler(); //心跳包的发送
  118. }
  119. }
  120. /**********************信号处理函数**************************/
  121. void UART1_RECV_EV_Handler ( void ) //485
  122. {
  123. switch ( SysRunType ) //切换协议
  124. {
  125. case SysRun_Norm:
  126. Fas_Recv_A_Frame_Msg();
  127. break;
  128. case SysRun_Test:
  129. if ( Test485_Recv_A_Frame_Msg() );
  130. else if ( Fas_Recv_A_Frame_Msg() );
  131. break;
  132. }
  133. }
  134. void UART2_RECV_EV_Handler ( void ) //3g
  135. {
  136. A8500_Recv_A_Frame_Msg();
  137. }
  138. void UART3_RECV_EV_Handler ( void ) //232口用+配置串口
  139. {
  140. switch ( SysRunType ) //切换协议
  141. {
  142. case SysRun_Norm:
  143. break;
  144. case SysRun_Test:
  145. if ( Test232_Recv_A_Frame_Msg() );
  146. else if ( ProduSet_Recv_A_Frame_Msg() );
  147. break;
  148. }
  149. }
  150. /************************* Application States & Events **************************/
  151. void Ignore ( void )
  152. {}
  153. void CTIME_EV_Handler ( void )
  154. {
  155. DTU_Msg ( Command_DevPoll, Get_All485State() );
  156. }
  157. const tAppStateFp PubAppTb[PUBAPP_MAX_EV] =
  158. {
  159. // ** STATE *** *** EVENT ** //
  160. &Ignore, //ACDC_EV,
  161. &KGL_IN_Hanlder, //KGL_IN_EV,
  162. &Key_XY_Hanlder, //KEY_XY_EV, //消音
  163. &Key_CS_Hanlder, //KEY_CS_EV, //测试
  164. &Ignore, //KGL_IN_LONG_EV,
  165. &Key_XY_Long_Hanlder, //KEY_XY_LONG_EV, //长按消音键
  166. &Key_CS_Long_Hanlder, //KEY_CS_LONG_EV, //长按测试键
  167. &UART1_RECV_EV_Handler, //UART1_RECV_EV,
  168. &UART2_RECV_EV_Handler, //UART2_RECV_EV,
  169. &UART3_RECV_EV_Handler, //UART3_RECV_EV,
  170. &CTIME_EV_Handler, //CTIME_EV,
  171. };
  172. const tAppStateFp FasAppTb[FAS_MAX_ST][FASAPP_MAX_EV] =
  173. {
  174. // ** STATE *** *** EVENT ** //
  175. {
  176. &Ignore,
  177. &Ignore,
  178. },
  179. };
  180. //if(QueueIn(&SysMsg,i) == QueueFull) break;
  181. //if(QueueOut(&SysMsg,&sh) == QueueEmpty) break;
  182. void Init_Param ( void )
  183. {
  184. QueueInit ( &Fas_Tasks ); //fas协议任务
  185. QueueInit ( &Pub_Tasks ); //公共任务
  186. WGpara.GPRS = 0x01; //网络制式 2G网络
  187. WGpara.YYS = 0x01; //运营商 1:中国移动
  188. EnableMsg.XX = 1;
  189. }
  190. /**********************************封包**********************************************/