store loaded files with more details

This commit is contained in:
john30
2017-03-19 21:18:20 +01:00
parent 28a30a67fb
commit ca5d436162
2 changed files with 59 additions and 15 deletions
+53 -15
View File
@@ -31,7 +31,7 @@ using std::dec;
using std::hex; using std::hex;
using std::setfill; using std::setfill;
using std::setw; using std::setw;
using std::endl;
// the string used for answering to a scan request (07h 04h) // the string used for answering to a scan request (07h 04h)
#define SCAN_ANSWER ("ebusd.eu;" PACKAGE_NAME ";" SCAN_VERSION ";100") #define SCAN_ANSWER ("ebusd.eu;" PACKAGE_NAME ";" SCAN_VERSION ";100")
@@ -1070,7 +1070,7 @@ void BusHandler::receiveCompleted() {
if (message) { if (message) {
key = message->getKey(); key = message->getKey();
} else { } else {
key = Message::createKey(m_command, 4); // up to 4 DD bytes key = Message::createKey(m_command, m_command[1] == BROADCAST ? 1 : 4); // up to 4 DD bytes (1 for broadcast)
} }
m_grabbedMessages[key].setLastData(m_command, m_response); m_grabbedMessages[key].setLastData(m_command, m_response);
} }
@@ -1293,20 +1293,22 @@ void BusHandler::formatSeenInfo(ostringstream& output) {
} }
} }
} }
vector<string> loadedFiles = m_messages->getLoadedFiles(address); vector<string>& loadedFiles = m_messages->getLoadedFiles(address);
if (!loadedFiles.empty()) { if (!loadedFiles.empty()) {
bool first = true; bool first = true;
for (vector<string>::iterator it = loadedFiles.begin(); it != loadedFiles.end(); it++) { for (auto& loadedFile : loadedFiles) {
if (first) { if (first) {
first = false; first = false;
output << ", loaded \""; output << ", loaded \"";
} else { } else {
output << ", \""; output << ", \"";
} }
output << *it << "\""; output << loadedFile << "\"";
it++; string comment;
if (!(*it).empty()) { if (m_messages->getLoadedFileInfo(loadedFile, comment)) {
output << " (" << *it << ")"; if (!comment.empty()) {
output << " (" << comment << ")";
}
} }
} }
} }
@@ -1322,13 +1324,24 @@ void BusHandler::formatUpdateInfo(ostringstream& output) {
output << ",\"r\":" << (m_device->isReadOnly() ? 1 : 0); output << ",\"r\":" << (m_device->isReadOnly() ? 1 : 0);
output << ",\"an\":" << (m_answer ? 1 : 0); output << ",\"an\":" << (m_answer ? 1 : 0);
output << ",\"co\":" << (m_addressConflict ? 1 : 0); output << ",\"co\":" << (m_addressConflict ? 1 : 0);
if (m_grabMessages) {
size_t unknownCnt = 0;
for (map<uint64_t, GrabbedMessage>::iterator it = m_grabbedMessages.begin(); it != m_grabbedMessages.end();
it++) {
Message* message = m_messages->find(it->second.getLastMasterData());
if (!message) {
unknownCnt++;
}
}
output << ",\"gu\":" << unknownCnt;
}
unsigned char address = 0; unsigned char address = 0;
for (int index = 0; index < 256; index++, address++) { for (int index = 0; index < 256; index++, address++) {
bool ownAddress = !m_device->isReadOnly() && (address == m_ownMasterAddress || address == m_ownSlaveAddress); bool ownAddress = !m_device->isReadOnly() && (address == m_ownMasterAddress || address == m_ownSlaveAddress);
if (!isValidAddress(address, false) || ((m_seenAddresses[address]&SEEN) == 0 && !ownAddress)) { if (!isValidAddress(address, false) || ((m_seenAddresses[address]&SEEN) == 0 && !ownAddress)) {
continue; continue;
} }
output << ",\"" << setfill('0') << setw(2) << hex << static_cast<unsigned>(address); output << ",\"" << setfill('0') << setw(2) << hex << static_cast<unsigned>(address) << dec << setw(0);
output << "\":{\"o\":" << (ownAddress ? 1 : 0); output << "\":{\"o\":" << (ownAddress ? 1 : 0);
map<symbol_t, vector<string>>::iterator it = m_scanResults.find(address); map<symbol_t, vector<string>>::iterator it = m_scanResults.find(address);
if (it != m_scanResults.end()) { if (it != m_scanResults.end()) {
@@ -1345,20 +1358,22 @@ void BusHandler::formatUpdateInfo(ostringstream& output) {
message->decodeLastData(output, OF_NAMES|OF_NUMERIC|OF_JSON|OF_SHORT, true); message->decodeLastData(output, OF_NAMES|OF_NUMERIC|OF_JSON|OF_SHORT, true);
} }
} }
vector<string> loadedFiles = m_messages->getLoadedFiles(address); vector<string>& loadedFiles = m_messages->getLoadedFiles(address);
if (!loadedFiles.empty()) { if (!loadedFiles.empty()) {
output << ",\"f\":["; output << ",\"f\":[";
bool first = true; bool first = true;
for (vector<string>::iterator it = loadedFiles.begin(); it != loadedFiles.end(); it++) { for (auto& loadedFile : loadedFiles) {
if (first) { if (first) {
first = false; first = false;
} else { } else {
output << ","; output << ",";
} }
output << "{\"f\":\"" << *it << "\""; output << "{\"f\":\"" << loadedFile << "\"";
it++; string comment;
if (!(*it).empty()) { if (m_messages->getLoadedFileInfo(loadedFile, comment)) {
output << ",\"c\":\"" << *it << "\""; if (!comment.empty()) {
output << ",\"c\":\"" << comment << "\"";
}
} }
output << "}"; output << "}";
} }
@@ -1366,6 +1381,29 @@ void BusHandler::formatUpdateInfo(ostringstream& output) {
} }
output << "}"; output << "}";
} }
vector<string> loadedFiles = m_messages->getLoadedFiles();
if (!loadedFiles.empty()) {
output << ",\"l\":{";
bool first = true;
for (auto& loadedFile : loadedFiles) {
if (first) {
first = false;
} else {
output << ",";
}
output << "\"" << loadedFile << "\":{";
string comment;
size_t hash, size;
time_t time;
if (m_messages->getLoadedFileInfo(loadedFile, comment, &hash, &size, &time)) {
output << "\"h\":\"";
MappedFileReader::formatHash(hash, output);
output << "\",\"s\":" << size << ",\"t\":" << time;
}
output << "}";
}
output << "}";
}
} }
result_t BusHandler::scanAndWait(symbol_t dstAddress, bool loadScanConfig, bool reload) { result_t BusHandler::scanAndWait(symbol_t dstAddress, bool loadScanConfig, bool reload) {
+6
View File
@@ -314,6 +314,12 @@ class GrabbedMessage {
*/ */
void setLastData(MasterSymbolString& master, SlaveSymbolString& slave); void setLastData(MasterSymbolString& master, SlaveSymbolString& slave);
/**
* Get the last @a MasterSymbolString.
* @return the last @a MasterSymbolString.
*/
MasterSymbolString& getLastMasterData() { return m_lastMaster; }
/** /**
* Dump the last received data and message count to the output. * Dump the last received data and message count to the output.
* @param unknown whether to dump only if this message is unknown. * @param unknown whether to dump only if this message is unknown.