summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorIvan Solovev <ivan.solovev@qt.io>2023-01-23 17:27:52 +0100
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2023-02-02 16:20:00 +0000
commit23ea1271b7ffdf182eef82107645e2ebe2cf7ff2 (patch)
tree008dc4bca5c619831fc318c617c38ffbc6a7d7fe /src
parent3d492f7b6e9daf9115f1c0a2554dbb88d5a05c45 (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.cpp14
-rw-r--r--src/serialbus/qcancommondefinitions.h5
-rw-r--r--src/serialbus/qcandbcfileparser.cpp26
-rw-r--r--src/serialbus/qcanframeprocessor.cpp18
-rw-r--r--src/serialbus/qcanframeprocessor.h2
-rw-r--r--src/serialbus/qcanmessagedescription_p.h2
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;