summaryrefslogtreecommitdiffstats
path: root/src/plugins/canbus/tinycan/tinycanbackend.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/canbus/tinycan/tinycanbackend.cpp')
-rw-r--r--src/plugins/canbus/tinycan/tinycanbackend.cpp51
1 files changed, 17 insertions, 34 deletions
diff --git a/src/plugins/canbus/tinycan/tinycanbackend.cpp b/src/plugins/canbus/tinycan/tinycanbackend.cpp
index 2cee2d0..0961813 100644
--- a/src/plugins/canbus/tinycan/tinycanbackend.cpp
+++ b/src/plugins/canbus/tinycan/tinycanbackend.cpp
@@ -197,6 +197,9 @@ bool TinyCanBackendPrivate::open()
}
}
+ writeNotifier = new WriteNotifier(this, q);
+ writeNotifier->setInterval(0);
+
isOpen = true;
return true;
}
@@ -205,6 +208,9 @@ void TinyCanBackendPrivate::close()
{
Q_Q(TinyCanBackend);
+ delete writeNotifier;
+ writeNotifier = nullptr;
+
const int ret = ::CanDeviceClose(channelIndex);
if (ret < 0)
q->setError(systemErrorString(ret), QCanBusDevice::CanBusError::ConnectionError);
@@ -299,9 +305,9 @@ QString TinyCanBackendPrivate::systemErrorString(int errorCode)
static int channelIndexFromName(const QString &interfaceName)
{
- if (interfaceName == QStringLiteral("channela"))
+ if (interfaceName == QStringLiteral("can0.0"))
return INDEX_CAN_KANAL_A;
- else if (interfaceName == QStringLiteral("channelb"))
+ else if (interfaceName == QStringLiteral("can0.1"))
return INDEX_CAN_KANAL_B;
else
return INDEX_INVALID;
@@ -320,30 +326,12 @@ void TinyCanBackendPrivate::setupDefaultConfigurations()
q->setConfigurationParameter(QCanBusDevice::BitRateKey, 500000);
}
-void TinyCanBackendPrivate::enableWriteNotification(bool enable)
-{
- Q_Q(TinyCanBackend);
-
- if (writeNotifier) {
- if (enable) {
- if (!writeNotifier->isActive())
- writeNotifier->start();
- } else {
- writeNotifier->stop();
- }
- } else if (enable) {
- writeNotifier = new WriteNotifier(this, q);
- writeNotifier->setInterval(0);
- writeNotifier->start();
- }
-}
-
void TinyCanBackendPrivate::startWrite()
{
Q_Q(TinyCanBackend);
if (!q->hasOutgoingFrames()) {
- enableWriteNotification(false);
+ writeNotifier->stop();
return;
}
@@ -372,16 +360,8 @@ void TinyCanBackendPrivate::startWrite()
emit q->framesWritten(messagesToWrite);
}
- if (q->hasOutgoingFrames())
- enableWriteNotification(true);
-}
-
-bool TinyCanBackendPrivate::enableReadNotification()
-{
- ::CanSetRxEventCallback(&canRxEventCallback);
- ::CanSetEvents(EVENT_ENABLE_RX_MESSAGES);
-
- return true;
+ if (q->hasOutgoingFrames() && !writeNotifier->isActive())
+ writeNotifier->start();
}
// this method is called from the different thread!
@@ -431,7 +411,7 @@ void TinyCanBackendPrivate::startRead()
else
frame.setFrameType(QCanBusFrame::DataFrame);
- newFrames.append(frame);
+ newFrames.append(std::move(frame));
}
q->enqueueReceivedFrames(newFrames);
@@ -448,7 +428,8 @@ void TinyCanBackendPrivate::startupDriver()
return;
}
- enableReadNotification();
+ ::CanSetRxEventCallback(&canRxEventCallback);
+ ::CanSetEvents(EVENT_ENABLE_RX_MESSAGES);
} else if (driverRefCount < 0) {
qCritical("Wrong reference counter: %d", driverRefCount);
@@ -578,7 +559,9 @@ bool TinyCanBackend::writeFrame(const QCanBusFrame &newData)
}
enqueueOutgoingFrame(newData);
- d->enableWriteNotification(true);
+
+ if (!d->writeNotifier->isActive())
+ d->writeNotifier->start();
return true;
}