Skip to content

Commit a4aabb9

Browse files
committed
Testing new TMRh20/RF24 library. Looks promising. No more soft-acks :)
1 parent ab3bad4 commit a4aabb9

File tree

3 files changed

+12
-54
lines changed

3 files changed

+12
-54
lines changed

libraries/MySensors/Config.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,6 @@
1212
/***
1313
* Enable/Disable debug logging
1414
*/
15-
//#define DEBUG
15+
#define DEBUG
1616

1717
#endif

libraries/MySensors/Sensor.cpp

+10-48
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,14 @@ void Sensor::setupRadio(rf24_pa_dbm_e paLevel, uint8_t channel, rf24_datarate_e
2222

2323
// Start up the radio library
2424
RF24::begin();
25-
RF24::enableDynamicPayloads();
26-
RF24::setAutoAck(false);
27-
RF24::setRetries(15, 15);
28-
RF24::setPALevel(paLevel);
2925
RF24::setChannel(channel);
26+
RF24::setPALevel(paLevel);
3027
RF24::setDataRate(dataRate);
28+
RF24::setAutoAck(true);
29+
RF24::setRetries(2,15);
3130
RF24::setCRCLength(RF24_CRC_16);
31+
RF24::enableDynamicPayloads();
32+
3233

3334
// All repeater nodes and gateway listen to broadcast pipe (for PING messages)
3435
if (isRelay) {
@@ -217,51 +218,21 @@ boolean Sensor::send(message_s message, int length) {
217218

218219

219220
boolean Sensor::sendWrite(uint8_t dest, message_s message, int length) {
220-
221221
message.header.last = radioId;
222222
message.header.crc = crc8Message(message, length);
223223
debug(PSTR("Tx: fr=%d,to=%d,la=%d,ne=%d,ci=%d,mt=%d,ty=%d,cr=%d: %s\n"),
224224
message.header.from,message.header.to, message.header.last, dest, message.header.childId, message.header.messageType, message.header.type, message.header.crc, message.data);
225225

226-
bool ok = true;
227226
bool broadcast = message.header.messageType == M_INTERNAL && message.header.type == I_PING;
228-
// int retry = WRITE_RETRY;
229227
RF24::stopListening();
230228
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);
233230
RF24::startListening();
234231

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"));
265236

266237

267238
return ok;
@@ -456,15 +427,6 @@ boolean Sensor::readMessage() {
456427
uint8_t len = RF24::getDynamicPayloadSize();
457428
RF24::read(&msg, len);
458429

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-
}
468430
uint8_t valid = validate(len-sizeof(header_s));
469431
boolean ok = valid == VALIDATE_OK;
470432

libraries/MySensors/Sensor.h

+1-5
Original file line numberDiff line numberDiff line change
@@ -50,11 +50,7 @@
5050
#define CURRENT_NODE_PIPE ((uint8_t)1)
5151
#define BROADCAST_PIPE ((uint8_t)2)
5252

53-
#define ACK_MAX_WAIT 50
54-
#define ACK_SEND_DELAY 10
55-
56-
#define WRITE_RETRY 5
57-
#define FIND_RELAY_RETRIES 20
53+
#define FIND_RELAY_RETRIES 3
5854

5955

6056
#define MAX_MESSAGE_LENGTH 32

0 commit comments

Comments
 (0)