diff --git a/CONTRIBUTING_8md.html b/CONTRIBUTING_8md.html index 6b43d442..5b2ad6a8 100644 --- a/CONTRIBUTING_8md.html +++ b/CONTRIBUTING_8md.html @@ -3,12 +3,15 @@ - + -Newly Optimized RF24Network Layer: CONTRIBUTING.md File Reference +Optimized RF24Network Layer: CONTRIBUTING.md File Reference + + + @@ -23,16 +26,16 @@ -
Newly Optimized RF24Network Layer v2.0.0 +
Optimized RF24Network Layer v2.0.0
-
2020 - Optimized RF24 Network Layer for NRF24L01 radios
+
2024 - Optimized RF24 Network Layer for NRF24L01 & NRF52x radios
- + @@ -78,7 +81,7 @@ diff --git a/Network_Ping_8ino-example.html b/Network_Ping_8ino-example.html index 44deba3f..b95c0dfe 100644 --- a/Network_Ping_8ino-example.html +++ b/Network_Ping_8ino-example.html @@ -3,12 +3,15 @@ - + -Newly Optimized RF24Network Layer: Network_Ping.ino +Optimized RF24Network Layer: Network_Ping.ino + + + @@ -23,16 +26,16 @@ -
Newly Optimized RF24Network Layer v2.0.0 +
Optimized RF24Network Layer v2.0.0
-
2020 - Optimized RF24 Network Layer for NRF24L01 radios
+
2024 - Optimized RF24 Network Layer for NRF24L01 & NRF52x radios
- + @@ -284,14 +287,14 @@
}
}
RF24Network.h
-
ESBNetwork
Definition: RF24Network.h:384
-
RF24NetworkHeader
Definition: RF24Network.h:229
-
RF24NetworkHeader::type
unsigned char type
Definition: RF24Network.h:246
-
RF24NetworkHeader::from_node
uint16_t from_node
Definition: RF24Network.h:231
+
ESBNetwork
Definition RF24Network.h:384
+
RF24NetworkHeader
Definition RF24Network.h:229
+
RF24NetworkHeader::type
unsigned char type
Definition RF24Network.h:246
+
RF24NetworkHeader::from_node
uint16_t from_node
Definition RF24Network.h:231
diff --git a/Network_Ping_Sleep_8ino-example.html b/Network_Ping_Sleep_8ino-example.html index 4349a761..51e24849 100644 --- a/Network_Ping_Sleep_8ino-example.html +++ b/Network_Ping_Sleep_8ino-example.html @@ -3,12 +3,15 @@ - + -Newly Optimized RF24Network Layer: Network_Ping_Sleep.ino +Optimized RF24Network Layer: Network_Ping_Sleep.ino + + + @@ -23,16 +26,16 @@ -
Newly Optimized RF24Network Layer v2.0.0 +
Optimized RF24Network Layer v2.0.0
-
2020 - Optimized RF24 Network Layer for NRF24L01 radios
+
2024 - Optimized RF24 Network Layer for NRF24L01 & NRF52x radios
- + @@ -331,14 +334,14 @@
}
}
RF24Network.h
-
ESBNetwork
Definition: RF24Network.h:384
-
RF24NetworkHeader
Definition: RF24Network.h:229
-
RF24NetworkHeader::type
unsigned char type
Definition: RF24Network.h:246
-
RF24NetworkHeader::from_node
uint16_t from_node
Definition: RF24Network.h:231
+
ESBNetwork
Definition RF24Network.h:384
+
RF24NetworkHeader
Definition RF24Network.h:229
+
RF24NetworkHeader::type
unsigned char type
Definition RF24Network.h:246
+
RF24NetworkHeader::from_node
uint16_t from_node
Definition RF24Network.h:231
diff --git a/Network_Priority_RX_8ino-example.html b/Network_Priority_RX_8ino-example.html index a566659e..5b94f654 100644 --- a/Network_Priority_RX_8ino-example.html +++ b/Network_Priority_RX_8ino-example.html @@ -3,12 +3,15 @@ - + -Newly Optimized RF24Network Layer: Network_Priority_RX.ino +Optimized RF24Network Layer: Network_Priority_RX.ino + + + @@ -23,16 +26,16 @@ -
Newly Optimized RF24Network Layer v2.0.0 +
Optimized RF24Network Layer v2.0.0
-
2020 - Optimized RF24 Network Layer for NRF24L01 radios
+
2024 - Optimized RF24 Network Layer for NRF24L01 & NRF52x radios
- + @@ -166,7 +169,7 @@
RF24NetworkHeader header; // Create an empty header
uint16_t dataSize = network.peek(header); // Peek to get the size of the data
uint32_t someVariable;
-
if (header.type = 32) { // If a certain header type is recieved
+
if (header.type == 32) { // If a certain header type is recieved
network.read(header, &someVariable, sizeof(someVariable)); // Handle the data a specific way
Serial.print(F("RX User Data:\nHeader Type "));
Serial.print(header.type);
@@ -180,14 +183,14 @@
}
} //loop
RF24Network.h
-
ESBNetwork
Definition: RF24Network.h:384
-
EXTERNAL_DATA_TYPE
#define EXTERNAL_DATA_TYPE
Definition: RF24Network.h:103
-
RF24NetworkHeader
Definition: RF24Network.h:229
-
RF24NetworkHeader::type
unsigned char type
Definition: RF24Network.h:246
+
ESBNetwork
Definition RF24Network.h:384
+
EXTERNAL_DATA_TYPE
#define EXTERNAL_DATA_TYPE
Definition RF24Network.h:103
+
RF24NetworkHeader
Definition RF24Network.h:229
+
RF24NetworkHeader::type
unsigned char type
Definition RF24Network.h:246
diff --git a/Network_Priority_TX_8ino-example.html b/Network_Priority_TX_8ino-example.html index 90f60327..69f12bb0 100644 --- a/Network_Priority_TX_8ino-example.html +++ b/Network_Priority_TX_8ino-example.html @@ -3,12 +3,15 @@ - + -Newly Optimized RF24Network Layer: Network_Priority_TX.ino +Optimized RF24Network Layer: Network_Priority_TX.ino + + + @@ -23,16 +26,16 @@ -
Newly Optimized RF24Network Layer v2.0.0 +
Optimized RF24Network Layer v2.0.0
-
2020 - Optimized RF24 Network Layer for NRF24L01 radios
+
2024 - Optimized RF24 Network Layer for NRF24L01 & NRF52x radios
- + @@ -154,13 +157,13 @@
} //loop
RF24Network.h
-
ESBNetwork
Definition: RF24Network.h:384
-
EXTERNAL_DATA_TYPE
#define EXTERNAL_DATA_TYPE
Definition: RF24Network.h:103
-
RF24NetworkHeader
Definition: RF24Network.h:229
+
ESBNetwork
Definition RF24Network.h:384
+
EXTERNAL_DATA_TYPE
#define EXTERNAL_DATA_TYPE
Definition RF24Network.h:103
+
RF24NetworkHeader
Definition RF24Network.h:229
diff --git a/RF24Network_8cpp.html b/RF24Network_8cpp.html index 5ed796b6..b971814a 100644 --- a/RF24Network_8cpp.html +++ b/RF24Network_8cpp.html @@ -3,12 +3,15 @@ - + -Newly Optimized RF24Network Layer: RF24Network.cpp File Reference +Optimized RF24Network Layer: RF24Network.cpp File Reference + + + @@ -23,16 +26,16 @@ -
Newly Optimized RF24Network Layer v2.0.0 +
Optimized RF24Network Layer v2.0.0
-
2020 - Optimized RF24 Network Layer for NRF24L01 radios
+
2024 - Optimized RF24 Network Layer for NRF24L01 & NRF52x radios
- + @@ -81,7 +84,7 @@ diff --git a/RF24Network_8h.html b/RF24Network_8h.html index 66eafcc3..d8aeafd1 100644 --- a/RF24Network_8h.html +++ b/RF24Network_8h.html @@ -3,12 +3,15 @@ - + -Newly Optimized RF24Network Layer: RF24Network.h File Reference +Optimized RF24Network Layer: RF24Network.h File Reference + + + @@ -23,16 +26,16 @@ -
Newly Optimized RF24Network Layer v2.0.0 +
Optimized RF24Network Layer v2.0.0
-
2020 - Optimized RF24 Network Layer for NRF24L01 radios
+
2024 - Optimized RF24 Network Layer for NRF24L01 & NRF52x radios
- + @@ -96,54 +99,54 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +

Macros

#define MIN_USER_DEFINED_HEADER_TYPE   0
#define MIN_USER_DEFINED_HEADER_TYPE   0
 
#define MAX_USER_DEFINED_HEADER_TYPE   127
#define MAX_USER_DEFINED_HEADER_TYPE   127
 
#define NETWORK_ADDR_RESPONSE   128
#define NETWORK_ADDR_RESPONSE   128
 
#define NETWORK_PING   130
#define NETWORK_PING   130
 
#define EXTERNAL_DATA_TYPE   131
#define EXTERNAL_DATA_TYPE   131
 
#define NETWORK_FIRST_FRAGMENT   148
#define NETWORK_FIRST_FRAGMENT   148
 
#define NETWORK_MORE_FRAGMENTS   149
#define NETWORK_MORE_FRAGMENTS   149
 
#define NETWORK_LAST_FRAGMENT   150
#define NETWORK_LAST_FRAGMENT   150
 
#define NETWORK_ACK   193
#define NETWORK_ACK   193
 
#define NETWORK_POLL   194
#define NETWORK_POLL   194
 
#define NETWORK_REQ_ADDRESS   195
#define NETWORK_REQ_ADDRESS   195
 
#define NETWORK_MORE_FRAGMENTS_NACK   200
#define NETWORK_MORE_FRAGMENTS_NACK   200
 
#define TX_NORMAL   0
#define TX_NORMAL   0
 
#define TX_ROUTED   1
#define TX_ROUTED   1
 
#define USER_TX_TO_PHYSICAL_ADDRESS   2
#define USER_TX_TO_PHYSICAL_ADDRESS   2
 
#define USER_TX_TO_LOGICAL_ADDRESS   3
#define USER_TX_TO_LOGICAL_ADDRESS   3
 
#define USER_TX_MULTICAST   4
#define USER_TX_MULTICAST   4
 
#define MAX_FRAME_SIZE   32
#define MAX_FRAME_SIZE   32
 
#define FRAME_HEADER_SIZE   10
#define FRAME_HEADER_SIZE   10
 
#define USE_CURRENT_CHANNEL   255
#define USE_CURRENT_CHANNEL   255
 
#define FLAG_FAST_FRAG   4
#define FLAG_FAST_FRAG   4
 
#define FLAG_NO_POLL   8
#define FLAG_NO_POLL   8
 
- +

Typedefs

typedef ESBNetwork< RF24 > RF24Network
typedef ESBNetwork< RF24 > RF24Network
 

Detailed Description

@@ -342,7 +345,7 @@

- +
typedef ESBNetwork<RF24> RF24Networktypedef ESBNetwork<RF24> RF24Network
// is equivalent to
ESBNetwork<RF24> network(radio);
-
Definition: RF24Network.h:384
+
Definition RF24Network.h:384
diff --git a/RF24Network_8h_source.html b/RF24Network_8h_source.html index 7d6c3b89..9b80888e 100644 --- a/RF24Network_8h_source.html +++ b/RF24Network_8h_source.html @@ -3,12 +3,15 @@ - + -Newly Optimized RF24Network Layer: RF24Network.h Source File +Optimized RF24Network Layer: RF24Network.h Source File + + + @@ -23,16 +26,16 @@ -
Newly Optimized RF24Network Layer v2.0.0 +
Optimized RF24Network Layer v2.0.0
-
2020 - Optimized RF24 Network Layer for NRF24L01 radios
+
2024 - Optimized RF24 Network Layer for NRF24L01 & NRF52x radios
- + +
41#define MAX_USER_DEFINED_HEADER_TYPE 127
42
43// ACK Response Types
-
72#define NETWORK_ADDR_RESPONSE 128
+
72#define NETWORK_ADDR_RESPONSE 128
73
79#define NETWORK_PING 130
80
@@ -137,7 +145,7 @@
180// The following 2 atrifacts now exist in RF24Mesh as their significance was specific to RF24Mesh.
181//#define NETWORK_ADDR_LOOKUP 196
182//#define NETWORK_ADDR_RELEASE 197
-
185/* This isn't actually used anywhere. */
+
185/* This isn't actually used anywhere. */
186#define NETWORK_MORE_FRAGMENTS_NACK 200
187
188/* Internal defines for handling written payloads */
@@ -160,6 +168,7 @@
218class nrf_to_nrf;
219#endif
220
+
229{
231 uint16_t from_node;
@@ -180,7 +189,9 @@
288
298 const char* toString(void) const;
299};
+
300
+
312{
@@ -196,31 +207,39 @@
335
346#if defined(RF24_LINUX) || defined(DOXYGEN_FORCED)
+
347 RF24NetworkFrame(RF24NetworkHeader& _header, const void* _message = NULL, uint16_t _len = 0) : header(_header), message_size(_len)
348 {
349 if (_message && _len) {
350 memcpy(message_buffer, _message, _len);
351 }
352 }
+
353#endif
354#if defined(DOXYGEN_FORCED) || !defined(RF24_LINUX)
+
365 RF24NetworkFrame(RF24NetworkHeader& _header, uint16_t _message_size) : header(_header), message_size(_message_size)
366 {
367 }
+
368#endif
369};
+
370
382template<class radio_t = RF24>
+
384{
385
393public:
-
411 ESBNetwork(radio_t& _radio);
+
411 ESBNetwork(radio_t& _radio);
412
+
433 inline void begin(uint16_t _node_address)
434 {
435 begin(USE_CURRENT_CHANNEL, _node_address);
436 }
+
437
446 uint8_t update(void);
447
@@ -379,6 +398,7 @@
976#endif
977
979};
+
980
993#if defined(ARDUINO_ARCH_NRF52) || defined(ARDUINO_ARCH_NRF52840) || defined(ARDUINO_ARCH_NRF52833)
@@ -386,58 +406,59 @@
995#endif
996
1066#endif // __RF24NETWORK_H__
-
ESBNetwork< RF24 > RF24Network
Definition: RF24Network.h:992
-
#define USE_CURRENT_CHANNEL
Definition: RF24Network.h:202
-
#define MAX_FRAME_SIZE
Definition: RF24Network.h:195
+
ESBNetwork< RF24 > RF24Network
Definition RF24Network.h:992
+
#define USE_CURRENT_CHANNEL
Definition RF24Network.h:202
+
#define MAX_FRAME_SIZE
Definition RF24Network.h:195
-
#define MAX_PAYLOAD_SIZE
Maximum size of fragmented network frames and fragmentation cache.
Definition: RF24Network_config.h:61
-
#define MAIN_BUFFER_SIZE
The allocated size of the incoming frame buffer.
Definition: RF24Network_config.h:72
-
Definition: RF24Network.h:384
-
std::queue< RF24NetworkFrame > external_queue
Definition: RF24Network.h:774
+
#define MAX_PAYLOAD_SIZE
Maximum size of fragmented network frames and fragmentation cache.
Definition RF24Network_config.h:61
+
#define MAIN_BUFFER_SIZE
The allocated size of the incoming frame buffer.
Definition RF24Network_config.h:72
+
Definition RF24Network.h:384
+
ESBNetwork(radio_t &_radio)
Definition RF24Network.cpp:60
+
std::queue< RF24NetworkFrame > external_queue
Definition RF24Network.h:774
bool sleepNode(unsigned int cycles, int interruptPin, uint8_t INTERRUPT_MODE=0)
-
bool returnSysMsgs
Definition: RF24Network.h:815
-
void multicastLevel(uint8_t level)
Definition: RF24Network.cpp:1154
-
uint16_t node_address
Definition: RF24Network.h:847
-
bool multicast(RF24NetworkHeader &header, const void *message, uint16_t len, uint8_t level=7)
Definition: RF24Network.cpp:670
-
bool available(void)
Definition: RF24Network.cpp:544
-
void begin(uint16_t _node_address)
Definition: RF24Network.h:433
-
uint16_t routeTimeout
Timeout for routed payloads.
Definition: RF24Network.h:595
+
bool returnSysMsgs
Definition RF24Network.h:815
+
void multicastLevel(uint8_t level)
Definition RF24Network.cpp:1154
+
uint16_t node_address
Definition RF24Network.h:847
+
bool multicast(RF24NetworkHeader &header, const void *message, uint16_t len, uint8_t level=7)
Definition RF24Network.cpp:670
+
bool available(void)
Definition RF24Network.cpp:544
+
void begin(uint16_t _node_address)
Definition RF24Network.h:433
+
uint16_t routeTimeout
Timeout for routed payloads.
Definition RF24Network.h:595
void setup_watchdog(uint8_t prescalar)
void failures(uint32_t *_fails, uint32_t *_ok)
-
uint8_t update(void)
Definition: RF24Network.cpp:127
-
uint32_t txTimeout
Network timeout value.
Definition: RF24Network.h:585
-
uint8_t networkFlags
Definition: RF24Network.h:831
-
RF24NetworkFrame * frag_ptr
Definition: RF24Network.h:796
-
uint16_t peek(RF24NetworkHeader &header)
Definition: RF24Network.cpp:568
-
uint8_t _multicast_level
Definition: RF24Network.h:839
-
uint16_t addressOfPipe(uint16_t node, uint8_t pipeNo)
Definition: RF24Network.cpp:1094
-
bool is_valid_address(uint16_t node)
Definition: RF24Network.cpp:1122
-
uint8_t frame_buffer[MAX_FRAME_SIZE]
The raw system frame buffer.
Definition: RF24Network.h:753
-
uint16_t read(RF24NetworkHeader &header, void *message, uint16_t maxlen=MAX_PAYLOAD_SIZE)
Definition: RF24Network.cpp:614
-
bool multicastRelay
Definition: RF24Network.h:564
-
uint16_t parent() const
Definition: RF24Network.cpp:557
-
bool write(RF24NetworkHeader &header, const void *message, uint16_t len)
Definition: RF24Network.cpp:682
-
Definition: RF24Network.h:312
-
RF24NetworkFrame(RF24NetworkHeader &_header, uint16_t _message_size)
Definition: RF24Network.h:365
-
RF24NetworkFrame(RF24NetworkHeader &_header, const void *_message=NULL, uint16_t _len=0)
Definition: RF24Network.h:347
-
uint8_t * message_buffer
Definition: RF24Network.h:326
-
RF24NetworkHeader header
Definition: RF24Network.h:314
-
uint16_t message_size
Definition: RF24Network.h:317
-
RF24NetworkFrame()
Definition: RF24Network.h:334
-
Definition: RF24Network.h:229
-
const char * toString(void) const
Definition: RF24Network.cpp:1014
-
unsigned char reserved
Definition: RF24Network.h:254
-
RF24NetworkHeader(uint16_t _to, unsigned char _type=0)
Definition: RF24Network.h:287
-
RF24NetworkHeader()
Definition: RF24Network.h:264
-
unsigned char type
Definition: RF24Network.h:246
-
uint16_t id
Definition: RF24Network.h:237
-
uint16_t to_node
Definition: RF24Network.h:234
-
static uint16_t next_id
Definition: RF24Network.h:257
-
uint16_t from_node
Definition: RF24Network.h:231
+
uint8_t update(void)
Definition RF24Network.cpp:127
+
uint32_t txTimeout
Network timeout value.
Definition RF24Network.h:585
+
uint8_t networkFlags
Definition RF24Network.h:831
+
RF24NetworkFrame * frag_ptr
Definition RF24Network.h:796
+
uint16_t peek(RF24NetworkHeader &header)
Definition RF24Network.cpp:568
+
uint8_t _multicast_level
Definition RF24Network.h:839
+
uint16_t addressOfPipe(uint16_t node, uint8_t pipeNo)
Definition RF24Network.cpp:1094
+
bool is_valid_address(uint16_t node)
Definition RF24Network.cpp:1122
+
uint8_t frame_buffer[MAX_FRAME_SIZE]
The raw system frame buffer.
Definition RF24Network.h:753
+
uint16_t read(RF24NetworkHeader &header, void *message, uint16_t maxlen=MAX_PAYLOAD_SIZE)
Definition RF24Network.cpp:614
+
bool multicastRelay
Definition RF24Network.h:564
+
uint16_t parent() const
Definition RF24Network.cpp:557
+
bool write(RF24NetworkHeader &header, const void *message, uint16_t len)
Definition RF24Network.cpp:682
+
Definition RF24Network.h:312
+
RF24NetworkFrame(RF24NetworkHeader &_header, uint16_t _message_size)
Definition RF24Network.h:365
+
RF24NetworkFrame(RF24NetworkHeader &_header, const void *_message=NULL, uint16_t _len=0)
Definition RF24Network.h:347
+
uint8_t * message_buffer
Definition RF24Network.h:326
+
RF24NetworkHeader header
Definition RF24Network.h:314
+
uint16_t message_size
Definition RF24Network.h:317
+
RF24NetworkFrame()
Definition RF24Network.h:334
+
Definition RF24Network.h:229
+
const char * toString(void) const
Definition RF24Network.cpp:1014
+
unsigned char reserved
Definition RF24Network.h:254
+
RF24NetworkHeader(uint16_t _to, unsigned char _type=0)
Definition RF24Network.h:287
+
RF24NetworkHeader()
Definition RF24Network.h:264
+
unsigned char type
Definition RF24Network.h:246
+
uint16_t id
Definition RF24Network.h:237
+
uint16_t to_node
Definition RF24Network.h:234
+
static uint16_t next_id
Definition RF24Network.h:257
+
uint16_t from_node
Definition RF24Network.h:231
diff --git a/RF24Network__config_8h.html b/RF24Network__config_8h.html index dcb8bf9d..af6426a1 100644 --- a/RF24Network__config_8h.html +++ b/RF24Network__config_8h.html @@ -3,12 +3,15 @@ - + -Newly Optimized RF24Network Layer: RF24Network_config.h File Reference +Optimized RF24Network Layer: RF24Network_config.h File Reference + + + @@ -23,16 +26,16 @@ -
Newly Optimized RF24Network Layer v2.0.0 +
Optimized RF24Network Layer v2.0.0
-
2020 - Optimized RF24 Network Layer for NRF24L01 radios
+
2024 - Optimized RF24 Network Layer for NRF24L01 & NRF52x radios
- + @@ -82,29 +85,31 @@ - + - + - + - + - + - + - + - + + +

Macros

#define NETWORK_DEFAULT_ADDRESS   04444
#define NETWORK_DEFAULT_ADDRESS   04444
 A reserved valid address for use with RF24Mesh (when a mesh node requests an assigned address)
 
#define NETWORK_MULTICAST_ADDRESS   0100
#define NETWORK_MULTICAST_ADDRESS   0100
 A sentinel address value for multicasting purposes.
 
#define NETWORK_AUTO_ROUTING   070
#define NETWORK_AUTO_ROUTING   070
 A sentinel value for internally indicating that the frame should be automatically routed as necessary.
 
#define SLOW_ADDR_POLL_RESPONSE   10
#define SLOW_ADDR_POLL_RESPONSE   10
 Adds a delay to node prior to transmitting NETWORK_ADDR_RESPONSE messages.
 
#define RF24NetworkMulticast
#define RF24NetworkMulticast
 When defined, this will allow the use of multicasting messages.
 
#define MAX_PAYLOAD_SIZE   144
#define MAX_PAYLOAD_SIZE   144
 Maximum size of fragmented network frames and fragmentation cache.
 
#define MAIN_BUFFER_SIZE   (MAX_PAYLOAD_SIZE + FRAME_HEADER_SIZE)
#define MAIN_BUFFER_SIZE   (MAX_PAYLOAD_SIZE + FRAME_HEADER_SIZE)
 The allocated size of the incoming frame buffer.
 
#define ENABLE_DYNAMIC_PAYLOADS
#define ENABLE_DYNAMIC_PAYLOADS
 
#define NUM_PIPES   6
 

Macro Definition Documentation

@@ -218,7 +223,7 @@

- +
#define MAIN_BUFFER_SIZE   (MAX_PAYLOAD_SIZE + FRAME_HEADER_SIZE)#define MAIN_BUFFER_SIZE   (MAX_PAYLOAD_SIZE + FRAME_HEADER_SIZE)
+ + +

◆ NUM_PIPES

+ +
+
+ + + + +
#define NUM_PIPES   6
+
+

The number of 'pipes' available for addressing in the current device Networks with NRF24L01 devices only have 6 pipes NRF52x networks support up to 8 pipes

