Libraries/IOControl/include/IO/Modbus/Device.h
Go to the documentation of this file.
1 
20 #pragma once
21 
22 #include "../RS485/Device.h"
23 #include "ADU.h"
24 
25 namespace IO::Modbus
26 {
27 class Request;
28 
38 class Device : public RS485::Device
39 {
40 public:
41  class Factory : public FactoryTemplate<Device>
42  {
43  public:
44  const FlashString& deviceClass() const override
45  {
46  return FS("modbus");
47  }
48  };
49 
50  static const Factory factory;
51 
53  using RS485::Device::init;
54 
55  ErrorCode init(const Config& config);
56 
57  const DeviceType type() const override
58  {
59  return DeviceType::Modbus;
60  }
61 
65  virtual void onBroadcast(const ADU& adu)
66  {
67  }
68 
72  virtual void onRequest(ADU& adu)
73  {
74  }
75 
77 
78  void handleEvent(IO::Request* request, Event event) override;
79 
80  using TransferCallback = void (*)(const void* data, size_t length, bool send);
81 
82  static void onTransfer(TransferCallback callback)
83  {
84  transferCallback = callback;
85  }
86 
87 private:
88  ErrorCode execute(Request* request);
89  ErrorCode readResponse(Request* request);
90 
91  static TransferCallback transferCallback;
92  Function requestFunction{};
93 };
94 
95 } // namespace IO::Modbus
describes a counted string stored in flash memory
Definition: String.hpp:174
Definition: Libraries/IOControl/include/IO/Modbus/Device.h:42
const FlashString & deviceClass() const override
Return the Device class name, e.g. 'r421a'.
Definition: Libraries/IOControl/include/IO/Modbus/Device.h:44
A virtual device, represents a modbus slave device.
Definition: Libraries/IOControl/include/IO/Modbus/Device.h:39
virtual void onRequest(ADU &adu)
Handle a message specifically for this device.
Definition: Libraries/IOControl/include/IO/Modbus/Device.h:72
void(*)(const void *data, size_t length, bool send) TransferCallback
Definition: Libraries/IOControl/include/IO/Modbus/Device.h:80
IO::Request * createRequest() override
Create a request object for this device.
ErrorCode init(const Config &config)
static const Factory factory
Definition: Libraries/IOControl/include/IO/Modbus/Device.h:50
const DeviceType type() const override
Definition: Libraries/IOControl/include/IO/Modbus/Device.h:57
static void onTransfer(TransferCallback callback)
Definition: Libraries/IOControl/include/IO/Modbus/Device.h:82
void handleEvent(IO::Request *request, Event event) override
Implementations may override this method to customise event handling.
virtual void onBroadcast(const ADU &adu)
Handle a broadcast message.
Definition: Libraries/IOControl/include/IO/Modbus/Device.h:65
Definition: IOControl/include/IO/Modbus/Request.h:31
Definition: Libraries/IOControl/include/IO/RS485/Device.h:37
Base device class for communicating with an RS485 slave.
Definition: Libraries/IOControl/include/IO/RS485/Device.h:34
Device(Controller &controller, const char *id)
Definition: Libraries/IOControl/include/IO/RS485/Device.h:80
ErrorCode init(const Config &config)
Request represents a single user request/response over a bus.
Definition: IOControl/include/IO/Request.h:80
#define FS(str)
Define an inline FSTR::String and return it as a copy.
Definition: String.hpp:56
Definition: ADU.h:26
Function
Definition: IOControl/include/IO/Modbus/Function.h:45
Event
Definition: Event.h:36
DeviceType
Definition: DeviceType.h:24
int16_t ErrorCode
Definition: Libraries/IOControl/include/IO/Error.h:27
Inherited classes expand this definition as required.
Definition: Libraries/IOControl/include/IO/Device.h:80
Definition: ADU.h:28