diff options
author | Andre Hartmann <aha_1980@gmx.de> | 2017-10-26 22:28:50 +0200 |
---|---|---|
committer | André Hartmann <aha_1980@gmx.de> | 2018-01-12 06:56:45 +0000 |
commit | 44a449ff8f0b7cdb71e67385e1bd9a098209045e (patch) | |
tree | 3860802a1afff79563970166f4739a6b187f265e /src/plugins/canbus/socketcan | |
parent | df9735fc1660dd40730693f08f6e046a5e01deb3 (diff) |
Add more info to QCanBusDeviceInfo
Added description, serial number and channel for SocketCAN, PeakCAN,
SystecCAN, and VectorCAN plugins. For now, not all plugins do support
all kind of information:
SocketCAN: description and channel
PeakCAN: description and channel (Windows PCANBasic >= 4.2.0)
SystecCAN: description, serial number, and channel
VectorCAN: description, serial number, and channel
[ChangeLog][QCanBusDeviceInfo] Added description, serial number
and channel to QCanBusDeviceInfo, as far as supported by the
various plugins.
Change-Id: Ib2292e06065eb91848f682ebf69a4cc968f4d4ba
Reviewed-by: Rolf Eike Beer <eb@emlix.com>
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
Diffstat (limited to 'src/plugins/canbus/socketcan')
-rw-r--r-- | src/plugins/canbus/socketcan/socketcanbackend.cpp | 28 |
1 files changed, 25 insertions, 3 deletions
diff --git a/src/plugins/canbus/socketcan/socketcanbackend.cpp b/src/plugins/canbus/socketcan/socketcanbackend.cpp index b43787d..81b7c13 100644 --- a/src/plugins/canbus/socketcan/socketcanbackend.cpp +++ b/src/plugins/canbus/socketcan/socketcanbackend.cpp @@ -80,6 +80,8 @@ QT_BEGIN_NAMESPACE Q_DECLARE_LOGGING_CATEGORY(QT_CANBUS_PLUGINS_SOCKETCAN) const char sysClassNetC[] = "/sys/class/net/"; +const char interfaceC[] = "/device/interface"; +const char devIdC[] = "/dev_id"; const char flagsC[] = "/flags"; const char mtuC[] = "/mtu"; const char typeC[] = "/type"; @@ -120,6 +122,23 @@ static quint32 flags(const QString &canDevice) return result; } +static QString deviceDescription(const QString &canDevice) +{ + const QString path = QLatin1String(sysClassNetC) + canDevice + QLatin1String(interfaceC); + const QByteArray content = fileContent(path); + if (content.isEmpty() && isVirtual(canDevice)) + return QStringLiteral("Virtual CAN"); + + return QString::fromUtf8(content); +} + +static int deviceChannel(const QString &canDevice) +{ + const QString path = QLatin1String(sysClassNetC) + canDevice + QLatin1String(devIdC); + const QByteArray content = fileContent(path); + return content.toInt(nullptr, 0); +} + QList<QCanBusDeviceInfo> SocketCanBackend::interfaces() { QList<QCanBusDeviceInfo> result; @@ -136,9 +155,12 @@ QList<QCanBusDeviceInfo> SocketCanBackend::interfaces() if (!(flags(deviceName) & DeviceIsActive)) continue; - auto info = createDeviceInfo(deviceName, isVirtual(deviceName), - isFlexibleDataRateCapable(deviceName)); - result.append(info); + const QString serial; + const QString description = deviceDescription(deviceName); + const int channel = deviceChannel(deviceName); + result.append(std::move(createDeviceInfo(deviceName, serial, description, + channel, isVirtual(deviceName), + isFlexibleDataRateCapable(deviceName)))); } std::sort(result.begin(), result.end(), |