fix syn generator timing

This commit is contained in:
John
2023-11-10 19:06:30 +01:00
parent 307786e08b
commit dbbf235c50
3 changed files with 7 additions and 4 deletions
+3
View File
@@ -35,6 +35,9 @@ namespace ebusd {
/** the default time [ms] for retrieving a symbol from an addressed slave. */
#define SLAVE_RECV_TIMEOUT 15
/** the desired delay time [ms] for sending the AUTO-SYN symbol after last seen symbol. */
#define SYN_INTERVAL 40
/** the maximum allowed time [ms] for retrieving the AUTO-SYN symbol (45ms + 2*1,2% + 1 Symbol). */
#define SYN_TIMEOUT 51
+3 -3
View File
@@ -281,9 +281,9 @@ result_t DirectProtocolHandler::handleSymbol() {
return setState(bs_noSignal, result);
}
measureLatency(&sentTime, &recvTime);
if (m_generateSynInterval != SYN_TIMEOUT) {
if (m_generateSynInterval != SYN_INTERVAL) {
// received own AUTO-SYN symbol back again: act as AUTO-SYN generator now
m_generateSynInterval = SYN_TIMEOUT;
m_generateSynInterval = SYN_INTERVAL;
logNotice(lf_bus, "acting as AUTO-SYN generator");
}
m_remainLockCount = 0;
@@ -344,7 +344,7 @@ result_t DirectProtocolHandler::handleSymbol() {
time_t now;
time(&now);
if (result != RESULT_OK) {
if ((m_generateSynInterval != SYN_TIMEOUT && difftime(now, m_lastReceive) > 1)
if ((m_generateSynInterval != SYN_INTERVAL && difftime(now, m_lastReceive) > 1)
// at least one full second has passed since last received symbol
|| m_state == bs_noSignal) {
return setState(bs_noSignal, result);
+1 -1
View File
@@ -69,7 +69,7 @@ class DirectProtocolHandler : public ProtocolHandler {
: ProtocolHandler(config, device, listener),
m_lockCount(config.lockCount <= 3 ? 3 : config.lockCount),
m_remainLockCount(config.lockCount == 0 ? 1 : 0),
m_generateSynInterval(config.generateSyn ? SYN_TIMEOUT*getMasterNumber(config.ownAddress)+SYMBOL_DURATION : 0),
m_generateSynInterval(config.generateSyn ? 10*getMasterNumber(config.ownAddress)+SYN_TIMEOUT : 0),
m_currentRequest(nullptr), m_currentAnswering(false), m_nextSendPos(0),
m_state(bs_noSignal), m_escape(0), m_crc(0), m_crcValid(false), m_repeat(false) {
m_lastSynReceiveTime.tv_sec = 0;