+
diff --git a/RF24Network__config_8h_source.html b/RF24Network__config_8h_source.html index 437167d2..5d9604b3 100644 --- a/RF24Network__config_8h_source.html +++ b/RF24Network__config_8h_source.html @@ -3,12 +3,15 @@ - + -Newly Optimized RF24Network Layer: RF24Network_config.h Source File +Optimized RF24Network Layer: RF24Network_config.h Source File + + + @@ -23,16 +26,16 @@ -
Newly Optimized RF24Network Layer v2.0.0 +
Optimized RF24Network Layer v2.0.0
-
2020 - Optimized RF24 Network Layer for NRF24L01 radios
+
2024 - Optimized RF24 Network Layer for NRF24L01 & NRF52x radios
- + +
39 /********** USER CONFIG - non ATTiny **************/
40
41 //#define ENABLE_SLEEP_MODE //AVR only
-
43 #define RF24NetworkMulticast
+
43 #define RF24NetworkMulticast
44
45 /* Saves memory by disabling fragmentation */
46 //#define DISABLE_FRAGMENTATION
@@ -131,77 +139,79 @@
82 #define ENABLE_DYNAMIC_PAYLOADS
83 #endif // DISABLE_DYNAMIC_PAYLOADS
84
-
85 /* Debug Options */
-
86 //#define SERIAL_DEBUG
-
87 //#define SERIAL_DEBUG_MINIMAL
-
88 //#define SERIAL_DEBUG_ROUTING
-
89 //#define SERIAL_DEBUG_FRAGMENTATION
-
90 //#define SERIAL_DEBUG_FRAGMENTATION_L2
-
91 /*************************************/
-
92
-
93#else // Different set of defaults for ATTiny - fragmentation is disabled and user payloads are set to 3 max
-
94 /********** USER CONFIG - ATTiny **************/
-
95 //#define ENABLE_SLEEP_MODE //AVR only
-
96 #define RF24NetworkMulticast
-
97 // NOTE: Only 24 bytes of a payload are used when DISABLE_FRAGMENTATION is defined
-
98 #define MAX_PAYLOAD_SIZE 72
-
99 #define MAIN_BUFFER_SIZE (MAX_PAYLOAD_SIZE + FRAME_HEADER_SIZE)
-
100 #define DISABLE_FRAGMENTATION
-
101 #define ENABLE_DYNAMIC_PAYLOADS
-
102 //#define DISABLE_USER_PAYLOADS
-
103#endif
-
104/*************************************/
-
105
-
106#endif // RF24_NETWORK_CONFIG_H
-
107
-
108#ifdef __cplusplus
-
109
-
110#if (defined(__linux) || defined(linux)) && !defined(__ARDUINO_X86__) && !defined(USE_RF24_LIB_SRC)
-
111 #include <RF24/RF24_config.h>
-
112
-
113// ATXMega
-
114#elif defined(XMEGA)
-
115 #include "../../rf24lib/rf24lib/RF24_config.h"
-
116#else
-
117 #include <RF24_config.h>
-
118#endif
-
119
-
120#if !defined(ARDUINO_ARCH_AVR)
-
121 // sprintf is used by RF24NetworkHeader::toString
-
122 #ifndef sprintf_P
-
123 #define sprintf_P sprintf
-
124 #endif
-
125#endif
-
126
-
127#if defined(SERIAL_DEBUG_MINIMAL)
-
128 #define IF_SERIAL_DEBUG_MINIMAL(x) ({ x; })
-
129#else
-
130 #define IF_SERIAL_DEBUG_MINIMAL(x)
+
89 #define NUM_PIPES 6
+
90
+
91 /* Debug Options */
+
92 //#define SERIAL_DEBUG
+
93 //#define SERIAL_DEBUG_MINIMAL
+
94 //#define SERIAL_DEBUG_ROUTING
+
95 //#define SERIAL_DEBUG_FRAGMENTATION
+
96 //#define SERIAL_DEBUG_FRAGMENTATION_L2
+
97 /*************************************/
+
98
+
99#else // Different set of defaults for ATTiny - fragmentation is disabled and user payloads are set to 3 max
+
100 /********** USER CONFIG - ATTiny **************/
+
101 //#define ENABLE_SLEEP_MODE //AVR only
+
102 #define RF24NetworkMulticast
+
103 // NOTE: Only 24 bytes of a payload are used when DISABLE_FRAGMENTATION is defined
+
104 #define MAX_PAYLOAD_SIZE 72
+
105 #define MAIN_BUFFER_SIZE (MAX_PAYLOAD_SIZE + FRAME_HEADER_SIZE)
+
106 #define DISABLE_FRAGMENTATION
+
107 #define ENABLE_DYNAMIC_PAYLOADS
+
108 //#define DISABLE_USER_PAYLOADS
+
109#endif
+
110/*************************************/
+
111
+
112#endif // RF24_NETWORK_CONFIG_H
+
113
+
114#ifdef __cplusplus
+
115
+
116#if (defined(__linux) || defined(linux)) && !defined(__ARDUINO_X86__) && !defined(USE_RF24_LIB_SRC)
+
117 #include <RF24/RF24_config.h>
+
118
+
119// ATXMega
+
120#elif defined(XMEGA)
+
121 #include "../../rf24lib/rf24lib/RF24_config.h"
+
122#else
+
123 #include <RF24_config.h>
+
124#endif
+
125
+
126#if !defined(ARDUINO_ARCH_AVR)
+
127 // sprintf is used by RF24NetworkHeader::toString
+
128 #ifndef sprintf_P
+
129 #define sprintf_P sprintf
+
130 #endif
131#endif
132
-
133#if defined(SERIAL_DEBUG_FRAGMENTATION)
-
134 #define IF_SERIAL_DEBUG_FRAGMENTATION(x) ({ x; })
+
133#if defined(SERIAL_DEBUG_MINIMAL)
+
134 #define IF_SERIAL_DEBUG_MINIMAL(x) ({ x; })
135#else
-
136 #define IF_SERIAL_DEBUG_FRAGMENTATION(x)
+
136 #define IF_SERIAL_DEBUG_MINIMAL(x)
137#endif
138
-
139#if defined(SERIAL_DEBUG_FRAGMENTATION_L2)
-
140 #define IF_SERIAL_DEBUG_FRAGMENTATION_L2(x) ({ x; })
+
139#if defined(SERIAL_DEBUG_FRAGMENTATION)
+
140 #define IF_SERIAL_DEBUG_FRAGMENTATION(x) ({ x; })
141#else
-
142 #define IF_SERIAL_DEBUG_FRAGMENTATION_L2(x)
+
142 #define IF_SERIAL_DEBUG_FRAGMENTATION(x)
143#endif
144
-
145#if defined(SERIAL_DEBUG_ROUTING)
-
146 #define IF_SERIAL_DEBUG_ROUTING(x) ({ x; })
+
145#if defined(SERIAL_DEBUG_FRAGMENTATION_L2)
+
146 #define IF_SERIAL_DEBUG_FRAGMENTATION_L2(x) ({ x; })
147#else
-
148 #define IF_SERIAL_DEBUG_ROUTING(x)
+
148 #define IF_SERIAL_DEBUG_FRAGMENTATION_L2(x)
149#endif
150
-
151#endif // RF24_CONFIG_H
+
151#if defined(SERIAL_DEBUG_ROUTING)
+
152 #define IF_SERIAL_DEBUG_ROUTING(x) ({ x; })
+
153#else
+
154 #define IF_SERIAL_DEBUG_ROUTING(x)
+
155#endif
+
156
+
157#endif // RF24_CONFIG_H
diff --git a/addressing_8md.html b/addressing_8md.html index 0eaf18e5..9b994038 100644 --- a/addressing_8md.html +++ b/addressing_8md.html @@ -3,12 +3,15 @@ - + -Newly Optimized RF24Network Layer: docs/addressing.md File Reference +Optimized RF24Network Layer: docs/addressing.md File Reference + + + @@ -23,16 +26,16 @@ -
Newly Optimized RF24Network Layer v2.0.0 +
Optimized RF24Network Layer v2.0.0
-
2020 - Optimized RF24 Network Layer for NRF24L01 radios
+
2024 - Optimized RF24 Network Layer for NRF24L01 & NRF52x radios
- + @@ -78,7 +81,7 @@ diff --git a/advanced__config_8md.html b/advanced__config_8md.html index 3d7e0cff..ddcda381 100644 --- a/advanced__config_8md.html +++ b/advanced__config_8md.html @@ -3,12 +3,15 @@ - + -Newly Optimized RF24Network Layer: docs/advanced_config.md File Reference +Optimized RF24Network Layer: docs/advanced_config.md File Reference + + + @@ -23,16 +26,16 @@ -
Newly Optimized RF24Network Layer v2.0.0 +
Optimized RF24Network Layer v2.0.0
-
2020 - Optimized RF24 Network Layer for NRF24L01 radios
+
2024 - Optimized RF24 Network Layer for NRF24L01 & NRF52x radios
- + @@ -78,7 +81,7 @@ diff --git a/annotated.html b/annotated.html index 0a13687f..3758b3e9 100644 --- a/annotated.html +++ b/annotated.html @@ -3,12 +3,15 @@ - + -Newly Optimized RF24Network Layer: Class List +Optimized RF24Network Layer: Class List + + + @@ -23,16 +26,16 @@ -
Newly Optimized RF24Network Layer v2.0.0 +
Optimized RF24Network Layer v2.0.0
-
2020 - Optimized RF24 Network Layer for NRF24L01 radios
+
2024 - Optimized RF24 Network Layer for NRF24L01 & NRF52x radios
- + @@ -85,7 +88,7 @@ diff --git a/bdwn.png b/bdwn.png deleted file mode 100644 index 940a0b95..00000000 Binary files a/bdwn.png and /dev/null differ diff --git a/classESBNetwork-members.html b/classESBNetwork-members.html index b3f1c59f..9a5883fe 100644 --- a/classESBNetwork-members.html +++ b/classESBNetwork-members.html @@ -3,12 +3,15 @@ - + -Newly Optimized RF24Network Layer: Member List +Optimized RF24Network Layer: Member List + + + @@ -23,16 +26,16 @@ -
Newly Optimized RF24Network Layer v2.0.0 +
Optimized RF24Network Layer v2.0.0
-
2020 - Optimized RF24 Network Layer for NRF24L01 radios
+
2024 - Optimized RF24 Network Layer for NRF24L01 & NRF52x radios
- + @@ -109,7 +112,7 @@ diff --git a/classESBNetwork.html b/classESBNetwork.html index e13fbcc8..4b9a318d 100644 --- a/classESBNetwork.html +++ b/classESBNetwork.html @@ -3,12 +3,15 @@ - + -Newly Optimized RF24Network Layer: ESBNetwork< radio_t > Class Template Reference +Optimized RF24Network Layer: ESBNetwork< radio_t > Class Template Reference + + + @@ -23,16 +26,16 @@ -
Newly Optimized RF24Network Layer v2.0.0 +
Optimized RF24Network Layer v2.0.0
-
2020 - Optimized RF24 Network Layer for NRF24L01 radios
+
2024 - Optimized RF24 Network Layer for NRF24L01 & NRF52x radios
- + @@ -73,7 +76,6 @@
ESBNetwork< radio_t > Class Template Reference
@@ -86,78 +88,78 @@
Primary Interface

These are the main methods you need to operate the network

ESBNetwork (radio_t &_radio) + ESBNetwork (radio_t &_radio)   -void begin (uint16_t _node_address) +void begin (uint16_t _node_address)   -uint8_t update (void) +uint8_t update (void)   -bool available (void) +bool available (void)   -uint16_t peek (RF24NetworkHeader &header) +uint16_t peek (RF24NetworkHeader &header)   -void peek (RF24NetworkHeader &header, void *message, uint16_t maxlen=MAX_PAYLOAD_SIZE) +void peek (RF24NetworkHeader &header, void *message, uint16_t maxlen=MAX_PAYLOAD_SIZE)   -uint16_t read (RF24NetworkHeader &header, void *message, uint16_t maxlen=MAX_PAYLOAD_SIZE) +uint16_t read (RF24NetworkHeader &header, void *message, uint16_t maxlen=MAX_PAYLOAD_SIZE)   -bool write (RF24NetworkHeader &header, const void *message, uint16_t len) +bool write (RF24NetworkHeader &header, const void *message, uint16_t len)  
Advanced Operation

For advanced operation of the network

-void failures (uint32_t *_fails, uint32_t *_ok) +void failures (uint32_t *_fails, uint32_t *_ok)   -bool multicast (RF24NetworkHeader &header, const void *message, uint16_t len, uint8_t level=7) +bool multicast (RF24NetworkHeader &header, const void *message, uint16_t len, uint8_t level=7)   -bool write (RF24NetworkHeader &header, const void *message, uint16_t len, uint16_t writeDirect) +bool write (RF24NetworkHeader &header, const void *message, uint16_t len, uint16_t writeDirect)   -bool sleepNode (unsigned int cycles, int interruptPin, uint8_t INTERRUPT_MODE=0) +bool sleepNode (unsigned int cycles, int interruptPin, uint8_t INTERRUPT_MODE=0)   -uint16_t parent () const +uint16_t parent () const   -uint16_t addressOfPipe (uint16_t node, uint8_t pipeNo) +uint16_t addressOfPipe (uint16_t node, uint8_t pipeNo)   -bool is_valid_address (uint16_t node) +bool is_valid_address (uint16_t node)  
Deprecated

Maintained for backwards compatibility

-void begin (uint8_t _channel, uint16_t _node_address) +void begin (uint8_t _channel, uint16_t _node_address)   - + - + - + - + - +

Advanced Configuration

For advanced configuration of the network

bool multicastRelay
bool multicastRelay
 
uint32_t txTimeout
uint32_t txTimeout
 Network timeout value.
 
uint16_t routeTimeout
uint16_t routeTimeout
 Timeout for routed payloads.
 
void multicastLevel (uint8_t level)
void multicastLevel (uint8_t level)
 
void setup_watchdog (uint8_t prescalar)
void setup_watchdog (uint8_t prescalar)
 
- + - + - + - + - + - + - +

External Applications/Systems

Interface for External Applications and Systems ( RF24Mesh, RF24Ethernet )

uint8_t frame_buffer [MAX_FRAME_SIZE]
uint8_t frame_buffer [MAX_FRAME_SIZE]
 The raw system frame buffer.
 
std::queue< RF24NetworkFrameexternal_queue
std::queue< RF24NetworkFrameexternal_queue
 
RF24NetworkFramefrag_ptr
RF24NetworkFramefrag_ptr
 
bool returnSysMsgs
bool returnSysMsgs
 
uint8_t networkFlags
uint8_t networkFlags
 
uint8_t _multicast_level
uint8_t _multicast_level
 
uint16_t node_address
uint16_t node_address
 

Detailed Description

@@ -184,8 +186,7 @@

ESBNetwork< radio_t >::ESBNetwork ( - radio_t &  - _radio) + radio_t & _radio) @@ -196,7 +197,7 @@

nrf_to_nrf radio1;
RF52Network network(radio1); // for nRF52xxx family
-
Definition: RF24Network.h:384
+
Definition RF24Network.h:384
See also
v2.0 supports nrf_to_nrf Arduino library for nrf52 chips' internal radio.
Parameters
@@ -222,8 +223,7 @@

void ESBNetwork< radio_t >::begin

- - +
(uint16_t _node_address)uint16_t _node_address)
@@ -233,13 +233,13 @@

-

Bring up the network using the current radio frequency/channel. Calling begin brings up the network, and configures the address, which designates the location of the node within RF24Network topology.

-
Note
Node addresses are specified in Octal format, see RF24Network Addressing for more information. The address 04444 is reserved for RF24Mesh usage (when a mesh node is connecting to the network).
+

Bring up the network using the current radio frequency/channel. Calling begin brings up the network, and configures the address, which designates the location of the node within RF24Network topology.

+
Note
Node addresses are specified in Octal format, see RF24Network Addressing for more information. The address 04444 is reserved for RF24Mesh usage (when a mesh node is connecting to the network).
Warning
Be sure to first call RF24::begin() to initialize the radio properly.

Example 1: Begin on current radio channel with address 0 (master node)

network.begin(00);

Example 2: Begin with address 01 (child of master)

network.begin(01);

Example 3: Begin with address 011 (child of 01, grandchild of master)

network.begin(011);
-
See also
begin(uint8_t _channel, uint16_t _node_address)
+
See also
begin(uint8_t _channel, uint16_t _node_address)
Parameters
@@ -260,8 +260,7 @@

uint8_t ESBNetwork< radio_t >::update

- - +
_node_addressThe logical address of this node.
(void )void )
@@ -283,8 +282,7 @@

bool ESBNetwork< radio_t >::available ( - void  - ) + void ) @@ -305,8 +303,7 @@

uint16_t ESBNetwork< radio_t >::peek ( - RF24NetworkHeader &  - header) + RF24NetworkHeader & header) @@ -334,25 +331,17 @@

void ESBNetwork< radio_t >::peek ( - RF24NetworkHeader &  - header, + RF24NetworkHeader & header, - void *  - message, + void * message, - uint16_t  - maxlen = MAX_PAYLOAD_SIZE  - - - - ) - + uint16_t maxlen = MAX_PAYLOAD_SIZE )
@@ -380,25 +369,17 @@

uint16_t ESBNetwork< radio_t >::read ( - RF24NetworkHeader &  - header, + RF24NetworkHeader & header, - void *  - message, + void * message, - uint16_t  - maxlen = MAX_PAYLOAD_SIZE  - - - - ) - + uint16_t maxlen = MAX_PAYLOAD_SIZE )

@@ -412,14 +393,14 @@

Serial.println(time);

}
}
-
Definition: RF24Network.h:229
-
unsigned char type
Definition: RF24Network.h:246
+
Definition RF24Network.h:229
+
unsigned char type
Definition RF24Network.h:246

Parameters
- +
[out]headerThe RF24NetworkHeader (envelope) of this message
[out]messagePointer to memory where the message should be placed
maxlenThe largest message size which can be held in message . If this parameter is left unspecified, the entire length of the message is fetched. Hint: Use peek(RF24NetworkHeader &) to get the length of next available message in the queue.
maxlenThe largest message size which can be held in message . If this parameter is left unspecified, the entire length of the message is fetched. Hint: Use peek(RF24NetworkHeader &) to get the length of next available message in the queue.
@@ -438,25 +419,17 @@

bool ESBNetwork< radio_t >::write ( - RF24NetworkHeader &  - header, + RF24NetworkHeader & header, - const void *  - message, + const void * message, - uint16_t  - len  - - - - ) - + uint16_t len )
@@ -489,8 +462,7 @@

void ESBNetwork< radio_t >::multicastLevel ( - uint8_t  - level) + uint8_t level) @@ -504,8 +476,8 @@

This optional function is used to override the default level set when a node's logical address changes, and it can be used to create custom multicast groups that all share a single address.

See also
@@ -529,15 +501,14 @@

void ESBNetwork< radio_t >::setup_watchdog ( - uint8_t  - prescalar) + uint8_t prescalar)

Set up the watchdog timer for sleep mode using the number 0 through 10 to represent the following time periods:
- wdt_16ms = 0, wdt_32ms, wdt_64ms, wdt_128ms, wdt_250ms, wdt_500ms, wdt_1s, wdt_2s, wdt_4s, wdt_8s

setup_watchdog(7); // Sets the WDT to trigger every second
-
void setup_watchdog(uint8_t prescalar)
+ wdt_16ms = 0, wdt_32ms, wdt_64ms, wdt_128ms, wdt_250ms, wdt_500ms, wdt_1s, wdt_2s, wdt_4s, wdt_8s

setup_watchdog(7); // Sets the WDT to trigger every second
+
void setup_watchdog(uint8_t prescalar)
Parameters
@@ -558,19 +529,12 @@

void ESBNetwork< radio_t >::failures

- - + - - - - - - - +
prescalarThe WDT prescaler to define how often the node will wake up. When defining sleep mode cycles, this time period is 1 cycle.
(uint32_t * _fails, uint32_t * _fails,
uint32_t * _ok 
)uint32_t * _ok )
@@ -591,38 +555,29 @@

bool ESBNetwork< radio_t >::multicast ( - RF24NetworkHeader &  - header, + RF24NetworkHeader & header, - const void *  - message, + const void * message, - uint16_t  - len, + uint16_t len, - uint8_t  - level = 7  - - - - ) - + uint8_t level = 7 )

Send a multicast message to multiple nodes at once Allows messages to be rapidly broadcast through the network

Multicasting is arranged in levels, with all nodes on the same level listening to the same address Levels are assigned by network level ie: nodes 01-05: Level 1, nodes 011-055: Level 2

See also
Parameters
@@ -630,7 +585,7 @@

headerreference to the RF24NetworkHeader object used for this message messagePointer to memory where the message is located lenThe size of the message - levelMulticast level to broadcast to. If this parameter is unspecified, then the node's current multicastLevel() is used. + levelMulticast level to broadcast to. If this parameter is unspecified, then the node's current multicastLevel() is used.

@@ -649,31 +604,22 @@

bool ESBNetwork< radio_t >::write ( - RF24NetworkHeader &  - header, + RF24NetworkHeader & header, - const void *  - message, + const void * message, - uint16_t  - len, + uint16_t len, - uint16_t  - writeDirect  - - - - ) - + uint16_t writeDirect )

@@ -692,31 +638,23 @@

bool ESBNetwork< radio_t >::sleepNode ( - unsigned int  - cycles, + unsigned int cycles, - int  - interruptPin, + int interruptPin, - uint8_t  - INTERRUPT_MODE = 0  - - - - ) - + uint8_t INTERRUPT_MODE = 0 )

Sleep this node - For AVR devices only

Note
NEW - Nodes can now be slept while the radio is not actively transmitting. This must be manually enabled by uncommenting the #define ENABLE_SLEEP_MODE in RF24Network_config.h
-The watchdog timer should be configured in the sketch's setup() if using sleep mode. This function will sleep the node, with the radio still active in receive mode. See setup_watchdog().
+The watchdog timer should be configured in the sketch's setup() if using sleep mode. This function will sleep the node, with the radio still active in receive mode. See setup_watchdog().

