19 #include <uuid/modbus.h>
28 #include <make_unique.cpp>
35 uint16_t device, uint16_t timeout_ms) {
36 auto response = std::make_shared<ExceptionStatusResponse>();
38 if (device < DeviceAddressType::MIN_UNICAST
39 || device > DeviceAddressType::MAX_UNICAST) {
40 response->status(ResponseStatus::FAILURE_INVALID);
42 if (timeout_ms == 0) {
46 requests_.push_back(std::make_unique<Request>(device,
47 FunctionCode::READ_EXCEPTION_STATUS, timeout_ms, response));
55 return ResponseStatus::FAILURE_LENGTH;
60 return ResponseStatus::SUCCESS;
ResponseStatus parse(frame_buffer_t &frame, uint16_t len) override
Parse a message frame buffer and store the outcome in this response.
bool check_length(frame_buffer_t &frame, uint16_t actual, uint16_t expected)
Check the length of the message frame is correct and log an error if it is not.
uint16_t default_unicast_timeout_ms_
std::shared_ptr< const ExceptionStatusResponse > read_exception_status(uint16_t device, uint16_t timeout_ms=0)
Read exception status from a remote device.
std::deque< std::unique_ptr< Request > > requests_
ResponseStatus
Status of response messages.
std::array< uint8_t, MAX_MESSAGE_SIZE+1 > frame_buffer_t