diff options
Diffstat (limited to 'src/plugins/opcua/open62541/qopen62541valueconverter.cpp')
-rw-r--r-- | src/plugins/opcua/open62541/qopen62541valueconverter.cpp | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/src/plugins/opcua/open62541/qopen62541valueconverter.cpp b/src/plugins/opcua/open62541/qopen62541valueconverter.cpp index 44ebce9..55c1180 100644 --- a/src/plugins/opcua/open62541/qopen62541valueconverter.cpp +++ b/src/plugins/opcua/open62541/qopen62541valueconverter.cpp @@ -43,7 +43,6 @@ #include <QtCore/qdatetime.h> #include <QtCore/qloggingcategory.h> #include <QtCore/quuid.h> - #include <cstring> QT_BEGIN_NAMESPACE @@ -326,11 +325,32 @@ template<> QDateTime scalarToQt<QDateTime, UA_DateTime>(const UA_DateTime *data) { // OPC-UA part 3, Table C.9 + if (*data == (std::numeric_limits<qint64>::min)() || *data == (std::numeric_limits<qint64>::max)()) + return QDateTime(); + const QDateTime epochStart(QDate(1601, 1, 1), QTime(0, 0), Qt::UTC); return epochStart.addMSecs(*data / UA_DATETIME_MSEC).toLocalTime(); } template<> +QOpcUaDataValue scalarToQt<QOpcUaDataValue, UA_DataValue>(const UA_DataValue *data) +{ + QOpcUaDataValue result; + if (data->hasSourceTimestamp) + result.setSourceTimestamp(QOpen62541ValueConverter::scalarToQt<QDateTime, UA_DateTime>(&data->sourceTimestamp)); + if (data->hasServerTimestamp) + result.setServerTimestamp(QOpen62541ValueConverter::scalarToQt<QDateTime, UA_DateTime>(&data->serverTimestamp)); + if (data->hasValue) + result.setValue(QOpen62541ValueConverter::toQVariant(data->value)); + if (data->hasStatus) { + result.setStatusCode(QOpen62541ValueConverter::scalarToQt<QOpcUa::UaStatusCode, UA_StatusCode>(&data->status)); + } else { + result.setStatusCode(QOpcUa::UaStatusCode::Good); + } + return result; +} + +template<> QUuid scalarToQt<QUuid, UA_Guid>(const UA_Guid *data) { return QUuid(data->data1, data->data2, data->data3, data->data4[0], data->data4[1], data->data4[2], @@ -565,6 +585,11 @@ void scalarFromQt(const QTTYPE &value, TARGETTYPE *ptr) template<> void scalarFromQt<UA_DateTime, QDateTime>(const QDateTime &value, UA_DateTime *ptr) { + if (!value.isValid()) { + *ptr = (std::numeric_limits<qint64>::min)(); + return; + } + // OPC-UA part 3, Table C.9 const QDateTime uaEpochStart(QDate(1601, 1, 1), QTime(0, 0), Qt::UTC); |