changed update logging from "updated" to "received" or "sent" and also log message when sent by ebusd, avoid unnecessary addSeenAddress() calls, removed logging of decoded poll result (already done as regular update output now)

This commit is contained in:
john30
2018-01-28 17:48:35 +01:00
parent d3f40712f9
commit 4cdcf2d35e
2 changed files with 27 additions and 39 deletions
+24 -36
View File
@@ -83,16 +83,9 @@ bool PollRequest::notify(result_t result, const SlaveSymbolString& slave) {
} }
} }
} }
ostringstream output;
if (result == RESULT_OK) {
result = m_message->decodeLastData(false, NULL, -1, 0, &output); // decode data
}
if (result < RESULT_OK) { if (result < RESULT_OK) {
logError(lf_bus, "poll %s %s failed: %s", m_message->getCircuit().c_str(), m_message->getName().c_str(), logError(lf_bus, "poll %s %s failed: %s", m_message->getCircuit().c_str(), m_message->getName().c_str(),
getResultCode(result)); getResultCode(result));
} else {
logNotice(lf_bus, "poll %s %s: %s", m_message->getCircuit().c_str(), m_message->getName().c_str(),
output.str().c_str());
} }
return false; return false;
} }
@@ -336,10 +329,6 @@ result_t BusHandler::sendAndWait(const MasterSymbolString& master, SlaveSymbolSt
bool success = m_finishedRequests.remove(&request, true); bool success = m_finishedRequests.remove(&request, true);
result = success ? request.m_result : RESULT_ERR_TIMEOUT; result = success ? request.m_result : RESULT_ERR_TIMEOUT;
if (result == RESULT_OK) { if (result == RESULT_OK) {
Message* message = m_messages->find(master);
if (message != NULL) {
m_messages->invalidateCache(message);
}
break; break;
} }
if (!success || result == RESULT_ERR_NO_SIGNAL || result == RESULT_ERR_SEND || result == RESULT_ERR_DEVICE) { if (!success || result == RESULT_ERR_NO_SIGNAL || result == RESULT_ERR_SEND || result == RESULT_ERR_DEVICE) {
@@ -731,7 +720,8 @@ result_t BusHandler::handleSymbol() {
m_crcValid = recvSymbol == m_crc; m_crcValid = recvSymbol == m_crc;
if (m_command[1] == BROADCAST) { if (m_command[1] == BROADCAST) {
if (m_crcValid) { if (m_crcValid) {
receiveCompleted(); addSeenAddress(m_command[0]);
messageCompleted();
return setState(bs_skip, RESULT_OK); return setState(bs_skip, RESULT_OK);
} }
return setState(bs_skip, RESULT_ERR_CRC); return setState(bs_skip, RESULT_ERR_CRC);
@@ -763,10 +753,11 @@ result_t BusHandler::handleSymbol() {
} }
if (m_currentRequest != NULL) { if (m_currentRequest != NULL) {
if (isMaster(m_currentRequest->m_master[1])) { if (isMaster(m_currentRequest->m_master[1])) {
messageCompleted();
return setState(bs_sendSyn, RESULT_OK); return setState(bs_sendSyn, RESULT_OK);
} }
} else if (isMaster(m_command[1])) { } else if (isMaster(m_command[1])) {
receiveCompleted(); messageCompleted();
return setState(bs_skip, RESULT_OK); return setState(bs_skip, RESULT_OK);
} }
@@ -819,9 +810,7 @@ result_t BusHandler::handleSymbol() {
if (!m_crcValid) { if (!m_crcValid) {
return setState(bs_skip, RESULT_ERR_ACK); return setState(bs_skip, RESULT_ERR_ACK);
} }
if (!m_currentAnswering) { messageCompleted();
receiveCompleted();
}
return setState(bs_skip, RESULT_OK); return setState(bs_skip, RESULT_OK);
} }
if (recvSymbol == NAK) { if (recvSymbol == NAK) {
@@ -850,6 +839,7 @@ result_t BusHandler::handleSymbol() {
case bs_sendCmdCrc: case bs_sendCmdCrc:
if (m_currentRequest->m_master[1] == BROADCAST) { if (m_currentRequest->m_master[1] == BROADCAST) {
messageCompleted();
return setState(bs_sendSyn, RESULT_OK); return setState(bs_sendSyn, RESULT_OK);
} }
m_crcValid = true; m_crcValid = true;
@@ -867,6 +857,7 @@ result_t BusHandler::handleSymbol() {
} }
return setState(bs_sendSyn, RESULT_ERR_ACK); return setState(bs_sendSyn, RESULT_ERR_ACK);
} }
messageCompleted();
return setState(bs_sendSyn, RESULT_OK); return setState(bs_sendSyn, RESULT_OK);
case bs_sendCmdAck: case bs_sendCmdAck:
@@ -883,7 +874,7 @@ result_t BusHandler::handleSymbol() {
return setState(bs_skip, RESULT_ERR_ACK); return setState(bs_skip, RESULT_ERR_ACK);
} }
if (isMaster(m_command[1])) { if (isMaster(m_command[1])) {
receiveCompleted(); // decode command and store value messageCompleted(); // TODO decode command and store value into database of internal variables
return setState(bs_skip, RESULT_OK); return setState(bs_skip, RESULT_OK);
} }
@@ -950,10 +941,6 @@ result_t BusHandler::setState(BusState state, result_t result, bool firstRepetit
m_currentRequest = NULL; m_currentRequest = NULL;
} else if (state == bs_sendSyn || (result != RESULT_OK && !firstRepetition)) { } else if (state == bs_sendSyn || (result != RESULT_OK && !firstRepetition)) {
logDebug(lf_bus, "notify request: %s", getResultCode(result)); logDebug(lf_bus, "notify request: %s", getResultCode(result));
symbol_t dstAddress = m_currentRequest->m_master[1];
if (result == RESULT_OK) {
addSeenAddress(dstAddress);
}
bool restart = m_currentRequest->notify( bool restart = m_currentRequest->notify(
result == RESULT_ERR_SYN && (m_state == bs_recvCmdAck || m_state == bs_recvRes) result == RESULT_ERR_SYN && (m_state == bs_recvCmdAck || m_state == bs_recvRes)
? RESULT_ERR_TIMEOUT : result, m_response); ? RESULT_ERR_TIMEOUT : result, m_response);
@@ -1072,22 +1059,23 @@ bool BusHandler::addSeenAddress(symbol_t address) {
return m_addressConflict && !hadConflict; return m_addressConflict && !hadConflict;
} }
void BusHandler::receiveCompleted() { void BusHandler::messageCompleted() {
const char* prefix = m_currentRequest ? "sent" : "received";
if (m_currentRequest) {
m_command = m_currentRequest->m_master;
}
symbol_t srcAddress = m_command[0], dstAddress = m_command[1]; symbol_t srcAddress = m_command[0], dstAddress = m_command[1];
if (srcAddress == dstAddress) { if (srcAddress == dstAddress) {
logError(lf_bus, "invalid self-addressed message from %2.2x", srcAddress); logError(lf_bus, "invalid self-addressed message from %2.2x", srcAddress);
return; return;
} }
if (!m_currentRequest) {
addSeenAddress(srcAddress);
}
if (!m_currentAnswering) { if (!m_currentAnswering) {
addSeenAddress(dstAddress); addSeenAddress(dstAddress);
} }
bool master = isMaster(dstAddress); bool master = isMaster(dstAddress);
if (dstAddress == BROADCAST) { if (dstAddress == BROADCAST) {
logInfo(lf_update, "update BC cmd: %s", m_command.getStr().c_str()); logInfo(lf_update, "%s BC cmd: %s", prefix, m_command.getStr().c_str());
if (m_command.getDataSize() >= 10 && m_command[2] == 0x07 && m_command[3] == 0x04) { if (m_command.getDataSize() >= 10 && m_command[2] == 0x07 && m_command[3] == 0x04) {
symbol_t slaveAddress = getSlaveAddress(srcAddress); symbol_t slaveAddress = getSlaveAddress(srcAddress);
addSeenAddress(slaveAddress); addSeenAddress(slaveAddress);
@@ -1118,9 +1106,9 @@ void BusHandler::receiveCompleted() {
} }
} }
} else if (master) { } else if (master) {
logInfo(lf_update, "update MM cmd: %s", m_command.getStr().c_str()); logInfo(lf_update, "%s MM cmd: %s", prefix, m_command.getStr().c_str());
} else { } else {
logInfo(lf_update, "update MS cmd: %s / %s", m_command.getStr().c_str(), m_response.getStr().c_str()); logInfo(lf_update, "%s MS cmd: %s / %s", prefix, m_command.getStr().c_str(), m_response.getStr().c_str());
if (m_command.size() >= 5 && m_command[2] == 0x07 && m_command[3] == 0x04) { if (m_command.size() >= 5 && m_command[2] == 0x07 && m_command[3] == 0x04) {
Message* message = m_messages->getScanMessage(dstAddress); Message* message = m_messages->getScanMessage(dstAddress);
if (message && (message->getLastUpdateTime() == 0 || message->getLastSlaveData().getDataSize() < 10)) { if (message && (message->getLastUpdateTime() == 0 || message->getLastSlaveData().getDataSize() < 10)) {
@@ -1149,11 +1137,11 @@ void BusHandler::receiveCompleted() {
} }
if (message == NULL) { if (message == NULL) {
if (dstAddress == BROADCAST) { if (dstAddress == BROADCAST) {
logNotice(lf_update, "unknown BC cmd: %s", m_command.getStr().c_str()); logNotice(lf_update, "%s unknown BC cmd: %s", prefix, m_command.getStr().c_str());
} else if (master) { } else if (master) {
logNotice(lf_update, "unknown MM cmd: %s", m_command.getStr().c_str()); logNotice(lf_update, "%s unknown MM cmd: %s", prefix, m_command.getStr().c_str());
} else { } else {
logNotice(lf_update, "unknown MS cmd: %s / %s", m_command.getStr().c_str(), m_response.getStr().c_str()); logNotice(lf_update, "%s unknown MS cmd: %s / %s", prefix, m_command.getStr().c_str(), m_response.getStr().c_str());
} }
} else { } else {
m_messages->invalidateCache(message); m_messages->invalidateCache(message);
@@ -1170,19 +1158,19 @@ void BusHandler::receiveCompleted() {
} else { } else {
string data = output.str(); string data = output.str();
if (m_answer && dstAddress == (master ? m_ownMasterAddress : m_ownSlaveAddress)) { if (m_answer && dstAddress == (master ? m_ownMasterAddress : m_ownSlaveAddress)) {
logNotice(lf_update, "self-update %s %s QQ=%2.2x: %s", circuit.c_str(), name.c_str(), srcAddress, logNotice(lf_update, "%s self-update %s %s QQ=%2.2x: %s", prefix, circuit.c_str(), name.c_str(), srcAddress,
data.c_str()); // TODO store in database of internal variables data.c_str()); // TODO store in database of internal variables
} else if (message->getDstAddress() == SYN) { // any destination } else if (message->getDstAddress() == SYN) { // any destination
if (message->getSrcAddress() == SYN) { // any destination and any source if (message->getSrcAddress() == SYN) { // any destination and any source
logNotice(lf_update, "update %s %s QQ=%2.2x ZZ=%2.2x: %s", circuit.c_str(), name.c_str(), srcAddress, logNotice(lf_update, "%s %s %s QQ=%2.2x ZZ=%2.2x: %s", prefix, circuit.c_str(), name.c_str(), srcAddress,
dstAddress, data.c_str()); dstAddress, data.c_str());
} else { } else {
logNotice(lf_update, "update %s %s ZZ=%2.2x: %s", circuit.c_str(), name.c_str(), dstAddress, data.c_str()); logNotice(lf_update, "%s %s %s ZZ=%2.2x: %s", prefix, circuit.c_str(), name.c_str(), dstAddress, data.c_str());
} }
} else if (message->getSrcAddress() == SYN) { // any source } else if (message->getSrcAddress() == SYN) { // any source
logNotice(lf_update, "update %s %s QQ=%2.2x: %s", circuit.c_str(), name.c_str(), srcAddress, data.c_str()); logNotice(lf_update, "%s %s %s QQ=%2.2x: %s", prefix, circuit.c_str(), name.c_str(), srcAddress, data.c_str());
} else { } else {
logNotice(lf_update, "update %s %s: %s", circuit.c_str(), name.c_str(), data.c_str()); logNotice(lf_update, "%s %s %s: %s", prefix, circuit.c_str(), name.c_str(), data.c_str());
} }
} }
} }
+3 -3
View File
@@ -424,7 +424,7 @@ class BusHandler : public WaitThread {
m_command = master; m_command = master;
m_response = slave; m_response = slave;
m_addressConflict = true; // avoid conflict messages m_addressConflict = true; // avoid conflict messages
receiveCompleted(); messageCompleted();
m_addressConflict = false; m_addressConflict = false;
} }
@@ -623,9 +623,9 @@ class BusHandler : public WaitThread {
void measureLatency(struct timespec* sentTime, struct timespec* recvTime); void measureLatency(struct timespec* sentTime, struct timespec* recvTime);
/** /**
* Called when a passive reception was successfully completed. * Called when a message sending or reception was successfully completed.
*/ */
void receiveCompleted(); void messageCompleted();
/** /**
* Prepare a @a ScanRequest. * Prepare a @a ScanRequest.