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.

222 lines
7.6 KiB

12 months ago
4 weeks ago
12 months ago
12 months ago
4 weeks ago
12 months ago
12 months ago
4 weeks ago
12 months ago
4 weeks ago
12 months ago
4 weeks ago
12 months ago
4 weeks ago
4 weeks ago
12 months ago
4 weeks ago
4 weeks ago
4 weeks ago
4 weeks 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() == EX_H2O2_SENSOR_BOARD) {
  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. // !!!! FOR DEBUG
  96. // m_debugled.initAsOutput(PF9, kxs_gpio_nopull, false, false);
  97. }
  98. void PublicBoard::setDebugLightState(bool state) { m_debugled.write(state); }
  99. void PublicBoard::toggleDebugLight() { m_debugled.toggle(); }
  100. int PublicBoard::getProjId() { return IdMgr::ins().getProjId(getBoardTypeId()); }
  101. int PublicBoard::getBoardTypeId() {
  102. if (getDeviceIdFromFlash() > 0) {
  103. return getDeviceIdFromFlash();
  104. } else {
  105. return 0;
  106. }
  107. }
  108. int PublicBoard::getBoardId() {
  109. if (getBoardTypeId() == EX_H2O2_SENSOR_BOARD) {
  110. int boardIdoff = 0;
  111. static ZGPIO id_from_machine; // 消毒机上的开关
  112. if (!id_from_machine.isInited()) {
  113. id_from_machine.initAsInput(PE8, kxs_gpio_nopull, kxs_gpio_no_irq, false);
  114. }
  115. boardIdoff = id_from_machine.read() ? 1 : 2;
  116. return IdMgr::ins().getBoardId(getBoardTypeId()) + boardIdoff;
  117. } else {
  118. return IdMgr::ins().getBoardId(getBoardTypeId());
  119. }
  120. }
  121. bool PORT::isLargeSpaceDM() { return PublicBoard::ins()->getProjId() == DT600N; }
  122. bool PORT::isSamllSpaceDM() { return PublicBoard::ins()->getProjId() == DT300N; }
  123. bool PORT::isPipeDM() { return PublicBoard::ins()->getProjId() == DT300W; }
  124. bool PORT::isDrawBarDM() { return PublicBoard::ins()->getProjId() == DT100N; }
  125. bool PORT::isH2O2Sensor() { return PublicBoard::ins()->getProjId() == EX_H2O2_SENSOR; }
  126. bool PORT::isDT600B() { return PublicBoard::ins()->getProjId() == DT600B; }
  127. bool PORT::isLiquidCtrlBoard() {
  128. if (PublicBoard::ins()->getBoardTypeId() == DT600N_LC_Board || //
  129. PublicBoard::ins()->getBoardTypeId() == DT300N_LC_Board || //
  130. PublicBoard::ins()->getBoardTypeId() == DT300W_LC_Board || //
  131. PublicBoard::ins()->getBoardTypeId() == DT100N_LC_Board || //
  132. PublicBoard::ins()->getBoardTypeId() == DT600B_LC_BOARD //
  133. ) {
  134. return true;
  135. }
  136. return false;
  137. }
  138. bool PORT::isPowerCtrlBoard() {
  139. if (PublicBoard::ins()->getBoardTypeId() == DT600N_PC_Board || //
  140. PublicBoard::ins()->getBoardTypeId() == DT300N_PC_Board || //
  141. PublicBoard::ins()->getBoardTypeId() == DT300W_PC_Board || //
  142. PublicBoard::ins()->getBoardTypeId() == DT100N_PC_Board || //
  143. PublicBoard::ins()->getBoardTypeId() == DT600B_PC_BOARD //
  144. ) {
  145. return true;
  146. }
  147. return false;
  148. }
  149. void PORT::idtable_init() {
  150. // 大空间ID初始化
  151. IdMgr::ins().addIdItem({DT600N_LC_Board, DT600N, FIXBOARDID_LC_BOARD});
  152. IdMgr::ins().addIdItem({DT600N_PC_Board, DT600N, FIXBOARDID_PC_BOARD});
  153. // 小空间ID初始化
  154. IdMgr::ins().addIdItem({DT300N_LC_Board, DT300N, FIXBOARDID_LC_BOARD});
  155. IdMgr::ins().addIdItem({DT300N_PC_Board, DT300N, FIXBOARDID_PC_BOARD});
  156. // 管道ID初始化
  157. IdMgr::ins().addIdItem({DT300W_LC_Board, DT300W, FIXBOARDID_LC_BOARD});
  158. IdMgr::ins().addIdItem({DT300W_PC_Board, DT300W, FIXBOARDID_PC_BOARD});
  159. // 拉杆箱ID初始化
  160. IdMgr::ins().addIdItem({DT100N_LC_Board, DT100N, FIXBOARDID_LC_BOARD});
  161. IdMgr::ins().addIdItem({DT100N_PC_Board, DT100N, FIXBOARDID_PC_BOARD});
  162. // H2O2传感器ID初始化
  163. IdMgr::ins().addIdItem({EX_H2O2_SENSOR_BOARD, EX_H2O2_SENSOR, FIXBOARDID_H2O2SENSOR_START});
  164. // 小空间经济版
  165. IdMgr::ins().addIdItem({DT600B_LC_BOARD, DT600B, FIXBOARDID_LC_BOARD});
  166. IdMgr::ins().addIdItem({DT600B_PC_BOARD, DT600B, FIXBOARDID_PC_BOARD});
  167. }
  168. namespace iflytop {
  169. bool isBoardType(int32_t val0) {
  170. int boardType = PublicBoard::ins()->getBoardTypeId();
  171. if (boardType == val0) {
  172. return true;
  173. }
  174. return false;
  175. }
  176. bool isBoardType(int32_t val0, int32_t val1) {
  177. int boardType = PublicBoard::ins()->getBoardTypeId();
  178. if (boardType == val0 || boardType == val1) {
  179. return true;
  180. }
  181. return false;
  182. }
  183. bool isBoardType(int32_t val0, int32_t val1, int32_t val2) {
  184. int boardType = PublicBoard::ins()->getBoardTypeId();
  185. if (boardType == val0 || boardType == val1 || boardType == val2) {
  186. return true;
  187. }
  188. return false;
  189. }
  190. bool isBoardType(int32_t val0, int32_t val1, int32_t val2, int32_t val3) {
  191. int boardType = PublicBoard::ins()->getBoardTypeId();
  192. if (boardType == val0 || boardType == val1 || boardType == val2 || boardType == val3) {
  193. return true;
  194. }
  195. return false;
  196. }
  197. } // namespace iflytop