@@ -22,13 +22,14 @@ void Sensor::setupRadio(rf24_pa_dbm_e paLevel, uint8_t channel, rf24_datarate_e
22
22
23
23
// Start up the radio library
24
24
RF24::begin ();
25
- RF24::enableDynamicPayloads ();
26
- RF24::setAutoAck (false );
27
- RF24::setRetries (15 , 15 );
28
- RF24::setPALevel (paLevel);
29
25
RF24::setChannel (channel);
26
+ RF24::setPALevel (paLevel);
30
27
RF24::setDataRate (dataRate);
28
+ RF24::setAutoAck (true );
29
+ RF24::setRetries (2 ,15 );
31
30
RF24::setCRCLength (RF24_CRC_16);
31
+ RF24::enableDynamicPayloads ();
32
+
32
33
33
34
// All repeater nodes and gateway listen to broadcast pipe (for PING messages)
34
35
if (isRelay) {
@@ -217,51 +218,21 @@ boolean Sensor::send(message_s message, int length) {
217
218
218
219
219
220
boolean Sensor::sendWrite (uint8_t dest, message_s message, int length) {
220
-
221
221
message.header .last = radioId;
222
222
message.header .crc = crc8Message (message, length);
223
223
debug (PSTR (" Tx: fr=%d,to=%d,la=%d,ne=%d,ci=%d,mt=%d,ty=%d,cr=%d: %s\n " ),
224
224
message.header .from ,message.header .to , message.header .last , dest, message.header .childId , message.header .messageType , message.header .type , message.header .crc , message.data );
225
225
226
- bool ok = true ;
227
226
bool broadcast = message.header .messageType == M_INTERNAL && message.header .type == I_PING;
228
- // int retry = WRITE_RETRY;
229
227
RF24::stopListening ();
230
228
RF24::openWritingPipe (TO_ADDR (dest));
231
- RF24::write (&message, min (MAX_MESSAGE_LENGTH, sizeof (message.header ) + length), broadcast);
232
- RF24::closeReadingPipe (WRITE_PIPE); // Stop listening to write-pipe after transmit
229
+ bool ok = RF24::write (&message, min (MAX_MESSAGE_LENGTH, sizeof (message.header ) + length), broadcast);
233
230
RF24::startListening ();
234
231
235
- if (!broadcast) {
236
- // ---------------- WAIT FOR ACK ------------------
237
- unsigned long startedWaiting = millis ();
238
- bool timeout = false ;
239
- // Wait for ack message maximum 50 ms
240
- while ( !RF24::available () && !timeout ) {
241
- if (millis () - startedWaiting > ACK_MAX_WAIT ) {
242
- timeout = true ;
243
- debug (PSTR (" Ack: receive timeout\n " ));
244
- ok = false ;
245
- }
246
- }
247
- // Check payload size and content
248
- if (!timeout) {
249
- // Check payload size and content
250
- if (RF24::getDynamicPayloadSize ()==sizeof (uint8_t )) {
251
- uint8_t idest;
252
- RF24::read ( &idest, sizeof (uint8_t ));
253
- if (dest != idest) {
254
- debug (PSTR (" Ack: received ack from the wrong sensor\n " ));
255
- ok = false ;
256
- } else {
257
- debug (PSTR (" Ack: received OK\n " ));
258
- }
259
- } else {
260
- ok = false ;
261
- debug (PSTR (" Ack: received none ack msg.\n " ));
262
- }
263
- }
264
- }
232
+ if (ok)
233
+ debug (PSTR (" Sent successfully\n " ));
234
+ else
235
+ debug (PSTR (" Send failed\n " ));
265
236
266
237
267
238
return ok;
@@ -456,15 +427,6 @@ boolean Sensor::readMessage() {
456
427
uint8_t len = RF24::getDynamicPayloadSize ();
457
428
RF24::read (&msg, len);
458
429
459
- if (!(msg.header .messageType ==M_INTERNAL && msg.header .type == I_PING)) {
460
- delay (ACK_SEND_DELAY); // Small delay here to let other side switch to reading mode
461
- RF24::stopListening ();
462
- RF24::openWritingPipe (TO_ADDR (msg.header .last ));
463
- RF24::write (&radioId, sizeof (uint8_t ));
464
- RF24::closeReadingPipe (WRITE_PIPE); // Stop listening to write-pipe after transmit
465
- RF24::startListening ();
466
- debug (PSTR (" Sent ack msg to %d\n " ), msg.header .last );
467
- }
468
430
uint8_t valid = validate (len-sizeof (header_s));
469
431
boolean ok = valid == VALIDATE_OK;
470
432
0 commit comments