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 {
67  Modbus::Device::Config modbus;
69  };
70 
72 
73  ErrorCode init(const Config& config);
74  ErrorCode init(JsonObjectConst config) override;
75 
76  IO::Request* createRequest() override;
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
uint8_t channels
Number of channels (typically 4 or 8)
Definition: Libraries/IOControl/include/IO/Modbus/STM8Relay/Device.h:68
void parseJson(JsonObjectConst json, Config &cfg)
BitSet32 channelStates
Definition: Libraries/IOControl/include/IO/Modbus/STM8Relay/Device.h:42
IO::Request * createRequest() override
Create a request object for this device.
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
ErrorCode init(const Config &config)
bool isValid(DevNode node) const
Definition: Libraries/IOControl/include/IO/Modbus/STM8Relay/Device.h:93
int16_t ErrorCode
Definition: Libraries/IOControl/include/IO/Error.h:27
Tracks state of multiple relays.
Definition: Libraries/IOControl/include/IO/Modbus/STM8Relay/Device.h:40
const FlashString & deviceClass() const override
Definition: Libraries/IOControl/include/IO/Modbus/STM8Relay/Device.h:55
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.
constexpr uint8_t RELAY_MAX_CHANNELS
Definition: Libraries/IOControl/include/IO/Modbus/STM8Relay/Device.h:47
Definition: Libraries/IOControl/include/IO/Modbus/STM8Relay/Device.h:35
R421A device configuration.
Definition: Libraries/IOControl/include/IO/Modbus/STM8Relay/Device.h:66
Identifies a device node.
Definition: DevNode.h:30
#define FS(str)
Define an inline FSTR::String and return it as a copy.
Definition: String.hpp:56
DevNode::ID nodeIdMin() const override
Get minimum valid Node ID for this device.
Definition: Libraries/IOControl/include/IO/Modbus/STM8Relay/Device.h:83
static const Factory factory
Definition: Libraries/IOControl/include/IO/Modbus/STM8Relay/Device.h:61
uint16_t maxNodes() const override
Determine maximum number of nodes supported by the device.
Definition: Libraries/IOControl/include/IO/Modbus/STM8Relay/Device.h:88
DevNode::ID nodeIdMax() const
Get maximum valid Node ID for this device.
Definition: Libraries/IOControl/include/IO/Device.h:197
Event
Definition: Event.h:36
Modbus::Device::Config modbus
Basic modbus configuration.
Definition: Libraries/IOControl/include/IO/Modbus/STM8Relay/Device.h:67
Definition: Libraries/IOControl/include/IO/Modbus/STM8Relay/Device.h:49
Json json
void handleEvent(IO::Request *request, Event event) override
Implementations may override this method to customise event handling.
Definition: Libraries/IOControl/include/IO/Modbus/STM8Relay/Device.h:52
constexpr uint8_t RELAY_CHANNEL_MIN
Definition: Libraries/IOControl/include/IO/Modbus/STM8Relay/Device.h:46
BitSet32 channelMask
Identifies valid channels.
Definition: Libraries/IOControl/include/IO/Modbus/STM8Relay/Device.h:41
const StateMask & getStates() const
Definition: Libraries/IOControl/include/IO/Modbus/STM8Relay/Device.h:78
ID id
Definition: DevNode.h:33
Device(Controller &controller, const char *id)
Definition: Libraries/IOControl/include/IO/RS485/Device.h:80