diff options
author | Ivan Solovev <ivan.solovev@qt.io> | 2023-01-23 17:27:52 +0100 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2023-02-02 16:20:00 +0000 |
commit | 23ea1271b7ffdf182eef82107645e2ebe2cf7ff2 (patch) | |
tree | 008dc4bca5c619831fc318c617c38ffbc6a7d7fe /src | |
parent | 3d492f7b6e9daf9115f1c0a2554dbb88d5a05c45 (diff) |
Use enum class for QtCanBus::UniqueId
To avoid implicit conversions to/from unsigned int.
Change-Id: I86b824ff1214b28f398f403bf30298e2b681398e
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: André Hartmann <aha_1980@gmx.de>
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
(cherry picked from commit e6b4b720aabed07a3b6c28b446f1563f464fcc38)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
Diffstat (limited to 'src')
-rw-r--r-- | src/serialbus/qcancommondefinitions.cpp | 14 | ||||
-rw-r--r-- | src/serialbus/qcancommondefinitions.h | 5 | ||||
-rw-r--r-- | src/serialbus/qcandbcfileparser.cpp | 26 | ||||
-rw-r--r-- | src/serialbus/qcanframeprocessor.cpp | 18 | ||||
-rw-r--r-- | src/serialbus/qcanframeprocessor.h | 2 | ||||
-rw-r--r-- | src/serialbus/qcanmessagedescription_p.h | 2 |
6 files changed, 44 insertions, 23 deletions
diff --git a/src/serialbus/qcancommondefinitions.cpp b/src/serialbus/qcancommondefinitions.cpp index 058e8f1..225751c 100644 --- a/src/serialbus/qcancommondefinitions.cpp +++ b/src/serialbus/qcancommondefinitions.cpp @@ -3,6 +3,8 @@ #include "qcancommondefinitions.h" +#include <QtCore/qendian.h> + #ifndef QT_NO_DEBUG_STREAM #include <QtCore/QDebug> #endif // QT_NO_DEBUG_STREAM @@ -62,6 +64,12 @@ QT_BEGIN_NAMESPACE \typealias QtCanBus::UniqueId */ +QtCanBus::UniqueId qbswap(QtCanBus::UniqueId src) +{ + const auto uintval = qbswap_helper(qToUnderlying(src)); + return QtCanBus::UniqueId{uintval}; +} + #ifndef QT_NO_DEBUG_STREAM QDebug operator<<(QDebug dbg, QtCanBus::DataSource source) { @@ -119,6 +127,12 @@ QDebug operator<<(QDebug dbg, QtCanBus::MultiplexState state) } return dbg; } + +QDebug operator<<(QDebug dbg, QtCanBus::UniqueId uid) +{ + dbg << qToUnderlying(uid); + return dbg; +} #endif // QT_NO_DEBUG_STREAM QT_END_NAMESPACE diff --git a/src/serialbus/qcancommondefinitions.h b/src/serialbus/qcancommondefinitions.h index ffcefc0..de60180 100644 --- a/src/serialbus/qcancommondefinitions.h +++ b/src/serialbus/qcancommondefinitions.h @@ -34,10 +34,12 @@ enum class MultiplexState : quint8 { SwitchAndSignal = MultiplexorSwitch | MultiplexedSignal, }; -using UniqueId = quint32; +enum class UniqueId : quint32 {}; } // namespace QtCanBus +Q_SERIALBUS_EXPORT QtCanBus::UniqueId qbswap(QtCanBus::UniqueId src); + #ifndef QT_NO_DEBUG_STREAM class QDebug; @@ -45,6 +47,7 @@ class QDebug; Q_SERIALBUS_EXPORT QDebug operator<<(QDebug dbg, QtCanBus::DataSource source); Q_SERIALBUS_EXPORT QDebug operator<<(QDebug dbg, QtCanBus::DataFormat format); Q_SERIALBUS_EXPORT QDebug operator<<(QDebug dbg, QtCanBus::MultiplexState state); +Q_SERIALBUS_EXPORT QDebug operator<<(QDebug dbg, QtCanBus::UniqueId uid); #endif // QT_NO_DEBUG_STREAM diff --git a/src/serialbus/qcandbcfileparser.cpp b/src/serialbus/qcandbcfileparser.cpp index 422efb0..df7e0fa 100644 --- a/src/serialbus/qcandbcfileparser.cpp +++ b/src/serialbus/qcandbcfileparser.cpp @@ -459,7 +459,7 @@ QCanDbcFileParserPrivate::extractMessage(const QRegularExpressionMatch &match) bool ok = false; - const auto id = match.capturedView(u"messageId"_s).toUInt(&ok); + const QtCanBus::UniqueId id{match.capturedView(u"messageId"_s).toUInt(&ok)}; if (ok) { desc.setUniqueId(id); } else { @@ -660,7 +660,7 @@ void QCanDbcFileParserPrivate::parseSignalType(const QStringView data) m_lineOffset = match.capturedEnd(0); bool ok = false; - const auto uid = match.capturedView(u"messageId"_s).toUInt(&ok); + const QtCanBus::UniqueId uid{match.capturedView(u"messageId"_s).toUInt(&ok)}; if (!ok) { addWarning(QObject::tr("Failed to parse frame id from string %1").arg(data)); return; @@ -706,7 +706,7 @@ void QCanDbcFileParserPrivate::parseSignalType(const QStringView data) } } else { addWarning(QObject::tr("Failed to find message description for unique id %1. " - "Skipping string %2").arg(uid).arg(data)); + "Skipping string %2").arg(qToUnderlying(uid)).arg(data)); } } @@ -743,7 +743,7 @@ void QCanDbcFileParserPrivate::parseComment(const QStringView data) const auto type = match.capturedView(u"type"_s); bool ok = false; - const auto uid = match.capturedView(u"messageId"_s).toUInt(&ok); + const QtCanBus::UniqueId uid{match.capturedView(u"messageId"_s).toUInt(&ok)}; if (!ok) { addWarning(QObject::tr("Failed to parse frame id from string %1").arg(data)); return; @@ -752,7 +752,7 @@ void QCanDbcFileParserPrivate::parseComment(const QStringView data) auto messageDesc = m_messageDescriptions.value(uid); if (!messageDesc.isValid()) { addWarning(QObject::tr("Failed to find message description for unique id %1. " - "Skipping string %2").arg(uid).arg(data)); + "Skipping string %2").arg(qToUnderlying(uid)).arg(data)); return; } @@ -807,7 +807,7 @@ void QCanDbcFileParserPrivate::parseExtendedMux(const QStringView data) m_lineOffset = match.capturedEnd(0); bool ok = false; - const auto uid = match.capturedView(u"messageId"_s).toUInt(&ok); + const QtCanBus::UniqueId uid{match.capturedView(u"messageId"_s).toUInt(&ok)}; if (!ok) { addWarning(QObject::tr("Failed to parse frame id from string %1").arg(data)); return; @@ -816,7 +816,7 @@ void QCanDbcFileParserPrivate::parseExtendedMux(const QStringView data) auto messageDesc = m_messageDescriptions.value(uid); if (!messageDesc.isValid()) { addWarning(QObject::tr("Failed to find message description for unique id %1. " - "Skipping string %2").arg(uid).arg(data)); + "Skipping string %2").arg(qToUnderlying(uid)).arg(data)); return; } @@ -907,7 +907,7 @@ void QCanDbcFileParserPrivate::parseValueDescriptions(const QStringView data) m_lineOffset = match.capturedEnd(0); bool ok = false; - const auto uid = match.capturedView(u"messageId"_s).toUInt(&ok); + const QtCanBus::UniqueId uid{match.capturedView(u"messageId"_s).toUInt(&ok)}; if (!ok) { addWarning(QObject::tr("Failed to parse value description from string %1").arg(data)); return; @@ -917,7 +917,7 @@ void QCanDbcFileParserPrivate::parseValueDescriptions(const QStringView data) const auto messageDesc = m_messageDescriptions.value(uid); if (!messageDesc.isValid()) { addWarning(QObject::tr("Failed to find message description for unique id %1. " - "Skipping string %2").arg(uid).arg(data)); + "Skipping string %2").arg(qToUnderlying(uid)).arg(data)); return; } @@ -1021,7 +1021,8 @@ void QCanDbcFileParserPrivate::postProcessSignalMultiplexing() for (const auto &uid : std::as_const(uidsToRemove)) { m_messageDescriptions.remove(uid); addWarning(QObject::tr("Message description with unique id %1 is skipped because " - "it has invalid multiplexing description.").arg(uid)); + "it has invalid multiplexing description."). + arg(qToUnderlying(uid))); } } @@ -1036,10 +1037,11 @@ void QCanDbcFileParserPrivate::addCurrentMessage() auto uid = m_currentMessage.uniqueId(); if (!m_currentMessage.isValid()) { addWarning(QObject::tr("Message description with unique id %1 is skipped " - "because it's not valid.").arg(uid)); + "because it's not valid.").arg(qToUnderlying(uid))); } else if (m_messageDescriptions.contains(uid)) { addWarning(QObject::tr("Message description with unique id %1 is skipped " - "because such unique id is already used.").arg(uid)); + "because such unique id is already used."). + arg(qToUnderlying(uid))); } else { m_messageDescriptions.insert(uid, m_currentMessage); } diff --git a/src/serialbus/qcanframeprocessor.cpp b/src/serialbus/qcanframeprocessor.cpp index 3742064..2a98496 100644 --- a/src/serialbus/qcanframeprocessor.cpp +++ b/src/serialbus/qcanframeprocessor.cpp @@ -203,7 +203,7 @@ QCanBusFrame QCanFrameProcessor::prepareFrame(QtCanBus::UniqueId uniqueId, if (!d->messages.contains(uniqueId)) { d->setError(Error::EncodingError, QObject::tr("Failed to find message description for unique id %1."). - arg(uniqueId)); + arg(qToUnderlying(uniqueId))); return QCanBusFrame(QCanBusFrame::InvalidFrame); } @@ -220,7 +220,7 @@ QCanBusFrame QCanFrameProcessor::prepareFrame(QtCanBus::UniqueId uniqueId, if (!d->fillUniqueId(data, bitsSize, uniqueId)) { d->setError(Error::EncodingError, QObject::tr("Failed to encode unique id %1 into the frame"). - arg(uniqueId)); + arg(qToUnderlying(uniqueId))); return QCanBusFrame(QCanBusFrame::InvalidFrame); } } @@ -250,7 +250,7 @@ QCanBusFrame QCanFrameProcessor::prepareFrame(QtCanBus::UniqueId uniqueId, if (!descriptionsHash.contains(signalName)) { d->addWarning(QObject::tr("Skipping signal %1. It is not found in " "message description for unique id %2."). - arg(signalName, QString::number(uniqueId))); + arg(signalName, QString::number(qToUnderlying(uniqueId)))); continue; } @@ -462,7 +462,7 @@ QCanFrameProcessor::ParseResult QCanFrameProcessor::parseFrame(const QCanBusFram if (!d->messages.contains(uniqueId)) { d->setError(Error::DecodingError, QObject::tr("Could not find a message description for unique id %1."). - arg(uniqueId)); + arg(qToUnderlying(uniqueId))); return {}; } @@ -512,7 +512,7 @@ QCanFrameProcessor::ParseResult QCanFrameProcessor::parseFrame(const QCanBusFram if (!desc.isValid()) { d->addWarning(QObject::tr("Skipping signal %1 in message with unique id %2" " because its description is invalid."). - arg(desc.name(), QString::number(uniqueId))); + arg(desc.name(), QString::number(qToUnderlying(uniqueId)))); continue; } const QVariant value = d->decodeSignal(frame, desc); @@ -1144,8 +1144,9 @@ QCanFrameProcessorPrivate::extractUniqueId(const QCanBusFrame &frame) const dummyDesc.setDataFormat(QtCanBus::DataFormat::UnsignedInteger); // other fields are unused, so default-initialized - QVariant val = extractValue<QtCanBus::UniqueId>(data, dummyDesc); - return val.value<QtCanBus::UniqueId>(); + using UnderlyingType = std::underlying_type_t<QtCanBus::UniqueId>; + const QVariant val = extractValue<UnderlyingType>(data, dummyDesc); + return QtCanBus::UniqueId{val.value<UnderlyingType>()}; } bool QCanFrameProcessorPrivate::fillUniqueId(unsigned char *data, quint16 sizeInBits, @@ -1175,7 +1176,8 @@ bool QCanFrameProcessorPrivate::fillUniqueId(unsigned char *data, quint16 sizeIn dummyDesc.setDataFormat(QtCanBus::DataFormat::UnsignedInteger); // other fields are unused, so default-initialized - encodeValue<QtCanBus::UniqueId>(data, QVariant::fromValue(uniqueId), dummyDesc); + using UnderlyingType = std::underlying_type_t<QtCanBus::UniqueId>; + encodeValue<UnderlyingType>(data, QVariant::fromValue(qToUnderlying(uniqueId)), dummyDesc); return true; } diff --git a/src/serialbus/qcanframeprocessor.h b/src/serialbus/qcanframeprocessor.h index 6c132f7..ef5c552 100644 --- a/src/serialbus/qcanframeprocessor.h +++ b/src/serialbus/qcanframeprocessor.h @@ -30,7 +30,7 @@ public: }; struct ParseResult { - QtCanBus::UniqueId uniqueId = 0; + QtCanBus::UniqueId uniqueId = QtCanBus::UniqueId{0}; QVariantMap signalValues; }; diff --git a/src/serialbus/qcanmessagedescription_p.h b/src/serialbus/qcanmessagedescription_p.h index 52daf1d..a303b46 100644 --- a/src/serialbus/qcanmessagedescription_p.h +++ b/src/serialbus/qcanmessagedescription_p.h @@ -26,7 +26,7 @@ public: QString name; QString transmitter; QString comment; - QtCanBus::UniqueId id = 0; + QtCanBus::UniqueId id{0}; quint8 size = 0; // even CAN FD has max 64 bytes QHash<QString, QCanSignalDescription> messageSignals; |