diff options
Diffstat (limited to 'src/plugins/canbus/tinycan/tinycanbackend.cpp')
-rw-r--r-- | src/plugins/canbus/tinycan/tinycanbackend.cpp | 51 |
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; } |