From 3bac3bf4ac0fea948fc848cdaf7f1a8a183b493e Mon Sep 17 00:00:00 2001 From: zhaohe Date: Sat, 10 Aug 2024 22:38:40 +0800 Subject: [PATCH] update --- usrc/app/dmapp.hpp | 2 +- usrc/app/exth2o2_sensor.hpp | 2 +- usrc/module/h2o2_sensor.cpp | 109 +++++++++++++++++++++++++++++++++++++ usrc/module/h2o2_sensor.hpp | 52 ++++++++++++++++++ usrc/module/h2o2_sensor_driver.cpp | 109 ------------------------------------- usrc/module/h2o2_sensor_driver.hpp | 52 ------------------ usrc/module/module.hpp | 2 +- 7 files changed, 164 insertions(+), 164 deletions(-) create mode 100644 usrc/module/h2o2_sensor.cpp create mode 100644 usrc/module/h2o2_sensor.hpp delete mode 100644 usrc/module/h2o2_sensor_driver.cpp delete mode 100644 usrc/module/h2o2_sensor_driver.hpp diff --git a/usrc/app/dmapp.hpp b/usrc/app/dmapp.hpp index 3c68a62..948791d 100644 --- a/usrc/app/dmapp.hpp +++ b/usrc/app/dmapp.hpp @@ -29,7 +29,7 @@ class DisinfectionApp { HeaterController heaterCtrler; BlowerController blowerCtrler; AirCompressorController airComCtrler; - H2O2SensorDriver h2o2Sensor; + H2O2Sensor h2o2Sensor; ZGPIO evaporationBinWS; // 蒸发仓水浸 ZGPIO deviceBottomWS; // 设备底部水浸 diff --git a/usrc/app/exth2o2_sensor.hpp b/usrc/app/exth2o2_sensor.hpp index e5c3acb..ebfdd95 100644 --- a/usrc/app/exth2o2_sensor.hpp +++ b/usrc/app/exth2o2_sensor.hpp @@ -21,7 +21,7 @@ class ExtH2O2Sensor { } light_state_t; public: - H2O2SensorDriver h2o2Sensor; + H2O2Sensor h2o2Sensor; ZGPIO m_alarmLightR; ZGPIO m_alarmLightG; diff --git a/usrc/module/h2o2_sensor.cpp b/usrc/module/h2o2_sensor.cpp new file mode 100644 index 0000000..c06f78d --- /dev/null +++ b/usrc/module/h2o2_sensor.cpp @@ -0,0 +1,109 @@ +#include "h2o2_sensor.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) { + H2O2Sensor* driver = (H2O2Sensor*)argument; + driver->onH2O2CaptureThread(); +} + +void H2O2Sensor::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(H2O2Sensor, this, fn_h2o2_sensor_read_calibration_date); + BIND_FN(H2O2Sensor, this, fn_h2o2_sensor_read_sub_ic_errorcode); + BIND_FN(H2O2Sensor, this, fn_h2o2_sensor_read_sub_ic_reg); +} + +/*********************************************************************************************************************** + * H2O2 * + ***********************************************************************************************************************/ + +bool H2O2Sensor::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 H2O2Sensor::h2o2_sensor_read_calibration_date(int32_t* year, int32_t* month, int32_t* day) { // + *year = 1; + *month = 2; + *day = 3; + return 0; +} +int32_t H2O2Sensor::h2o2_sensor_read_sub_ic_errorcode() { // + return m_HMP110.read_cache_errorcode(); +} +int32_t H2O2Sensor::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 H2O2Sensor::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 H2O2Sensor::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); + 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.hpp b/usrc/module/h2o2_sensor.hpp new file mode 100644 index 0000000..8acba06 --- /dev/null +++ b/usrc/module/h2o2_sensor.hpp @@ -0,0 +1,52 @@ +#pragma once +#include "base/appdep.hpp" + +namespace iflytop { +using namespace transmit_disfection_protocol; + +class H2O2Sensor { + 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/h2o2_sensor_driver.cpp b/usrc/module/h2o2_sensor_driver.cpp deleted file mode 100644 index 3f464e8..0000000 --- a/usrc/module/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/module/h2o2_sensor_driver.hpp b/usrc/module/h2o2_sensor_driver.hpp deleted file mode 100644 index d64ddaf..0000000 --- a/usrc/module/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/module/module.hpp b/usrc/module/module.hpp index eccaf43..be7fc18 100644 --- a/usrc/module/module.hpp +++ b/usrc/module/module.hpp @@ -2,7 +2,7 @@ // #include "air_compressor_controller.hpp" #include "blower_controller.hpp" -#include "h2o2_sensor_driver.hpp" +#include "h2o2_sensor.hpp" #include "heater_controller.hpp" #include "proportional_valve_ctrl.hpp" #include "pxxpsbus.hpp"