fix for removing ident message from additional scan messages, fallback to autoscan results in "scan result"

This commit is contained in:
john30
2015-11-08 14:01:57 +01:00
parent dc3796959e
commit 549f8fd910
+31 -17
View File
@@ -796,12 +796,10 @@ void BusHandler::receiveCompleted()
result_t BusHandler::startScan(bool full) result_t BusHandler::startScan(bool full)
{ {
deque<Message*> messages = m_messages->findAll("scan", ""); deque<Message*> messages = m_messages->findAll("scan", "");
for (deque<Message*>::iterator it = messages.begin(); it < messages.end();) { for (deque<Message*>::iterator it = messages.begin(); it < messages.end(); it++) {
Message* message = *it++; Message* message = *it;
if (message->getId()[0] == 0x07 && message->getId()[1] == 0x04) { if (message->getId()[0] == 0x07 && message->getId()[1] == 0x04)
messages.erase(it - 1); // query pb 0x07 / sb 0x04 only once messages.erase(it--); // query pb 0x07 / sb 0x04 only once
break;
}
} }
Message* scanMessage = m_messages->getScanMessage(); Message* scanMessage = m_messages->getScanMessage();
@@ -853,26 +851,42 @@ void BusHandler::formatScanResult(ostringstream& output)
output << hex << setw(2) << setfill('0') << static_cast<unsigned>(slave) << it->second; output << hex << setw(2) << setfill('0') << static_cast<unsigned>(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<unsigned>(slave);
message->decodeLastData(output, 0, true);
}
}
}
}
} }
void BusHandler::formatSeenInfo(ostringstream& output) void BusHandler::formatSeenInfo(ostringstream& output)
{ {
for (unsigned char address = 1; address != 0; address++) { // 0 is known to be a master for (unsigned char slave = 1; slave != 0; slave++) { // 0 is known to be a master
if (isValidAddress(address, false) && m_seenAddresses[address]!=0) { if (isValidAddress(slave, false) && m_seenAddresses[slave]!=0) {
output << endl << "address " << setfill('0') << setw(2) << hex << static_cast<unsigned>(address); output << endl << "address " << setfill('0') << setw(2) << hex << static_cast<unsigned>(slave);
if (isMaster(address)) { if (isMaster(slave)) {
output << ": master #" << setw(0) << dec << static_cast<unsigned>(getMasterNumber(address)); output << ": master #" << setw(0) << dec << static_cast<unsigned>(getMasterNumber(slave));
} else { } else {
output << ": slave"; output << ": slave";
unsigned char master = getMasterAddress(address); unsigned char master = getMasterAddress(slave);
if (master!=SYN) if (master!=SYN)
output << " of " << setfill('0') << setw(2) << hex << static_cast<unsigned>(master); output << " of " << setfill('0') << setw(2) << hex << static_cast<unsigned>(master);
} }
if ((m_seenAddresses[address]&SEEN)!=0) if ((m_seenAddresses[slave]&SEEN)!=0)
output << ", seen"; output << ", seen";
if ((m_seenAddresses[address]&SCANNED)!=0) { if ((m_seenAddresses[slave]&SCANNED)!=0) {
output << ", scanned"; output << ", scanned";
Message* message = m_messages->getScanMessage(address); Message* message = m_messages->getScanMessage(slave);
if (message!=NULL && message->getLastUpdateTime()>0) { if (message!=NULL && message->getLastUpdateTime()>0) {
// add detailed scan info: Manufacturer ID SW HW // add detailed scan info: Manufacturer ID SW HW
output << " \""; output << " \"";
@@ -883,8 +897,8 @@ void BusHandler::formatSeenInfo(ostringstream& output)
output << "\""; output << "\"";
} }
} }
if ((m_seenAddresses[address]&LOAD_DONE)!=0) if ((m_seenAddresses[slave]&LOAD_DONE)!=0)
output << ", loaded \"" << m_loadedFiles[address] << "\""; output << ", loaded \"" << m_loadedFiles[slave] << "\"";
} }
} }
} }