summaryrefslogtreecommitdiffstats
path: root/src/plugins/opcua/open62541/qopen62541valueconverter.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/opcua/open62541/qopen62541valueconverter.cpp')
-rw-r--r--src/plugins/opcua/open62541/qopen62541valueconverter.cpp27
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);