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.

219 lines
8.0 KiB

12 months ago
12 months ago
12 months ago
12 months ago
12 months ago
12 months ago
12 months ago
12 months ago
  1. #include "public_board.hpp"
  2. using namespace iflytop;
  3. using namespace transmit_disfection_protocol;
  4. static ZGPIO BID0;
  5. static ZGPIO BID1;
  6. static ZGPIO BID2;
  7. static ZGPIO BID3;
  8. static ZGPIO BID4;
  9. static ZGPIO BID5;
  10. static ZGPIO BID6;
  11. static ZGPIO BID7;
  12. int32_t getDeviceIdFromFlash() {
  13. int32_t *deviceId = (int32_t *)BOARD_TYPE_ID_FLASH_ADD;
  14. if (*deviceId <= 0) {
  15. return 0;
  16. }
  17. return *deviceId;
  18. }
  19. void PublicBoard::debugUartInit(void) {
  20. GPIO_InitTypeDef GPIO_InitStruct = {0};
  21. __HAL_RCC_USART1_CLK_ENABLE();
  22. __HAL_RCC_GPIOA_CLK_ENABLE();
  23. huart1.Instance = USART1;
  24. huart1.Init.BaudRate = 460800;
  25. huart1.Init.WordLength = UART_WORDLENGTH_8B;
  26. huart1.Init.StopBits = UART_STOPBITS_1;
  27. huart1.Init.Parity = UART_PARITY_NONE;
  28. huart1.Init.Mode = UART_MODE_TX_RX;
  29. huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  30. huart1.Init.OverSampling = UART_OVERSAMPLING_16;
  31. if (HAL_UART_Init(&huart1) != HAL_OK) {
  32. Error_Handler();
  33. }
  34. // PA9,PA10
  35. GPIO_InitStruct.Pin = GPIO_PIN_9 | GPIO_PIN_10;
  36. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  37. GPIO_InitStruct.Pull = GPIO_NOPULL;
  38. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
  39. GPIO_InitStruct.Alternate = GPIO_AF7_USART1;
  40. HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  41. }
  42. void PublicBoard::canInit() {
  43. __HAL_RCC_CAN1_CLK_ENABLE();
  44. __HAL_RCC_GPIOA_CLK_ENABLE();
  45. hcan1.Instance = CAN1;
  46. hcan1.Init.Prescaler = 4;
  47. hcan1.Init.Mode = CAN_MODE_NORMAL;
  48. hcan1.Init.SyncJumpWidth = CAN_SJW_3TQ;
  49. hcan1.Init.TimeSeg1 = CAN_BS1_14TQ;
  50. hcan1.Init.TimeSeg2 = CAN_BS2_3TQ;
  51. hcan1.Init.TimeTriggeredMode = ENABLE;
  52. hcan1.Init.AutoBusOff = ENABLE;
  53. hcan1.Init.AutoWakeUp = DISABLE;
  54. hcan1.Init.AutoRetransmission = ENABLE;
  55. hcan1.Init.ReceiveFifoLocked = ENABLE;
  56. hcan1.Init.TransmitFifoPriority = DISABLE;
  57. if (HAL_CAN_Init(&hcan1) != HAL_OK) {
  58. Error_Handler();
  59. }
  60. GPIO_InitTypeDef GPIO_InitStruct = {0};
  61. // PA11 PA12
  62. GPIO_InitStruct.Pin = GPIO_PIN_11 | GPIO_PIN_12;
  63. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  64. GPIO_InitStruct.Pull = GPIO_NOPULL;
  65. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
  66. GPIO_InitStruct.Alternate = GPIO_AF9_CAN1;
  67. HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  68. HAL_NVIC_SetPriority(CAN1_TX_IRQn, 5, 0);
  69. HAL_NVIC_EnableIRQ(CAN1_TX_IRQn);
  70. HAL_NVIC_SetPriority(CAN1_RX0_IRQn, 5, 0);
  71. HAL_NVIC_EnableIRQ(CAN1_RX0_IRQn);
  72. HAL_NVIC_SetPriority(CAN1_RX1_IRQn, 5, 0);
  73. HAL_NVIC_EnableIRQ(CAN1_RX1_IRQn);
  74. HAL_NVIC_SetPriority(CAN1_SCE_IRQn, 5, 0);
  75. HAL_NVIC_EnableIRQ(CAN1_SCE_IRQn);
  76. }
  77. void PublicBoard::initialize() {
  78. // if (getDeviceIdFromFlash() <= 0) {
  79. // BID0.initAsInput(PE1, kxs_gpio_pullup, kxs_gpio_no_irq, false);
  80. // BID1.initAsInput(PE2, kxs_gpio_pullup, kxs_gpio_no_irq, false);
  81. // BID2.initAsInput(PE3, kxs_gpio_pullup, kxs_gpio_no_irq, false);
  82. // BID3.initAsInput(PE4, kxs_gpio_pullup, kxs_gpio_no_irq, false);
  83. // BID4.initAsInput(PE5, kxs_gpio_pullup, kxs_gpio_no_irq, false);
  84. // BID5.initAsInput(PE6, kxs_gpio_pullup, kxs_gpio_no_irq, false);
  85. // BID6.initAsInput(PE7, kxs_gpio_pullup, kxs_gpio_no_irq, false);
  86. // BID7.initAsInput(PE8, kxs_gpio_pullup, kxs_gpio_no_irq, false);
  87. // }
  88. debugUartInit();
  89. canInit();
  90. if (getDeviceIdFromFlash() == kH2O2SensorBoard) {
  91. m_debugled.initAsOutput(H2O2_SENSOR_BOARD_DEBUG_LIGHT_GPIO, kxs_gpio_nopull, false, false);
  92. } else {
  93. m_debugled.initAsOutput(DEBUG_LIGHT_GPIO, kxs_gpio_nopull, false, false);
  94. }
  95. }
  96. void PublicBoard::setDebugLightState(bool state) { m_debugled.write(state); }
  97. void PublicBoard::toggleDebugLight() { m_debugled.toggle(); }
  98. int PublicBoard::getProjId() { return IdMgr::ins().getProjId(getBoardTypeId()); }
  99. int PublicBoard::getBoardTypeId() {
  100. if (getDeviceIdFromFlash() > 0) {
  101. return getDeviceIdFromFlash();
  102. } else {
  103. return 0;
  104. }
  105. }
  106. int PublicBoard::getBoardId() {
  107. if (getBoardTypeId() == kH2O2SensorBoard) {
  108. int boardIdoff = 0;
  109. static ZGPIO id_from_machine; // 消毒机上的开关
  110. if (!id_from_machine.isInited()) {
  111. id_from_machine.initAsInput(PE8, kxs_gpio_nopull, kxs_gpio_no_irq, false);
  112. }
  113. boardIdoff = id_from_machine.read() ? 1 : 2;
  114. return IdMgr::ins().getBoardId(getBoardTypeId()) + boardIdoff;
  115. } else {
  116. return IdMgr::ins().getBoardId(getBoardTypeId());
  117. }
  118. }
  119. bool PORT::isLargeSpaceDM() { return PublicBoard::ins()->getProjId() == klarge_space_disinfection_machine; }
  120. bool PORT::isSamllSpaceDM() { return PublicBoard::ins()->getProjId() == ksmall_space_disinfection_machine; }
  121. bool PORT::isPipeDM() { return PublicBoard::ins()->getProjId() == kpipe_disinfection_machine; }
  122. bool PORT::isDrawBarDM() { return PublicBoard::ins()->getProjId() == kdraw_bar_disinfection_box; }
  123. bool PORT::isH2O2Sensor() { return PublicBoard::ins()->getProjId() == kh2o2_ext_sensor; }
  124. bool PORT::isDT600B() { return PublicBoard::ins()->getProjId() == DT600B; }
  125. bool PORT::isLiquidCtrlBoard() {
  126. if (PublicBoard::ins()->getBoardTypeId() == kLargeSpaceDMLiquidCtrlBoard || //
  127. PublicBoard::ins()->getBoardTypeId() == kSmallSpaceDMLiquidCtrlBoard || //
  128. PublicBoard::ins()->getBoardTypeId() == kPipeDMLiquidCtrlBoard || //
  129. PublicBoard::ins()->getBoardTypeId() == kDrawBarDMLiquidCtrlBoard || //
  130. PublicBoard::ins()->getBoardTypeId() == DT600B_LC_BOARD //
  131. ) {
  132. return true;
  133. }
  134. return false;
  135. }
  136. bool PORT::isPowerCtrlBoard() {
  137. if (PublicBoard::ins()->getBoardTypeId() == kLargeSpaceDMPowerCtrlBoard || //
  138. PublicBoard::ins()->getBoardTypeId() == kSmallSpaceDMPowerCtrlBoard || //
  139. PublicBoard::ins()->getBoardTypeId() == kPipeDMPowerCtrlBoard || //
  140. PublicBoard::ins()->getBoardTypeId() == kDrawBarDMPowerCtrlBoard || //
  141. PublicBoard::ins()->getBoardTypeId() == DT600B_PC_BOARD //
  142. ) {
  143. return true;
  144. }
  145. return false;
  146. }
  147. void PORT::idtable_init() {
  148. // 大空间ID初始化
  149. IdMgr::ins().addIdItem({kLargeSpaceDMLiquidCtrlBoard, klarge_space_disinfection_machine, kFixBoardId_LiquidCtrl});
  150. IdMgr::ins().addIdItem({kLargeSpaceDMPowerCtrlBoard, klarge_space_disinfection_machine, kFixBoardId_PowerControl});
  151. // 小空间ID初始化
  152. IdMgr::ins().addIdItem({kSmallSpaceDMLiquidCtrlBoard, ksmall_space_disinfection_machine, kFixBoardId_LiquidCtrl});
  153. IdMgr::ins().addIdItem({kSmallSpaceDMPowerCtrlBoard, ksmall_space_disinfection_machine, kFixBoardId_PowerControl});
  154. // 管道ID初始化
  155. IdMgr::ins().addIdItem({kPipeDMLiquidCtrlBoard, kpipe_disinfection_machine, kFixBoardId_LiquidCtrl});
  156. IdMgr::ins().addIdItem({kPipeDMPowerCtrlBoard, kpipe_disinfection_machine, kFixBoardId_PowerControl});
  157. // 拉杆箱ID初始化
  158. IdMgr::ins().addIdItem({kDrawBarDMLiquidCtrlBoard, kdraw_bar_disinfection_box, kFixBoardId_LiquidCtrl});
  159. IdMgr::ins().addIdItem({kDrawBarDMPowerCtrlBoard, kdraw_bar_disinfection_box, kFixBoardId_PowerControl});
  160. // H2O2传感器ID初始化
  161. IdMgr::ins().addIdItem({kH2O2SensorBoard, kh2o2_ext_sensor, kFixBoardId_H2O2SensorStart});
  162. // 小空间经济版
  163. IdMgr::ins().addIdItem({DT600B_LC_BOARD, DT600B, kFixBoardId_LiquidCtrl});
  164. IdMgr::ins().addIdItem({DT600B_PC_BOARD, DT600B, kFixBoardId_PowerControl});
  165. }
  166. namespace iflytop {
  167. bool isBoardType(int32_t val0) {
  168. int boardType = PublicBoard::ins()->getBoardTypeId();
  169. if (boardType == val0) {
  170. return true;
  171. }
  172. return false;
  173. }
  174. bool isBoardType(int32_t val0, int32_t val1) {
  175. int boardType = PublicBoard::ins()->getBoardTypeId();
  176. if (boardType == val0 || boardType == val1) {
  177. return true;
  178. }
  179. return false;
  180. }
  181. bool isBoardType(int32_t val0, int32_t val1, int32_t val2) {
  182. int boardType = PublicBoard::ins()->getBoardTypeId();
  183. if (boardType == val0 || boardType == val1 || boardType == val2) {
  184. return true;
  185. }
  186. return false;
  187. }
  188. bool isBoardType(int32_t val0, int32_t val1, int32_t val2, int32_t val3) {
  189. int boardType = PublicBoard::ins()->getBoardTypeId();
  190. if (boardType == val0 || boardType == val1 || boardType == val2 || boardType == val3) {
  191. return true;
  192. }
  193. return false;
  194. }
  195. } // namespace iflytop