IQRF Gateway Daemon
ProtocolBridge.h
Go to the documentation of this file.
1 
17 #pragma once
18 
19 #include "DpaTask.h"
20 #include "JsonSerializer.h"
21 #include <chrono>
22 
23 class ProtocolBridge : public DpaTask {
24 public:
25  enum class Cmd {
26  SYSINFO,
35  SLEEP_NOW,
36  DELETE_ID,
37  DELETE_ALL,
43  };
44 
45  enum class FrcCmd {
46  ALIVE,
47  STAT
48  };
49 
50  static const std::string PRF_NAME;
51 
53  virtual ~ProtocolBridge();
54 
55  // length of bitmap in GET VISIBLE CONFIRMATION and GET INVISIBLE CONFIRMATION
56  static const int CONFIRMATION_BITMAP_LEN = 10;
57 
58  // commands
59  void commandSysinfo();
60  void commandGetNewVisible();
62  void commandGetAllVisible();
63  void commandGetNewDataInfo();
64  void commandGetCompactPacket(uint16_t meterIndex);
65  void commandGetFullPacket(uint16_t meterIndex);
66  void commandGetVisibleConfirmation(uint8_t index, uint8_t map[]);
67  void commandGetInvisibleConfirmation(uint8_t index, uint8_t map[]);
68  void commandSleepNow(uint16_t sleepTime);
69  void commandDeleteId(uint16_t meterIndex);
70  void commandDeleteAll();
71  void commandSetSleepInterval(uint16_t sleepInterval);
72  void commandSetWmTimeout(uint16_t wmTimeout);
73  void commandSetWmAllReadedTimeout(uint16_t wmTimeout);
74  void commandSetNodeTimeout(uint16_t nodeTimeout);
75  void commandSetAnyPacketMode(bool enable);
76 
77  void parseResponse(const DpaMessage& response) override;
78  void parseCommand(const std::string& command) override;
79  const std::string& encodeCommand() const override;
80 
81  static const int SYSINFO_SERIAL_NUMBER_LEN = 12;
82  static const int SYSINFO_FIRMWARE_VERSION_LEN = 5;
83 
84  // parsed response data of SYSINFO command
85  struct SysinfoResponse {
86  uint8_t serialNumber[SYSINFO_SERIAL_NUMBER_LEN];
87  uint16_t visibleMetersNum;
88  uint16_t readedMetersNum;
89  double temperature;
90  double powerVoltage;
91  uint8_t firmwareVersion[SYSINFO_FIRMWARE_VERSION_LEN];
92  uint16_t sleepCount;
93  uint16_t wmbTimeout;
95  uint16_t nodeTimeout;
98  uint8_t checksum;
99  };
100 
101 
102  static const int VISIBLE_METERS_BITMAP_LEN = 38;
103 
104  // parsed response data of GET NEW VISIBLE command
106  uint16_t metersNum;
107  uint8_t bitmap[VISIBLE_METERS_BITMAP_LEN];
108  };
109 
110 
111  static const int INVISIBLE_METERS_BITMAP_LEN = 38;
112 
113  // parsed response data of GET NEW INVISIBLE command
115  uint16_t metersNum;
117  };
118 
119 
120  static const int ALL_VISIBLE_METERS_BITMAP_LEN = 38;
121 
122  // parsed response data of GET ALL VISIBLE command
124  uint16_t metersNum;
126  };
127 
128 
129  static const int NEW_DATA_INFO_BITMAP_LEN = 38;
130 
131  // parsed response data of GET NEW DATA INFO command
133  uint16_t metersNum;
134  uint8_t bitmap[NEW_DATA_INFO_BITMAP_LEN];
135  };
136 
137  // maximal length of wmbus frame
138  static const int VMBUS_MAX_FRAME_LEN = 45;
139 
140  // parsed response data of GET COMPACT PACKET command
142  uint16_t meterIndex;
143  uint8_t vmbusMsg[VMBUS_MAX_FRAME_LEN];
144  uint8_t msgLen;
145  uint8_t rssi;
146  uint8_t crc;
149  };
150 
151  // parsed response data of GET FULL PACKET command
153  uint16_t meterIndex;
154  uint8_t vmbusMsg[VMBUS_MAX_FRAME_LEN];
155  uint8_t msgLen;
156  uint8_t rssi;
157  uint8_t crc;
160  };
161 
162  // parsed response data of GET VISIBLE CONFIRMATION command
164  uint8_t confirmedNum;
166  };
167 
168  // parsed response data of GET INVISIBLE CONFIRMATION command
170  uint8_t confirmedNum;
172  };
173 
174  // parsed response data of SLEEP NOW command
176  uint16_t requestValue;
177  };
178 
179  // parsed response data of DELETE ID command
181  uint16_t meterIndex;
182  };
183 
184  // parsed response data of DELETE ALL command
187  };
188 
189  // parsed response data of SET NODE TIMEOUT command
191  uint16_t requestValue;
193  };
194 
195  // parsed response data of SET ANY PACKET MODE command
197  uint16_t requestValue;
199  };
200 
201 
202  // PARSED RESPONSES GETTERS
203 
204  SysinfoResponse getSysinfoResponse() const { return sysinfoResponse; };
205 
207  return newVisibleMetersResponse;
208  };
209 
211  return newInvisibleMetersResponse;
212  };
213 
215  return allVisibleMetersResponse;
216  };
217 
219  return newDataInfoResponse;
220  };
221 
223  return compactPacketResponse;
224  };
225 
227  return fullPacketResponse;
228  };
229 
231  return visibleConfirmationResponse;
232  };
233 
235  return invisibleConfirmationResponse;
236  };
237 
239  return sleepNowResponse;
240  };
241 
243  return deleteIdReponse;
244  };
245 
247  return deleteAllResponse;
248  };
249 
251  return setNodeTimeoutResponse;
252  };
253 
255  return setAnyPacketModeResponse;
256  };
257 
258  Cmd getCmd() const;
259 
260 
261 private:
262  void setCmd(Cmd cmd);
263 
264  Cmd m_cmd = Cmd::SYSINFO;
265 
266  // parsed responses
267  SysinfoResponse sysinfoResponse;
268  NewVisibleMetersResponse newVisibleMetersResponse;
269  NewInvisibleMetersResponse newInvisibleMetersResponse;
270  AllVisibleMetersResponse allVisibleMetersResponse;
271  NewDataInfoResponse newDataInfoResponse;
272  CompactPacketResponse compactPacketResponse;
273  FullPacketResponse fullPacketResponse;
274  VisibleConfirmationResponse visibleConfirmationResponse;
275  InvisibleConfirmationResponse invisibleConfirmationResponse;
276  SleepNowResponse sleepNowResponse;
277  DeleteIdResponse deleteIdReponse;
278  DeleteAllResponse deleteAllResponse;
279  SetNodeTimeoutResponse setNodeTimeoutResponse;
280  SetAnyPacketModeResponse setAnyPacketModeResponse;
281 
282 
283  // helper methods for response parsing
284  void parseSysinfoResponse(const uint8_t* pData);
285  void parseGetNewVisibleResponse(const uint8_t* pData);
286  void parseGetNewInvisibleResponse(const uint8_t* pData);
287  void parseGetAllVisibleResponse(const uint8_t* pData);
288  void parseGetNewDataInfoResponse(const uint8_t* pData);
289  void parseGetCompactPacketResponse(const uint8_t* pData);
290  void parseGetFullPacketResponse(const uint8_t* pData);
291  void parseGetVisibleConfirmationResponse(const uint8_t* pData);
292  void parseGetInvisibleConfirmationResponse(const uint8_t* pData);
293  void parseSleepNowResponse(const uint8_t* pData);
294  void parseDeleteIdResponse(const uint8_t* pData);
295  void parseDeleteAllResponse(const uint8_t* pData);
296  /*
297  void parseSetSleepIntervalResponse(const uint8_t* pData);
298  void parseSetWmTimeoutResponse(const uint8_t* pData);
299  void parseSetWmAllReadedTimeoutResponse(const uint8_t* pData);
300  */
301  void parseSetNodeTimeoutResponse(const uint8_t* pData);
302  void parseSetAnyPacketModeResponse(const uint8_t* pData);
303 };
304 
306 {
307 public:
310  explicit ProtocolBridgeJson(const rapidjson::Value& val);
311  void setNadr(uint16_t nadr);
312  virtual ~ProtocolBridgeJson() {}
313  std::string encodeResponse(const std::string& errStr) override;
314 
315 private:
316  // helper methods for encoding responses
317  void encodeSysinfoResponse(rapidjson::Document::AllocatorType& alloc, rapidjson::Value& v);
318  void encodeGetNewVisibleResponse(rapidjson::Document::AllocatorType& alloc, rapidjson::Value& v);
319  void encodeGetNewInvisibleResponse(rapidjson::Document::AllocatorType& alloc, rapidjson::Value& v);
320  void encodeGetAllVisibleResponse(rapidjson::Document::AllocatorType& alloc, rapidjson::Value& v);
321  void encodeGetNewDataInfoResponse(rapidjson::Document::AllocatorType& alloc, rapidjson::Value& v);
322  void encodeGetCompactPacketResponse(rapidjson::Document::AllocatorType& alloc, rapidjson::Value& v);
323  void encodeGetFullPacketResponse(rapidjson::Document::AllocatorType& alloc, rapidjson::Value& v);
324  void encodeGetVisibleConfirmationResponse(rapidjson::Document::AllocatorType& alloc, rapidjson::Value& v);
325  void encodeGetInvisibleConfirmationResponse(rapidjson::Document::AllocatorType& alloc, rapidjson::Value& v);
326  void encodeSleepNowResponse(rapidjson::Document::AllocatorType& alloc, rapidjson::Value& v);
327  void encodeDeleteIdResponse(rapidjson::Document::AllocatorType& alloc, rapidjson::Value& v);
328  void encodeDeleteAllResponse(rapidjson::Document::AllocatorType& alloc, rapidjson::Value& v);
329  void encodeSetNodeTimeoutResponse(rapidjson::Document::AllocatorType& alloc, rapidjson::Value& v);
330  void encodeSetAnyPacketModeResponse(rapidjson::Document::AllocatorType& alloc, rapidjson::Value& v);
331 };
ProtocolBridge()
Definition: ProtocolBridge.cpp:44
bool actionResult
Definition: ProtocolBridge.h:192
bool actionResult
Definition: ProtocolBridge.h:165
uint8_t checksum
Definition: ProtocolBridge.h:98
Cmd getCmd() const
Definition: ProtocolBridge.cpp:610
Definition: ProtocolBridge.h:180
bool anyPacketNode
Definition: ProtocolBridge.h:96
static const int ALL_VISIBLE_METERS_BITMAP_LEN
Definition: ProtocolBridge.h:120
uint8_t msgLen
Definition: ProtocolBridge.h:144
Definition: UdpMessage.h:52
uint8_t countedWmbusChecksum
Definition: ProtocolBridge.h:159
uint8_t countedWmbusChecksum
Definition: ProtocolBridge.h:148
void parseResponse(const DpaMessage &response) override
Definition: ProtocolBridge.cpp:417
void parseCommand(const std::string &command) override
Definition: ProtocolBridge.cpp:511
void commandGetVisibleConfirmation(uint8_t index, uint8_t map[])
Definition: ProtocolBridge.cpp:109
static const int VMBUS_MAX_FRAME_LEN
Definition: ProtocolBridge.h:138
NewVisibleMetersResponse getNewVisibleMetersResponse() const
Definition: ProtocolBridge.h:206
void commandSysinfo()
Definition: ProtocolBridge.cpp:55
Definition: ProtocolBridge.h:305
VisibleConfirmationResponse getVisibleConfirmationResponse() const
Definition: ProtocolBridge.h:230
bool actionResult
Definition: ProtocolBridge.h:198
uint8_t countToInvisible
Definition: ProtocolBridge.h:97
void commandGetNewVisible()
Definition: ProtocolBridge.cpp:60
uint16_t readedMetersNum
Definition: ProtocolBridge.h:88
uint16_t nodeTimeout
Definition: ProtocolBridge.h:95
SetNodeTimeoutResponse getSetNodeTimeoutResponse() const
Definition: ProtocolBridge.h:250
CompactPacketResponse getCompactPacketResponse() const
Definition: ProtocolBridge.h:222
Definition: ProtocolBridge.h:141
uint16_t requestValue
Definition: ProtocolBridge.h:197
uint16_t meterIndex
Definition: ProtocolBridge.h:181
bool actionResult
Definition: ProtocolBridge.h:171
uint8_t msgLen
Definition: ProtocolBridge.h:155
DeleteAllResponse getDeleteAllResponse() const
Definition: ProtocolBridge.h:246
Definition: ProtocolBridge.h:196
void commandGetFullPacket(uint16_t meterIndex)
Definition: ProtocolBridge.cpp:101
Implements common features of JsonDpaMessage.
Definition: JsonSerializer.h:41
uint16_t metersNum
Definition: ProtocolBridge.h:115
uint16_t wmbAllReaedTimeout
Definition: ProtocolBridge.h:94
void commandGetNewDataInfo()
Definition: ProtocolBridge.cpp:85
InvisibleConfirmationResponse getInvisibleConfirmationResponse() const
Definition: ProtocolBridge.h:234
static const int VISIBLE_METERS_BITMAP_LEN
Definition: ProtocolBridge.h:102
SleepNowResponse getSleepNowResponse() const
Definition: ProtocolBridge.h:238
SetAnyPacketModeResponse getSetAnyPacketModeResponse() const
Definition: ProtocolBridge.h:254
uint16_t metersNum
Definition: ProtocolBridge.h:106
uint16_t wmbTimeout
Definition: ProtocolBridge.h:93
Cmd
Definition: ProtocolBridge.h:25
void commandSetAnyPacketMode(bool enable)
Definition: ProtocolBridge.cpp:224
uint16_t metersNum
Definition: ProtocolBridge.h:124
void commandSetWmAllReadedTimeout(uint16_t wmTimeout)
Definition: ProtocolBridge.cpp:198
uint8_t crc
Definition: ProtocolBridge.h:146
uint8_t confirmedNum
Definition: ProtocolBridge.h:164
NewInvisibleMetersResponse getNewInvisibleMetersResponse() const
Definition: ProtocolBridge.h:210
Definition: ProtocolBridge.h:132
const std::string & encodeCommand() const override
Definition: ProtocolBridge.cpp:568
static const int SYSINFO_FIRMWARE_VERSION_LEN
Definition: ProtocolBridge.h:82
static const std::string PRF_NAME
Definition: ProtocolBridge.h:50
uint16_t requestValue
Definition: ProtocolBridge.h:191
Definition: ProtocolBridge.h:163
uint16_t sleepCount
Definition: ProtocolBridge.h:92
Definition: ProtocolBridge.h:190
SysinfoResponse getSysinfoResponse() const
Definition: ProtocolBridge.h:204
FrcCmd
Definition: ProtocolBridge.h:45
void commandDeleteId(uint16_t meterIndex)
Definition: ProtocolBridge.cpp:146
uint8_t afterReceiptWmbusChecksum
Definition: ProtocolBridge.h:158
virtual ~ProtocolBridge()
Definition: ProtocolBridge.cpp:50
uint8_t rssi
Definition: ProtocolBridge.h:156
virtual ~ProtocolBridgeJson()
Definition: ProtocolBridge.h:312
uint8_t rssi
Definition: ProtocolBridge.h:145
void commandGetNewInvisible()
Definition: ProtocolBridge.cpp:68
static const int NEW_DATA_INFO_BITMAP_LEN
Definition: ProtocolBridge.h:129
void commandSetWmTimeout(uint16_t wmTimeout)
Definition: ProtocolBridge.cpp:185
static const int CONFIRMATION_BITMAP_LEN
Definition: ProtocolBridge.h:56
uint8_t confirmedNum
Definition: ProtocolBridge.h:170
void commandSetSleepInterval(uint16_t sleepInterval)
Definition: ProtocolBridge.cpp:172
double temperature
Definition: ProtocolBridge.h:89
void commandGetCompactPacket(uint16_t meterIndex)
Definition: ProtocolBridge.cpp:93
uint16_t meterIndex
Definition: ProtocolBridge.h:153
uint16_t meterIndex
Definition: ProtocolBridge.h:142
void commandSetNodeTimeout(uint16_t nodeTimeout)
Definition: ProtocolBridge.cpp:211
Definition: ProtocolBridge.h:175
DeleteIdResponse getDeleteIdResponse() const
Definition: ProtocolBridge.h:242
Definition: ProtocolBridge.h:123
Definition: ProtocolBridge.h:169
Definition: ProtocolBridge.h:85
NewDataInfoResponse getNewDataInfoResponse() const
Definition: ProtocolBridge.h:218
Definition: ProtocolBridge.h:114
Definition: ProtocolBridge.h:152
Definition: ProtocolBridge.h:185
uint16_t visibleMetersNum
Definition: ProtocolBridge.h:87
bool actionResult
Definition: ProtocolBridge.h:186
void commandSleepNow(uint16_t sleepTime)
Definition: ProtocolBridge.cpp:133
Definition: ProtocolBridge.h:105
FullPacketResponse getFullPacketResponse() const
Definition: ProtocolBridge.h:226
void commandDeleteAll()
Definition: ProtocolBridge.cpp:159
Definition: ProtocolBridge.h:23
AllVisibleMetersResponse getAllVisibleMetersResponse() const
Definition: ProtocolBridge.h:214
uint16_t requestValue
Definition: ProtocolBridge.h:176
void commandGetInvisibleConfirmation(uint8_t index, uint8_t map[])
Definition: ProtocolBridge.cpp:121
uint16_t metersNum
Definition: ProtocolBridge.h:133
uint8_t afterReceiptWmbusChecksum
Definition: ProtocolBridge.h:147
static const int SYSINFO_SERIAL_NUMBER_LEN
Definition: ProtocolBridge.h:81
uint8_t crc
Definition: ProtocolBridge.h:157
void commandGetAllVisible()
Definition: ProtocolBridge.cpp:76
double powerVoltage
Definition: ProtocolBridge.h:90
static const int INVISIBLE_METERS_BITMAP_LEN
Definition: ProtocolBridge.h:111