The node can be awoken in two ways, both of which can be enabled simultaneously:

  1. An interrupt - usually triggered by the radio receiving a payload. Must use pin 2 (interrupt 0) or 3 (interrupt 1) on Uno, Nano, etc.
  2. The watchdog timer waking the MCU after a designated period of time, can also be used instead of delays to control transmission intervals.
  3. @@ -760,7 +698,10 @@

    - uint16_t ESBNetwork< radio_t >::parent + uint16_t ESBNetwork< radio_t >::parent + ( + ) + const
    @@ -780,19 +721,12 @@

    uint16_t ESBNetwork< radio_t >::addressOfPipe ( - uint16_t  - node, + uint16_t node, - uint8_t  - pipeNo  - - - - ) - + uint8_t pipeNo )

    @@ -811,13 +745,12 @@

    bool ESBNetwork< radio_t >::is_valid_address ( - uint16_t  - node) + uint16_t node)

    -

    Validate a network address as a proper logical address

    Note
    Addresses are specified in octal form, ie 011, 034. Review RF24Network addressing for more information.
    +

    Validate a network address as a proper logical address

    Note
    Addresses are specified in octal form, ie 011, 034. Review RF24Network addressing for more information.
    Parameters
    @@ -840,23 +773,16 @@

    void ESBNetwork< radio_t >::begin

    - - + - - - - - - - +
    nodeThe specified logical address of a network node.
    (uint8_t _channel, uint8_t _channel,
    uint16_t _node_address 
    )uint16_t _node_address )
    -

    Bring up the network on a specific radio frequency/channel.

    Deprecated:
    Use RF24::setChannel() to configure the radio channel. Use ESBNetwork::begin(uint16_t _node_address) to set the node address.
    +

    Bring up the network on a specific radio frequency/channel.

    Deprecated
    Use RF24::setChannel() to configure the radio channel. Use ESBNetwork::begin(uint16_t _node_address) to set the node address.

    Example 1: Begin on channel 90 with address 0 (master node)

    network.begin(90, 0);

    Example 2: Begin on channel 90 with address 01 (child of master)

    network.begin(90, 01);

    Example 3: Begin on channel 90 with address 011 (child of 01, grandchild of master)

    @@ -971,9 +897,9 @@

    memcpy(&myBuffer, &f.message_buffer, dataSize);
    network.external_queue.pop();
    }
    -
    Definition: RF24Network.h:312
    -
    uint8_t * message_buffer
    Definition: RF24Network.h:326
    -
    uint16_t message_size
    Definition: RF24Network.h:317
    +
    Definition RF24Network.h:312
    +
    uint8_t * message_buffer
    Definition RF24Network.h:326
    +
    uint16_t message_size
    Definition RF24Network.h:317
    @@ -991,13 +917,13 @@

    ARDUINO platforms only

    -

    The frag_ptr is only used with Arduino (not RPi/Linux) and is mainly used for external data systems like RF24Ethernet. When a payload of type EXTERNAL_DATA_TYPE is received, and returned from update(), the frag_ptr will always point to the starting memory location of the received frame. This is used by external data systems (RF24Ethernet) to immediately copy the received data to a buffer, without using the user-cache.

    +

    The frag_ptr is only used with Arduino (not RPi/Linux) and is mainly used for external data systems like RF24Ethernet. When a payload of type EXTERNAL_DATA_TYPE is received, and returned from update(), the frag_ptr will always point to the starting memory location of the received frame. This is used by external data systems (RF24Ethernet) to immediately copy the received data to a buffer, without using the user-cache.

    See also
    RF24NetworkFrame
    uint8_t return_type = network.update();
    if(return_type == EXTERNAL_DATA_TYPE) {
    memcpy(&myDataBuffer, network.frag_ptr->message_buffer, network.frag_ptr->message_size);
    }
    -
    #define EXTERNAL_DATA_TYPE
    Definition: RF24Network.h:103
    +
    #define EXTERNAL_DATA_TYPE
    Definition RF24Network.h:103

    Linux devices (defined as RF24_LINUX) currently cache all payload types, and do not utilize frag_ptr.

    @@ -1015,7 +941,7 @@

    -

    Variable to determine whether update() will return after the radio buffers have been emptied (DEFAULT), or whether to return immediately when (most) system types are received.

    +

    Variable to determine whether update() will return after the radio buffers have been emptied (DEFAULT), or whether to return immediately when (most) system types are received.

    As an example, this is used with RF24Mesh to catch and handle system messages without loading them into the user cache.

    The following reserved/system message types are handled automatically, and not returned.

    @@ -1083,7 +1009,7 @@

    -

    The current node's network level (used for multicast TX/RX-ing).

    See also
    Use multicastLevel() to adjust this when needed.
    +

    The current node's network level (used for multicast TX/RX-ing).

    See also
    Use multicastLevel() to adjust this when needed.
    @@ -1115,7 +1041,7 @@

    diff --git a/classes.html b/classes.html index 8a90404c..582bd202 100644 --- a/classes.html +++ b/classes.html @@ -3,12 +3,15 @@ - + -Newly Optimized RF24Network Layer: Class Index +Optimized RF24Network Layer: Class Index + + + @@ -23,16 +26,16 @@

    -
    Newly Optimized RF24Network Layer v2.0.0 +
    Optimized RF24Network Layer v2.0.0
    -
    2020 - Optimized RF24 Network Layer for NRF24L01 radios
    +
    2024 - Optimized RF24 Network Layer for NRF24L01 & NRF52x radios
    - + @@ -87,7 +90,7 @@ diff --git a/clipboard.js b/clipboard.js new file mode 100644 index 00000000..42c1fb0e --- /dev/null +++ b/clipboard.js @@ -0,0 +1,61 @@ +/** + +The code below is based on the Doxygen Awesome project, see +https://github.com/jothepro/doxygen-awesome-css + +MIT License + +Copyright (c) 2021 - 2022 jothepro + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +*/ + +let clipboard_title = "Copy to clipboard" +let clipboard_icon = `` +let clipboard_successIcon = `` +let clipboard_successDuration = 1000 + +$(function() { + if(navigator.clipboard) { + const fragments = document.getElementsByClassName("fragment") + for(const fragment of fragments) { + const clipboard_div = document.createElement("div") + clipboard_div.classList.add("clipboard") + clipboard_div.innerHTML = clipboard_icon + clipboard_div.title = clipboard_title + $(clipboard_div).click(function() { + const content = this.parentNode.cloneNode(true) + // filter out line number and folded fragments from file listings + content.querySelectorAll(".lineno, .ttc, .foldclosed").forEach((node) => { node.remove() }) + let text = content.textContent + // remove trailing newlines and trailing spaces from empty lines + text = text.replace(/^\s*\n/gm,'\n').replace(/\n*$/,'') + navigator.clipboard.writeText(text); + this.classList.add("success") + this.innerHTML = clipboard_successIcon + window.setTimeout(() => { // switch back to normal icon after timeout + this.classList.remove("success") + this.innerHTML = clipboard_icon + }, clipboard_successDuration); + }) + fragment.insertBefore(clipboard_div, fragment.firstChild) + } + } +}) diff --git a/cookie.js b/cookie.js new file mode 100644 index 00000000..53ad21d9 --- /dev/null +++ b/cookie.js @@ -0,0 +1,58 @@ +/*! + Cookie helper functions + Copyright (c) 2023 Dimitri van Heesch + Released under MIT license. +*/ +let Cookie = { + cookie_namespace: 'doxygen_', + + readSetting(cookie,defVal) { + if (window.chrome) { + const val = localStorage.getItem(this.cookie_namespace+cookie) || + sessionStorage.getItem(this.cookie_namespace+cookie); + if (val) return val; + } else { + let myCookie = this.cookie_namespace+cookie+"="; + if (document.cookie) { + const index = document.cookie.indexOf(myCookie); + if (index != -1) { + const valStart = index + myCookie.length; + let valEnd = document.cookie.indexOf(";", valStart); + if (valEnd == -1) { + valEnd = document.cookie.length; + } + return document.cookie.substring(valStart, valEnd); + } + } + } + return defVal; + }, + + writeSetting(cookie,val,days=10*365) { // default days='forever', 0=session cookie, -1=delete + if (window.chrome) { + if (days==0) { + sessionStorage.setItem(this.cookie_namespace+cookie,val); + } else { + localStorage.setItem(this.cookie_namespace+cookie,val); + } + } else { + let date = new Date(); + date.setTime(date.getTime()+(days*24*60*60*1000)); + const expiration = days!=0 ? "expires="+date.toGMTString()+";" : ""; + document.cookie = this.cookie_namespace + cookie + "=" + + val + "; SameSite=Lax;" + expiration + "path=/"; + } + }, + + eraseSetting(cookie) { + if (window.chrome) { + if (localStorage.getItem(this.cookie_namespace+cookie)) { + localStorage.removeItem(this.cookie_namespace+cookie); + } else if (sessionStorage.getItem(this.cookie_namespace+cookie)) { + sessionStorage.removeItem(this.cookie_namespace+cookie); + } + } else { + this.writeSetting(cookie,'',-1); + } + }, +} diff --git a/darkmode_toggle.js b/darkmode_toggle.js index e2331dc8..b9c7364d 100644 --- a/darkmode_toggle.js +++ b/darkmode_toggle.js @@ -28,6 +28,10 @@ SOFTWARE. */ class DarkModeToggle extends HTMLElement { + + static darkmode_cookie_name = ''+'prefers-dark'; + static lightmode_cookie_name = ''+'prefers-light'; + static icon = ''; static title = "Toggle Light/Dark Mode" @@ -57,29 +61,30 @@ class DarkModeToggle extends HTMLElement { const toggleButton = document.createElement('dark-mode-toggle') toggleButton.title = DarkModeToggle.title toggleButton.innerHTML = DarkModeToggle.icon + toggleButton.tabIndex = 0; function addButton() { - var titleArea = document.getElementById("titlearea"); - var searchBox = document.getElementById("MSearchBox"); - var mainMenu = document.getElementById("main-menu"); - var navRow1 = document.getElementById("navrow1"); - var mainMenuVisible = false; + const titleArea = document.getElementById("titlearea"); + const searchBox = document.getElementById("MSearchBox"); + const mainMenu = document.getElementById("main-menu"); + const navRow1 = document.getElementById("navrow1"); + let mainMenuVisible = false; if (mainMenu) { - var menuStyle = window.getComputedStyle(mainMenu); + const menuStyle = window.getComputedStyle(mainMenu); mainMenuVisible = menuStyle.display!=='none' } - var searchBoxPos1 = document.getElementById("searchBoxPos1"); + const searchBoxPos1 = document.getElementById("searchBoxPos1"); if (searchBox) { // (1) search box visible searchBox.parentNode.appendChild(toggleButton) } else if (navRow1) { // (2) no search box, static menu bar - var li = document.createElement('li'); + const li = document.createElement('li'); li.style = 'float: right;' li.appendChild(toggleButton); toggleButton.style = 'width: 24px; height: 25px; padding-top: 11px; float: right;'; - var row = document.querySelector('#navrow1 > ul:first-of-type'); + const row = document.querySelector('#navrow1 > ul:first-of-type'); row.appendChild(li) } else if (mainMenu && mainMenuVisible) { // (3) no search box + dynamic menu bar expanded - var li = document.createElement('li'); + const li = document.createElement('li'); li.style = 'float: right;' li.appendChild(toggleButton); toggleButton.style = 'width: 14px; height: 36px; padding-top: 10px; float: right;'; @@ -94,11 +99,16 @@ class DarkModeToggle extends HTMLElement { } } - $(document).ready(function(){ - addButton(); - }) - $(window).resize(function(){ - addButton(); + $(document).ready(() => addButton()); + $(window).resize(() => addButton()); + let inFocus = false; + $(document).focusin(() => inFocus = true); + $(document).focusout(() => inFocus = false); + $(document).keyup(function(e) { + if (e.keyCode==27 && !inFocus) { // escape key maps to keycode `27` + e.stopPropagation(); + DarkModeToggle.userPreference = !DarkModeToggle.userPreference + } }) DarkModeToggle.setDarkModeVisibility(DarkModeToggle.darkModeEnabled) }) @@ -108,32 +118,7 @@ class DarkModeToggle extends HTMLElement { constructor() { super(); this.onclick=this.toggleDarkMode - } - - static createCookie(name, value, days) { - if (days) { - var date = new Date(); - date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); - var expires = "; expires=" + date.toGMTString(); - } - else var expires = ""; - - document.cookie = name + "=" + value + expires + "; path=/"; - } - - static readCookie(name) { - var nameEQ = name + "="; - var ca = document.cookie.split(';'); - for (var i = 0; i < ca.length; i++) { - var c = ca[i]; - while (c.charAt(0) == ' ') c = c.substring(1, c.length); - if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length); - } - return null; - } - - static eraseCookie(name) { - DarkModeToggle.createCookie(name, "", -1); + this.onkeypress=function(e){if (e.keyCode==13) { this.toggleDarkMode(); }}; } /** @@ -144,54 +129,29 @@ class DarkModeToggle extends HTMLElement { } static get prefersDarkModeInLightMode() { - if (window.chrome) { // Chrome supports localStorage in combination with file:// but not cookies - return localStorage.getItem(DarkModeToggle.prefersDarkModeInLightModeKey) - } else { // Other browsers support cookies in combination with file:// but not localStorage - return DarkModeToggle.readCookie('doxygen_prefers_dark')=='1' - } + return Cookie.readSetting(DarkModeToggle.darkmode_cookie_name,'0')=='1'; } static set prefersDarkModeInLightMode(preference) { - if (window.chrome) { - if (preference) { - localStorage.setItem(DarkModeToggle.prefersDarkModeInLightModeKey, true) - } else { - localStorage.removeItem(DarkModeToggle.prefersDarkModeInLightModeKey) - } + if (preference) { + Cookie.writeSetting(DarkModeToggle.darkmode_cookie_name,'1'); } else { - if (preference) { - DarkModeToggle.createCookie('doxygen_prefers_dark','1',365) - } else { - DarkModeToggle.eraseCookie('doxygen_prefers_dark') - } + Cookie.eraseSetting(DarkModeToggle.darkmode_cookie_name); } } static get prefersLightModeInDarkMode() { - if (window.chrome) { // Chrome supports localStorage in combination with file:// but not cookies - return localStorage.getItem(DarkModeToggle.prefersLightModeInDarkModeKey) - } else { // Other browsers support cookies in combination with file:// but not localStorage - return DarkModeToggle.readCookie('doxygen_prefers_light')=='1' - } + return Cookie.readSetting(DarkModeToggle.lightmode_cookie_name,'0')=='1' } static set prefersLightModeInDarkMode(preference) { - if (window.chrome) { - if (preference) { - localStorage.setItem(DarkModeToggle.prefersLightModeInDarkModeKey, true) - } else { - localStorage.removeItem(DarkModeToggle.prefersLightModeInDarkModeKey) - } + if (preference) { + Cookie.writeSetting(DarkModeToggle.lightmode_cookie_name,'1'); } else { - if (preference) { - DarkModeToggle.createCookie('doxygen_prefers_light','1',365) - } else { - DarkModeToggle.eraseCookie('doxygen_prefers_light') - } + Cookie.eraseSetting(DarkModeToggle.lightmode_cookie_name); } } - /** * @returns `true` for dark-mode, `false` for light-mode user preference */ @@ -219,7 +179,7 @@ class DarkModeToggle extends HTMLElement { } static setDarkModeVisibility(enable) { - var darkModeStyle, lightModeStyle; + let darkModeStyle, lightModeStyle; if(enable) { darkModeStyle = 'inline-block'; lightModeStyle = 'none' @@ -227,12 +187,8 @@ class DarkModeToggle extends HTMLElement { darkModeStyle = 'none'; lightModeStyle = 'inline-block' } - document.querySelectorAll('.dark-mode-visible').forEach(function(el) { - el.style.display = darkModeStyle; - }); - document.querySelectorAll('.light-mode-visible').forEach(function(el) { - el.style.display = lightModeStyle; - }); + document.querySelectorAll('.dark-mode-visible' ).forEach(el => el.style.display = darkModeStyle); + document.querySelectorAll('.light-mode-visible').forEach(el => el.style.display = lightModeStyle); } static enableDarkMode(enable) { if(enable) { diff --git a/deprecated.html b/deprecated.html index 5ba3dc7c..8f4ff5ac 100644 --- a/deprecated.html +++ b/deprecated.html @@ -3,12 +3,15 @@ - + -Newly Optimized RF24Network Layer: Deprecated List +Optimized RF24Network Layer: Deprecated List + + + @@ -23,16 +26,16 @@ -
    Newly Optimized RF24Network Layer v2.0.0 +
    Optimized RF24Network Layer v2.0.0
    -
    2020 - Optimized RF24 Network Layer for NRF24L01 radios
    +
    2024 - Optimized RF24 Network Layer for NRF24L01 & NRF52x radios
    - + @@ -72,7 +75,7 @@
    -
    Deprecated List
    +
    Deprecated List
    @@ -83,7 +86,7 @@
    diff --git a/dir_49e56c817e5e54854c35e136979f97ca.html b/dir_49e56c817e5e54854c35e136979f97ca.html index b160d131..9e17db15 100644 --- a/dir_49e56c817e5e54854c35e136979f97ca.html +++ b/dir_49e56c817e5e54854c35e136979f97ca.html @@ -3,12 +3,15 @@ - + -Newly Optimized RF24Network Layer: docs Directory Reference +Optimized RF24Network Layer: docs Directory Reference + + + @@ -23,16 +26,16 @@ -
    Newly Optimized RF24Network Layer v2.0.0 +
    Optimized RF24Network Layer v2.0.0
    -
    2020 - Optimized RF24 Network Layer for NRF24L01 radios
    +
    2024 - Optimized RF24 Network Layer for NRF24L01 & NRF52x radios
    - + @@ -82,7 +85,7 @@
    diff --git a/doc.png b/doc.png deleted file mode 100644 index 17edabff..00000000 Binary files a/doc.png and /dev/null differ diff --git a/doc.svg b/doc.svg new file mode 100644 index 00000000..0b928a53 --- /dev/null +++ b/doc.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/docd.png b/docd.png deleted file mode 100644 index d7c94fda..00000000 Binary files a/docd.png and /dev/null differ diff --git a/docd.svg b/docd.svg new file mode 100644 index 00000000..ac18b275 --- /dev/null +++ b/docd.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/doxygen-custom.css b/doxygen-custom.css index 7d56191d..2b5ef5a1 100644 --- a/doxygen-custom.css +++ b/doxygen-custom.css @@ -1,3 +1,107 @@ table.markdownTable th { color: unset; } + +/* overrides from default CSSS for some admonitions */ +dl.note, dl.remark, +dl.warning, dl.attention { + color: unset; +} +dl.remark { + background: var(--remark-color-bg); + border-left: 8px solid var(--remark-color-hl); +} +dl.remark dt { + color: var(--remark-color-hl); +} + +/* special rules to accent `/see` or `/sa` command output */ +dl.see { + background: var(--seealso-color-bg); + border-left: 8px solid var(--seealso-color-hl); +} +dl.see dt { + color: var(--seealso-color-hl); +} +dl.see { + padding: 10px; + margin: 10px 0px; + overflow: hidden; + margin-left: 0; + border-radius: 4px; +} + +/* admonition icons */ +dl.note dt::before { + background-color: var(--note-color-hl); + mask-image: var(--note-icon); +} +dl.see dt::before { + background-color: var(--seealso-color-hl); + mask-image: var(--seealso-icon); +} +dl.remark dt::before { + background-color: var(--remark-color-hl); + mask-image: var(--remark-icon); +} +dl.warning dt::before { + background-color: var(--warning-color-hl); + mask-image: var(--warning-icon); +} +dl.deprecated dt::before { + background-color: var(--deprecated-color-hl); + mask-image: var(--deprecated-icon); +} +dl.note dt::before, +dl.see dt::before, +dl.warning dt::before, +dl.remark dt::before, +dl.deprecated dt::before { + vertical-align: middle; + background-repeat: no-repeat; + content: ""; + display: inline-block; + height: 2em; + width: 2em; + margin-right: 0.25rem; +} +dl.note dt, +dl.see dt, +dl.warning dt, +dl.remark dt, +dl.deprecated dt { + margin-top: -0.35em; + margin-bottom: 0.5em; +} + +/* icon SVG data */ +*:root { + --note-icon: url('data:image/svg+xml;utf8,'); + --seealso-icon: url('data:image/svg+xml;utf8,'); + --warning-icon: url('data:image/svg+xml;utf8,'); + --remark-icon: url('data:image/svg+xml;utf8,'); + --deprecated-icon: url('data:image/svg+xml;utf8,'); +} + +/* color overrides */ +html { + /* light theme CSS variables */ + --note-color-bg: hsla(47.6, 77.3%, 91.4%, 65%); + --warning-color-bg: hsla(6.8, 75.9%, 88.6%, 65%); + --deprecated-color-bg: hsla(205.7, 22.6%, 93.9%, 65%); + --seealso-color-bg: hsla(215, 76%, 89%, 65%); + --seealso-color-hl: hsl(215, 98%, 48%); + --remark-color-bg: hsla(133, 75%, 89%, 65%); + --remark-color-hl: hsl(133, 98.9%, 35.3%); +} + +html.dark-mode { + /* dark theme CSS variables */ + --note-color-bg: hsla(45.8, 87.3%, 12.4%, 65%); + --warning-color-bg: hsla(5.2, 33.3%, 13.5%, 65%); + --deprecated-color-bg: hsla(221.5, 12.4%, 20.6%, 65%); + --seealso-color-bg: hsla(215, 33%, 14%, 0.65); + --seealso-color-hl: hsl(215, 98%, 48%); + --remark-color-bg: hsla(133, 32%, 14%, 65%); + --remark-color-hl: hsl(133, 98%, 48%); +} \ No newline at end of file diff --git a/doxygen.css b/doxygen.css index 1402220b..9cf4f26e 100644 --- a/doxygen.css +++ b/doxygen.css @@ -1,4 +1,4 @@ -/* The standard CSS for doxygen 1.9.6*/ +/* The standard CSS for doxygen 1.10.0*/ html { /* page base colors */ @@ -39,7 +39,9 @@ html { --icon-background-color: #728DC1; --icon-foreground-color: white; ---icon-doc-image: url('doc.png'); +--icon-doc-image: url('doc.svg'); +--icon-folder-open-image: url('folderopen.svg'); +--icon-folder-closed-image: url('folderclosed.svg'); /* brief member declaration list */ --memdecl-background-color: #F9FAFC; @@ -100,6 +102,7 @@ html { --toc-background-color: #F4F6FA; --toc-border-color: #D8DFEE; --toc-header-color: #4665A2; +--toc-down-arrow-image: url("data:image/svg+xml;utf8,&%238595;"); /** search field */ --search-background-color: white; @@ -125,6 +128,7 @@ html { --code-preprocessor-color: #806020; --code-string-literal-color: #002080; --code-char-literal-color: #008080; +--code-xml-cdata-color: black; --code-vhdl-digit-color: #FF00FF; --code-vhdl-char-color: #000000; --code-vhdl-keyword-color: #700070; @@ -141,6 +145,7 @@ html { --fragment-lineno-link-bg-color: #D8D8D8; --fragment-lineno-link-hover-fg-color: #4665A2; --fragment-lineno-link-hover-bg-color: #C8C8C8; +--fragment-copy-ok-color: #2EC82E; --tooltip-foreground-color: black; --tooltip-background-color: white; --tooltip-border-color: gray; @@ -148,10 +153,15 @@ html { --tooltip-declaration-color: #006318; --tooltip-link-color: #4665A2; --tooltip-shadow: 1px 1px 7px gray; +--fold-line-color: #808080; +--fold-minus-image: url('minus.svg'); +--fold-plus-image: url('plus.svg'); +--fold-minus-image-relpath: url('../../minus.svg'); +--fold-plus-image-relpath: url('../../plus.svg'); /** font-family */ --font-family-normal: Roboto,sans-serif; ---font-family-monospace: monospace,fixed; +--font-family-monospace: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; --font-family-nav: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; --font-family-title: Tahoma,Arial,sans-serif; --font-family-toc: Verdana,'DejaVu Sans',Geneva,sans-serif; @@ -159,6 +169,28 @@ html { --font-family-icon: Arial,Helvetica; --font-family-tooltip: Roboto,sans-serif; +/** special sections */ +--warning-color-bg: #f8d1cc; +--warning-color-hl: #b61825; +--warning-color-text: #75070f; +--note-color-bg: #faf3d8; +--note-color-hl: #f3a600; +--note-color-text: #5f4204; +--todo-color-bg: #e4f3ff; +--todo-color-hl: #1879C4; +--todo-color-text: #274a5c; +--test-color-bg: #e8e8ff; +--test-color-hl: #3939C4; +--test-color-text: #1a1a5c; +--deprecated-color-bg: #ecf0f3; +--deprecated-color-hl: #5b6269; +--deprecated-color-text: #43454a; +--bug-color-bg: #e4dafd; +--bug-color-hl: #5b2bdd; +--bug-color-text: #2a0d72; +--invariant-color-bg: #d8f1e3; +--invariant-color-hl: #44b86f; +--invariant-color-text: #265532; } html.dark-mode { @@ -200,7 +232,9 @@ html.dark-mode { --icon-background-color: #334975; --icon-foreground-color: #C4CFE5; ---icon-doc-image: url('docd.png'); +--icon-doc-image: url('docd.svg'); +--icon-folder-open-image: url('folderopend.svg'); +--icon-folder-closed-image: url('folderclosedd.svg'); /* brief member declaration list */ --memdecl-background-color: #0B101A; @@ -261,6 +295,7 @@ html.dark-mode { --toc-background-color: #151E30; --toc-border-color: #202E4A; --toc-header-color: #A3B4D7; +--toc-down-arrow-image: url("data:image/svg+xml;utf8,&%238595;"); /** search field */ --search-background-color: black; @@ -286,14 +321,15 @@ html.dark-mode { --code-preprocessor-color: #65CABE; --code-string-literal-color: #7EC699; --code-char-literal-color: #00E0F0; +--code-xml-cdata-color: #C9D1D9; --code-vhdl-digit-color: #FF00FF; ---code-vhdl-char-color: #000000; ---code-vhdl-keyword-color: #700070; +--code-vhdl-char-color: #C0C0C0; +--code-vhdl-keyword-color: #CF53C9; --code-vhdl-logic-color: #FF0000; --code-link-color: #79C0FF; --code-external-link-color: #79C0FF; --fragment-foreground-color: #C9D1D9; ---fragment-background-color: black; +--fragment-background-color: #090D16; --fragment-border-color: #30363D; --fragment-lineno-border-color: #30363D; --fragment-lineno-background-color: black; @@ -302,6 +338,7 @@ html.dark-mode { --fragment-lineno-link-bg-color: #303030; --fragment-lineno-link-hover-fg-color: #8E96A1; --fragment-lineno-link-hover-bg-color: #505050; +--fragment-copy-ok-color: #0EA80E; --tooltip-foreground-color: #C9D1D9; --tooltip-background-color: #202020; --tooltip-border-color: #C9D1D9; @@ -309,10 +346,15 @@ html.dark-mode { --tooltip-declaration-color: #20C348; --tooltip-link-color: #79C0FF; --tooltip-shadow: none; +--fold-line-color: #808080; +--fold-minus-image: url('minusd.svg'); +--fold-plus-image: url('plusd.svg'); +--fold-minus-image-relpath: url('../../minusd.svg'); +--fold-plus-image-relpath: url('../../plusd.svg'); /** font-family */ --font-family-normal: Roboto,sans-serif; ---font-family-monospace: monospace,fixed; +--font-family-monospace: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; --font-family-nav: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; --font-family-title: Tahoma,Arial,sans-serif; --font-family-toc: Verdana,'DejaVu Sans',Geneva,sans-serif; @@ -320,6 +362,28 @@ html.dark-mode { --font-family-icon: Arial,Helvetica; --font-family-tooltip: Roboto,sans-serif; +/** special sections */ +--warning-color-bg: #2e1917; +--warning-color-hl: #ad2617; +--warning-color-text: #f5b1aa; +--note-color-bg: #3b2e04; +--note-color-hl: #f1b602; +--note-color-text: #ceb670; +--todo-color-bg: #163750; +--todo-color-hl: #1982D2; +--todo-color-text: #dcf0fa; +--test-color-bg: #121258; +--test-color-hl: #4242cf; +--test-color-text: #c0c0da; +--deprecated-color-bg: #2e323b; +--deprecated-color-hl: #738396; +--deprecated-color-text: #abb0bd; +--bug-color-bg: #2a2536; +--bug-color-hl: #7661b3; +--bug-color-text: #ae9ed6; +--invariant-color-bg: #303a35; +--invariant-color-hl: #76ce96; +--invariant-color-text: #cceed5; } body { @@ -337,8 +401,6 @@ body, table, div, p, dl { /* @group Heading Levels */ .title { - font-weight: 400; - font-size: 14px; font-family: var(--font-family-normal); line-height: 28px; font-size: 150%; @@ -471,6 +533,12 @@ div.qindex{ color: var(--index-separator-color); } +#main-menu a:focus { + outline: auto; + z-index: 10; + position: relative; +} + dt.alphachar{ font-size: 180%; font-weight: bold; @@ -530,7 +598,13 @@ a { } a:hover { - text-decoration: underline; + text-decoration: none; + background: linear-gradient(to bottom, transparent 0,transparent calc(100% - 1px), currentColor 100%); +} + +a:hover > span.arrow { + text-decoration: none; + background : var(--nav-background-color); } a.el { @@ -606,37 +680,70 @@ ul.multicol { .fragment { text-align: left; direction: ltr; - overflow-x: auto; /*Fixed: fragment lines overlap floating elements*/ + overflow-x: auto; overflow-y: hidden; + position: relative; + min-height: 12px; + margin: 10px 0px; + padding: 10px 10px; + border: 1px solid var(--fragment-border-color); + border-radius: 4px; + background-color: var(--fragment-background-color); + color: var(--fragment-foreground-color); } pre.fragment { - border: 1px solid var(--fragment-border-color); - background-color: var(--fragment-background-color); - color: var(--fragment-foreground-color); - padding: 4px 6px; - margin: 4px 8px 4px 2px; + word-wrap: break-word; + font-size: 10pt; + line-height: 125%; + font-family: var(--font-family-monospace); +} + +.clipboard { + width: 24px; + height: 24px; + right: 5px; + top: 5px; + opacity: 0; + position: absolute; + display: inline; overflow: auto; - word-wrap: break-word; - font-size: 9pt; - line-height: 125%; - font-family: var(--font-family-monospace); - font-size: 105%; + fill: var(--fragment-foreground-color); + justify-content: center; + align-items: center; + cursor: pointer; +} + +.clipboard.success { + border: 1px solid var(--fragment-foreground-color); + border-radius: 4px; +} + +.fragment:hover .clipboard, .clipboard.success { + opacity: .28; +} + +.clipboard:hover, .clipboard.success { + opacity: 1 !important; +} + +.clipboard:active:not([class~=success]) svg { + transform: scale(.91); +} + +.clipboard.success svg { + fill: var(--fragment-copy-ok-color); } -div.fragment { - padding: 0 0 1px 0; /*Fixed: last line underline overlap border*/ - margin: 4px 8px 4px 2px; - color: var(--fragment-foreground-color); - background-color: var(--fragment-background-color); - border: 1px solid var(--fragment-border-color); +.clipboard.success { + border-color: var(--fragment-copy-ok-color); } div.line { font-family: var(--font-family-monospace); font-size: 13px; min-height: 13px; - line-height: 1.0; + line-height: 1.2; text-wrap: unrestricted; white-space: -moz-pre-wrap; /* Moz */ white-space: -pre-wrap; /* Opera 4-6 */ @@ -669,6 +776,18 @@ div.line.glow { box-shadow: 0 0 10px var(--glow-color); } +span.fold { + margin-left: 5px; + margin-right: 1px; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; + display: inline-block; + width: 12px; + height: 12px; + background-repeat:no-repeat; + background-position:center; +} span.lineno { padding-right: 4px; @@ -740,10 +859,6 @@ img.light-mode-visible { display: none; } -img.formulaDsp { - -} - img.formulaInl, img.inline { vertical-align: middle; } @@ -806,6 +921,10 @@ span.charliteral { color: var(--code-char-literal-color); } +span.xmlcdata { + color: var(--code-xml-cdata-color); +} + span.vhdldigit { color: var(--code-vhdl-digit-color); } @@ -1039,17 +1158,25 @@ dl.reflist dd { .paramtype { white-space: nowrap; + padding: 0px; + padding-bottom: 1px; } .paramname { - color: var(--memdef-param-name-color); white-space: nowrap; + padding: 0px; + padding-bottom: 1px; + margin-left: 2px; } + .paramname em { + color: var(--memdef-param-name-color); font-style: normal; + margin-right: 1px; } -.paramname code { - line-height: 14px; + +.paramname .paramdefval { + font-family: var(--font-family-monospace); } .params, .retval, .exception, .tparams { @@ -1220,8 +1347,7 @@ div.directory { width: 24px; height: 18px; margin-bottom: 4px; - background-image:url('folderopen.png'); - background-position: 0px -4px; + background-image:var(--icon-folder-open-image); background-repeat: repeat-y; vertical-align:top; display: inline-block; @@ -1231,8 +1357,7 @@ div.directory { width: 24px; height: 18px; margin-bottom: 4px; - background-image:url('folderclosed.png'); - background-position: 0px -4px; + background-image:var(--icon-folder-closed-image); background-repeat: repeat-y; vertical-align:top; display: inline-block; @@ -1385,7 +1510,6 @@ table.fieldtable { { height:32px; display:block; - text-decoration: none; outline: none; color: var(--nav-text-normal-color); font-family: var(--font-family-nav); @@ -1474,7 +1598,8 @@ dl { padding: 0 0 0 0; } -/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug, dl.examples */ +/* + dl.section { margin-left: 0px; padding-left: 0px; @@ -1529,8 +1654,101 @@ dl.bug { border-color: #C08050; } +*/ + +dl.bug dt a, dl.deprecated dt a, dl.todo dt a, dl.test a { + font-weight: bold !important; +} + +dl.warning, dl.attention, dl.note, dl.deprecated, dl.bug, +dl.invariant, dl.pre, dl.post, dl.todo, dl.test, dl.remark { + padding: 10px; + margin: 10px 0px; + overflow: hidden; + margin-left: 0; + border-radius: 4px; +} + dl.section dd { - margin-bottom: 6px; + margin-bottom: 2px; +} + +dl.warning, dl.attention { + background: var(--warning-color-bg); + border-left: 8px solid var(--warning-color-hl); + color: var(--warning-color-text); +} + +dl.warning dt, dl.attention dt { + color: var(--warning-color-hl); +} + +dl.note, dl.remark { + background: var(--note-color-bg); + border-left: 8px solid var(--note-color-hl); + color: var(--note-color-text); +} + +dl.note dt, dl.remark dt { + color: var(--note-color-hl); +} + +dl.todo { + background: var(--todo-color-bg); + border-left: 8px solid var(--todo-color-hl); + color: var(--todo-color-text); +} + +dl.todo dt { + color: var(--todo-color-hl); +} + +dl.test { + background: var(--test-color-bg); + border-left: 8px solid var(--test-color-hl); + color: var(--test-color-text); +} + +dl.test dt { + color: var(--test-color-hl); +} + +dl.bug dt a { + color: var(--bug-color-hl) !important; +} + +dl.bug { + background: var(--bug-color-bg); + border-left: 8px solid var(--bug-color-hl); + color: var(--bug-color-text); +} + +dl.bug dt a { + color: var(--bug-color-hl) !important; +} + +dl.deprecated { + background: var(--deprecated-color-bg); + border-left: 8px solid var(--deprecated-color-hl); + color: var(--deprecated-color-text); +} + +dl.deprecated dt a { + color: var(--deprecated-color-hl) !important; +} + +dl.section dd, dl.bug dd, dl.deprecated dd, dl.todo dd, dl.test dd { + margin-inline-start: 0px; +} + +dl.invariant, dl.pre, dl.post { + background: var(--invariant-color-bg); + border-left: 8px solid var(--invariant-color-hl); + color: var(--invariant-color-text); +} + +dl.invariant dt, dl.pre dt, dl.post dt { + color: var(--invariant-color-hl); } @@ -1545,12 +1763,12 @@ dl.section dd { vertical-align: bottom; border-collapse: separate; } - + #projectlogo img -{ +{ border: 0px none; } - + #projectalign { vertical-align: middle; @@ -1651,7 +1869,7 @@ div.toc { } div.toc li { - background: url("bdwn.png") no-repeat scroll 0 5px transparent; + background: var(--toc-down-arrow-image) no-repeat scroll 0 5px transparent; font: 10px/1.2 var(--font-family-toc); margin-top: 5px; padding-left: 10px; @@ -1680,11 +1898,11 @@ div.toc li.level2 { } div.toc li.level3 { - margin-left: 30px; + margin-left: 15px; } div.toc li.level4 { - margin-left: 45px; + margin-left: 15px; } span.emoji { diff --git a/doxygen.svg b/doxygen.svg index d42dad52..79a76354 100644 --- a/doxygen.svg +++ b/doxygen.svg @@ -1,4 +1,6 @@ + @@ -17,7 +19,7 @@ - + diff --git a/doxygen_crawl.html b/doxygen_crawl.html new file mode 100644 index 00000000..187920d9 --- /dev/null +++ b/doxygen_crawl.html @@ -0,0 +1,106 @@ + + + +Validator / crawler helper + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dynsections.js b/dynsections.js index f579fbf3..8f493264 100644 --- a/dynsections.js +++ b/dynsections.js @@ -22,102 +22,173 @@ @licend The above is the entire license notice for the JavaScript code in this file */ -function toggleVisibility(linkObj) -{ - var base = $(linkObj).attr('id'); - var summary = $('#'+base+'-summary'); - var content = $('#'+base+'-content'); - var trigger = $('#'+base+'-trigger'); - var src=$(trigger).attr('src'); - if (content.is(':visible')===true) { - content.hide(); - summary.show(); - $(linkObj).addClass('closed').removeClass('opened'); - $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); - } else { - content.show(); - summary.hide(); - $(linkObj).removeClass('closed').addClass('opened'); - $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); - } - return false; -} - -function updateStripes() -{ - $('table.directory tr'). - removeClass('even').filter(':visible:even').addClass('even'); - $('table.directory tr'). - removeClass('odd').filter(':visible:odd').addClass('odd'); -} - -function toggleLevel(level) -{ - $('table.directory tr').each(function() { - var l = this.id.split('_').length-1; - var i = $('#img'+this.id.substring(3)); - var a = $('#arr'+this.id.substring(3)); - if (l'); + // add vertical lines to other rows + $('span[class=lineno]').not(':eq(0)').append(''); + // add toggle controls to lines with fold divs + $('div[class=foldopen]').each(function() { + // extract specific id to use + const id = $(this).attr('id').replace('foldopen',''); + // extract start and end foldable fragment attributes + const start = $(this).attr('data-start'); + const end = $(this).attr('data-end'); + // replace normal fold span with controls for the first line of a foldable fragment + $(this).find('span[class=fold]:first').replaceWith(''); + // append div for folded (closed) representation + $(this).after(''); + // extract the first line from the "open" section to represent closed content + const line = $(this).children().first().clone(); + // remove any glow that might still be active on the original line + $(line).removeClass('glow'); + if (start) { + // if line already ends with a start marker (e.g. trailing {), remove it + $(line).html($(line).html().replace(new RegExp('\\s*'+start+'\\s*$','g'),'')); + } + // replace minus with plus symbol + $(line).find('span[class=fold]').css('background-image',codefold.plusImg[relPath]); + // append ellipsis + $(line).append(' '+start+''+end); + // insert constructed line into closed div + $('#foldclosed'+id).html(line); + }); + }, +}; /* @license-end */ diff --git a/examples.html b/examples.html index e8639ac7..733b901f 100644 --- a/examples.html +++ b/examples.html @@ -3,12 +3,15 @@ - + -Newly Optimized RF24Network Layer: Examples +Optimized RF24Network Layer: Examples + + + @@ -23,16 +26,16 @@ -
    Newly Optimized RF24Network Layer v2.0.0 +
    Optimized RF24Network Layer v2.0.0
    -
    2020 - Optimized RF24 Network Layer for NRF24L01 radios
    +
    2024 - Optimized RF24 Network Layer for NRF24L01 & NRF52x radios
    - + @@ -88,7 +91,7 @@
    diff --git a/files.html b/files.html index 620dc832..f647224d 100644 --- a/files.html +++ b/files.html @@ -3,12 +3,15 @@ - + -Newly Optimized RF24Network Layer: File List +Optimized RF24Network Layer: File List + + + @@ -23,16 +26,16 @@ -
    Newly Optimized RF24Network Layer v2.0.0 +
    Optimized RF24Network Layer v2.0.0
    -
    2020 - Optimized RF24 Network Layer for NRF24L01 radios
    +
    2024 - Optimized RF24 Network Layer for NRF24L01 & NRF52x radios
    - + @@ -86,7 +89,7 @@ diff --git a/folderclosed.png b/folderclosed.png deleted file mode 100644 index bb8ab35e..00000000 Binary files a/folderclosed.png and /dev/null differ diff --git a/folderclosed.svg b/folderclosed.svg new file mode 100644 index 00000000..b04bed2e --- /dev/null +++ b/folderclosed.svg @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/folderclosedd.svg b/folderclosedd.svg new file mode 100644 index 00000000..52f0166a --- /dev/null +++ b/folderclosedd.svg @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/folderopen.png b/folderopen.png deleted file mode 100644 index d6c7f676..00000000 Binary files a/folderopen.png and /dev/null differ diff --git a/folderopen.svg b/folderopen.svg new file mode 100644 index 00000000..f6896dd2 --- /dev/null +++ b/folderopen.svg @@ -0,0 +1,17 @@ + + + + + + + + + + diff --git a/folderopend.svg b/folderopend.svg new file mode 100644 index 00000000..2d1f06e7 --- /dev/null +++ b/folderopend.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/functions.html b/functions.html index 013d2770..91b37e48 100644 --- a/functions.html +++ b/functions.html @@ -3,12 +3,15 @@ - + -Newly Optimized RF24Network Layer: Class Members +Optimized RF24Network Layer: Class Members + + + @@ -23,16 +26,16 @@ -
    Newly Optimized RF24Network Layer v2.0.0 +
    Optimized RF24Network Layer v2.0.0
    -
    2020 - Optimized RF24 Network Layer for NRF24L01 radios
    +
    2024 - Optimized RF24 Network Layer for NRF24L01 & NRF52x radios
    - + @@ -172,7 +175,7 @@

    - w -

      diff --git a/functions_func.html b/functions_func.html index d8e5c9e9..c014cd91 100644 --- a/functions_func.html +++ b/functions_func.html @@ -3,12 +3,15 @@ - + -Newly Optimized RF24Network Layer: Class Members - Functions +Optimized RF24Network Layer: Class Members - Functions + + + @@ -23,16 +26,16 @@ -
      Newly Optimized RF24Network Layer v2.0.0 +
      Optimized RF24Network Layer v2.0.0
      -
      2020 - Optimized RF24 Network Layer for NRF24L01 radios
      +
      2024 - Optimized RF24 Network Layer for NRF24L01 & NRF52x radios
      - + @@ -72,7 +75,7 @@
      diff --git a/functions_vars.html b/functions_vars.html index 8315b444..7198caa7 100644 --- a/functions_vars.html +++ b/functions_vars.html @@ -3,12 +3,15 @@ - + -Newly Optimized RF24Network Layer: Class Members - Variables +Optimized RF24Network Layer: Class Members - Variables + + + @@ -23,16 +26,16 @@ -
      Newly Optimized RF24Network Layer v2.0.0 +
      Optimized RF24Network Layer v2.0.0
      -
      2020 - Optimized RF24 Network Layer for NRF24L01 radios
      +
      2024 - Optimized RF24 Network Layer for NRF24L01 & NRF52x radios
      - + @@ -72,7 +75,7 @@
      diff --git a/globals.html b/globals.html index 7f8c1afc..ce6cbe25 100644 --- a/globals.html +++ b/globals.html @@ -3,12 +3,15 @@ - + -Newly Optimized RF24Network Layer: File Members +Optimized RF24Network Layer: File Members + + + @@ -23,16 +26,16 @@ -
      Newly Optimized RF24Network Layer v2.0.0 +
      Optimized RF24Network Layer v2.0.0
      -
      2020 - Optimized RF24 Network Layer for NRF24L01 radios
      +
      2024 - Optimized RF24 Network Layer for NRF24L01 & NRF52x radios
      - + @@ -109,6 +112,7 @@

      - n -

      @@ -138,7 +142,7 @@

      - u -

        diff --git a/globals_defs.html b/globals_defs.html index 004a3331..93e15a0e 100644 --- a/globals_defs.html +++ b/globals_defs.html @@ -3,12 +3,15 @@ - + -Newly Optimized RF24Network Layer: File Members +Optimized RF24Network Layer: File Members + + + @@ -23,16 +26,16 @@ -
        Newly Optimized RF24Network Layer v2.0.0 +
        Optimized RF24Network Layer v2.0.0
        -
        2020 - Optimized RF24 Network Layer for NRF24L01 radios
        +
        2024 - Optimized RF24 Network Layer for NRF24L01 & NRF52x radios
        - + @@ -72,17 +75,31 @@
        diff --git a/globals_type.html b/globals_type.html index c7f09c9b..c0c7cdfb 100644 --- a/globals_type.html +++ b/globals_type.html @@ -3,12 +3,15 @@ - + -Newly Optimized RF24Network Layer: File Members +Optimized RF24Network Layer: File Members + + + @@ -23,16 +26,16 @@ -
        Newly Optimized RF24Network Layer v2.0.0 +
        Optimized RF24Network Layer v2.0.0
        -
        2020 - Optimized RF24 Network Layer for NRF24L01 radios
        +
        2024 - Optimized RF24 Network Layer for NRF24L01 & NRF52x radios
        - + @@ -72,13 +75,13 @@
          +
          Here is a list of all typedefs with links to the files they belong to:
        diff --git a/group__DEFINED__TYPES.html b/group__DEFINED__TYPES.html index bcadfb03..b1be9424 100644 --- a/group__DEFINED__TYPES.html +++ b/group__DEFINED__TYPES.html @@ -3,12 +3,15 @@ - + -Newly Optimized RF24Network Layer: Reserved System Message Types +Optimized RF24Network Layer: Reserved System Message Types + + + @@ -23,16 +26,16 @@ -
        Newly Optimized RF24Network Layer v2.0.0 +
        Optimized RF24Network Layer v2.0.0
        -
        2020 - Optimized RF24 Network Layer for NRF24L01 radios
        +
        2024 - Optimized RF24 Network Layer for NRF24L01 & NRF52x radios
        - + @@ -80,23 +83,23 @@ - + - + - + - + - + - + - + - + - +

        Macros

        #define NETWORK_ADDR_RESPONSE   128
        #define NETWORK_ADDR_RESPONSE   128
         
        #define NETWORK_PING   130
        #define NETWORK_PING   130
         
        #define EXTERNAL_DATA_TYPE   131
        #define EXTERNAL_DATA_TYPE   131
         
        #define NETWORK_FIRST_FRAGMENT   148
        #define NETWORK_FIRST_FRAGMENT   148
         
        #define NETWORK_MORE_FRAGMENTS   149
        #define NETWORK_MORE_FRAGMENTS   149
         
        #define NETWORK_LAST_FRAGMENT   150
        #define NETWORK_LAST_FRAGMENT   150
         
        #define NETWORK_ACK   193
        #define NETWORK_ACK   193
         
        #define NETWORK_POLL   194
        #define NETWORK_POLL   194
         
        #define NETWORK_REQ_ADDRESS   195
        #define NETWORK_REQ_ADDRESS   195
         

        Detailed Description

        @@ -106,7 +109,7 @@
      • User types (1 - 127) 1 - 64 will NOT be acknowledged
      • System types (128 - 255) 192 - 255 will NOT be acknowledged
      -

      System types can also contain message data.

      +

      System types can also contain message data.

      Macro Definition Documentation

      ◆ NETWORK_ADDR_RESPONSE

      @@ -119,7 +122,7 @@

      -

      A NETWORK_ADDR_RESPONSE type is utilized to manually route custom messages containing a single RF24Network address.

      +

      A NETWORK_ADDR_RESPONSE type is utilized to manually route custom messages containing a single RF24Network address.

      Used by RF24Mesh

      If a node receives a message of this type that is directly addressed to it, it will read the included message, and forward the payload on to the proper recipient.

      This allows nodes to forward multicast messages to the master node, receive a response, and forward it back to the requester.

      @@ -162,11 +165,11 @@

      uint8_t return_type = network.update();
      -
      +
      if(return_type == EXTERNAL_DATA_TYPE){
      uint16_t size = network.frag_ptr->message_size;
      memcpy(&myDataBuffer, network.frag_ptr->message_buffer, network.frag_ptr->message_size);
      }
      -
      #define EXTERNAL_DATA_TYPE
      Definition: RF24Network.h:103
      +
      #define EXTERNAL_DATA_TYPE
      Definition RF24Network.h:103
      Examples
      Network_Priority_RX.ino, and Network_Priority_TX.ino.
      @@ -213,7 +216,7 @@

      -

      Messages of this type indicate the last fragment in a sequence of message fragments. Messages of this type do not receive a NETWORK_ACK

      +

      Messages of this type indicate the last fragment in a sequence of message fragments. Messages of this type do not receive a NETWORK_ACK

      @@ -278,7 +281,7 @@

      diff --git a/helloworld_rx_8ino-example.html b/helloworld_rx_8ino-example.html index 96c422e2..55e73f91 100644 --- a/helloworld_rx_8ino-example.html +++ b/helloworld_rx_8ino-example.html @@ -3,12 +3,15 @@ - + -Newly Optimized RF24Network Layer: helloworld_rx.ino +Optimized RF24Network Layer: helloworld_rx.ino + + + @@ -23,16 +26,16 @@ -
      Newly Optimized RF24Network Layer v2.0.0 +
      Optimized RF24Network Layer v2.0.0
      -
      2020 - Optimized RF24 Network Layer for NRF24L01 radios
      +
      2024 - Optimized RF24 Network Layer for NRF24L01 & NRF52x radios
      - + @@ -127,12 +130,12 @@
      }
      }
      -
      Definition: RF24Network.h:384
      -
      Definition: RF24Network.h:229
      +
      Definition RF24Network.h:384
      +
      Definition RF24Network.h:229
      diff --git a/helloworld_rx_advanced_8ino-example.html b/helloworld_rx_advanced_8ino-example.html index a1ca0b96..16b651e5 100644 --- a/helloworld_rx_advanced_8ino-example.html +++ b/helloworld_rx_advanced_8ino-example.html @@ -3,12 +3,15 @@ - + -Newly Optimized RF24Network Layer: helloworld_rx_advanced.ino +Optimized RF24Network Layer: helloworld_rx_advanced.ino + + + @@ -23,16 +26,16 @@ -
      Newly Optimized RF24Network Layer v2.0.0 +
      Optimized RF24Network Layer v2.0.0
      -
      2020 - Optimized RF24 Network Layer for NRF24L01 radios
      +
      2024 - Optimized RF24 Network Layer for NRF24L01 & NRF52x radios
      - + @@ -149,13 +152,13 @@
      }
      }
      -
      #define MAX_PAYLOAD_SIZE
      Maximum size of fragmented network frames and fragmentation cache.
      Definition: RF24Network_config.h:61
      -
      Definition: RF24Network.h:384
      -
      Definition: RF24Network.h:229
      +
      #define MAX_PAYLOAD_SIZE
      Maximum size of fragmented network frames and fragmentation cache.
      Definition RF24Network_config.h:61
      +
      Definition RF24Network.h:384
      +
      Definition RF24Network.h:229
      diff --git a/helloworld_tx_8ino-example.html b/helloworld_tx_8ino-example.html index a2ed6922..b9aeedb9 100644 --- a/helloworld_tx_8ino-example.html +++ b/helloworld_tx_8ino-example.html @@ -3,12 +3,15 @@ - + -Newly Optimized RF24Network Layer: helloworld_tx.ino +Optimized RF24Network Layer: helloworld_tx.ino + + + @@ -23,16 +26,16 @@ -
      Newly Optimized RF24Network Layer v2.0.0 +
      Optimized RF24Network Layer v2.0.0
      -
      2020 - Optimized RF24 Network Layer for NRF24L01 radios
      +
      2024 - Optimized RF24 Network Layer for NRF24L01 & NRF52x radios
      - + @@ -134,12 +137,12 @@
      }
      }
      -
      Definition: RF24Network.h:384
      -
      Definition: RF24Network.h:229
      +
      Definition RF24Network.h:384
      +
      Definition RF24Network.h:229
      diff --git a/helloworld_tx_advanced_8ino-example.html b/helloworld_tx_advanced_8ino-example.html index 7917ef07..5cd67e1f 100644 --- a/helloworld_tx_advanced_8ino-example.html +++ b/helloworld_tx_advanced_8ino-example.html @@ -3,12 +3,15 @@ - + -Newly Optimized RF24Network Layer: helloworld_tx_advanced.ino +Optimized RF24Network Layer: helloworld_tx_advanced.ino + + + @@ -23,16 +26,16 @@ -
      Newly Optimized RF24Network Layer v2.0.0 +
      Optimized RF24Network Layer v2.0.0
      -
      2020 - Optimized RF24 Network Layer for NRF24L01 radios
      +
      2024 - Optimized RF24 Network Layer for NRF24L01 & NRF52x radios
      - + @@ -154,13 +157,13 @@
      }
      }
      -
      #define MAX_PAYLOAD_SIZE
      Maximum size of fragmented network frames and fragmentation cache.
      Definition: RF24Network_config.h:61
      -
      Definition: RF24Network.h:384
      -
      Definition: RF24Network.h:229
      +
      #define MAX_PAYLOAD_SIZE
      Maximum size of fragmented network frames and fragmentation cache.
      Definition RF24Network_config.h:61
      +
      Definition RF24Network.h:384
      +
      Definition RF24Network.h:229
      diff --git a/index.html b/index.html index 714c9f0b..338c806e 100644 --- a/index.html +++ b/index.html @@ -3,12 +3,15 @@ - + -Newly Optimized RF24Network Layer: Network Layer for RF24 Radios +Optimized RF24Network Layer: Network Layer for RF24 Radios + + + @@ -23,16 +26,16 @@ -
      Newly Optimized RF24Network Layer v2.0.0 +
      Optimized RF24Network Layer v2.0.0
      -
      2020 - Optimized RF24 Network Layer for NRF24L01 radios
      +
      2024 - Optimized RF24 Network Layer for NRF24L01 & NRF52x radios
      - + @@ -76,36 +79,36 @@
      -

      -

      This class implements an OSI Network Layer using nRF24L01(+) radios driven by the newly optimized RF24 library fork.

      +

      +

      This class implements an OSI Network Layer using nRF24L01(+) radios driven by the newly optimized RF24 library fork or using nRF52x radios with the newly created nrf_to_nrf library.

      See also
      RF24 Library docs for general RF24 configuration and setup.
      -

      +

      Purpose/Goal

      Original: Create an alternative to ZigBee radios for Arduino communication.

      New: Enhance the current functionality for maximum efficiency, reliability, and speed

      Xbees are excellent little radios, backed up by a mature and robust standard protocol stack. They are also expensive.

      For many Arduino uses, they seem like overkill. So I am working to improve the current standard for nRF24L01 radios. The best RF24 modules are available for less than $6 from many sources. With the RF24Network layer, I hope to cover many common communication scenarios.

      Please see TMRh20's blog post for a comparison against the ZigBee protocols

      -

      +

      News - 2023 API Changes

      Introducing RF24Network & RF24Mesh v2.0 with some significant API changes, adding the use of C++ Templates in order to support a range of ESB enabled radios, most recently NRF52x radios.

      Important Notes:

        @@ -116,7 +119,7 @@

        template<class network_t, class radio_t>
        class ESBMesh;
        -
        Definition: RF24Network.h:384
        +
        Definition RF24Network.h:384

    • Third party libs should also be able to use the backward-compatible typedef in their template:
      • ESBGateway.h:
        template<typename network_t, typename mesh_t>
        @@ -130,9 +133,9 @@

      • We will be maintaining the v1.x versions with bugfixes etc for those who cannot or do not wish to migrate to the newer template approach.

      Please see the recent changes listed in the github releases page

      -

      +

      Features

      -

      +

      The layer provides

      • Network ACKs: Efficient acknowledgement of network-wide transmissions, via dynamic radio acks and network protocol acks.
      • @@ -144,22 +147,22 @@

      • Message Forwarding. Messages can be sent from one node to any other, and this layer will get them there no matter how many hops it takes.
      • Ad-hoc Joining. A node can join a network without any changes to any existing nodes.
      -

      +

      The layer does not provide

      -

      +

      How to learn more

      -

      +

      Additional Information & Add-ons

      -

      +

      Topology for Mesh Networks using nRF24L01(+)

      This network layer takes advantage of the fundamental capability of the nRF24L01(+) radio to listen actively to up to 6 other radios at once. The network is arranged in a Tree Topology, where one node is the base, and all other nodes are children either of that node, or of another. Unlike a true mesh network, multiple nodes are not connected together, so there is only one path to any given node.

      -

      +

      Octal Addressing and Topology

      Each node must be assigned an 15-bit address by the administrator. This address exactly describes the position of the node within the tree. The address is an octal number. Each digit in the address represents a position in the tree further from the base.

        @@ -184,22 +187,23 @@

        -

        +

        How routing is handled

        When sending a message using ESBNetwork::write(), you fill in the header with the logical node address. The network layer figures out the right path to find that node, and sends it through the system until it gets to the right place. This works even if the two nodes are far separated, as it will send the message down to the base node, and then back out to the final destination.

        All of this work is handled by the ESBNetwork::update() method, so be sure to call it regularly or your network will miss packets.

        -

        +

        Starting up a node

        When a node starts up, it only has to contact its parent to establish communication. No direct connection to the Base node is needed. This is useful in situations where relay nodes are being used to bridge the distance to the base, so leaf nodes are out of range of the base.

        -

        +

        Directionality

        By default all nodes are always listening, so messages will quickly reach their destination.

        You may choose to sleep any nodes on the network if using interrupts. This is useful in a case where the nodes are operating on batteries and need to sleep. This greatly decreases the power requirements for a sensor network. The leaf nodes can sleep most of the time, and wake every few minutes to send in a reading. Routing nodes can be triggered to wake up whenever a payload is received See ESBNetwork::sleepNode() in the class documentation, and RF24Network_config.h to enable sleep mode.

    • + diff --git a/main__page_8md.html b/main__page_8md.html index 23590a7b..780ca79c 100644 --- a/main__page_8md.html +++ b/main__page_8md.html @@ -3,12 +3,15 @@ - + -Newly Optimized RF24Network Layer: docs/main_page.md File Reference +Optimized RF24Network Layer: docs/main_page.md File Reference + + + @@ -23,16 +26,16 @@ -
      Newly Optimized RF24Network Layer v2.0.0 +
      Optimized RF24Network Layer v2.0.0
      -
      2020 - Optimized RF24 Network Layer for NRF24L01 radios
      +
      2024 - Optimized RF24 Network Layer for NRF24L01 & NRF52x radios
      - + @@ -78,7 +81,7 @@ diff --git a/md_CONTRIBUTING.html b/md_CONTRIBUTING.html index d5d3a2cf..13bf2842 100644 --- a/md_CONTRIBUTING.html +++ b/md_CONTRIBUTING.html @@ -3,12 +3,15 @@ - + -Newly Optimized RF24Network Layer: CONTRIBUTING +Optimized RF24Network Layer: CONTRIBUTING + + + @@ -23,16 +26,16 @@ -
      Newly Optimized RF24Network Layer v2.0.0 +
      Optimized RF24Network Layer v2.0.0
      -
      2020 - Optimized RF24 Network Layer for NRF24L01 radios
      +
      2024 - Optimized RF24 Network Layer for NRF24L01 & NRF52x radios
      - + @@ -72,7 +75,7 @@
      -
      CONTRIBUTING
      +
      CONTRIBUTING

      These are the current requirements for getting your code included in RF24Network:

      @@ -92,7 +95,7 @@
      diff --git a/md_docs_addressing.html b/md_docs_2addressing.html similarity index 72% rename from md_docs_addressing.html rename to md_docs_2addressing.html index d372c81e..d90aba05 100644 --- a/md_docs_addressing.html +++ b/md_docs_2addressing.html @@ -3,12 +3,15 @@ - + -Newly Optimized RF24Network Layer: Addressing Format: Understanding Addressing and Topology +Optimized RF24Network Layer: Addressing Format: Understanding Addressing and Topology + + + @@ -23,16 +26,16 @@ -
      Newly Optimized RF24Network Layer v2.0.0 +
      Optimized RF24Network Layer v2.0.0
      -
      2020 - Optimized RF24 Network Layer for NRF24L01 radios
      +
      2024 - Optimized RF24 Network Layer for NRF24L01 & NRF52x radios
      - + @@ -72,22 +75,24 @@
      -
      Addressing Format: Understanding Addressing and Topology
      +
      Addressing Format: Understanding Addressing and Topology
      -

      An overview of addressing in RF24Network

      +

      +

      An overview of addressing in RF24Network

      Overview

      The nrf24 radio modules typically use a 40-bit address format, requiring 5-bytes of storage space per address, and allowing a wide array of addresses to be utilized. In addition, the radios are limited to direct communication with 6 other nodes while using the Enhanced-Shock-Burst (ESB) functionality of the radios.

      -

      RF24Network uses a simple method of data compression to store the addresses using only 2 bytes, in a format designed to represent the network topology in an intuitive way. See the Topology and Overview page for more info regarding topology.

      +

      RF24Network uses a simple method of data compression to store the addresses using only 2 bytes, in a format designed to represent the network topology in an intuitive way. See the Topology and Overview page for more info regarding topology.

      Decimal, Octal and Binary formats

      Say we want to designate a logical address to a node, using a tree topology as defined by the manufacturer. In the simplest format, we could assign the first node the address of 1, the second 2, and so on. Since a single node can only connect to 6 other nodes (1 parent and 5 children) subnets need to be created if using more than 6 nodes. In this case, the

      @@ -96,7 +101,10 @@

    • children of node 2 could be designated as 12, 22, 32, 42, and 52

    The above example is exactly how RF24Network manages the addresses, but they are represented in Octal format.

    -

    +

    +Available Addresses

    +

    RF24Network supports various configurations, but by default has multicast enabled. This means one additional pipe is taken up on each node for multicasting. The master node will support 5 nodes (01 through 05) and 1 multicast address, while the nodes themselves will support 4 nodes (01n to 04n etc), 1 multicast address and 1 parent pipe. Users can edit RF24Network_config.h and comment out #define RF24NetworkMulticast as well. This allows the master to support 5 children, with nodes supporting 5 children also. See the Topology and Overview page for more info regarding topology.

    +

    Decimal, Octal and Binary

    @@ -113,7 +121,7 @@

    111 0157 01101111

    Since the numbers 0-7 can be represented in exactly three bits, each digit is represented by exactly 3 bits when viewed in octal format. This allows a very simple method of managing addresses via masking and bit shifting.

    -

    +

    Displaying Addresses

    When using Arduino devices, octal addresses can be printed in the following manner:

    uint16_t address = 0111;
    @@ -123,14 +131,14 @@

    printf("0%o\n", address);

    See also
    diff --git a/md_docs_advanced_config.html b/md_docs_2advanced__config.html similarity index 82% rename from md_docs_advanced_config.html rename to md_docs_2advanced__config.html index cef4fcb6..859c65ad 100644 --- a/md_docs_advanced_config.html +++ b/md_docs_2advanced__config.html @@ -3,12 +3,15 @@ - + -Newly Optimized RF24Network Layer: Advanced Configuration +Optimized RF24Network Layer: Advanced Configuration + + + @@ -23,16 +26,16 @@ -
    Newly Optimized RF24Network Layer v2.0.0 +
    Optimized RF24Network Layer v2.0.0
    -
    2020 - Optimized RF24 Network Layer for NRF24L01 radios
    +
    2024 - Optimized RF24 Network Layer for NRF24L01 & NRF52x radios
    - + @@ -72,10 +75,11 @@
    -
    Advanced Configuration
    +
    Advanced Configuration
    -

    RF24Network offers many features, some of which can be configured by editing the RF24Network_config.h file

    +

    +

    RF24Network offers many features, some of which can be configured by editing the RF24Network_config.h file

    @@ -98,7 +102,7 @@ diff --git a/md_docs_tuning.html b/md_docs_2tuning.html similarity index 83% rename from md_docs_tuning.html rename to md_docs_2tuning.html index 7d1278c4..5a160f02 100644 --- a/md_docs_tuning.html +++ b/md_docs_2tuning.html @@ -3,12 +3,15 @@ - + -Newly Optimized RF24Network Layer: Performance and Data Loss: Tuning the Network +Optimized RF24Network Layer: Performance and Data Loss: Tuning the Network + + + @@ -23,16 +26,16 @@
    Configuration Option Description
    -
    Newly Optimized RF24Network Layer v2.0.0 +
    Optimized RF24Network Layer v2.0.0
    -
    2020 - Optimized RF24 Network Layer for NRF24L01 radios
    +
    2024 - Optimized RF24 Network Layer for NRF24L01 & NRF52x radios
    - + @@ -72,37 +75,38 @@
    -
    Performance and Data Loss: Tuning the Network
    +
    Performance and Data Loss: Tuning the Network
    -

    Tips and examples for tuning the network and general operation.

    +

    +

    Tips and examples for tuning the network and general operation.

    Observe:

    @image html images/topologyImage.jpg width=70% height=70%

    -

    +

    Understanding Radio Communication and Topology

    When a transmission takes place from one radio module to another, the receiving radio will communicate back to the sender with an acknowledgement (ACK) packet, to indicate success. If the sender does not receive an ACK, the radio automatically engages in a series of timed retries, at set intervals. The radios use techniques like addressing and numbering of payloads to manage this, but it is all done automatically by the nrf chip, out of sight from the user.

    When working over a radio network, some of these automated techniques can actually hinder data transmission to a degree. Retrying failed payloads over and over on a radio network can hinder communication for nearby nodes, or reduce throughput and errors on routing nodes.

    Radios in this network are linked by addresses assigned to pipes. Each radio can listen to 6 addresses on 6 pipes, therefore each radio has a parent pipe and 4-5 child pipes, which are used to form a tree structure. Nodes communicate directly with their parent and children nodes. Any other traffic to or from a node must be routed through the network.

    -

    +

    Topology of RF24Network

    Anybody who is familiar at all with IP networking should be able to easily understand RF24Network topology. The master node can be seen as the gateway, with up to 4 directly connected nodes. Each of those nodes creates a subnet below it, with up to 4 additional child nodes. The numbering scheme can also be related to IP addresses, for purposes of understanding the topology via subnetting. Nodes can have 5 children if multicast is disabled.

    -

    +

    Expressing RF24Network addresses in IP format

    As an example, we could designate the master node in theory, as Address 10.10.10.10

      @@ -114,32 +118,32 @@

    • Children of master are 01, 02, 03, 04, 05
    • Children of 01 are 011, 021, 031, 041, 051
    -

    +

    Multicast

    Multicast is enabled by default, which limits the master node to 5 child pipes and other nodes to 4. Nodes are arranged in multicast 'levels' with the master node being level 0, nodes 01-05 are level 1, nodes n1-n5 are level 2, and so on. The multicast level of each node can be configured as desired by the user, or multicast can be disabled by editing RF24Network_config.h. For example, if all nodes are in range of the master node, all nodes can be configured to use multicast level 1, allowing the master node to contact all of them by sending a single payload. Multicasting is also used by the RF24Mesh layer for dynamic addressing requests.

    -

    +

    Routing

    -

    Routing of traffic is handled invisibly to the user, by the network layer. If the network addresses are assigned in accordance with the physical layout of the network, nodes will route traffic automatically as required. Users simply constuct a header containing the appropriate destination address, and the network will forward it through to the correct node. Individual nodes only route individual fragments, so if using fragmentation, routing nodes do not need it enabled, unless sending or receiving fragmented payloads themselves.

    +

    Routing of traffic is handled invisibly to the user, by the network layer. If the network addresses are assigned in accordance with the physical layout of the network, nodes will route traffic automatically as required. Users simply construct a header containing the appropriate destination address, and the network will forward it through to the correct node. Individual nodes only route individual fragments, so if using fragmentation, routing nodes do not need it enabled, unless sending or receiving fragmented payloads themselves.

    If routing data between parent and child nodes (marked by direct links on the topology image above) the network uses built-in acknowledgement and retry functions of the chip to prevent data loss. When payloads are sent to other nodes, they need to be routed. Routing is managed using a combination of built in ACK requests, and software driven network ACKs. This allows all routing nodes to forward data very quickly, with only the final routing node confirming delivery and sending back an acknowledgement.

    Example: Node 00 sends to node 01. The nodes will use the built in auto-retry and auto-ack functions.

    Example: Node 00 sends to node 011. Node 00 will send to node 01 as before. Node 01 will forward the message to 011. If delivery was successful, node 01 will also forward a message back to node 00, indicating success.

    Old Functionality: Node 00 sends to node 011 using auto-ack. Node 00 first sends to 01, 01 acknowledges. Node 01 forwards the payload to 011 using auto-ack. If the payload fails between 01 and 011, node 00 has no way of knowing.

    Note
    When retrying failed payloads that have been routed, there is a chance of duplicate payloads if the network-ack is not successful. In this case, it is left up to the user to manage retries and filtering of duplicate payloads.

    Acknowledgements can and should be managed by the application or user. If requesting a response from another node, an acknowledgement is not required, so a user defined type of 0-64 should be used, to prevent the network from responding with an acknowledgement. If not requesting a response, and wanting to know if the payload was successful or not, users can utilize header types 65-127.

    -

    +

    Tuning Overview

    The RF24 radio modules are generally only capable of either sending or receiving data at any given time, but have built-in auto-retry mechanisms to prevent the loss of data. These values are adjusted automatically by the library on startup, but can be further adjusted to reduce data loss, and thus increase throughput of the network. This page is intended to provide a general overview of its operation within the context of the network library, and provide guidance for adjusting these values.

    -

    +

    Auto-Retry Timing

    The core radio library provides the functionality of adjusting the internal auto-retry interval of the radio modules. In the network configuration, the radios can be set to automatically retry failed transmissions at intervals ranging anywhere from 500us (0.5ms) up to 4000us (4ms). When operating any number of radios larger than two, it is important to stagger the assigned intervals, to prevent the radios from interfering with each other at the radio frequency (RF) layer.

    The library should provide fairly good working values, as it simply staggers the assigned values within groups of radios in direct communication. This value can be set manually by calling radio.setRetries(X, 15); and adjusting the value of X from 1 to 15 (steps of 250us).

    -

    +

    Auto-Retry Count and Extended Timeouts

    -

    The core radio library also provides the ability to adjust the internal auto-retry count of the radio modules. The default setting is 15 automatic retries per payload, and can be extended by configuring the network.txTimeout variable. This default retry count should generally be left at 15, as per the example in the above section. An interval/retry setting of (15,15) will provide 15 retrys at intervals of 4ms, taking up to 60ms per payload. The library now provides staggered timeout periods by default, but they can also be adjusted on a per-node basis.

    +

    The core radio library also provides the ability to adjust the internal auto-retry count of the radio modules. The default setting is 15 automatic retries per payload, and can be extended by configuring the network.txTimeout variable. This default retry count should generally be left at 15, as per the example in the above section. An interval/retry setting of (15,15) will provide 15 retries at intervals of 4ms, taking up to 60ms per payload. The library now provides staggered timeout periods by default, but they can also be adjusted on a per-node basis.

    The txTimeout variable is used to extend the retry count to a defined duration in milliseconds. See the network.txTimeout variable. Timeout periods of extended duration (500+) will generally not help when payloads are failing due to data collisions, it will only extend the duration of the errors. Extended duration timeouts should generally only be configured on leaf nodes that do not receive data.

    -

    +

    Scenarios

    -

    +

    Example 1

    Network with master node and three leaf nodes that send data to the master node. None of the leaf nodes need to receive data.

      @@ -150,7 +154,7 @@

      Leaf 03: network.txTimeout = 653;

