Index: sources/canbus/MessageInterpreter.cpp =================================================================== diff -u -r2f0d1d22a15f0ddb459c6527b4746439f66bfe1b -rb22dd46db3def5d3c36d36c319f0bea89bf018d9 --- sources/canbus/MessageInterpreter.cpp (.../MessageInterpreter.cpp) (revision 2f0d1d22a15f0ddb459c6527b4746439f66bfe1b) +++ sources/canbus/MessageInterpreter.cpp (.../MessageInterpreter.cpp) (revision b22dd46db3def5d3c36d36c319f0bea89bf018d9) @@ -169,7 +169,8 @@ */ void MessageInterpreter::printUnhandled(const Message &vMessage) const { - if ( gDisableUnhandledReport ) return; + if ( logUnhandledMessage(vMessage)) return; + if ( gDisableUnhandledReport ) return; QString mActionIdHexString = Format::toHexString(vMessage.actionId, false, eLenMessageIDDigits); QString logMessage = tr("Unhandled Message ID (HD)") + '\n' + QString("%1 # %2 %3") @@ -521,10 +522,7 @@ // unhandled messages: these will only be logged as received message // there has nothing been defined for these messages. - default: - printUnhandled (vMessage); - break; - + default : printUnhandled(vMessage); break; } return ok; @@ -608,3 +606,69 @@ return ok; } + +/*! + * \brief MessageInterpreter::logUnhandledMessage + * \details Search in the list of the unhandled messages and tries to extract the data and log it. + * \param vMessage - the received message. + * \return true if the message data can be extracted and logged. + */ +bool MessageInterpreter::logUnhandledMessage(const Message &vMessage) const { + bool ok = false; + quint16 id = vMessage.actionId; + if (_messageList.contains(id)) { + ok = true; + QStringList items = _messageList[id]; + QString logString; + int index = 0; + for ( int i = 0; i < items.count(); i++ ) { + QString item = items[i]; + if (i == 0) { + switch (identifySource(vMessage.can_id)) { + case Can_Source::eCan_HD: logString = "HD,~" + item; break; + case Can_Source::eCan_DG: logString = "DG,~" + item; break; + default : logString = "XX,~" + item; break; + } + } + else { + if ( item == "F32" ) { + Types::F32 param; + if (! GetValue(vMessage.data, index, param )) logString += ",?"; + else logString += "," + QString::number(param.value); + } else + if ( item == "S32" ) { + Types::S32 param; + if (! GetValue(vMessage.data, index, param )) logString += ",?"; + else logString += "," + QString::number(param.value); + } else + if ( item == "U32" ) { + Types::U32 param; + if (! GetValue(vMessage.data, index, param )) logString += ",?"; + else logString += "," + QString::number(param.value); + } else + if ( item == "S16" ) { + Types::S16 param; + if (! GetValue(vMessage.data, index, param )) logString += ",?"; + else logString += "," + QString::number(param.value); + } else + if ( item == "U16" ) { + Types::U16 param; + if (! GetValue(vMessage.data, index, param )) logString += ",?"; + else logString += "," + QString::number(param.value); + } else + if ( item == "S08" ) { + Types::S08 param; + if (! GetValue(vMessage.data, index, param )) logString += ",?"; + else logString += "," + QString::number(param.value); + } else + if ( item == "U08" ) { + Types::U08 param; + if (! GetValue(vMessage.data, index, param )) logString += ",?"; + else logString += "," + QString::number(param.value); + } + } + } + LOG_DATUM(logString); + } + return ok; +}