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 
54  ErrorCode init(const RS485::Device::Config& config);
55 
56  const DeviceType type() const override
57  {
58  return DeviceType::Modbus;
59  }
60 
64  virtual void onBroadcast(const ADU& adu)
65  {
66  }
67 
71  virtual void onRequest(ADU& adu)
72  {
73  }
74 
75  IO::Request* createRequest() override;
76 
77  void handleEvent(IO::Request* request, Event event) override;
78 
79  using TransferCallback = void (*)(const void* data, size_t length, bool send);
80 
81  static void onTransfer(TransferCallback callback)
82  {
83  transferCallback = callback;
84  }
85 
86 private:
87  ErrorCode execute(Request* request);
88  ErrorCode readResponse(Request* request);
89 
90  static TransferCallback transferCallback;
91  Function requestFunction{};
92 };
93 
94 } // namespace IO::Modbus
Function
Definition: IOControl/include/IO/Modbus/Function.h:45
IO::Request * createRequest() override
Create a request object for this device.
A virtual device, represents a modbus slave device.
Definition: Libraries/IOControl/include/IO/Modbus/Device.h:38
describes a counted string stored in flash memory
Definition: String.hpp:173
Definition: ADU.h:28
static const Factory factory
Definition: Libraries/IOControl/include/IO/Modbus/Device.h:50
virtual void onRequest(ADU &adu)
Handle a message specifically for this device.
Definition: Libraries/IOControl/include/IO/Modbus/Device.h:71
const FlashString & deviceClass() const override
Definition: Libraries/IOControl/include/IO/Modbus/Device.h:44
int16_t ErrorCode
Definition: Libraries/IOControl/include/IO/Error.h:27
DeviceType
Definition: DeviceType.h:24
Definition: IOControl/include/IO/Modbus/Request.h:30
Request represents a single user request/response over a bus.
Definition: IOControl/include/IO/Request.h:79
Base device class for communicating with an RS485 slave.
Definition: Libraries/IOControl/include/IO/RS485/Device.h:33
const DeviceType type() const override
Definition: Libraries/IOControl/include/IO/Modbus/Device.h:56
#define FS(str)
Define an inline FSTR::String and return it as a copy.
Definition: String.hpp:56
void(*)(const void *data, size_t length, bool send) TransferCallback
Definition: Libraries/IOControl/include/IO/Modbus/Device.h:79
ErrorCode init(const RS485::Device::Config &config)
Event
Definition: Event.h:36
void handleEvent(IO::Request *request, Event event) override
Implementations may override this method to customise event handling.
RS485 configuration.
Definition: Libraries/IOControl/include/IO/RS485/Device.h:53
Definition: Libraries/IOControl/include/IO/Modbus/Device.h:41
Definition: ADU.h:25
static void onTransfer(TransferCallback callback)
Definition: Libraries/IOControl/include/IO/Modbus/Device.h:81
virtual void onBroadcast(const ADU &adu)
Handle a broadcast message.
Definition: Libraries/IOControl/include/IO/Modbus/Device.h:64
Device(Controller &controller, const char *id)
Definition: Libraries/IOControl/include/IO/RS485/Device.h:80