fix for full scan and repeated loading attempt of non-existent config files, removed "seen" from "info" result as only seen addresses are included and print master number of slaves with associated master instead of master address

This commit is contained in:
john30
2016-01-06 12:33:59 +01:00
parent bc84dd389f
commit 93b83c5fa5
2 changed files with 22 additions and 22 deletions
+20 -19
View File
@@ -95,9 +95,11 @@ result_t ScanRequest::prepare(unsigned char ownMasterAddress)
if (m_slaves.empty()) if (m_slaves.empty())
return RESULT_ERR_EOF; return RESULT_ERR_EOF;
unsigned char dstAddress = m_slaves.front(); unsigned char dstAddress = m_slaves.front();
if (m_index==0 && m_messages.size()==m_allMessages.size()) // first message for this address
m_busHandler->setScanResult(dstAddress, "");
istringstream input; istringstream input;
result_t result = m_message->prepareMaster(ownMasterAddress, m_master, input, UI_FIELD_SEPARATOR, dstAddress, m_index); result_t result = m_message->prepareMaster(ownMasterAddress, m_master, input, UI_FIELD_SEPARATOR, dstAddress, m_index);
if (result >= RESULT_OK) if (result >= RESULT_OK)
logInfo(lf_bus, "scan %2.2x cmd: %s", dstAddress, m_master.getDataStr().c_str()); logInfo(lf_bus, "scan %2.2x cmd: %s", dstAddress, m_master.getDataStr().c_str());
return result; return result;
@@ -131,17 +133,19 @@ bool ScanRequest::notify(result_t result, SymbolString& slave)
logInfo(lf_bus, "scan %2.2x timed out (%d slaves left)", dstAddress, m_slaves.size()); logInfo(lf_bus, "scan %2.2x timed out (%d slaves left)", dstAddress, m_slaves.size());
else else
logError(lf_bus, "scan %2.2x failed (%d slaves left): %s", dstAddress, m_slaves.size(), getResultCode(result)); logError(lf_bus, "scan %2.2x failed (%d slaves left): %s", dstAddress, m_slaves.size(), getResultCode(result));
m_busHandler->setScanResult(dstAddress, m_scanResult.str(), result); m_messages.clear(); // skip remaining secondary messages
// skip remaining secondary messages
m_messages.clear();
} else if (m_messages.empty()) { } else if (m_messages.empty()) {
m_busHandler->setScanResult(dstAddress, m_scanResult.str(), result);
if (!m_slaves.empty()) if (!m_slaves.empty())
m_slaves.pop_front(); m_slaves.pop_front();
logNotice(lf_bus, "scan %2.2x completed (%d slaves left)", dstAddress, m_slaves.size()); logNotice(lf_bus, "scan %2.2x completed (%d slaves left)", dstAddress, m_slaves.size());
} }
if (m_slaves.empty()) if (m_messages.empty()) // last message for this address
m_busHandler->setScanResult(dstAddress, m_scanResult.str());
if (m_slaves.empty()) {
logNotice(lf_bus, "scan finished");
return false; return false;
}
if (m_messages.empty()) { if (m_messages.empty()) {
m_messages = m_allMessages; m_messages = m_allMessages;
m_scanResult.str(""); m_scanResult.str("");
@@ -860,17 +864,14 @@ result_t BusHandler::startScan(bool full)
return RESULT_OK; return RESULT_OK;
} }
void BusHandler::setScanResult(unsigned char dstAddress, string str, result_t result) void BusHandler::setScanResult(unsigned char dstAddress, string str)
{ {
if (result==RESULT_ERR_NO_SIGNAL)
return;
m_seenAddresses[dstAddress] |= SCAN_INIT; m_seenAddresses[dstAddress] |= SCAN_INIT;
if (result==RESULT_OK) { if (str.length()>0) {
m_seenAddresses[dstAddress] |= SCAN_DONE; m_seenAddresses[dstAddress] |= SCAN_DONE;
m_scanResults[dstAddress] = str;
logNotice(lf_bus, "scan %2.2x: %s", dstAddress, str.c_str()); logNotice(lf_bus, "scan %2.2x: %s", dstAddress, str.c_str());
} }
if (str.length()>0)
m_scanResults[dstAddress] = str;
} }
void BusHandler::formatScanResult(ostringstream& output) void BusHandler::formatScanResult(ostringstream& output)
@@ -907,18 +908,18 @@ void BusHandler::formatScanResult(ostringstream& output)
void BusHandler::formatSeenInfo(ostringstream& output) void BusHandler::formatSeenInfo(ostringstream& output)
{ {
for (unsigned char slave = 1; slave != 0; slave++) { // 0 is known to be a master for (unsigned char slave = 1; slave != 0; slave++) { // 0 is known to be a master
if (isValidAddress(slave, false) && m_seenAddresses[slave]!=0) { if (isValidAddress(slave, false) && (m_seenAddresses[slave]&SEEN)!=0) {
output << endl << "address " << setfill('0') << setw(2) << hex << static_cast<unsigned>(slave); output << endl << "address " << setfill('0') << setw(2) << hex << static_cast<unsigned>(slave);
unsigned char master;
if (isMaster(slave)) { if (isMaster(slave)) {
output << ": master #" << setw(0) << dec << static_cast<unsigned>(getMasterNumber(slave)); output << ": master";
master = slave;
} else { } else {
output << ": slave"; output << ": slave";
unsigned char master = getMasterAddress(slave); master = getMasterAddress(slave);
if (master!=SYN)
output << " of " << setfill('0') << setw(2) << hex << static_cast<unsigned>(master);
} }
if ((m_seenAddresses[slave]&SEEN)!=0) if (master != SYN)
output << ", seen"; output << " #" << setw(0) << dec << static_cast<unsigned>(getMasterNumber(master));
if ((m_seenAddresses[slave]&SCAN_DONE)!=0) { if ((m_seenAddresses[slave]&SCAN_DONE)!=0) {
output << ", scanned"; output << ", scanned";
Message* message = m_messages->getScanMessage(slave); Message* message = m_messages->getScanMessage(slave);
+2 -3
View File
@@ -365,10 +365,9 @@ public:
/** /**
* Set the scan result @a string for a scanned slave address. * Set the scan result @a string for a scanned slave address.
* @param dstAddress the scanned slave address. * @param dstAddress the scanned slave address.
* @param str the scan result @a string to set. * @param str the scan result @a string to set, or empty if not a single part of the scan was successful.
* @param result the scan result code.
*/ */
void setScanResult(unsigned char dstAddress, string str, result_t result); void setScanResult(unsigned char dstAddress, string str);
/** /**
* Format the scan result to the @a ostringstream. * Format the scan result to the @a ostringstream.