Libraries/IOControl/include/IO/Modbus/STM8Relay/Device.h
Go to the documentation of this file.
1 
31 #pragma once
32 
33 #include "../Device.h"
34 
36 {
40 struct StateMask {
43 };
44 
45 // Channels start with 1 for consistency with other devices
46 constexpr uint8_t RELAY_CHANNEL_MIN = 1;
47 constexpr uint8_t RELAY_MAX_CHANNELS = 16;
48 
49 class Device : public Modbus::Device
50 {
51 public:
52  class Factory : public FactoryTemplate<Device>
53  {
54  public:
55  const FlashString& deviceClass() const override
56  {
57  return FS("stm8relay");
58  }
59  };
60 
61  static const Factory factory;
62 
66  struct Config {
68  uint8_t channels;
69  };
70 
72 
73  ErrorCode init(const Config& config);
74  ErrorCode init(JsonObjectConst config) override;
75 
77 
78  const StateMask& getStates() const
79  {
80  return states;
81  }
82 
83  DevNode::ID nodeIdMin() const override
84  {
85  return RELAY_CHANNEL_MIN;
86  }
87 
88  uint16_t maxNodes() const override
89  {
90  return channelCount;
91  }
92 
93  bool isValid(DevNode node) const
94  {
95  return node.id >= nodeIdMin() && node.id <= nodeIdMax();
96  }
97 
98  DevNode::States getNodeStates(DevNode node) const override;
99 
100  void handleEvent(IO::Request* request, Event event) override;
101 
102 protected:
103  void parseJson(JsonObjectConst json, Config& cfg);
104 
105 private:
106  // Tracks current output states as far as possible
107  StateMask states{};
108  // Depends on device variant (e.g. 8, 4)
109  uint8_t channelCount{0};
110 };
111 
112 } // namespace IO::Modbus::STM8Relay
describes a counted string stored in flash memory
Definition: String.hpp:174
DevNode::ID nodeIdMax() const
Get maximum valid Node ID for this device.
Definition: Libraries/IOControl/include/IO/Device.h:197
A virtual device, represents a modbus slave device.
Definition: Libraries/IOControl/include/IO/Modbus/Device.h:39
Definition: Libraries/IOControl/include/IO/Modbus/STM8Relay/Device.h:53
const FlashString & deviceClass() const override
Return the Device class name, e.g. 'r421a'.
Definition: Libraries/IOControl/include/IO/Modbus/STM8Relay/Device.h:55
Definition: Libraries/IOControl/include/IO/Modbus/STM8Relay/Device.h:50
uint16_t maxNodes() const override
Determine maximum number of nodes supported by the device.
Definition: Libraries/IOControl/include/IO/Modbus/STM8Relay/Device.h:88
const StateMask & getStates() const
Definition: Libraries/IOControl/include/IO/Modbus/STM8Relay/Device.h:78
DevNode::States getNodeStates(DevNode node) const override
Return the current set of states for all nodes controlled by this device.
static const Factory factory
Definition: Libraries/IOControl/include/IO/Modbus/STM8Relay/Device.h:61
void handleEvent(IO::Request *request, Event event) override
Implementations may override this method to customise event handling.
void parseJson(JsonObjectConst json, Config &cfg)
ErrorCode init(const Config &config)
DevNode::ID nodeIdMin() const override
Get minimum valid Node ID for this device.
Definition: Libraries/IOControl/include/IO/Modbus/STM8Relay/Device.h:83
ErrorCode init(JsonObjectConst config) override
bool isValid(DevNode node) const
Definition: Libraries/IOControl/include/IO/Modbus/STM8Relay/Device.h:93
IO::Request * createRequest() override
Create a request object for this device.
Definition: Libraries/IOControl/include/IO/RS485/Device.h:37
Device(Controller &controller, const char *id)
Definition: Libraries/IOControl/include/IO/RS485/Device.h:80
Request represents a single user request/response over a bus.
Definition: IOControl/include/IO/Request.h:80
#define FS(str)
Define an inline FSTR::String and return it as a copy.
Definition: String.hpp:56
Json json
Definition: Libraries/IOControl/include/IO/Modbus/STM8Relay/Device.h:36
constexpr uint8_t RELAY_CHANNEL_MIN
Definition: Libraries/IOControl/include/IO/Modbus/STM8Relay/Device.h:46
constexpr uint8_t RELAY_MAX_CHANNELS
Definition: Libraries/IOControl/include/IO/Modbus/STM8Relay/Device.h:47
Event
Definition: Event.h:36
int16_t ErrorCode
Definition: Libraries/IOControl/include/IO/Error.h:27
Identifies a device node.
Definition: DevNode.h:30
ID id
Definition: DevNode.h:33
uint16_t ID
Definition: DevNode.h:32
Inherited classes expand this definition as required.
Definition: Libraries/IOControl/include/IO/Device.h:80
R421A device configuration.
Definition: Libraries/IOControl/include/IO/Modbus/STM8Relay/Device.h:66
Modbus::Device::Config modbus
Basic modbus configuration.
Definition: Libraries/IOControl/include/IO/Modbus/STM8Relay/Device.h:67
uint8_t channels
Number of channels (typically 4 or 8)
Definition: Libraries/IOControl/include/IO/Modbus/STM8Relay/Device.h:68
Tracks state of multiple relays.
Definition: Libraries/IOControl/include/IO/Modbus/STM8Relay/Device.h:40
BitSet32 channelStates
Definition: Libraries/IOControl/include/IO/Modbus/STM8Relay/Device.h:42
BitSet32 channelMask
Identifies valid channels.
Definition: Libraries/IOControl/include/IO/Modbus/STM8Relay/Device.h:41