Skip to content

Commit 2279dc1

Browse files
authored
Minimize FindParent collisions and minor tweaks (#501)
1 parent 751a5dc commit 2279dc1

File tree

2 files changed

+11
-6
lines changed

2 files changed

+11
-6
lines changed

libraries/MySensors/core/MyTransport.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ void stInitTransition() {
4444
_transportSM.failedUplinkTransmissions = 0;
4545
_transportSM.pingActive = false;
4646
_transportSM.transportActive = false;
47-
#if defined(MY_TRANSPORT_SANITY_CHECK) || defined(MY_GATEWAY_FEATURE) || defined(MY_REPEATER_FEATURE)
47+
#if defined(MY_TRANSPORT_SANITY_CHECK) || defined(MY_REPEATER_FEATURE)
4848
_transport_lastSanityCheck = hwMillis();
4949
#endif
5050
_transport_lastUplinkCheck = 0;
@@ -558,7 +558,8 @@ void transportProcessMessage() {
558558
_transport_lastUplinkCheck = hwMillis();
559559
#endif
560560
debug(PSTR("TSP:MSG:GWL OK\n")); // GW uplink ok
561-
//delay(hwMillis() & 0x3ff);
561+
// delay minimizes collisions
562+
delay(hwMillis() & 0x3ff);
562563
transportRouteMessage(build(_msgTmp, _nc.nodeId, sender, NODE_SENSOR_ID, C_INTERNAL, I_FIND_PARENT_RESPONSE, false).set(_nc.distance));
563564
}
564565
}
@@ -669,9 +670,9 @@ bool transportSendWrite(uint8_t to, MyMessage &message) {
669670
setIndication(INDICATION_TX);
670671
bool ok = transportSend(to, &message, min(MAX_MESSAGE_LENGTH, HEADER_SIZE + length));
671672

672-
debug(PSTR("%sTSP:MSG:SEND %d-%d-%d-%d s=%d,c=%d,t=%d,pt=%d,l=%d,sg=%d,st=%s:%s\n"),
673+
debug(PSTR("%sTSP:MSG:SEND %d-%d-%d-%d s=%d,c=%d,t=%d,pt=%d,l=%d,sg=%d,ft=%d,st=%s:%s\n"),
673674
(ok || to == BROADCAST_ADDRESS ? "" : "!"),message.sender,message.last, to, message.destination, message.sensor, mGetCommand(message), message.type,
674-
mGetPayloadType(message), mGetLength(message), mGetSigned(message), to==BROADCAST_ADDRESS ? "bc" : (ok ? "ok":"fail"), message.getString(_convBuf));
675+
mGetPayloadType(message), mGetLength(message), mGetSigned(message), _transportSM.failedUplinkTransmissions, to==BROADCAST_ADDRESS ? "bc" : (ok ? "ok":"fail"), message.getString(_convBuf));
675676

676677
return (ok || to==BROADCAST_ADDRESS);
677678
}

libraries/MySensors/core/MyTransport.h

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,11 @@
2727

2828
#include "MySensorsCore.h"
2929

30-
#define TRANSMISSION_FAILURES 5 //!< search for a new parent node after this many transmission failures
30+
#if defined(MY_REPEATER_FEATURE)
31+
#define TRANSMISSION_FAILURES 10 //!< search for a new parent node after this many transmission failures, higher threshold for repeating nodes
32+
#else
33+
#define TRANSMISSION_FAILURES 5 //!< search for a new parent node after this many transmission failures, lower threshold for non-repeating nodes
34+
#endif
3135
#define TIMEOUT_FAILURE_STATE 10000 //!< duration failure state
3236
#define STATE_TIMEOUT 2000 //!< general state timeout
3337
#define STATE_RETRIES 3 //!< retries before switching to FAILURE
@@ -37,7 +41,7 @@
3741
#define MAX_HOPS ((uint8_t)254) //!< maximal mumber of hops for ping/pong
3842
#define INVALID_HOPS ((uint8_t)255) //!< invalid hops
3943
#define MAX_SUBSEQ_MSGS 5 //!< Maximum number of subsequentially processed messages in FIFO (to prevent transport deadlock if HW issue)
40-
#define CHKUPL_INTERVAL ((uint32_t)5000) //!< Minimum time interval to re-check uplink
44+
#define CHKUPL_INTERVAL ((uint32_t)10000) //!< Minimum time interval to re-check uplink
4145

4246
#define _autoFindParent (bool)(MY_PARENT_NODE_ID == AUTO) //!< returns true if static parent id is undefined
4347
#define isValidDistance(distance) (bool)(distance!=DISTANCE_INVALID) //!< returns true if distance is valid

0 commit comments

Comments
 (0)