Libraries/IOControl/include/IO/Modbus/R421A/Device.h
Go to the documentation of this file.
1 
41 #pragma once
42 
43 #include "../Device.h"
44 
48 struct StateMask {
51 };
52 
53 // Channels start with 1
54 constexpr uint8_t R421_CHANNEL_MIN = 1;
55 
56 // R421 devices don't respond to channel numbers greater than 16
57 constexpr uint8_t R421A_MAX_CHANNELS = 16;
58 
59 namespace IO
60 {
61 namespace Modbus
62 {
63 namespace R421A
64 {
65 class Device : public Modbus::Device
66 {
67 public:
69  {
70  public:
71  IO::Device* createDevice(IO::Controller& controller, const char* id) const override
72  {
73  return new Device(reinterpret_cast<RS485::Controller&>(controller), id);
74  }
75 
76  const FlashString& controllerClass() const override
77  {
78  return RS485::CONTROLLER_CLASSNAME;
79  }
80 
81  const FlashString& deviceClass() const override
82  {
83  DEFINE_FSTR_LOCAL(DEVICE_CLASSNAME, "r421a")
84  return DEVICE_CLASSNAME;
85  }
86  };
87 
88  static const Factory factory;
89 
93  struct Config {
96  };
97 
98  using Modbus::Device::Device;
99 
100  ErrorCode init(const Config& config);
101  ErrorCode init(JsonObjectConst config) override;
102 
103  IO::Request* createRequest() override;
104 
105  const StateMask& getStates() const
106  {
107  return states;
108  }
109 
110  DevNode::ID nodeIdMin() const override
111  {
112  return R421_CHANNEL_MIN;
113  }
114 
115  DevNode::ID nodeIdMax() const override
116  {
117  return R421_CHANNEL_MIN + channelCount - 1;
118  }
119 
120  uint16_t maxNodes() const override
121  {
122  return channelCount;
123  }
124 
125  bool isValid(DevNode node) const
126  {
127  return node.id >= nodeIdMin() && node.id <= nodeIdMax();
128  }
129 
130  DevNode::States getNodeStates(DevNode node) const override;
131 
132  void handleEvent(IO::Request* request, Event event) override;
133 
134 protected:
135  void parseJson(JsonObjectConst json, Config& cfg);
136 
137 private:
138  // Tracks current output states as far as possible
139  StateMask states{};
140  // Depends on device variant (e.g. 8, 4)
141  uint8_t channelCount{0};
142 };
143 
144 } // namespace R421A
145 } // namespace Modbus
146 } // namespace IO
DevNode::ID nodeIdMax() const override
Get maximum valid Node ID for this device.
Definition: Libraries/IOControl/include/IO/Modbus/R421A/Device.h:115
uint8_t channels
Number of channels (typically 4 or 8)
Definition: Libraries/IOControl/include/IO/Modbus/R421A/Device.h:95
static const Factory factory
Definition: Libraries/IOControl/include/IO/Modbus/R421A/Device.h:88
const FlashString & deviceClass() const override
Return the Device class name, e.g. &#39;r421a&#39;.
Definition: Libraries/IOControl/include/IO/Modbus/R421A/Device.h:81
Identifies a device node.
Definition: DevNode.h:30
BitSet32 channelStates
Definition: Libraries/IOControl/include/IO/Modbus/R421A/Device.h:50
R421A device configuration.
Definition: Libraries/IOControl/include/IO/Modbus/R421A/Device.h:93
ID id
Definition: DevNode.h:33
DevNode::ID nodeIdMin() const override
Get minimum valid Node ID for this device.
Definition: Libraries/IOControl/include/IO/Modbus/R421A/Device.h:110
Definition: IOControl/include/IO/Controller.h:25
A virtual device, represents a modbus slave device.
Definition: Libraries/IOControl/include/IO/Modbus/Device.h:40
Handles requests for a specific device; the requests are executed by the relevant controller...
Definition: Libraries/IOControl/include/IO/Device.h:35
Abstract class which allows device instances to be created.
Definition: Libraries/IOControl/include/IO/Device.h:44
Tracks state of multiple relays.
Definition: Libraries/IOControl/include/IO/Modbus/R421A/Device.h:48
constexpr uint8_t R421_CHANNEL_MIN
Definition: Libraries/IOControl/include/IO/Modbus/R421A/Device.h:54
Definition: Libraries/IOControl/include/IO/Modbus/R421A/Device.h:68
Definition: Libraries/IOControl/include/IO/Modbus/R421A/Device.h:65
const FlashString & controllerClass() const override
Return the expected controller type for this device class, e.g. &#39;rs485&#39;.
Definition: Libraries/IOControl/include/IO/Modbus/R421A/Device.h:76
constexpr uint8_t R421A_MAX_CHANNELS
Definition: Libraries/IOControl/include/IO/Modbus/R421A/Device.h:57
Json json
A Controller is responsible for serialising requests for a physical bus.
Definition: IOControl/include/IO/Controller.h:41
Request represents a single user request/response over a bus.
Definition: IOControl/include/IO/Request.h:75
Inherited classes expand this definition as required.
Definition: Libraries/IOControl/include/IO/Device.h:80
#define DEFINE_FSTR_LOCAL(name, str)
Like DEFINE_FSTR except reference is declared static constexpr.
Definition: String.hpp:84
IO::Device * createDevice(IO::Controller &controller, const char *id) const override
Create a new device instance.
Definition: Libraries/IOControl/include/IO/Modbus/R421A/Device.h:71
bool isValid(DevNode node) const
Definition: Libraries/IOControl/include/IO/Modbus/R421A/Device.h:125
describes a counted string stored in flash memory
Definition: String.hpp:173
int16_t ErrorCode
Definition: Libraries/IOControl/include/IO/Error.h:27
const StateMask & getStates() const
Definition: Libraries/IOControl/include/IO/Modbus/R421A/Device.h:105
uint16_t maxNodes() const override
Determine maximum number of nodes supported by the devicce.
Definition: Libraries/IOControl/include/IO/Modbus/R421A/Device.h:120
void init(IDataSourceStream *stream)
Application calls this method to set source for graphics resourcess.
Event
Definition: Event.h:36
BitSet32 channelMask
Identifies valid channels.
Definition: Libraries/IOControl/include/IO/Modbus/R421A/Device.h:49
Modbus::Device::Config modbus
Basic modbus configuration.
Definition: Libraries/IOControl/include/IO/Modbus/R421A/Device.h:94