-

+

Example 2

Network with master node and three leaf nodes that send data to the master node. The second leaf node needs to receive configuration data from the master at set intervals of 1 second, and send data back to the master node. The other leaf nodes will send basic sensor information every few seconds, and a few dropped payloads will not affect the operation greatly.

    @@ -160,13 +164,13 @@

  1. Second leaf node configured with a similar timeout period and retry delay:
    radio.setRetries(8, 15);
    network.txTimeout = 553;
  2. -
  3. First and third leaf nodes configured with default timeout periods or slightly increased timout periods.
  4. +
  5. First and third leaf nodes configured with default timeout periods or slightly increased timeout periods.
diff --git a/md_docs_zigabee.html b/md_docs_2zigabee.html similarity index 78% rename from md_docs_zigabee.html rename to md_docs_2zigabee.html index cd4f5d56..45f5805a 100644 --- a/md_docs_zigabee.html +++ b/md_docs_2zigabee.html @@ -3,12 +3,15 @@ - + -Newly Optimized RF24Network Layer: Comparison to ZigBee +Optimized RF24Network Layer: Comparison to ZigBee + + + @@ -23,16 +26,16 @@ -
Newly Optimized RF24Network Layer v2.0.0 +
Optimized RF24Network Layer v2.0.0
-
2020 - Optimized RF24 Network Layer for NRF24L01 radios
+
2024 - Optimized RF24 Network Layer for NRF24L01 & NRF52x radios
- + @@ -72,21 +75,22 @@
-
Comparison to ZigBee
+
Comparison to ZigBee
-

