diff --git a/components/zcan_module/huacheng_pressure_sensor.cpp b/components/zcan_module/huacheng_pressure_sensor.cpp index 6107004..cfeda40 100644 --- a/components/zcan_module/huacheng_pressure_sensor.cpp +++ b/components/zcan_module/huacheng_pressure_sensor.cpp @@ -24,6 +24,14 @@ void HuachengPressureSensor::regSubmodule(int id, UART_HandleTypeDef* huart, uin m_submodules.push_back(submodule); } +void HuachengPressureSensor::regSubmodule(int id, readsensorfn_t readfn) { + Submodule* submodule = new Submodule(); + ZASSERT(submodule != NULL); + submodule->id = id; + submodule->readsensorfn = readfn; + m_submodules.push_back(submodule); +} + void HuachengPressureSensor::onRceivePacket(CanPacketRxBuffer* rxbuf, uint8_t* packet, size_t len) { Cmdheader_t* cmdheader = (Cmdheader_t*)packet; if (cmdheader->cmdid == kcmd_read_huacheng_pressure_sensor && cmdheader->subcmdid == 0) { @@ -57,7 +65,13 @@ void HuachengPressureSensor::onRceivePacket(CanPacketRxBuffer* rxbuf, uint8_t* p uint8_t txbuff[10] = {}; txbuff[0] = id; DP600PressureSensor::sensor_data_t data; - bool suc = subm->sensor.readVal(&data); + + bool suc = false; + if (subm->readsensorfn) { + suc = subm->readsensorfn(&data); + } else { + suc = subm->sensor.readVal(&data); + } if (suc) { txbuff[0] = id; diff --git a/components/zcan_module/huacheng_pressure_sensor.hpp b/components/zcan_module/huacheng_pressure_sensor.hpp index bf442f3..072784d 100644 --- a/components/zcan_module/huacheng_pressure_sensor.hpp +++ b/components/zcan_module/huacheng_pressure_sensor.hpp @@ -13,12 +13,13 @@ namespace iflytop { class HuachengPressureSensor : public ZCanRceiverListener { public: - typedef function readpresure_t; + typedef function readsensorfn_t; class Submodule { public: int id; DP600PressureSensor sensor; + readsensorfn_t readsensorfn = nullptr; }; private: @@ -33,6 +34,7 @@ class HuachengPressureSensor : public ZCanRceiverListener { public: void initialize(ZCanReceiver* zcanReceiver); void regSubmodule(int id, UART_HandleTypeDef* huart, uint8_t modbusid); + void regSubmodule(int id, readsensorfn_t readfn); public: virtual void onRceivePacket(CanPacketRxBuffer* rxbuf, uint8_t* packet, size_t len);