diff --git a/usrc/app/dmapp.cpp b/usrc/app/dmapp.cpp index fd25f99..ddd4fb7 100644 --- a/usrc/app/dmapp.cpp +++ b/usrc/app/dmapp.cpp @@ -53,7 +53,7 @@ void DisinfectionApp::initialize() { else if (PORT::isPowerCtrlBoard() && (PORT::isPipeDM())) { LargeSpaceDmPowerCtrlBoardHal::HADC1_INIT(); LargeSpaceDmPowerCtrlBoardHal::HUART2_INIT(9600, UART_STOPBITS_1); - blowerCtrler.initializeAsHighPowerUartBlower(&huart2, &hadc1, ADC_CHANNEL_1); + blowerCtrler.initializeAsHighPowerUartBlower(PC5, &huart2, &hadc1, ADC_CHANNEL_1); } /*********************************************************************************************************************** diff --git a/usrc/module/blower_controller.hpp b/usrc/module/blower_controller.hpp index 58c3038..16e20b8 100644 --- a/usrc/module/blower_controller.hpp +++ b/usrc/module/blower_controller.hpp @@ -41,7 +41,8 @@ class BlowerController { bindFn(); } - void initializeAsHighPowerUartBlower(UART_HandleTypeDef* huart, ADC_HandleTypeDef* iadc, uint32_t ich) { + void initializeAsHighPowerUartBlower(Pin_t ctrlGpio, UART_HandleTypeDef* huart, ADC_HandleTypeDef* iadc, uint32_t ich) { + m_ctrlGpio.initAsOutput(ctrlGpio, kxs_gpio_nopull, true, false); m_modbusblock.initialize(huart); m_iadc.initialize("Blower-iadc", iadc, ich); AppPeriodTaskMgr::ins()->regTask("AC-ADC", [this]() { periodTask(); }, 1000); @@ -69,24 +70,12 @@ class BlowerController { BIND_FN(BlowerController, this, fn_blower_is_error); BIND_FN(BlowerController, this, fn_blower_read_ei_adc_raw); BIND_FN(BlowerController, this, fn_blower_is_open); - } + } /*********************************************************************************************************************** * 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(int32_t val) {} void blower_ctrl_safe_valve(int32_t val) {} int32_t blower_read_ei() { if (m_blowerType == kIOBlower || m_blowerType == kHighPowerUartBlower) { @@ -114,9 +103,25 @@ class BlowerController { * PP * ***********************************************************************************************************************/ void fn_blower_ctrl(ProcessContext* cxt) { // - blower_ctrl(GET_PARAM(0)); - zcanbus_send_ack(cxt->packet, NULL, 0); - isopen = GET_PARAM(0) > 0 ? true : false; + int32_t val = GET_PARAM(0); + if (m_blowerType == kIOBlower) { + m_ctrlGpio.write(val); + zcanbus_send_ack(cxt->packet, NULL, 0); + isopen = GET_PARAM(0) > 0 ? true : false; + } else if (m_blowerType == kHighPowerUartBlower) { + m_ctrlGpio.write(val); + bool suc = val > 0 ? m_modbusblock.writeReg06(1, 0x2000, 1, 50) : m_modbusblock.writeReg06(1, 0x2000, 6, 50); + if (suc) { + m_ctrlGpio.write(val); + zcanbus_send_ack(cxt->packet, NULL, 0); + isopen = GET_PARAM(0) > 0 ? true : false; + } else { + zcanbus_send_errorack(cxt->packet, err::kerr_overtime); + } + + } else if (m_blowerType == kMiniPwmBlower) { + mini_pwm_blower_ctrl(val); + } } void fn_blower_ctrl_safe_valve(ProcessContext* cxt) { // blower_ctrl_safe_valve(GET_PARAM(0));