This network layer is influenced by the design of ZigBee, but does not implement it directly.

-

+

+

This network layer is influenced by the design of ZigBee, but does not implement it directly.

+

Which is better?

ZigBee is a much more robust, feature-rich set of protocols, with many different vendors providing compatible chips.

RF24Network is cheap. While ZigBee radios are well over $20, nRF24L01 modules can be found for under $2.

-

+

Similiarities & Differences

Here are some comparisons between RF24Network and ZigBee.

    @@ -95,7 +99,7 @@

  • ZigBee nodes are configured using AT commands, or a separate Windows application. RF24 nodes are configured by recompiliing the firmware or writing to EEPROM.
  • A paper was written comparing the performance of Zigbee vs nRF24l01+, see TMRh20s Blog for a detailed overview.
-

+

Node Naming

  • Leaf node: A node at the outer edge of the network with no children. ZigBee calls it an End Device node.
  • @@ -106,7 +110,7 @@

diff --git a/menu.js b/menu.js index b0b26936..717761d0 100644 --- a/menu.js +++ b/menu.js @@ -24,13 +24,12 @@ */ function initMenu(relPath,searchEnabled,serverSide,searchPage,search) { function makeTree(data,relPath) { - var result=''; + let result=''; if ('children' in data) { result+='
    '; - for (var i in data.children) { - var url; - var link; - link = data.children[i].url; + for (let i in data.children) { + let url; + const link = data.children[i].url; if (link.substring(0,1)=='^') { url = link.substring(1); } else { @@ -44,7 +43,7 @@ function initMenu(relPath,searchEnabled,serverSide,searchPage,search) { } return result; } - var searchBoxHtml; + let searchBoxHtml; if (searchEnabled) { if (serverSide) { searchBoxHtml='
    '+ @@ -88,29 +87,28 @@ function initMenu(relPath,searchEnabled,serverSide,searchPage,search) { if (searchBoxHtml) { $('#main-menu').append('
  • '); } - var $mainMenuState = $('#main-menu-state'); - var prevWidth = 0; + const $mainMenuState = $('#main-menu-state'); + let prevWidth = 0; if ($mainMenuState.length) { - function initResizableIfExists() { + const initResizableIfExists = function() { if (typeof initResizable==='function') initResizable(); } // animate mobile menu - $mainMenuState.change(function(e) { - var $menu = $('#main-menu'); - var options = { duration: 250, step: initResizableIfExists }; + $mainMenuState.change(function() { + const $menu = $('#main-menu'); + let options = { duration: 250, step: initResizableIfExists }; if (this.checked) { - options['complete'] = function() { $menu.css('display', 'block') }; + options['complete'] = () => $menu.css('display', 'block'); $menu.hide().slideDown(options); } else { - options['complete'] = function() { $menu.css('display', 'none') }; + options['complete'] = () => $menu.css('display', 'none'); $menu.show().slideUp(options); } }); // set default menu visibility - function resetState() { - var $menu = $('#main-menu'); - var $mainMenuState = $('#main-menu-state'); - var newWidth = $(window).outerWidth(); + const resetState = function() { + const $menu = $('#main-menu'); + const newWidth = $(window).outerWidth(); if (newWidth!=prevWidth) { if ($(window).outerWidth()<768) { $mainMenuState.prop('checked',false); $menu.hide(); diff --git a/menudata.js b/menudata.js index 7b665912..2ae75c43 100644 --- a/menudata.js +++ b/menudata.js @@ -25,7 +25,7 @@ var menudata={children:[ {text:"Main Page",url:"index.html"}, {text:"Related Pages",url:"pages.html"}, -{text:"Modules",url:"modules.html"}, +{text:"Topics",url:"topics.html"}, {text:"Classes",url:"annotated.html",children:[ {text:"Class List",url:"annotated.html"}, {text:"Class Index",url:"classes.html"}, @@ -61,5 +61,13 @@ var menudata={children:[ {text:"t",url:"globals.html#index_t"}, {text:"u",url:"globals.html#index_u"}]}, {text:"Typedefs",url:"globals_type.html"}, -{text:"Macros",url:"globals_defs.html"}]}]}, +{text:"Macros",url:"globals_defs.html",children:[ +{text:"e",url:"globals_defs.html#index_e"}, +{text:"f",url:"globals_defs.html#index_f"}, +{text:"m",url:"globals_defs.html#index_m"}, +{text:"n",url:"globals_defs.html#index_n"}, +{text:"r",url:"globals_defs.html#index_r"}, +{text:"s",url:"globals_defs.html#index_s"}, +{text:"t",url:"globals_defs.html#index_t"}, +{text:"u",url:"globals_defs.html#index_u"}]}]}]}, {text:"Examples",url:"examples.html"}]} diff --git a/minus.svg b/minus.svg new file mode 100644 index 00000000..f70d0c1a --- /dev/null +++ b/minus.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/minusd.svg b/minusd.svg new file mode 100644 index 00000000..5f8e8796 --- /dev/null +++ b/minusd.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/new_favicon.ico b/new_favicon.ico new file mode 100644 index 00000000..c15a1650 Binary files /dev/null and b/new_favicon.ico differ diff --git a/pages.html b/pages.html index 52a32771..af3395cd 100644 --- a/pages.html +++ b/pages.html @@ -3,12 +3,15 @@ - + -Newly Optimized RF24Network Layer: Related Pages +Optimized RF24Network Layer: Related Pages + + + @@ -23,16 +26,16 @@ -
    Newly Optimized RF24Network Layer v2.0.0 +
    Optimized RF24Network Layer v2.0.0
    -
    2020 - Optimized RF24 Network Layer for NRF24L01 radios
    +
    2024 - Optimized RF24 Network Layer for NRF24L01 & NRF52x radios
    - + @@ -78,17 +81,17 @@
    Here is a list of all related documentation pages:
    diff --git a/plus.svg b/plus.svg new file mode 100644 index 00000000..07520165 --- /dev/null +++ b/plus.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/plusd.svg b/plusd.svg new file mode 100644 index 00000000..0c65bfe9 --- /dev/null +++ b/plusd.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/search/all_0.js b/search/all_0.js index 5730c80e..83d428f3 100644 --- a/search/all_0.js +++ b/search/all_0.js @@ -1,4 +1,4 @@ var searchData= [ - ['_5fmulticast_5flevel_0',['_multicast_level',['../classESBNetwork.html#aab52703c149001e4d3e1ae7c8311f8e0',1,'ESBNetwork']]] + ['1_0',['Example 1',['../md_docs_2tuning.html#autotoc_md30',1,'']]] ]; diff --git a/search/all_1.js b/search/all_1.js index 58427adc..f9da4c7f 100644 --- a/search/all_1.js +++ b/search/all_1.js @@ -1,9 +1,5 @@ var searchData= [ - ['addressing_20format_3a_20understanding_20addressing_20and_20topology_0',['Addressing Format: Understanding Addressing and Topology',['../md_docs_addressing.html',1,'']]], - ['addressing_2emd_1',['addressing.md',['../addressing_8md.html',1,'']]], - ['addressofpipe_2',['addressOfPipe',['../classESBNetwork.html#aac2bef365c0cf9e4b12492f36d163ed8',1,'ESBNetwork']]], - ['advanced_20configuration_3',['Advanced Configuration',['../md_docs_advanced_config.html',1,'']]], - ['advanced_5fconfig_2emd_4',['advanced_config.md',['../advanced__config_8md.html',1,'']]], - ['available_5',['available',['../classESBNetwork.html#a40bcc2562b1faf1c72eccf52efa1f5cd',1,'ESBNetwork']]] + ['2_0',['Example 2',['../md_docs_2tuning.html#autotoc_md31',1,'']]], + ['2023_20api_20changes_1',['News - 2023 API Changes',['../index.html#autotoc_md9',1,'']]] ]; diff --git a/search/all_10.js b/search/all_10.js index d60df9f4..d1b97253 100644 --- a/search/all_10.js +++ b/search/all_10.js @@ -1,4 +1,9 @@ var searchData= [ - ['write_0',['write',['../classESBNetwork.html#af53965174dcc8f7bdbec70046f5e72bf',1,'ESBNetwork::write(RF24NetworkHeader &header, const void *message, uint16_t len)'],['../classESBNetwork.html#a1170b3e9e3c606daf17d1be45c9497db',1,'ESBNetwork::write(RF24NetworkHeader &header, const void *message, uint16_t len, uint16_t writeDirect)']]] + ['parent_0',['parent',['../classESBNetwork.html#aee407cd116e3157f6e81a191e8e46a0a',1,'ESBNetwork']]], + ['peek_1',['peek',['../classESBNetwork.html#aaab290edc4485315a36de4c9e17a4134',1,'ESBNetwork::peek(RF24NetworkHeader &header)'],['../classESBNetwork.html#a583d2e7096d502e97b5e9b12d935f711',1,'ESBNetwork::peek(RF24NetworkHeader &header, void *message, uint16_t maxlen=MAX_PAYLOAD_SIZE)']]], + ['performance_20and_20data_20loss_3a_20tuning_20the_20network_2',['Performance and Data Loss: Tuning the Network',['../md_docs_2tuning.html',1,'']]], + ['provide_3',['The layer does not provide',['../index.html#autotoc_md12',1,'']]], + ['provides_4',['The layer provides',['../index.html#autotoc_md11',1,'']]], + ['purpose_20goal_5',['Purpose/Goal',['../index.html#autotoc_md8',1,'']]] ]; diff --git a/search/all_11.js b/search/all_11.js index 6641c200..f4a11db6 100644 --- a/search/all_11.js +++ b/search/all_11.js @@ -1,4 +1,23 @@ var searchData= [ - ['zigabee_2emd_0',['zigabee.md',['../zigabee_8md.html',1,'']]] + ['radio_20communication_20and_20topology_0',['Understanding Radio Communication and Topology',['../md_docs_2tuning.html#autotoc_md21',1,'']]], + ['radios_1',['Network Layer for RF24 Radios',['../index.html',1,'']]], + ['read_2',['read',['../classESBNetwork.html#ad3959000f609c598f9b98106f3f85f7b',1,'ESBNetwork']]], + ['reserved_3',['reserved',['../structRF24NetworkHeader.html#a80672a22cedcf24db8abbcef2eea9cfd',1,'RF24NetworkHeader']]], + ['reserved_20system_20message_20types_4',['Reserved System Message Types',['../group__DEFINED__TYPES.html',1,'']]], + ['retry_20count_20and_20extended_20timeouts_5',['Auto-Retry Count and Extended Timeouts',['../md_docs_2tuning.html#autotoc_md28',1,'']]], + ['retry_20timing_6',['Auto-Retry Timing',['../md_docs_2tuning.html#autotoc_md27',1,'']]], + ['returnsysmsgs_7',['returnSysMsgs',['../classESBNetwork.html#a38f2b8e2665e9512e6953992cf08888f',1,'ESBNetwork']]], + ['rf24_20radios_8',['Network Layer for RF24 Radios',['../index.html',1,'']]], + ['rf24network_9',['RF24Network',['../RF24Network_8h.html#a014b0acbf07d381d57645ae9153288b6',1,'RF24Network: RF24Network.h'],['../md_docs_2tuning.html#autotoc_md22',1,'Topology of RF24Network']]], + ['rf24network_20addresses_20in_20ip_20format_10',['Expressing RF24Network addresses in IP format',['../md_docs_2tuning.html#autotoc_md23',1,'']]], + ['rf24network_2ecpp_11',['RF24Network.cpp',['../RF24Network_8cpp.html',1,'']]], + ['rf24network_2eh_12',['RF24Network.h',['../RF24Network_8h.html',1,'']]], + ['rf24network_5fconfig_2eh_13',['RF24Network_config.h',['../RF24Network__config_8h.html',1,'']]], + ['rf24networkframe_14',['RF24NetworkFrame',['../structRF24NetworkFrame.html',1,'RF24NetworkFrame'],['../structRF24NetworkFrame.html#af6598f176be18e6c64173627674672f2',1,'RF24NetworkFrame::RF24NetworkFrame()'],['../structRF24NetworkFrame.html#a184eb90d3503111aada5f54f66ed88fb',1,'RF24NetworkFrame::RF24NetworkFrame(RF24NetworkHeader &_header, const void *_message=NULL, uint16_t _len=0)'],['../structRF24NetworkFrame.html#a057d001f6896cb43d55619f73c8f43b6',1,'RF24NetworkFrame::RF24NetworkFrame(RF24NetworkHeader &_header, uint16_t _message_size)']]], + ['rf24networkheader_15',['RF24NetworkHeader',['../structRF24NetworkHeader.html',1,'RF24NetworkHeader'],['../structRF24NetworkHeader.html#aacf67806892c3bbcacfbff2554b64fd5',1,'RF24NetworkHeader::RF24NetworkHeader()'],['../structRF24NetworkHeader.html#a99e675f31589d72cf2fe036e77988026',1,'RF24NetworkHeader::RF24NetworkHeader(uint16_t _to, unsigned char _type=0)']]], + ['rf24networkmulticast_16',['RF24NetworkMulticast',['../RF24Network__config_8h.html#afa838938e02d347e06289d76ed8f2bf0',1,'RF24Network_config.h']]], + ['routetimeout_17',['routeTimeout',['../classESBNetwork.html#a657d583b2f6ae0ec61a6fa771431470a',1,'ESBNetwork']]], + ['routing_18',['Routing',['../md_docs_2tuning.html#autotoc_md25',1,'']]], + ['routing_20is_20handled_19',['How routing is handled',['../index.html#autotoc_md17',1,'']]] ]; diff --git a/search/all_12.js b/search/all_12.js new file mode 100644 index 00000000..9fdb3b82 --- /dev/null +++ b/search/all_12.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['scenarios_0',['Scenarios',['../md_docs_2tuning.html#autotoc_md29',1,'']]], + ['setup_5fwatchdog_1',['setup_watchdog',['../classESBNetwork.html#a77a3c8cc72b0c5e073501ef5f3744591',1,'ESBNetwork']]], + ['similiarities_20differences_2',['Similiarities & Differences',['../md_docs_2zigabee.html#autotoc_md34',1,'']]], + ['sleepnode_3',['sleepNode',['../classESBNetwork.html#a2d92a9ed0c845df12dc4180356955ad8',1,'ESBNetwork']]], + ['slow_5faddr_5fpoll_5fresponse_4',['SLOW_ADDR_POLL_RESPONSE',['../RF24Network__config_8h.html#aff1e5ff5e11dd91d16cc45b8f73d2e94',1,'RF24Network_config.h']]], + ['starting_20up_20a_20node_5',['Starting up a node',['../index.html#autotoc_md18',1,'']]], + ['system_20message_20types_6',['Reserved System Message Types',['../group__DEFINED__TYPES.html',1,'']]] +]; diff --git a/search/all_13.js b/search/all_13.js new file mode 100644 index 00000000..72ee373a --- /dev/null +++ b/search/all_13.js @@ -0,0 +1,23 @@ +var searchData= +[ + ['the_20layer_20does_20not_20provide_0',['The layer does not provide',['../index.html#autotoc_md12',1,'']]], + ['the_20layer_20provides_1',['The layer provides',['../index.html#autotoc_md11',1,'']]], + ['the_20network_2',['Performance and Data Loss: Tuning the Network',['../md_docs_2tuning.html',1,'']]], + ['timeouts_3',['Auto-Retry Count and Extended Timeouts',['../md_docs_2tuning.html#autotoc_md28',1,'']]], + ['timing_4',['Auto-Retry Timing',['../md_docs_2tuning.html#autotoc_md27',1,'']]], + ['to_20learn_20more_5',['How to learn more',['../index.html#autotoc_md13',1,'']]], + ['to_20zigbee_6',['Comparison to ZigBee',['../md_docs_2zigabee.html',1,'']]], + ['to_5fnode_7',['to_node',['../structRF24NetworkHeader.html#adb8d6d05bb359b4b89322d15055e73a1',1,'RF24NetworkHeader']]], + ['topology_8',['Topology',['../md_docs_2addressing.html',1,'Addressing Format: Understanding Addressing and Topology'],['../index.html#autotoc_md16',1,'Octal Addressing and Topology'],['../md_docs_2tuning.html#autotoc_md21',1,'Understanding Radio Communication and Topology']]], + ['topology_20for_20mesh_20networks_20using_20nrf24l01_9',['Topology for Mesh Networks using nRF24L01(+)',['../index.html#autotoc_md15',1,'']]], + ['topology_20of_20rf24network_10',['Topology of RF24Network',['../md_docs_2tuning.html#autotoc_md22',1,'']]], + ['tostring_11',['toString',['../structRF24NetworkHeader.html#a70efc9fd32fd3f73a98d96f57c04c815',1,'RF24NetworkHeader']]], + ['tuning_20overview_12',['Tuning Overview',['../md_docs_2tuning.html#autotoc_md26',1,'']]], + ['tuning_20the_20network_13',['Performance and Data Loss: Tuning the Network',['../md_docs_2tuning.html',1,'']]], + ['tuning_2emd_14',['tuning.md',['../tuning_8md.html',1,'']]], + ['tx_5fnormal_15',['TX_NORMAL',['../RF24Network_8h.html#ad0da85e1332b474b17de9b77d580bd73',1,'RF24Network.h']]], + ['tx_5frouted_16',['TX_ROUTED',['../RF24Network_8h.html#aea221535d8326d4ea6a483c9715a5d0c',1,'RF24Network.h']]], + ['txtimeout_17',['txTimeout',['../classESBNetwork.html#a93188f3c0600e0b5f0e3d5e57eb86513',1,'ESBNetwork']]], + ['type_18',['type',['../structRF24NetworkHeader.html#ac99ab14e561670f4445d1fea7775e2db',1,'RF24NetworkHeader']]], + ['types_19',['Reserved System Message Types',['../group__DEFINED__TYPES.html',1,'']]] +]; diff --git a/search/all_14.js b/search/all_14.js new file mode 100644 index 00000000..c1f9b5d1 --- /dev/null +++ b/search/all_14.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['understanding_20addressing_20and_20topology_0',['Addressing Format: Understanding Addressing and Topology',['../md_docs_2addressing.html',1,'']]], + ['understanding_20radio_20communication_20and_20topology_1',['Understanding Radio Communication and Topology',['../md_docs_2tuning.html#autotoc_md21',1,'']]], + ['up_20a_20node_2',['Starting up a node',['../index.html#autotoc_md18',1,'']]], + ['update_3',['update',['../classESBNetwork.html#a828adf45c3b8a82b08644510f29a32d3',1,'ESBNetwork']]], + ['use_5fcurrent_5fchannel_4',['USE_CURRENT_CHANNEL',['../RF24Network_8h.html#a3701f6ea99dcf399641f2ad29303f8cc',1,'RF24Network.h']]], + ['user_5ftx_5fmulticast_5',['USER_TX_MULTICAST',['../RF24Network_8h.html#ae2f8b695f040aa6f1e8ec92b438aa303',1,'RF24Network.h']]], + ['user_5ftx_5fto_5flogical_5faddress_6',['USER_TX_TO_LOGICAL_ADDRESS',['../RF24Network_8h.html#a4726586dd8fbf75bbfffffd18ebdbeb3',1,'RF24Network.h']]], + ['user_5ftx_5fto_5fphysical_5faddress_7',['USER_TX_TO_PHYSICAL_ADDRESS',['../RF24Network_8h.html#afbef4cc504fbd93102265ff8d01cbafc',1,'RF24Network.h']]], + ['using_20nrf24l01_8',['Topology for Mesh Networks using nRF24L01(+)',['../index.html#autotoc_md15',1,'']]] +]; diff --git a/search/all_15.js b/search/all_15.js new file mode 100644 index 00000000..ae89ba34 --- /dev/null +++ b/search/all_15.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['which_20is_20better_0',['Which is better?',['../md_docs_2zigabee.html#autotoc_md33',1,'']]], + ['write_1',['write',['../classESBNetwork.html#af53965174dcc8f7bdbec70046f5e72bf',1,'ESBNetwork::write(RF24NetworkHeader &header, const void *message, uint16_t len)'],['../classESBNetwork.html#a1170b3e9e3c606daf17d1be45c9497db',1,'ESBNetwork::write(RF24NetworkHeader &header, const void *message, uint16_t len, uint16_t writeDirect)']]] +]; diff --git a/search/all_16.js b/search/all_16.js new file mode 100644 index 00000000..984e9a07 --- /dev/null +++ b/search/all_16.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['zigabee_2emd_0',['zigabee.md',['../zigabee_8md.html',1,'']]], + ['zigbee_1',['Comparison to ZigBee',['../md_docs_2zigabee.html',1,'']]] +]; diff --git a/search/all_2.js b/search/all_2.js index a72c1f89..5730c80e 100644 --- a/search/all_2.js +++ b/search/all_2.js @@ -1,4 +1,4 @@ var searchData= [ - ['begin_0',['begin',['../classESBNetwork.html#a48195ce31a771672723628579c6c80f5',1,'ESBNetwork::begin(uint16_t _node_address)'],['../classESBNetwork.html#ab2bf0e2d6c4e5b976f7d0f10c5789f2b',1,'ESBNetwork::begin(uint8_t _channel, uint16_t _node_address)']]] + ['_5fmulticast_5flevel_0',['_multicast_level',['../classESBNetwork.html#aab52703c149001e4d3e1ae7c8311f8e0',1,'ESBNetwork']]] ]; diff --git a/search/all_3.js b/search/all_3.js index 521e2435..abf0bacd 100644 --- a/search/all_3.js +++ b/search/all_3.js @@ -1,6 +1,25 @@ var searchData= [ - ['comparison_20to_20zigbee_0',['Comparison to ZigBee',['../md_docs_zigabee.html',1,'']]], - ['contributing_1',['CONTRIBUTING',['../md_CONTRIBUTING.html',1,'']]], - ['contributing_2emd_2',['CONTRIBUTING.md',['../CONTRIBUTING_8md.html',1,'']]] + ['a_20node_0',['Starting up a node',['../index.html#autotoc_md18',1,'']]], + ['add_20ons_1',['Additional Information & Add-ons',['../index.html#autotoc_md14',1,'']]], + ['additional_20information_20add_20ons_2',['Additional Information & Add-ons',['../index.html#autotoc_md14',1,'']]], + ['addresses_3',['Addresses',['../md_docs_2addressing.html#autotoc_md3',1,'Available Addresses'],['../md_docs_2addressing.html#autotoc_md5',1,'Displaying Addresses']]], + ['addresses_20in_20ip_20format_4',['Expressing RF24Network addresses in IP format',['../md_docs_2tuning.html#autotoc_md23',1,'']]], + ['addressing_20and_20topology_5',['Octal Addressing and Topology',['../index.html#autotoc_md16',1,'']]], + ['addressing_20format_3a_20understanding_20addressing_20and_20topology_6',['Addressing Format: Understanding Addressing and Topology',['../md_docs_2addressing.html',1,'']]], + ['addressing_2emd_7',['addressing.md',['../addressing_8md.html',1,'']]], + ['addressofpipe_8',['addressOfPipe',['../classESBNetwork.html#aac2bef365c0cf9e4b12492f36d163ed8',1,'ESBNetwork']]], + ['advanced_20configuration_9',['Advanced Configuration',['../md_docs_2advanced__config.html',1,'']]], + ['advanced_5fconfig_2emd_10',['advanced_config.md',['../advanced__config_8md.html',1,'']]], + ['and_20binary_11',['Decimal, Octal and Binary',['../md_docs_2addressing.html#autotoc_md4',1,'']]], + ['and_20binary_20formats_12',['Decimal, Octal and Binary formats',['../md_docs_2addressing.html#autotoc_md2',1,'']]], + ['and_20data_20loss_3a_20tuning_20the_20network_13',['Performance and Data Loss: Tuning the Network',['../md_docs_2tuning.html',1,'']]], + ['and_20extended_20timeouts_14',['Auto-Retry Count and Extended Timeouts',['../md_docs_2tuning.html#autotoc_md28',1,'']]], + ['and_20topology_15',['Addressing Format: Understanding Addressing and Topology',['../md_docs_2addressing.html',1,'']]], + ['and_20topology_16',['And Topology',['../index.html#autotoc_md16',1,'Octal Addressing and Topology'],['../md_docs_2tuning.html#autotoc_md21',1,'Understanding Radio Communication and Topology']]], + ['api_20changes_17',['News - 2023 API Changes',['../index.html#autotoc_md9',1,'']]], + ['auto_20retry_20count_20and_20extended_20timeouts_18',['Auto-Retry Count and Extended Timeouts',['../md_docs_2tuning.html#autotoc_md28',1,'']]], + ['auto_20retry_20timing_19',['Auto-Retry Timing',['../md_docs_2tuning.html#autotoc_md27',1,'']]], + ['available_20',['available',['../classESBNetwork.html#a40bcc2562b1faf1c72eccf52efa1f5cd',1,'ESBNetwork']]], + ['available_20addresses_21',['Available Addresses',['../md_docs_2addressing.html#autotoc_md3',1,'']]] ]; diff --git a/search/all_4.js b/search/all_4.js index 4d858458..d3358532 100644 --- a/search/all_4.js +++ b/search/all_4.js @@ -1,4 +1,7 @@ var searchData= [ - ['deprecated_20list_0',['Deprecated List',['../deprecated.html',1,'']]] + ['begin_0',['begin',['../classESBNetwork.html#a48195ce31a771672723628579c6c80f5',1,'ESBNetwork::begin(uint16_t _node_address)'],['../classESBNetwork.html#ab2bf0e2d6c4e5b976f7d0f10c5789f2b',1,'ESBNetwork::begin(uint8_t _channel, uint16_t _node_address)']]], + ['better_1',['Which is better?',['../md_docs_2zigabee.html#autotoc_md33',1,'']]], + ['binary_2',['Decimal, Octal and Binary',['../md_docs_2addressing.html#autotoc_md4',1,'']]], + ['binary_20formats_3',['Decimal, Octal and Binary formats',['../md_docs_2addressing.html#autotoc_md2',1,'']]] ]; diff --git a/search/all_5.js b/search/all_5.js index bd590905..45b8266b 100644 --- a/search/all_5.js +++ b/search/all_5.js @@ -1,7 +1,10 @@ var searchData= [ - ['enable_5fdynamic_5fpayloads_0',['ENABLE_DYNAMIC_PAYLOADS',['../RF24Network__config_8h.html#ad899459e243820796dd98c2afb044218',1,'RF24Network_config.h']]], - ['esbnetwork_1',['ESBNetwork',['../classESBNetwork.html',1,'ESBNetwork< radio_t >'],['../classESBNetwork.html#a0ac71a8989fe3d7cdc86b1bb538a8251',1,'ESBNetwork::ESBNetwork()']]], - ['external_5fdata_5ftype_2',['EXTERNAL_DATA_TYPE',['../group__DEFINED__TYPES.html#gac6bbd2772e776d10ca7c5f3c7eddf982',1,'RF24Network.h']]], - ['external_5fqueue_3',['external_queue',['../classESBNetwork.html#a1af1d7e26417c772adb897122d4368f1',1,'ESBNetwork']]] + ['changes_0',['News - 2023 API Changes',['../index.html#autotoc_md9',1,'']]], + ['communication_20and_20topology_1',['Understanding Radio Communication and Topology',['../md_docs_2tuning.html#autotoc_md21',1,'']]], + ['comparison_20to_20zigbee_2',['Comparison to ZigBee',['../md_docs_2zigabee.html',1,'']]], + ['configuration_3',['Advanced Configuration',['../md_docs_2advanced__config.html',1,'']]], + ['contributing_4',['CONTRIBUTING',['../md_CONTRIBUTING.html',1,'']]], + ['contributing_2emd_5',['CONTRIBUTING.md',['../CONTRIBUTING_8md.html',1,'']]], + ['count_20and_20extended_20timeouts_6',['Auto-Retry Count and Extended Timeouts',['../md_docs_2tuning.html#autotoc_md28',1,'']]] ]; diff --git a/search/all_6.js b/search/all_6.js index 26e8fc37..cf40ac66 100644 --- a/search/all_6.js +++ b/search/all_6.js @@ -1,10 +1,11 @@ var searchData= [ - ['failures_0',['failures',['../classESBNetwork.html#a7b4a446024163631477abf6bb641d759',1,'ESBNetwork']]], - ['flag_5ffast_5ffrag_1',['FLAG_FAST_FRAG',['../RF24Network_8h.html#a00fc52e4f9f6e4716c365bf201163b7e',1,'RF24Network.h']]], - ['flag_5fno_5fpoll_2',['FLAG_NO_POLL',['../RF24Network_8h.html#a4b3df085f3e9afddfa6d9647cd142c44',1,'RF24Network.h']]], - ['frag_5fptr_3',['frag_ptr',['../classESBNetwork.html#aa68d02f91212108906bac54f6d141e7e',1,'ESBNetwork']]], - ['frame_5fbuffer_4',['frame_buffer',['../classESBNetwork.html#ac31a18d03d70371890d16d242a341631',1,'ESBNetwork']]], - ['frame_5fheader_5fsize_5',['FRAME_HEADER_SIZE',['../RF24Network_8h.html#a6a4e3b4099bd5e93bfec5835b2379eb8',1,'RF24Network.h']]], - ['from_5fnode_6',['from_node',['../structRF24NetworkHeader.html#aff9461f6546b5b7c87465809eb4f9f56',1,'RF24NetworkHeader']]] + ['data_20loss_3a_20tuning_20the_20network_0',['Performance and Data Loss: Tuning the Network',['../md_docs_2tuning.html',1,'']]], + ['decimal_20octal_20and_20binary_1',['Decimal, Octal and Binary',['../md_docs_2addressing.html#autotoc_md4',1,'']]], + ['decimal_20octal_20and_20binary_20formats_2',['Decimal, Octal and Binary formats',['../md_docs_2addressing.html#autotoc_md2',1,'']]], + ['deprecated_20list_3',['Deprecated List',['../deprecated.html',1,'']]], + ['differences_4',['Similiarities & Differences',['../md_docs_2zigabee.html#autotoc_md34',1,'']]], + ['directionality_5',['Directionality',['../index.html#autotoc_md19',1,'']]], + ['displaying_20addresses_6',['Displaying Addresses',['../md_docs_2addressing.html#autotoc_md5',1,'']]], + ['does_20not_20provide_7',['The layer does not provide',['../index.html#autotoc_md12',1,'']]] ]; diff --git a/search/all_7.js b/search/all_7.js index a005a59c..2e457116 100644 --- a/search/all_7.js +++ b/search/all_7.js @@ -1,4 +1,11 @@ var searchData= [ - ['header_0',['header',['../structRF24NetworkFrame.html#a4b4bfaf451ededfb78e116d5abe17bcc',1,'RF24NetworkFrame']]] + ['enable_5fdynamic_5fpayloads_0',['ENABLE_DYNAMIC_PAYLOADS',['../RF24Network__config_8h.html#ad899459e243820796dd98c2afb044218',1,'RF24Network_config.h']]], + ['esbnetwork_1',['ESBNetwork',['../classESBNetwork.html',1,'ESBNetwork< radio_t >'],['../classESBNetwork.html#a0ac71a8989fe3d7cdc86b1bb538a8251',1,'ESBNetwork::ESBNetwork()']]], + ['example_201_2',['Example 1',['../md_docs_2tuning.html#autotoc_md30',1,'']]], + ['example_202_3',['Example 2',['../md_docs_2tuning.html#autotoc_md31',1,'']]], + ['expressing_20rf24network_20addresses_20in_20ip_20format_4',['Expressing RF24Network addresses in IP format',['../md_docs_2tuning.html#autotoc_md23',1,'']]], + ['extended_20timeouts_5',['Auto-Retry Count and Extended Timeouts',['../md_docs_2tuning.html#autotoc_md28',1,'']]], + ['external_5fdata_5ftype_6',['EXTERNAL_DATA_TYPE',['../group__DEFINED__TYPES.html#gac6bbd2772e776d10ca7c5f3c7eddf982',1,'RF24Network.h']]], + ['external_5fqueue_7',['external_queue',['../classESBNetwork.html#a1af1d7e26417c772adb897122d4368f1',1,'ESBNetwork']]] ]; diff --git a/search/all_8.js b/search/all_8.js index 919b4359..b5e7a93f 100644 --- a/search/all_8.js +++ b/search/all_8.js @@ -1,5 +1,16 @@ var searchData= [ - ['id_0',['id',['../structRF24NetworkHeader.html#ad05daaac28b7d1e7a7ef749f7f0ce317',1,'RF24NetworkHeader']]], - ['is_5fvalid_5faddress_1',['is_valid_address',['../classESBNetwork.html#ab09e06857bfa68fdbd93f31e27ac07d7',1,'ESBNetwork']]] + ['failures_0',['failures',['../classESBNetwork.html#a7b4a446024163631477abf6bb641d759',1,'ESBNetwork']]], + ['features_1',['Features',['../index.html#autotoc_md10',1,'']]], + ['flag_5ffast_5ffrag_2',['FLAG_FAST_FRAG',['../RF24Network_8h.html#a00fc52e4f9f6e4716c365bf201163b7e',1,'RF24Network.h']]], + ['flag_5fno_5fpoll_3',['FLAG_NO_POLL',['../RF24Network_8h.html#a4b3df085f3e9afddfa6d9647cd142c44',1,'RF24Network.h']]], + ['for_20mesh_20networks_20using_20nrf24l01_4',['Topology for Mesh Networks using nRF24L01(+)',['../index.html#autotoc_md15',1,'']]], + ['for_20rf24_20radios_5',['Network Layer for RF24 Radios',['../index.html',1,'']]], + ['format_6',['Expressing RF24Network addresses in IP format',['../md_docs_2tuning.html#autotoc_md23',1,'']]], + ['format_3a_20understanding_20addressing_20and_20topology_7',['Addressing Format: Understanding Addressing and Topology',['../md_docs_2addressing.html',1,'']]], + ['formats_8',['Decimal, Octal and Binary formats',['../md_docs_2addressing.html#autotoc_md2',1,'']]], + ['frag_5fptr_9',['frag_ptr',['../classESBNetwork.html#aa68d02f91212108906bac54f6d141e7e',1,'ESBNetwork']]], + ['frame_5fbuffer_10',['frame_buffer',['../classESBNetwork.html#ac31a18d03d70371890d16d242a341631',1,'ESBNetwork']]], + ['frame_5fheader_5fsize_11',['FRAME_HEADER_SIZE',['../RF24Network_8h.html#a6a4e3b4099bd5e93bfec5835b2379eb8',1,'RF24Network.h']]], + ['from_5fnode_12',['from_node',['../structRF24NetworkHeader.html#aff9461f6546b5b7c87465809eb4f9f56',1,'RF24NetworkHeader']]] ]; diff --git a/search/all_9.js b/search/all_9.js index a49c703c..98204128 100644 --- a/search/all_9.js +++ b/search/all_9.js @@ -1,14 +1,4 @@ var searchData= [ - ['main_5fbuffer_5fsize_0',['MAIN_BUFFER_SIZE',['../RF24Network__config_8h.html#a7d4c071d4189c387b2d764a6a4b9283c',1,'RF24Network_config.h']]], - ['main_5fpage_2emd_1',['main_page.md',['../main__page_8md.html',1,'']]], - ['max_5fframe_5fsize_2',['MAX_FRAME_SIZE',['../RF24Network_8h.html#ad15d35a0d29a9dbf9324e3859ce3b008',1,'RF24Network.h']]], - ['max_5fpayload_5fsize_3',['MAX_PAYLOAD_SIZE',['../RF24Network__config_8h.html#a6303f7392a2d06be5a121c54278d561b',1,'RF24Network_config.h']]], - ['max_5fuser_5fdefined_5fheader_5ftype_4',['MAX_USER_DEFINED_HEADER_TYPE',['../RF24Network_8h.html#af181b456ebc98935b7a5039e86a537a5',1,'RF24Network.h']]], - ['message_5fbuffer_5',['message_buffer',['../structRF24NetworkFrame.html#a2ca805d90caa7aef8005fafd2c55fbc6',1,'RF24NetworkFrame']]], - ['message_5fsize_6',['message_size',['../structRF24NetworkFrame.html#a6d44701fc5ef58ed6f674fde132bedff',1,'RF24NetworkFrame']]], - ['min_5fuser_5fdefined_5fheader_5ftype_7',['MIN_USER_DEFINED_HEADER_TYPE',['../RF24Network_8h.html#a09198484bcfa0f13c7499304ce8bb6a7',1,'RF24Network.h']]], - ['multicast_8',['multicast',['../classESBNetwork.html#a3e6e9e74461290d6f648e972ee4aaf91',1,'ESBNetwork']]], - ['multicastlevel_9',['multicastLevel',['../classESBNetwork.html#a3c2b5449bd374c0d5a6ae11e3b4f1c02',1,'ESBNetwork']]], - ['multicastrelay_10',['multicastRelay',['../classESBNetwork.html#ad9b7bd82837e7a92f4dde9754fb4d03f',1,'ESBNetwork']]] + ['goal_0',['Purpose/Goal',['../index.html#autotoc_md8',1,'']]] ]; diff --git a/search/all_a.js b/search/all_a.js index 62a0eeb5..cd7899b8 100644 --- a/search/all_a.js +++ b/search/all_a.js @@ -1,19 +1,7 @@ var searchData= [ - ['network_20layer_20for_20rf24_20radios_0',['Network Layer for RF24 Radios',['../index.html',1,'']]], - ['network_5fack_1',['NETWORK_ACK',['../group__DEFINED__TYPES.html#gac60baa80629bef34c13bd6a171f278c7',1,'RF24Network.h']]], - ['network_5faddr_5fresponse_2',['NETWORK_ADDR_RESPONSE',['../group__DEFINED__TYPES.html#ga25ad7c77b5ffa6acd7a5d9002a25a71b',1,'RF24Network.h']]], - ['network_5fauto_5frouting_3',['NETWORK_AUTO_ROUTING',['../RF24Network__config_8h.html#acd1e22fa0e2085482a2049c6339b53dc',1,'RF24Network_config.h']]], - ['network_5fdefault_5faddress_4',['NETWORK_DEFAULT_ADDRESS',['../RF24Network__config_8h.html#ad24658d1cd8d37f7bd9f78f79624f81e',1,'RF24Network_config.h']]], - ['network_5ffirst_5ffragment_5',['NETWORK_FIRST_FRAGMENT',['../group__DEFINED__TYPES.html#gaf9101b6aa5fd99550576e17cb10dbc4f',1,'RF24Network.h']]], - ['network_5flast_5ffragment_6',['NETWORK_LAST_FRAGMENT',['../group__DEFINED__TYPES.html#ga4df95ef2c4f33361e28e47219c5f07fa',1,'RF24Network.h']]], - ['network_5fmore_5ffragments_7',['NETWORK_MORE_FRAGMENTS',['../group__DEFINED__TYPES.html#ga93ad5d5d56e908110f0769eb96679633',1,'RF24Network.h']]], - ['network_5fmore_5ffragments_5fnack_8',['NETWORK_MORE_FRAGMENTS_NACK',['../RF24Network_8h.html#a359c70d3c925dc46c47efa65b3850e47',1,'RF24Network.h']]], - ['network_5fmulticast_5faddress_9',['NETWORK_MULTICAST_ADDRESS',['../RF24Network__config_8h.html#a9384801ca5f2283143ab651994179e8c',1,'RF24Network_config.h']]], - ['network_5fping_10',['NETWORK_PING',['../group__DEFINED__TYPES.html#gae678555396e5ea61506a0484cb2e0260',1,'RF24Network.h']]], - ['network_5fpoll_11',['NETWORK_POLL',['../group__DEFINED__TYPES.html#ga8cbda56553334074392866d4b8359388',1,'RF24Network.h']]], - ['network_5freq_5faddress_12',['NETWORK_REQ_ADDRESS',['../group__DEFINED__TYPES.html#gadb43d169421055bc8a3e7da428da1c30',1,'RF24Network.h']]], - ['networkflags_13',['networkFlags',['../classESBNetwork.html#a9d4ab7fc671cdb2573535bfd0c9e2050',1,'ESBNetwork']]], - ['next_5fid_14',['next_id',['../structRF24NetworkHeader.html#af02a00fa410f6c34bb395f7d0afe2bfd',1,'RF24NetworkHeader']]], - ['node_5faddress_15',['node_address',['../classESBNetwork.html#a3e5aa077d46a74acd31ca5242bb0c0a4',1,'ESBNetwork']]] + ['handled_0',['How routing is handled',['../index.html#autotoc_md17',1,'']]], + ['header_1',['header',['../structRF24NetworkFrame.html#a4b4bfaf451ededfb78e116d5abe17bcc',1,'RF24NetworkFrame']]], + ['how_20routing_20is_20handled_2',['How routing is handled',['../index.html#autotoc_md17',1,'']]], + ['how_20to_20learn_20more_3',['How to learn more',['../index.html#autotoc_md13',1,'']]] ]; diff --git a/search/all_b.js b/search/all_b.js index 75e7f965..16befd6b 100644 --- a/search/all_b.js +++ b/search/all_b.js @@ -1,6 +1,10 @@ var searchData= [ - ['parent_0',['parent',['../classESBNetwork.html#aee407cd116e3157f6e81a191e8e46a0a',1,'ESBNetwork']]], - ['peek_1',['peek',['../classESBNetwork.html#aaab290edc4485315a36de4c9e17a4134',1,'ESBNetwork::peek(RF24NetworkHeader &header)'],['../classESBNetwork.html#a583d2e7096d502e97b5e9b12d935f711',1,'ESBNetwork::peek(RF24NetworkHeader &header, void *message, uint16_t maxlen=MAX_PAYLOAD_SIZE)']]], - ['performance_20and_20data_20loss_3a_20tuning_20the_20network_2',['Performance and Data Loss: Tuning the Network',['../md_docs_tuning.html',1,'']]] + ['id_0',['id',['../structRF24NetworkHeader.html#ad05daaac28b7d1e7a7ef749f7f0ce317',1,'RF24NetworkHeader']]], + ['in_20ip_20format_1',['Expressing RF24Network addresses in IP format',['../md_docs_2tuning.html#autotoc_md23',1,'']]], + ['information_20add_20ons_2',['Additional Information & Add-ons',['../index.html#autotoc_md14',1,'']]], + ['ip_20format_3',['Expressing RF24Network addresses in IP format',['../md_docs_2tuning.html#autotoc_md23',1,'']]], + ['is_20better_4',['Which is better?',['../md_docs_2zigabee.html#autotoc_md33',1,'']]], + ['is_20handled_5',['How routing is handled',['../index.html#autotoc_md17',1,'']]], + ['is_5fvalid_5faddress_6',['is_valid_address',['../classESBNetwork.html#ab09e06857bfa68fdbd93f31e27ac07d7',1,'ESBNetwork']]] ]; diff --git a/search/all_c.js b/search/all_c.js index 43e00fee..5c99a3c1 100644 --- a/search/all_c.js +++ b/search/all_c.js @@ -1,15 +1,9 @@ var searchData= [ - ['read_0',['read',['../classESBNetwork.html#ad3959000f609c598f9b98106f3f85f7b',1,'ESBNetwork']]], - ['reserved_1',['reserved',['../structRF24NetworkHeader.html#a80672a22cedcf24db8abbcef2eea9cfd',1,'RF24NetworkHeader']]], - ['reserved_20system_20message_20types_2',['Reserved System Message Types',['../group__DEFINED__TYPES.html',1,'']]], - ['returnsysmsgs_3',['returnSysMsgs',['../classESBNetwork.html#a38f2b8e2665e9512e6953992cf08888f',1,'ESBNetwork']]], - ['rf24network_4',['RF24Network',['../RF24Network_8h.html#a014b0acbf07d381d57645ae9153288b6',1,'RF24Network.h']]], - ['rf24network_2ecpp_5',['RF24Network.cpp',['../RF24Network_8cpp.html',1,'']]], - ['rf24network_2eh_6',['RF24Network.h',['../RF24Network_8h.html',1,'']]], - ['rf24network_5fconfig_2eh_7',['RF24Network_config.h',['../RF24Network__config_8h.html',1,'']]], - ['rf24networkframe_8',['RF24NetworkFrame',['../structRF24NetworkFrame.html#af6598f176be18e6c64173627674672f2',1,'RF24NetworkFrame::RF24NetworkFrame()'],['../structRF24NetworkFrame.html#a057d001f6896cb43d55619f73c8f43b6',1,'RF24NetworkFrame::RF24NetworkFrame(RF24NetworkHeader &_header, uint16_t _message_size)'],['../structRF24NetworkFrame.html#a184eb90d3503111aada5f54f66ed88fb',1,'RF24NetworkFrame::RF24NetworkFrame(RF24NetworkHeader &_header, const void *_message=NULL, uint16_t _len=0)'],['../structRF24NetworkFrame.html',1,'RF24NetworkFrame']]], - ['rf24networkheader_9',['RF24NetworkHeader',['../structRF24NetworkHeader.html#aacf67806892c3bbcacfbff2554b64fd5',1,'RF24NetworkHeader::RF24NetworkHeader()'],['../structRF24NetworkHeader.html#a99e675f31589d72cf2fe036e77988026',1,'RF24NetworkHeader::RF24NetworkHeader(uint16_t _to, unsigned char _type=0)'],['../structRF24NetworkHeader.html',1,'RF24NetworkHeader']]], - ['rf24networkmulticast_10',['RF24NetworkMulticast',['../RF24Network__config_8h.html#afa838938e02d347e06289d76ed8f2bf0',1,'RF24Network_config.h']]], - ['routetimeout_11',['routeTimeout',['../classESBNetwork.html#a657d583b2f6ae0ec61a6fa771431470a',1,'ESBNetwork']]] + ['layer_20does_20not_20provide_0',['The layer does not provide',['../index.html#autotoc_md12',1,'']]], + ['layer_20for_20rf24_20radios_1',['Network Layer for RF24 Radios',['../index.html',1,'']]], + ['layer_20provides_2',['The layer provides',['../index.html#autotoc_md11',1,'']]], + ['learn_20more_3',['How to learn more',['../index.html#autotoc_md13',1,'']]], + ['list_4',['Deprecated List',['../deprecated.html',1,'']]], + ['loss_3a_20tuning_20the_20network_5',['Performance and Data Loss: Tuning the Network',['../md_docs_2tuning.html',1,'']]] ]; diff --git a/search/all_d.js b/search/all_d.js index 603e8c1a..cff980e2 100644 --- a/search/all_d.js +++ b/search/all_d.js @@ -1,6 +1,18 @@ var searchData= [ - ['setup_5fwatchdog_0',['setup_watchdog',['../classESBNetwork.html#a77a3c8cc72b0c5e073501ef5f3744591',1,'ESBNetwork']]], - ['sleepnode_1',['sleepNode',['../classESBNetwork.html#a2d92a9ed0c845df12dc4180356955ad8',1,'ESBNetwork']]], - ['slow_5faddr_5fpoll_5fresponse_2',['SLOW_ADDR_POLL_RESPONSE',['../RF24Network__config_8h.html#aff1e5ff5e11dd91d16cc45b8f73d2e94',1,'RF24Network_config.h']]] + ['main_5fbuffer_5fsize_0',['MAIN_BUFFER_SIZE',['../RF24Network__config_8h.html#a7d4c071d4189c387b2d764a6a4b9283c',1,'RF24Network_config.h']]], + ['main_5fpage_2emd_1',['main_page.md',['../main__page_8md.html',1,'']]], + ['max_5fframe_5fsize_2',['MAX_FRAME_SIZE',['../RF24Network_8h.html#ad15d35a0d29a9dbf9324e3859ce3b008',1,'RF24Network.h']]], + ['max_5fpayload_5fsize_3',['MAX_PAYLOAD_SIZE',['../RF24Network__config_8h.html#a6303f7392a2d06be5a121c54278d561b',1,'RF24Network_config.h']]], + ['max_5fuser_5fdefined_5fheader_5ftype_4',['MAX_USER_DEFINED_HEADER_TYPE',['../RF24Network_8h.html#af181b456ebc98935b7a5039e86a537a5',1,'RF24Network.h']]], + ['mesh_20networks_20using_20nrf24l01_5',['Topology for Mesh Networks using nRF24L01(+)',['../index.html#autotoc_md15',1,'']]], + ['message_20types_6',['Reserved System Message Types',['../group__DEFINED__TYPES.html',1,'']]], + ['message_5fbuffer_7',['message_buffer',['../structRF24NetworkFrame.html#a2ca805d90caa7aef8005fafd2c55fbc6',1,'RF24NetworkFrame']]], + ['message_5fsize_8',['message_size',['../structRF24NetworkFrame.html#a6d44701fc5ef58ed6f674fde132bedff',1,'RF24NetworkFrame']]], + ['min_5fuser_5fdefined_5fheader_5ftype_9',['MIN_USER_DEFINED_HEADER_TYPE',['../RF24Network_8h.html#a09198484bcfa0f13c7499304ce8bb6a7',1,'RF24Network.h']]], + ['more_10',['How to learn more',['../index.html#autotoc_md13',1,'']]], + ['multicast_11',['multicast',['../classESBNetwork.html#a3e6e9e74461290d6f648e972ee4aaf91',1,'ESBNetwork']]], + ['multicast_12',['Multicast',['../md_docs_2tuning.html#autotoc_md24',1,'']]], + ['multicastlevel_13',['multicastLevel',['../classESBNetwork.html#a3c2b5449bd374c0d5a6ae11e3b4f1c02',1,'ESBNetwork']]], + ['multicastrelay_14',['multicastRelay',['../classESBNetwork.html#ad9b7bd82837e7a92f4dde9754fb4d03f',1,'ESBNetwork']]] ]; diff --git a/search/all_e.js b/search/all_e.js index 4c1bc84e..16448d5e 100644 --- a/search/all_e.js +++ b/search/all_e.js @@ -1,10 +1,28 @@ var searchData= [ - ['to_5fnode_0',['to_node',['../structRF24NetworkHeader.html#adb8d6d05bb359b4b89322d15055e73a1',1,'RF24NetworkHeader']]], - ['tostring_1',['toString',['../structRF24NetworkHeader.html#a70efc9fd32fd3f73a98d96f57c04c815',1,'RF24NetworkHeader']]], - ['tuning_2emd_2',['tuning.md',['../tuning_8md.html',1,'']]], - ['tx_5fnormal_3',['TX_NORMAL',['../RF24Network_8h.html#ad0da85e1332b474b17de9b77d580bd73',1,'RF24Network.h']]], - ['tx_5frouted_4',['TX_ROUTED',['../RF24Network_8h.html#aea221535d8326d4ea6a483c9715a5d0c',1,'RF24Network.h']]], - ['txtimeout_5',['txTimeout',['../classESBNetwork.html#a93188f3c0600e0b5f0e3d5e57eb86513',1,'ESBNetwork']]], - ['type_6',['type',['../structRF24NetworkHeader.html#ac99ab14e561670f4445d1fea7775e2db',1,'RF24NetworkHeader']]] + ['naming_0',['Node Naming',['../md_docs_2zigabee.html#autotoc_md35',1,'']]], + ['network_1',['Performance and Data Loss: Tuning the Network',['../md_docs_2tuning.html',1,'']]], + ['network_20layer_20for_20rf24_20radios_2',['Network Layer for RF24 Radios',['../index.html',1,'']]], + ['network_5fack_3',['NETWORK_ACK',['../group__DEFINED__TYPES.html#gac60baa80629bef34c13bd6a171f278c7',1,'RF24Network.h']]], + ['network_5faddr_5fresponse_4',['NETWORK_ADDR_RESPONSE',['../group__DEFINED__TYPES.html#ga25ad7c77b5ffa6acd7a5d9002a25a71b',1,'RF24Network.h']]], + ['network_5fauto_5frouting_5',['NETWORK_AUTO_ROUTING',['../RF24Network__config_8h.html#acd1e22fa0e2085482a2049c6339b53dc',1,'RF24Network_config.h']]], + ['network_5fdefault_5faddress_6',['NETWORK_DEFAULT_ADDRESS',['../RF24Network__config_8h.html#ad24658d1cd8d37f7bd9f78f79624f81e',1,'RF24Network_config.h']]], + ['network_5ffirst_5ffragment_7',['NETWORK_FIRST_FRAGMENT',['../group__DEFINED__TYPES.html#gaf9101b6aa5fd99550576e17cb10dbc4f',1,'RF24Network.h']]], + ['network_5flast_5ffragment_8',['NETWORK_LAST_FRAGMENT',['../group__DEFINED__TYPES.html#ga4df95ef2c4f33361e28e47219c5f07fa',1,'RF24Network.h']]], + ['network_5fmore_5ffragments_9',['NETWORK_MORE_FRAGMENTS',['../group__DEFINED__TYPES.html#ga93ad5d5d56e908110f0769eb96679633',1,'RF24Network.h']]], + ['network_5fmore_5ffragments_5fnack_10',['NETWORK_MORE_FRAGMENTS_NACK',['../RF24Network_8h.html#a359c70d3c925dc46c47efa65b3850e47',1,'RF24Network.h']]], + ['network_5fmulticast_5faddress_11',['NETWORK_MULTICAST_ADDRESS',['../RF24Network__config_8h.html#a9384801ca5f2283143ab651994179e8c',1,'RF24Network_config.h']]], + ['network_5fping_12',['NETWORK_PING',['../group__DEFINED__TYPES.html#gae678555396e5ea61506a0484cb2e0260',1,'RF24Network.h']]], + ['network_5fpoll_13',['NETWORK_POLL',['../group__DEFINED__TYPES.html#ga8cbda56553334074392866d4b8359388',1,'RF24Network.h']]], + ['network_5freq_5faddress_14',['NETWORK_REQ_ADDRESS',['../group__DEFINED__TYPES.html#gadb43d169421055bc8a3e7da428da1c30',1,'RF24Network.h']]], + ['networkflags_15',['networkFlags',['../classESBNetwork.html#a9d4ab7fc671cdb2573535bfd0c9e2050',1,'ESBNetwork']]], + ['networks_20using_20nrf24l01_16',['Topology for Mesh Networks using nRF24L01(+)',['../index.html#autotoc_md15',1,'']]], + ['news_202023_20api_20changes_17',['News - 2023 API Changes',['../index.html#autotoc_md9',1,'']]], + ['next_5fid_18',['next_id',['../structRF24NetworkHeader.html#af02a00fa410f6c34bb395f7d0afe2bfd',1,'RF24NetworkHeader']]], + ['node_19',['Starting up a node',['../index.html#autotoc_md18',1,'']]], + ['node_20naming_20',['Node Naming',['../md_docs_2zigabee.html#autotoc_md35',1,'']]], + ['node_5faddress_21',['node_address',['../classESBNetwork.html#a3e5aa077d46a74acd31ca5242bb0c0a4',1,'ESBNetwork']]], + ['not_20provide_22',['The layer does not provide',['../index.html#autotoc_md12',1,'']]], + ['nrf24l01_23',['Topology for Mesh Networks using nRF24L01(+)',['../index.html#autotoc_md15',1,'']]], + ['num_5fpipes_24',['NUM_PIPES',['../RF24Network__config_8h.html#aea10fcc3ece9abf30d548a2cba57d2aa',1,'RF24Network_config.h']]] ]; diff --git a/search/all_f.js b/search/all_f.js index 1114166e..deeb7a8b 100644 --- a/search/all_f.js +++ b/search/all_f.js @@ -1,8 +1,9 @@ var searchData= [ - ['update_0',['update',['../classESBNetwork.html#a828adf45c3b8a82b08644510f29a32d3',1,'ESBNetwork']]], - ['use_5fcurrent_5fchannel_1',['USE_CURRENT_CHANNEL',['../RF24Network_8h.html#a3701f6ea99dcf399641f2ad29303f8cc',1,'RF24Network.h']]], - ['user_5ftx_5fmulticast_2',['USER_TX_MULTICAST',['../RF24Network_8h.html#ae2f8b695f040aa6f1e8ec92b438aa303',1,'RF24Network.h']]], - ['user_5ftx_5fto_5flogical_5faddress_3',['USER_TX_TO_LOGICAL_ADDRESS',['../RF24Network_8h.html#a4726586dd8fbf75bbfffffd18ebdbeb3',1,'RF24Network.h']]], - ['user_5ftx_5fto_5fphysical_5faddress_4',['USER_TX_TO_PHYSICAL_ADDRESS',['../RF24Network_8h.html#afbef4cc504fbd93102265ff8d01cbafc',1,'RF24Network.h']]] + ['octal_20addressing_20and_20topology_0',['Octal Addressing and Topology',['../index.html#autotoc_md16',1,'']]], + ['octal_20and_20binary_1',['Decimal, Octal and Binary',['../md_docs_2addressing.html#autotoc_md4',1,'']]], + ['octal_20and_20binary_20formats_2',['Decimal, Octal and Binary formats',['../md_docs_2addressing.html#autotoc_md2',1,'']]], + ['of_20rf24network_3',['Topology of RF24Network',['../md_docs_2tuning.html#autotoc_md22',1,'']]], + ['ons_4',['Additional Information & Add-ons',['../index.html#autotoc_md14',1,'']]], + ['overview_5',['Overview',['../md_docs_2addressing.html#autotoc_md1',1,'Overview'],['../md_docs_2tuning.html#autotoc_md26',1,'Tuning Overview']]] ]; diff --git a/search/close.svg b/search/close.svg index a933eea1..337d6cc1 100644 --- a/search/close.svg +++ b/search/close.svg @@ -1,27 +1,14 @@ + - - - - image/svg+xml - - - - - + - - - - image/svg+xml - - - - - + - - - - image/svg+xml - - - - - - + - - - - image/svg+xml - - - - - + > - + /> + /> diff --git a/search/mag_seld.svg b/search/mag_seld.svg index 6e720dcc..c906f84c 100644 --- a/search/mag_seld.svg +++ b/search/mag_seld.svg @@ -1,74 +1,31 @@ - + - - - - image/svg+xml - - - - - + > - + /> + /> diff --git a/search/pages_0.js b/search/pages_0.js index a8b9c81e..c5a35749 100644 --- a/search/pages_0.js +++ b/search/pages_0.js @@ -1,5 +1,7 @@ var searchData= [ - ['addressing_20format_3a_20understanding_20addressing_20and_20topology_0',['Addressing Format: Understanding Addressing and Topology',['../md_docs_addressing.html',1,'']]], - ['advanced_20configuration_1',['Advanced Configuration',['../md_docs_advanced_config.html',1,'']]] + ['addressing_20format_3a_20understanding_20addressing_20and_20topology_0',['Addressing Format: Understanding Addressing and Topology',['../md_docs_2addressing.html',1,'']]], + ['advanced_20configuration_1',['Advanced Configuration',['../md_docs_2advanced__config.html',1,'']]], + ['and_20data_20loss_3a_20tuning_20the_20network_2',['Performance and Data Loss: Tuning the Network',['../md_docs_2tuning.html',1,'']]], + ['and_20topology_3',['Addressing Format: Understanding Addressing and Topology',['../md_docs_2addressing.html',1,'']]] ]; diff --git a/search/pages_1.js b/search/pages_1.js index ecc5a74b..97383495 100644 --- a/search/pages_1.js +++ b/search/pages_1.js @@ -1,5 +1,6 @@ var searchData= [ - ['comparison_20to_20zigbee_0',['Comparison to ZigBee',['../md_docs_zigabee.html',1,'']]], - ['contributing_1',['CONTRIBUTING',['../md_CONTRIBUTING.html',1,'']]] + ['comparison_20to_20zigbee_0',['Comparison to ZigBee',['../md_docs_2zigabee.html',1,'']]], + ['configuration_1',['Advanced Configuration',['../md_docs_2advanced__config.html',1,'']]], + ['contributing_2',['CONTRIBUTING',['../md_CONTRIBUTING.html',1,'']]] ]; diff --git a/search/pages_2.js b/search/pages_2.js index 4d858458..e93f5ebf 100644 --- a/search/pages_2.js +++ b/search/pages_2.js @@ -1,4 +1,5 @@ var searchData= [ - ['deprecated_20list_0',['Deprecated List',['../deprecated.html',1,'']]] + ['data_20loss_3a_20tuning_20the_20network_0',['Performance and Data Loss: Tuning the Network',['../md_docs_2tuning.html',1,'']]], + ['deprecated_20list_1',['Deprecated List',['../deprecated.html',1,'']]] ]; diff --git a/search/pages_3.js b/search/pages_3.js index b4b26f78..4b284623 100644 --- a/search/pages_3.js +++ b/search/pages_3.js @@ -1,4 +1,5 @@ var searchData= [ - ['network_20layer_20for_20rf24_20radios_0',['Network Layer for RF24 Radios',['../index.html',1,'']]] + ['for_20rf24_20radios_0',['Network Layer for RF24 Radios',['../index.html',1,'']]], + ['format_3a_20understanding_20addressing_20and_20topology_1',['Addressing Format: Understanding Addressing and Topology',['../md_docs_2addressing.html',1,'']]] ]; diff --git a/search/pages_4.js b/search/pages_4.js index a40a3425..acda54ef 100644 --- a/search/pages_4.js +++ b/search/pages_4.js @@ -1,4 +1,6 @@ var searchData= [ - ['performance_20and_20data_20loss_3a_20tuning_20the_20network_0',['Performance and Data Loss: Tuning the Network',['../md_docs_tuning.html',1,'']]] + ['layer_20for_20rf24_20radios_0',['Network Layer for RF24 Radios',['../index.html',1,'']]], + ['list_1',['Deprecated List',['../deprecated.html',1,'']]], + ['loss_3a_20tuning_20the_20network_2',['Performance and Data Loss: Tuning the Network',['../md_docs_2tuning.html',1,'']]] ]; diff --git a/search/pages_5.js b/search/pages_5.js new file mode 100644 index 00000000..82a35a15 --- /dev/null +++ b/search/pages_5.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['network_0',['Performance and Data Loss: Tuning the Network',['../md_docs_2tuning.html',1,'']]], + ['network_20layer_20for_20rf24_20radios_1',['Network Layer for RF24 Radios',['../index.html',1,'']]] +]; diff --git a/search/pages_6.js b/search/pages_6.js new file mode 100644 index 00000000..c6a84dbd --- /dev/null +++ b/search/pages_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['performance_20and_20data_20loss_3a_20tuning_20the_20network_0',['Performance and Data Loss: Tuning the Network',['../md_docs_2tuning.html',1,'']]] +]; diff --git a/search/pages_7.js b/search/pages_7.js new file mode 100644 index 00000000..01dca415 --- /dev/null +++ b/search/pages_7.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['radios_0',['Network Layer for RF24 Radios',['../index.html',1,'']]], + ['rf24_20radios_1',['Network Layer for RF24 Radios',['../index.html',1,'']]] +]; diff --git a/search/pages_8.js b/search/pages_8.js new file mode 100644 index 00000000..387b9638 --- /dev/null +++ b/search/pages_8.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['the_20network_0',['Performance and Data Loss: Tuning the Network',['../md_docs_2tuning.html',1,'']]], + ['to_20zigbee_1',['Comparison to ZigBee',['../md_docs_2zigabee.html',1,'']]], + ['topology_2',['Addressing Format: Understanding Addressing and Topology',['../md_docs_2addressing.html',1,'']]], + ['tuning_20the_20network_3',['Performance and Data Loss: Tuning the Network',['../md_docs_2tuning.html',1,'']]] +]; diff --git a/search/pages_9.js b/search/pages_9.js new file mode 100644 index 00000000..dec699eb --- /dev/null +++ b/search/pages_9.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['understanding_20addressing_20and_20topology_0',['Addressing Format: Understanding Addressing and Topology',['../md_docs_2addressing.html',1,'']]] +]; diff --git a/search/pages_a.js b/search/pages_a.js new file mode 100644 index 00000000..0bd3ebb9 --- /dev/null +++ b/search/pages_a.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['zigbee_0',['Comparison to ZigBee',['../md_docs_2zigabee.html',1,'']]] +]; diff --git a/search/search.js b/search/search.js index e103a262..666af01e 100644 --- a/search/search.js +++ b/search/search.js @@ -22,58 +22,9 @@ @licend The above is the entire license notice for the JavaScript code in this file */ -function convertToId(search) -{ - var result = ''; - for (i=0;i document.getElementById("MSearchField"); + this.DOMSearchSelect = () => document.getElementById("MSearchSelect"); + this.DOMSearchSelectWindow = () => document.getElementById("MSearchSelectWindow"); + this.DOMPopupSearchResults = () => document.getElementById("MSearchResults"); + this.DOMPopupSearchResultsWindow = () => document.getElementById("MSearchResultsWindow"); + this.DOMSearchClose = () => document.getElementById("MSearchClose"); + this.DOMSearchBox = () => document.getElementById("MSearchBox"); // ------------ Event Handlers // Called when focus is added or removed from the search field. - this.OnSearchFieldFocus = function(isActive) - { + this.OnSearchFieldFocus = function(isActive) { this.Activate(isActive); } - this.OnSearchSelectShow = function() - { - var searchSelectWindow = this.DOMSearchSelectWindow(); - var searchField = this.DOMSearchSelect(); + this.OnSearchSelectShow = function() { + const searchSelectWindow = this.DOMSearchSelectWindow(); + const searchField = this.DOMSearchSelect(); - var left = getXPos(searchField); - var top = getYPos(searchField); - top += searchField.offsetHeight; + const left = getXPos(searchField); + const top = getYPos(searchField) + searchField.offsetHeight; // show search selection popup searchSelectWindow.style.display='block'; @@ -146,55 +102,44 @@ function SearchBox(name, resultsPath, extension) searchSelectWindow.style.top = top + 'px'; // stop selection hide timer - if (this.hideTimeout) - { + if (this.hideTimeout) { clearTimeout(this.hideTimeout); this.hideTimeout=0; } return false; // to avoid "image drag" default event } - this.OnSearchSelectHide = function() - { - this.hideTimeout = setTimeout(this.name +".CloseSelectionWindow()", + this.OnSearchSelectHide = function() { + this.hideTimeout = setTimeout(this.CloseSelectionWindow.bind(this), this.closeSelectionTimeout); } // Called when the content of the search field is changed. - this.OnSearchFieldChange = function(evt) - { - if (this.keyTimeout) // kill running timer - { + this.OnSearchFieldChange = function(evt) { + if (this.keyTimeout) { // kill running timer clearTimeout(this.keyTimeout); this.keyTimeout = 0; } - var e = (evt) ? evt : window.event; // for IE - if (e.keyCode==40 || e.keyCode==13) - { - if (e.shiftKey==1) - { + const e = evt ? evt : window.event; // for IE + if (e.keyCode==40 || e.keyCode==13) { + if (e.shiftKey==1) { this.OnSearchSelectShow(); - var win=this.DOMSearchSelectWindow(); - for (i=0;i do a search - { + const searchValue = this.DOMSearchField().value.replace(/ +/g, ""); + if (searchValue!="" && this.searchActive) { // something was found -> do a search this.Search(); } } - this.OnSearchSelectKey = function(evt) - { - var e = (evt) ? evt : window.event; // for IE - if (e.keyCode==40 && this.searchIndex0) // Up - { + } else if (e.keyCode==38 && this.searchIndex>0) { // Up this.searchIndex--; this.OnSelectItem(this.searchIndex); - } - else if (e.keyCode==13 || e.keyCode==27) - { + } else if (e.keyCode==13 || e.keyCode==27) { + e.stopPropagation(); this.OnSelectItem(this.searchIndex); this.CloseSelectionWindow(); this.DOMSearchField().focus(); @@ -299,78 +239,75 @@ function SearchBox(name, resultsPath, extension) // --------- Actions // Closes the results window. - this.CloseResultsWindow = function() - { + this.CloseResultsWindow = function() { this.DOMPopupSearchResultsWindow().style.display = 'none'; this.DOMSearchClose().style.display = 'none'; this.Activate(false); } - this.CloseSelectionWindow = function() - { + this.CloseSelectionWindow = function() { this.DOMSearchSelectWindow().style.display = 'none'; } // Performs a search. - this.Search = function() - { + this.Search = function() { this.keyTimeout = 0; // strip leading whitespace - var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + const searchValue = this.DOMSearchField().value.replace(/^ +/, ""); - var code = searchValue.toLowerCase().charCodeAt(0); - var idxChar = searchValue.substr(0, 1).toLowerCase(); - if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair - { + const code = searchValue.toLowerCase().charCodeAt(0); + let idxChar = searchValue.substr(0, 1).toLowerCase(); + if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) { // surrogate pair idxChar = searchValue.substr(0, 2); } - var jsFile; - - var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); - if (idx!=-1) - { - var hexCode=idx.toString(16); - jsFile = this.resultsPath + indexSectionNames[this.searchIndex] + '_' + hexCode + '.js'; + let jsFile; + let idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); + if (idx!=-1) { + const hexCode=idx.toString(16); + jsFile = this.resultsPath + indexSectionNames[this.searchIndex] + '_' + hexCode + '.js'; } - var loadJS = function(url, impl, loc){ - var scriptTag = document.createElement('script'); + const loadJS = function(url, impl, loc) { + const scriptTag = document.createElement('script'); scriptTag.src = url; scriptTag.onload = impl; scriptTag.onreadystatechange = impl; loc.appendChild(scriptTag); } - var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); - var domSearchBox = this.DOMSearchBox(); - var domPopupSearchResults = this.DOMPopupSearchResults(); - var domSearchClose = this.DOMSearchClose(); - var resultsPath = this.resultsPath; + const domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + const domSearchBox = this.DOMSearchBox(); + const domPopupSearchResults = this.DOMPopupSearchResults(); + const domSearchClose = this.DOMSearchClose(); + const resultsPath = this.resultsPath; - var handleResults = function() { + const handleResults = function() { document.getElementById("Loading").style.display="none"; if (typeof searchData !== 'undefined') { createResults(resultsPath); document.getElementById("NoMatches").style.display="none"; } - - searchResults.Search(searchValue); - if (domPopupSearchResultsWindow.style.display!='block') - { + if (idx!=-1) { + searchResults.Search(searchValue); + } else { // no file with search results => force empty search results + searchResults.Search('===='); + } + + if (domPopupSearchResultsWindow.style.display!='block') { domSearchClose.style.display = 'inline-block'; - var left = getXPos(domSearchBox) + 150; - var top = getYPos(domSearchBox) + 20; + let left = getXPos(domSearchBox) + 150; + let top = getYPos(domSearchBox) + 20; domPopupSearchResultsWindow.style.display = 'block'; left -= domPopupSearchResults.offsetWidth; - var maxWidth = document.body.clientWidth; - var maxHeight = document.body.clientHeight; - var width = 300; + const maxWidth = document.body.clientWidth; + const maxHeight = document.body.clientHeight; + let width = 300; if (left<10) left=10; if (width+left+8>maxWidth) width=maxWidth-left-8; - var height = 400; + let height = 400; if (height+top+8>maxHeight) height=maxHeight-top-8; domPopupSearchResultsWindow.style.top = top + 'px'; domPopupSearchResultsWindow.style.left = left + 'px'; @@ -392,17 +329,13 @@ function SearchBox(name, resultsPath, extension) // Activates or deactivates the search panel, resetting things to // their default values if necessary. - this.Activate = function(isActive) - { + this.Activate = function(isActive) { if (isActive || // open it - this.DOMPopupSearchResultsWindow().style.display == 'block' - ) - { + this.DOMPopupSearchResultsWindow().style.display == 'block' + ) { this.DOMSearchBox().className = 'MSearchBoxActive'; this.searchActive = true; - } - else if (!isActive) // directly remove the panel - { + } else if (!isActive) { // directly remove the panel this.DOMSearchBox().className = 'MSearchBoxInactive'; this.searchActive = false; this.lastSearchValue = '' @@ -415,402 +348,347 @@ function SearchBox(name, resultsPath, extension) // ----------------------------------------------------------------------- // The class that handles everything on the search results page. -function SearchResults(name) -{ - // The number of matches from the last run of . - this.lastMatchCount = 0; - this.lastKey = 0; - this.repeatOn = false; - - // Toggles the visibility of the passed element ID. - this.FindChildElement = function(id) - { - var parentElement = document.getElementById(id); - var element = parentElement.firstChild; - - while (element && element!=parentElement) - { - if (element.nodeName.toLowerCase() == 'div' && element.className == 'SRChildren') - { - return element; - } +function SearchResults() { + + function convertToId(search) { + let result = ''; + for (let i=0;i. + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; - if (element && element!=parentElement) - { - element = element.nextSibling; - } - } + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) { + const parentElement = document.getElementById(id); + let element = parentElement.firstChild; + + while (element && element!=parentElement) { + if (element.nodeName.toLowerCase() == 'div' && element.className == 'SRChildren') { + return element; } - } - this.Toggle = function(id) - { - var element = this.FindChildElement(id); - if (element) - { - if (element.style.display == 'block') - { - element.style.display = 'none'; + if (element.nodeName.toLowerCase() == 'div' && element.hasChildNodes()) { + element = element.firstChild; + } else if (element.nextSibling) { + element = element.nextSibling; + } else { + do { + element = element.parentNode; } - else - { - element.style.display = 'block'; + while (element && element!=parentElement && !element.nextSibling); + + if (element && element!=parentElement) { + element = element.nextSibling; } } } + } - // Searches for the passed string. If there is no parameter, - // it takes it from the URL query. - // - // Always returns true, since other documents may try to call it - // and that may or may not be possible. - this.Search = function(search) - { - if (!search) // get search word from URL - { - search = window.location.search; - search = search.substring(1); // Remove the leading '?' - search = unescape(search); - } - - search = search.replace(/^ +/, ""); // strip leading spaces - search = search.replace(/ +$/, ""); // strip trailing spaces - search = search.toLowerCase(); - search = convertToId(search); - - var resultRows = document.getElementsByTagName("div"); - var matches = 0; - - var i = 0; - while (i < resultRows.length) - { - var row = resultRows.item(i); - if (row.className == "SRResult") - { - var rowMatchName = row.id.toLowerCase(); - rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' - - if (search.length<=rowMatchName.length && - rowMatchName.substr(0, search.length)==search) - { - row.style.display = 'block'; - matches++; - } - else - { - row.style.display = 'none'; - } - } - i++; + this.Toggle = function(id) { + const element = this.FindChildElement(id); + if (element) { + if (element.style.display == 'block') { + element.style.display = 'none'; + } else { + element.style.display = 'block'; } - document.getElementById("Searching").style.display='none'; - if (matches == 0) // no results - { - document.getElementById("NoMatches").style.display='block'; - } - else // at least one result - { - document.getElementById("NoMatches").style.display='none'; - } - this.lastMatchCount = matches; - return true; } + } - // return the first item with index index or higher that is visible - this.NavNext = function(index) - { - var focusItem; - while (1) - { - var focusName = 'Item'+index; - focusItem = document.getElementById(focusName); - if (focusItem && focusItem.parentNode.parentNode.style.display=='block') - { - break; - } - else if (!focusItem) // last element - { - break; + // Searches for the passed string. If there is no parameter, + // it takes it from the URL query. + // + // Always returns true, since other documents may try to call it + // and that may or may not be possible. + this.Search = function(search) { + if (!search) { // get search word from URL + search = window.location.search; + search = search.substring(1); // Remove the leading '?' + search = unescape(search); + } + + search = search.replace(/^ +/, ""); // strip leading spaces + search = search.replace(/ +$/, ""); // strip trailing spaces + search = search.toLowerCase(); + search = convertToId(search); + + const resultRows = document.getElementsByTagName("div"); + let matches = 0; + + let i = 0; + while (i < resultRows.length) { + const row = resultRows.item(i); + if (row.className == "SRResult") { + let rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' + + if (search.length<=rowMatchName.length && + rowMatchName.substr(0, search.length)==search) { + row.style.display = 'block'; + matches++; + } else { + row.style.display = 'none'; } - focusItem=null; - index++; } - return focusItem; + i++; } + document.getElementById("Searching").style.display='none'; + if (matches == 0) { // no results + document.getElementById("NoMatches").style.display='block'; + } else { // at least one result + document.getElementById("NoMatches").style.display='none'; + } + this.lastMatchCount = matches; + return true; + } - this.NavPrev = function(index) - { - var focusItem; - while (1) - { - var focusName = 'Item'+index; - focusItem = document.getElementById(focusName); - if (focusItem && focusItem.parentNode.parentNode.style.display=='block') - { - break; - } - else if (!focusItem) // last element - { - break; - } - focusItem=null; - index--; + // return the first item with index index or higher that is visible + this.NavNext = function(index) { + let focusItem; + for (;;) { + const focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') { + break; + } else if (!focusItem) { // last element + break; + } + focusItem=null; + index++; + } + return focusItem; + } + + this.NavPrev = function(index) { + let focusItem; + for (;;) { + const focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') { + break; + } else if (!focusItem) { // last element + break; } - return focusItem; + focusItem=null; + index--; } + return focusItem; + } - this.ProcessKeys = function(e) - { - if (e.type == "keydown") - { - this.repeatOn = false; - this.lastKey = e.keyCode; - } - else if (e.type == "keypress") - { - if (!this.repeatOn) - { - if (this.lastKey) this.repeatOn = true; - return false; // ignore first keypress after keydown - } + this.ProcessKeys = function(e) { + if (e.type == "keydown") { + this.repeatOn = false; + this.lastKey = e.keyCode; + } else if (e.type == "keypress") { + if (!this.repeatOn) { + if (this.lastKey) this.repeatOn = true; + return false; // ignore first keypress after keydown } - else if (e.type == "keyup") - { - this.lastKey = 0; - this.repeatOn = false; - } - return this.lastKey!=0; + } else if (e.type == "keyup") { + this.lastKey = 0; + this.repeatOn = false; } + return this.lastKey!=0; + } - this.Nav = function(evt,itemIndex) - { - var e = (evt) ? evt : window.event; // for IE - if (e.keyCode==13) return true; - if (!this.ProcessKeys(e)) return false; - - if (this.lastKey==38) // Up - { - var newIndex = itemIndex-1; - var focusItem = this.NavPrev(newIndex); - if (focusItem) - { - var child = this.FindChildElement(focusItem.parentNode.parentNode.id); - if (child && child.style.display == 'block') // children visible - { - var n=0; - var tmpElem; - while (1) // search for last child - { - tmpElem = document.getElementById('Item'+newIndex+'_c'+n); - if (tmpElem) - { - focusItem = tmpElem; - } - else // found it! - { - break; - } - n++; + this.Nav = function(evt,itemIndex) { + const e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) { // Up + const newIndex = itemIndex-1; + let focusItem = this.NavPrev(newIndex); + if (focusItem) { + let child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') { // children visible + let n=0; + let tmpElem; + for (;;) { // search for last child + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); + if (tmpElem) { + focusItem = tmpElem; + } else { // found it! + break; } + n++; } } - if (focusItem) - { - focusItem.focus(); - } - else // return focus to search field - { - document.getElementById("MSearchField").focus(); - } - } - else if (this.lastKey==40) // Down - { - var newIndex = itemIndex+1; - var focusItem; - var item = document.getElementById('Item'+itemIndex); - var elem = this.FindChildElement(item.parentNode.parentNode.id); - if (elem && elem.style.display == 'block') // children visible - { - focusItem = document.getElementById('Item'+itemIndex+'_c0'); - } - if (!focusItem) focusItem = this.NavNext(newIndex); - if (focusItem) focusItem.focus(); } - else if (this.lastKey==39) // Right - { - var item = document.getElementById('Item'+itemIndex); - var elem = this.FindChildElement(item.parentNode.parentNode.id); - if (elem) elem.style.display = 'block'; - } - else if (this.lastKey==37) // Left - { - var item = document.getElementById('Item'+itemIndex); - var elem = this.FindChildElement(item.parentNode.parentNode.id); - if (elem) elem.style.display = 'none'; - } - else if (this.lastKey==27) // Escape - { - searchBox.CloseResultsWindow(); + if (focusItem) { + focusItem.focus(); + } else { // return focus to search field document.getElementById("MSearchField").focus(); } - else if (this.lastKey==13) // Enter - { - return true; - } - return false; + } else if (this.lastKey==40) { // Down + const newIndex = itemIndex+1; + let focusItem; + const item = document.getElementById('Item'+itemIndex); + const elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem && elem.style.display == 'block') { // children visible + focusItem = document.getElementById('Item'+itemIndex+'_c0'); + } + if (!focusItem) focusItem = this.NavNext(newIndex); + if (focusItem) focusItem.focus(); + } else if (this.lastKey==39) { // Right + const item = document.getElementById('Item'+itemIndex); + const elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } else if (this.lastKey==37) { // Left + const item = document.getElementById('Item'+itemIndex); + const elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } else if (this.lastKey==27) { // Escape + e.stopPropagation(); + searchBox.CloseResultsWindow(); + document.getElementById("MSearchField").focus(); + } else if (this.lastKey==13) { // Enter + return true; } + return false; + } - this.NavChild = function(evt,itemIndex,childIndex) - { - var e = (evt) ? evt : window.event; // for IE - if (e.keyCode==13) return true; - if (!this.ProcessKeys(e)) return false; - - if (this.lastKey==38) // Up - { - if (childIndex>0) - { - var newIndex = childIndex-1; - document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); - } - else // already at first child, jump to parent - { - document.getElementById('Item'+itemIndex).focus(); - } - } - else if (this.lastKey==40) // Down - { - var newIndex = childIndex+1; - var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); - if (!elem) // last child, jump to parent next parent - { - elem = this.NavNext(itemIndex+1); - } - if (elem) - { - elem.focus(); - } - } - else if (this.lastKey==27) // Escape - { - searchBox.CloseResultsWindow(); - document.getElementById("MSearchField").focus(); - } - else if (this.lastKey==13) // Enter - { - return true; - } - return false; + this.NavChild = function(evt,itemIndex,childIndex) { + const e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) { // Up + if (childIndex>0) { + const newIndex = childIndex-1; + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); + } else { // already at first child, jump to parent + document.getElementById('Item'+itemIndex).focus(); + } + } else if (this.lastKey==40) { // Down + const newIndex = childIndex+1; + let elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); + if (!elem) { // last child, jump to parent next parent + elem = this.NavNext(itemIndex+1); + } + if (elem) { + elem.focus(); + } + } else if (this.lastKey==27) { // Escape + e.stopPropagation(); + searchBox.CloseResultsWindow(); + document.getElementById("MSearchField").focus(); + } else if (this.lastKey==13) { // Enter + return true; } + return false; + } } -function setKeyActions(elem,action) -{ - elem.setAttribute('onkeydown',action); - elem.setAttribute('onkeypress',action); - elem.setAttribute('onkeyup',action); -} +function createResults(resultsPath) { -function setClassAttr(elem,attr) -{ - elem.setAttribute('class',attr); - elem.setAttribute('className',attr); -} + function setKeyActions(elem,action) { + elem.setAttribute('onkeydown',action); + elem.setAttribute('onkeypress',action); + elem.setAttribute('onkeyup',action); + } + + function setClassAttr(elem,attr) { + elem.setAttribute('class',attr); + elem.setAttribute('className',attr); + } -function createResults(resultsPath) -{ - var results = document.getElementById("SRResults"); + const results = document.getElementById("SRResults"); results.innerHTML = ''; - for (var e=0; e { + const id = elem[0]; + const srResult = document.createElement('div'); srResult.setAttribute('id','SR_'+id); setClassAttr(srResult,'SRResult'); - var srEntry = document.createElement('div'); + const srEntry = document.createElement('div'); setClassAttr(srEntry,'SREntry'); - var srLink = document.createElement('a'); - srLink.setAttribute('id','Item'+e); - setKeyActions(srLink,'return searchResults.Nav(event,'+e+')'); + const srLink = document.createElement('a'); + srLink.setAttribute('id','Item'+index); + setKeyActions(srLink,'return searchResults.Nav(event,'+index+')'); setClassAttr(srLink,'SRSymbol'); - srLink.innerHTML = searchData[e][1][0]; + srLink.innerHTML = elem[1][0]; srEntry.appendChild(srLink); - if (searchData[e][1].length==2) // single result - { - srLink.setAttribute('href',resultsPath+searchData[e][1][1][0]); + if (elem[1].length==2) { // single result + srLink.setAttribute('href',resultsPath+elem[1][1][0]); srLink.setAttribute('onclick','searchBox.CloseResultsWindow()'); - if (searchData[e][1][1][1]) - { + if (elem[1][1][1]) { srLink.setAttribute('target','_parent'); - } - else - { + } else { srLink.setAttribute('target','_blank'); } - var srScope = document.createElement('span'); + const srScope = document.createElement('span'); setClassAttr(srScope,'SRScope'); - srScope.innerHTML = searchData[e][1][1][2]; + srScope.innerHTML = elem[1][1][2]; srEntry.appendChild(srScope); - } - else // multiple results - { + } else { // multiple results srLink.setAttribute('href','javascript:searchResults.Toggle("SR_'+id+'")'); - var srChildren = document.createElement('div'); + const srChildren = document.createElement('div'); setClassAttr(srChildren,'SRChildren'); - for (var c=0; c - + -Newly Optimized RF24Network Layer: Member List +Optimized RF24Network Layer: Member List + + + @@ -23,16 +26,16 @@ -
    Newly Optimized RF24Network Layer v2.0.0 +
    Optimized RF24Network Layer v2.0.0
    -
    2020 - Optimized RF24 Network Layer for NRF24L01 radios
    +
    2024 - Optimized RF24 Network Layer for NRF24L01 & NRF52x radios
    - + @@ -87,7 +90,7 @@

diff --git a/structRF24NetworkFrame.html b/structRF24NetworkFrame.html index 98d43a90..b566d01e 100644 --- a/structRF24NetworkFrame.html +++ b/structRF24NetworkFrame.html @@ -3,12 +3,15 @@ - + -Newly Optimized RF24Network Layer: RF24NetworkFrame Struct Reference +Optimized RF24Network Layer: RF24NetworkFrame Struct Reference + + + @@ -23,16 +26,16 @@ -
Newly Optimized RF24Network Layer v2.0.0 +
Optimized RF24Network Layer v2.0.0
-
2020 - Optimized RF24 Network Layer for NRF24L01 radios
+
2024 - Optimized RF24 Network Layer for NRF24L01 & NRF52x radios
- + @@ -84,20 +87,20 @@ - + - + - +

Public Member Functions

 RF24NetworkFrame ()
 RF24NetworkFrame ()
 
 RF24NetworkFrame (RF24NetworkHeader &_header, const void *_message=NULL, uint16_t _len=0)
 RF24NetworkFrame (RF24NetworkHeader &_header, const void *_message=NULL, uint16_t _len=0)
 
 RF24NetworkFrame (RF24NetworkHeader &_header, uint16_t _message_size)
 RF24NetworkFrame (RF24NetworkHeader &_header, uint16_t _message_size)
 
- + - + - +

Public Attributes

RF24NetworkHeader header
RF24NetworkHeader header
 
uint16_t message_size
uint16_t message_size
 
uint8_t * message_buffer
uint8_t * message_buffer
 

Detailed Description

@@ -120,7 +123,7 @@

RF24NetworkFrame::RF24NetworkFrame ( - ) + ) @@ -147,25 +150,17 @@

RF24NetworkFrame::RF24NetworkFrame ( - RF24NetworkHeader &  - _header, + RF24NetworkHeader & _header, - const void *  - _message = NULL, + const void * _message = NULL, - uint16_t  - _len = 0  - - - - ) - + uint16_t _len = 0 ) @@ -199,19 +194,12 @@

