1/****************************************************************************
2**
3** Copyright (C) 2017 The Qt Company Ltd.
4** Contact: http://www.qt.io/licensing/
5**
6** This file is part of the tools applications of the QtSerialBus module.
7**
8** $QT_BEGIN_LICENSE:LGPL3$
9** Commercial License Usage
10** Licensees holding valid commercial Qt licenses may use this file in
11** accordance with the commercial license agreement provided with the
12** Software or, alternatively, in accordance with the terms contained in
13** a written agreement between you and The Qt Company. For licensing terms
14** and conditions see http://www.qt.io/terms-conditions. For further
15** information use the contact form at http://www.qt.io/contact-us.
16**
17** GNU Lesser General Public License Usage
18** Alternatively, this file may be used under the terms of the GNU Lesser
19** General Public License version 3 as published by the Free Software
20** Foundation and appearing in the file LICENSE.LGPLv3 included in the
21** packaging of this file. Please review the following information to
22** ensure the GNU Lesser General Public License version 3 requirements
23** will be met: https://www.gnu.org/licenses/lgpl.html.
24**
25** GNU General Public License Usage
26** Alternatively, this file may be used under the terms of the GNU
27** General Public License version 2.0 or later as published by the Free
28** Software Foundation and appearing in the file LICENSE.GPL included in
29** the packaging of this file. Please review the following information to
30** ensure the GNU General Public License version 2.0 requirements will be
31** met: http://www.gnu.org/licenses/gpl-2.0.html.
32**
33** $QT_END_LICENSE$
34**
35****************************************************************************/
36
37#include "readtask.h"
38
39ReadTask::ReadTask(QTextStream &output, QObject *parent) :
40 QObject(parent),
41 m_output(output) { }
42
43void ReadTask::setShowTimeStamp(bool showTimeStamp)
44{
45 m_showTimeStamp = showTimeStamp;
46}
47
48bool ReadTask::isShowFlags() const
49{
50 return m_showFlags;
51}
52
53void ReadTask::setShowFlags(bool showFlags)
54{
55 m_showFlags = showFlags;
56}
57
58void ReadTask::handleFrames() {
59 auto canDevice = qobject_cast<QCanBusDevice *>(object: QObject::sender());
60 if (canDevice == nullptr) {
61 qWarning(msg: "ReadTask::handleFrames: Unknown sender.");
62 return;
63 }
64
65 while (canDevice->framesAvailable()) {
66 const QCanBusFrame frame = canDevice->readFrame();
67
68 QString view;
69
70 if (m_showTimeStamp) {
71 view = QStringLiteral("%1.%2 ")
72 .arg(a: frame.timeStamp().seconds(), fieldwidth: 10, base: 10, fillChar: QLatin1Char(' '))
73 .arg(a: frame.timeStamp().microSeconds() / 100, fieldwidth: 4, base: 10, fillChar: QLatin1Char('0'));
74 }
75
76 if (m_showFlags) {
77 QLatin1String flags("- - - ");
78
79 if (frame.hasBitrateSwitch())
80 flags[0] = QLatin1Char('B');
81 if (frame.hasErrorStateIndicator())
82 flags[2] = QLatin1Char('E');
83 if (frame.hasLocalEcho())
84 flags[4] = QLatin1Char('L');
85
86 view += flags;
87 }
88
89 if (frame.frameType() == QCanBusFrame::ErrorFrame)
90 view += canDevice->interpretErrorFrame(errorFrame: frame);
91 else
92 view += frame.toString();
93
94 m_output << view << Qt::endl;
95 }
96}
97
98void ReadTask::handleError(QCanBusDevice::CanBusError /*error*/)
99{
100 auto canDevice = qobject_cast<QCanBusDevice *>(object: QObject::sender());
101 if (canDevice == nullptr) {
102 qWarning(msg: "ReadTask::handleError: Unknown sender.");
103 return;
104 }
105
106 m_output << tr(s: "Read error: '%1'").arg(a: canDevice->errorString()) << Qt::endl;
107}
108

source code of qtserialbus/src/tools/canbusutil/readtask.cpp