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.

148 lines
4.5 KiB

12 months ago
12 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. MX_IWDG_Init();
  120. while (true) {
  121. osDelay(30);
  122. debug_light_ctrl();
  123. HAL_IWDG_Refresh(&hiwdg);
  124. }
  125. }