You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

71 lines
1.7 KiB

#include "hpp272.hpp"
#include "stm32components/modbus/modbus_block_host.hpp"
using namespace iflytop;
#define TAG "HPP272"
void HPP272::init(ModbusBlockHost* modbusBlockHost) {
m_modbusBlockHost = modbusBlockHost;
m_id = 240;
m_cache_lock.init();
}
bool HPP272::ping(int id) {
int16_t val = 0;
return m_modbusBlockHost->readReg03(id, 0x1F00, (uint16_t*)&val, 100);
}
void HPP272::setid(int32_t id) { m_id = id; }
void HPP272::read_calibration_date(int32_t* year, int32_t* month, int32_t* day) { // TODO
*year = 0;
*month = 0;
*day = 0;
}
int32_t HPP272::read_errorcode() {
int16_t val = 0;
bool suc = m_modbusBlockHost->readReg03(m_id, 0x0200, (uint16_t*)&val, 100);
if (!suc) {
return -1;
}
// 0 = Status OK.
// 1 = Critical error,maintenance needed.
// 2 = Error, device may recover automatically.
// 4 = Warning.
// 8 = Notification.
// 16 = Calibration enabled
return val;
}
bool HPP272::read_reg(int32_t add, uint16_t* val, size_t len) { return m_modbusBlockHost->readReg03Muti(m_id, add, val, len, 100); }
bool HPP272::read_sensor_data(hpp272_data_t* sensordata) { //
return m_modbusBlockHost->readReg03Muti(m_id, 0x0100, (uint16_t*)sensordata, sizeof(*sensordata) / 2, 100);
}
void HPP272::updateSensorDataAndErrorcode() {
if (!read_sensor_data(&m_readbuf)) {
return;
}
int32_t errorcode = read_errorcode();
{
zlock_guard lck(m_cache_lock);
m_cachedata = m_readbuf;
m_cache_errorcode = errorcode;
}
}
int32_t HPP272::read_cache_errorcode() {
zlock_guard lck(m_cache_lock);
return m_cache_errorcode;
}
bool HPP272::read_cache_sensor_data(hpp272_data_t* sensordata) {
zlock_guard lck(m_cache_lock);
*sensordata = m_cachedata;
return true;
}