RF24NetworkFrame::RF24NetworkFrame ( - RF24NetworkHeader &  - _header, + RF24NetworkHeader & _header, - uint16_t  - _message_size  - - - - ) - + uint16_t _message_size ) @@ -282,7 +270,7 @@

diff --git a/structRF24NetworkHeader-members.html b/structRF24NetworkHeader-members.html index 3b9d9ee5..2fe64233 100644 --- a/structRF24NetworkHeader-members.html +++ b/structRF24NetworkHeader-members.html @@ -3,12 +3,15 @@ - + -Newly Optimized RF24Network Layer: Member List +Optimized RF24Network Layer: Member List + + + @@ -23,16 +26,16 @@ -
Newly Optimized RF24Network Layer v2.0.0 +
Optimized RF24Network Layer v2.0.0
-
2020 - Optimized RF24 Network Layer for NRF24L01 radios
+
2024 - Optimized RF24 Network Layer for NRF24L01 & NRF52x radios
- + @@ -90,7 +93,7 @@

diff --git a/structRF24NetworkHeader.html b/structRF24NetworkHeader.html index 3b526302..7126d4e5 100644 --- a/structRF24NetworkHeader.html +++ b/structRF24NetworkHeader.html @@ -3,12 +3,15 @@ - + -Newly Optimized RF24Network Layer: RF24NetworkHeader Struct Reference +Optimized RF24Network Layer: RF24NetworkHeader Struct Reference + + + @@ -23,16 +26,16 @@ -
Newly Optimized RF24Network Layer v2.0.0 +
Optimized RF24Network Layer v2.0.0
-
2020 - Optimized RF24 Network Layer for NRF24L01 radios
+
2024 - Optimized RF24 Network Layer for NRF24L01 & NRF52x radios
- + @@ -85,29 +88,29 @@ - + - + - +

