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 
46 {
50 struct StateMask {
53 };
54 
55 // Channels start with 1
56 constexpr uint8_t R421_CHANNEL_MIN = 1;
57 
58 // R421 devices don't respond to channel numbers greater than 16
59 constexpr uint8_t R421A_MAX_CHANNELS = 16;
60 
61 class Device : public Modbus::Device
62 {
63 public:
64  class Factory : public FactoryTemplate<Device>
65  {
66  public:
67  const FlashString& deviceClass() const override
68  {
69  return FS("r421a");
70  }
71  };
72 
73  static const Factory factory;
74 
78  struct Config {
81  };
82 
84 
85  ErrorCode init(const Config& config);
86  ErrorCode init(JsonObjectConst config) override;
87 
88  IO::Request* createRequest() override;
89 
90  const StateMask& getStates() const
91  {
92  return states;
93  }
94 
95  DevNode::ID nodeIdMin() const override
96  {
97  return R421_CHANNEL_MIN;
98  }
99 
100  uint16_t maxNodes() const override
101  {
102  return channelCount;
103  }
104 
105  bool isValid(DevNode node) const
106  {
107  return node.id >= nodeIdMin() && node.id <= nodeIdMax();
108  }
109 
110  DevNode::States getNodeStates(DevNode node) const override;
111 
112  void handleEvent(IO::Request* request, Event event) override;
113 
114 protected:
115  void parseJson(JsonObjectConst json, Config& cfg);
116 
117 private:
118  // Tracks current output states as far as possible
119  StateMask states{};
120  // Depends on device variant (e.g. 8, 4)
121  uint8_t channelCount{0};
122 };
123 
124 } // namespace IO::Modbus::R421A
bool isValid(DevNode node) const
Definition: Libraries/IOControl/include/IO/Modbus/R421A/Device.h:105
BitSet32 channelMask
Identifies valid channels.
Definition: Libraries/IOControl/include/IO/Modbus/R421A/Device.h:51
void handleEvent(IO::Request *request, Event event) override
Implementations may override this method to customise event handling.
Definition: Libraries/IOControl/include/IO/Modbus/R421A/Device.h:64
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
int16_t ErrorCode
Definition: Libraries/IOControl/include/IO/Error.h:27
R421A device configuration.
Definition: Libraries/IOControl/include/IO/Modbus/R421A/Device.h:78
uint16_t maxNodes() const override
Determine maximum number of nodes supported by the device.
Definition: Libraries/IOControl/include/IO/Modbus/R421A/Device.h:100
constexpr uint8_t R421A_MAX_CHANNELS
Definition: Libraries/IOControl/include/IO/Modbus/R421A/Device.h:59
Request represents a single user request/response over a bus.
Definition: IOControl/include/IO/Request.h:79
DevNode::States getNodeStates(DevNode node) const override
Return the current set of states for all nodes controlled by this device.
void parseJson(JsonObjectConst json, Config &cfg)
Identifies a device node.
Definition: DevNode.h:30
Tracks state of multiple relays.
Definition: Libraries/IOControl/include/IO/Modbus/R421A/Device.h:50
uint8_t channels
Number of channels (typically 4 or 8)
Definition: Libraries/IOControl/include/IO/Modbus/R421A/Device.h:80
#define FS(str)
Define an inline FSTR::String and return it as a copy.
Definition: String.hpp:56
IO::Request * createRequest() override
Create a request object for this device.
Inherited classes expand this definition as required.
Definition: Libraries/IOControl/include/IO/Device.h:80
BitSet32 channelStates
Definition: Libraries/IOControl/include/IO/Modbus/R421A/Device.h:52
DevNode::ID nodeIdMax() const
Get maximum valid Node ID for this device.
Definition: Libraries/IOControl/include/IO/Device.h:197
static const Factory factory
Definition: Libraries/IOControl/include/IO/Modbus/R421A/Device.h:73
constexpr uint8_t R421_CHANNEL_MIN
Definition: Libraries/IOControl/include/IO/Modbus/R421A/Device.h:56
Definition: Libraries/IOControl/include/IO/Modbus/R421A/Device.h:61
Event
Definition: Event.h:36
Definition: Libraries/IOControl/include/IO/Modbus/R421A/Device.h:45
Json json
DevNode::ID nodeIdMin() const override
Get minimum valid Node ID for this device.
Definition: Libraries/IOControl/include/IO/Modbus/R421A/Device.h:95
Modbus::Device::Config modbus
Basic modbus configuration.
Definition: Libraries/IOControl/include/IO/Modbus/R421A/Device.h:79
ErrorCode init(const Config &config)
const FlashString & deviceClass() const override
Definition: Libraries/IOControl/include/IO/Modbus/R421A/Device.h:67
const StateMask & getStates() const
Definition: Libraries/IOControl/include/IO/Modbus/R421A/Device.h:90
ID id
Definition: DevNode.h:33
Device(Controller &controller, const char *id)
Definition: Libraries/IOControl/include/IO/RS485/Device.h:80