diff options
author | Andre Hartmann <aha_1980@gmx.de> | 2016-04-04 21:08:29 +0200 |
---|---|---|
committer | Alex Blasche <alexander.blasche@theqtcompany.com> | 2016-04-15 09:56:58 +0000 |
commit | e2553bc4401e6f245ddaa4be4490e285a45c2e9d (patch) | |
tree | 978db1e349d9869279b84f1dd8c70ae8642064b3 /examples/serialbus/can | |
parent | c0b0c04cc72a151f532ec1665163e04d62f2e14f (diff) |
CAN-Example: Display CAN-IDs and data bytes in hex
Data bytes usually contain binary information so just
display them as hex dump. Do so also for the input side.
Tested with PCAN-USB Pro, both channels connected,
Linux with socketcan, cangen and candump on can0,
CAN-Example on can1. CAN-FD was not tested.
Change-Id: I55a82bbec874de808bc84a8ea016649e09b5c6d6
Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
Diffstat (limited to 'examples/serialbus/can')
-rw-r--r-- | examples/serialbus/can/mainwindow.cpp | 25 | ||||
-rw-r--r-- | examples/serialbus/can/mainwindow.ui | 16 |
2 files changed, 33 insertions, 8 deletions
diff --git a/examples/serialbus/can/mainwindow.cpp b/examples/serialbus/can/mainwindow.cpp index 16bf947..3c3458e 100644 --- a/examples/serialbus/can/mainwindow.cpp +++ b/examples/serialbus/can/mainwindow.cpp @@ -172,6 +172,16 @@ void MainWindow::framesWritten(qint64 count) qDebug() << "Number of frames written:" << count; } +static QByteArray dataToHex(const QByteArray &data) +{ + QByteArray result = data.toHex().toUpper(); + + for (int i = 0; i < result.size(); i += 3) + result.insert(i, ' '); + + return result; +} + void MainWindow::checkMessages() { if (!m_canDevice) @@ -191,11 +201,11 @@ void MainWindow::checkMessages() interpretError(view, frame); } else { view += QLatin1String("Id: "); - view += QString::number(id, 16); + view += QString::number(id, 16).toUpper(); view += QLatin1String(" bytes: "); view += QString::number(dataLength, 10); view += QLatin1String(" data: "); - view += frame.payload().data(); + view += dataToHex(frame.payload()); } if (frame.frameType() == QCanBusFrame::RemoteRequestFrame) { @@ -207,12 +217,19 @@ void MainWindow::checkMessages() } } +static QByteArray dataFromHex(const QString &hex) +{ + QByteArray line = hex.toLatin1(); + line.replace(' ', QByteArray()); + return QByteArray::fromHex(line); +} + void MainWindow::sendMessage() const { if (!m_canDevice) return; - QByteArray writings = m_ui->lineEdit->displayText().toUtf8(); + QByteArray writings = dataFromHex(m_ui->lineEdit->displayText()); QCanBusFrame frame; const int maxPayload = m_ui->fdBox->checkState() ? 64 : 8; @@ -222,7 +239,7 @@ void MainWindow::sendMessage() const writings = writings.left(size); frame.setPayload(writings); - qint32 id = m_ui->idEdit->displayText().toInt(); + qint32 id = m_ui->idEdit->displayText().toInt(nullptr, 16); if (!m_ui->EFF->checkState() && id > 2047) //11 bits id = 2047; diff --git a/examples/serialbus/can/mainwindow.ui b/examples/serialbus/can/mainwindow.ui index 26c7489..d2f178b 100644 --- a/examples/serialbus/can/mainwindow.ui +++ b/examples/serialbus/can/mainwindow.ui @@ -26,12 +26,16 @@ <item row="0" column="0"> <widget class="QLabel" name="label"> <property name="text"> - <string>Id</string> + <string>ID (hex)</string> </property> </widget> </item> <item row="0" column="1"> - <widget class="QLineEdit" name="idEdit"/> + <widget class="QLineEdit" name="idEdit"> + <property name="placeholderText"> + <string>123</string> + </property> + </widget> </item> <item row="0" column="2" rowspan="3"> <widget class="QGroupBox" name="groupBox"> @@ -92,12 +96,16 @@ </widget> </item> <item row="1" column="1"> - <widget class="QLineEdit" name="lineEdit"/> + <widget class="QLineEdit" name="lineEdit"> + <property name="placeholderText"> + <string>12 34 AB CE</string> + </property> + </widget> </item> <item row="1" column="0"> <widget class="QLabel" name="label_2"> <property name="text"> - <string>Data</string> + <string>Data (hex)</string> </property> </widget> </item> |