Skip to content

Commit 7c2a253

Browse files
committed
Explicitly handle the case of sending to ourself
1 parent cc00335 commit 7c2a253

File tree

2 files changed

+15
-3
lines changed

2 files changed

+15
-3
lines changed

RF24Network.cpp

+14-2
Original file line numberDiff line numberDiff line change
@@ -77,14 +77,20 @@ void RF24Network::update(void)
7777
}
7878
}
7979

80-
void RF24Network::enqueue(void)
80+
bool RF24Network::enqueue(void)
8181
{
82+
bool result = false;
83+
8284
// Copy the current frame into the frame queue
8385
if ( next_frame <= frame_buffer + frame_size )
8486
{
8587
memcpy(next_frame,frame_buffer, frame_size );
8688
next_frame += frame_size;
89+
90+
result = true;
8791
}
92+
93+
return result;
8894
}
8995

9096
bool RF24Network::available(void)
@@ -120,7 +126,13 @@ bool RF24Network::write(RF24NetworkHeader& header,const void* buf, size_t len)
120126
memcpy(frame_buffer,&header,sizeof(RF24NetworkHeader));
121127
memcpy(frame_buffer + sizeof(RF24NetworkHeader),buf,min(frame_size-sizeof(RF24NetworkHeader),len));
122128

123-
return write(header.to_node);
129+
// If the user is trying to send it to himself
130+
if ( header.to_node == node_address )
131+
// Just queue it in the received queue
132+
return enqueue();
133+
else
134+
// Otherwise send it out over the air
135+
return write(header.to_node);
124136
}
125137

126138
bool RF24Network::write(uint16_t to_node)

RF24Network.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ class RF24Network
124124
void open_pipes(void);
125125
uint16_t find_node( uint16_t current_node, uint16_t target_node );
126126
bool write(uint16_t);
127-
void enqueue(void);
127+
bool enqueue(void);
128128

129129
private:
130130
RF24& radio; /**< Underlying radio driver, provides link/physical layers */

0 commit comments

Comments
 (0)