From dcf6c30d45db578d2e7e3ad34cb43965ae1642d3 Mon Sep 17 00:00:00 2001 From: zhaohe Date: Sat, 10 Aug 2024 22:27:08 +0800 Subject: [PATCH] init --- usrc/app/dmapp.hpp | 3 +- usrc/app/ext_ch_selector_app.hpp | 3 +- usrc/app/exth2o2_sensor.hpp | 3 +- usrc/board/hal/dbdm_power_ctrl_board.cpp | 57 ++++++ usrc/board/hal/dbdm_power_ctrl_board.hpp | 13 ++ usrc/board/hal/h2o2_ext_board.cpp | 53 +++++ usrc/board/hal/h2o2_ext_board.hpp | 11 + usrc/board/hal/hal.hpp | 6 + .../hal/large_space_dm_liquid_ctrl_board_hal.cpp | 154 ++++++++++++++ .../hal/large_space_dm_liquid_ctrl_board_hal.hpp | 22 ++ usrc/board/hal/large_space_dm_power_ctrl_board.cpp | 146 +++++++++++++ usrc/board/hal/large_space_dm_power_ctrl_board.hpp | 13 ++ .../app_share/air_compressor_controller.hpp | 52 ----- usrc/board_base/app_share/blower_controller.hpp | 147 ------------- usrc/board_base/app_share/h2o2_sensor_driver.cpp | 109 ---------- usrc/board_base/app_share/h2o2_sensor_driver.hpp | 52 ----- usrc/board_base/app_share/heater_controller.hpp | 72 ------- .../app_share/proportional_valve_ctrl.hpp | 55 ----- usrc/board_base/app_share/pxxpsbus.hpp | 49 ----- usrc/board_base/app_share/tmc_motor_group.cpp | 227 --------------------- usrc/board_base/app_share/tmc_motor_group.hpp | 38 ---- usrc/board_base/app_share/warning_light_driver.hpp | 61 ------ usrc/board_base/app_share/water_sensor_mgr.hpp | 29 --- .../board_base/baseboard/dbdm_power_ctrl_board.cpp | 57 ------ .../board_base/baseboard/dbdm_power_ctrl_board.hpp | 13 -- usrc/board_base/baseboard/h2o2_ext_board.cpp | 53 ----- usrc/board_base/baseboard/h2o2_ext_board.hpp | 11 - .../large_space_dm_liquid_ctrl_board_hal.cpp | 154 -------------- .../large_space_dm_liquid_ctrl_board_hal.hpp | 22 -- .../baseboard/large_space_dm_power_ctrl_board.cpp | 146 ------------- .../baseboard/large_space_dm_power_ctrl_board.hpp | 13 -- usrc/board_base/board_base.hpp | 15 -- usrc/module/air_compressor_controller.hpp | 52 +++++ usrc/module/blower_controller.hpp | 147 +++++++++++++ usrc/module/h2o2_sensor_driver.cpp | 109 ++++++++++ usrc/module/h2o2_sensor_driver.hpp | 52 +++++ usrc/module/heater_controller.hpp | 72 +++++++ usrc/module/module.hpp | 11 + usrc/module/proportional_valve_ctrl.hpp | 55 +++++ usrc/module/pxxpsbus.hpp | 49 +++++ usrc/module/tmc_motor_group.cpp | 227 +++++++++++++++++++++ usrc/module/tmc_motor_group.hpp | 38 ++++ usrc/module/warning_light_driver.hpp | 61 ++++++ usrc/module/water_sensor_mgr.hpp | 29 +++ 44 files changed, 1383 insertions(+), 1378 deletions(-) create mode 100644 usrc/board/hal/dbdm_power_ctrl_board.cpp create mode 100644 usrc/board/hal/dbdm_power_ctrl_board.hpp create mode 100644 usrc/board/hal/h2o2_ext_board.cpp create mode 100644 usrc/board/hal/h2o2_ext_board.hpp create mode 100644 usrc/board/hal/hal.hpp create mode 100644 usrc/board/hal/large_space_dm_liquid_ctrl_board_hal.cpp create mode 100644 usrc/board/hal/large_space_dm_liquid_ctrl_board_hal.hpp create mode 100644 usrc/board/hal/large_space_dm_power_ctrl_board.cpp create mode 100644 usrc/board/hal/large_space_dm_power_ctrl_board.hpp delete mode 100644 usrc/board_base/app_share/air_compressor_controller.hpp delete mode 100644 usrc/board_base/app_share/blower_controller.hpp delete mode 100644 usrc/board_base/app_share/h2o2_sensor_driver.cpp delete mode 100644 usrc/board_base/app_share/h2o2_sensor_driver.hpp delete mode 100644 usrc/board_base/app_share/heater_controller.hpp delete mode 100644 usrc/board_base/app_share/proportional_valve_ctrl.hpp delete mode 100644 usrc/board_base/app_share/pxxpsbus.hpp delete mode 100644 usrc/board_base/app_share/tmc_motor_group.cpp delete mode 100644 usrc/board_base/app_share/tmc_motor_group.hpp delete mode 100644 usrc/board_base/app_share/warning_light_driver.hpp delete mode 100644 usrc/board_base/app_share/water_sensor_mgr.hpp delete mode 100644 usrc/board_base/baseboard/dbdm_power_ctrl_board.cpp delete mode 100644 usrc/board_base/baseboard/dbdm_power_ctrl_board.hpp delete mode 100644 usrc/board_base/baseboard/h2o2_ext_board.cpp delete mode 100644 usrc/board_base/baseboard/h2o2_ext_board.hpp delete mode 100644 usrc/board_base/baseboard/large_space_dm_liquid_ctrl_board_hal.cpp delete mode 100644 usrc/board_base/baseboard/large_space_dm_liquid_ctrl_board_hal.hpp delete mode 100644 usrc/board_base/baseboard/large_space_dm_power_ctrl_board.cpp delete mode 100644 usrc/board_base/baseboard/large_space_dm_power_ctrl_board.hpp delete mode 100644 usrc/board_base/board_base.hpp create mode 100644 usrc/module/air_compressor_controller.hpp create mode 100644 usrc/module/blower_controller.hpp create mode 100644 usrc/module/h2o2_sensor_driver.cpp create mode 100644 usrc/module/h2o2_sensor_driver.hpp create mode 100644 usrc/module/heater_controller.hpp create mode 100644 usrc/module/module.hpp create mode 100644 usrc/module/proportional_valve_ctrl.hpp create mode 100644 usrc/module/pxxpsbus.hpp create mode 100644 usrc/module/tmc_motor_group.cpp create mode 100644 usrc/module/tmc_motor_group.hpp create mode 100644 usrc/module/warning_light_driver.hpp create mode 100644 usrc/module/water_sensor_mgr.hpp diff --git a/usrc/app/dmapp.hpp b/usrc/app/dmapp.hpp index acd9f9b..3c68a62 100644 --- a/usrc/app/dmapp.hpp +++ b/usrc/app/dmapp.hpp @@ -1,6 +1,7 @@ #pragma once #include "board/public_board.hpp" -#include "board_base/board_base.hpp" +#include "module/module.hpp" +#include "board/hal/hal.hpp" /** * @brief diff --git a/usrc/app/ext_ch_selector_app.hpp b/usrc/app/ext_ch_selector_app.hpp index 380f48b..91ee8cc 100644 --- a/usrc/app/ext_ch_selector_app.hpp +++ b/usrc/app/ext_ch_selector_app.hpp @@ -1,6 +1,7 @@ #pragma once #include "board/public_board.hpp" -#include "board_base/board_base.hpp" +#include "module/module.hpp" +#include "board/hal/hal.hpp" /** * @brief diff --git a/usrc/app/exth2o2_sensor.hpp b/usrc/app/exth2o2_sensor.hpp index 8ce7cda..e5c3acb 100644 --- a/usrc/app/exth2o2_sensor.hpp +++ b/usrc/app/exth2o2_sensor.hpp @@ -1,6 +1,7 @@ #pragma once +#include "board/hal/hal.hpp" #include "board/public_board.hpp" -#include "board_base/board_base.hpp" +#include "module/module.hpp" /** * @brief diff --git a/usrc/board/hal/dbdm_power_ctrl_board.cpp b/usrc/board/hal/dbdm_power_ctrl_board.cpp new file mode 100644 index 0000000..95297bd --- /dev/null +++ b/usrc/board/hal/dbdm_power_ctrl_board.cpp @@ -0,0 +1,57 @@ +#include "dbdm_power_ctrl_board.hpp" +using namespace iflytop; +void DBDMPowerCtrlBoard::HTIM3_INIT() { + /* USER CODE BEGIN TIM3_Init 0 */ + + /* USER CODE END TIM3_Init 0 */ + + TIM_ClockConfigTypeDef sClockSourceConfig = {0}; + TIM_MasterConfigTypeDef sMasterConfig = {0}; + TIM_OC_InitTypeDef sConfigOC = {0}; + + /* USER CODE BEGIN TIM3_Init 1 */ + + /* USER CODE END TIM3_Init 1 */ + htim3.Instance = TIM3; + htim3.Init.Prescaler = 143; + htim3.Init.CounterMode = TIM_COUNTERMODE_UP; + htim3.Init.Period = 9999; + htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; + htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; + if (HAL_TIM_Base_Init(&htim3) != HAL_OK) { + Error_Handler(); + } + sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; + if (HAL_TIM_ConfigClockSource(&htim3, &sClockSourceConfig) != HAL_OK) { + Error_Handler(); + } + if (HAL_TIM_PWM_Init(&htim3) != HAL_OK) { + Error_Handler(); + } + sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; + sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; + if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK) { + Error_Handler(); + } + sConfigOC.OCMode = TIM_OCMODE_PWM1; + sConfigOC.Pulse = 0; + sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; + sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; + if (HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) { + Error_Handler(); + } + /* USER CODE BEGIN TIM3_Init 2 */ + + /* USER CODE END TIM3_Init 2 */ + __HAL_RCC_GPIOC_CLK_ENABLE(); + /**TIM3 GPIO Configuration + PC8 ------> TIM3_CH3 + */ + GPIO_InitTypeDef GPIO_InitStruct = {0}; + GPIO_InitStruct.Pin = GPIO_PIN_8; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF2_TIM3; + HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); +} \ No newline at end of file diff --git a/usrc/board/hal/dbdm_power_ctrl_board.hpp b/usrc/board/hal/dbdm_power_ctrl_board.hpp new file mode 100644 index 0000000..e748263 --- /dev/null +++ b/usrc/board/hal/dbdm_power_ctrl_board.hpp @@ -0,0 +1,13 @@ +#pragma once +#include +#include + +#include "base/appdep.hpp" + +namespace iflytop { +class DBDMPowerCtrlBoard { + public: + static void HTIM3_INIT(); + private: +}; +} // namespace iflytop \ No newline at end of file diff --git a/usrc/board/hal/h2o2_ext_board.cpp b/usrc/board/hal/h2o2_ext_board.cpp new file mode 100644 index 0000000..5dfbd9b --- /dev/null +++ b/usrc/board/hal/h2o2_ext_board.cpp @@ -0,0 +1,53 @@ +#include "h2o2_ext_board.hpp" + +#include "base/appdep.hpp" + +using namespace iflytop; + +void H2O2ExtBoard::HADC1_INIT() { + static bool inited = false; + if (inited) return; + inited = true; + + __HAL_RCC_ADC1_CLK_ENABLE(); + __HAL_RCC_GPIOC_CLK_ENABLE(); + + ADC_ChannelConfTypeDef sConfig = {0}; + GPIO_InitTypeDef GPIO_InitStruct = {0}; + + hadc1.Instance = ADC1; + hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV2; + hadc1.Init.Resolution = ADC_RESOLUTION_12B; + hadc1.Init.ScanConvMode = DISABLE; + hadc1.Init.ContinuousConvMode = DISABLE; + hadc1.Init.DiscontinuousConvMode = DISABLE; + hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE; + hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; + hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; + hadc1.Init.NbrOfConversion = 1; + hadc1.Init.DMAContinuousRequests = DISABLE; + hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV; + if (HAL_ADC_Init(&hadc1) != HAL_OK) { + Error_Handler(); + } + + /**ADC1 GPIO Configuration + PC0 ------> ADC1_IN10 + PC1 ------> ADC1_IN11 + */ + GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1; + GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; + GPIO_InitStruct.Pull = GPIO_NOPULL; + HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); + + /* ADC1 interrupt Init */ + HAL_NVIC_SetPriority(ADC_IRQn, 5, 0); + HAL_NVIC_EnableIRQ(ADC_IRQn); + + sConfig.Channel = ADC_CHANNEL_0; + sConfig.Rank = 1; + sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES; + if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) { + Error_Handler(); + } +} diff --git a/usrc/board/hal/h2o2_ext_board.hpp b/usrc/board/hal/h2o2_ext_board.hpp new file mode 100644 index 0000000..6c3f679 --- /dev/null +++ b/usrc/board/hal/h2o2_ext_board.hpp @@ -0,0 +1,11 @@ +#pragma once + +#include "base/appdep.hpp" + + +namespace iflytop { +class H2O2ExtBoard { + public: + static void HADC1_INIT(); +}; +} // namespace iflytop \ No newline at end of file diff --git a/usrc/board/hal/hal.hpp b/usrc/board/hal/hal.hpp new file mode 100644 index 0000000..18e2207 --- /dev/null +++ b/usrc/board/hal/hal.hpp @@ -0,0 +1,6 @@ +#pragma once + +#include "dbdm_power_ctrl_board.hpp" +#include "h2o2_ext_board.hpp" +#include "large_space_dm_liquid_ctrl_board_hal.hpp" +#include "large_space_dm_power_ctrl_board.hpp" \ No newline at end of file diff --git a/usrc/board/hal/large_space_dm_liquid_ctrl_board_hal.cpp b/usrc/board/hal/large_space_dm_liquid_ctrl_board_hal.cpp new file mode 100644 index 0000000..fb371ba --- /dev/null +++ b/usrc/board/hal/large_space_dm_liquid_ctrl_board_hal.cpp @@ -0,0 +1,154 @@ +#include "large_space_dm_liquid_ctrl_board_hal.hpp" + +using namespace iflytop; + +#define TAG "LSDM_LCB_HAL" + +void LargeSpaceDMLiquidCtrlBoardHal::HSPI1_INIT() { + __HAL_RCC_SPI1_CLK_ENABLE(); + __HAL_RCC_GPIOA_CLK_ENABLE(); + GPIO_InitTypeDef GPIO_InitStruct = {0}; + + hspi1.Instance = SPI1; + hspi1.Init.Mode = SPI_MODE_MASTER; + hspi1.Init.Direction = SPI_DIRECTION_2LINES; + hspi1.Init.DataSize = SPI_DATASIZE_8BIT; + hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; + hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; + hspi1.Init.NSS = SPI_NSS_SOFT; + hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_128; + hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; + hspi1.Init.TIMode = SPI_TIMODE_DISABLE; + hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; + hspi1.Init.CRCPolynomial = 10; + if (HAL_SPI_Init(&hspi1) != HAL_OK) { + Error_Handler(); + } + /**SPI1 GPIO Configuration + * PA5 ------> SPI1_SCK + * PA6 ------> SPI1_MISO + * PA7 ------> SPI1_MOSI + */ + GPIO_InitStruct.Pin = GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF5_SPI1; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); +} + +void LargeSpaceDMLiquidCtrlBoardHal::HUART3_INIT(int baudrate, uint32_t StopBits) { + __HAL_RCC_USART3_CLK_ENABLE(); + __HAL_RCC_GPIOB_CLK_ENABLE(); + __HAL_RCC_DMA1_CLK_ENABLE(); + + GPIO_InitTypeDef GPIO_InitStruct = {0}; + + huart3.Instance = USART3; + huart3.Init.BaudRate = baudrate; + huart3.Init.WordLength = UART_WORDLENGTH_8B; + huart3.Init.StopBits = StopBits; + huart3.Init.Parity = UART_PARITY_NONE; + huart3.Init.Mode = UART_MODE_TX_RX; + huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE; + huart3.Init.OverSampling = UART_OVERSAMPLING_16; + if (HAL_UART_Init(&huart3) != HAL_OK) { + Error_Handler(); + } + UART_HandleTypeDef* uartHandle = &huart3; + + /* USER CODE BEGIN USART3_MspInit 0 */ + + /* USER CODE END USART3_MspInit 0 */ + /* USART3 clock enable */ + + /**USART3 GPIO Configuration + PB10 ------> USART3_TX + PB11 ------> USART3_RX + */ + GPIO_InitStruct.Pin = GPIO_PIN_10 | GPIO_PIN_11; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF7_USART3; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + + /* USART3 DMA Init */ + /* USART3_RX Init */ + hdma1_stream1.Instance = DMA1_Stream1; + hdma1_stream1.Init.Channel = DMA_CHANNEL_4; + hdma1_stream1.Init.Direction = DMA_PERIPH_TO_MEMORY; + hdma1_stream1.Init.PeriphInc = DMA_PINC_DISABLE; + hdma1_stream1.Init.MemInc = DMA_MINC_ENABLE; + hdma1_stream1.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; + hdma1_stream1.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; + hdma1_stream1.Init.Mode = DMA_NORMAL; + hdma1_stream1.Init.Priority = DMA_PRIORITY_LOW; + hdma1_stream1.Init.FIFOMode = DMA_FIFOMODE_DISABLE; + if (HAL_DMA_Init(&hdma1_stream1) != HAL_OK) { + Error_Handler(); + } + + __HAL_LINKDMA(uartHandle, hdmarx, hdma1_stream1); + + /* USART3_TX Init */ + hdma1_stream3.Instance = DMA1_Stream3; + hdma1_stream3.Init.Channel = DMA_CHANNEL_4; + hdma1_stream3.Init.Direction = DMA_MEMORY_TO_PERIPH; + hdma1_stream3.Init.PeriphInc = DMA_PINC_DISABLE; + hdma1_stream3.Init.MemInc = DMA_MINC_ENABLE; + hdma1_stream3.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; + hdma1_stream3.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; + hdma1_stream3.Init.Mode = DMA_NORMAL; + hdma1_stream3.Init.Priority = DMA_PRIORITY_LOW; + hdma1_stream3.Init.FIFOMode = DMA_FIFOMODE_DISABLE; + if (HAL_DMA_Init(&hdma1_stream3) != HAL_OK) { + Error_Handler(); + } + + __HAL_LINKDMA(uartHandle, hdmatx, hdma1_stream3); + + HAL_NVIC_SetPriority(USART3_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(USART3_IRQn); + + HAL_NVIC_SetPriority(DMA1_Stream1_IRQn, 5, 0); + HAL_NVIC_EnableIRQ(DMA1_Stream1_IRQn); + HAL_NVIC_SetPriority(DMA1_Stream3_IRQn, 5, 0); + HAL_NVIC_EnableIRQ(DMA1_Stream3_IRQn); +} + +void LargeSpaceDMLiquidCtrlBoardHal::HUART2_INIT(int baudrate, uint32_t StopBits) { + __HAL_RCC_USART2_CLK_ENABLE(); + __HAL_RCC_GPIOD_CLK_ENABLE(); + + + GPIO_InitTypeDef GPIO_InitStruct = {0}; + + huart2.Instance = USART2; + huart2.Init.BaudRate = baudrate; + huart2.Init.WordLength = UART_WORDLENGTH_8B; + huart2.Init.StopBits = StopBits; + huart2.Init.Parity = UART_PARITY_NONE; + huart2.Init.Mode = UART_MODE_TX_RX; + huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE; + huart2.Init.OverSampling = UART_OVERSAMPLING_16; + if (HAL_UART_Init(&huart2) != HAL_OK) { + Error_Handler(); + } + + UART_HandleTypeDef* uartHandle = &huart3; + /**USART2 GPIO Configuration + PD5 ------> USART2_TX + PD6 ------> USART2_RX + */ + GPIO_InitStruct.Pin = GPIO_PIN_5 | GPIO_PIN_6; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF7_USART2; + HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); + + /* USART2 interrupt Init */ + HAL_NVIC_SetPriority(USART2_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(USART2_IRQn); +} diff --git a/usrc/board/hal/large_space_dm_liquid_ctrl_board_hal.hpp b/usrc/board/hal/large_space_dm_liquid_ctrl_board_hal.hpp new file mode 100644 index 0000000..db78e55 --- /dev/null +++ b/usrc/board/hal/large_space_dm_liquid_ctrl_board_hal.hpp @@ -0,0 +1,22 @@ +#pragma once +#include +#include + +#include "base/appdep.hpp" + +namespace iflytop { +class LargeSpaceDMLiquidCtrlBoardHal { + public: + static void HSPI1_INIT(); + /** + * @brief + * + * @param baudrate + * @param StopBits UART_STOPBITS_1 UART_STOPBITS_2 + */ + static void HUART3_INIT(int baudrate, uint32_t StopBits); + static void HUART2_INIT(int baudrate, uint32_t StopBits = UART_STOPBITS_1); + + private: +}; +} // namespace iflytop \ No newline at end of file diff --git a/usrc/board/hal/large_space_dm_power_ctrl_board.cpp b/usrc/board/hal/large_space_dm_power_ctrl_board.cpp new file mode 100644 index 0000000..c7cc83f --- /dev/null +++ b/usrc/board/hal/large_space_dm_power_ctrl_board.cpp @@ -0,0 +1,146 @@ +#include "large_space_dm_power_ctrl_board.hpp" + +#include "base/appdep.hpp" + +using namespace iflytop; + +void LargeSpaceDmPowerCtrlBoardHal::HADC1_INIT() { + static bool inited = false; + if (inited) return; + inited = true; + + __HAL_RCC_ADC1_CLK_ENABLE(); + __HAL_RCC_GPIOA_CLK_ENABLE(); + __HAL_RCC_GPIOB_CLK_ENABLE(); + + ADC_ChannelConfTypeDef sConfig = {0}; + GPIO_InitTypeDef GPIO_InitStruct = {0}; + + hadc1.Instance = ADC1; + hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV2; + hadc1.Init.Resolution = ADC_RESOLUTION_12B; + hadc1.Init.ScanConvMode = DISABLE; + hadc1.Init.ContinuousConvMode = DISABLE; + hadc1.Init.DiscontinuousConvMode = DISABLE; + hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE; + hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; + hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; + hadc1.Init.NbrOfConversion = 1; + hadc1.Init.DMAContinuousRequests = DISABLE; + hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV; + if (HAL_ADC_Init(&hadc1) != HAL_OK) { + Error_Handler(); + } + + /**ADC1 GPIO Configuration +PA0-WKUP ------> ADC1_IN0 +PA1 ------> ADC1_IN1 +PA2 ------> ADC1_IN2 +PA3 ------> ADC1_IN3 +PB0 ------> ADC1_IN8 +PB1 ------> ADC1_IN9 +*/ + GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3; + GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; + GPIO_InitStruct.Pull = GPIO_NOPULL; + HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1; + GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; + GPIO_InitStruct.Pull = GPIO_NOPULL; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + + /* ADC1 interrupt Init */ + HAL_NVIC_SetPriority(ADC_IRQn, 5, 0); + HAL_NVIC_EnableIRQ(ADC_IRQn); + + sConfig.Channel = ADC_CHANNEL_0; + sConfig.Rank = 1; + sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES; + if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) { + Error_Handler(); + } +} + +void LargeSpaceDmPowerCtrlBoardHal::HUART2_INIT(int baudrate, uint32_t StopBits) { + __HAL_RCC_USART2_CLK_ENABLE(); + __HAL_RCC_GPIOD_CLK_ENABLE(); + __HAL_RCC_GPIOA_CLK_ENABLE(); + __HAL_RCC_DMA1_CLK_ENABLE(); + + GPIO_InitTypeDef GPIO_InitStruct = {0}; + + huart2.Instance = USART2; + huart2.Init.BaudRate = baudrate; + huart2.Init.WordLength = UART_WORDLENGTH_8B; + huart2.Init.StopBits = StopBits; + huart2.Init.Parity = UART_PARITY_NONE; + huart2.Init.Mode = UART_MODE_TX_RX; + huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE; + huart2.Init.OverSampling = UART_OVERSAMPLING_16; + if (HAL_UART_Init(&huart2) != HAL_OK) { + Error_Handler(); + } + /**USART2 GPIO Configuration + PD5 ------> USART2_TX + PD6 ------> USART2_RX + */ + GPIO_InitStruct.Pin = GPIO_PIN_5 | GPIO_PIN_6; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF7_USART2; + HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); + + /* USART2 interrupt Init */ + HAL_NVIC_SetPriority(USART2_IRQn, 5, 0); + HAL_NVIC_EnableIRQ(USART2_IRQn); + + __HAL_RCC_DMA1_CLK_ENABLE(); + HalUtils::uartdmainit(&huart2, &hdma1_stream5, DMA_CHANNEL_4, &hdma1_stream6, DMA_CHANNEL_4); + HAL_NVIC_SetPriority(DMA1_Stream5_IRQn, 5, 0); + HAL_NVIC_EnableIRQ(DMA1_Stream5_IRQn); + HAL_NVIC_SetPriority(DMA1_Stream6_IRQn, 5, 0); + HAL_NVIC_EnableIRQ(DMA1_Stream6_IRQn); +} + +void LargeSpaceDmPowerCtrlBoardHal::HUART3_INIT(int baudrate, uint32_t StopBits) { + __HAL_RCC_USART3_CLK_ENABLE(); + __HAL_RCC_GPIOB_CLK_ENABLE(); + + GPIO_InitTypeDef GPIO_InitStruct = {0}; + + huart3.Instance = USART3; + huart3.Init.BaudRate = baudrate; + huart3.Init.WordLength = UART_WORDLENGTH_8B; + huart3.Init.StopBits = StopBits; + huart3.Init.Parity = UART_PARITY_NONE; + huart3.Init.Mode = UART_MODE_TX_RX; + huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE; + huart3.Init.OverSampling = UART_OVERSAMPLING_16; + if (HAL_UART_Init(&huart3) != HAL_OK) { + Error_Handler(); + } + /**USART3 GPIO Configuration + PB10 ------> USART3_TX + PB11 ------> USART3_RX + */ + GPIO_InitStruct.Pin = GPIO_PIN_10 | GPIO_PIN_11; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF7_USART3; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + + HAL_NVIC_SetPriority(USART3_IRQn, 5, 0); + HAL_NVIC_EnableIRQ(USART3_IRQn); + + /* DMA controller clock enable */ + + __HAL_RCC_DMA1_CLK_ENABLE(); + HalUtils::uartdmainit(&huart3, &hdma1_stream1, DMA_CHANNEL_4, &hdma1_stream3, DMA_CHANNEL_4); + HAL_NVIC_SetPriority(DMA1_Stream1_IRQn, 5, 0); + HAL_NVIC_EnableIRQ(DMA1_Stream1_IRQn); + HAL_NVIC_SetPriority(DMA1_Stream3_IRQn, 5, 0); + HAL_NVIC_EnableIRQ(DMA1_Stream3_IRQn); +} diff --git a/usrc/board/hal/large_space_dm_power_ctrl_board.hpp b/usrc/board/hal/large_space_dm_power_ctrl_board.hpp new file mode 100644 index 0000000..1f90859 --- /dev/null +++ b/usrc/board/hal/large_space_dm_power_ctrl_board.hpp @@ -0,0 +1,13 @@ +#pragma once + +#include "base/appdep.hpp" + + +namespace iflytop { +class LargeSpaceDmPowerCtrlBoardHal { + public: + static void HADC1_INIT(); + static void HUART2_INIT(int baudrate, uint32_t StopBits); + static void HUART3_INIT(int baudrate, uint32_t StopBits); +}; +} // namespace iflytop \ No newline at end of file diff --git a/usrc/board_base/app_share/air_compressor_controller.hpp b/usrc/board_base/app_share/air_compressor_controller.hpp deleted file mode 100644 index 1c16e17..0000000 --- a/usrc/board_base/app_share/air_compressor_controller.hpp +++ /dev/null @@ -1,52 +0,0 @@ -#pragma once -#include "base/appdep.hpp" - -namespace iflytop { -using namespace zscanprotocol; -using namespace transmit_disfection_protocol; - -class AirCompressorController { - ZGPIO m_ctrlGpio; - ZADC m_iAdc; - bool m_isInitialized = false; - - public: - static AirCompressorController* ins() { - static AirCompressorController instance; - return &instance; - } - - void initialize(Pin_t ctrlGpio, ADC_HandleTypeDef* iadc, uint32_t ich) { - ZASSERT(!m_isInitialized); - m_ctrlGpio.initAsOutput(ctrlGpio, kxs_gpio_nopull, true, false); - m_iAdc.initialize("AirComAdc", iadc, ich); - m_isInitialized = true; - - AppPeriodTaskMgr::ins()->regTask("AC-ADC", [this]() { periodTask(); }, 1000); - // BIND - BIND_FN(AirCompressorController, this, fn_air_compressor_ctrl); - BIND_FN(AirCompressorController, this, fn_air_compressor_ctrl_safe_valve); - BIND_FN(AirCompressorController, this, fn_air_compressor_read_ei); - BIND_FN(AirCompressorController, this, fn_air_compressor_read_ei_adc_raw); - } - bool isInitialized() { return m_isInitialized; } - - public: - void open(bool val) { m_ctrlGpio.write(val); } - - private: - // PP - void fn_air_compressor_ctrl(ProcessContext* cxt) { // - m_ctrlGpio.write(GET_PARAM(0)); - zcanbus_send_ack(cxt->packet, NULL, 0); - } - void fn_air_compressor_ctrl_safe_valve(ProcessContext* cxt) { zcanbus_send_ack(cxt->packet, NULL, 0); } - void fn_air_compressor_read_ei(ProcessContext* cxt) { zcanbus_send_ack(cxt->packet, airCompressorAdcToCurrent(m_iAdc.getCacheVal())); } - void fn_air_compressor_read_ei_adc_raw(ProcessContext* cxt) { zcanbus_send_ack(cxt->packet, m_iAdc.getCacheVal()); } - - private: - void periodTask() { m_iAdc.updateAdcValToCache(); } -}; -} // namespace iflytop - -#pragma once diff --git a/usrc/board_base/app_share/blower_controller.hpp b/usrc/board_base/app_share/blower_controller.hpp deleted file mode 100644 index 1589de8..0000000 --- a/usrc/board_base/app_share/blower_controller.hpp +++ /dev/null @@ -1,147 +0,0 @@ -#pragma once -#include "base/appdep.hpp" - -namespace iflytop { -using namespace transmit_disfection_protocol; - -typedef enum { - kIOBlower, - kHighPowerUartBlower, - kMiniPwmBlower, -} BlowerType_t; - -class BlowerController { - BlowerType_t m_blowerType = kIOBlower; - - // kIOBlower - ZGPIO m_ctrlGpio; - - // kHighPowerUartBlower - ModbusBlockHost m_modbusblock; - - // kMiniPwmBlower - TIM_HandleTypeDef* m_miniPwmBlower_htim; - uint32_t m_miniPwmBlower_channle; - ZGPIO m_miniPwmBlower_enGpio; - ZGPIO m_miniPwmBlower_fbGpio; - - ZADC m_iadc; - bool m_iadcIsInit = false; - - bool m_isInitialized = false; - - public: - void initialize(Pin_t ctrlGpio, ADC_HandleTypeDef* iadc, uint32_t ich) { - m_ctrlGpio.initAsOutput(ctrlGpio, kxs_gpio_nopull, true, false); - m_iadc.initialize("Blower-iadc", iadc, ich); - AppPeriodTaskMgr::ins()->regTask("AC-ADC", [this]() { periodTask(); }, 1000); - m_blowerType = kIOBlower; - m_isInitialized = true; - bindFn(); - } - - void initializeAsHighPowerUartBlower(UART_HandleTypeDef* huart, ADC_HandleTypeDef* iadc, uint32_t ich) { - m_modbusblock.initialize(huart); - m_iadc.initialize("Blower-iadc", iadc, ich); - AppPeriodTaskMgr::ins()->regTask("AC-ADC", [this]() { periodTask(); }, 1000); - m_blowerType = kHighPowerUartBlower; - m_isInitialized = true; - bindFn(); - } - void initializeAsMiniPwmBlower(TIM_HandleTypeDef* htim, uint32_t channel, Pin_t enGpio, Pin_t fbGpio) { - m_miniPwmBlower_htim = htim; - m_miniPwmBlower_channle = channel; - m_miniPwmBlower_enGpio.initAsOutput(enGpio, kxs_gpio_nopull, true, false); - m_miniPwmBlower_fbGpio.initAsInput(fbGpio, kxs_gpio_nopull, kxs_gpio_rising_irq, false); - AppPeriodTaskMgr::ins()->regTask("AC-ADC", [this]() { periodTask(); }, 1000); - m_blowerType = kMiniPwmBlower; - m_isInitialized = true; - bindFn(); - } - - bool isInitialized() { return m_isInitialized; } - - void bindFn() { - BIND_FN(BlowerController, this, fn_blower_ctrl); - BIND_FN(BlowerController, this, fn_blower_ctrl_safe_valve); - BIND_FN(BlowerController, this, fn_blower_read_ei); - BIND_FN(BlowerController, this, fn_blower_is_error); - BIND_FN(BlowerController, this, fn_blower_read_ei_adc_raw); - } - - /*********************************************************************************************************************** - * FN * - ***********************************************************************************************************************/ - void blower_ctrl(int32_t val) { - if (m_blowerType == kIOBlower) { - m_ctrlGpio.write(val); - } else if (m_blowerType == kHighPowerUartBlower) { - if (val > 0) { - m_modbusblock.writeReg06(1, 0x2000, 1, 100); - } else { - m_modbusblock.writeReg06(1, 0x2000, 6, 100); - } - } else if (m_blowerType == kMiniPwmBlower) { - mini_pwm_blower_ctrl(val); - } - } - void blower_ctrl_safe_valve(int32_t val) {} - int32_t blower_read_ei() { - if (m_blowerType == kIOBlower || m_blowerType == kHighPowerUartBlower) { - return blowserAdcToCurrent(m_iadc.getCacheVal()); - } - return 0; - } - int32_t blower_read_iadc() { - if (m_blowerType == kIOBlower || m_blowerType == kHighPowerUartBlower) { - return m_iadc.getCacheVal(); - } - return 0; - } - - int32_t blower_is_error() { - // TODO: 栏杆箱消毒机添加故障检测 - return 0; - } - - void periodTask() { - if (m_iadc.isInited()) m_iadc.updateAdcValToCache(); - } - - /*********************************************************************************************************************** - * PP * - ***********************************************************************************************************************/ - void fn_blower_ctrl(ProcessContext* cxt) { // - blower_ctrl(GET_PARAM(0)); - zcanbus_send_ack(cxt->packet, NULL, 0); - } - void fn_blower_ctrl_safe_valve(ProcessContext* cxt) { // - blower_ctrl_safe_valve(GET_PARAM(0)); - zcanbus_send_ack(cxt->packet, NULL, 0); - } - void fn_blower_read_ei(ProcessContext* cxt) { zcanbus_send_ack(cxt->packet, blower_read_ei()); } - void fn_blower_read_ei_adc_raw(ProcessContext* cxt) { zcanbus_send_ack(cxt->packet, m_iadc.getCacheVal()); } - void fn_blower_is_error(ProcessContext* cxt) { zcanbus_send_ack(cxt->packet, blower_is_error()); } - - private: - void mini_pwm_blower_ctrl(int32_t duty) { - duty = 100 - duty; - if (duty < 0) duty = 0; - if (duty > 100) duty = 100; - - TIM_OC_InitTypeDef sConfigOC = {0}; - sConfigOC.OCMode = TIM_OCMODE_PWM1; - sConfigOC.Pulse = duty / 100.0 * __HAL_TIM_GET_AUTORELOAD(m_miniPwmBlower_htim); - sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; - sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; - sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; - sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; - - HAL_TIM_PWM_ConfigChannel(m_miniPwmBlower_htim, &sConfigOC, m_miniPwmBlower_channle); - HAL_TIM_PWM_Stop(m_miniPwmBlower_htim, m_miniPwmBlower_channle); - HAL_TIM_PWM_Start(m_miniPwmBlower_htim, m_miniPwmBlower_channle); - - m_miniPwmBlower_enGpio.write(duty != 0); - } -}; -} // namespace iflytop diff --git a/usrc/board_base/app_share/h2o2_sensor_driver.cpp b/usrc/board_base/app_share/h2o2_sensor_driver.cpp deleted file mode 100644 index 3f464e8..0000000 --- a/usrc/board_base/app_share/h2o2_sensor_driver.cpp +++ /dev/null @@ -1,109 +0,0 @@ -#include "h2o2_sensor_driver.hpp" - -#include "zsdk/zcanreceiver/zcanreceiver.hpp" -using namespace iflytop; - -#define TAG "LSDMPowerCtrlBoard" -using namespace transmit_disfection_protocol; - -static osThreadId H2O2CaptureThreadId; -/*********************************************************************************************************************** - * FUNC * - ***********************************************************************************************************************/ -static void c_onH2O2CaptureThread(void const* argument) { - H2O2SensorDriver* driver = (H2O2SensorDriver*)argument; - driver->onH2O2CaptureThread(); -} - -void H2O2SensorDriver::initialize(UART_HandleTypeDef* huart, ADC_HandleTypeDef* hadc, int32_t adcChannel) { - ZASSERT(huart->Init.BaudRate == 19200); - ZASSERT(huart->Init.StopBits == UART_STOPBITS_2); - - m_ModbusBlockHost.initialize(huart); - m_H2O2Adc.initialize("H2O2Adc", hadc, adcChannel); - m_HMP110.init(&m_ModbusBlockHost); - - m_detectId = 240; - if (m_HMP110.ping(1)) { - ZLOGI(TAG, "H2O2 HMP110 Sensor detect id: 1"); - m_detectId = 1; - } - if (m_HMP110.ping(240)) { - m_detectId = 240; - } - m_HMP110.setid(m_detectId); - // ZLOGI(TAG, "H2O2 HMP110 Sensor detect id: %d", m_detectId); - - osThreadDef(H2O2CaptureThread, c_onH2O2CaptureThread, osPriorityNormal, 0, 1024); - H2O2CaptureThreadId = osThreadCreate(osThread(H2O2CaptureThread), this); - m_isInitialized = true; - - BIND_FN(H2O2SensorDriver, this, fn_h2o2_sensor_read_calibration_date); - BIND_FN(H2O2SensorDriver, this, fn_h2o2_sensor_read_sub_ic_errorcode); - BIND_FN(H2O2SensorDriver, this, fn_h2o2_sensor_read_sub_ic_reg); -} - -/*********************************************************************************************************************** - * H2O2 * - ***********************************************************************************************************************/ - -bool H2O2SensorDriver::h2o2_sensor_is_online() { - if (m_detectId <= 0) return false; - int32_t ecode = m_HMP110.read_cache_errorcode(); - if (ecode == -1) return false; - return true; -} -int32_t H2O2SensorDriver::h2o2_sensor_read_calibration_date(int32_t* year, int32_t* month, int32_t* day) { // - *year = 1; - *month = 2; - *day = 3; - return 0; -} -int32_t H2O2SensorDriver::h2o2_sensor_read_sub_ic_errorcode() { // - return m_HMP110.read_cache_errorcode(); -} -int32_t H2O2SensorDriver::h2o2_sensor_read_sub_ic_reg(int32_t add, uint16_t* val, size_t len) { // - return m_HMP110.read_reg(add, val, len); -} -int32_t H2O2SensorDriver::h2o2_sensor_data(report_h2o2_data_t* readdata) { - HMP110::hmp110_sensordata_t sensordata; - int h2o2adcData = 0; - - h2o2adcData = m_H2O2Adc.getCacheVal(); - m_HMP110.read_cache_sensor_data(&sensordata); - - if (m_detectId > 0) { - readdata->sensor_error = m_HMP110.read_cache_errorcode() != 0; - } else { - readdata->sensor_error = 1; - } - readdata->h2o2 = h2o2adcToPPM(h2o2adcData); - readdata->h2o2adc = h2o2adcData; - readdata->humid = sensordata.rh; - readdata->temp = sensordata.temp; - readdata->saturation = 0; - ZLOGI(TAG, "ppm:%d(adc:%d), rh:%d, temp:%d, df_ptemp:%d, ah:%d, mr:%d, wbt:%d, eh:%d", // - readdata->h2o2, // - h2o2adcData, // - sensordata.rh, // - sensordata.temp, // - sensordata.df_ptemp, // - sensordata.ah, // - sensordata.mr, // - sensordata.wet_bulb_temp, // - sensordata.enthalpy); - return 0; -} - -void H2O2SensorDriver::onH2O2CaptureThread() { - while (1) { - osDelay(5000); - m_H2O2Adc.updateAdcValToCache(); - m_HMP110.updateSensorDataAndErrorcode(); - - static report_h2o2_data_t data; - memset(&data, 0, sizeof(data)); - h2o2_sensor_data(&data); - if (gEnableReportFlag) zcanbus_send_report(kreport_h2o2_sensor_data, (uint8_t*)&data, sizeof(data), 30); - } -} \ No newline at end of file diff --git a/usrc/board_base/app_share/h2o2_sensor_driver.hpp b/usrc/board_base/app_share/h2o2_sensor_driver.hpp deleted file mode 100644 index d64ddaf..0000000 --- a/usrc/board_base/app_share/h2o2_sensor_driver.hpp +++ /dev/null @@ -1,52 +0,0 @@ -#pragma once -#include "base/appdep.hpp" - -namespace iflytop { -using namespace transmit_disfection_protocol; - -class H2O2SensorDriver { - public: - ModbusBlockHost m_ModbusBlockHost; // - ZADC m_H2O2Adc; // H2O2传感器控制 - HMP110 m_HMP110; // H2O2传感器 - int32_t m_detectId = -1; - bool m_isInitialized = false; - - public: - void initialize(UART_HandleTypeDef* huart, ADC_HandleTypeDef* hadc, int32_t adcChannel); - bool isInitialized() { return m_isInitialized; } - - bool h2o2_sensor_is_online(); - int32_t h2o2_sensor_read_calibration_date(int32_t* year, int32_t* month, int32_t* day); - int32_t h2o2_sensor_read_sub_ic_errorcode(); - int32_t h2o2_sensor_read_sub_ic_reg(int32_t add, uint16_t* val, size_t len); - int32_t h2o2_sensor_data(report_h2o2_data_t* sensorData); - - private: - // PP - void fn_h2o2_sensor_read_calibration_date(ProcessContext* cxt) { - int32_t data[3]; - h2o2_sensor_read_calibration_date(&data[0], &data[1], &data[2]); - zcanbus_send_ack(cxt->packet, (uint8_t*)&data, sizeof(data)); - } - void fn_h2o2_sensor_read_sub_ic_errorcode(ProcessContext* cxt) { - int32_t ecode = h2o2_sensor_read_sub_ic_errorcode(); - zcanbus_send_ack(cxt->packet, (uint8_t*)&ecode, sizeof(ecode)); - } - void fn_h2o2_sensor_read_sub_ic_reg(ProcessContext* cxt) { - int32_t addr = GET_PARAM(0); - int32_t regNum = GET_PARAM(1); - if (regNum > 10) regNum = 10; // 最多读10个寄存器 - static uint16_t data[10]; - memset(data, 0, sizeof(data)); - - h2o2_sensor_read_sub_ic_reg(addr, data, regNum); - zcanbus_send_ack(cxt->packet, (uint8_t*)&data, regNum * 2); - } - - public: - void onH2O2CaptureThread(); - - private: -}; -} // namespace iflytop \ No newline at end of file diff --git a/usrc/board_base/app_share/heater_controller.hpp b/usrc/board_base/app_share/heater_controller.hpp deleted file mode 100644 index 321f461..0000000 --- a/usrc/board_base/app_share/heater_controller.hpp +++ /dev/null @@ -1,72 +0,0 @@ -#pragma once -#include "base/appdep.hpp" - -namespace iflytop { -using namespace transmit_disfection_protocol; - -class HeaterController { - ZGPIO m_ctrlGpio; - ZADC m_iAdc; - ZADC m_tempAdc; - bool m_isInitialized = false; - - public: - void initialize(Pin_t ctrlGpio, ADC_HandleTypeDef* iadc, uint32_t ich, ADC_HandleTypeDef* tadc, uint32_t tch) { - m_ctrlGpio.initAsOutput(ctrlGpio, kxs_gpio_nopull, true, false); - m_iAdc.initialize("heater-idac", iadc, ich); - m_tempAdc.initialize("heater-tadc", iadc, tch); - m_isInitialized = true; - AppPeriodTaskMgr::ins()->regTask("Heater-ADC", [this]() { periodTask(); }, 1000); - - BIND_FN(HeaterController, this, fn_heater_ctrl); - BIND_FN(HeaterController, this, fn_heater_ctrl_safe_valve); - BIND_FN(HeaterController, this, fn_heater_read_ei); - BIND_FN(HeaterController, this, fn_heater_read_temperature_data); - BIND_FN(HeaterController, this, fn_heater_read_ei_adc_raw); - BIND_FN(HeaterController, this, fn_heater_read_temperature_data_adc_raw); - } - - bool isInitialized() { return m_isInitialized; } - - void heater_ctrl(int32_t val) { m_ctrlGpio.write(val); } - void heater_ctrl_safe_valve(int32_t val) {} - int32_t heater_read_temperature_data() { return heaterAdc2Temp(m_tempAdc.getCacheVal()); } - int32_t heater_read_ei() { return hearterAdcToCurrent(m_iAdc.getCacheVal()); } - int32_t heater_read_iadc() { return m_iAdc.getCacheVal(); } - int32_t heater_read_tadc() { return m_tempAdc.getCacheVal(); } - - // PP - void fn_heater_ctrl(ProcessContext* cxt) { // - heater_ctrl(GET_PARAM(0)); - zcanbus_send_ack(cxt->packet, NULL, 0); - } - void fn_heater_ctrl_safe_valve(ProcessContext* cxt) { // - heater_ctrl_safe_valve(GET_PARAM(0)); - zcanbus_send_ack(cxt->packet, NULL, 0); - } - void fn_heater_read_ei(ProcessContext* cxt) { // - auto val = heater_read_ei(); - zcanbus_send_ack(cxt->packet, (uint8_t*)&val, sizeof(val)); - } - void fn_heater_read_temperature_data(ProcessContext* cxt) { // - auto val = heater_read_temperature_data(); - zcanbus_send_ack(cxt->packet, (uint8_t*)&val, sizeof(val)); - } - - void fn_heater_read_ei_adc_raw(ProcessContext* cxt) { // - auto val = m_iAdc.getCacheVal(); - zcanbus_send_ack(cxt->packet, (uint8_t*)&val, sizeof(val)); - } - - void fn_heater_read_temperature_data_adc_raw(ProcessContext* cxt) { // - auto val = m_tempAdc.getCacheVal(); - zcanbus_send_ack(cxt->packet, (uint8_t*)&val, sizeof(val)); - } - - private: - void periodTask() { - m_iAdc.updateAdcValToCache(); - m_tempAdc.updateAdcValToCache(); - } -}; -} // namespace iflytop \ No newline at end of file diff --git a/usrc/board_base/app_share/proportional_valve_ctrl.hpp b/usrc/board_base/app_share/proportional_valve_ctrl.hpp deleted file mode 100644 index dd12080..0000000 --- a/usrc/board_base/app_share/proportional_valve_ctrl.hpp +++ /dev/null @@ -1,55 +0,0 @@ -#pragma once -#include "base/appdep.hpp" -#include "zsdk/preportional_valve/preportional_valve_ctrl.hpp" -namespace iflytop { -using namespace transmit_disfection_protocol; - -class ProportionalValveCtrl { - PreportionalValveCtrl valve; - bool m_isInitialized = false; - - public: - void initialize(UART_HandleTypeDef* huart) { - valve.initialize(huart); - m_isInitialized = true; - - BIND_FN(ProportionalValveCtrl, this, fn_proportional_set_valve); - BIND_FN(ProportionalValveCtrl, this, fn_proportional_read_pos); - BIND_FN(ProportionalValveCtrl, this, fn_proportional_is_busy); - } - - bool isInitialized() { return m_isInitialized; } - - private: - void fn_proportional_set_valve(ProcessContext* cxt) { - int32_t err = valve.setValvePos(GET_PARAM(0), GET_PARAM(1)); - if (err) { - zcanbus_send_errorack(cxt->packet, err); - } else { - zcanbus_send_ack(cxt->packet, NULL, 0); - } - } - - void fn_proportional_read_pos(ProcessContext* cxt) { - int32_t pos = 0; - int32_t err = valve.getValvePos(GET_PARAM(0), &pos); - if (err) { - zcanbus_send_errorack(cxt->packet, err); - } else { - zcanbus_send_ack(cxt->packet, (uint8_t*)&pos, sizeof(pos)); - } - } - - void fn_proportional_is_busy(ProcessContext* cxt) { - int32_t busy = 0; - int32_t err = valve.isBusy(GET_PARAM(0), &busy); - if (err) { - zcanbus_send_errorack(cxt->packet, err); - } else { - zcanbus_send_ack(cxt->packet, (uint8_t*)&busy, sizeof(busy)); - } - } - - private: -}; -} // namespace iflytop \ No newline at end of file diff --git a/usrc/board_base/app_share/pxxpsbus.hpp b/usrc/board_base/app_share/pxxpsbus.hpp deleted file mode 100644 index ecafa78..0000000 --- a/usrc/board_base/app_share/pxxpsbus.hpp +++ /dev/null @@ -1,49 +0,0 @@ -#pragma once -#include "base/appdep.hpp" - -namespace iflytop { -using namespace transmit_disfection_protocol; - -class PXXPSBus { - PXXPressureSensorBus psbus; - bool m_isInitialized = false; - - public: - void initialize(UART_HandleTypeDef* huart) { - psbus.init(huart); - m_isInitialized = true; - BIND_FN(PXXPSBus, this, fn_psbus_read_data); - BIND_FN(PXXPSBus, this, fn_psbus_scan); - } - bool isInitialized() { return m_isInitialized; } - - private: - void fn_psbus_read_data(ProcessContext* cxt) { - CHECK_PARAM_LEN(PRAAM_LEN(), 1); - int32_t index = GET_PARAM(0); - - int16_t val = 0; - int32_t reportVal = 0; - bool suc = psbus.readData(index, &val); - - reportVal = val; - - if (suc) { - zcanbus_send_ack(cxt->packet, (uint8_t*)&reportVal, sizeof(reportVal)); - } else { - zcanbus_send_errorack(cxt->packet, kerr_subdevice_offline); - } - } - void fn_psbus_scan(ProcessContext* cxt) { - auto* sensors = psbus.sensors; - int numSensor = psbus.sensorNum; - - ack_psbus_scan_t result = {0}; - result.numOnlineId = numSensor; - for (int i = 0; i < numSensor; i++) { - result.onlineId[i] = sensors[i].id; - } - zcanbus_send_ack(cxt->packet, (uint8_t*)&result, sizeof(result)); - } -}; -} // namespace iflytop \ No newline at end of file diff --git a/usrc/board_base/app_share/tmc_motor_group.cpp b/usrc/board_base/app_share/tmc_motor_group.cpp deleted file mode 100644 index 2eb1557..0000000 --- a/usrc/board_base/app_share/tmc_motor_group.cpp +++ /dev/null @@ -1,227 +0,0 @@ -#include "tmc_motor_group.hpp" -using namespace iflytop; -#define TAG "TmcMotorGroup" - -/*********************************************************************************************************************** - * 电机异常监控 * - ***********************************************************************************************************************/ -static osTimerId MotorMonitorTimerId; // 压力传感器数值上报 -static bool motorErrorFlagCache[10]; // 电机异常状态上报标志位 -static zmutex motorErrorFlagCacheLock; -static TmcMotorGroup* tmcgroup_p; - -static bool motorErrorFlag_get(int subindex) { - bool ret; - { - zlock_guard guard(motorErrorFlagCacheLock); - ret = motorErrorFlagCache[subindex]; - } - return ret; -} - -static void motorErrorFlag_set(int subindex, bool val) { - { - zlock_guard guard(motorErrorFlagCacheLock); - motorErrorFlagCache[subindex] = val; - } -} - -static void onMotorMonitorTimer(void const* argument) { - // ZLOGI(TAG, "x MotorMonitorTimerId: %p", argument); - // return; - - // return; - // 电机异常检查 - TmcMotorGroup* DEVICE = (TmcMotorGroup*)tmcgroup_p; - report_exeception_data_t data; - for (size_t i = 0; i < DEVICE->motorNum(); i++) { - // ZLOGI(TAG, "check motor %d", i); - bool estate = motorErrorFlag_get(i); - - if (!DEVICE->motor(i)->ping()) { - data.subid = i; - data.ecode = kerr_motor_subdevice_offline; - - if (!estate) { - motorErrorFlag_set(i, true); - ZLOGE(TAG, "motor %d offline error", i); - zcanbus_send_emergency_report(kreport_exception_error, (uint8_t*)&data, sizeof(data), 100); - } - } else { - auto gstate = DEVICE->motor(i)->getGState(); - bool flag = gstate.reset || gstate.drv_err || gstate.uv_cp; - if (!flag && estate) { - motorErrorFlag_set(i, false); - } else if (flag && !estate) { - ZLOGE(TAG, "motor %d error, reset %d, drv_err %d, uv_cp %d", i, gstate.reset, gstate.drv_err, gstate.uv_cp); - if (gstate.reset) { - data.ecode = kerr_motor_reset_error; - } else if (gstate.uv_cp) { - data.ecode = kerr_motor_undervoltage_error; - } else if (gstate.drv_err) { - data.ecode = kerr_motor_driver_error; - } else { - data.ecode = kerr_motor_unkown_error; - } - data.subid = i; - motorErrorFlag_set(i, true); - zcanbus_send_emergency_report(kreport_exception_error, (uint8_t*)&data, sizeof(data), 100); - } - } - } -} - -void TmcMotorGroup::initialize(Pin_t tmcPowerPin, TMC51X0Cfg cfg0, TMC51X0Cfg cfg1) { - m_tmc_power_pin.initAsOutput(tmcPowerPin, kxs_gpio_nopull, true, false); - osDelay(100); - m_tmc_power_pin.write(true); - // PB2 - - m_motor[0].initialize(cfg0); - m_motor[0].setIHOLD_IRUN(1, 28, 0); - m_motor[0].setMotorShaft(true); - - m_motor[1].initialize(cfg1); - m_motor[1].setIHOLD_IRUN(1, 28, 0); - m_motor[1].setMotorShaft(true); - - int32_t chipv0 = m_motor[0].readICVersion(); // 5130:0x11 - int32_t chipv1 = m_motor[1].readICVersion(); // 5130:0x11 - // m_motor[0].rotate(500000); - // m_motor[1].rotate(500000); - ZLOGI(TAG, "chipv0: %x, chipv1: %x", chipv0, chipv1); - - auto gstate0 = m_motor[0].getGState(); - auto gstate1 = m_motor[1].getGState(); - - ZLOGI(TAG, "motor0: reset:%d drv_err:%d uv_cp:%d", gstate0.reset, gstate0.drv_err, gstate0.uv_cp); - ZLOGI(TAG, "motor1: reset:%d drv_err:%d uv_cp:%d", gstate1.reset, gstate1.drv_err, gstate1.uv_cp); - - gstate0 = m_motor[0].getGState(); - gstate1 = m_motor[1].getGState(); - - ZLOGI(TAG, "motor0: reset:%d drv_err:%d uv_cp:%d", gstate0.reset, gstate0.drv_err, gstate0.uv_cp); - ZLOGI(TAG, "motor1: reset:%d drv_err:%d uv_cp:%d", gstate1.reset, gstate1.drv_err, gstate1.uv_cp); - - motorErrorFlagCacheLock.init(); - tmcgroup_p = this; - osTimerDef(MotorMonitorTimer, onMotorMonitorTimer); - MotorMonitorTimerId = osTimerCreate(osTimer(MotorMonitorTimer), osTimerPeriodic, this); - ZLOGI(TAG, "MotorMonitorTimerId: %p", this); - osTimerStart(MotorMonitorTimerId, 1000); - m_isInitialized = true; - - BIND_FN(TmcMotorGroup, this, fn_pump_rotate); - BIND_FN(TmcMotorGroup, this, fn_pump_stop); - BIND_FN(TmcMotorGroup, this, fn_pump_set_ihold_irun_idelay); - BIND_FN(TmcMotorGroup, this, fn_pump_set_acc); - BIND_FN(TmcMotorGroup, this, fn_pump_set_ramp); - BIND_FN(TmcMotorGroup, this, fn_pump_set_tzw); - BIND_FN(TmcMotorGroup, this, fn_pump_set_subic_reg); - BIND_FN(TmcMotorGroup, this, fn_pump_get_subic_reg); - BIND_FN(TmcMotorGroup, this, fn_pump_ping); -} - -#define MOTOR_CHECK() \ - if (GET_PARAM(0) >= motorNum()) { \ - zcanbus_send_errorack(cxt->packet, kerr_invalid_param); \ - return; \ - } \ - if (!motor(GET_PARAM(0))->ping()) { \ - zcanbus_send_errorack(cxt->packet, kerr_motor_subdevice_offline); \ - return; \ - } - -void TmcMotorGroup::fn_pump_rotate(ProcessContext* cxt) { - CHECK_PARAM_LEN(PRAAM_LEN(), 2); - MOTOR_CHECK(); - - int32_t velocity = GET_PARAM(1); - - ZLOGI(TAG, "pump_rotate: %d %d", GET_PARAM(0), velocity); - - motor(GET_PARAM(0))->enable(false); - motor(GET_PARAM(0))->enable(true); - motor(GET_PARAM(0))->moveToEnd(velocity > 0 ? 1 : -1, abs(velocity)); - - zcanbus_send_ack(cxt->packet, NULL, 0); - motorErrorFlag_set(GET_PARAM(0), false); -} -void TmcMotorGroup::fn_pump_stop(ProcessContext* cxt) { - CHECK_PARAM_LEN(PRAAM_LEN(), 1); - MOTOR_CHECK(); - - ZLOGI(TAG, "pump_stop: %d", GET_PARAM(0)); - motor(GET_PARAM(0))->stop(); - zcanbus_send_ack(cxt->packet, NULL, 0); -} -void TmcMotorGroup::fn_pump_set_ihold_irun_idelay(ProcessContext* cxt) { - CHECK_PARAM_LEN(PRAAM_LEN(), 4); - MOTOR_CHECK(); - - int32_t ihold = GET_PARAM(1); - int32_t irun = GET_PARAM(2); - int32_t idelay = GET_PARAM(3); - - ZLOGI(TAG, "pump_set_ihold_irun_idelay: %d ihold:%d irun:%d idelay:%d", GET_PARAM(0), ihold, irun, idelay); - motor(GET_PARAM(0))->setIHOLD_IRUN(ihold, irun, idelay); - - zcanbus_send_ack(cxt->packet, NULL, 0); -} -void TmcMotorGroup::fn_pump_set_acc(ProcessContext* cxt) { - CHECK_PARAM_LEN(PRAAM_LEN(), 2); - MOTOR_CHECK(); - - int32_t acc = GET_PARAM(1); - - motor(GET_PARAM(0))->setAmax(acc); - motor(GET_PARAM(0))->setDmax(acc); - - ZLOGI(TAG, "pump_set_acc: %d acc:%d", GET_PARAM(0), acc); - - zcanbus_send_ack(cxt->packet, NULL, 0); -} - -void TmcMotorGroup::fn_pump_set_ramp(ProcessContext* cxt) { - CHECK_PARAM_LEN(PRAAM_LEN(), 5); - MOTOR_CHECK(); - - // index,vs,a1,amx,v1 - int32_t vs = GET_PARAM(1); - int32_t a1 = GET_PARAM(2); - int32_t amx = GET_PARAM(3); - int32_t v1 = GET_PARAM(4); - - ZLOGI(TAG, "pump_set_ramp: %d vs:%d a1:%d amx:%d v1:%d", GET_PARAM(0), vs, a1, amx, v1); - - motor(GET_PARAM(0))->setVstart(vs); - motor(GET_PARAM(0))->setVstop(vs); - motor(GET_PARAM(0))->setA1(a1); - motor(GET_PARAM(0))->setD1(a1); - motor(GET_PARAM(0))->setAmax(amx); - motor(GET_PARAM(0))->setDmax(amx); - motor(GET_PARAM(0))->setV1(v1); - zcanbus_send_ack(cxt->packet, NULL, 0); -} -void TmcMotorGroup::fn_pump_set_tzw(ProcessContext* cxt) {} - -void TmcMotorGroup::fn_pump_set_subic_reg(ProcessContext* cxt) { - CHECK_PARAM_LEN(PRAAM_LEN(), 3); - MOTOR_CHECK(); - ZLOGI(TAG, "pump_set_subic_reg: %d %d %x", GET_PARAM(0), GET_PARAM(1), GET_PARAM(2)); - motor(GET_PARAM(0))->writeIntExt(GET_PARAM(1), GET_PARAM(2)); - zcanbus_send_ack(cxt->packet, NULL, 0); -} -void TmcMotorGroup::fn_pump_get_subic_reg(ProcessContext* cxt) { - CHECK_PARAM_LEN(PRAAM_LEN(), 2); - MOTOR_CHECK(); - int32_t val = motor(GET_PARAM(0))->readIntExt(GET_PARAM(1)); - ZLOGI(TAG, "pump_get_subic_reg: %d %x -> %x ", GET_PARAM(0), GET_PARAM(1), val); - - zcanbus_send_ack(cxt->packet, (uint8_t*)&val, sizeof(val)); -} -void TmcMotorGroup::fn_pump_ping(ProcessContext* cxt) { - CHECK_PARAM_LEN(PRAAM_LEN(), 1); - MOTOR_CHECK(); - zcanbus_send_ack(cxt->packet, NULL, 0); -} diff --git a/usrc/board_base/app_share/tmc_motor_group.hpp b/usrc/board_base/app_share/tmc_motor_group.hpp deleted file mode 100644 index 582b45c..0000000 --- a/usrc/board_base/app_share/tmc_motor_group.hpp +++ /dev/null @@ -1,38 +0,0 @@ -#pragma once -#include "base/appdep.hpp" - -namespace iflytop { -using namespace transmit_disfection_protocol; - -class TmcMotorGroup { - public: - TMC51X0 m_motor[2]; // 蠕动泵控制 - ZGPIO m_tmc_power_pin; // - bool m_isInitialized = false; - - public: - void initialize(Pin_t tmcPowerPin, TMC51X0Cfg cfg0, TMC51X0Cfg cfg1); - bool isInitialized() { return m_isInitialized; } - - int motorNum() { return 2; } - TMC51X0* motor(int32_t index) { - if (index < 0 || index >= motorNum()) { - return nullptr; - } - return &m_motor[index]; - } - - private: - void fn_pump_rotate(ProcessContext* cxt); - void fn_pump_stop(ProcessContext* cxt); - void fn_pump_set_ihold_irun_idelay(ProcessContext* cxt); - void fn_pump_set_acc(ProcessContext* cxt); - void fn_pump_set_ramp(ProcessContext* cxt); - void fn_pump_set_tzw(ProcessContext* cxt); - void fn_pump_set_subic_reg(ProcessContext* cxt); - void fn_pump_get_subic_reg(ProcessContext* cxt); - void fn_pump_ping(ProcessContext* cxt); - - public: -}; -} // namespace iflytop \ No newline at end of file diff --git a/usrc/board_base/app_share/warning_light_driver.hpp b/usrc/board_base/app_share/warning_light_driver.hpp deleted file mode 100644 index b0d456e..0000000 --- a/usrc/board_base/app_share/warning_light_driver.hpp +++ /dev/null @@ -1,61 +0,0 @@ -#pragma once -#include "base/appdep.hpp" - -namespace iflytop { -using namespace transmit_disfection_protocol; - -class WarningLightDriver { - ZGPIO triLight_R; - ZGPIO triLight_G; - ZGPIO triLight_B; - ZGPIO triLight_BEEP; - bool m_isInitialized = false; - - public: - void initialize(Pin_t r, Pin_t g, Pin_t b, Pin_t beep) { - triLight_R.initAsOutput(r, kxs_gpio_nopull, false, false); - triLight_G.initAsOutput(g, kxs_gpio_nopull, false, false); - triLight_B.initAsOutput(b, kxs_gpio_nopull, false, false); - triLight_BEEP.initAsOutput(beep, kxs_gpio_nopull, false, false); - m_isInitialized = true; - BIND_FN(WarningLightDriver, this, fn_triple_warning_light_ctl); - } - bool isInitialized() { return m_isInitialized; } - - void setRGBW(int32_t r, int32_t g, int32_t b, int32_t beep) { - if (r > 0) - triLight_R.write(1); - else - triLight_R.write(0); - - if (g > 0) - triLight_G.write(1); - else - triLight_G.write(0); - - if (b > 0) - triLight_B.write(1); - else - triLight_B.write(0); - - if (beep > 0) - triLight_BEEP.write(1); - else - triLight_BEEP.write(0); - } - - private: - void fn_triple_warning_light_ctl(ProcessContext* cxt) { - CHECK_PARAM_LEN(PRAAM_LEN(), 4); - - int32_t r = GET_PARAM(0); - int32_t g = GET_PARAM(1); - int32_t b = GET_PARAM(2); - int32_t warning = GET_PARAM(3); - - ZLOGI("WarningLightDriver", "triple_warning_light_ctl: r:%d g:%d b:%d warning:%d", r, g, b, warning); - setRGBW(r, g, b, warning); - zcanbus_send_ack(cxt->packet, NULL, 0); - } -}; -} // namespace iflytop \ No newline at end of file diff --git a/usrc/board_base/app_share/water_sensor_mgr.hpp b/usrc/board_base/app_share/water_sensor_mgr.hpp deleted file mode 100644 index 7aaabd6..0000000 --- a/usrc/board_base/app_share/water_sensor_mgr.hpp +++ /dev/null @@ -1,29 +0,0 @@ -#pragma once -#include "base/appdep.hpp" - -namespace iflytop { -using namespace transmit_disfection_protocol; - -class WaterSensorMgr { - ZGPIO evaporationBinWS; // 蒸发仓水浸 - ZGPIO deviceBottomWS; // 设备底部水浸 - bool m_isInitialized = false; - - public: - void initialize(Pin_t evaporationBinWSPin, Pin_t deviceBottomWSPin) { - evaporationBinWS.initAsInput(evaporationBinWSPin, kxs_gpio_nopull, kxs_gpio_no_irq, true /*mirror*/); - deviceBottomWS.initAsInput(deviceBottomWSPin, kxs_gpio_nopull, kxs_gpio_no_irq, true /*mirror*/); - m_isInitialized = true; - } - bool isInitialized() { return m_isInitialized; } - - void fn_evaporation_tank_water_sensor_read_state(ProcessContext* cxt) { - int32_t val = evaporationBinWS.read(); - zcanbus_send_ack(cxt->packet, (uint8_t*)&val, sizeof(val)); - } - void fn_device_bottom_water_sensor_read_state(ProcessContext* cxt) { - int32_t val = deviceBottomWS.read(); - zcanbus_send_ack(cxt->packet, (uint8_t*)&val, sizeof(val)); - } -}; -} // namespace iflytop \ No newline at end of file diff --git a/usrc/board_base/baseboard/dbdm_power_ctrl_board.cpp b/usrc/board_base/baseboard/dbdm_power_ctrl_board.cpp deleted file mode 100644 index 95297bd..0000000 --- a/usrc/board_base/baseboard/dbdm_power_ctrl_board.cpp +++ /dev/null @@ -1,57 +0,0 @@ -#include "dbdm_power_ctrl_board.hpp" -using namespace iflytop; -void DBDMPowerCtrlBoard::HTIM3_INIT() { - /* USER CODE BEGIN TIM3_Init 0 */ - - /* USER CODE END TIM3_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - TIM_OC_InitTypeDef sConfigOC = {0}; - - /* USER CODE BEGIN TIM3_Init 1 */ - - /* USER CODE END TIM3_Init 1 */ - htim3.Instance = TIM3; - htim3.Init.Prescaler = 143; - htim3.Init.CounterMode = TIM_COUNTERMODE_UP; - htim3.Init.Period = 9999; - htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim3) != HAL_OK) { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim3, &sClockSourceConfig) != HAL_OK) { - Error_Handler(); - } - if (HAL_TIM_PWM_Init(&htim3) != HAL_OK) { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK) { - Error_Handler(); - } - sConfigOC.OCMode = TIM_OCMODE_PWM1; - sConfigOC.Pulse = 0; - sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; - sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; - if (HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) { - Error_Handler(); - } - /* USER CODE BEGIN TIM3_Init 2 */ - - /* USER CODE END TIM3_Init 2 */ - __HAL_RCC_GPIOC_CLK_ENABLE(); - /**TIM3 GPIO Configuration - PC8 ------> TIM3_CH3 - */ - GPIO_InitTypeDef GPIO_InitStruct = {0}; - GPIO_InitStruct.Pin = GPIO_PIN_8; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - GPIO_InitStruct.Alternate = GPIO_AF2_TIM3; - HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); -} \ No newline at end of file diff --git a/usrc/board_base/baseboard/dbdm_power_ctrl_board.hpp b/usrc/board_base/baseboard/dbdm_power_ctrl_board.hpp deleted file mode 100644 index e748263..0000000 --- a/usrc/board_base/baseboard/dbdm_power_ctrl_board.hpp +++ /dev/null @@ -1,13 +0,0 @@ -#pragma once -#include -#include - -#include "base/appdep.hpp" - -namespace iflytop { -class DBDMPowerCtrlBoard { - public: - static void HTIM3_INIT(); - private: -}; -} // namespace iflytop \ No newline at end of file diff --git a/usrc/board_base/baseboard/h2o2_ext_board.cpp b/usrc/board_base/baseboard/h2o2_ext_board.cpp deleted file mode 100644 index 5dfbd9b..0000000 --- a/usrc/board_base/baseboard/h2o2_ext_board.cpp +++ /dev/null @@ -1,53 +0,0 @@ -#include "h2o2_ext_board.hpp" - -#include "base/appdep.hpp" - -using namespace iflytop; - -void H2O2ExtBoard::HADC1_INIT() { - static bool inited = false; - if (inited) return; - inited = true; - - __HAL_RCC_ADC1_CLK_ENABLE(); - __HAL_RCC_GPIOC_CLK_ENABLE(); - - ADC_ChannelConfTypeDef sConfig = {0}; - GPIO_InitTypeDef GPIO_InitStruct = {0}; - - hadc1.Instance = ADC1; - hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV2; - hadc1.Init.Resolution = ADC_RESOLUTION_12B; - hadc1.Init.ScanConvMode = DISABLE; - hadc1.Init.ContinuousConvMode = DISABLE; - hadc1.Init.DiscontinuousConvMode = DISABLE; - hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE; - hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; - hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; - hadc1.Init.NbrOfConversion = 1; - hadc1.Init.DMAContinuousRequests = DISABLE; - hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV; - if (HAL_ADC_Init(&hadc1) != HAL_OK) { - Error_Handler(); - } - - /**ADC1 GPIO Configuration - PC0 ------> ADC1_IN10 - PC1 ------> ADC1_IN11 - */ - GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1; - GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; - GPIO_InitStruct.Pull = GPIO_NOPULL; - HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); - - /* ADC1 interrupt Init */ - HAL_NVIC_SetPriority(ADC_IRQn, 5, 0); - HAL_NVIC_EnableIRQ(ADC_IRQn); - - sConfig.Channel = ADC_CHANNEL_0; - sConfig.Rank = 1; - sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) { - Error_Handler(); - } -} diff --git a/usrc/board_base/baseboard/h2o2_ext_board.hpp b/usrc/board_base/baseboard/h2o2_ext_board.hpp deleted file mode 100644 index 6c3f679..0000000 --- a/usrc/board_base/baseboard/h2o2_ext_board.hpp +++ /dev/null @@ -1,11 +0,0 @@ -#pragma once - -#include "base/appdep.hpp" - - -namespace iflytop { -class H2O2ExtBoard { - public: - static void HADC1_INIT(); -}; -} // namespace iflytop \ No newline at end of file diff --git a/usrc/board_base/baseboard/large_space_dm_liquid_ctrl_board_hal.cpp b/usrc/board_base/baseboard/large_space_dm_liquid_ctrl_board_hal.cpp deleted file mode 100644 index fb371ba..0000000 --- a/usrc/board_base/baseboard/large_space_dm_liquid_ctrl_board_hal.cpp +++ /dev/null @@ -1,154 +0,0 @@ -#include "large_space_dm_liquid_ctrl_board_hal.hpp" - -using namespace iflytop; - -#define TAG "LSDM_LCB_HAL" - -void LargeSpaceDMLiquidCtrlBoardHal::HSPI1_INIT() { - __HAL_RCC_SPI1_CLK_ENABLE(); - __HAL_RCC_GPIOA_CLK_ENABLE(); - GPIO_InitTypeDef GPIO_InitStruct = {0}; - - hspi1.Instance = SPI1; - hspi1.Init.Mode = SPI_MODE_MASTER; - hspi1.Init.Direction = SPI_DIRECTION_2LINES; - hspi1.Init.DataSize = SPI_DATASIZE_8BIT; - hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; - hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; - hspi1.Init.NSS = SPI_NSS_SOFT; - hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_128; - hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; - hspi1.Init.TIMode = SPI_TIMODE_DISABLE; - hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; - hspi1.Init.CRCPolynomial = 10; - if (HAL_SPI_Init(&hspi1) != HAL_OK) { - Error_Handler(); - } - /**SPI1 GPIO Configuration - * PA5 ------> SPI1_SCK - * PA6 ------> SPI1_MISO - * PA7 ------> SPI1_MOSI - */ - GPIO_InitStruct.Pin = GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; - GPIO_InitStruct.Alternate = GPIO_AF5_SPI1; - HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); -} - -void LargeSpaceDMLiquidCtrlBoardHal::HUART3_INIT(int baudrate, uint32_t StopBits) { - __HAL_RCC_USART3_CLK_ENABLE(); - __HAL_RCC_GPIOB_CLK_ENABLE(); - __HAL_RCC_DMA1_CLK_ENABLE(); - - GPIO_InitTypeDef GPIO_InitStruct = {0}; - - huart3.Instance = USART3; - huart3.Init.BaudRate = baudrate; - huart3.Init.WordLength = UART_WORDLENGTH_8B; - huart3.Init.StopBits = StopBits; - huart3.Init.Parity = UART_PARITY_NONE; - huart3.Init.Mode = UART_MODE_TX_RX; - huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE; - huart3.Init.OverSampling = UART_OVERSAMPLING_16; - if (HAL_UART_Init(&huart3) != HAL_OK) { - Error_Handler(); - } - UART_HandleTypeDef* uartHandle = &huart3; - - /* USER CODE BEGIN USART3_MspInit 0 */ - - /* USER CODE END USART3_MspInit 0 */ - /* USART3 clock enable */ - - /**USART3 GPIO Configuration - PB10 ------> USART3_TX - PB11 ------> USART3_RX - */ - GPIO_InitStruct.Pin = GPIO_PIN_10 | GPIO_PIN_11; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; - GPIO_InitStruct.Alternate = GPIO_AF7_USART3; - HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); - - /* USART3 DMA Init */ - /* USART3_RX Init */ - hdma1_stream1.Instance = DMA1_Stream1; - hdma1_stream1.Init.Channel = DMA_CHANNEL_4; - hdma1_stream1.Init.Direction = DMA_PERIPH_TO_MEMORY; - hdma1_stream1.Init.PeriphInc = DMA_PINC_DISABLE; - hdma1_stream1.Init.MemInc = DMA_MINC_ENABLE; - hdma1_stream1.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; - hdma1_stream1.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; - hdma1_stream1.Init.Mode = DMA_NORMAL; - hdma1_stream1.Init.Priority = DMA_PRIORITY_LOW; - hdma1_stream1.Init.FIFOMode = DMA_FIFOMODE_DISABLE; - if (HAL_DMA_Init(&hdma1_stream1) != HAL_OK) { - Error_Handler(); - } - - __HAL_LINKDMA(uartHandle, hdmarx, hdma1_stream1); - - /* USART3_TX Init */ - hdma1_stream3.Instance = DMA1_Stream3; - hdma1_stream3.Init.Channel = DMA_CHANNEL_4; - hdma1_stream3.Init.Direction = DMA_MEMORY_TO_PERIPH; - hdma1_stream3.Init.PeriphInc = DMA_PINC_DISABLE; - hdma1_stream3.Init.MemInc = DMA_MINC_ENABLE; - hdma1_stream3.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; - hdma1_stream3.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; - hdma1_stream3.Init.Mode = DMA_NORMAL; - hdma1_stream3.Init.Priority = DMA_PRIORITY_LOW; - hdma1_stream3.Init.FIFOMode = DMA_FIFOMODE_DISABLE; - if (HAL_DMA_Init(&hdma1_stream3) != HAL_OK) { - Error_Handler(); - } - - __HAL_LINKDMA(uartHandle, hdmatx, hdma1_stream3); - - HAL_NVIC_SetPriority(USART3_IRQn, 0, 0); - HAL_NVIC_EnableIRQ(USART3_IRQn); - - HAL_NVIC_SetPriority(DMA1_Stream1_IRQn, 5, 0); - HAL_NVIC_EnableIRQ(DMA1_Stream1_IRQn); - HAL_NVIC_SetPriority(DMA1_Stream3_IRQn, 5, 0); - HAL_NVIC_EnableIRQ(DMA1_Stream3_IRQn); -} - -void LargeSpaceDMLiquidCtrlBoardHal::HUART2_INIT(int baudrate, uint32_t StopBits) { - __HAL_RCC_USART2_CLK_ENABLE(); - __HAL_RCC_GPIOD_CLK_ENABLE(); - - - GPIO_InitTypeDef GPIO_InitStruct = {0}; - - huart2.Instance = USART2; - huart2.Init.BaudRate = baudrate; - huart2.Init.WordLength = UART_WORDLENGTH_8B; - huart2.Init.StopBits = StopBits; - huart2.Init.Parity = UART_PARITY_NONE; - huart2.Init.Mode = UART_MODE_TX_RX; - huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE; - huart2.Init.OverSampling = UART_OVERSAMPLING_16; - if (HAL_UART_Init(&huart2) != HAL_OK) { - Error_Handler(); - } - - UART_HandleTypeDef* uartHandle = &huart3; - /**USART2 GPIO Configuration - PD5 ------> USART2_TX - PD6 ------> USART2_RX - */ - GPIO_InitStruct.Pin = GPIO_PIN_5 | GPIO_PIN_6; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; - GPIO_InitStruct.Alternate = GPIO_AF7_USART2; - HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); - - /* USART2 interrupt Init */ - HAL_NVIC_SetPriority(USART2_IRQn, 0, 0); - HAL_NVIC_EnableIRQ(USART2_IRQn); -} diff --git a/usrc/board_base/baseboard/large_space_dm_liquid_ctrl_board_hal.hpp b/usrc/board_base/baseboard/large_space_dm_liquid_ctrl_board_hal.hpp deleted file mode 100644 index db78e55..0000000 --- a/usrc/board_base/baseboard/large_space_dm_liquid_ctrl_board_hal.hpp +++ /dev/null @@ -1,22 +0,0 @@ -#pragma once -#include -#include - -#include "base/appdep.hpp" - -namespace iflytop { -class LargeSpaceDMLiquidCtrlBoardHal { - public: - static void HSPI1_INIT(); - /** - * @brief - * - * @param baudrate - * @param StopBits UART_STOPBITS_1 UART_STOPBITS_2 - */ - static void HUART3_INIT(int baudrate, uint32_t StopBits); - static void HUART2_INIT(int baudrate, uint32_t StopBits = UART_STOPBITS_1); - - private: -}; -} // namespace iflytop \ No newline at end of file diff --git a/usrc/board_base/baseboard/large_space_dm_power_ctrl_board.cpp b/usrc/board_base/baseboard/large_space_dm_power_ctrl_board.cpp deleted file mode 100644 index c7cc83f..0000000 --- a/usrc/board_base/baseboard/large_space_dm_power_ctrl_board.cpp +++ /dev/null @@ -1,146 +0,0 @@ -#include "large_space_dm_power_ctrl_board.hpp" - -#include "base/appdep.hpp" - -using namespace iflytop; - -void LargeSpaceDmPowerCtrlBoardHal::HADC1_INIT() { - static bool inited = false; - if (inited) return; - inited = true; - - __HAL_RCC_ADC1_CLK_ENABLE(); - __HAL_RCC_GPIOA_CLK_ENABLE(); - __HAL_RCC_GPIOB_CLK_ENABLE(); - - ADC_ChannelConfTypeDef sConfig = {0}; - GPIO_InitTypeDef GPIO_InitStruct = {0}; - - hadc1.Instance = ADC1; - hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV2; - hadc1.Init.Resolution = ADC_RESOLUTION_12B; - hadc1.Init.ScanConvMode = DISABLE; - hadc1.Init.ContinuousConvMode = DISABLE; - hadc1.Init.DiscontinuousConvMode = DISABLE; - hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE; - hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; - hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; - hadc1.Init.NbrOfConversion = 1; - hadc1.Init.DMAContinuousRequests = DISABLE; - hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV; - if (HAL_ADC_Init(&hadc1) != HAL_OK) { - Error_Handler(); - } - - /**ADC1 GPIO Configuration -PA0-WKUP ------> ADC1_IN0 -PA1 ------> ADC1_IN1 -PA2 ------> ADC1_IN2 -PA3 ------> ADC1_IN3 -PB0 ------> ADC1_IN8 -PB1 ------> ADC1_IN9 -*/ - GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3; - GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; - GPIO_InitStruct.Pull = GPIO_NOPULL; - HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); - - GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1; - GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; - GPIO_InitStruct.Pull = GPIO_NOPULL; - HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); - - /* ADC1 interrupt Init */ - HAL_NVIC_SetPriority(ADC_IRQn, 5, 0); - HAL_NVIC_EnableIRQ(ADC_IRQn); - - sConfig.Channel = ADC_CHANNEL_0; - sConfig.Rank = 1; - sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES; - if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) { - Error_Handler(); - } -} - -void LargeSpaceDmPowerCtrlBoardHal::HUART2_INIT(int baudrate, uint32_t StopBits) { - __HAL_RCC_USART2_CLK_ENABLE(); - __HAL_RCC_GPIOD_CLK_ENABLE(); - __HAL_RCC_GPIOA_CLK_ENABLE(); - __HAL_RCC_DMA1_CLK_ENABLE(); - - GPIO_InitTypeDef GPIO_InitStruct = {0}; - - huart2.Instance = USART2; - huart2.Init.BaudRate = baudrate; - huart2.Init.WordLength = UART_WORDLENGTH_8B; - huart2.Init.StopBits = StopBits; - huart2.Init.Parity = UART_PARITY_NONE; - huart2.Init.Mode = UART_MODE_TX_RX; - huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE; - huart2.Init.OverSampling = UART_OVERSAMPLING_16; - if (HAL_UART_Init(&huart2) != HAL_OK) { - Error_Handler(); - } - /**USART2 GPIO Configuration - PD5 ------> USART2_TX - PD6 ------> USART2_RX - */ - GPIO_InitStruct.Pin = GPIO_PIN_5 | GPIO_PIN_6; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; - GPIO_InitStruct.Alternate = GPIO_AF7_USART2; - HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); - - /* USART2 interrupt Init */ - HAL_NVIC_SetPriority(USART2_IRQn, 5, 0); - HAL_NVIC_EnableIRQ(USART2_IRQn); - - __HAL_RCC_DMA1_CLK_ENABLE(); - HalUtils::uartdmainit(&huart2, &hdma1_stream5, DMA_CHANNEL_4, &hdma1_stream6, DMA_CHANNEL_4); - HAL_NVIC_SetPriority(DMA1_Stream5_IRQn, 5, 0); - HAL_NVIC_EnableIRQ(DMA1_Stream5_IRQn); - HAL_NVIC_SetPriority(DMA1_Stream6_IRQn, 5, 0); - HAL_NVIC_EnableIRQ(DMA1_Stream6_IRQn); -} - -void LargeSpaceDmPowerCtrlBoardHal::HUART3_INIT(int baudrate, uint32_t StopBits) { - __HAL_RCC_USART3_CLK_ENABLE(); - __HAL_RCC_GPIOB_CLK_ENABLE(); - - GPIO_InitTypeDef GPIO_InitStruct = {0}; - - huart3.Instance = USART3; - huart3.Init.BaudRate = baudrate; - huart3.Init.WordLength = UART_WORDLENGTH_8B; - huart3.Init.StopBits = StopBits; - huart3.Init.Parity = UART_PARITY_NONE; - huart3.Init.Mode = UART_MODE_TX_RX; - huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE; - huart3.Init.OverSampling = UART_OVERSAMPLING_16; - if (HAL_UART_Init(&huart3) != HAL_OK) { - Error_Handler(); - } - /**USART3 GPIO Configuration - PB10 ------> USART3_TX - PB11 ------> USART3_RX - */ - GPIO_InitStruct.Pin = GPIO_PIN_10 | GPIO_PIN_11; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; - GPIO_InitStruct.Alternate = GPIO_AF7_USART3; - HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); - - HAL_NVIC_SetPriority(USART3_IRQn, 5, 0); - HAL_NVIC_EnableIRQ(USART3_IRQn); - - /* DMA controller clock enable */ - - __HAL_RCC_DMA1_CLK_ENABLE(); - HalUtils::uartdmainit(&huart3, &hdma1_stream1, DMA_CHANNEL_4, &hdma1_stream3, DMA_CHANNEL_4); - HAL_NVIC_SetPriority(DMA1_Stream1_IRQn, 5, 0); - HAL_NVIC_EnableIRQ(DMA1_Stream1_IRQn); - HAL_NVIC_SetPriority(DMA1_Stream3_IRQn, 5, 0); - HAL_NVIC_EnableIRQ(DMA1_Stream3_IRQn); -} diff --git a/usrc/board_base/baseboard/large_space_dm_power_ctrl_board.hpp b/usrc/board_base/baseboard/large_space_dm_power_ctrl_board.hpp deleted file mode 100644 index 1f90859..0000000 --- a/usrc/board_base/baseboard/large_space_dm_power_ctrl_board.hpp +++ /dev/null @@ -1,13 +0,0 @@ -#pragma once - -#include "base/appdep.hpp" - - -namespace iflytop { -class LargeSpaceDmPowerCtrlBoardHal { - public: - static void HADC1_INIT(); - static void HUART2_INIT(int baudrate, uint32_t StopBits); - static void HUART3_INIT(int baudrate, uint32_t StopBits); -}; -} // namespace iflytop \ No newline at end of file diff --git a/usrc/board_base/board_base.hpp b/usrc/board_base/board_base.hpp deleted file mode 100644 index 22970f2..0000000 --- a/usrc/board_base/board_base.hpp +++ /dev/null @@ -1,15 +0,0 @@ -#pragma once -// -#include "app_share/air_compressor_controller.hpp" -#include "app_share/blower_controller.hpp" -#include "app_share/h2o2_sensor_driver.hpp" -#include "app_share/heater_controller.hpp" -#include "app_share/proportional_valve_ctrl.hpp" -#include "app_share/pxxpsbus.hpp" -#include "app_share/tmc_motor_group.hpp" -#include "app_share/warning_light_driver.hpp" -// -#include "baseboard/large_space_dm_liquid_ctrl_board_hal.hpp" -#include "baseboard/large_space_dm_power_ctrl_board.hpp" -#include "baseboard/dbdm_power_ctrl_board.hpp" -#include "board_base/baseboard/h2o2_ext_board.hpp" \ No newline at end of file diff --git a/usrc/module/air_compressor_controller.hpp b/usrc/module/air_compressor_controller.hpp new file mode 100644 index 0000000..1c16e17 --- /dev/null +++ b/usrc/module/air_compressor_controller.hpp @@ -0,0 +1,52 @@ +#pragma once +#include "base/appdep.hpp" + +namespace iflytop { +using namespace zscanprotocol; +using namespace transmit_disfection_protocol; + +class AirCompressorController { + ZGPIO m_ctrlGpio; + ZADC m_iAdc; + bool m_isInitialized = false; + + public: + static AirCompressorController* ins() { + static AirCompressorController instance; + return &instance; + } + + void initialize(Pin_t ctrlGpio, ADC_HandleTypeDef* iadc, uint32_t ich) { + ZASSERT(!m_isInitialized); + m_ctrlGpio.initAsOutput(ctrlGpio, kxs_gpio_nopull, true, false); + m_iAdc.initialize("AirComAdc", iadc, ich); + m_isInitialized = true; + + AppPeriodTaskMgr::ins()->regTask("AC-ADC", [this]() { periodTask(); }, 1000); + // BIND + BIND_FN(AirCompressorController, this, fn_air_compressor_ctrl); + BIND_FN(AirCompressorController, this, fn_air_compressor_ctrl_safe_valve); + BIND_FN(AirCompressorController, this, fn_air_compressor_read_ei); + BIND_FN(AirCompressorController, this, fn_air_compressor_read_ei_adc_raw); + } + bool isInitialized() { return m_isInitialized; } + + public: + void open(bool val) { m_ctrlGpio.write(val); } + + private: + // PP + void fn_air_compressor_ctrl(ProcessContext* cxt) { // + m_ctrlGpio.write(GET_PARAM(0)); + zcanbus_send_ack(cxt->packet, NULL, 0); + } + void fn_air_compressor_ctrl_safe_valve(ProcessContext* cxt) { zcanbus_send_ack(cxt->packet, NULL, 0); } + void fn_air_compressor_read_ei(ProcessContext* cxt) { zcanbus_send_ack(cxt->packet, airCompressorAdcToCurrent(m_iAdc.getCacheVal())); } + void fn_air_compressor_read_ei_adc_raw(ProcessContext* cxt) { zcanbus_send_ack(cxt->packet, m_iAdc.getCacheVal()); } + + private: + void periodTask() { m_iAdc.updateAdcValToCache(); } +}; +} // namespace iflytop + +#pragma once diff --git a/usrc/module/blower_controller.hpp b/usrc/module/blower_controller.hpp new file mode 100644 index 0000000..1589de8 --- /dev/null +++ b/usrc/module/blower_controller.hpp @@ -0,0 +1,147 @@ +#pragma once +#include "base/appdep.hpp" + +namespace iflytop { +using namespace transmit_disfection_protocol; + +typedef enum { + kIOBlower, + kHighPowerUartBlower, + kMiniPwmBlower, +} BlowerType_t; + +class BlowerController { + BlowerType_t m_blowerType = kIOBlower; + + // kIOBlower + ZGPIO m_ctrlGpio; + + // kHighPowerUartBlower + ModbusBlockHost m_modbusblock; + + // kMiniPwmBlower + TIM_HandleTypeDef* m_miniPwmBlower_htim; + uint32_t m_miniPwmBlower_channle; + ZGPIO m_miniPwmBlower_enGpio; + ZGPIO m_miniPwmBlower_fbGpio; + + ZADC m_iadc; + bool m_iadcIsInit = false; + + bool m_isInitialized = false; + + public: + void initialize(Pin_t ctrlGpio, ADC_HandleTypeDef* iadc, uint32_t ich) { + m_ctrlGpio.initAsOutput(ctrlGpio, kxs_gpio_nopull, true, false); + m_iadc.initialize("Blower-iadc", iadc, ich); + AppPeriodTaskMgr::ins()->regTask("AC-ADC", [this]() { periodTask(); }, 1000); + m_blowerType = kIOBlower; + m_isInitialized = true; + bindFn(); + } + + void initializeAsHighPowerUartBlower(UART_HandleTypeDef* huart, ADC_HandleTypeDef* iadc, uint32_t ich) { + m_modbusblock.initialize(huart); + m_iadc.initialize("Blower-iadc", iadc, ich); + AppPeriodTaskMgr::ins()->regTask("AC-ADC", [this]() { periodTask(); }, 1000); + m_blowerType = kHighPowerUartBlower; + m_isInitialized = true; + bindFn(); + } + void initializeAsMiniPwmBlower(TIM_HandleTypeDef* htim, uint32_t channel, Pin_t enGpio, Pin_t fbGpio) { + m_miniPwmBlower_htim = htim; + m_miniPwmBlower_channle = channel; + m_miniPwmBlower_enGpio.initAsOutput(enGpio, kxs_gpio_nopull, true, false); + m_miniPwmBlower_fbGpio.initAsInput(fbGpio, kxs_gpio_nopull, kxs_gpio_rising_irq, false); + AppPeriodTaskMgr::ins()->regTask("AC-ADC", [this]() { periodTask(); }, 1000); + m_blowerType = kMiniPwmBlower; + m_isInitialized = true; + bindFn(); + } + + bool isInitialized() { return m_isInitialized; } + + void bindFn() { + BIND_FN(BlowerController, this, fn_blower_ctrl); + BIND_FN(BlowerController, this, fn_blower_ctrl_safe_valve); + BIND_FN(BlowerController, this, fn_blower_read_ei); + BIND_FN(BlowerController, this, fn_blower_is_error); + BIND_FN(BlowerController, this, fn_blower_read_ei_adc_raw); + } + + /*********************************************************************************************************************** + * FN * + ***********************************************************************************************************************/ + void blower_ctrl(int32_t val) { + if (m_blowerType == kIOBlower) { + m_ctrlGpio.write(val); + } else if (m_blowerType == kHighPowerUartBlower) { + if (val > 0) { + m_modbusblock.writeReg06(1, 0x2000, 1, 100); + } else { + m_modbusblock.writeReg06(1, 0x2000, 6, 100); + } + } else if (m_blowerType == kMiniPwmBlower) { + mini_pwm_blower_ctrl(val); + } + } + void blower_ctrl_safe_valve(int32_t val) {} + int32_t blower_read_ei() { + if (m_blowerType == kIOBlower || m_blowerType == kHighPowerUartBlower) { + return blowserAdcToCurrent(m_iadc.getCacheVal()); + } + return 0; + } + int32_t blower_read_iadc() { + if (m_blowerType == kIOBlower || m_blowerType == kHighPowerUartBlower) { + return m_iadc.getCacheVal(); + } + return 0; + } + + int32_t blower_is_error() { + // TODO: 栏杆箱消毒机添加故障检测 + return 0; + } + + void periodTask() { + if (m_iadc.isInited()) m_iadc.updateAdcValToCache(); + } + + /*********************************************************************************************************************** + * PP * + ***********************************************************************************************************************/ + void fn_blower_ctrl(ProcessContext* cxt) { // + blower_ctrl(GET_PARAM(0)); + zcanbus_send_ack(cxt->packet, NULL, 0); + } + void fn_blower_ctrl_safe_valve(ProcessContext* cxt) { // + blower_ctrl_safe_valve(GET_PARAM(0)); + zcanbus_send_ack(cxt->packet, NULL, 0); + } + void fn_blower_read_ei(ProcessContext* cxt) { zcanbus_send_ack(cxt->packet, blower_read_ei()); } + void fn_blower_read_ei_adc_raw(ProcessContext* cxt) { zcanbus_send_ack(cxt->packet, m_iadc.getCacheVal()); } + void fn_blower_is_error(ProcessContext* cxt) { zcanbus_send_ack(cxt->packet, blower_is_error()); } + + private: + void mini_pwm_blower_ctrl(int32_t duty) { + duty = 100 - duty; + if (duty < 0) duty = 0; + if (duty > 100) duty = 100; + + TIM_OC_InitTypeDef sConfigOC = {0}; + sConfigOC.OCMode = TIM_OCMODE_PWM1; + sConfigOC.Pulse = duty / 100.0 * __HAL_TIM_GET_AUTORELOAD(m_miniPwmBlower_htim); + sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; + sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; + sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; + sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; + + HAL_TIM_PWM_ConfigChannel(m_miniPwmBlower_htim, &sConfigOC, m_miniPwmBlower_channle); + HAL_TIM_PWM_Stop(m_miniPwmBlower_htim, m_miniPwmBlower_channle); + HAL_TIM_PWM_Start(m_miniPwmBlower_htim, m_miniPwmBlower_channle); + + m_miniPwmBlower_enGpio.write(duty != 0); + } +}; +} // namespace iflytop diff --git a/usrc/module/h2o2_sensor_driver.cpp b/usrc/module/h2o2_sensor_driver.cpp new file mode 100644 index 0000000..3f464e8 --- /dev/null +++ b/usrc/module/h2o2_sensor_driver.cpp @@ -0,0 +1,109 @@ +#include "h2o2_sensor_driver.hpp" + +#include "zsdk/zcanreceiver/zcanreceiver.hpp" +using namespace iflytop; + +#define TAG "LSDMPowerCtrlBoard" +using namespace transmit_disfection_protocol; + +static osThreadId H2O2CaptureThreadId; +/*********************************************************************************************************************** + * FUNC * + ***********************************************************************************************************************/ +static void c_onH2O2CaptureThread(void const* argument) { + H2O2SensorDriver* driver = (H2O2SensorDriver*)argument; + driver->onH2O2CaptureThread(); +} + +void H2O2SensorDriver::initialize(UART_HandleTypeDef* huart, ADC_HandleTypeDef* hadc, int32_t adcChannel) { + ZASSERT(huart->Init.BaudRate == 19200); + ZASSERT(huart->Init.StopBits == UART_STOPBITS_2); + + m_ModbusBlockHost.initialize(huart); + m_H2O2Adc.initialize("H2O2Adc", hadc, adcChannel); + m_HMP110.init(&m_ModbusBlockHost); + + m_detectId = 240; + if (m_HMP110.ping(1)) { + ZLOGI(TAG, "H2O2 HMP110 Sensor detect id: 1"); + m_detectId = 1; + } + if (m_HMP110.ping(240)) { + m_detectId = 240; + } + m_HMP110.setid(m_detectId); + // ZLOGI(TAG, "H2O2 HMP110 Sensor detect id: %d", m_detectId); + + osThreadDef(H2O2CaptureThread, c_onH2O2CaptureThread, osPriorityNormal, 0, 1024); + H2O2CaptureThreadId = osThreadCreate(osThread(H2O2CaptureThread), this); + m_isInitialized = true; + + BIND_FN(H2O2SensorDriver, this, fn_h2o2_sensor_read_calibration_date); + BIND_FN(H2O2SensorDriver, this, fn_h2o2_sensor_read_sub_ic_errorcode); + BIND_FN(H2O2SensorDriver, this, fn_h2o2_sensor_read_sub_ic_reg); +} + +/*********************************************************************************************************************** + * H2O2 * + ***********************************************************************************************************************/ + +bool H2O2SensorDriver::h2o2_sensor_is_online() { + if (m_detectId <= 0) return false; + int32_t ecode = m_HMP110.read_cache_errorcode(); + if (ecode == -1) return false; + return true; +} +int32_t H2O2SensorDriver::h2o2_sensor_read_calibration_date(int32_t* year, int32_t* month, int32_t* day) { // + *year = 1; + *month = 2; + *day = 3; + return 0; +} +int32_t H2O2SensorDriver::h2o2_sensor_read_sub_ic_errorcode() { // + return m_HMP110.read_cache_errorcode(); +} +int32_t H2O2SensorDriver::h2o2_sensor_read_sub_ic_reg(int32_t add, uint16_t* val, size_t len) { // + return m_HMP110.read_reg(add, val, len); +} +int32_t H2O2SensorDriver::h2o2_sensor_data(report_h2o2_data_t* readdata) { + HMP110::hmp110_sensordata_t sensordata; + int h2o2adcData = 0; + + h2o2adcData = m_H2O2Adc.getCacheVal(); + m_HMP110.read_cache_sensor_data(&sensordata); + + if (m_detectId > 0) { + readdata->sensor_error = m_HMP110.read_cache_errorcode() != 0; + } else { + readdata->sensor_error = 1; + } + readdata->h2o2 = h2o2adcToPPM(h2o2adcData); + readdata->h2o2adc = h2o2adcData; + readdata->humid = sensordata.rh; + readdata->temp = sensordata.temp; + readdata->saturation = 0; + ZLOGI(TAG, "ppm:%d(adc:%d), rh:%d, temp:%d, df_ptemp:%d, ah:%d, mr:%d, wbt:%d, eh:%d", // + readdata->h2o2, // + h2o2adcData, // + sensordata.rh, // + sensordata.temp, // + sensordata.df_ptemp, // + sensordata.ah, // + sensordata.mr, // + sensordata.wet_bulb_temp, // + sensordata.enthalpy); + return 0; +} + +void H2O2SensorDriver::onH2O2CaptureThread() { + while (1) { + osDelay(5000); + m_H2O2Adc.updateAdcValToCache(); + m_HMP110.updateSensorDataAndErrorcode(); + + static report_h2o2_data_t data; + memset(&data, 0, sizeof(data)); + h2o2_sensor_data(&data); + if (gEnableReportFlag) zcanbus_send_report(kreport_h2o2_sensor_data, (uint8_t*)&data, sizeof(data), 30); + } +} \ No newline at end of file diff --git a/usrc/module/h2o2_sensor_driver.hpp b/usrc/module/h2o2_sensor_driver.hpp new file mode 100644 index 0000000..d64ddaf --- /dev/null +++ b/usrc/module/h2o2_sensor_driver.hpp @@ -0,0 +1,52 @@ +#pragma once +#include "base/appdep.hpp" + +namespace iflytop { +using namespace transmit_disfection_protocol; + +class H2O2SensorDriver { + public: + ModbusBlockHost m_ModbusBlockHost; // + ZADC m_H2O2Adc; // H2O2传感器控制 + HMP110 m_HMP110; // H2O2传感器 + int32_t m_detectId = -1; + bool m_isInitialized = false; + + public: + void initialize(UART_HandleTypeDef* huart, ADC_HandleTypeDef* hadc, int32_t adcChannel); + bool isInitialized() { return m_isInitialized; } + + bool h2o2_sensor_is_online(); + int32_t h2o2_sensor_read_calibration_date(int32_t* year, int32_t* month, int32_t* day); + int32_t h2o2_sensor_read_sub_ic_errorcode(); + int32_t h2o2_sensor_read_sub_ic_reg(int32_t add, uint16_t* val, size_t len); + int32_t h2o2_sensor_data(report_h2o2_data_t* sensorData); + + private: + // PP + void fn_h2o2_sensor_read_calibration_date(ProcessContext* cxt) { + int32_t data[3]; + h2o2_sensor_read_calibration_date(&data[0], &data[1], &data[2]); + zcanbus_send_ack(cxt->packet, (uint8_t*)&data, sizeof(data)); + } + void fn_h2o2_sensor_read_sub_ic_errorcode(ProcessContext* cxt) { + int32_t ecode = h2o2_sensor_read_sub_ic_errorcode(); + zcanbus_send_ack(cxt->packet, (uint8_t*)&ecode, sizeof(ecode)); + } + void fn_h2o2_sensor_read_sub_ic_reg(ProcessContext* cxt) { + int32_t addr = GET_PARAM(0); + int32_t regNum = GET_PARAM(1); + if (regNum > 10) regNum = 10; // 最多读10个寄存器 + static uint16_t data[10]; + memset(data, 0, sizeof(data)); + + h2o2_sensor_read_sub_ic_reg(addr, data, regNum); + zcanbus_send_ack(cxt->packet, (uint8_t*)&data, regNum * 2); + } + + public: + void onH2O2CaptureThread(); + + private: +}; +} // namespace iflytop \ No newline at end of file diff --git a/usrc/module/heater_controller.hpp b/usrc/module/heater_controller.hpp new file mode 100644 index 0000000..321f461 --- /dev/null +++ b/usrc/module/heater_controller.hpp @@ -0,0 +1,72 @@ +#pragma once +#include "base/appdep.hpp" + +namespace iflytop { +using namespace transmit_disfection_protocol; + +class HeaterController { + ZGPIO m_ctrlGpio; + ZADC m_iAdc; + ZADC m_tempAdc; + bool m_isInitialized = false; + + public: + void initialize(Pin_t ctrlGpio, ADC_HandleTypeDef* iadc, uint32_t ich, ADC_HandleTypeDef* tadc, uint32_t tch) { + m_ctrlGpio.initAsOutput(ctrlGpio, kxs_gpio_nopull, true, false); + m_iAdc.initialize("heater-idac", iadc, ich); + m_tempAdc.initialize("heater-tadc", iadc, tch); + m_isInitialized = true; + AppPeriodTaskMgr::ins()->regTask("Heater-ADC", [this]() { periodTask(); }, 1000); + + BIND_FN(HeaterController, this, fn_heater_ctrl); + BIND_FN(HeaterController, this, fn_heater_ctrl_safe_valve); + BIND_FN(HeaterController, this, fn_heater_read_ei); + BIND_FN(HeaterController, this, fn_heater_read_temperature_data); + BIND_FN(HeaterController, this, fn_heater_read_ei_adc_raw); + BIND_FN(HeaterController, this, fn_heater_read_temperature_data_adc_raw); + } + + bool isInitialized() { return m_isInitialized; } + + void heater_ctrl(int32_t val) { m_ctrlGpio.write(val); } + void heater_ctrl_safe_valve(int32_t val) {} + int32_t heater_read_temperature_data() { return heaterAdc2Temp(m_tempAdc.getCacheVal()); } + int32_t heater_read_ei() { return hearterAdcToCurrent(m_iAdc.getCacheVal()); } + int32_t heater_read_iadc() { return m_iAdc.getCacheVal(); } + int32_t heater_read_tadc() { return m_tempAdc.getCacheVal(); } + + // PP + void fn_heater_ctrl(ProcessContext* cxt) { // + heater_ctrl(GET_PARAM(0)); + zcanbus_send_ack(cxt->packet, NULL, 0); + } + void fn_heater_ctrl_safe_valve(ProcessContext* cxt) { // + heater_ctrl_safe_valve(GET_PARAM(0)); + zcanbus_send_ack(cxt->packet, NULL, 0); + } + void fn_heater_read_ei(ProcessContext* cxt) { // + auto val = heater_read_ei(); + zcanbus_send_ack(cxt->packet, (uint8_t*)&val, sizeof(val)); + } + void fn_heater_read_temperature_data(ProcessContext* cxt) { // + auto val = heater_read_temperature_data(); + zcanbus_send_ack(cxt->packet, (uint8_t*)&val, sizeof(val)); + } + + void fn_heater_read_ei_adc_raw(ProcessContext* cxt) { // + auto val = m_iAdc.getCacheVal(); + zcanbus_send_ack(cxt->packet, (uint8_t*)&val, sizeof(val)); + } + + void fn_heater_read_temperature_data_adc_raw(ProcessContext* cxt) { // + auto val = m_tempAdc.getCacheVal(); + zcanbus_send_ack(cxt->packet, (uint8_t*)&val, sizeof(val)); + } + + private: + void periodTask() { + m_iAdc.updateAdcValToCache(); + m_tempAdc.updateAdcValToCache(); + } +}; +} // namespace iflytop \ No newline at end of file diff --git a/usrc/module/module.hpp b/usrc/module/module.hpp new file mode 100644 index 0000000..eccaf43 --- /dev/null +++ b/usrc/module/module.hpp @@ -0,0 +1,11 @@ +#pragma once +// +#include "air_compressor_controller.hpp" +#include "blower_controller.hpp" +#include "h2o2_sensor_driver.hpp" +#include "heater_controller.hpp" +#include "proportional_valve_ctrl.hpp" +#include "pxxpsbus.hpp" +#include "tmc_motor_group.hpp" +#include "warning_light_driver.hpp" +// diff --git a/usrc/module/proportional_valve_ctrl.hpp b/usrc/module/proportional_valve_ctrl.hpp new file mode 100644 index 0000000..dd12080 --- /dev/null +++ b/usrc/module/proportional_valve_ctrl.hpp @@ -0,0 +1,55 @@ +#pragma once +#include "base/appdep.hpp" +#include "zsdk/preportional_valve/preportional_valve_ctrl.hpp" +namespace iflytop { +using namespace transmit_disfection_protocol; + +class ProportionalValveCtrl { + PreportionalValveCtrl valve; + bool m_isInitialized = false; + + public: + void initialize(UART_HandleTypeDef* huart) { + valve.initialize(huart); + m_isInitialized = true; + + BIND_FN(ProportionalValveCtrl, this, fn_proportional_set_valve); + BIND_FN(ProportionalValveCtrl, this, fn_proportional_read_pos); + BIND_FN(ProportionalValveCtrl, this, fn_proportional_is_busy); + } + + bool isInitialized() { return m_isInitialized; } + + private: + void fn_proportional_set_valve(ProcessContext* cxt) { + int32_t err = valve.setValvePos(GET_PARAM(0), GET_PARAM(1)); + if (err) { + zcanbus_send_errorack(cxt->packet, err); + } else { + zcanbus_send_ack(cxt->packet, NULL, 0); + } + } + + void fn_proportional_read_pos(ProcessContext* cxt) { + int32_t pos = 0; + int32_t err = valve.getValvePos(GET_PARAM(0), &pos); + if (err) { + zcanbus_send_errorack(cxt->packet, err); + } else { + zcanbus_send_ack(cxt->packet, (uint8_t*)&pos, sizeof(pos)); + } + } + + void fn_proportional_is_busy(ProcessContext* cxt) { + int32_t busy = 0; + int32_t err = valve.isBusy(GET_PARAM(0), &busy); + if (err) { + zcanbus_send_errorack(cxt->packet, err); + } else { + zcanbus_send_ack(cxt->packet, (uint8_t*)&busy, sizeof(busy)); + } + } + + private: +}; +} // namespace iflytop \ No newline at end of file diff --git a/usrc/module/pxxpsbus.hpp b/usrc/module/pxxpsbus.hpp new file mode 100644 index 0000000..ecafa78 --- /dev/null +++ b/usrc/module/pxxpsbus.hpp @@ -0,0 +1,49 @@ +#pragma once +#include "base/appdep.hpp" + +namespace iflytop { +using namespace transmit_disfection_protocol; + +class PXXPSBus { + PXXPressureSensorBus psbus; + bool m_isInitialized = false; + + public: + void initialize(UART_HandleTypeDef* huart) { + psbus.init(huart); + m_isInitialized = true; + BIND_FN(PXXPSBus, this, fn_psbus_read_data); + BIND_FN(PXXPSBus, this, fn_psbus_scan); + } + bool isInitialized() { return m_isInitialized; } + + private: + void fn_psbus_read_data(ProcessContext* cxt) { + CHECK_PARAM_LEN(PRAAM_LEN(), 1); + int32_t index = GET_PARAM(0); + + int16_t val = 0; + int32_t reportVal = 0; + bool suc = psbus.readData(index, &val); + + reportVal = val; + + if (suc) { + zcanbus_send_ack(cxt->packet, (uint8_t*)&reportVal, sizeof(reportVal)); + } else { + zcanbus_send_errorack(cxt->packet, kerr_subdevice_offline); + } + } + void fn_psbus_scan(ProcessContext* cxt) { + auto* sensors = psbus.sensors; + int numSensor = psbus.sensorNum; + + ack_psbus_scan_t result = {0}; + result.numOnlineId = numSensor; + for (int i = 0; i < numSensor; i++) { + result.onlineId[i] = sensors[i].id; + } + zcanbus_send_ack(cxt->packet, (uint8_t*)&result, sizeof(result)); + } +}; +} // namespace iflytop \ No newline at end of file diff --git a/usrc/module/tmc_motor_group.cpp b/usrc/module/tmc_motor_group.cpp new file mode 100644 index 0000000..2eb1557 --- /dev/null +++ b/usrc/module/tmc_motor_group.cpp @@ -0,0 +1,227 @@ +#include "tmc_motor_group.hpp" +using namespace iflytop; +#define TAG "TmcMotorGroup" + +/*********************************************************************************************************************** + * 电机异常监控 * + ***********************************************************************************************************************/ +static osTimerId MotorMonitorTimerId; // 压力传感器数值上报 +static bool motorErrorFlagCache[10]; // 电机异常状态上报标志位 +static zmutex motorErrorFlagCacheLock; +static TmcMotorGroup* tmcgroup_p; + +static bool motorErrorFlag_get(int subindex) { + bool ret; + { + zlock_guard guard(motorErrorFlagCacheLock); + ret = motorErrorFlagCache[subindex]; + } + return ret; +} + +static void motorErrorFlag_set(int subindex, bool val) { + { + zlock_guard guard(motorErrorFlagCacheLock); + motorErrorFlagCache[subindex] = val; + } +} + +static void onMotorMonitorTimer(void const* argument) { + // ZLOGI(TAG, "x MotorMonitorTimerId: %p", argument); + // return; + + // return; + // 电机异常检查 + TmcMotorGroup* DEVICE = (TmcMotorGroup*)tmcgroup_p; + report_exeception_data_t data; + for (size_t i = 0; i < DEVICE->motorNum(); i++) { + // ZLOGI(TAG, "check motor %d", i); + bool estate = motorErrorFlag_get(i); + + if (!DEVICE->motor(i)->ping()) { + data.subid = i; + data.ecode = kerr_motor_subdevice_offline; + + if (!estate) { + motorErrorFlag_set(i, true); + ZLOGE(TAG, "motor %d offline error", i); + zcanbus_send_emergency_report(kreport_exception_error, (uint8_t*)&data, sizeof(data), 100); + } + } else { + auto gstate = DEVICE->motor(i)->getGState(); + bool flag = gstate.reset || gstate.drv_err || gstate.uv_cp; + if (!flag && estate) { + motorErrorFlag_set(i, false); + } else if (flag && !estate) { + ZLOGE(TAG, "motor %d error, reset %d, drv_err %d, uv_cp %d", i, gstate.reset, gstate.drv_err, gstate.uv_cp); + if (gstate.reset) { + data.ecode = kerr_motor_reset_error; + } else if (gstate.uv_cp) { + data.ecode = kerr_motor_undervoltage_error; + } else if (gstate.drv_err) { + data.ecode = kerr_motor_driver_error; + } else { + data.ecode = kerr_motor_unkown_error; + } + data.subid = i; + motorErrorFlag_set(i, true); + zcanbus_send_emergency_report(kreport_exception_error, (uint8_t*)&data, sizeof(data), 100); + } + } + } +} + +void TmcMotorGroup::initialize(Pin_t tmcPowerPin, TMC51X0Cfg cfg0, TMC51X0Cfg cfg1) { + m_tmc_power_pin.initAsOutput(tmcPowerPin, kxs_gpio_nopull, true, false); + osDelay(100); + m_tmc_power_pin.write(true); + // PB2 + + m_motor[0].initialize(cfg0); + m_motor[0].setIHOLD_IRUN(1, 28, 0); + m_motor[0].setMotorShaft(true); + + m_motor[1].initialize(cfg1); + m_motor[1].setIHOLD_IRUN(1, 28, 0); + m_motor[1].setMotorShaft(true); + + int32_t chipv0 = m_motor[0].readICVersion(); // 5130:0x11 + int32_t chipv1 = m_motor[1].readICVersion(); // 5130:0x11 + // m_motor[0].rotate(500000); + // m_motor[1].rotate(500000); + ZLOGI(TAG, "chipv0: %x, chipv1: %x", chipv0, chipv1); + + auto gstate0 = m_motor[0].getGState(); + auto gstate1 = m_motor[1].getGState(); + + ZLOGI(TAG, "motor0: reset:%d drv_err:%d uv_cp:%d", gstate0.reset, gstate0.drv_err, gstate0.uv_cp); + ZLOGI(TAG, "motor1: reset:%d drv_err:%d uv_cp:%d", gstate1.reset, gstate1.drv_err, gstate1.uv_cp); + + gstate0 = m_motor[0].getGState(); + gstate1 = m_motor[1].getGState(); + + ZLOGI(TAG, "motor0: reset:%d drv_err:%d uv_cp:%d", gstate0.reset, gstate0.drv_err, gstate0.uv_cp); + ZLOGI(TAG, "motor1: reset:%d drv_err:%d uv_cp:%d", gstate1.reset, gstate1.drv_err, gstate1.uv_cp); + + motorErrorFlagCacheLock.init(); + tmcgroup_p = this; + osTimerDef(MotorMonitorTimer, onMotorMonitorTimer); + MotorMonitorTimerId = osTimerCreate(osTimer(MotorMonitorTimer), osTimerPeriodic, this); + ZLOGI(TAG, "MotorMonitorTimerId: %p", this); + osTimerStart(MotorMonitorTimerId, 1000); + m_isInitialized = true; + + BIND_FN(TmcMotorGroup, this, fn_pump_rotate); + BIND_FN(TmcMotorGroup, this, fn_pump_stop); + BIND_FN(TmcMotorGroup, this, fn_pump_set_ihold_irun_idelay); + BIND_FN(TmcMotorGroup, this, fn_pump_set_acc); + BIND_FN(TmcMotorGroup, this, fn_pump_set_ramp); + BIND_FN(TmcMotorGroup, this, fn_pump_set_tzw); + BIND_FN(TmcMotorGroup, this, fn_pump_set_subic_reg); + BIND_FN(TmcMotorGroup, this, fn_pump_get_subic_reg); + BIND_FN(TmcMotorGroup, this, fn_pump_ping); +} + +#define MOTOR_CHECK() \ + if (GET_PARAM(0) >= motorNum()) { \ + zcanbus_send_errorack(cxt->packet, kerr_invalid_param); \ + return; \ + } \ + if (!motor(GET_PARAM(0))->ping()) { \ + zcanbus_send_errorack(cxt->packet, kerr_motor_subdevice_offline); \ + return; \ + } + +void TmcMotorGroup::fn_pump_rotate(ProcessContext* cxt) { + CHECK_PARAM_LEN(PRAAM_LEN(), 2); + MOTOR_CHECK(); + + int32_t velocity = GET_PARAM(1); + + ZLOGI(TAG, "pump_rotate: %d %d", GET_PARAM(0), velocity); + + motor(GET_PARAM(0))->enable(false); + motor(GET_PARAM(0))->enable(true); + motor(GET_PARAM(0))->moveToEnd(velocity > 0 ? 1 : -1, abs(velocity)); + + zcanbus_send_ack(cxt->packet, NULL, 0); + motorErrorFlag_set(GET_PARAM(0), false); +} +void TmcMotorGroup::fn_pump_stop(ProcessContext* cxt) { + CHECK_PARAM_LEN(PRAAM_LEN(), 1); + MOTOR_CHECK(); + + ZLOGI(TAG, "pump_stop: %d", GET_PARAM(0)); + motor(GET_PARAM(0))->stop(); + zcanbus_send_ack(cxt->packet, NULL, 0); +} +void TmcMotorGroup::fn_pump_set_ihold_irun_idelay(ProcessContext* cxt) { + CHECK_PARAM_LEN(PRAAM_LEN(), 4); + MOTOR_CHECK(); + + int32_t ihold = GET_PARAM(1); + int32_t irun = GET_PARAM(2); + int32_t idelay = GET_PARAM(3); + + ZLOGI(TAG, "pump_set_ihold_irun_idelay: %d ihold:%d irun:%d idelay:%d", GET_PARAM(0), ihold, irun, idelay); + motor(GET_PARAM(0))->setIHOLD_IRUN(ihold, irun, idelay); + + zcanbus_send_ack(cxt->packet, NULL, 0); +} +void TmcMotorGroup::fn_pump_set_acc(ProcessContext* cxt) { + CHECK_PARAM_LEN(PRAAM_LEN(), 2); + MOTOR_CHECK(); + + int32_t acc = GET_PARAM(1); + + motor(GET_PARAM(0))->setAmax(acc); + motor(GET_PARAM(0))->setDmax(acc); + + ZLOGI(TAG, "pump_set_acc: %d acc:%d", GET_PARAM(0), acc); + + zcanbus_send_ack(cxt->packet, NULL, 0); +} + +void TmcMotorGroup::fn_pump_set_ramp(ProcessContext* cxt) { + CHECK_PARAM_LEN(PRAAM_LEN(), 5); + MOTOR_CHECK(); + + // index,vs,a1,amx,v1 + int32_t vs = GET_PARAM(1); + int32_t a1 = GET_PARAM(2); + int32_t amx = GET_PARAM(3); + int32_t v1 = GET_PARAM(4); + + ZLOGI(TAG, "pump_set_ramp: %d vs:%d a1:%d amx:%d v1:%d", GET_PARAM(0), vs, a1, amx, v1); + + motor(GET_PARAM(0))->setVstart(vs); + motor(GET_PARAM(0))->setVstop(vs); + motor(GET_PARAM(0))->setA1(a1); + motor(GET_PARAM(0))->setD1(a1); + motor(GET_PARAM(0))->setAmax(amx); + motor(GET_PARAM(0))->setDmax(amx); + motor(GET_PARAM(0))->setV1(v1); + zcanbus_send_ack(cxt->packet, NULL, 0); +} +void TmcMotorGroup::fn_pump_set_tzw(ProcessContext* cxt) {} + +void TmcMotorGroup::fn_pump_set_subic_reg(ProcessContext* cxt) { + CHECK_PARAM_LEN(PRAAM_LEN(), 3); + MOTOR_CHECK(); + ZLOGI(TAG, "pump_set_subic_reg: %d %d %x", GET_PARAM(0), GET_PARAM(1), GET_PARAM(2)); + motor(GET_PARAM(0))->writeIntExt(GET_PARAM(1), GET_PARAM(2)); + zcanbus_send_ack(cxt->packet, NULL, 0); +} +void TmcMotorGroup::fn_pump_get_subic_reg(ProcessContext* cxt) { + CHECK_PARAM_LEN(PRAAM_LEN(), 2); + MOTOR_CHECK(); + int32_t val = motor(GET_PARAM(0))->readIntExt(GET_PARAM(1)); + ZLOGI(TAG, "pump_get_subic_reg: %d %x -> %x ", GET_PARAM(0), GET_PARAM(1), val); + + zcanbus_send_ack(cxt->packet, (uint8_t*)&val, sizeof(val)); +} +void TmcMotorGroup::fn_pump_ping(ProcessContext* cxt) { + CHECK_PARAM_LEN(PRAAM_LEN(), 1); + MOTOR_CHECK(); + zcanbus_send_ack(cxt->packet, NULL, 0); +} diff --git a/usrc/module/tmc_motor_group.hpp b/usrc/module/tmc_motor_group.hpp new file mode 100644 index 0000000..582b45c --- /dev/null +++ b/usrc/module/tmc_motor_group.hpp @@ -0,0 +1,38 @@ +#pragma once +#include "base/appdep.hpp" + +namespace iflytop { +using namespace transmit_disfection_protocol; + +class TmcMotorGroup { + public: + TMC51X0 m_motor[2]; // 蠕动泵控制 + ZGPIO m_tmc_power_pin; // + bool m_isInitialized = false; + + public: + void initialize(Pin_t tmcPowerPin, TMC51X0Cfg cfg0, TMC51X0Cfg cfg1); + bool isInitialized() { return m_isInitialized; } + + int motorNum() { return 2; } + TMC51X0* motor(int32_t index) { + if (index < 0 || index >= motorNum()) { + return nullptr; + } + return &m_motor[index]; + } + + private: + void fn_pump_rotate(ProcessContext* cxt); + void fn_pump_stop(ProcessContext* cxt); + void fn_pump_set_ihold_irun_idelay(ProcessContext* cxt); + void fn_pump_set_acc(ProcessContext* cxt); + void fn_pump_set_ramp(ProcessContext* cxt); + void fn_pump_set_tzw(ProcessContext* cxt); + void fn_pump_set_subic_reg(ProcessContext* cxt); + void fn_pump_get_subic_reg(ProcessContext* cxt); + void fn_pump_ping(ProcessContext* cxt); + + public: +}; +} // namespace iflytop \ No newline at end of file diff --git a/usrc/module/warning_light_driver.hpp b/usrc/module/warning_light_driver.hpp new file mode 100644 index 0000000..b0d456e --- /dev/null +++ b/usrc/module/warning_light_driver.hpp @@ -0,0 +1,61 @@ +#pragma once +#include "base/appdep.hpp" + +namespace iflytop { +using namespace transmit_disfection_protocol; + +class WarningLightDriver { + ZGPIO triLight_R; + ZGPIO triLight_G; + ZGPIO triLight_B; + ZGPIO triLight_BEEP; + bool m_isInitialized = false; + + public: + void initialize(Pin_t r, Pin_t g, Pin_t b, Pin_t beep) { + triLight_R.initAsOutput(r, kxs_gpio_nopull, false, false); + triLight_G.initAsOutput(g, kxs_gpio_nopull, false, false); + triLight_B.initAsOutput(b, kxs_gpio_nopull, false, false); + triLight_BEEP.initAsOutput(beep, kxs_gpio_nopull, false, false); + m_isInitialized = true; + BIND_FN(WarningLightDriver, this, fn_triple_warning_light_ctl); + } + bool isInitialized() { return m_isInitialized; } + + void setRGBW(int32_t r, int32_t g, int32_t b, int32_t beep) { + if (r > 0) + triLight_R.write(1); + else + triLight_R.write(0); + + if (g > 0) + triLight_G.write(1); + else + triLight_G.write(0); + + if (b > 0) + triLight_B.write(1); + else + triLight_B.write(0); + + if (beep > 0) + triLight_BEEP.write(1); + else + triLight_BEEP.write(0); + } + + private: + void fn_triple_warning_light_ctl(ProcessContext* cxt) { + CHECK_PARAM_LEN(PRAAM_LEN(), 4); + + int32_t r = GET_PARAM(0); + int32_t g = GET_PARAM(1); + int32_t b = GET_PARAM(2); + int32_t warning = GET_PARAM(3); + + ZLOGI("WarningLightDriver", "triple_warning_light_ctl: r:%d g:%d b:%d warning:%d", r, g, b, warning); + setRGBW(r, g, b, warning); + zcanbus_send_ack(cxt->packet, NULL, 0); + } +}; +} // namespace iflytop \ No newline at end of file diff --git a/usrc/module/water_sensor_mgr.hpp b/usrc/module/water_sensor_mgr.hpp new file mode 100644 index 0000000..7aaabd6 --- /dev/null +++ b/usrc/module/water_sensor_mgr.hpp @@ -0,0 +1,29 @@ +#pragma once +#include "base/appdep.hpp" + +namespace iflytop { +using namespace transmit_disfection_protocol; + +class WaterSensorMgr { + ZGPIO evaporationBinWS; // 蒸发仓水浸 + ZGPIO deviceBottomWS; // 设备底部水浸 + bool m_isInitialized = false; + + public: + void initialize(Pin_t evaporationBinWSPin, Pin_t deviceBottomWSPin) { + evaporationBinWS.initAsInput(evaporationBinWSPin, kxs_gpio_nopull, kxs_gpio_no_irq, true /*mirror*/); + deviceBottomWS.initAsInput(deviceBottomWSPin, kxs_gpio_nopull, kxs_gpio_no_irq, true /*mirror*/); + m_isInitialized = true; + } + bool isInitialized() { return m_isInitialized; } + + void fn_evaporation_tank_water_sensor_read_state(ProcessContext* cxt) { + int32_t val = evaporationBinWS.read(); + zcanbus_send_ack(cxt->packet, (uint8_t*)&val, sizeof(val)); + } + void fn_device_bottom_water_sensor_read_state(ProcessContext* cxt) { + int32_t val = deviceBottomWS.read(); + zcanbus_send_ack(cxt->packet, (uint8_t*)&val, sizeof(val)); + } +}; +} // namespace iflytop \ No newline at end of file