summaryrefslogtreecommitdiffstats
path: root/src/tools
diff options
context:
space:
mode:
authorAndre Hartmann <aha_1980@gmx.de>2016-11-10 19:11:47 +0100
committerAndré Hartmann <aha_1980@gmx.de>2016-11-11 09:28:27 +0000
commitaeed62284bbf9692b2d35a9e95e98c872172eb42 (patch)
tree042c934849d1e60e8a3844643b9bc10b703b7c11 /src/tools
parent16a61f50b7e4fdc9b3a52703c674f0a882326871 (diff)
CAN-Examples: Fix reading only one frame on framesReceived()
The signal framesReceived() is emitted, when one or more CAN frames were received from CAN bus. Reading only the first frame may leave more CAN frames in the receive queue, seemingly leading to frame loss. Task-number: QTBUG-56886 Change-Id: I9cbb9451eb67e6058a779aba678beb215f1113e9 Reviewed-by: Rolf Eike Beer <eb@emlix.com> Reviewed-by: Andreas Wilhelm <aw@emlix.com> Reviewed-by: Denis Shienkov <denis.shienkov@gmail.com> Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
Diffstat (limited to 'src/tools')
-rw-r--r--src/tools/canbusutil/readtask.cpp26
1 files changed, 14 insertions, 12 deletions
diff --git a/src/tools/canbusutil/readtask.cpp b/src/tools/canbusutil/readtask.cpp
index 629a87a..90858c2 100644
--- a/src/tools/canbusutil/readtask.cpp
+++ b/src/tools/canbusutil/readtask.cpp
@@ -52,22 +52,24 @@ void ReadTask::checkMessages() {
return;
}
- const QCanBusFrame frame = canDevice->readFrame();
+ while (canDevice->framesAvailable()) {
+ const QCanBusFrame frame = canDevice->readFrame();
- QString view;
+ QString view;
- if (m_showTimeStamp) {
- view = QString::fromLatin1("%1.%2 ")
- .arg(frame.timeStamp().seconds(), 10, 10, QLatin1Char(' '))
- .arg(frame.timeStamp().microSeconds() / 100, 4, 10, QLatin1Char('0'));
- }
+ if (m_showTimeStamp) {
+ view = QString::fromLatin1("%1.%2 ")
+ .arg(frame.timeStamp().seconds(), 10, 10, QLatin1Char(' '))
+ .arg(frame.timeStamp().microSeconds() / 100, 4, 10, QLatin1Char('0'));
+ }
- if (frame.frameType() == QCanBusFrame::ErrorFrame)
- view += canDevice->interpretErrorFrame(frame);
- else
- view += frame.toString();
+ if (frame.frameType() == QCanBusFrame::ErrorFrame)
+ view += canDevice->interpretErrorFrame(frame);
+ else
+ view += frame.toString();
- output << view << endl;
+ output << view << endl;
+ }
}
void ReadTask::receiveError(QCanBusDevice::CanBusError /*error*/) {