From 56aaba03ad5ea1e0fc2d6ab6a4f3dbd8afba5d07 Mon Sep 17 00:00:00 2001 From: John Date: Tue, 30 May 2023 09:23:41 +0200 Subject: [PATCH] detecte injected scan messages and issue scan procedure for those --- src/ebusd/main.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/ebusd/main.cpp b/src/ebusd/main.cpp index 757da806..0f35089a 100644 --- a/src/ebusd/main.cpp +++ b/src/ebusd/main.cpp @@ -1031,6 +1031,8 @@ int main(int argc, char* argv[], char* envp[]) { s_mainLoop = new MainLoop(s_opt, device, s_messageMap, s_scanHelper); if (s_opt.injectMessages) { BusHandler* busHandler = s_mainLoop->getBusHandler(); + int scanAdrCount = 0; + bool scanAddresses[256] = {}; while (arg_index < argc) { // add each passed message MasterSymbolString master; @@ -1039,6 +1041,18 @@ int main(int argc, char* argv[], char* envp[]) { continue; } busHandler->injectMessage(master, slave); + if (s_opt.scanConfig && master.size() >= 5 && master[4] == 0 && master[2] == 0x07 && master[3] == 0x04 + && isValidAddress(master[1], false) && !isMaster(master[1]) && !scanAddresses[master[1]]) { + // scan message, simulate scanning + scanAddresses[master[1]] = true; + scanAdrCount++; + } + } + for (symbol_t address = 0; scanAdrCount > 0; address++) { + if (scanAddresses[address]) { + scanAdrCount--; + busHandler->scanAndWait(address, true); + } } if (s_opt.stopAfterInject) { shutdown();