You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

149 lines
4.6 KiB

12 months ago
12 months ago
12 months ago
12 months ago
11 months ago
12 months ago
11 months ago
12 months ago
  1. #include <stddef.h>
  2. #include <stdio.h>
  3. //
  4. #include "base/appdep.hpp"
  5. //
  6. #include "app/dmapp.hpp"
  7. #include "app/ext_ch_selector_app.hpp"
  8. #include "app/exth2o2_sensor.hpp"
  9. //
  10. #include "board/public_board.hpp"
  11. //
  12. #include "base/protocol_processer_mgr.hpp"
  13. #include "protocol_processer_impl/public_cmd_processer.hpp"
  14. //
  15. #define TAG "main"
  16. using namespace iflytop;
  17. extern void umain();
  18. extern "C" {
  19. void StartDefaultTask(void const* argument) { umain(); }
  20. }
  21. /*******************************************************************************
  22. * MAIN *
  23. *******************************************************************************/
  24. extern "C" {
  25. // void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) {
  26. // }
  27. }
  28. void debug_light_ctrl() {
  29. static uint32_t lastcall = 0;
  30. static bool light_status = false;
  31. if (!gInitErrorFlag) {
  32. if (zhas_passedms(lastcall) > 300) {
  33. PublicBoard::ins()->toggleDebugLight();
  34. lastcall = zget_ticket();
  35. }
  36. } else {
  37. if (zhas_passedms(lastcall) > 30) {
  38. PublicBoard::ins()->toggleDebugLight();
  39. lastcall = zget_ticket();
  40. }
  41. }
  42. }
  43. void idtable_init() {
  44. // 大空间ID初始化
  45. IdMgr::ins().addIdItem({kLargeSpaceDMLiquidCtrlBoard, klarge_space_disinfection_machine, kFixBoardId_LiquidCtrl});
  46. IdMgr::ins().addIdItem({kLargeSpaceDMPowerCtrlBoard, klarge_space_disinfection_machine, kFixBoardId_PowerControl});
  47. // 小空间ID初始化
  48. IdMgr::ins().addIdItem({kSmallSpaceDMLiquidCtrlBoard, ksmall_space_disinfection_machine, kFixBoardId_LiquidCtrl});
  49. IdMgr::ins().addIdItem({kSmallSpaceDMPowerCtrlBoard, ksmall_space_disinfection_machine, kFixBoardId_PowerControl});
  50. // 管道ID初始化
  51. IdMgr::ins().addIdItem({kPipeDMLiquidCtrlBoard, kpipe_disinfection_machine, kFixBoardId_LiquidCtrl});
  52. IdMgr::ins().addIdItem({kPipeDMPowerCtrlBoard, kpipe_disinfection_machine, kFixBoardId_PowerControl});
  53. // 拉杆箱ID初始化
  54. IdMgr::ins().addIdItem({kDrawBarDMLiquidCtrlBoard, kdraw_bar_disinfection_box, kFixBoardId_LiquidCtrl});
  55. IdMgr::ins().addIdItem({kDrawBarDMPowerCtrlBoard, kdraw_bar_disinfection_box, kFixBoardId_PowerControl});
  56. // H2O2传感器ID初始化
  57. IdMgr::ins().addIdItem({kH2O2SensorBoard, kh2o2_ext_sensor, kFixBoardId_H2O2SensorStart});
  58. }
  59. #define REG_PROCESSER(processer) ProtocolProcesserMgr::ins()->regProcesser(processer);
  60. /* IWDG init function */
  61. void MX_IWDG_Init(void) {
  62. hiwdg.Instance = IWDG;
  63. hiwdg.Init.Prescaler = IWDG_PRESCALER_256;
  64. hiwdg.Init.Reload = 501;
  65. if (HAL_IWDG_Init(&hiwdg) != HAL_OK) {
  66. Error_Handler();
  67. }
  68. }
  69. void umain() {
  70. gBoardFlagSetResetFlag();
  71. idtable_init();
  72. deviceInfo_init();
  73. // config_init();
  74. AppPeriodTaskMgr::ins()->initialize();
  75. PublicBoard::ins()->initialize();
  76. ZLOGI(TAG, "======================= boardinfo ==================== ");
  77. ZLOGI(TAG, "project : %s ", PROJECT);
  78. ZLOGI(TAG, "version : %d ", SOFTWARE_VERSION);
  79. ZLOGI(TAG, "pversion : %d", deviceInfo_getProtocolVersion());
  80. ZLOGI(TAG, "sn : %s", sn_get_str());
  81. ZLOGI(TAG, "boardTypeId : %s(%d)", BoardTypeId2Str(PublicBoard::ins()->getBoardTypeId()), PublicBoard::ins()->getBoardTypeId());
  82. ZLOGI(TAG, "boardId : %d", PublicBoard::ins()->getBoardId());
  83. ZLOGI(TAG, "=");
  84. zcanbus_init(PublicBoard::ins()->getBoardId());
  85. ProtocolProcesserMgr::ins()->initialize();
  86. PublicCmdProcesser::ins()->initialize();
  87. switch (PublicBoard::ins()->getBoardTypeId()) {
  88. case kDrawBarDMLiquidCtrlBoard:
  89. case kDrawBarDMPowerCtrlBoard:
  90. // not suppport now
  91. gInitErrorFlag = true;
  92. break;
  93. case kLargeSpaceDMLiquidCtrlBoard:
  94. case kLargeSpaceDMPowerCtrlBoard:
  95. case kSmallSpaceDMLiquidCtrlBoard:
  96. case kSmallSpaceDMPowerCtrlBoard:
  97. case kPipeDMLiquidCtrlBoard:
  98. case kPipeDMPowerCtrlBoard:
  99. DisinfectionApp::ins()->initialize();
  100. break;
  101. case kDrawBarDMExtChSelector:
  102. ExtChSelector::ins()->initialize();
  103. break;
  104. case kH2O2SensorBoard:
  105. ExtH2O2Sensor::ins()->initialize();
  106. break;
  107. default:
  108. gInitErrorFlag = true;
  109. break;
  110. }
  111. ZLOGI(TAG, "======================= init processer ================ ");
  112. ProtocolProcesserMgr::ins()->startSchedule(PublicBoard::ins()->getBoardId());
  113. ZLOGI(TAG, "=");
  114. AppPeriodTaskMgr::ins()->startScheduler();
  115. ZLOGI(TAG, "======================= sysinfo ======================= ");
  116. SysMgr::ins()->initedFinished();
  117. SysMgr::ins()->dumpSysInfo();
  118. ZLOGI(TAG, "=");
  119. zcanbus_send_report(kreport_device_reset, NULL, 0, 100);
  120. MX_IWDG_Init();
  121. while (true) {
  122. osDelay(30);
  123. debug_light_ctrl();
  124. HAL_IWDG_Refresh(&hiwdg);
  125. }
  126. }