1// Copyright (C) 2015 basysKom GmbH, opensource@basyskom.com
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#ifndef QOPCUATYPE
5#define QOPCUATYPE
6
7#include <QtOpcUa/qopcuaglobal.h>
8#include <QtOpcUa/qopcuanodeids.h>
9
10#include <QtCore/qmetatype.h>
11#include <QtCore/qpair.h>
12#include <QtCore/qvariant.h>
13
14QT_BEGIN_NAMESPACE
15
16namespace QOpcUa {
17Q_OPCUA_EXPORT Q_NAMESPACE
18Q_CLASSINFO("RegisterEnumClassesUnscoped", "false")
19
20// see OPC-UA Part 3, 5.2.3 & 8.30
21enum class NodeClass {
22 Undefined = 0,
23 Object = 1,
24 Variable = 2,
25 Method = 4,
26 ObjectType = 8,
27 VariableType = 16,
28 ReferenceType = 32,
29 DataType = 64,
30 View = 128,
31};
32Q_ENUM_NS(NodeClass)
33Q_DECLARE_FLAGS(NodeClasses, NodeClass)
34
35enum class NodeAttribute {
36 None = 0,
37 NodeId = (1 << 0),
38 NodeClass = (1 << 1),
39 BrowseName = (1 << 2),
40 DisplayName = (1 << 3),
41 Description = (1 << 4),
42 WriteMask = (1 << 5),
43 UserWriteMask = (1 << 6), // Base attributes, see part 4, 5.2.1
44 IsAbstract = (1 << 7),
45 Symmetric = (1 << 8),
46 InverseName = (1 << 9), // Reference attributes, see part 4, 5.3.1
47 ContainsNoLoops = (1 << 10),
48 EventNotifier = (1 << 11), // View attributes, see part 4, 5.4
49 // Objects also add the EventNotifier attribute, see part 4, 5.5.1
50 // ObjectType also add the IsAbstract attribute, see part 4, 5.5.2
51 Value = (1 << 12),
52 DataType = (1 << 13),
53 ValueRank = (1 << 14),
54 ArrayDimensions = (1 << 15),
55 AccessLevel = (1 << 16),
56 UserAccessLevel = (1 << 17),
57 MinimumSamplingInterval = (1 << 18),
58 Historizing = (1 << 19), // Value attributes, see part 4, 5.6.2
59 // VariableType also adds the Value, DataType, ValueRank, ArrayDimensions
60 // and isAbstract attributes, see part 4, 5.6.5
61 Executable = (1 << 20),
62 UserExecutable = (1 << 21), // Method attributes, see part 4, 5.7
63};
64Q_ENUM_NS(NodeAttribute)
65Q_DECLARE_FLAGS(NodeAttributes, NodeAttribute)
66
67// Defined in OPC-UA part 3, Table 8.
68enum class WriteMaskBit : quint32 {
69 None = 0,
70 AccessLevel = (1 << 0),
71 ArrayDimensions = (1 << 1),
72 BrowseName = (1 << 2),
73 ContainsNoLoops = (1 << 3),
74 DataType = (1 << 4),
75 Description = (1 << 5),
76 DisplayName = (1 << 6),
77 EventNotifier = (1 << 7),
78 Executable = (1 << 8),
79 Historizing = (1 << 9),
80 InverseName = (1 << 10),
81 IsAbstract = (1 << 11),
82 MinimumSamplingInterval = (1 << 12),
83 NodeClass = (1 << 13),
84 NodeId = (1 << 14),
85 Symmetric = (1 << 15),
86 UserAccessLevel = (1 << 16),
87 UserExecutable = (1 << 17),
88 UserWriteMask = (1 << 18),
89 ValueRank = (1 << 19),
90 WriteMask = (1 << 20),
91 ValueForVariableType = (1 << 21),
92};
93Q_ENUM_NS(WriteMaskBit)
94Q_DECLARE_FLAGS(WriteMask, WriteMaskBit)
95
96// Defined in OPC-UA part 3, Table 8.
97enum class AccessLevelBit : quint8 {
98 None = 0,
99 CurrentRead = (1 << 0),
100 CurrentWrite = (1 << 1),
101 HistoryRead = (1 << 2),
102 HistoryWrite = (1 << 3),
103 SemanticChange = (1 << 4),
104 StatusWrite = (1 << 5),
105 TimestampWrite = (1 << 6),
106};
107Q_ENUM_NS(AccessLevelBit)
108Q_DECLARE_FLAGS(AccessLevel, AccessLevelBit)
109
110// Defined in OPC-UA part 3, Table 6.
111enum class EventNotifierBit : quint8 {
112 None = 0,
113 SubscribeToEvents = (1 << 0),
114 HistoryRead = (1 << 2),
115 HistoryWrite = (1 << 3)
116};
117Q_ENUM_NS(EventNotifierBit)
118Q_DECLARE_FLAGS(EventNotifier, EventNotifierBit)
119
120#if QT_VERSION >= 0x060000
121inline size_t qHash(const QOpcUa::NodeAttribute& attr)
122#else
123inline uint qHash(const QOpcUa::NodeAttribute& attr)
124#endif
125{
126 return ::qHash(key: static_cast<uint>(attr));
127}
128
129// The reference types are nodes in namespace 0, the enum value is their numeric identifier.
130// Identifiers are specified in https://opcfoundation.org/UA/schemas/1.03/NodeIds.csv
131enum class ReferenceTypeId : quint32 {
132 Unspecified = 0,
133 References = 31,
134 NonHierarchicalReferences = 32,
135 HierarchicalReferences = 33,
136 HasChild = 34,
137 Organizes = 35,
138 HasEventSource = 36,
139 HasModellingRule = 37,
140 HasEncoding = 38,
141 HasDescription = 39,
142 HasTypeDefinition = 40,
143 GeneratesEvent = 41,
144 Aggregates = 44,
145 HasSubtype = 45,
146 HasProperty = 46,
147 HasComponent = 47,
148 HasNotifier = 48,
149 HasOrderedComponent = 49,
150 FromState = 51,
151 ToState = 52,
152 HasCause = 53,
153 HasEffect = 54,
154 HasHistoricalConfiguration = 56,
155 HasSubStateMachine = 117,
156 HasArgumentDescription = 129,
157 HasOptionalInputArgumentDescription = 131,
158 AlwaysGeneratesEvent = 3065,
159 HasTrueSubState = 9004,
160 HasFalseSubState = 9005,
161 HasCondition = 9006,
162 HasPubSubConnection = 14476,
163 DataSetToWriter = 14936,
164 HasGuard = 15112,
165 HasDataSetWriter = 15296,
166 HasDataSetReader = 15297,
167 HasAlarmSuppressionGroup = 16361,
168 AlarmGroupMember = 16362,
169 HasEffectDisable = 17276,
170 HasDictionaryEntry = 17597,
171 HasInterface = 17603,
172 HasAddIn = 17604,
173 HasEffectEnable = 17983,
174 HasEffectSuppressed = 17984,
175 HasEffectUnsuppressed = 17985,
176 HasWriterGroup = 18804,
177 HasReaderGroup = 18805,
178 AliasFor = 23469,
179};
180Q_ENUM_NS(ReferenceTypeId)
181
182enum Types
183{
184 Boolean = 0,
185 Int32 = 1,
186 UInt32 = 2,
187 Double = 3,
188 Float = 4,
189 String = 5,
190 LocalizedText = 6,
191 DateTime = 7,
192 UInt16 = 8,
193 Int16 = 9,
194 UInt64 = 10,
195 Int64 = 11,
196 Byte = 12,
197 SByte = 13,
198 ByteString = 14,
199 XmlElement = 15,
200 NodeId = 16,
201 Guid = 17,
202 QualifiedName = 18,
203 StatusCode = 19,
204 ExtensionObject = 20,
205 Range = 21,
206 EUInformation = 22,
207 ComplexNumber = 23,
208 DoubleComplexNumber = 24,
209 AxisInformation = 25,
210 XV = 26,
211 ExpandedNodeId = 27,
212 Argument = 28,
213 Undefined = 0xFFFFFFFF
214};
215Q_ENUM_NS(Types)
216
217// OpcUa Specification Part 4, Chapter 7.34 "Status Code"
218// OpcUa Specification Part 6, Annex A.2 "Status Codes
219enum UaStatusCode : quint32
220{
221 Good = 0,
222 BadUnexpectedError = 0x80010000,
223 BadInternalError = 0x80020000,
224 BadOutOfMemory = 0x80030000,
225 BadResourceUnavailable = 0x80040000,
226 BadCommunicationError = 0x80050000,
227 BadEncodingError = 0x80060000,
228 BadDecodingError = 0x80070000,
229 BadEncodingLimitsExceeded = 0x80080000,
230 BadRequestTooLarge = 0x80B80000,
231 BadResponseTooLarge = 0x80B90000,
232 BadUnknownResponse = 0x80090000,
233 BadTimeout = 0x800A0000,
234 BadServiceUnsupported = 0x800B0000,
235 BadShutdown = 0x800C0000,
236 BadServerNotConnected = 0x800D0000,
237 BadServerHalted = 0x800E0000,
238 BadNothingToDo = 0x800F0000,
239 BadTooManyOperations = 0x80100000,
240 BadTooManyMonitoredItems = 0x80DB0000,
241 BadDataTypeIdUnknown = 0x80110000,
242 BadCertificateInvalid = 0x80120000,
243 BadSecurityChecksFailed = 0x80130000,
244 BadCertificateTimeInvalid = 0x80140000,
245 BadCertificateIssuerTimeInvalid = 0x80150000,
246 BadCertificateHostNameInvalid = 0x80160000,
247 BadCertificateUriInvalid = 0x80170000,
248 BadCertificateUseNotAllowed = 0x80180000,
249 BadCertificateIssuerUseNotAllowed = 0x80190000,
250 BadCertificateUntrusted = 0x801A0000,
251 BadCertificateRevocationUnknown = 0x801B0000,
252 BadCertificateIssuerRevocationUnknown = 0x801C0000,
253 BadCertificateRevoked = 0x801D0000,
254 BadCertificateIssuerRevoked = 0x801E0000,
255 BadCertificateChainIncomplete = 0x810D0000,
256 BadUserAccessDenied = 0x801F0000,
257 BadIdentityTokenInvalid = 0x80200000,
258 BadIdentityTokenRejected = 0x80210000,
259 BadSecureChannelIdInvalid = 0x80220000,
260 BadInvalidTimestamp = 0x80230000,
261 BadNonceInvalid = 0x80240000,
262 BadSessionIdInvalid = 0x80250000,
263 BadSessionClosed = 0x80260000,
264 BadSessionNotActivated = 0x80270000,
265 BadSubscriptionIdInvalid = 0x80280000,
266 BadRequestHeaderInvalid = 0x802A0000,
267 BadTimestampsToReturnInvalid = 0x802B0000,
268 BadRequestCancelledByClient = 0x802C0000,
269 BadTooManyArguments = 0x80E50000,
270 GoodSubscriptionTransferred = 0x002D0000,
271 GoodCompletesAsynchronously = 0x002E0000,
272 GoodOverload = 0x002F0000,
273 GoodClamped = 0x00300000,
274 BadNoCommunication = 0x80310000,
275 BadWaitingForInitialData = 0x80320000,
276 BadNodeIdInvalid = 0x80330000,
277 BadNodeIdUnknown = 0x80340000,
278 BadAttributeIdInvalid = 0x80350000,
279 BadIndexRangeInvalid = 0x80360000,
280 BadIndexRangeNoData = 0x80370000,
281 BadDataEncodingInvalid = 0x80380000,
282 BadDataEncodingUnsupported = 0x80390000,
283 BadNotReadable = 0x803A0000,
284 BadNotWritable = 0x803B0000,
285 BadOutOfRange = 0x803C0000,
286 BadNotSupported = 0x803D0000,
287 BadNotFound = 0x803E0000,
288 BadObjectDeleted = 0x803F0000,
289 BadNotImplemented = 0x80400000,
290 BadMonitoringModeInvalid = 0x80410000,
291 BadMonitoredItemIdInvalid = 0x80420000,
292 BadMonitoredItemFilterInvalid = 0x80430000,
293 BadMonitoredItemFilterUnsupported = 0x80440000,
294 BadFilterNotAllowed = 0x80450000,
295 BadStructureMissing = 0x80460000,
296 BadEventFilterInvalid = 0x80470000,
297 BadContentFilterInvalid = 0x80480000,
298 BadFilterOperatorInvalid = 0x80C10000,
299 BadFilterOperatorUnsupported = 0x80C20000,
300 BadFilterOperandCountMismatch = 0x80C30000,
301 BadFilterOperandInvalid = 0x80490000,
302 BadFilterElementInvalid = 0x80C40000,
303 BadFilterLiteralInvalid = 0x80C50000,
304 BadContinuationPointInvalid = 0x804A0000,
305 BadNoContinuationPoints = 0x804B0000,
306 BadReferenceTypeIdInvalid = 0x804C0000,
307 BadBrowseDirectionInvalid = 0x804D0000,
308 BadNodeNotInView = 0x804E0000,
309 BadServerUriInvalid = 0x804F0000,
310 BadServerNameMissing = 0x80500000,
311 BadDiscoveryUrlMissing = 0x80510000,
312 BadSempahoreFileMissing = 0x80520000,
313 BadRequestTypeInvalid = 0x80530000,
314 BadSecurityModeRejected = 0x80540000,
315 BadSecurityPolicyRejected = 0x80550000,
316 BadTooManySessions = 0x80560000,
317 BadUserSignatureInvalid = 0x80570000,
318 BadApplicationSignatureInvalid = 0x80580000,
319 BadNoValidCertificates = 0x80590000,
320 BadIdentityChangeNotSupported = 0x80C60000,
321 BadRequestCancelledByRequest = 0x805A0000,
322 BadParentNodeIdInvalid = 0x805B0000,
323 BadReferenceNotAllowed = 0x805C0000,
324 BadNodeIdRejected = 0x805D0000,
325 BadNodeIdExists = 0x805E0000,
326 BadNodeClassInvalid = 0x805F0000,
327 BadBrowseNameInvalid = 0x80600000,
328 BadBrowseNameDuplicated = 0x80610000,
329 BadNodeAttributesInvalid = 0x80620000,
330 BadTypeDefinitionInvalid = 0x80630000,
331 BadSourceNodeIdInvalid = 0x80640000,
332 BadTargetNodeIdInvalid = 0x80650000,
333 BadDuplicateReferenceNotAllowed = 0x80660000,
334 BadInvalidSelfReference = 0x80670000,
335 BadReferenceLocalOnly = 0x80680000,
336 BadNoDeleteRights = 0x80690000,
337 UncertainReferenceNotDeleted = 0x40BC0000,
338 BadServerIndexInvalid = 0x806A0000,
339 BadViewIdUnknown = 0x806B0000,
340 BadViewTimestampInvalid = 0x80C90000,
341 BadViewParameterMismatch = 0x80CA0000,
342 BadViewVersionInvalid = 0x80CB0000,
343 UncertainNotAllNodesAvailable = 0x40C00000,
344 GoodResultsMayBeIncomplete = 0x00BA0000,
345 BadNotTypeDefinition = 0x80C80000,
346 UncertainReferenceOutOfServer = 0x406C0000,
347 BadTooManyMatches = 0x806D0000,
348 BadQueryTooComplex = 0x806E0000,
349 BadNoMatch = 0x806F0000,
350 BadMaxAgeInvalid = 0x80700000,
351 BadSecurityModeInsufficient = 0x80E60000,
352 BadHistoryOperationInvalid = 0x80710000,
353 BadHistoryOperationUnsupported = 0x80720000,
354 BadInvalidTimestampArgument = 0x80BD0000,
355 BadWriteNotSupported = 0x80730000,
356 BadTypeMismatch = 0x80740000,
357 BadMethodInvalid = 0x80750000,
358 BadArgumentsMissing = 0x80760000,
359 BadTooManySubscriptions = 0x80770000,
360 BadTooManyPublishRequests = 0x80780000,
361 BadNoSubscription = 0x80790000,
362 BadSequenceNumberUnknown = 0x807A0000,
363 BadMessageNotAvailable = 0x807B0000,
364 BadInsufficientClientProfile = 0x807C0000,
365 BadStateNotActive = 0x80BF0000,
366 BadTcpServerTooBusy = 0x807D0000,
367 BadTcpMessageTypeInvalid = 0x807E0000,
368 BadTcpSecureChannelUnknown = 0x807F0000,
369 BadTcpMessageTooLarge = 0x80800000,
370 BadTcpNotEnoughResources = 0x80810000,
371 BadTcpInternalError = 0x80820000,
372 BadTcpEndpointUrlInvalid = 0x80830000,
373 BadRequestInterrupted = 0x80840000,
374 BadRequestTimeout = 0x80850000,
375 BadSecureChannelClosed = 0x80860000,
376 BadSecureChannelTokenUnknown = 0x80870000,
377 BadSequenceNumberInvalid = 0x80880000,
378 BadProtocolVersionUnsupported = 0x80BE0000,
379 BadConfigurationError = 0x80890000,
380 BadNotConnected = 0x808A0000,
381 BadDeviceFailure = 0x808B0000,
382 BadSensorFailure = 0x808C0000,
383 BadOutOfService = 0x808D0000,
384 BadDeadbandFilterInvalid = 0x808E0000,
385 UncertainNoCommunicationLastUsableValue = 0x408F0000,
386 UncertainLastUsableValue = 0x40900000,
387 UncertainSubstituteValue = 0x40910000,
388 UncertainInitialValue = 0x40920000,
389 UncertainSensorNotAccurate = 0x40930000,
390 UncertainEngineeringUnitsExceeded = 0x40940000,
391 UncertainSubNormal = 0x40950000,
392 GoodLocalOverride = 0x00960000,
393 BadRefreshInProgress = 0x80970000,
394 BadConditionAlreadyDisabled = 0x80980000,
395 BadConditionAlreadyEnabled = 0x80CC0000,
396 BadConditionDisabled = 0x80990000,
397 BadEventIdUnknown = 0x809A0000,
398 BadEventNotAcknowledgeable = 0x80BB0000,
399 BadDialogNotActive = 0x80CD0000,
400 BadDialogResponseInvalid = 0x80CE0000,
401 BadConditionBranchAlreadyAcked = 0x80CF0000,
402 BadConditionBranchAlreadyConfirmed = 0x80D00000,
403 BadConditionAlreadyShelved = 0x80D10000,
404 BadConditionNotShelved = 0x80D20000,
405 BadShelvingTimeOutOfRange = 0x80D30000,
406 BadNoData = 0x809B0000,
407 BadBoundNotFound = 0x80D70000,
408 BadBoundNotSupported = 0x80D80000,
409 BadDataLost = 0x809D0000,
410 BadDataUnavailable = 0x809E0000,
411 BadEntryExists = 0x809F0000,
412 BadNoEntryExists = 0x80A00000,
413 BadTimestampNotSupported = 0x80A10000,
414 GoodEntryInserted = 0x00A20000,
415 GoodEntryReplaced = 0x00A30000,
416 UncertainDataSubNormal = 0x40A40000,
417 GoodNoData = 0x00A50000,
418 GoodMoreData = 0x00A60000,
419 BadAggregateListMismatch = 0x80D40000,
420 BadAggregateNotSupported = 0x80D50000,
421 BadAggregateInvalidInputs = 0x80D60000,
422 BadAggregateConfigurationRejected = 0x80DA0000,
423 GoodDataIgnored = 0x00D90000,
424 BadRequestNotAllowed = 0x80E40000,
425 GoodEdited = 0x00DC0000,
426 GoodPostActionFailed = 0x00DD0000,
427 UncertainDominantValueChanged = 0x40DE0000,
428 GoodDependentValueChanged = 0x00E00000,
429 BadDominantValueChanged = 0x80E10000,
430 UncertainDependentValueChanged = 0x40E20000,
431 BadDependentValueChanged = 0x80E30000,
432 GoodCommunicationEvent = 0x00A70000,
433 GoodShutdownEvent = 0x00A80000,
434 GoodCallAgain = 0x00A90000,
435 GoodNonCriticalTimeout = 0x00AA0000,
436 BadInvalidArgument = 0x80AB0000,
437 BadConnectionRejected = 0x80AC0000,
438 BadDisconnect = 0x80AD0000,
439 BadConnectionClosed = 0x80AE0000,
440 BadInvalidState = 0x80AF0000,
441 BadEndOfStream = 0x80B00000,
442 BadNoDataAvailable = 0x80B10000,
443 BadWaitingForResponse = 0x80B20000,
444 BadOperationAbandoned = 0x80B30000,
445 BadExpectedStreamToBlock = 0x80B40000,
446 BadWouldBlock = 0x80B50000,
447 BadSyntaxError = 0x80B60000,
448 BadMaxConnectionsReached = 0x80B70000
449};
450Q_ENUM_NS(UaStatusCode)
451
452enum class ErrorCategory {
453 NoError,
454 NodeError,
455 AttributeError,
456 PermissionError,
457 ArgumentError,
458 TypeError,
459 ConnectionError,
460 UnspecifiedError
461};
462Q_ENUM_NS(ErrorCategory)
463
464Q_OPCUA_EXPORT bool isSuccessStatus(QOpcUa::UaStatusCode statusCode);
465Q_OPCUA_EXPORT QOpcUa::ErrorCategory errorCategory(QOpcUa::UaStatusCode statusCode);
466Q_OPCUA_EXPORT QString statusToString(QOpcUa::UaStatusCode statusCode);
467Q_OPCUA_EXPORT bool isSecurePolicy(const QString &securityPolicy);
468
469// NodeId helpers
470Q_OPCUA_EXPORT QString nodeIdFromString(quint16 ns, const QString &identifier);
471Q_OPCUA_EXPORT QString nodeIdFromByteString(quint16 ns, const QByteArray &identifier);
472Q_OPCUA_EXPORT QString nodeIdFromGuid(quint16 ns, const QUuid &identifier);
473Q_OPCUA_EXPORT QString nodeIdFromInteger(quint16 ns, quint32 identifier);
474Q_OPCUA_EXPORT QString nodeIdFromReferenceType(QOpcUa::ReferenceTypeId referenceType);
475Q_OPCUA_EXPORT bool nodeIdStringSplit(const QString &nodeIdString, quint16 *nsIndex,
476 QString *identifier, char *identifierType);
477Q_OPCUA_EXPORT bool nodeIdEquals(const QString &first, const QString &second);
478Q_OPCUA_EXPORT QString namespace0Id(QOpcUa::NodeIds::Namespace0 id);
479Q_OPCUA_EXPORT QOpcUa::NodeIds::Namespace0 namespace0IdFromNodeId(const QString &nodeId);
480Q_OPCUA_EXPORT QString namespace0IdName(QOpcUa::NodeIds::Namespace0 id);
481
482typedef QPair<QVariant, QOpcUa::Types> TypedVariant;
483
484enum class AxisScale : quint32 {
485 Linear = 0,
486 Log = 1,
487 Ln = 2
488};
489
490Q_OPCUA_EXPORT QOpcUa::Types metaTypeToQOpcUaType(QMetaType::Type type);
491Q_OPCUA_EXPORT QOpcUa::Types opcUaDataTypeToQOpcUaType(const QString &type);
492}
493
494Q_DECLARE_TYPEINFO(QOpcUa::Types, Q_PRIMITIVE_TYPE);
495Q_DECLARE_TYPEINFO(QOpcUa::UaStatusCode, Q_PRIMITIVE_TYPE);
496Q_DECLARE_TYPEINFO(QOpcUa::ErrorCategory, Q_PRIMITIVE_TYPE);
497
498Q_DECLARE_TYPEINFO(QOpcUa::NodeClass, Q_PRIMITIVE_TYPE);
499Q_DECLARE_TYPEINFO(QOpcUa::NodeAttribute, Q_PRIMITIVE_TYPE);
500Q_DECLARE_OPERATORS_FOR_FLAGS(QOpcUa::NodeAttributes)
501Q_DECLARE_OPERATORS_FOR_FLAGS(QOpcUa::WriteMask)
502Q_DECLARE_OPERATORS_FOR_FLAGS(QOpcUa::AccessLevel)
503Q_DECLARE_OPERATORS_FOR_FLAGS(QOpcUa::EventNotifier)
504Q_DECLARE_OPERATORS_FOR_FLAGS(QOpcUa::NodeClasses)
505Q_DECLARE_TYPEINFO(QOpcUa::ReferenceTypeId, Q_PRIMITIVE_TYPE);
506
507QT_END_NAMESPACE
508
509Q_DECLARE_METATYPE(QOpcUa::Types)
510Q_DECLARE_METATYPE(QOpcUa::TypedVariant)
511Q_DECLARE_METATYPE(QOpcUa::UaStatusCode)
512Q_DECLARE_METATYPE(QOpcUa::ErrorCategory)
513Q_DECLARE_METATYPE(QOpcUa::NodeClass)
514Q_DECLARE_METATYPE(QOpcUa::NodeAttribute)
515Q_DECLARE_METATYPE(QOpcUa::NodeAttributes)
516Q_DECLARE_METATYPE(QOpcUa::WriteMaskBit)
517Q_DECLARE_METATYPE(QOpcUa::WriteMask)
518Q_DECLARE_METATYPE(QOpcUa::AccessLevelBit)
519Q_DECLARE_METATYPE(QOpcUa::AccessLevel)
520Q_DECLARE_METATYPE(QOpcUa::EventNotifierBit)
521Q_DECLARE_METATYPE(QOpcUa::EventNotifier)
522Q_DECLARE_METATYPE(QOpcUa::ReferenceTypeId)
523Q_DECLARE_METATYPE(QOpcUa::NodeClasses)
524
525#endif // QOPCUATYPE
526

source code of qtopcua/src/opcua/client/qopcuatype.h