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