diff options
Diffstat (limited to 'src/plugins/canbus/socketcan/socketcanbackend.cpp')
-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(), |