MeshNet  1.0.0
meshPacketFlags.h
Go to the documentation of this file.
1 
10 #ifndef MESH_PACKET_FLAGS_H
11 #define MESH_PACKET_FLAGS_H
12 
13 #include "meshHelper.h"
14 
26  //Do not reorder
27 public:
29  RoutingEnabled(false),
30  RelayingEnabled(false),
31  SystemPacket(false),
32  CarriageHeader(false),
33  CarriageFrame(false),
34  SecuredPacket(false),
35  ACKRequired(false),
36  MoreFrameControl(false)
37  {}
38 
39  MeshFrameControl(uint8_t raw) {
40  operator=(raw);
41  }
42 
43  MeshFrameControl(const MeshFrameControl&) = default;
44  MeshFrameControl& operator=(const MeshFrameControl&) = default;
45 
51  volatile bool RoutingEnabled : 1;
52 
58  volatile bool RelayingEnabled : 1;
59 
64  volatile bool SystemPacket : 1;
65 
66 
73  inline void SetCarriageFrame(bool isCarriageFrame, bool isHeader = false) {
74  CarriageFrame = isCarriageFrame;
75  CarriageHeader = (isCarriageFrame && isHeader);
76  }
77 
81  inline bool IsCarriageFrame() const {
82  return CarriageFrame;
83  }
84 
88  inline bool IsCarriageHeader() const {
89  return CarriageFrame && CarriageHeader;
90  }
91 
92 
93 private:
94 
99  volatile bool CarriageHeader : 1;
100 
106  volatile bool CarriageFrame : 1;
107 
108 public:
112  volatile bool SecuredPacket : 1;
113 
118  volatile bool ACKRequired : 1;
119 
125  volatile bool MoreFrameControl : 1;
126 
130  inline bool ContainsDestinationAddress() const {
132  }
133 
137  inline bool ContainsHopCount() const {
138  return RelayingEnabled;
139  }
140 
144  inline bool ContainsFromAddress() const {
145  return RelayingEnabled;
146  }
147 
151  inline bool ContainsToAddress() const {
153  }
154 
158  inline void Clear() {
159  *((uint8_t*)this) = (uint8_t)0;
160  }
161 
162  //Operators, that allows converting struct to uint8_t and opposite
163  MeshFrameControl& operator=(uint8_t val) {
164  *((uint8_t*)this) = val;
165  return *this;
166  }
167 
168  operator uint8_t() const { return *((uint8_t*)this); }
169  operator uint8_t() { return *((uint8_t*)this); }
170 
176  size_t prettyPrint(OSTREAM& stream) const;
177 };
178 
179 
180 
181 
182 
188  //Do not reorder
189 public:
191  RespondConnected(true),
192  RespondDisconnected(true),
194  RespondBackupGatewayNode(true), //Reserved for future use
195  CanRespondSameNetNode(false),
196  Reserved1_6(false),
197  Reserved1_7(false),
198  Reserved1_8(false),
199 
200  SendSSID(false),
201  ResponderIsMAC(false),
202  IgnoreRSSIThreshold(false),
203  Reserved2_4(false),
204  Reserved2_5(false),
205  Reserved2_6(false),
206  Reserved2_7(false),
207  Reserved2_8(false)
208  {}
209 
210  MeshNetScanFlags(uint16_t raw) {
211  operator=(raw);
212  }
213 
214  MeshNetScanFlags(const MeshNetScanFlags&) = default;
215  MeshNetScanFlags& operator=(const MeshNetScanFlags&) = default;
216 
220  volatile bool RespondConnected : 1;
221 
225  volatile bool RespondDisconnected : 1;
226 
230  volatile bool RespondMainGatewayNode : 1;
231 
236  volatile bool RespondBackupGatewayNode : 1;
237 
241  volatile bool CanRespondSameNetNode : 1;
242 
243 
244 
248  volatile bool Reserved1_6 : 1;
249  volatile bool Reserved1_7 : 1;
250  volatile bool Reserved1_8 : 1;
251 
255  volatile bool SendSSID : 1;
256 
260  volatile bool ResponderIsMAC : 1;
261 
265  volatile bool IgnoreRSSIThreshold : 1;
266 
270  volatile bool Reserved2_4 : 1;
271  volatile bool Reserved2_5 : 1;
272  volatile bool Reserved2_6 : 1;
273  volatile bool Reserved2_7 : 1;
274  volatile bool Reserved2_8 : 1;
275 
279  inline void Clear() {
280  operator=(0);
281  }
282 
283  //Operators, that allows converting struct to uint16_t and opposite
284  MeshNetScanFlags & operator=(uint16_t val) {
285  memcpy(this, &val, sizeof(uint16_t));
286  return *this;
287  }
288 
289  operator uint16_t() const { return *((uint16_t*)this); }
290  operator uint16_t() { return *((uint16_t*)this); }
291 
292 };
293 
294 
300  //Do not reorder
301 public:
302  //TODO
304  Reserved1_1(false),
305  Reserved1_2(false),
306  Reserved1_3(false),
307  Reserved1_4(false),
308  Reserved1_5(false),
309  Reserved1_6(false),
310  Reserved1_7(false),
311  Reserved1_8(false),
312 
313  Reserved2_1(false),
314  Reserved2_2(false),
315  Reserved2_3(false),
316  Reserved2_4(false),
317  Reserved2_5(false),
318  Reserved2_6(false),
319  Reserved2_7(false),
320  Reserved2_8(false)
321  {}
322 
323  MeshNodeDescFlags(uint16_t raw) {
324  operator=(raw);
325  }
326 
327  MeshNodeDescFlags(const MeshNodeDescFlags&) = default;
328  MeshNodeDescFlags& operator=(const MeshNodeDescFlags&) = default;
329 
333  volatile bool Reserved1_1 : 1;
334  volatile bool Reserved1_2 : 1;
335  volatile bool Reserved1_3 : 1;
336  volatile bool Reserved1_4 : 1;
337  volatile bool Reserved1_5 : 1;
338  volatile bool Reserved1_6 : 1;
339  volatile bool Reserved1_7 : 1;
340  volatile bool Reserved1_8 : 1;
341 
342  volatile bool Reserved2_1 : 1;
343  volatile bool Reserved2_2 : 1;
344  volatile bool Reserved2_3 : 1;
345  volatile bool Reserved2_4 : 1;
346  volatile bool Reserved2_5 : 1;
347  volatile bool Reserved2_6 : 1;
348  volatile bool Reserved2_7 : 1;
349  volatile bool Reserved2_8 : 1;
350 
354  inline void Clear() {
355  operator=(0);
356  }
357 
358  //Operators, that allows converting struct to uint16_t and opposite
359  MeshNodeDescFlags& operator=(uint16_t val) {
360  memcpy(this, &val, sizeof(uint16_t));
361  return *this;
362  }
363 
364  operator uint16_t() const { return *((uint16_t*)this); }
365  operator uint16_t() { return *((uint16_t*)this); }
366 
367 };
368 
369 
375  //Do not reorder
376 public:
378  IsResponse(false),
379  Reserved1_2(false),
380  Reserved1_3(false),
381  Reserved1_4(false),
382  Reserved1_5(false),
383  Reserved1_6(false),
384  Reserved1_7(false),
385  Reserved1_8(false),
386 
387  Reserved2_1(false),
388  Reserved2_2(false),
389  Reserved2_3(false),
390  Reserved2_4(false),
391  Reserved2_5(false),
392  Reserved2_6(false),
393  Reserved2_7(false),
394  Reserved2_8(false)
395  {}
396 
397  MeshPingFlags(uint16_t raw) {
398  operator=(raw);
399  }
400 
401  MeshPingFlags(const MeshPingFlags&) = default;
402  MeshPingFlags& operator=(const MeshPingFlags&) = default;
403 
407  volatile bool IsResponse : 1;
408 
412  volatile bool Reserved1_2 : 1;
413  volatile bool Reserved1_3 : 1;
414  volatile bool Reserved1_4 : 1;
415  volatile bool Reserved1_5 : 1;
416  volatile bool Reserved1_6 : 1;
417  volatile bool Reserved1_7 : 1;
418  volatile bool Reserved1_8 : 1;
419 
420  volatile bool Reserved2_1 : 1;
421  volatile bool Reserved2_2 : 1;
422  volatile bool Reserved2_3 : 1;
423  volatile bool Reserved2_4 : 1;
424  volatile bool Reserved2_5 : 1;
425  volatile bool Reserved2_6 : 1;
426  volatile bool Reserved2_7 : 1;
427  volatile bool Reserved2_8 : 1;
428 
432  inline void Clear() {
433  operator=(0);
434  }
435 
436  //Operators, that allows converting struct to uint16_t and opposite
437  MeshPingFlags& operator=(uint16_t val) {
438  memcpy(this, &val, sizeof(uint16_t));
439  return *this;
440  }
441 
442  operator uint16_t() const { return *((uint16_t*)this); }
443  operator uint16_t() { return *((uint16_t*)this); }
444 
445 };
446 
447 
461  uint8_t Address = 0;
473  uint8_t HopsToGateway = 0;
478  char* SSID_ptr = NULL;
482  uint8_t SSID_length = 0;
483 
487  int8_t RSSI = 0;
488 
492  inline bool IsValid() const {
494  }
495 
499  inline bool IsGateway() const {
500  return Address != 0;
501  }
502 
506  inline bool IsConneted() const {
507  return Address != UNKNOWN_MESH_ADDRESS;
508  }
509 };
510 
511 #endif // !MESH_PACKET_FLAGS_H
MeshNodeDescFlags::operator=
MeshNodeDescFlags & operator=(uint16_t val)
Definition: meshPacketFlags.h:359
MeshNetScanResult
Structure, which holds network scan result.
Definition: meshPacketFlags.h:452
MeshNetScanResult::Address
uint8_t Address
Address of node.
Definition: meshPacketFlags.h:461
MeshNetScanFlags::Reserved1_7
volatile bool Reserved1_7
Definition: meshPacketFlags.h:249
MeshNetScanResult::RSSI
int8_t RSSI
RSSI of scan response in dBm.
Definition: meshPacketFlags.h:487
MeshPingFlags
Ping packets flags.
Definition: meshPacketFlags.h:374
MeshNetScanFlags::RespondMainGatewayNode
volatile bool RespondMainGatewayNode
If set to true, main gateway nodes has to respond.
Definition: meshPacketFlags.h:230
MeshPingFlags::Reserved1_2
volatile bool Reserved1_2
Reserved for future use.
Definition: meshPacketFlags.h:412
MeshFrameControl::MeshFrameControl
MeshFrameControl()
Definition: meshPacketFlags.h:28
MeshFrameControl::RoutingEnabled
volatile bool RoutingEnabled
Enables or disables routing. When routing is enabled, packet will contain address of next node,...
Definition: meshPacketFlags.h:51
MeshFrameControl
Structure, that contains bit flags used for Frame Control in MeshPacket. Size of this structure is al...
Definition: meshPacketFlags.h:25
MeshFrameControl::SystemPacket
volatile bool SystemPacket
True when current packet is system packet.
Definition: meshPacketFlags.h:64
MeshFrameControl::prettyPrint
size_t prettyPrint(OSTREAM &stream) const
Pretty prints frame ontrolto stream.
Definition: meshPacketFlags.cpp:4
MeshNetScanFlags::operator=
MeshNetScanFlags & operator=(const MeshNetScanFlags &)=default
MeshNetScanFlags::RespondConnected
volatile bool RespondConnected
If set to true, nodes connected to any network has to respond.
Definition: meshPacketFlags.h:220
MeshPingFlags::Reserved2_2
volatile bool Reserved2_2
Definition: meshPacketFlags.h:421
MeshPingFlags::Reserved2_5
volatile bool Reserved2_5
Definition: meshPacketFlags.h:424
MeshPingFlags::Reserved2_7
volatile bool Reserved2_7
Definition: meshPacketFlags.h:426
MeshPingFlags::Reserved1_6
volatile bool Reserved1_6
Definition: meshPacketFlags.h:416
MeshNetScanFlags::Reserved1_8
volatile bool Reserved1_8
Definition: meshPacketFlags.h:250
MeshFrameControl::CarriageFrame
volatile bool CarriageFrame
True when frame is part of carriage. Big packets can be splited to multiple frames,...
Definition: meshPacketFlags.h:106
MeshPingFlags::Reserved1_4
volatile bool Reserved1_4
Definition: meshPacketFlags.h:414
MeshFrameControl::operator=
MeshFrameControl & operator=(const MeshFrameControl &)=default
MeshPingFlags::Reserved2_4
volatile bool Reserved2_4
Definition: meshPacketFlags.h:423
MeshNetScanFlags::Reserved2_7
volatile bool Reserved2_7
Definition: meshPacketFlags.h:273
MeshNetScanFlags::RespondDisconnected
volatile bool RespondDisconnected
If set to true, disconnected nodes has to respond.
Definition: meshPacketFlags.h:225
MeshFrameControl::ContainsHopCount
bool ContainsHopCount() const
Check if frame with current control frame has to contain hop count field.
Definition: meshPacketFlags.h:137
UNKNOWN_MESH_ADDRESS
#define UNKNOWN_MESH_ADDRESS
Address, of node, when node is not connected to any network.
Definition: meshConfig.h:62
MeshPingFlags::Reserved2_6
volatile bool Reserved2_6
Definition: meshPacketFlags.h:425
MeshNodeDescFlags::Reserved1_4
volatile bool Reserved1_4
Definition: meshPacketFlags.h:336
MeshFrameControl::IsCarriageHeader
bool IsCarriageHeader() const
Checks, if frame is header part of carriage.
Definition: meshPacketFlags.h:88
MeshPingFlags::Reserved2_3
volatile bool Reserved2_3
Definition: meshPacketFlags.h:422
MeshFrameControl::RelayingEnabled
volatile bool RelayingEnabled
Enables or disables relaying. When relaying is enabled, can be relayied to nodes, which are not neigh...
Definition: meshPacketFlags.h:58
MeshNetScanFlags::Reserved2_8
volatile bool Reserved2_8
Definition: meshPacketFlags.h:274
MeshNodeDescFlags::Reserved2_8
volatile bool Reserved2_8
Definition: meshPacketFlags.h:349
MeshFrameControl::SecuredPacket
volatile bool SecuredPacket
True when packet is secured.
Definition: meshPacketFlags.h:112
MeshFrameControl::ContainsFromAddress
bool ContainsFromAddress() const
Check if frame with current control frame has to contain From address field.
Definition: meshPacketFlags.h:144
MeshNetScanFlags::MeshNetScanFlags
MeshNetScanFlags(uint16_t raw)
Definition: meshPacketFlags.h:210
MeshPingFlags::MeshPingFlags
MeshPingFlags()
Definition: meshPacketFlags.h:377
MeshNetScanResult::Flags
MeshNodeDescFlags Flags
Mesh node description flags, which describes every node.
Definition: meshPacketFlags.h:469
meshHelper.h
This file contains classes and structures that supports meshNet.
MeshNodeDescFlags::Clear
void Clear()
Clears frame control flags to it's default values.
Definition: meshPacketFlags.h:354
MeshNetScanFlags::MeshNetScanFlags
MeshNetScanFlags()
Definition: meshPacketFlags.h:190
MeshFrameControl::MoreFrameControl
volatile bool MoreFrameControl
True, when message contains another frame control after current frame control.
Definition: meshPacketFlags.h:125
MeshFrameControl::SetCarriageFrame
void SetCarriageFrame(bool isCarriageFrame, bool isHeader=false)
Sets frame as carriage frame.
Definition: meshPacketFlags.h:73
MeshNodeDescFlags::MeshNodeDescFlags
MeshNodeDescFlags()
Definition: meshPacketFlags.h:303
MeshPingFlags::Reserved1_5
volatile bool Reserved1_5
Definition: meshPacketFlags.h:415
MeshPingFlags::operator=
MeshPingFlags & operator=(uint16_t val)
Definition: meshPacketFlags.h:437
MeshNodeDescFlags::Reserved2_6
volatile bool Reserved2_6
Definition: meshPacketFlags.h:347
MeshNodeDescFlags::operator=
MeshNodeDescFlags & operator=(const MeshNodeDescFlags &)=default
MeshNetScanFlags::CanRespondSameNetNode
volatile bool CanRespondSameNetNode
If set to true, nodes from same network has to respond.
Definition: meshPacketFlags.h:241
MeshNodeDescFlags::Reserved2_5
volatile bool Reserved2_5
Definition: meshPacketFlags.h:346
MeshNetScanFlags::operator=
MeshNetScanFlags & operator=(uint16_t val)
Definition: meshPacketFlags.h:284
MeshPingFlags::Clear
void Clear()
Clears frame control flags to it's default values.
Definition: meshPacketFlags.h:432
MeshNodeDescFlags::Reserved2_3
volatile bool Reserved2_3
Definition: meshPacketFlags.h:344
MeshFrameControl::Clear
void Clear()
Clears frame control flags to it's default values.
Definition: meshPacketFlags.h:158
MeshNetScanResult::BSSID
MeshMAC BSSID
BSSID of network, the node which responsed is connected to. If node is not connected to any network (...
Definition: meshPacketFlags.h:457
MeshFrameControl::CarriageHeader
volatile bool CarriageHeader
True when frame is header frame of frame carriage.
Definition: meshPacketFlags.h:99
MeshNetScanFlags::Reserved2_4
volatile bool Reserved2_4
Reserved for future use.
Definition: meshPacketFlags.h:270
MeshNetScanFlags::Reserved2_6
volatile bool Reserved2_6
Definition: meshPacketFlags.h:272
MeshNetScanFlags::ResponderIsMAC
volatile bool ResponderIsMAC
If set to true, responder is MAC address and not BSSID of network. This flag is ignored when no respo...
Definition: meshPacketFlags.h:260
MeshNetScanResult::IsGateway
bool IsGateway() const
Checks if node which responsed is gateway.
Definition: meshPacketFlags.h:499
MeshNodeDescFlags::Reserved1_6
volatile bool Reserved1_6
Definition: meshPacketFlags.h:338
MeshNodeDescFlags::Reserved2_7
volatile bool Reserved2_7
Definition: meshPacketFlags.h:348
MeshNetScanResult::SSID_length
uint8_t SSID_length
Length of SSID without null terminator. If node is not connected to any network, 0 is set.
Definition: meshPacketFlags.h:482
MeshNodeDescFlags::Reserved1_2
volatile bool Reserved1_2
Definition: meshPacketFlags.h:334
MeshNodeDescFlags::Reserved1_1
volatile bool Reserved1_1
Reserved for future use.
Definition: meshPacketFlags.h:333
OSTREAM
#define OSTREAM
Definition: meshConfig.h:41
MeshNodeDescFlags::Reserved2_1
volatile bool Reserved2_1
Definition: meshPacketFlags.h:342
MeshPingFlags::IsResponse
volatile bool IsResponse
True if ping packet is response to ping packet request.
Definition: meshPacketFlags.h:407
MeshNetScanResult::IsValid
bool IsValid() const
Checks if result is valid.
Definition: meshPacketFlags.h:492
MeshNodeDescFlags
Mesh node description flags, which describes every node on connection or when scan is performed.
Definition: meshPacketFlags.h:299
MeshNetScanFlags::IgnoreRSSIThreshold
volatile bool IgnoreRSSIThreshold
If set to true, RSSI threshold is ignored.
Definition: meshPacketFlags.h:265
MeshPingFlags::operator=
MeshPingFlags & operator=(const MeshPingFlags &)=default
MeshNetScanResult::Version
MeshVersion Version
MeshNet version, the node is using.
Definition: meshPacketFlags.h:465
MeshFrameControl::ContainsDestinationAddress
bool ContainsDestinationAddress() const
Check if frame with current control frame has to contain Destination address field.
Definition: meshPacketFlags.h:130
MeshNetScanResult::HopsToGateway
uint8_t HopsToGateway
Hops from current node to gateway. If node is gateway (Address == 0) 0 is set.
Definition: meshPacketFlags.h:473
MeshNodeDescFlags::Reserved2_4
volatile bool Reserved2_4
Definition: meshPacketFlags.h:345
MeshNetScanResult::IsConneted
bool IsConneted() const
Checks if node which responsed is connected to any network.
Definition: meshPacketFlags.h:506
MeshNodeDescFlags::Reserved1_5
volatile bool Reserved1_5
Definition: meshPacketFlags.h:337
MeshMAC
Structure that represents physical MAC address used in MeshNEt protocol. MeshMAC address unlike MAC a...
Definition: meshHelper.h:207
MeshNodeDescFlags::Reserved1_8
volatile bool Reserved1_8
Definition: meshPacketFlags.h:340
MeshFrameControl::operator=
MeshFrameControl & operator=(uint8_t val)
Definition: meshPacketFlags.h:163
MeshPingFlags::Reserved1_7
volatile bool Reserved1_7
Definition: meshPacketFlags.h:417
MeshPingFlags::Reserved1_3
volatile bool Reserved1_3
Definition: meshPacketFlags.h:413
MeshNetScanFlags::Reserved1_6
volatile bool Reserved1_6
Reserved for future use.
Definition: meshPacketFlags.h:248
MeshNodeDescFlags::Reserved1_7
volatile bool Reserved1_7
Definition: meshPacketFlags.h:339
MeshNetScanFlags::Reserved2_5
volatile bool Reserved2_5
Definition: meshPacketFlags.h:271
MeshPingFlags::Reserved2_8
volatile bool Reserved2_8
Definition: meshPacketFlags.h:427
MeshPingFlags::Reserved1_8
volatile bool Reserved1_8
Definition: meshPacketFlags.h:418
MeshFrameControl::MeshFrameControl
MeshFrameControl(uint8_t raw)
Definition: meshPacketFlags.h:39
MeshPingFlags::Reserved2_1
volatile bool Reserved2_1
Definition: meshPacketFlags.h:420
MeshNetScanResult::SSID_ptr
char * SSID_ptr
Pointer to network name (SSID). If node is not connected to any network, NULL is set.
Definition: meshPacketFlags.h:478
MeshFrameControl::ACKRequired
volatile bool ACKRequired
True, when destination node has to send acknowledgement.
Definition: meshPacketFlags.h:118
MeshNetScanFlags::SendSSID
volatile bool SendSSID
If set to true, response has to contain SSID if set.
Definition: meshPacketFlags.h:255
MeshNetScanFlags::RespondBackupGatewayNode
volatile bool RespondBackupGatewayNode
If set to true, backup gateway nodes has to respond.
Definition: meshPacketFlags.h:236
MeshPingFlags::MeshPingFlags
MeshPingFlags(uint16_t raw)
Definition: meshPacketFlags.h:397
IS_VALID_MESH_ADDRESS
#define IS_VALID_MESH_ADDRESS(address)
Checks if mesh address is valid. Accepted values from 0 to MAX_MESH_ADDRESS.
Definition: meshConfig.h:82
MeshFrameControl::ContainsToAddress
bool ContainsToAddress() const
Check if frame with current control frame has to contain To address field.
Definition: meshPacketFlags.h:151
MeshFrameControl::IsCarriageFrame
bool IsCarriageFrame() const
Checks, if frame is part of carriage.
Definition: meshPacketFlags.h:81
MeshVersion
Structure that represents MeshNet version. Real size of this class is always 2 bytes.
Definition: meshHelper.h:310
MeshNodeDescFlags::MeshNodeDescFlags
MeshNodeDescFlags(uint16_t raw)
Definition: meshPacketFlags.h:323
MeshNodeDescFlags::Reserved1_3
volatile bool Reserved1_3
Definition: meshPacketFlags.h:335
MeshNetScanFlags::Clear
void Clear()
Clears frame control flags to it's default values.
Definition: meshPacketFlags.h:279
MeshNetScanFlags
Network scan request flags.
Definition: meshPacketFlags.h:187
MeshNodeDescFlags::Reserved2_2
volatile bool Reserved2_2
Definition: meshPacketFlags.h:343