summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndre Hartmann <aha_1980@gmx.de>2016-09-29 21:22:24 +0200
committerAndré Hartmann <aha_1980@gmx.de>2016-10-05 08:35:51 +0000
commit8e4bd5bcfd6093c980866a6b258311e7d8ae5bbf (patch)
tree7f9724da2f47660aae94df4d09555d53f4461d11
parent3cda427846e3f6f1858011f8a13d4e3d5e23e919 (diff)
canbusutil: Fix RTR frame handlingv5.8.0-beta1
* Allow empty CAN RTR frames, they are as valid as empty CAN data frames * CAN FD defines data frames, but does not seem to define RTR frames. At least cansend forbids RTR frames with a length > 8. Change-Id: I4405fc450a4f683f6d4f34b237e48d37c6a3670b Reviewed-by: Alex Blasche <alexander.blasche@qt.io> Reviewed-by: Andreas Wilhelm <aw@emlix.com>
-rw-r--r--src/tools/canbusutil/canbusutil.cpp12
1 files changed, 7 insertions, 5 deletions
diff --git a/src/tools/canbusutil/canbusutil.cpp b/src/tools/canbusutil/canbusutil.cpp
index d7200a1..80ea5e3 100644
--- a/src/tools/canbusutil/canbusutil.cpp
+++ b/src/tools/canbusutil/canbusutil.cpp
@@ -102,16 +102,18 @@ bool CanBusUtil::parsePayloadField(QString payload, bool &rtrFrame,
if (!payload.isEmpty() && payload.at(0).toUpper() == 'R') {
rtrFrame = true;
bool validPayloadLength = false;
- if (payload.size() > 1) {
+ if (fdFrame) {
+ m_output << "CAN FD RTR data frames are not valid." << endl;
+ } else if (payload.size() == 1) { // payload = "R"
+ validPayloadLength = true;
+ } else if (payload.size() > 1) { // payload = "R8"
payload = payload.mid(1);
int rtrFrameLength = payload.toInt(&validPayloadLength);
- if (validPayloadLength && rtrFrameLength > 0 && rtrFrameLength <= 64) {
+ if (validPayloadLength && rtrFrameLength >= 0 && rtrFrameLength <= 8) {
bytes = QByteArray(rtrFrameLength, 0);
- if (rtrFrameLength > 8)
- fdFrame = true;
} else if (validPayloadLength) {
- m_output << "The length must be larger than 0 and not exceed 64." << endl;
+ m_output << "The length must be between 0 and 8 (including)." << endl;
validPayloadLength = false;
}
}