summaryrefslogtreecommitdiffstats
path: root/src/plugins/canbus/systeccan/systeccanbackend.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/canbus/systeccan/systeccanbackend.cpp')
-rw-r--r--src/plugins/canbus/systeccan/systeccanbackend.cpp55
1 files changed, 42 insertions, 13 deletions
diff --git a/src/plugins/canbus/systeccan/systeccanbackend.cpp b/src/plugins/canbus/systeccan/systeccanbackend.cpp
index 996122d..7041af8 100644
--- a/src/plugins/canbus/systeccan/systeccanbackend.cpp
+++ b/src/plugins/canbus/systeccan/systeccanbackend.cpp
@@ -43,11 +43,14 @@
#include <QtCore/qcoreapplication.h>
#include <QtCore/qcoreevent.h>
#include <QtCore/qdebug.h>
+#include <QtCore/qloggingcategory.h>
#include <QtCore/qregularexpression.h>
#include <QtCore/qtimer.h>
QT_BEGIN_NAMESPACE
+Q_DECLARE_LOGGING_CATEGORY(QT_CANBUS_PLUGINS_SYSTECCAN)
+
Q_GLOBAL_STATIC(QLibrary, systecLibrary)
bool SystecCanBackend::canCreate(QString *errorReason)
@@ -60,19 +63,49 @@ bool SystecCanBackend::canCreate(QString *errorReason)
return true;
}
+QCanBusDeviceInfo SystecCanBackend::createDeviceInfo(const QString &serialNumber,
+ const QString &description,
+ uint deviceNumber,
+ int channelNumber)
+{
+ const QString name = QString::fromLatin1("can%1.%2").arg(deviceNumber).arg(channelNumber);
+ return QCanBusDevice::createDeviceInfo(name, serialNumber, description, channelNumber, false, false);
+}
+
+static QString descriptionString(uint productCode)
+{
+ switch (productCode & USBCAN_PRODCODE_MASK_PID) {
+ case USBCAN_PRODCODE_PID_GW001: return QStringLiteral("USB-CANmodul (G1)");
+ case USBCAN_PRODCODE_PID_GW002: return QStringLiteral("USB-CANmodul (G2)");
+ case USBCAN_PRODCODE_PID_MULTIPORT: return QStringLiteral("Multiport CAN-to-USB (G3)");
+ case USBCAN_PRODCODE_PID_BASIC: return QStringLiteral("USB-CANmodul1 (G3)");
+ case USBCAN_PRODCODE_PID_ADVANCED: return QStringLiteral("USB-CANmodul2 (G3)");
+ case USBCAN_PRODCODE_PID_USBCAN8: return QStringLiteral("USB-CANmodul8 (G3)");
+ case USBCAN_PRODCODE_PID_USBCAN16: return QStringLiteral("USB-CANmodul16 (G3)");
+ case USBCAN_PRODCODE_PID_ADVANCED_G4: return QStringLiteral("USB-CANmodul2 (G4)");
+ case USBCAN_PRODCODE_PID_BASIC_G4: return QStringLiteral("USB-CANmodul1 (G4)");
+ default: return QStringLiteral("Unknown");
+ }
+}
+
static void DRV_CALLBACK_TYPE ucanEnumCallback(DWORD index, BOOL isUsed,
tUcanHardwareInfoEx *hardwareInfo,
tUcanHardwareInitInfo *initInfo,
void *args)
{
- auto result = static_cast<QStringList *>(args);
+ auto result = static_cast<QList<QCanBusDeviceInfo> *>(args);
Q_UNUSED(index);
Q_UNUSED(isUsed);
- result->append(QString::fromLatin1("can%1.0").arg(hardwareInfo->m_bDeviceNr));
- if (USBCAN_CHECK_SUPPORT_TWO_CHANNEL(hardwareInfo))
- result->append(QString::fromLatin1("can%1.1").arg(hardwareInfo->m_bDeviceNr));
+ const QString serialNumber = QString::number(hardwareInfo->m_dwSerialNr);
+ const QString description = descriptionString(hardwareInfo->m_dwProductCode);
+ result->append(std::move(SystecCanBackend::createDeviceInfo(serialNumber, description,
+ hardwareInfo->m_bDeviceNr, 0)));
+ if (USBCAN_CHECK_SUPPORT_TWO_CHANNEL(hardwareInfo)) {
+ result->append(std::move(SystecCanBackend::createDeviceInfo(serialNumber, description,
+ hardwareInfo->m_bDeviceNr, 1)));
+ }
initInfo->m_fTryNext = true; // continue enumerating with next device
}
@@ -81,12 +114,8 @@ QList<QCanBusDeviceInfo> SystecCanBackend::interfaces()
{
QList<QCanBusDeviceInfo> result;
- QStringList devices;
- ::UcanEnumerateHardware(&ucanEnumCallback, &devices, false,
- 0, ~0, 0, ~0, 0, ~0);
+ ::UcanEnumerateHardware(&ucanEnumCallback, &result, false, 0, ~0, 0, ~0, 0, ~0);
- for (const QString &s : qAsConst(devices))
- result.append(createDeviceInfo(s, false, false));
return result;
}
@@ -110,7 +139,7 @@ protected:
}
private:
- SystecCanBackendPrivate *dptr;
+ SystecCanBackendPrivate * const dptr;
};
SystecCanBackendPrivate::SystecCanBackendPrivate(SystecCanBackend *q) :
@@ -459,8 +488,8 @@ bool SystecCanBackend::open()
const QVariant param = configurationParameter(key);
const bool success = d->setConfigurationParameter(key, param);
if (Q_UNLIKELY(!success)) {
- qWarning("Cannot apply parameter %d with value %ls.",
- key, qUtf16Printable(param.toString()));
+ qCWarning(QT_CANBUS_PLUGINS_SYSTECCAN, "Cannot apply parameter %d with value %ls.",
+ key, qUtf16Printable(param.toString()));
}
}
@@ -505,7 +534,7 @@ bool SystecCanBackend::writeFrame(const QCanBusFrame &newData)
}
// CAN FD frame format is not supported by the hardware yet
- if (Q_UNLIKELY(newData.payload().size() > 8)) {
+ if (Q_UNLIKELY(newData.hasFlexibleDataRateFormat())) {
setError(tr("CAN FD frame format not supported"), QCanBusDevice::WriteError);
return false;
}