app.c 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360
  1. #include "led.h"
  2. #include "app.h"
  3. #include "lora.h"
  4. #include "gw_ctrl.h"
  5. #include "encoder.h"
  6. /*
  7. *********************************************************************************************************
  8. * LOCAL VARIABLES
  9. *********************************************************************************************************
  10. */
  11. extern volatile uint32_t TickCounter;
  12. OS_TCB LED_TASK_HandleTCB;
  13. CPU_STK LED_TASK_HandleStk[APP_TASK_START_STK_SIZE];
  14. void LED_TASK_Handle(void * p_arg);
  15. OS_TCB UART_TASK_HandleTCB;
  16. CPU_STK UART_TASK_HandleStk[UART_TASK_START_STK_SIZE];
  17. void UART_TASK_Handle(void * p_arg);
  18. OS_TCB PROG_TASK_HandleTCB;
  19. CPU_STK PROG_TASK_HandleStk[PROG_TASK_START_STK_SIZE];
  20. void PROG_TASK_Handle(void * p_arg);
  21. OS_TCB OTA_TASK_HandleTCB;
  22. CPU_STK OTA_TASK_HandleStk[OTA_TASK_START_STK_SIZE];
  23. void OTA_TASK_Handle(void * p_arg);
  24. OS_TCB LORA_TASK_HandleTCB;
  25. CPU_STK LORA_TASK_HandleStk[LORA_TASK_START_STK_SIZE];
  26. void LORA_TASK_Handle(void * p_arg);
  27. ////OS_TCB INFO_TASK_HandleTCB;
  28. ////CPU_STK INFO_TASK_HandleStk[INFO_TASK_START_STK_SIZE];
  29. ////void INFO_TASK_Handle(void * p_arg);
  30. OS_TCB ENCODER_TASK_HandleTCB;
  31. CPU_STK ENCODER_TASK_HandleStk[ENCODER_TASK_START_STK_SIZE];
  32. void ENCODER_TASK_Handle(void * p_arg);
  33. /*
  34. *********************************************************************************************************
  35. * STARTUP TASK
  36. *
  37. * Description : This is an example of a startup task. As mentioned in the book's text, you MUST
  38. * initialize the ticker only once multitasking has started.
  39. *
  40. * Arguments : p_arg is the argument passed to 'AppTaskStart()' by 'OSTaskCreate()'.
  41. *
  42. * Returns : none
  43. *
  44. * Notes : 1) The first line of code is used to prevent a compiler warning because 'p_arg' is not
  45. * used. The compiler should not generate any code for this statement.
  46. *********************************************************************************************************
  47. */
  48. //
  49. void AppTaskStart (void *p_arg)
  50. {
  51. uint8_t i;
  52. OS_ERR err;
  53. CPU_Init(); // Initialize the uC/CPU services
  54. BSP_Init(); // Initialize BSP functions
  55. printf("APP begin\n");
  56. tim4_init();
  57. port_init(PORT_LED_ON);//判断是否加密
  58. printf_debug(INIT_DEBUG, "\n复位信息:\n");
  59. printf_debug(INIT_DEBUG, " reset_type = 0x%02x\n",last_reset_flag);
  60. printf_debug(INIT_DEBUG, " reset_times = %u\n",eeprom_first_info.reset_total_num);
  61. printf_debug(INIT_DEBUG, "\n软件版本:\n");
  62. printf_debug(INIT_DEBUG, " boot_ver = 0x%08x\n",device_version_info.boot_ver);
  63. printf_debug(INIT_DEBUG, " pt_ver = 0x%08x\n",device_version_info.PT_ver);
  64. printf_debug(INIT_DEBUG, " app1_ver = 0x%08x\n",device_version_info.APP1_ver);
  65. printf_debug(INIT_DEBUG, " app2_ver = 0x%08x\n",device_version_info.APP2_ver);
  66. printf_debug(INIT_DEBUG, " app3_ver = 0x%08x\n",device_version_info.APP3_ver);
  67. printf_debug(INIT_DEBUG, "\n设备出厂信息:\n");
  68. printf_debug(INIT_DEBUG, " PT_init = 0x%02x\n",device_info.alrd);
  69. printf_debug(INIT_DEBUG, " device_type = 0x%04x\n",device_info.device_type);
  70. printf_debug(INIT_DEBUG, " device_sn = %010u, 0x%08x\n",device_info.device_sn,device_info.device_sn);
  71. printf_debug(INIT_DEBUG, " uuid = ");
  72. for(i = 0; i < 12; i++)
  73. {
  74. printf_debug(INIT_DEBUG, "%02x ", device_fixed_info.MCU_UUID[i]);
  75. }
  76. printf_debug(INIT_DEBUG, "\r\n");
  77. printf_debug(INIT_DEBUG, " pcb_ver = 0x%02x\n",device_info.pcb_ver);
  78. printf_debug(INIT_DEBUG, " device_pd = 0x%08x\n",device_info.production_data);
  79. printf_debug(INIT_DEBUG, " device_bn = 0x%04x\n",device_info.batch_number);
  80. printf_debug(INIT_DEBUG, " device_mfrs = 0x%04x\n",device_info.manufactures);
  81. if((device_fixed_info.Encrypt&0x80) == 0x80) printf("支持解码\n");
  82. else printf("不支持解码\n");
  83. if((device_fixed_info.Encrypt>>4)&0x01) printf("插入加密模块\n");
  84. else printf("未插入加密模块\n");
  85. /*
  86. if(device_fixed_info.Encrypt == CIPHERTEXT)//密文
  87. {
  88. printf_debug(INIT_DEBUG, " is miwen = 1\n");
  89. }
  90. else//明文
  91. {
  92. printf_debug(INIT_DEBUG, " is miwen = 0\n");
  93. }
  94. */
  95. printf_debug(INIT_DEBUG, "\nLora参数信息:\n");
  96. printf_debug(INIT_DEBUG, " lora_index = %d\n",lora_para_choice);
  97. APP_edittion_led_run();//APP版本指示灯运行
  98. #if OS_CFG_STAT_TASK_EN > 0u //如果使能(默认使能)了统计任务
  99. OSStatTaskCPUUsageInit(&err); //计算没有应用任务(只有空闲任务)运行时 CPU 的(最大)
  100. #endif //容量(决定 OS_Stat_IdleCtrMax 的值,为后面计算 CPU
  101. //使用率使用)。
  102. OSTaskCreate((OS_TCB *)&LED_TASK_HandleTCB,
  103. (CPU_CHAR *)"LED TASK Handle",
  104. (OS_TASK_PTR )LED_TASK_Handle,
  105. (void *)0,
  106. (OS_PRIO )LED_TASK_PRIO,
  107. (CPU_STK *)&LED_TASK_HandleStk[0],
  108. (CPU_STK_SIZE)APP_TASK_START_STK_SIZE / 10,
  109. (CPU_STK_SIZE)APP_TASK_START_STK_SIZE,
  110. (OS_MSG_QTY )0,
  111. (OS_TICK )0,
  112. (void *)0,
  113. (OS_OPT )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR),
  114. (OS_ERR *)&err);
  115. OSTaskCreate((OS_TCB *)&UART_TASK_HandleTCB,
  116. (CPU_CHAR *)"UART TASK Handle",
  117. (OS_TASK_PTR )UART_TASK_Handle,
  118. (void *)0,
  119. (OS_PRIO )UART_TASK_PRIO,
  120. (CPU_STK *)&UART_TASK_HandleStk[0],
  121. (CPU_STK_SIZE)UART_TASK_START_STK_SIZE / 10,
  122. (CPU_STK_SIZE)UART_TASK_START_STK_SIZE,
  123. (OS_MSG_QTY )0,
  124. (OS_TICK )0,
  125. (void *)0,
  126. (OS_OPT )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR),
  127. (OS_ERR *)&err);
  128. OSTaskCreate((OS_TCB *)&LORA_TASK_HandleTCB,
  129. (CPU_CHAR *)"LORA TASK Handle",
  130. (OS_TASK_PTR )LORA_TASK_Handle,
  131. (void *)0,
  132. (OS_PRIO )LORA_TASK_PRIO,
  133. (CPU_STK *)&LORA_TASK_HandleStk[0],
  134. (CPU_STK_SIZE)LORA_TASK_START_STK_SIZE / 10,
  135. (CPU_STK_SIZE)LORA_TASK_START_STK_SIZE,
  136. (OS_MSG_QTY )0,
  137. (OS_TICK )0,
  138. (void *)0,
  139. (OS_OPT )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR),
  140. (OS_ERR *)&err);
  141. OSTaskCreate((OS_TCB *)&PROG_TASK_HandleTCB,
  142. (CPU_CHAR *)"PROG TASK Handle",
  143. (OS_TASK_PTR )PROG_TASK_Handle,
  144. (void *)0,
  145. (OS_PRIO )PROG_TASK_PRIO,
  146. (CPU_STK *)&PROG_TASK_HandleStk[0],
  147. (CPU_STK_SIZE)PROG_TASK_START_STK_SIZE / 10,
  148. (CPU_STK_SIZE)PROG_TASK_START_STK_SIZE,
  149. (OS_MSG_QTY )0,
  150. (OS_TICK )0,
  151. (void *)0,
  152. (OS_OPT )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR),
  153. (OS_ERR *)&err);
  154. OSTaskCreate((OS_TCB *)&OTA_TASK_HandleTCB,
  155. (CPU_CHAR *)"OTA TASK Handle",
  156. (OS_TASK_PTR )OTA_TASK_Handle,
  157. (void *)0,
  158. (OS_PRIO )OTA_TASK_PRIO,
  159. (CPU_STK *)&OTA_TASK_HandleStk[0],
  160. (CPU_STK_SIZE)OTA_TASK_START_STK_SIZE / 10,
  161. (CPU_STK_SIZE)OTA_TASK_START_STK_SIZE,
  162. (OS_MSG_QTY )0,
  163. (OS_TICK )0,
  164. (void *)0,
  165. (OS_OPT )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR),
  166. (OS_ERR *)&err);
  167. //pcb版本1加入编码器,打开编码器任务
  168. if(hd_id == PCB_V1)
  169. {
  170. OSTaskCreate((OS_TCB *)&ENCODER_TASK_HandleTCB,
  171. (CPU_CHAR *)"ENCODER TASK Handle",
  172. (OS_TASK_PTR )ENCODER_TASK_Handle,
  173. (void *)0,
  174. (OS_PRIO )ENCODER_TASK_PRIO,
  175. (CPU_STK *)&ENCODER_TASK_HandleStk[0],
  176. (CPU_STK_SIZE)ENCODER_TASK_START_STK_SIZE / 10,
  177. (CPU_STK_SIZE)ENCODER_TASK_START_STK_SIZE,
  178. (OS_MSG_QTY )0,
  179. (OS_TICK )0,
  180. (void *)0,
  181. (OS_OPT )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR),
  182. (OS_ERR *)&err);
  183. }
  184. OSTaskDel(&AppTaskStartTCB, &err);
  185. }
  186. uint8_t uart3_buf[1300] = {0};
  187. uint16_t uart3_len = 0;
  188. uint8_t delay = 0;
  189. void LED_TASK_Handle(void * p_arg)//按键和指示灯任务函数
  190. {
  191. OS_ERR err;
  192. (void)p_arg;
  193. while (1)
  194. {
  195. led_run();//led灯运行处理
  196. key_press();//按键处理
  197. device_real_time_para_read();//读实时参数(温度、电压)
  198. run_irq_set();//运行时中断控制
  199. device_module_reset();//设备模块复位判断
  200. watchdog_feed();//喂狗
  201. tax_ciphertext_0x8C_process();
  202. //测试
  203. // uart3_len = uart_rcv_uart3(uart3_buf);
  204. // if(uart3_len)
  205. // {
  206. // data_dump("uart3 rcv",uart3_buf,uart3_len);
  207. // }
  208. OSTimeDlyHMSM(0, 0, 0, 50, OS_OPT_TIME_DLY, &err);
  209. }
  210. }
  211. void UART_TASK_Handle(void * p_arg)//串口接收任务函数
  212. {
  213. u8 i;
  214. OS_ERR err;
  215. (void)p_arg;
  216. for(i = 0;i < UART_MAX;i++) {
  217. uart_rs232_init(i, NULL);
  218. }
  219. while (1)
  220. {
  221. for(i = 0;i < 5;i++) {
  222. uart_rcv_process(i);
  223. }
  224. task_count.uart_count_cur++;
  225. OSTimeDlyHMSM(0, 0, 0, 20, OS_OPT_TIME_DLY, &err);
  226. }
  227. }
  228. //uint8_t uart_rcv_buf[128],uart_rcv_len;
  229. //uint8_t uart_send_buf[128],uart_send_len;
  230. void PROG_TASK_Handle(void * p_arg)//业务处理函数
  231. {
  232. OS_ERR err;
  233. (void)p_arg;
  234. while(1) {
  235. business_uart_rcv_proc();//业务串口接收处理
  236. uart_timeout_handle();//串口超时处理函数
  237. pos_changle();//pos切换
  238. pt_handle();//产测处理
  239. xsp_ota_handle();//显示屏(0904)升级
  240. // xsp_update_handle();//显示屏升级
  241. task_count.prog_count_cur++;
  242. OSTimeDlyHMSM(0, 0, 0, 20, OS_OPT_TIME_DLY, &err);
  243. }
  244. }
  245. void OTA_TASK_Handle(void * p_arg)//升级任务处理函数
  246. {
  247. OS_ERR err;
  248. (void)p_arg;
  249. while(1) {
  250. //升级时从设备处理
  251. if(device_fixed_info.slave_uploade_start)//开始上报升级状态
  252. {
  253. device_fixed_info.slave_uploade_start = 0;
  254. device_fixed_info.Work_State = DEV_WORK_STATE_UPDATING;
  255. ota_state.update_mode = OTA_WORK_STATE_UPLOAD;
  256. srand(device_info.device_sn);//随机数种子
  257. ota_timer_upload_cad_slave_set(OPEN,SLAVE_CAD_TIME_MIN);//打开上报间隔定时
  258. ota_timer_upload_total_slave_set(OPEN,OTA_SLAVE_UPLOADE_TIME_TICK);//打开上报总定时
  259. }
  260. ota_slave_time_handle();//从设备升级定时处理函数
  261. //升级时主设备处理
  262. if(device_fixed_info.master_updata_start)//开始离线升级
  263. {
  264. device_fixed_info.master_updata_start = 0;
  265. device_fixed_info.Work_State = DEV_WORK_STATE_UPDATING;
  266. ota_state.update_mode = OTA_WORK_STATE_MASTER;
  267. Offline_upgrade_master();//离线升级时的主设备下发升级包
  268. }
  269. ota_master_time_handle();//离线升级主设备定时处理函数
  270. task_count.ota_count_cur++;
  271. OSTimeDlyHMSM(0, 0, 0, 20, OS_OPT_TIME_DLY, &err);
  272. }
  273. }
  274. void LORA_TASK_Handle(void * p_arg)//Lora任务函数
  275. {
  276. OS_ERR err;
  277. (void)p_arg;
  278. lora_queue_init();
  279. lora_init();
  280. while(1) {
  281. lora_task();
  282. task_count.lora_count_cur++;
  283. OSTimeDlyHMSM(0, 0, 0, 1, OS_OPT_TIME_DLY, &err);
  284. }
  285. }
  286. void ENCODER_TASK_Handle(void * p_arg)//编码器任务函数
  287. {
  288. OS_ERR err;
  289. (void)p_arg;
  290. encoder_init();
  291. while(1)
  292. {
  293. encoder_record_end_handle();//交易完成处理函数
  294. gunsignal_irq_delay_handle();//抬枪信号滤波函数
  295. encoder_eeprom_write_handle();//编码器写eeprom
  296. // gunnum_irq_delay_handle();//抬枪次数
  297. task_count.encoder_count_cur++;
  298. OSTimeDlyHMSM(0, 0, 0, 10, OS_OPT_TIME_DLY, &err);
  299. }
  300. }