IOControl/include/IO/Modbus/STM8Relay/Request.h
Go to the documentation of this file.
1 
20 #pragma once
21 
22 #include "../Request.h"
23 #include "Device.h"
24 
25 namespace IO::Modbus::STM8Relay
26 {
27 class Request : public Modbus::Request
28 {
29 public:
31  {
32  }
33 
34  ErrorCode parseJson(JsonObjectConst json) override;
35 
36  void getJson(JsonObject json) const override;
37 
38  const Device& getDevice() const
39  {
40  return static_cast<const Device&>(device);
41  }
42 
43  bool setNode(DevNode node) override;
44 
45  bool nodeLatch(DevNode node)
46  {
47  setCommand(Command::latch);
48  return setNode(node);
49  }
50 
52  {
53  setCommand(Command::momentary);
54  return setNode(node);
55  }
56 
57  bool nodeDelay(DevNode node, uint8_t secs)
58  {
60  commandData.delay = secs;
61  return setNode(node);
62  }
63 
64  DevNode::States getNodeStates(DevNode node) override;
65 
66  bool setNodeState(DevNode node, DevNode::State state) override
67  {
68  if(state == DevNode::State::on) {
69  nodeOn(node);
70  } else if(state == DevNode::State::off) {
71  nodeOff(node);
72  } else {
73  return false;
74  }
75  return true;
76  }
77 
79  {
80  return response;
81  }
82 
83  const StateMask& getResponse() const
84  {
85  return response;
86  }
87 
88  Function fillRequestData(PDU::Data& data) override;
89  ErrorCode callback(PDU& pdu) override;
90 
91 private:
92  // Associated command data
93  struct CommandData {
94  BitSet32 channelMask;
95  uint8_t delay;
96  };
97 
98  CommandData commandData{};
99  StateMask response{};
100 };
101 
102 } // namespace IO::Modbus::STM8Relay
Function
Definition: IOControl/include/IO/Modbus/Function.h:45
StateMask & getResponse()
Definition: IOControl/include/IO/Modbus/STM8Relay/Request.h:78
DevNode::States getNodeStates(DevNode node) override
Query node status from response.
bool nodeLatch(DevNode node)
Definition: IOControl/include/IO/Modbus/STM8Relay/Request.h:45
Device & device
Definition: IOControl/include/IO/Request.h:280
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
Protocol Data Unit.
Definition: PDU.h:45
Definition: IOControl/include/IO/Modbus/Request.h:30
Definition: IOControl/include/IO/Modbus/STM8Relay/Request.h:27
bool nodeDelay(DevNode node, uint8_t secs)
Definition: IOControl/include/IO/Modbus/STM8Relay/Request.h:57
Definition: Libraries/IOControl/include/IO/Modbus/STM8Relay/Device.h:35
Identifies a device node.
Definition: DevNode.h:30
void delay(uint32_t milliseconds)
Pause execution.
bool setNodeState(DevNode node, DevNode::State state) override
Definition: IOControl/include/IO/Modbus/STM8Relay/Request.h:66
bool nodeMomentary(DevNode node)
Definition: IOControl/include/IO/Modbus/STM8Relay/Request.h:51
bool nodeOff(DevNode node)
Definition: IOControl/include/IO/Request.h:187
Manage a set of bit values using enumeration.
Definition: BitSet.h:44
Definition: Libraries/IOControl/include/IO/Modbus/STM8Relay/Device.h:49
Definition: PDU.h:52
Json json
ErrorCode parseJson(JsonObjectConst json) override
Fill this request from a JSON description.
Request(Device &device)
Definition: IOControl/include/IO/Modbus/STM8Relay/Request.h:30
void setCommand(Command cmd)
Set the command code.
Definition: IOControl/include/IO/Request.h:167
void getJson(JsonObject json) const override
Get result of a completed request in JSON format.
bool nodeOn(DevNode node)
Definition: IOControl/include/IO/Request.h:193
const Device & getDevice() const
Definition: IOControl/include/IO/Modbus/STM8Relay/Request.h:38
const StateMask & getResponse() const
Definition: IOControl/include/IO/Modbus/STM8Relay/Request.h:83
Function fillRequestData(PDU::Data &data) override
State
Definition: DevNode.h:36
bool setNode(DevNode node) override
If nodes are supported, implement this method.