summaryrefslogtreecommitdiffstats
path: root/src/plugins/canbus/socketcan/socketcanbackend.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/canbus/socketcan/socketcanbackend.cpp')
-rw-r--r--src/plugins/canbus/socketcan/socketcanbackend.cpp12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/plugins/canbus/socketcan/socketcanbackend.cpp b/src/plugins/canbus/socketcan/socketcanbackend.cpp
index 27fa326..2ed1310 100644
--- a/src/plugins/canbus/socketcan/socketcanbackend.cpp
+++ b/src/plugins/canbus/socketcan/socketcanbackend.cpp
@@ -389,7 +389,7 @@ bool SocketCanBackend::connectSocket()
{
struct ifreq interface;
- if (Q_UNLIKELY((canSocket = socket(PF_CAN, SOCK_RAW | SOCK_NONBLOCK, CAN_RAW)) < 0)) {
+ if (Q_UNLIKELY((canSocket = socket(PF_CAN, SOCK_RAW | SOCK_NONBLOCK, protocol)) < 0)) {
setError(qt_error_string(errno),
QCanBusDevice::CanBusError::ConnectionError);
return false;
@@ -464,6 +464,16 @@ void SocketCanBackend::setConfigurationParameter(int key, const QVariant &value)
return;
}
}
+ } else if (key == QCanBusDevice::ProtocolKey) {
+ bool ok = false;
+ const int newProtocol = value.toInt(&ok);
+ if (Q_UNLIKELY(!ok || (newProtocol < 0))) {
+ const QString errorString = tr("Cannot set protocol to value %1.").arg(value.toString());
+ setError(errorString, QCanBusDevice::ConfigurationError);
+ qCWarning(QT_CANBUS_PLUGINS_SOCKETCAN, "%ls", qUtf16Printable(errorString));
+ return;
+ }
+ protocol = newProtocol;
}
// connected & params not applyable/invalid
if (canSocket != -1 && !applyConfigurationParameter(key, value))