diff --git a/Modbus/inc/ModbusRegister.h b/Modbus/inc/ModbusRegister.h new file mode 100644 index 0000000..af20be9 --- /dev/null +++ b/Modbus/inc/ModbusRegister.h @@ -0,0 +1,19 @@ +#ifndef MODBUSREGISTER_H_ +#define MODBUSREGISTER_H_ + +#include "ModbusLeader.h" + +class ModbusRegister { +public: + ModbusRegister(ModbusMaster *master, int address, bool holdingRegister = true); + ModbusRegister(const ModbusRegister &) = delete; + virtual ~ModbusRegister(); + int read(); + void write(int value); +private: + ModbusMaster *m; + int addr; + bool hr; +}; + +#endif /* MODBUSREGISTER_H_ */ diff --git a/Modbus/src/ModbusRegister.cpp b/Modbus/src/ModbusRegister.cpp new file mode 100644 index 0000000..a642bbc --- /dev/null +++ b/Modbus/src/ModbusRegister.cpp @@ -0,0 +1,27 @@ +#include "ModbusRegister.h" + +ModbusRegister::ModbusRegister(ModbusMaster *master, int address, bool holdingRegister) + :m(master), addr(address), hr(holdingRegister) { + // TODO Auto-generated constructor stub + +} + +ModbusRegister::~ModbusRegister() { + // TODO Auto-generated destructor stub +} + +int ModbusRegister::read() { + uint8_t result = hr ? m->readHoldingRegisters(addr, 1) : m->readInputRegisters(addr, 1) ; + // check if we were able to read + if (result == m->ku8MBSuccess) { + return m->getResponseBuffer(0); + } + return -1; +} + +void ModbusRegister::write(int value) +{ + // write only if not + if(hr) m->writeSingleRegister(addr, value); // not checking if write succeeds + +}