00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #ifndef UA_TYPES_H_
00017 #define UA_TYPES_H_
00018
00019 #ifdef __cplusplus
00020 extern "C" {
00021 #endif
00022
00023 #include <stdint.h>
00024 #include <stdbool.h>
00025 #include <stddef.h>
00026 #include "ua_config.h"
00027
00062 typedef bool UA_Boolean;
00063 #define UA_TRUE true
00064 #define UA_FALSE false
00065
00067 typedef int8_t UA_SByte;
00068 #define UA_SBYTE_MAX 127
00069 #define UA_SBYTE_MIN -128
00070
00072 typedef uint8_t UA_Byte;
00073 #define UA_BYTE_MAX 256
00074 #define UA_BYTE_MIN 0
00075
00077 typedef int16_t UA_Int16;
00078 #define UA_INT16_MAX 32767
00079 #define UA_INT16_MIN -32768
00080
00082 typedef uint16_t UA_UInt16;
00083 #define UA_UINT16_MAX 65535
00084 #define UA_UINT16_MIN 0
00085
00087 typedef int32_t UA_Int32;
00088 #define UA_INT32_MAX 2147483647
00089 #define UA_INT32_MIN -2147483648
00090
00092 typedef uint32_t UA_UInt32;
00093 #define UA_UINT32_MAX 4294967295
00094 #define UA_UINT32_MIN 0
00095
00097 typedef int64_t UA_Int64;
00098 #define UA_INT64_MAX 9223372036854775807
00099 #define UA_INT64_MIN -9223372036854775808
00100
00102 typedef uint64_t UA_UInt64;
00103 #define UA_UINT64_MAX = 18446744073709551615
00104 #define UA_UINT64_MIN = 0
00105
00107 typedef float UA_Float;
00108
00110 typedef double UA_Double;
00111
00113 typedef struct {
00114 UA_Int32 length;
00115 UA_Byte *data;
00116 } UA_String;
00117
00122 typedef UA_Int64 UA_DateTime;
00123
00125 typedef struct {
00126 UA_UInt32 data1;
00127 UA_UInt16 data2;
00128 UA_UInt16 data3;
00129 UA_Byte data4[8];
00130 } UA_Guid;
00131
00133 typedef UA_String UA_ByteString;
00134
00136 typedef UA_String UA_XmlElement;
00137
00139
00140 typedef struct {
00141 UA_UInt16 namespaceIndex;
00142 enum {
00143 UA_NODEIDTYPE_NUMERIC = 2,
00144 UA_NODEIDTYPE_STRING = 3,
00145 UA_NODEIDTYPE_GUID = 4,
00146 UA_NODEIDTYPE_BYTESTRING = 5
00147 } identifierType;
00148 union {
00149 UA_UInt32 numeric;
00150 UA_String string;
00151 UA_Guid guid;
00152 UA_ByteString byteString;
00153 } identifier;
00154 } UA_NodeId;
00155
00157 typedef struct {
00158 UA_NodeId nodeId;
00159 UA_String namespaceUri;
00160 UA_UInt32 serverIndex;
00161 } UA_ExpandedNodeId;
00162
00163 #include "ua_statuscodes.h"
00165 typedef enum UA_StatusCode UA_StatusCode;
00166
00168 typedef struct {
00169 UA_UInt16 namespaceIndex;
00170 UA_String name;
00171 } UA_QualifiedName;
00172
00174 typedef struct {
00175 UA_String locale;
00176 UA_String text;
00177 } UA_LocalizedText;
00178
00181 typedef struct {
00182 UA_NodeId typeId;
00183 enum {
00184 UA_EXTENSIONOBJECT_ENCODINGMASK_NOBODYISENCODED = 0,
00185 UA_EXTENSIONOBJECT_ENCODINGMASK_BODYISBYTESTRING = 1,
00186 UA_EXTENSIONOBJECT_ENCODINGMASK_BODYISXML = 2
00187 } encoding;
00188 UA_ByteString body;
00189 } UA_ExtensionObject;
00190
00191 struct UA_DataType;
00192 typedef struct UA_DataType UA_DataType;
00193
00198 typedef struct {
00199 UA_Int32 dimensionsSize;
00200 struct UA_NumericRangeDimension {
00201 UA_UInt32 min;
00202 UA_UInt32 max;
00203 } *dimensions;
00204 } UA_NumericRange;
00205
00217 typedef struct {
00218 const UA_DataType *type;
00219 enum {
00220 UA_VARIANT_DATA,
00221 UA_VARIANT_DATA_NODELETE,
00225 } storageType;
00226 UA_Int32 arrayLength;
00227 void *data;
00228 UA_Int32 arrayDimensionsSize;
00229 UA_Int32 *arrayDimensions;
00230 } UA_Variant;
00231
00233 typedef struct {
00234 UA_Boolean hasValue : 1;
00235 UA_Boolean hasStatus : 1;
00236 UA_Boolean hasSourceTimestamp : 1;
00237 UA_Boolean hasServerTimestamp : 1;
00238 UA_Boolean hasSourcePicoseconds : 1;
00239 UA_Boolean hasServerPicoseconds : 1;
00240 UA_Variant value;
00241 UA_StatusCode status;
00242 UA_DateTime sourceTimestamp;
00243 UA_Int16 sourcePicoseconds;
00244 UA_DateTime serverTimestamp;
00245 UA_Int16 serverPicoseconds;
00246 } UA_DataValue;
00247
00249 typedef struct UA_DiagnosticInfo {
00250 UA_Boolean hasSymbolicId : 1;
00251 UA_Boolean hasNamespaceUri : 1;
00252 UA_Boolean hasLocalizedText : 1;
00253 UA_Boolean hasLocale : 1;
00254 UA_Boolean hasAdditionalInfo : 1;
00255 UA_Boolean hasInnerStatusCode : 1;
00256 UA_Boolean hasInnerDiagnosticInfo : 1;
00257 UA_Int32 symbolicId;
00258 UA_Int32 namespaceUri;
00259 UA_Int32 localizedText;
00260 UA_Int32 locale;
00261 UA_String additionalInfo;
00262 UA_StatusCode innerStatusCode;
00263 struct UA_DiagnosticInfo *innerDiagnosticInfo;
00264 } UA_DiagnosticInfo;
00265
00266 #ifndef SWIG
00267 #define UA_TYPE_HANDLING_FUNCTIONS(TYPE) \
00268 TYPE UA_EXPORT * TYPE##_new(void); \
00269 void UA_EXPORT TYPE##_init(TYPE * p); \
00270 void UA_EXPORT TYPE##_delete(TYPE * p); \
00271 void UA_EXPORT TYPE##_deleteMembers(TYPE * p); \
00272 UA_StatusCode UA_EXPORT TYPE##_copy(const TYPE *src, TYPE *dst);
00273 #else
00274 #define UA_TYPE_HANDLING_FUNCTIONS(TYPE)
00275 #endif
00276
00277
00278 UA_TYPE_HANDLING_FUNCTIONS(UA_Boolean)
00279 UA_TYPE_HANDLING_FUNCTIONS(UA_SByte)
00280 UA_TYPE_HANDLING_FUNCTIONS(UA_Byte)
00281 UA_TYPE_HANDLING_FUNCTIONS(UA_Int16)
00282 UA_TYPE_HANDLING_FUNCTIONS(UA_UInt16)
00283 UA_TYPE_HANDLING_FUNCTIONS(UA_Int32)
00284 UA_TYPE_HANDLING_FUNCTIONS(UA_UInt32)
00285 UA_TYPE_HANDLING_FUNCTIONS(UA_Int64)
00286 UA_TYPE_HANDLING_FUNCTIONS(UA_UInt64)
00287 UA_TYPE_HANDLING_FUNCTIONS(UA_Float)
00288 UA_TYPE_HANDLING_FUNCTIONS(UA_Double)
00289 UA_TYPE_HANDLING_FUNCTIONS(UA_String)
00290 #define UA_DateTime_new UA_Int64_new
00291 #define UA_DateTime_init UA_Int64_init
00292 #define UA_DateTime_delete UA_Int64_delete
00293 #define UA_DateTime_deleteMembers UA_Int64_deleteMembers
00294 #define UA_DateTime_copy UA_Int64_copy
00295 UA_TYPE_HANDLING_FUNCTIONS(UA_Guid)
00296 #define UA_ByteString_new UA_String_new
00297 #define UA_ByteString_init UA_String_init
00298 #define UA_ByteString_delete UA_String_delete
00299 #define UA_ByteString_deleteMembers UA_String_deleteMembers
00300 #define UA_ByteString_copy UA_String_copy
00301 #define UA_XmlElement_new UA_String_new
00302 #define UA_XmlElement_init UA_String_init
00303 #define UA_XmlElement_delete UA_String_delete
00304 #define UA_XmlElement_deleteMembers UA_String_deleteMembers
00305 #define UA_XmlElement_copy UA_String_copy
00306 UA_TYPE_HANDLING_FUNCTIONS(UA_NodeId)
00307 UA_TYPE_HANDLING_FUNCTIONS(UA_ExpandedNodeId)
00308 #define UA_StatusCode_new(p) UA_Int32_new((UA_Int32*)p)
00309 #define UA_StatusCode_init(p) UA_Int32_init((UA_Int32*)p)
00310 #define UA_StatusCode_delete(p) UA_Int32_delete((UA_Int32*)p)
00311 #define UA_StatusCode_deleteMembers(p) UA_Int32_deleteMembers((UA_Int32*)p)
00312 #define UA_StatusCode_copy(p) UA_Int32_copy((UA_Int32*)p)
00313 UA_TYPE_HANDLING_FUNCTIONS(UA_QualifiedName)
00314 UA_TYPE_HANDLING_FUNCTIONS(UA_LocalizedText)
00315 UA_TYPE_HANDLING_FUNCTIONS(UA_ExtensionObject)
00316 UA_TYPE_HANDLING_FUNCTIONS(UA_DataValue)
00317 UA_TYPE_HANDLING_FUNCTIONS(UA_Variant)
00318 UA_TYPE_HANDLING_FUNCTIONS(UA_DiagnosticInfo)
00319
00320
00321
00322
00323
00324
00327 UA_String UA_EXPORT UA_String_fromChars(char const src[]);
00328
00329 #define UA_STRING_ALLOC(CHARS) UA_String_fromChars(CHARS)
00330 #define UA_STRING(CHARS) (UA_String) {strlen(CHARS), (UA_Byte*)CHARS }
00331 #define UA_STRING_NULL (UA_String) {-1, (UA_Byte*)0 }
00332
00334 UA_StatusCode UA_EXPORT UA_String_copyprintf(char const fmt[], UA_String *dst, ...);
00335
00337 UA_Boolean UA_EXPORT UA_String_equal(const UA_String *string1, const UA_String *string2);
00338
00340 UA_Boolean UA_EXPORT UA_String_equalchars(const UA_String *string1, char *charString);
00341
00342
00344 UA_DateTime UA_EXPORT UA_DateTime_now(void);
00345
00346 typedef struct UA_DateTimeStruct {
00347 UA_Int16 nanoSec;
00348 UA_Int16 microSec;
00349 UA_Int16 milliSec;
00350 UA_Int16 sec;
00351 UA_Int16 min;
00352 UA_Int16 hour;
00353 UA_Int16 day;
00354 UA_Int16 month;
00355 UA_Int16 year;
00356 } UA_DateTimeStruct;
00357
00358 UA_DateTimeStruct UA_EXPORT UA_DateTime_toStruct(UA_DateTime time);
00359 UA_StatusCode UA_EXPORT UA_DateTime_toString(UA_DateTime time, UA_String *timeString);
00360
00361
00363 UA_Boolean UA_EXPORT UA_Guid_equal(const UA_Guid *g1, const UA_Guid *g2);
00364
00366 UA_Guid UA_EXPORT UA_Guid_random(UA_UInt32 *seed);
00367
00368
00369 #define UA_BYTESTRING_NULL (UA_ByteString) {-1, (UA_Byte*)0 }
00370 #define UA_ByteString_equal(string1, string2) \
00371 UA_String_equal((const UA_String*) string1, (const UA_String*)string2)
00372
00374 UA_StatusCode UA_EXPORT UA_ByteString_newMembers(UA_ByteString *p, UA_Int32 length);
00375
00376
00378 UA_Boolean UA_EXPORT UA_NodeId_equal(const UA_NodeId *n1, const UA_NodeId *n2);
00379
00381 UA_Boolean UA_EXPORT UA_NodeId_isNull(const UA_NodeId *p);
00382
00383 UA_NodeId UA_EXPORT UA_NodeId_fromInteger(UA_UInt16 nsIndex, UA_Int32 identifier);
00384 UA_NodeId UA_EXPORT UA_NodeId_fromCharString(UA_UInt16 nsIndex, char identifier[]);
00385 UA_NodeId UA_EXPORT UA_NodeId_fromCharStringCopy(UA_UInt16 nsIndex, char const identifier[]);
00386 UA_NodeId UA_EXPORT UA_NodeId_fromString(UA_UInt16 nsIndex, UA_String identifier);
00387 UA_NodeId UA_EXPORT UA_NodeId_fromStringCopy(UA_UInt16 nsIndex, UA_String identifier);
00388 UA_NodeId UA_EXPORT UA_NodeId_fromGuid(UA_UInt16 nsIndex, UA_Guid identifier);
00389 UA_NodeId UA_EXPORT UA_NodeId_fromCharByteString(UA_UInt16 nsIndex, char identifier[]);
00390 UA_NodeId UA_EXPORT UA_NodeId_fromCharByteStringCopy(UA_UInt16 nsIndex, char const identifier[]);
00391 UA_NodeId UA_EXPORT UA_NodeId_fromByteString(UA_UInt16 nsIndex, UA_ByteString identifier);
00392 UA_NodeId UA_EXPORT UA_NodeId_fromByteStringCopy(UA_UInt16 nsIndex, UA_ByteString identifier);
00393
00394 #define UA_NODEID_NUMERIC(NS_INDEX, NUMERICID) UA_NodeId_fromInteger(NS_INDEX, NUMERICID)
00395 #define UA_NODEID_STRING(NS_INDEX, CHARS) UA_NodeId_fromCharString(NS_INDEX, CHARS)
00396 #define UA_NODEID_STRING_ALLOC(NS_INDEX, CHARS) UA_NodeId_fromCharStringCopy(NS_INDEX, CHARS)
00397 #define UA_NODEID_GUID(NS_INDEX, GUID) UA_NodeId_fromGuid(NS_INDEX, GUID)
00398 #define UA_NODEID_BYTESTRING(NS_INDEX, CHARS) UA_NodeId_fromCharByteString(NS_INDEX, CHARS)
00399 #define UA_NODEID_BYTESTRING_ALLOC(NS_INDEX, CHARS) UA_NodeId_fromCharStringCopy(NS_INDEX, CHARS)
00400 #define UA_NODEID_NULL UA_NODEID_NUMERIC(0,0)
00401
00402
00403 UA_Boolean UA_EXPORT UA_ExpandedNodeId_isNull(const UA_ExpandedNodeId *p);
00404
00405 #define UA_EXPANDEDNODEID_NUMERIC(NS_INDEX, NUMERICID) (UA_ExpandedNodeId) { \
00406 .nodeId = {.namespaceIndex = NS_INDEX, .identifierType = UA_NODEIDTYPE_NUMERIC, \
00407 .identifier.numeric = NUMERICID }, \
00408 .serverIndex = 0, .namespaceUri = {.data = (UA_Byte*)0, .length = -1} }
00409
00410
00411 #define UA_QUALIFIEDNAME(NS_INDEX, CHARS) (const UA_QualifiedName) { \
00412 .namespaceIndex = NS_INDEX, .name = UA_STRING(CHARS) }
00413 #define UA_QUALIFIEDNAME_ALLOC(NS_INDEX, CHARS) (UA_QualifiedName) { \
00414 .namespaceIndex = NS_INDEX, .name = UA_STRING_ALLOC(CHARS) }
00415
00416
00417 #define UA_LOCALIZEDTEXT(LOCALE, TEXT) (const UA_LocalizedText) { \
00418 .locale = UA_STRING(LOCALE), .text = UA_STRING(TEXT) }
00419 #define UA_LOCALIZEDTEXT_ALLOC(LOCALE, TEXT) (UA_LocalizedText) { \
00420 .locale = UA_STRING_ALLOC(LOCALE), .text = UA_STRING_ALLOC(TEXT) }
00421
00422
00423
00431 UA_Boolean UA_EXPORT UA_Variant_isScalar(const UA_Variant *v);
00432
00442 UA_StatusCode UA_EXPORT UA_Variant_setScalar(UA_Variant *v, void *p, const UA_DataType *type);
00443
00452 UA_StatusCode UA_EXPORT UA_Variant_setScalarCopy(UA_Variant *v, const void *p, const UA_DataType *type);
00453
00464 UA_StatusCode UA_EXPORT UA_Variant_setArray(UA_Variant *v, void *array, UA_Int32 noElements,
00465 const UA_DataType *type);
00466
00476 UA_StatusCode UA_EXPORT UA_Variant_setArrayCopy(UA_Variant *v, const void *array, UA_Int32 noElements,
00477 const UA_DataType *type);
00478
00483 UA_StatusCode UA_EXPORT UA_Variant_copyRange(const UA_Variant *src, UA_Variant *dst, UA_NumericRange range);
00484
00496 UA_StatusCode UA_EXPORT UA_Variant_setRange(UA_Variant *v, void *dataArray, UA_Int32 dataArraySize,
00497 const UA_NumericRange range);
00498
00508 UA_StatusCode UA_EXPORT UA_Variant_setRangeCopy(UA_Variant *v, const void *dataArray, UA_Int32 dataArraySize,
00509 const UA_NumericRange range);
00510
00511
00512
00513
00514
00515 #define UA_MAX_TYPE_MEMBERS 13 // Maximum number of members per complex type
00516
00517 #ifndef _WIN32
00518 # define UA_BITFIELD(SIZE) : SIZE
00519 #else
00520 # define UA_BITFIELD(SIZE)
00521 #endif
00522
00523 #define UA_IS_BUILTIN(ID) (ID <= UA_TYPES_DIAGNOSTICINFO)
00524
00525 typedef struct {
00526 UA_UInt16 memberTypeIndex UA_BITFIELD(9);
00527 UA_Boolean namespaceZero UA_BITFIELD(1);
00531 UA_Byte padding UA_BITFIELD(5);
00535 UA_Boolean isArray UA_BITFIELD(1);
00536 } UA_DataTypeMember;
00537
00538 struct UA_DataType {
00539 UA_NodeId typeId;
00540 ptrdiff_t memSize UA_BITFIELD(16);
00541 UA_UInt16 typeIndex UA_BITFIELD(13);
00542 UA_Boolean namespaceZero UA_BITFIELD(1);
00543 UA_Boolean fixedSize UA_BITFIELD(1);
00544 UA_Boolean zeroCopyable UA_BITFIELD(1);
00545 UA_Byte membersSize;
00546 UA_DataTypeMember members[UA_MAX_TYPE_MEMBERS];
00547 };
00548
00555 void UA_EXPORT * UA_new(const UA_DataType *dataType);
00556
00563 void UA_EXPORT UA_init(void *p, const UA_DataType *dataType);
00564
00574 UA_StatusCode UA_EXPORT UA_copy(const void *src, void *dst, const UA_DataType *dataType);
00575
00584 void UA_EXPORT UA_deleteMembers(void *p, const UA_DataType *dataType);
00585
00592 void UA_EXPORT UA_delete(void *p, const UA_DataType *dataType);
00593
00594
00595
00596
00597
00598 #define MAX_ARRAY_SIZE 104857600 // arrays must be smaller than 100MB
00599
00606 void UA_EXPORT * UA_Array_new(const UA_DataType *dataType, UA_Int32 noElements);
00607
00617 UA_StatusCode UA_EXPORT UA_Array_copy(const void *src, void **dst, const UA_DataType *dataType, UA_Int32 noElements);
00618
00626 void UA_EXPORT UA_Array_delete(void *p, const UA_DataType *dataType, UA_Int32 noElements);
00627
00630
00631 typedef enum {
00632 UA_ATTRIBUTEID_NODEID = 1,
00633 UA_ATTRIBUTEID_NODECLASS = 2,
00634 UA_ATTRIBUTEID_BROWSENAME = 3,
00635 UA_ATTRIBUTEID_DISPLAYNAME = 4,
00636 UA_ATTRIBUTEID_DESCRIPTION = 5,
00637 UA_ATTRIBUTEID_WRITEMASK = 6,
00638 UA_ATTRIBUTEID_USERWRITEMASK = 7,
00639 UA_ATTRIBUTEID_ISABSTRACT = 8,
00640 UA_ATTRIBUTEID_SYMMETRIC = 9,
00641 UA_ATTRIBUTEID_INVERSENAME = 10,
00642 UA_ATTRIBUTEID_CONTAINSNOLOOPS = 11,
00643 UA_ATTRIBUTEID_EVENTNOTIFIER = 12,
00644 UA_ATTRIBUTEID_VALUE = 13,
00645 UA_ATTRIBUTEID_DATATYPE = 14,
00646 UA_ATTRIBUTEID_VALUERANK = 15,
00647 UA_ATTRIBUTEID_ARRAYDIMENSIONS = 16,
00648 UA_ATTRIBUTEID_ACCESSLEVEL = 17,
00649 UA_ATTRIBUTEID_USERACCESSLEVEL = 18,
00650 UA_ATTRIBUTEID_MINIMUMSAMPLINGINTERVAL = 19,
00651 UA_ATTRIBUTEID_HISTORIZING = 20,
00652 UA_ATTRIBUTEID_EXECUTABLE = 21,
00653 UA_ATTRIBUTEID_USEREXECUTABLE = 22
00654 } UA_AttributeId;
00655
00656 #ifdef __cplusplus
00657 }
00658 #endif
00659
00660 #endif