From 6ddb74e8165fc9658ab57ff5a3e09eb23ad9c69e Mon Sep 17 00:00:00 2001 From: Andre Hartmann Date: Thu, 11 Aug 2016 20:19:06 +0200 Subject: SocketCAN: Set and get bitrate by loading libsocketcan dynamically Can be extended for further functions from this library also. [ChangeLog][Plugins][SocketCAN] If libsocketcan is available, the CAN bus bitrate can be get and set at runtime. Fixes: QTBUG-54296 Change-Id: Ie677ddb5cf4ee9f99927973d837ef7a2810a2b37 Reviewed-by: Rolf Eike Beer Reviewed-by: Denis Shienkov --- src/plugins/canbus/socketcan/socketcanbackend.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'src/plugins/canbus/socketcan/socketcanbackend.cpp') diff --git a/src/plugins/canbus/socketcan/socketcanbackend.cpp b/src/plugins/canbus/socketcan/socketcanbackend.cpp index 74b0d1d..cac1db5 100644 --- a/src/plugins/canbus/socketcan/socketcanbackend.cpp +++ b/src/plugins/canbus/socketcan/socketcanbackend.cpp @@ -36,6 +36,10 @@ #include "socketcanbackend.h" +#include "libsocketcan.h" + +#include + #include #include #include @@ -181,6 +185,14 @@ QList SocketCanBackend::interfaces() SocketCanBackend::SocketCanBackend(const QString &name) : canSocketName(name) { + QString errorString; + libSocketCan.reset(new LibSocketCan(&errorString)); + if (Q_UNLIKELY(!errorString.isEmpty())) { + qCInfo(QT_CANBUS_PLUGINS_SOCKETCAN, + "Cannot load library libsocketcan, some functionality will not be available.\n%ls", + qUtf16Printable(errorString)); + } + resetConfigurations(); } @@ -200,6 +212,8 @@ void SocketCanBackend::resetConfigurations() QVariant::fromValue(QCanBusFrame::FrameErrors(QCanBusFrame::AnyError))); QCanBusDevice::setConfigurationParameter( QCanBusDevice::CanFdKey, false); + QCanBusDevice::setConfigurationParameter( + QCanBusDevice::BitRateKey, 500000); } bool SocketCanBackend::open() @@ -345,6 +359,12 @@ bool SocketCanBackend::applyConfigurationParameter(int key, const QVariant &valu success = true; break; } + case QCanBusDevice::BitRateKey: + { + const quint32 bitRate = value.toUInt(); + libSocketCan->setBitrate(canSocketName, bitRate); + break; + } default: setError(tr("SocketCanBackend: No such configuration as %1 in SocketCanBackend").arg(key), QCanBusDevice::CanBusError::ConfigurationError); -- cgit v1.2.3