diff --git a/src/iflytop/components/zcanreceiver/zcanhost.cpp b/src/iflytop/components/zcanreceiver/zcanhost.cpp index 0270cd9..218987a 100644 --- a/src/iflytop/components/zcanreceiver/zcanhost.cpp +++ b/src/iflytop/components/zcanreceiver/zcanhost.cpp @@ -269,9 +269,11 @@ int32_t ZCanHost::writeio(int id, bool value) { logger->error("writeio error ack,{}", *zuint16p(&rx->data[0])); return err::zecode(err::knoack); } - + m_writeio_cache[id] = value; return 0; } +bool ZCanHost::read_writeio_state_cache(int id) { return m_writeio_cache[id]; } + int32_t ZCanHost::readadc(int id, int& value) { shared_ptr cmd = make_shared(); cmd->cmdid = 3; @@ -308,9 +310,10 @@ int32_t ZCanHost::pumpctrl_c1004(int sensorid, int16_t acc, int16_t rpm) { logger->error("pumpctrl_c1004 error ack,{}", *zuint16p(&rx->data[0])); return err::zecode(err::kfail); } - + m_pumpc1004_speed_cache[sensorid] = rpm; return 0; } +int16_t ZCanHost::pumpctrl_c1004_get_speed_cache(int id) { return m_pumpc1004_speed_cache[id]; } int32_t ZCanHost::pumpctrl_c1004(int sensorid, int16_t acc, int16_t rpm, int8_t idlepower, int8_t power) { shared_ptr cmd = make_shared(); diff --git a/src/iflytop/components/zcanreceiver/zcanhost.hpp b/src/iflytop/components/zcanreceiver/zcanhost.hpp index 2d6ac10..2ec7e70 100644 --- a/src/iflytop/components/zcanreceiver/zcanhost.hpp +++ b/src/iflytop/components/zcanreceiver/zcanhost.hpp @@ -21,6 +21,10 @@ class ZCanHost { map> m_cmdMap; + bool m_writeio_cache[255]; + + int16_t m_pumpc1004_speed_cache[255]; + public: void initialize(string can_if_name, int baudrate, bool enablLoopback); bool execcmd(string cmd, string& retval); @@ -34,7 +38,10 @@ class ZCanHost { int32_t ping(int board_id); int32_t readio(int id, bool& value); + int32_t writeio(int id, bool value); + bool read_writeio_state_cache(int id); + int32_t readadc(int id, int& value); // 读取M211887(维萨拉)传感器信息 @@ -72,6 +79,8 @@ class ZCanHost { int32_t pumpctrl_c1004(int sensorid, int16_t acc, int16_t rpm); int32_t pumpctrl_c1004(int sensorid, int16_t acc, int16_t rpm, int8_t idlepower, int8_t power); + int16_t pumpctrl_c1004_get_speed_cache(int id); + /** * @brief 读取华成压力传感器数值 * @@ -85,6 +94,19 @@ class ZCanHost { int16_t zero; // 零点 int16_t full; // 满量程 } huacheng_pressure_sensor_read_c1005_t; + int32_t huacheng_pressure_sensor_get_pa(huacheng_pressure_sensor_read_c1005_t* rawdata) { + if (rawdata->unit == 0) { + int32_t pa = (int32_t)rawdata->value / (10.0 * rawdata->precision) * 1000000; + return pa; + } else if (rawdata->unit == 1) { + int32_t pa = (int32_t)rawdata->value / (10.0 * rawdata->precision) * 1000; + return pa; + } else if (rawdata->unit == 2) { + int32_t pa = (int32_t)rawdata->value / (10.0 * rawdata->precision); + return pa; + } + return -1; + } int32_t huacheng_pressure_sensor_read_c1005(int sensorid, huacheng_pressure_sensor_read_c1005_t& value); };