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