From d75cc83259bb84442b8900d4904082ba5b293bd3 Mon Sep 17 00:00:00 2001 From: zhaohe Date: Sun, 12 May 2024 18:02:14 +0800 Subject: [PATCH] update --- iflytop_canbus_protocol | 2 +- usrc/base/hardware.cpp | 105 +++++++-------------- usrc/base/hardware.hpp | 66 +++++++++++-- .../protocol_impl/function_impl/afunction_impl.hpp | 16 +++- .../function_impl/cmd_air_compressor_fn_impl.cpp | 24 +++++ .../function_impl/cmd_blowser_fn_impl.cpp | 24 +++++ usrc/protocol_impl/protocol_impl_service.cpp | 16 +++- zsdk | 2 +- 8 files changed, 169 insertions(+), 86 deletions(-) create mode 100644 usrc/protocol_impl/function_impl/cmd_air_compressor_fn_impl.cpp create mode 100644 usrc/protocol_impl/function_impl/cmd_blowser_fn_impl.cpp diff --git a/iflytop_canbus_protocol b/iflytop_canbus_protocol index 955c39e..cf98950 160000 --- a/iflytop_canbus_protocol +++ b/iflytop_canbus_protocol @@ -1 +1 @@ -Subproject commit 955c39e8b8aa1480b0846a1ae26aaa6ba4e38ce0 +Subproject commit cf9895020ce2ad2ee628dd27ee4d74d633b832e6 diff --git a/usrc/base/hardware.cpp b/usrc/base/hardware.cpp index 90def62..d55dbc4 100644 --- a/usrc/base/hardware.cpp +++ b/usrc/base/hardware.cpp @@ -15,63 +15,11 @@ using namespace iflytop; static osThreadId H2O2CaptureThreadId; static osThreadId AdcCaptureThreadId; -// 加热片控制 -ZGPIO m_Heater_ctrlGpio; -ZGPIO m_Heater_safeCtrlGpio; -ZADC m_Heater_electricCurrentAdc; -ZADC m_Heater_temperatureAdc; - -// 鼓风机 -ZGPIO m_Blowser_ctrlGpio; -ZGPIO m_Blowser_safeCtrlGpio; -ZADC m_Blowser_electricCurrentAdc; - -// 空压机 -ZGPIO m_AirCompressor_ctrlGpio; -ZGPIO m_AirCompressor_safeCtrlGpio; -ZADC m_AirCompressor_electricCurrentAdc; - -// H2O2过氧化氢 - -#ifdef H2O2_SENSOR_TYPE_HMP110 -static ModbusBlockHost m_H2o2Sensor_ModbusBlockHost; // -static ZADC m_H2o2Sensor_H2O2Adc; // H2O2传感器控制 -static HMP110 m_H2o2Sensor_HMP110; // H2O2传感器 -static int32_t m_h2o2sensor_detectId = -1; - -#endif - -#ifdef H2O2_SENSOR_TYPE_HPP272 -static ModbusBlockHost m_H2o2Sensor_ModbusBlockHost; // -static HPP272 m_H2o2Sensor_HPP272; // H2O2传感器 -static int32_t m_h2o2sensor_detectId = -1; -#endif - /*********************************************************************************************************************** * FUNC * ***********************************************************************************************************************/ -static void onAdcCaptureThreadId(void const* argument) { - while (1) { - osDelay(30); - // m_Heater_electricCurrentAdc.updateAdcValToCache(); - // m_Heater_temperatureAdc.updateAdcValToCache(); - // m_Blowser_electricCurrentAdc.updateAdcValToCache(); - // m_AirCompressor_electricCurrentAdc.updateAdcValToCache(); - } -} - -static void onH2O2CaptureThreadId(void const* argument) { - while (1) { - osDelay(1000); - -#ifdef H2O2_SENSOR_TYPE_HMP110 - if (m_h2o2sensor_detectId > 0) { - m_H2o2Sensor_H2O2Adc.updateAdcValToCache(); - m_H2o2Sensor_HMP110.updateSensorDataAndErrorcode(); - } -#endif - } -} +static void c_onAdcCaptureThread(void const* argument) { Hardware::ins().onAdcCaptureThread(); } +static void c_onH2O2CaptureThread(void const* argument) { Hardware::ins().onH2O2CaptureThread(); } void Hardware::init() { /*********************************************************************************************************************** @@ -140,31 +88,14 @@ void Hardware::init() { #endif - osThreadDef(AdcCaptureThread, onAdcCaptureThreadId, osPriorityNormal, 0, 1024); + osThreadDef(AdcCaptureThread, c_onAdcCaptureThread, osPriorityNormal, 0, 1024); AdcCaptureThreadId = osThreadCreate(osThread(AdcCaptureThread), NULL); - osThreadDef(H2O2CaptureThread, onH2O2CaptureThreadId, osPriorityNormal, 0, 1024); + osThreadDef(H2O2CaptureThread, c_onH2O2CaptureThread, osPriorityNormal, 0, 1024); H2O2CaptureThreadId = osThreadCreate(osThread(H2O2CaptureThread), NULL); } /*********************************************************************************************************************** - * FUMP_IMPL * - ***********************************************************************************************************************/ -void Hardware::heater_ctrl(int32_t val) { m_Heater_ctrlGpio.write(val); } -void Hardware::heater_ctrl_safe_valve(int32_t val) { m_Heater_safeCtrlGpio.write(val); } -int32_t Hardware::heater_read_electric_current() { - int32_t adcv = m_Heater_electricCurrentAdc.getCacheVal(); - int32_t ma = (adcv / 4095.0 * 3.3 * 1000) / 150.0; - return ma; -} -int32_t Hardware::heater_read_temperature_data() { - int32_t adcv = m_Heater_temperatureAdc.getCacheVal(); - int32_t ma = (adcv / 4095.0 * 3.3 * 1000) / 150.0; - int32_t temp = (ma - 4) / (20 - 4) * (3000 - 0) + 0; - return temp; // C*10 -} - -/*********************************************************************************************************************** * H2O2 * ***********************************************************************************************************************/ @@ -257,4 +188,32 @@ int32_t Hardware::h2o2_sensor_data(report_h2o2_data_t* readdata) { return 0; #endif +} + +void Hardware::onAdcCaptureThread() { + while (1) { + osDelay(30); + m_Heater_electricCurrentAdc.updateAdcValToCache(); + m_Heater_temperatureAdc.updateAdcValToCache(); + m_Blowser_electricCurrentAdc.updateAdcValToCache(); + m_AirCompressor_electricCurrentAdc.updateAdcValToCache(); + } +} +void Hardware::onH2O2CaptureThread() { + while (1) { + osDelay(1000); + +#ifdef H2O2_SENSOR_TYPE_HMP110 + if (m_h2o2sensor_detectId > 0) { + m_H2o2Sensor_H2O2Adc.updateAdcValToCache(); + m_H2o2Sensor_HMP110.updateSensorDataAndErrorcode(); + } +#endif + +#ifdef H2O2_SENSOR_TYPE_HPP272 + if (m_h2o2sensor_detectId > 0) { + m_H2o2Sensor_HPP272.updateSensorDataAndErrorcode(); + } +#endif + } } \ No newline at end of file diff --git a/usrc/base/hardware.hpp b/usrc/base/hardware.hpp index c3b2bd4..b7619f3 100644 --- a/usrc/base/hardware.hpp +++ b/usrc/base/hardware.hpp @@ -15,7 +15,35 @@ void hardware_init(); namespace iflytop { class Hardware { + // 加热片控制 + ZGPIO m_Heater_ctrlGpio; + ZGPIO m_Heater_safeCtrlGpio; + ZADC m_Heater_electricCurrentAdc; + ZADC m_Heater_temperatureAdc; + // 鼓风机 + ZGPIO m_Blowser_ctrlGpio; + ZGPIO m_Blowser_safeCtrlGpio; + ZADC m_Blowser_electricCurrentAdc; + + // 空压机 + ZGPIO m_AirCompressor_ctrlGpio; + ZGPIO m_AirCompressor_safeCtrlGpio; + ZADC m_AirCompressor_electricCurrentAdc; + +#ifdef H2O2_SENSOR_TYPE_HMP110 + ModbusBlockHost m_H2o2Sensor_ModbusBlockHost; // + ZADC m_H2o2Sensor_H2O2Adc; // H2O2传感器控制 + HMP110 m_H2o2Sensor_HMP110; // H2O2传感器 + int32_t m_h2o2sensor_detectId = -1; + +#endif + +#ifdef H2O2_SENSOR_TYPE_HPP272 + ModbusBlockHost m_H2o2Sensor_ModbusBlockHost; // + HPP272 m_H2o2Sensor_HPP272; // H2O2传感器 + int32_t m_h2o2sensor_detectId = -1; +#endif public: static Hardware& ins() { @@ -25,19 +53,45 @@ class Hardware { void init(); - void mini_pwm_blower_ctrl(int32_t val); - int32_t mini_pwm_blower_read_fbcount(); + void heater_ctrl(int32_t val) { m_Heater_ctrlGpio.write(val); } + void heater_ctrl_safe_valve(int32_t val) { m_Heater_safeCtrlGpio.write(val); } + int32_t heater_read_electric_current() { + int32_t adcv = m_Heater_electricCurrentAdc.getCacheVal(); + int32_t ma = (adcv / 4095.0 * 3.3 * 1000) / 150.0; + return ma; + } + int32_t heater_read_temperature_data() { + int32_t adcv = m_Heater_temperatureAdc.getCacheVal(); + int32_t ma = (adcv / 4095.0 * 3.3 * 1000) / 150.0; + int32_t temp = (ma - 4) / (20 - 4) * (3000 - 0) + 0; + return temp; // C*10 + } - void heater_ctrl(int32_t val); - void heater_ctrl_safe_valve(int32_t val); - int32_t heater_read_electric_current(); - int32_t heater_read_temperature_data(); + void blower_ctrl(int32_t val) { m_Blowser_ctrlGpio.write(val); } + void blower_ctrl_safe_valve(int32_t val) { m_Blowser_safeCtrlGpio.write(val); } + int32_t blower_read_electric_current() { + int32_t adcv = m_Heater_electricCurrentAdc.getCacheVal(); + int32_t ma = (adcv / 4095.0 * 3.3 * 1000) / 150.0; + return ma; + } + + void air_compressor_ctrl(int32_t val) { m_AirCompressor_ctrlGpio.write(val); } + void air_compressor_ctrl_safe_valve(int32_t val) { m_AirCompressor_safeCtrlGpio.write(val); } + int32_t air_compressor_read_electric_current() { + int32_t adcv = m_AirCompressor_electricCurrentAdc.getCacheVal(); + int32_t ma = (adcv / 4095.0 * 3.3 * 1000) / 150.0; + return ma; + } 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); + + public: + void onAdcCaptureThread(); + void onH2O2CaptureThread(); }; } // namespace iflytop diff --git a/usrc/protocol_impl/function_impl/afunction_impl.hpp b/usrc/protocol_impl/function_impl/afunction_impl.hpp index 19fe2d2..6c16f5b 100644 --- a/usrc/protocol_impl/function_impl/afunction_impl.hpp +++ b/usrc/protocol_impl/function_impl/afunction_impl.hpp @@ -14,22 +14,30 @@ * basic_fn * ***********************************************************************************************************************/ +void basic_fn_init(); void fn_cmd_read_board_info(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len); void fn_cmd_read_sysinfo(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len); void fn_cmd_read_taskinfo(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len); void fn_cmd_heart_ping(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len); void fn_cmd_clear_reset_flag(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len); -void basic_fn_init(); - +void heater_fn_impl_init(); void fn_cmd_heater_ctrl(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len); void fn_cmd_heater_ctrl_safe_valve(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len); void fn_cmd_heater_read_electric_current(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len); void fn_cmd_heater_read_temperature_data(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len); -void heater_fn_impl_init(); +void blower_fn_impl_init(); +void fn_cmd_blower_ctrl(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len); +void fn_cmd_blower_ctrl_safe_valve(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len); +void fn_cmd_blower_read_electric_current(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len); + +void air_compressor_fn_impl_init(); +void fn_cmd_air_compressor_ctrl(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len); +void fn_cmd_air_compressor_ctrl_safe_valve(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len); +void fn_cmd_air_compressor_read_electric_current(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len); +void h2o2_fn_impl_init(); void fn_cmd_h2o2_sensor_read_calibration_date(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len); void fn_cmd_h2o2_sensor_read_sub_ic_errorcode(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len); void fn_cmd_h2o2_sensor_read_sub_ic_reg(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len); -void h2o2_fn_impl_init(); diff --git a/usrc/protocol_impl/function_impl/cmd_air_compressor_fn_impl.cpp b/usrc/protocol_impl/function_impl/cmd_air_compressor_fn_impl.cpp new file mode 100644 index 0000000..473e651 --- /dev/null +++ b/usrc/protocol_impl/function_impl/cmd_air_compressor_fn_impl.cpp @@ -0,0 +1,24 @@ + +#include "afunction_impl.hpp" +using namespace iflytop; + +#define TAG "PROTO-AIR_COMP" + +void fn_cmd_air_compressor_ctrl(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len) { + CHECK_PARAM_LEN(PARAM_LEN(), 1); + Hardware::ins().air_compressor_ctrl(GET_PARAM(packet->params, 0)); + zcanbus_send_ack(packet, NULL, 0); +} + +void fn_cmd_air_compressor_ctrl_safe_valve(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len) { + CHECK_PARAM_LEN(PARAM_LEN(), 1); + Hardware::ins().air_compressor_ctrl_safe_valve(GET_PARAM(packet->params, 0)); + zcanbus_send_ack(packet, NULL, 0); +} + +void fn_cmd_air_compressor_read_electric_current(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len) { + int32_t current = Hardware::ins().air_compressor_read_electric_current(); + zcanbus_send_ack(packet, (uint8_t*)¤t, sizeof(current)); +} + +void air_compressor_fn_impl_init() {} diff --git a/usrc/protocol_impl/function_impl/cmd_blowser_fn_impl.cpp b/usrc/protocol_impl/function_impl/cmd_blowser_fn_impl.cpp new file mode 100644 index 0000000..34716d0 --- /dev/null +++ b/usrc/protocol_impl/function_impl/cmd_blowser_fn_impl.cpp @@ -0,0 +1,24 @@ + +#include "afunction_impl.hpp" +using namespace iflytop; + +#define TAG "PROTO-BLOWER" + +void fn_cmd_blower_ctrl(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len) { + CHECK_PARAM_LEN(PARAM_LEN(), 1); + Hardware::ins().blower_ctrl(GET_PARAM(packet->params, 0)); + zcanbus_send_ack(packet, NULL, 0); +} + +void fn_cmd_blower_ctrl_safe_valve(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len) { + CHECK_PARAM_LEN(PARAM_LEN(), 1); + Hardware::ins().blower_ctrl_safe_valve(GET_PARAM(packet->params, 0)); + zcanbus_send_ack(packet, NULL, 0); +} + +void fn_cmd_blower_read_electric_current(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len) { + int32_t current = Hardware::ins().blower_read_electric_current(); + zcanbus_send_ack(packet, (uint8_t*)¤t, sizeof(current)); +} + +void blower_fn_impl_init() {} diff --git a/usrc/protocol_impl/protocol_impl_service.cpp b/usrc/protocol_impl/protocol_impl_service.cpp index db1aae3..4f465bd 100644 --- a/usrc/protocol_impl/protocol_impl_service.cpp +++ b/usrc/protocol_impl/protocol_impl_service.cpp @@ -43,7 +43,7 @@ void protocol_impl_service_init() { // zcanbus_init(deviceInfo_getBoardId()); zcanbus_reglistener(zcanbus_on_rx); zcanbus_reg_on_connected_listener(zcanbus_on_connected); - + { basic_fn_init(); fn_map_reg(kcmd_read_board_info, fn_cmd_read_board_info); @@ -68,6 +68,20 @@ void protocol_impl_service_init() { // fn_map_reg(kcmd_heater_read_temperature_data, fn_cmd_heater_read_temperature_data); } + { + blower_fn_impl_init(); + fn_map_reg(kcmd_blower_ctrl, fn_cmd_blower_ctrl); + fn_map_reg(kcmd_blower_ctrl_safe_valve, fn_cmd_blower_ctrl_safe_valve); + fn_map_reg(kcmd_blower_read_electric_current, fn_cmd_blower_read_electric_current); + } + + { + air_compressor_fn_impl_init(); + fn_map_reg(kcmd_air_compressor_ctrl, fn_cmd_air_compressor_ctrl); + fn_map_reg(kcmd_air_compressor_ctrl_safe_valve, fn_cmd_air_compressor_ctrl_safe_valve); + fn_map_reg(kcmd_air_compressor_read_electric_current, fn_cmd_air_compressor_read_electric_current); + } + osThreadDef(PacketRxThread, onPacketRxThreadStart, osPriorityNormal, 0, 1024); PacketRxThreadId = osThreadCreate(osThread(PacketRxThread), NULL); } diff --git a/zsdk b/zsdk index 5995529..c88c14b 160000 --- a/zsdk +++ b/zsdk @@ -1 +1 @@ -Subproject commit 59955298ef676c401438a09236f699520d114f86 +Subproject commit c88c14bebbce81a3b6e0d461588e958eb0e839d3