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 
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 
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
Manage a set of bit values using enumeration.
Definition: BitSet.h:45
Definition: Libraries/IOControl/include/IO/Modbus/R421A/Device.h:62
Definition: IOControl/include/IO/Modbus/R421A/Request.h:30
const Device & getDevice() const
Definition: IOControl/include/IO/Modbus/R421A/Request.h:40
Function fillRequestData(PDU::Data &data) override
bool nodeLatch(DevNode node)
Definition: IOControl/include/IO/Modbus/R421A/Request.h:47
void getJson(JsonObject json) const override
Get result of a completed request in JSON format.
StateMask & getResponse()
Definition: IOControl/include/IO/Modbus/R421A/Request.h:80
DevNode::States getNodeStates(DevNode node) override
Query node status from response.
const StateMask & getResponse() const
Definition: IOControl/include/IO/Modbus/R421A/Request.h:85
bool nodeMomentary(DevNode node)
Definition: IOControl/include/IO/Modbus/R421A/Request.h:53
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
ErrorCode callback(PDU &pdu) override
Process a received PDU.
ErrorCode parseJson(JsonObjectConst json) override
Fill this request from a JSON description.
Request(Device &device)
Definition: IOControl/include/IO/Modbus/R421A/Request.h:32
bool setNode(DevNode node) override
If nodes are supported, implement this method.
Definition: IOControl/include/IO/Modbus/Request.h:31
Device & device
Definition: IOControl/include/IO/Request.h:280
bool nodeOff(DevNode node)
Definition: IOControl/include/IO/Request.h:187
void setCommand(Command cmd)
Set the command code.
Definition: IOControl/include/IO/Request.h:167
bool nodeOn(DevNode node)
Definition: IOControl/include/IO/Request.h:193
void delay(uint32_t milliseconds)
Pause execution.
Json json
Definition: Libraries/IOControl/include/IO/Modbus/R421A/Device.h:46
Function
Definition: IOControl/include/IO/Modbus/Function.h:45
int16_t ErrorCode
Definition: Libraries/IOControl/include/IO/Error.h:27
Identifies a device node.
Definition: DevNode.h:30
State
Definition: DevNode.h:36
Protocol Data Unit.
Definition: PDU.h:45
Tracks state of multiple relays.
Definition: Libraries/IOControl/include/IO/Modbus/R421A/Device.h:50
Definition: PDU.h:52