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 {
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
const FlashString & controllerClass() const override
Definition: Libraries/IOControl/include/IO/RS485/Device.h:44
Controller & getController()
Definition: Libraries/IOControl/include/IO/RS485/Device.h:92
describes a counted string stored in flash memory
Definition: String.hpp:173
const DeviceType type() const override
Definition: Libraries/IOControl/include/IO/RS485/Device.h:87
unsigned baudrate
Definition: Libraries/IOControl/include/IO/RS485/Device.h:71
Definition: IOControl/include/IO/RS485/Controller.h:27
int16_t ErrorCode
Definition: Libraries/IOControl/include/IO/Error.h:27
DeviceType
Definition: DeviceType.h:24
IO::Device::Config base
Definition: Libraries/IOControl/include/IO/RS485/Device.h:54
uint8_t segment() const
Definition: Libraries/IOControl/include/IO/RS485/Device.h:102
unsigned baudrate() const
Definition: Libraries/IOControl/include/IO/RS485/Device.h:107
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
void parseJson(JsonObjectConst json, Config &cfg)
void handleEvent(IO::Request *request, Event event) override
Implementations may override this method to customise event handling.
Definition: Libraries/IOControl/include/IO/RS485/Device.h:55
Definition: IOControl/include/IO/Controller.h:25
unsigned timeout() const
Definition: Libraries/IOControl/include/IO/RS485/Device.h:112
IO::Device * createDevice(IO::Controller &controller, const char *id) const override
Definition: Libraries/IOControl/include/IO/RS485/Device.h:39
Definition: IOControl/include/IO/RS485/Controller.h:31
Inherited classes expand this definition as required.
Definition: Libraries/IOControl/include/IO/Device.h:80
unsigned timeout
Definition: Libraries/IOControl/include/IO/RS485/Device.h:75
Event
Definition: Event.h:36
Handles requests for a specific device; the requests are executed by the relevant controller.
Definition: Libraries/IOControl/include/IO/Device.h:35
constexpr unsigned DEFAULT_TIMEOUT
Definition: Libraries/IOControl/include/IO/RS485/Device.h:28
Json json
uint16_t address
Definition: Libraries/IOControl/include/IO/RS485/Device.h:59
RS485 configuration.
Definition: Libraries/IOControl/include/IO/RS485/Device.h:53
ErrorCode init(const Config &config)
A Controller is responsible for serialising requests for a physical bus.
Definition: IOControl/include/IO/Controller.h:41
Controller & controller
Definition: Libraries/IOControl/include/IO/Device.h:234
Definition: Libraries/IOControl/include/IO/RS485/Device.h:36
constexpr unsigned DEFAULT_BAUDRATE
Definition: Libraries/IOControl/include/IO/RS485/Device.h:27
uint16_t address() const override
Devices with a numeric address should implement this method.
Definition: Libraries/IOControl/include/IO/RS485/Device.h:97
Slave slave
Definition: Libraries/IOControl/include/IO/RS485/Device.h:77
uint8_t segment
Definition: Libraries/IOControl/include/IO/RS485/Device.h:67
Device(Controller &controller, const char *id)
Definition: Libraries/IOControl/include/IO/RS485/Device.h:80