From 549f8fd910910ca612579411dae00828e6e514ba Mon Sep 17 00:00:00 2001 From: john30 Date: Sun, 8 Nov 2015 14:01:57 +0100 Subject: [PATCH] fix for removing ident message from additional scan messages, fallback to autoscan results in "scan result" --- src/ebusd/bushandler.cpp | 48 ++++++++++++++++++++++++++-------------- 1 file changed, 31 insertions(+), 17 deletions(-) diff --git a/src/ebusd/bushandler.cpp b/src/ebusd/bushandler.cpp index f2e2e0c0..5dd6b1bb 100644 --- a/src/ebusd/bushandler.cpp +++ b/src/ebusd/bushandler.cpp @@ -796,12 +796,10 @@ void BusHandler::receiveCompleted() result_t BusHandler::startScan(bool full) { deque messages = m_messages->findAll("scan", ""); - for (deque::iterator it = messages.begin(); it < messages.end();) { - Message* message = *it++; - if (message->getId()[0] == 0x07 && message->getId()[1] == 0x04) { - messages.erase(it - 1); // query pb 0x07 / sb 0x04 only once - break; - } + for (deque::iterator it = messages.begin(); it < messages.end(); it++) { + Message* message = *it; + if (message->getId()[0] == 0x07 && message->getId()[1] == 0x04) + messages.erase(it--); // query pb 0x07 / sb 0x04 only once } Message* scanMessage = m_messages->getScanMessage(); @@ -853,26 +851,42 @@ void BusHandler::formatScanResult(ostringstream& output) output << hex << setw(2) << setfill('0') << static_cast(slave) << it->second; } } + if (first) { + // fallback to autoscan results + for (unsigned char slave = 1; slave != 0; slave++) { // 0 is known to be a master + if (isValidAddress(slave, false) && !isMaster(slave) && (m_seenAddresses[slave]&SCANNED)!=0) { + Message* message = m_messages->getScanMessage(slave); + if (message!=NULL && message->getLastUpdateTime()>0) { + if (first) + first = false; + else + output << endl; + output << hex << setw(2) << setfill('0') << static_cast(slave); + message->decodeLastData(output, 0, true); + } + } + } + } } void BusHandler::formatSeenInfo(ostringstream& output) { - for (unsigned char address = 1; address != 0; address++) { // 0 is known to be a master - if (isValidAddress(address, false) && m_seenAddresses[address]!=0) { - output << endl << "address " << setfill('0') << setw(2) << hex << static_cast(address); - if (isMaster(address)) { - output << ": master #" << setw(0) << dec << static_cast(getMasterNumber(address)); + for (unsigned char slave = 1; slave != 0; slave++) { // 0 is known to be a master + if (isValidAddress(slave, false) && m_seenAddresses[slave]!=0) { + output << endl << "address " << setfill('0') << setw(2) << hex << static_cast(slave); + if (isMaster(slave)) { + output << ": master #" << setw(0) << dec << static_cast(getMasterNumber(slave)); } else { output << ": slave"; - unsigned char master = getMasterAddress(address); + unsigned char master = getMasterAddress(slave); if (master!=SYN) output << " of " << setfill('0') << setw(2) << hex << static_cast(master); } - if ((m_seenAddresses[address]&SEEN)!=0) + if ((m_seenAddresses[slave]&SEEN)!=0) output << ", seen"; - if ((m_seenAddresses[address]&SCANNED)!=0) { + if ((m_seenAddresses[slave]&SCANNED)!=0) { output << ", scanned"; - Message* message = m_messages->getScanMessage(address); + Message* message = m_messages->getScanMessage(slave); if (message!=NULL && message->getLastUpdateTime()>0) { // add detailed scan info: Manufacturer ID SW HW output << " \""; @@ -883,8 +897,8 @@ void BusHandler::formatSeenInfo(ostringstream& output) output << "\""; } } - if ((m_seenAddresses[address]&LOAD_DONE)!=0) - output << ", loaded \"" << m_loadedFiles[address] << "\""; + if ((m_seenAddresses[slave]&LOAD_DONE)!=0) + output << ", loaded \"" << m_loadedFiles[slave] << "\""; } } }