Public Member Functions

 RF24NetworkHeader ()
 RF24NetworkHeader ()
 
 RF24NetworkHeader (uint16_t _to, unsigned char _type=0)
 RF24NetworkHeader (uint16_t _to, unsigned char _type=0)
 
const char * toString (void) const
const char * toString (void) const
 
- + - + - + - + - +

Public Attributes

uint16_t from_node
uint16_t from_node
 
uint16_t to_node
uint16_t to_node
 
uint16_t id
uint16_t id
 
unsigned char type
unsigned char type
 
unsigned char reserved
unsigned char reserved
 
- +

Static Public Attributes

static uint16_t next_id = 1
static uint16_t next_id = 1
 

Detailed Description

@@ -129,7 +132,7 @@

RF24NetworkHeader::RF24NetworkHeader ( - ) + ) @@ -156,19 +159,12 @@

RF24NetworkHeader::RF24NetworkHeader ( - uint16_t  - _to, + uint16_t _to, - unsigned char  - _type = 0  - - - - ) - + unsigned char _type = 0 ) @@ -185,7 +181,7 @@

RF24NetworkHeader header(recipient_address, 't');

network.write(header, &message, sizeof(message));
-
Definition: RF24Network.h:229
+
Definition RF24Network.h:229
Parameters
@@ -206,8 +202,7 @@

