diff options
author | Andre Hartmann <aha_1980@gmx.de> | 2016-11-10 19:11:47 +0100 |
---|---|---|
committer | André Hartmann <aha_1980@gmx.de> | 2016-11-11 09:28:27 +0000 |
commit | aeed62284bbf9692b2d35a9e95e98c872172eb42 (patch) | |
tree | 042c934849d1e60e8a3844643b9bc10b703b7c11 /src/tools | |
parent | 16a61f50b7e4fdc9b3a52703c674f0a882326871 (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.cpp | 26 |
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*/) { |