diff --git a/src/ebusd/bushandler.cpp b/src/ebusd/bushandler.cpp index 7cef9958..524a3e2c 100644 --- a/src/ebusd/bushandler.cpp +++ b/src/ebusd/bushandler.cpp @@ -362,6 +362,9 @@ void BusHandler::clear() { } result_t BusHandler::sendAndWait(const MasterSymbolString& master, SlaveSymbolString* slave) { + if (m_state == bs_noSignal) { + return RESULT_ERR_NO_SIGNAL; // don't wait when there is no signal + } result_t result = RESULT_ERR_NO_SIGNAL; slave->clear(); ActiveBusRequest request(master, slave); diff --git a/src/ebusd/mainloop.cpp b/src/ebusd/mainloop.cpp index 2f136edb..c87d6ed9 100644 --- a/src/ebusd/mainloop.cpp +++ b/src/ebusd/mainloop.cpp @@ -299,7 +299,7 @@ void MainLoop::run() { reload = false; } } - if (!loadDelay) { + if (!loadDelay && m_busHandler->hasSignal()) { lastScanAddress = m_busHandler->getNextScanAddress(lastScanAddress, scanCompleted >= SCAN_REPEAT_COUNT); if (lastScanAddress == SYN) { taskDelay = 5; @@ -1825,6 +1825,9 @@ result_t MainLoop::executeScan(const vector& args, const string& levels, return RESULT_OK; } + if (!m_busHandler->hasSignal()) { + return RESULT_ERR_NO_SIGNAL; + } result_t result; symbol_t dstAddress = (symbol_t)parseInt(args[1].c_str(), 16, 0, 0xff, &result); if (result == RESULT_OK && !isValidAddress(dstAddress, false)) {