diff options
Diffstat (limited to 'src/serialbus/qcanbusframe.h')
-rw-r--r-- | src/serialbus/qcanbusframe.h | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/src/serialbus/qcanbusframe.h b/src/serialbus/qcanbusframe.h index f8b1b06..84c0060 100644 --- a/src/serialbus/qcanbusframe.h +++ b/src/serialbus/qcanbusframe.h @@ -73,10 +73,10 @@ public: }; explicit QCanBusFrame(FrameType type = DataFrame) Q_DECL_NOTHROW : - canId(0x0), isExtendedFrame(0x0), version(0x0) { + setFrameId(0x0); setFrameType(type); } @@ -99,14 +99,15 @@ public: Q_FLAGS(FrameErrors) explicit QCanBusFrame(quint32 identifier, const QByteArray &data) : - canId(identifier & 0x1FFFFFFFU), format(DataFrame), - isExtendedFrame((identifier & 0x1FFFF800U) ? 0x1 : 0x0), + isExtendedFrame(0x0), version(0x0), load(data) { Q_UNUSED(extra); Q_UNUSED(reserved); + + setFrameId(identifier); } bool isValid() const Q_DECL_NOTHROW @@ -118,6 +119,9 @@ public: if (!isExtendedFrame && (canId & 0x1FFFF800U)) return false; + if (!isValidFrameId) + return false; + // maximum permitted payload size in CAN FD if (load.length() > 64) return false; @@ -168,8 +172,14 @@ public: } void setFrameId(quint32 newFrameId) { - canId = (newFrameId & 0x1FFFFFFFU); - setExtendedFrameFormat(isExtendedFrame || (newFrameId & 0x1FFFF800U)); + if (newFrameId < 0x20000000U) { + isValidFrameId = true; + canId = newFrameId; + setExtendedFrameFormat(isExtendedFrame || (newFrameId & 0x1FFFF800U)); + } else { + isValidFrameId = false; + canId = 0; + } } void setPayload(const QByteArray &data) { load = data; } @@ -239,7 +249,8 @@ private: quint8 isExtendedFrame:1; quint8 version:5; - quint8 extra: 2; // unused + quint8 isValidFrameId:1; + quint8 extra: 1; // unused // reserved for future use quint8 reserved[3]; |