const char * RF24NetworkHeader::toString

- - +
_toThe Octal format, logical node address where the message is going
(void )void ) const
@@ -326,7 +321,7 @@

diff --git a/tabs.css b/tabs.css index 71c8a470..fe4854aa 100644 --- a/tabs.css +++ b/tabs.css @@ -1 +1 @@ -.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.main-menu-btn{position:relative;display:inline-block;width:36px;height:36px;text-indent:36px;margin-left:8px;white-space:nowrap;overflow:hidden;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0)}.main-menu-btn-icon,.main-menu-btn-icon:before,.main-menu-btn-icon:after{position:absolute;top:50%;left:2px;height:2px;width:24px;background:var(--nav-menu-button-color);-webkit-transition:all .25s;transition:all .25s}.main-menu-btn-icon:before{content:'';top:-7px;left:0}.main-menu-btn-icon:after{content:'';top:7px;left:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon{height:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:before{top:0;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:after{top:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}#main-menu-state{position:absolute;width:1px;height:1px;margin:-1px;border:0;padding:0;overflow:hidden;clip:rect(1px,1px,1px,1px)}#main-menu-state:not(:checked) ~ #main-menu{display:none}#main-menu-state:checked ~ #main-menu{display:block}@media(min-width:768px){.main-menu-btn{position:absolute;top:-99999px}#main-menu-state:not(:checked) ~ #main-menu{display:block}}.sm-dox{background-image:var(--nav-gradient-image)}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0 12px;padding-right:43px;font-family:var(--font-family-nav);font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:var(--nav-text-normal-shadow);color:var(--nav-text-normal-color);outline:0}.sm-dox a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox a.current{color:#d23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:var(--nav-menu-toggle-color);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox a span.sub-arrow:before{display:block;content:'+'}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px;border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0;border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox ul{background:var(--nav-menu-background-color)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:var(--nav-menu-background-color);background-image:none}.sm-dox ul a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:0 1px 1px black}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media(min-width:768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:var(--nav-gradient-image);line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:var(--nav-text-normal-color) transparent transparent transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0 12px;background-image:var(--nav-separator-image);background-repeat:no-repeat;background-position:right;-moz-border-radius:0 !important;-webkit-border-radius:0;border-radius:0 !important}.sm-dox a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox a:hover span.sub-arrow{border-color:var(--nav-text-hover-color) transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent var(--nav-menu-background-color) transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:var(--nav-menu-background-color);-moz-border-radius:5px !important;-webkit-border-radius:5px;border-radius:5px !important;-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent var(--nav-menu-foreground-color);border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:var(--nav-menu-foreground-color);background-image:none;border:0 !important;color:var(--nav-menu-foreground-color);background-image:none}.sm-dox ul a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent var(--nav-text-hover-color)}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:var(--nav-menu-background-color);height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #d23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#d23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent var(--nav-menu-foreground-color) transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:var(--nav-menu-foreground-color) transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:var(--nav-gradient-image)}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:var(--nav-menu-background-color)}} \ No newline at end of file +.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.main-menu-btn{position:relative;display:inline-block;width:36px;height:36px;text-indent:36px;margin-left:8px;white-space:nowrap;overflow:hidden;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0)}.main-menu-btn-icon,.main-menu-btn-icon:before,.main-menu-btn-icon:after{position:absolute;top:50%;left:2px;height:2px;width:24px;background:var(--nav-menu-button-color);-webkit-transition:all .25s;transition:all .25s}.main-menu-btn-icon:before{content:'';top:-7px;left:0}.main-menu-btn-icon:after{content:'';top:7px;left:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon{height:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:before{top:0;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:after{top:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}#main-menu-state{position:absolute;width:1px;height:1px;margin:-1px;border:0;padding:0;overflow:hidden;clip:rect(1px,1px,1px,1px)}#main-menu-state:not(:checked) ~ #main-menu{display:none}#main-menu-state:checked ~ #main-menu{display:block}@media(min-width:768px){.main-menu-btn{position:absolute;top:-99999px}#main-menu-state:not(:checked) ~ #main-menu{display:block}}.sm-dox{background-image:var(--nav-gradient-image)}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0 12px;padding-right:43px;font-family:var(--font-family-nav);font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:var(--nav-text-normal-shadow);color:var(--nav-text-normal-color);outline:0}.sm-dox a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox a.current{color:#d23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:var(--nav-menu-toggle-color);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox a span.sub-arrow:before{display:block;content:'+'}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px;border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0;border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox ul{background:var(--nav-menu-background-color)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:var(--nav-menu-background-color);background-image:none}.sm-dox ul a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:0 1px 1px black}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media(min-width:768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:var(--nav-gradient-image);line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:var(--nav-text-normal-color) transparent transparent transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0 12px;background-image:var(--nav-separator-image);background-repeat:no-repeat;background-position:right;-moz-border-radius:0 !important;-webkit-border-radius:0;border-radius:0 !important}.sm-dox a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox a:hover span.sub-arrow{border-color:var(--nav-text-hover-color) transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent var(--nav-menu-background-color) transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:var(--nav-menu-background-color);-moz-border-radius:5px !important;-webkit-border-radius:5px;border-radius:5px !important;-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent var(--nav-menu-foreground-color);border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:var(--nav-menu-foreground-color);background-image:none;border:0 !important}.sm-dox ul a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent var(--nav-text-hover-color)}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:var(--nav-menu-background-color);height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #d23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#d23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent var(--nav-menu-foreground-color) transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:var(--nav-menu-foreground-color) transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:var(--nav-gradient-image)}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:var(--nav-menu-background-color)}} \ No newline at end of file diff --git a/modules.html b/topics.html similarity index 76% rename from modules.html rename to topics.html index 4adce6ba..72a3781c 100644 --- a/modules.html +++ b/topics.html @@ -3,12 +3,15 @@ - + -Newly Optimized RF24Network Layer: Modules +Optimized RF24Network Layer: Topics + + + @@ -23,16 +26,16 @@ -
Newly Optimized RF24Network Layer v2.0.0 +
Optimized RF24Network Layer v2.0.0
-
2020 - Optimized RF24 Network Layer for NRF24L01 radios
+
2024 - Optimized RF24 Network Layer for NRF24L01 & NRF52x radios
- + @@ -72,10 +75,10 @@
-
Modules
+
Topics
-
Here is a list of all modules:
+
Here is a list of all topics with brief descriptions:
 Reserved System Message Types
@@ -83,7 +86,7 @@
diff --git a/tuning_8md.html b/tuning_8md.html index 7172d3a1..63e337f7 100644 --- a/tuning_8md.html +++ b/tuning_8md.html @@ -3,12 +3,15 @@ - + -Newly Optimized RF24Network Layer: docs/tuning.md File Reference +Optimized RF24Network Layer: docs/tuning.md File Reference + + + @@ -23,16 +26,16 @@ -
Newly Optimized RF24Network Layer v2.0.0 +
Optimized RF24Network Layer v2.0.0
-
2020 - Optimized RF24 Network Layer for NRF24L01 radios
+
2024 - Optimized RF24 Network Layer for NRF24L01 & NRF52x radios
- + @@ -78,7 +81,7 @@
diff --git a/zigabee_8md.html b/zigabee_8md.html index 5b9368de..6d32ace5 100644 --- a/zigabee_8md.html +++ b/zigabee_8md.html @@ -3,12 +3,15 @@ - + -Newly Optimized RF24Network Layer: docs/zigabee.md File Reference +Optimized RF24Network Layer: docs/zigabee.md File Reference + + + @@ -23,16 +26,16 @@ -
Newly Optimized RF24Network Layer v2.0.0 +
Optimized RF24Network Layer v2.0.0
-
2020 - Optimized RF24 Network Layer for NRF24L01 radios
+
2024 - Optimized RF24 Network Layer for NRF24L01 & NRF52x radios
- + @@ -78,7 +81,7 @@