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
26 {
27 namespace RS485
28 {
29 constexpr unsigned DEFAULT_BAUDRATE = 9600;
30 
34 class Device : public IO::Device
35 {
36 public:
40  struct Config {
42  struct Slave {
58  unsigned baudrate;
62  unsigned timeout;
63  };
65  };
66 
67  Device(Controller& controller, const char* id) : IO::Device(controller, id)
68  {
69  }
70 
71  ErrorCode init(const Config& config);
72  ErrorCode init(JsonObjectConst config) override;
73 
75  {
76  return reinterpret_cast<Controller&>(controller);
77  }
78 
79  uint16_t address() const override
80  {
81  return slaveConfig.address;
82  }
83 
84  uint8_t segment() const
85  {
86  return slaveConfig.segment;
87  }
88 
89  unsigned baudrate() const
90  {
91  return slaveConfig.baudrate ?: DEFAULT_BAUDRATE;
92  }
93 
94  void handleEvent(IO::Request* request, Event event) override;
95 
96 protected:
97  void parseJson(JsonObjectConst json, Config& cfg);
98 
99 private:
100  Config::Slave slaveConfig;
101 };
102 
103 } // namespace RS485
104 } // namespace IO
Controller & controller
Definition: Libraries/IOControl/include/IO/Device.h:228
Controller & getController()
Definition: Libraries/IOControl/include/IO/RS485/Device.h:74
Device(Controller &controller, const char *id)
Definition: Libraries/IOControl/include/IO/RS485/Device.h:67
uint8_t segment
Definition: Libraries/IOControl/include/IO/RS485/Device.h:54
Definition: IOControl/include/IO/Controller.h:25
ErrorCode init(const Config &config)
Handles requests for a specific device; the requests are executed by the relevant controller...
Definition: Libraries/IOControl/include/IO/Device.h:35
Base device class for communicating with an RS485 slave.
Definition: Libraries/IOControl/include/IO/RS485/Device.h:34
Definition: Libraries/IOControl/include/IO/RS485/Device.h:42
RS485 configuration.
Definition: Libraries/IOControl/include/IO/RS485/Device.h:40
Definition: IOControl/include/IO/RS485/Controller.h:32
Json json
Slave slave
Definition: Libraries/IOControl/include/IO/RS485/Device.h:64
constexpr unsigned DEFAULT_BAUDRATE
Definition: Libraries/IOControl/include/IO/RS485/Device.h:29
Request represents a single user request/response over a bus.
Definition: IOControl/include/IO/Request.h:75
IO::Device::Config base
Definition: Libraries/IOControl/include/IO/RS485/Device.h:41
Inherited classes expand this definition as required.
Definition: Libraries/IOControl/include/IO/Device.h:80
int16_t ErrorCode
Definition: Libraries/IOControl/include/IO/Error.h:27
uint8_t segment() const
Definition: Libraries/IOControl/include/IO/RS485/Device.h:84
Event
Definition: Event.h:36
unsigned baudrate
Definition: Libraries/IOControl/include/IO/RS485/Device.h:58
void parseJson(JsonObjectConst json, Config &cfg)
uint16_t address
Definition: Libraries/IOControl/include/IO/RS485/Device.h:46
uint16_t address() const override
Devices with a numeric address should implement this method.
Definition: Libraries/IOControl/include/IO/RS485/Device.h:79
void handleEvent(IO::Request *request, Event event) override
Implementations may override this method to customise event handling.
unsigned baudrate() const
Definition: Libraries/IOControl/include/IO/RS485/Device.h:89
unsigned timeout
Definition: Libraries/IOControl/include/IO/RS485/Device.h:62