fix syn generator timing
This commit is contained in:
@@ -35,6 +35,9 @@ namespace ebusd {
|
|||||||
/** the default time [ms] for retrieving a symbol from an addressed slave. */
|
/** the default time [ms] for retrieving a symbol from an addressed slave. */
|
||||||
#define SLAVE_RECV_TIMEOUT 15
|
#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). */
|
/** the maximum allowed time [ms] for retrieving the AUTO-SYN symbol (45ms + 2*1,2% + 1 Symbol). */
|
||||||
#define SYN_TIMEOUT 51
|
#define SYN_TIMEOUT 51
|
||||||
|
|
||||||
|
|||||||
@@ -281,9 +281,9 @@ result_t DirectProtocolHandler::handleSymbol() {
|
|||||||
return setState(bs_noSignal, result);
|
return setState(bs_noSignal, result);
|
||||||
}
|
}
|
||||||
measureLatency(&sentTime, &recvTime);
|
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
|
// 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");
|
logNotice(lf_bus, "acting as AUTO-SYN generator");
|
||||||
}
|
}
|
||||||
m_remainLockCount = 0;
|
m_remainLockCount = 0;
|
||||||
@@ -344,7 +344,7 @@ result_t DirectProtocolHandler::handleSymbol() {
|
|||||||
time_t now;
|
time_t now;
|
||||||
time(&now);
|
time(&now);
|
||||||
if (result != RESULT_OK) {
|
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
|
// at least one full second has passed since last received symbol
|
||||||
|| m_state == bs_noSignal) {
|
|| m_state == bs_noSignal) {
|
||||||
return setState(bs_noSignal, result);
|
return setState(bs_noSignal, result);
|
||||||
|
|||||||
@@ -69,7 +69,7 @@ class DirectProtocolHandler : public ProtocolHandler {
|
|||||||
: ProtocolHandler(config, device, listener),
|
: ProtocolHandler(config, device, listener),
|
||||||
m_lockCount(config.lockCount <= 3 ? 3 : config.lockCount),
|
m_lockCount(config.lockCount <= 3 ? 3 : config.lockCount),
|
||||||
m_remainLockCount(config.lockCount == 0 ? 1 : 0),
|
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_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_state(bs_noSignal), m_escape(0), m_crc(0), m_crcValid(false), m_repeat(false) {
|
||||||
m_lastSynReceiveTime.tv_sec = 0;
|
m_lastSynReceiveTime.tv_sec = 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user