Libraries/IOControl/include/IO/RS485/Device.h
Go to the documentation of this file.
1 
20 #pragma once
21 
22 #include "../Device.h"
23 #include "Controller.h"
24 
25 namespace IO::RS485
26 {
27 constexpr unsigned DEFAULT_BAUDRATE = 9600;
28 constexpr unsigned DEFAULT_TIMEOUT = 800;
29 
33 class Device : public IO::Device
34 {
35 public:
36  template <class DeviceClass> class FactoryTemplate : public Factory
37  {
38  public:
39  IO::Device* createDevice(IO::Controller& controller, const char* id) const override
40  {
41  return new DeviceClass(static_cast<RS485::Controller&>(controller), id);
42  }
43 
44  const FlashString& controllerClass() const override
45  {
46  return CONTROLLER_CLASSNAME;
47  }
48  };
49 
53  struct Config {
55  struct Slave {
59  uint16_t address;
67  uint8_t segment;
71  unsigned baudrate;
75  unsigned timeout;
76  };
78  };
79 
80  Device(Controller& controller, const char* id) : IO::Device(controller, id)
81  {
82  }
83 
84  ErrorCode init(const Config& config);
85  ErrorCode init(JsonObjectConst config) override;
86 
87  const DeviceType type() const override
88  {
89  return DeviceType::RS485;
90  }
91 
93  {
94  return static_cast<Controller&>(controller);
95  }
96 
97  uint16_t address() const override
98  {
99  return slaveConfig.address;
100  }
101 
102  uint8_t segment() const
103  {
104  return slaveConfig.segment;
105  }
106 
107  unsigned baudrate() const
108  {
109  return slaveConfig.baudrate ?: DEFAULT_BAUDRATE;
110  }
111 
112  unsigned timeout() const
113  {
114  return slaveConfig.timeout ?: DEFAULT_TIMEOUT;
115  }
116 
117  void handleEvent(IO::Request* request, Event event) override;
118 
119 protected:
120  void parseJson(JsonObjectConst json, Config& cfg);
121 
122 private:
123  Config::Slave slaveConfig;
124 };
125 
126 } // namespace IO::RS485
describes a counted string stored in flash memory
Definition: String.hpp:174
A Controller is responsible for serialising requests for a physical bus.
Definition: IOControl/include/IO/Controller.h:42
Abstract class which allows device instances to be created.
Definition: Libraries/IOControl/include/IO/Device.h:45
Handles requests for a specific device; the requests are executed by the relevant controller.
Definition: Libraries/IOControl/include/IO/Device.h:36
Controller & controller
Definition: Libraries/IOControl/include/IO/Device.h:234
Definition: IOControl/include/IO/RS485/Controller.h:32
Definition: Libraries/IOControl/include/IO/RS485/Device.h:37
const FlashString & controllerClass() const override
Return the expected controller type for this device class, e.g. 'rs485'.
Definition: Libraries/IOControl/include/IO/RS485/Device.h:44
IO::Device * createDevice(IO::Controller &controller, const char *id) const override
Create a new device instance.
Definition: Libraries/IOControl/include/IO/RS485/Device.h:39
Base device class for communicating with an RS485 slave.
Definition: Libraries/IOControl/include/IO/RS485/Device.h:34
unsigned timeout() const
Definition: Libraries/IOControl/include/IO/RS485/Device.h:112
ErrorCode init(JsonObjectConst config) override
Device(Controller &controller, const char *id)
Definition: Libraries/IOControl/include/IO/RS485/Device.h:80
ErrorCode init(const Config &config)
uint16_t address() const override
Devices with a numeric address should implement this method.
Definition: Libraries/IOControl/include/IO/RS485/Device.h:97
unsigned baudrate() const
Definition: Libraries/IOControl/include/IO/RS485/Device.h:107
void handleEvent(IO::Request *request, Event event) override
Implementations may override this method to customise event handling.
Controller & getController()
Definition: Libraries/IOControl/include/IO/RS485/Device.h:92
const DeviceType type() const override
Definition: Libraries/IOControl/include/IO/RS485/Device.h:87
uint8_t segment() const
Definition: Libraries/IOControl/include/IO/RS485/Device.h:102
void parseJson(JsonObjectConst json, Config &cfg)
Request represents a single user request/response over a bus.
Definition: IOControl/include/IO/Request.h:80
Json json
Definition: IOControl/include/IO/RS485/Controller.h:28
constexpr unsigned DEFAULT_TIMEOUT
Definition: Libraries/IOControl/include/IO/RS485/Device.h:28
constexpr unsigned DEFAULT_BAUDRATE
Definition: Libraries/IOControl/include/IO/RS485/Device.h:27
Definition: IOControl/include/IO/Controller.h:26
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: Libraries/IOControl/include/IO/RS485/Device.h:55
unsigned timeout
Definition: Libraries/IOControl/include/IO/RS485/Device.h:75
uint8_t segment
Definition: Libraries/IOControl/include/IO/RS485/Device.h:67
uint16_t address
Definition: Libraries/IOControl/include/IO/RS485/Device.h:59
unsigned baudrate
Definition: Libraries/IOControl/include/IO/RS485/Device.h:71
RS485 configuration.
Definition: Libraries/IOControl/include/IO/RS485/Device.h:53
IO::Device::Config base
Definition: Libraries/IOControl/include/IO/RS485/Device.h:54
Slave slave
Definition: Libraries/IOControl/include/IO/RS485/Device.h:77