/* * opcua_advancedDatatypes.h * * Created on: Jan 13, 2014 * Author: opcua */ #ifndef OPCUA_ADVANCEDDATATYPES_H_ #define OPCUA_ADVANCEDDATATYPES_H_ #include "opcua_builtInDatatypes.h" typedef struct AD_RawMessage_t AD_RawMessage; struct AD_RawMessage_t { char *message; UA_UInt32 length; }; enum BED_ApplicationType {SERVER_0, CLIENT_1, CLIENTANDSERVER_2, DISCOVERYSERVER_3}; /** * ApplicationDescription * Part: 4 * Chapter: 7.1 * Page: 103 */ struct BED_ApplicationDescription { UA_String applicationUri; UA_String productUri; UA_LocalizedText applicationName; enum BED_ApplicationType applicationType; UA_String gatewayServerUri; UA_String discoveryProfileUri; UA_String discoverUrls[]; }; /** * ApplicationInstanceCertificate * Part: 4 * Chapter: 7.2 * Page: 104 */ struct BED_ApplicationInstanceCertificate { UA_String version; UA_ByteString serialNumber; UA_String signatureAlgorithm; UA_ByteString signature; //ToDo struct issuer //????????????? S. 108 table 104 UA_DateTime validFrom; UA_DateTime valdiTo; //ToDo struct subject; //????????????? S. 108 table 104 UA_String applicationUri; UA_String *hostnames; UA_ByteString pubicKey; UA_String keyUsage[]; }; /** * BrowseResult * Part: 4 * Chapter: 7.3 * Page: 104 */ struct BED_BrowseResult { UA_StatusCode statusCode; // struct BED_ContinuationPoint continuationPoint; // struct BED_ReferenceDescription references[]; }; /** * ContentFilter //ToDo * Part: 4 * Chapter: 7.4.1 * Page: 104 */ struct BED_ContentFilter { //ToDo struct BED_ContentFilterElement elements[]; //ToDo //ToDo enum BED_FilterOperand filterOperator; //ToDo table 110 //ToDo struct BED_ExtensibleParamterFilterOperand filterOperands[]; //ToDo 7.4.4 }; /** * Counter * Part: 4 * Chapter: 7.5 * Page: 113 */ typedef UA_UInt32 BED_Counter; /** * ContinuationPoint //ToDo * Part: 4 * Chapter: 7.6 * Page: 114 */ struct BED_ContinuationPoint { }; /** * DataValue * Part: 4 * Chapter: 7.7.1 * Page: 114 */ struct BED_DataValue { UA_Variant value; // BaseDataType are mapped to a UA_Variant -> part: 6 chapter: 5.1.5 page: 14 UA_StatusCode statusCode; UA_DateTime sourceTimestamp; //ToDo UInt //toBeDiscussed: Resolution of PicoSeconds UA_DateTime serverTimestamp; //ToDo UInt //toBeDiscussed: Resolution of PicoSeconds }; /** * DiagnosticInfo * Part: 4 * Chapter: 7.9*/ struct BED_DiagnosticInfo { //ToDo struct ???? identifier; //ToDo: what kind of strcuture? UA_Int32 namespaceUri; UA_Int32 symbolicId; UA_Int32 locale; UA_Int32 localizesText; UA_String additionalInfo; UA_StatusCode innerStatusCode; struct BED_DiagnosticInfo *innerDiagnosticInfo; }; /** * EndpointDescription * Part: 4 * Chapter: 7.9 * Page: 116 */ struct BED_EndpointDescription { UA_String endpointUrl; struct BED_ApplicationDescription server; struct BED_ApplicationInstanceCertificate serverCertificate; // enum BED_MessageSecurityMode securityMode; UA_String securityPolicyUri; // struct BED_UserTokenPolicy useridentyTokens[]; UA_String transportProfileUri; UA_Byte securtiyLevel; }; /** * ExpandedNodeId * Part: 4 * Chapter: 7.10 * Page: 117 */ struct BED_ExpandedNodeId { // BED_Index serverIndex; UA_String namespaceUri; // BED_Index namespaveIndex; //ToDo enum BED_IdentifierType identiferType; //ToDo: Is the enumeration correct? //ToDo UA_NodeIdentifier identifier; //ToDo -> Part 3: Address Space Model }; /** * ExtensibleParameter * Part: 4 * Chapter: 7.11 * Page: 117 */ struct BED_ExtensibleParameter { // struct UA_NodeId parameterTypeId; //ToDo -- parameterData; //toBeDiscussed }; /** * Index * Part: 4 * Chapter: 7.12 * Page: 118 */ typedef UA_UInt32 BED_Index; /** * IntegerId * Part: 4 * Chapter: 7.13 * Page: 118 */ typedef UA_UInt32 BED_IntegerId; /** * MessageSecurityMode * Part: 4 * Chapter: 7.14 * Page: 118 */ enum BED_MessageSecurityMode { INVALID_0 = 0, SIGN_1 = 1, SIGNANDENCRYPT_2 = 2 }; /** * MonitoringParameters * Part: 4 * Chapter: 7.15 * Page: 118 */ struct BED_MonitoringParameters { BED_IntegerId clientHandle; //ToDo Duration???? samplingInterval; //ToDo //ToDo struct BED_ExtensibleParameterMonitoringFilter filter //ToDo BED_Counter queueSize; Boolean discardOldest; }; //->ExtensibleParameter ->Part:4 Chapter:7.11 Page:117 struct BED_ExtensibleParameterMonitoringFilter //ToDo: Ist die Umsetzung des ExtensibleParameter korrekt? { // enum BED_MonitoringFilter parameterTypeId; // struct BED_DataChangeFilter dataChangeFilter; // struct BED_EventFilter eventFilter; // struct BED_AggregateFilter aggregateFilter; }; /** * MonitoringFilter parameterTypeIds * Part: 4 * Chapter: 7.16.1 * Page: 119 */ enum BED_MonitoringFilter { DATA_CHANGE_FILTER = 1, EVENT_FILTER = 2, AGGREGATE_FILTER = 3 }; /** * DataChangeFilter * Part: 4 * Chapter: 7.16.2 * Page: 119 */ struct BED_DataChangeFilter { //ToDo enum BED_MonitoringFilter trigger = BED_MonitoringFilter.DATA_CHANGE_FILTER; UA_UInt32 deadbandType; UA_Double deadbandValue; }; /** * EventFilter * Part: 4 * Chapter: 7.16.3 * Page: 120 */ struct BED_EventFilter { //ToDo SimpleAttributeOperantd selectClauses[]; //ToDo //ToDo ContenFilter whereClause; //ToDo }; struct BED_EventFilterResult { UA_StatusCode selectClauseResults[3]; // struct UA_DiagnosticInfo selectClauseDiagnosticInfos[3]; // struct BED_ContentFilterResult whereClauseResult; }; /** * AggregateFilter * Part: 4 * Chapter: 7.16.4 * Page: 122 */ struct BED_AggregateFilter { UA_DateTime startTime; // struct UA_NodeId aggregateType; UA_Duration processingInterval; //ToDo AggregateConfiguration aggregateConfiguration; //ToDo Boolean useServerCapabilitiesDafaults; Boolean treatUncertainAsBad; UA_Byte percentDataBad; UA_Byte percentDataGood; Boolean steppedSlopedExtrapolation; }; struct BED_AggregateFilterResult { UA_DateTime revisedStartTime; UA_Duration revisedProcessingInterval; }; /** * MonitoringMode * Part: 4 * Chapter: 7.17 * Page: 123 */ enum BED_MonitoringModeValues { DISABLED_0 = 0, //The item being monitored is not sampled or evaluated, and Notifications are not generated or queued. Notification reporting is disabled. SAMPLING_1 = 1, //The item being monitored is sampled and evaluated, and Notifications are generated and queued. Notification reporting is disabled. REPORTING_2 = 2 //The item being monitored is sampled and evaluated, and Notifications are generated and queued. Notification reporting is enabled. }; /** * NodeAttributes parameters * Part: 4 * Chapter: 7.18.1 * Page: 124 */ enum BED_NodeAttributesParamterTypeIds { ObjectAttributes, //Defines the Attributes for the Object NodeClass. VariableAttributes, //Defines the Attributes for the Variable NodeClass. MethodAttributes, //Defines the Attributes for the Method NodeClass. ObjectTypeAttributes, //Defines the Attributes for the ObjectType NodeClass. VariableTypeAttributes, //Defines the Attributes for the VariableType NodeClass. ReferenceTypeAttributes,//Defines the Attributes for the ReferenceType NodeClass. DataTypeAttributes, //Defines the Attributes for the DataType NodeClass. ViewAttributes //Defines the Attributes for the View NodeClass. }; enum BED_NodeAttributesBitMask { AccessLevel = 1, //Bit: 0 Indicates if the AccessLevel Attribute is set. ArrayDimensions = 2, //Bit: 1 Indicates if the ArrayDimensions Attribute is set. //Reserved = 4, //Bit: 2 Reserved to be consistent with WriteMask defined in IEC 62541-3. ContainsNoLoops = 8, //Bit: 3 Indicates if the ContainsNoLoops Attribute is set. DataType = 16, //Bit: 4 Indicates if the DataType Attribute is set. Description = 32, //Bit: 5 Indicates if the Description Attribute is set. DisplayName = 64, //Bit: 6 Indicates if the DisplayName Attribute is set. EventNotifier = 128, //Bit: 7 Indicates if the EventNotifier Attribute is set. Executable = 256, //Bit: 8 Indicates if the Executable Attribute is set. Historizing = 512, //Bit: 9 Indicates if the Historizing Attribute is set. InverseName = 1024, //Bit:10 Indicates if the InverseName Attribute is set. IsAbstract = 2048, //Bit:11 Indicates if the IsAbstract Attribute is set. MinimumSamplingInterval = 4096, //Bit:12 Indicates if the MinimumSamplingInterval Attribute is set. //Reserved = 8192, //Bit:13 Reserved to be consistent with WriteMask defined in IEC 62541-3. //Reserved = 16384, //Bit:14 Reserved to be consistent with WriteMask defined in IEC 62541-3. Symmetric = 32768, //Bit:15 Indicates if the Symmetric Attribute is set. UserAccessLevel = 65536,//Bit:16 Indicates if the UserAccessLevel Attribute is set. UserExecutable = 131072,//Bit:17 Indicates if the UserExecutable Attribute is set. UserWriteMask = 262144, //Bit:18 Indicates if the UserWriteMask Attribute is set. ValueRank = 524288, //Bit:19 Indicates if the ValueRank Attribute is set. WriteMask = 1048576, //Bit:20 Indicates if the WriteMask Attribute is set. Value = 2097152 //Bit:21 Indicates if the Value Attribute is set. //Reserved //Bit:22:32 Reserved for future use. Shall always be zero. }; /** * ObjectAttributes parameters * Part: 4 * Chapter: 7.18.2 * Page: 125 */ struct BED_ObjectAttributes { UA_UInt32 specifiedAttribute; //BitMask corresponding to BED_NodeAttributesBitMask // struct UA_LocalizedText displayName; // struct UA_LocalizedText description; UA_Byte eventNotifier; UA_UInt32 writeMask; UA_UInt32 userWriteMask; }; /** * VariableAttributes parameters * Part: 4 * Chapter: 7.18.3 * Page: 125 */ struct BED_VariableAttributes { UA_UInt32 specifiedAttributes; //BitMask corresponding to BED_NodeAttributesBitMask // struct UA_LocalizedText displayName; // struct UA_LocalizedText description; //ToDo DefinedByTheDataTypeAttribte??? value //ToDo // struct UA_NodeId dataType; UA_Int32 valueRank; // UInt32 arrayDimensions[]; UA_Byte accessLevel; UA_Byte userAccesLevel; //ToDo Duration???? minimumSamplingInterval; //ToDo Boolean historizing; UA_UInt32 writeMask; UA_UInt32 userWriteMask; }; /** * MethodAttributes parameters * Part: 4 * Chapter: 7.18.4 * Page: 125 */ struct BED_MethodAttributes { UA_UInt32 specifiedAttributes; //BitMask corresponding to BED_NodeAttributesBitMask // struct UA_LocalizedText displayName; // struct UA_LocalizedText description; Boolean executable; Boolean userExecutable; UA_UInt32 writeMask; UA_UInt32 userWriteMask; }; /** * ObjectTypeAttributes parameters * Part: 4 * Chapter: 7.18.5 * Page: 125 */ struct BED_ObjectTypeAttributes { UA_UInt32 specifiedAttributes; //BitMask corresponding to BED_NodeAttributesBitMask // struct UA_LocalizedText displayName; // struct UA_LocalizedText description; Boolean isAbstract; UA_UInt32 wirteMask; UA_UInt32 userWriteMask; }; /** * VariableTypeAttributes parameters * Part: 4 * Chapter: 7.18.6 * Page: 126 */ struct BED_VariableTypeAttributes { UA_UInt32 specifiedAttributes; //BitMask corresponding to BED_NodeAttributesBitMask // struct UA_LocalizedText displayName; // struct UA_LocalizedText description; //ToDo DefinedByTheDataTypeAttribte??? value //ToDo // struct UA_NodeId dataType; UA_Int32 valueRank; // UInt32 arrayDimesions[]; Boolean isAbstract; UA_UInt32 writeMask; UA_UInt32 userWriteMask; }; /** * ReferenceTypeAttributes parameters * Part: 4 * Chapter: 7.18.7 * Page: 126 */ struct BED_ReferenceTypeAttributes { UA_UInt32 specifiedAttributes; //BitMask corresponding to BED_NodeAttributesBitMask // struct UA_LocalizedText displayName; // struct UA_LocalizedText description; Boolean isAbstract; Boolean symmetric; // struct UA_LocalizedText inverseName; UA_UInt32 writeMask; UA_UInt32 userWriteMask; }; /** * DataTypeAttributes parameters * Part: 4 * Chapter: 7.18.8 * Page: 126 */ struct BED_DataTypeAttributes { UA_UInt32 specifiedAttributes; //BitMask corresponding to BED_NodeAttributesBitMask // struct UA_LocalizedText displayName; // struct UA_LocalizedText description; Boolean isAbstract; UA_UInt32 writeMask; UA_UInt32 userWriteMask; }; /** * ViewAttributes parameters * Part: 4 * Chapter: 7.18.9 * Page: 127 */ struct BED_ViewAttributes { UA_UInt32 specifiedAttributes; //BitMask corresponding to BED_NodeAttributesBitMask // struct UA_LocalizedText displayName; // struct UA_LocalizedText description; Boolean containsNoLoops; UA_Byte eventNotifier; UA_UInt32 writeMask; UA_UInt32 userWriteMask; }; /** * NotificationData parameters * Part: 4 * Chapter: 7.19 * Page: 127 */ enum BED_NotificationDataParameterTypeIds { DATA_CHANGE = 1, EVENT = 2, STATUS_CHANGE = 3 }; /** * DataChangeNotification parameter * Part: 4 * Chapter: 7.19.2 * Page: 127 */ struct BED_DataChangeNotification { //ToDo struct BED_MonitoredItemNotification monitoredItems[]; //ToDo BED_IntegerId clientHandle; // struct UA_DataValue value; UA_DiagnosticInfo diagnositcInfos[]; }; /** * EventNotificationList parameter * Part: 4 * Chapter: 7.19.3 * Page: 128 */ struct BED_EventNotificationList { //ToDo struct EventFieldList events[]; //ToDo BED_IntegerId clientHandle; UA_Variant eventFields[]; // BaseDataType are mapped to a UA_Variant -> part: 6 chapter: 5.1.5 page: 14 }; /** * StatusChangeNotification parameter * Part: 4 * Chapter: 7.19.4 * Page: 128 */ struct BED_StatusChangeNotification { UA_StatusCode status; // struct UA_DiagnosticInfo diagnosticInfo; }; /** * NotificationMessage * Part: 4 * Chapter: 7.20 * Page: 129 */ struct BED_NotificationMessage { BED_Counter sequenceNumber; // struct UA_DateTime publishTime; // struct ExtensibleParameterNotificationData notificationData[]; }; //->ExtensibleParameter ->Part:4 Chapter:7.11 Page:117 struct ExtensibleParameterNotificationData //ToDo: Ist die Umsetzung des ExtensibleParameter korrekt? { enum BED_NotificationDataParameterTypeIds parameterTypeId; struct BED_DataChangeNotification dataChange; struct BED_EventNotificationList event; struct BED_StatusChangeNotification statusChange; }; /** * NumericRange * Part: 4 * Chapter: 7.21 * Page: 129 */ typedef UA_String NumericRange; /** * QueryDataSet * Part: 4 * Chapter: 7.22 * Page: 130 */ /* struct BED_QueryDataSet { // struct UA_ExpandedNodeId nodeId; // struct UA_ExpandedNodeId typeDefinitionNode; // struct UA_Variant values[]; // BaseDataType are mapped to a UA_Variant -> part: 6 chapter: 5.1.5 page: 14 }; */ /** * ReadValueId * Part: 4 * Chapter: 7.23 * Page: 130 */ struct BED_QueryDataSet { // struct UA_NodeId nodeId; BED_IntegerId attributeId; // struct BED_NumericRange indexRange; // struct UA_QualifiedName dataEncoding; }; /** * ReferenceDescription * Part: 4 * Chapter: 7.24 * Page: 131 */ struct BED_ReferenceDescription { // struct UA_NodeId referenceTypeId; Boolean isForward; // struct UA_ExpandedNodeId nodeId; // struct UA_QualifiedName browseName; // struct UA_LocalizedText displayName; //ToDo struct BED_NodeClass nodeClass; //ToDo // struct UA_ExpandedNodeId typeDefinition; }; /** * RelativePath * Part: 4 * Chapter: 7.25 * Page: 131 */ struct BED_RelativePath { //ToDo struct BED_RelativePathElement elements[]; //ToDo // struct UA_NodeId referenceTypeId; Boolean isInverse; Boolean includeSubtypes; // struct UA_QualifiedName targetName; }; /** * RequestHeader * Part: 4 * Chapter: 7.26 * Page: 132 */ struct BED_RequestHeader { UA_NodeId authenticationToken; //ToDo UA_DateTime timestamp; BED_IntegerId requestHandle; UA_UInt32 returnDiagnostics; UA_String auditEntryId; UA_UInt32 timeoutHint; UA_ExtensionObject additionalHeader; }; enum BED_RequestReturnDiagnositcs { SERVICE_LEVEL_SYMBOLIC_ID = 1, //Hex 0x01 SERVICE_LEVEL_LOCALIZED_TEXT= 2, //Hex 0x02 SERVICE_LEVEL_ADDITIONAL_INFO = 4, //Hex 0x04 SERVICE_LEVEL_INNER_STATUS_CODE = 8, //Hex 0x08 SERVICE_LEVEL_INNER_DIAGNOSTICS = 16, //Hex 0x10 OPERATION_LEVEL_SYMBOLIC_ID = 32, //Hex 0x20 OPERATION_LEVEL_LOCALIZED_TEXT= 64, //Hex 0x40 OPERATION_LEVEL_ADDITIONAL_INFO = 128, //Hex 0x80 OPERATION_LEVEL_INNER_STATUS_CODE = 256, //Hex 0x100 OPERATION_LEVEL_INNER_DIAGNOSTICS = 512 //Hex 0x200 }; /** * ResponseHeader * Part: 4 * Chapter: 7.27 * Page: 133 */ /*typedef struct UA_AD_ResponseHeader { UA_DateTime timestamp; UInt32 requestHandle; UA_StatusCode serviceResult; UA_DiagnosticInfo *serviceDiagnostics; UA_String *stringTable; UA_AD_ExtensibleParameter *additionalHeader; }UA_AD_ResponseHeader; */ /** * ServiceFault * Part: 4 * Chapter: 7.28 * Page: 133 */ /*struct BED_ServiceFault { struct BED_ResponseHeader responseHeader; }; */ //ToDo: Own DataType with typeDef? /** * SessionAuthenticationToken * Part: 4 * Chapter: 7.29 * Page: 133 */ /** * SignatureData * Part: 4 * Chapter: 7.30 * Page: 135 */ struct BED_SignatureData { UA_ByteString signature; UA_String agorithm; }; /** * SignedSoftwareCertificate * Part: 4 * Chapter: 7.31 * Page: 135 */ struct BED_SignedSoftwareCertificate { UA_String version; UA_ByteString serialNumber; UA_String signatureAlgorithm; UA_ByteString signature; //ToDo struct issuer //ToDo: ??? struct? UA_DateTime validFrom; UA_DateTime validTo; //ToDo struct subject; //ToDo: ??? struct? //ToDo struct subjectAltName[]; //ToDo: ??? struct? UA_ByteString publicKey; // UA_String keyUsage[]; UA_ByteString softwareCertificate; }; /** * SoftwareCertificate * Part: 4 * Chapter: 7.32 * Page: 135 */ struct BED_SoftwareCertificate { UA_String productName; UA_String productUri; UA_String vendorName; UA_ByteString vendorProductCertificate; UA_String softwareVersion; UA_String buildNumber; UA_DateTime buildDate; UA_String issuedBy; UA_DateTime issueDate; // UA_ByteString vendorProductCertificate; // struct BED_SupportedProfiles supportedProfiles; }; struct BED_SupportedProfiles { UA_String oranizationUri; UA_String profileId; UA_String complianceTool; UA_DateTime complianceDate; // enum BED_ComplianceLevel complianceLevel; UA_String unsupportedUnitIds[]; }; enum BED_ComplianceLevel { UNTESTED_0 = 0, //the profiled capability has not been tested successfully. PARTIAL_1 = 1, //the profiled capability has been partially tested and has //passed critical tests, as defined by the certifying authority. SELFTESTED_2 = 2, //the profiled capability has been successfully tested using a //self-test system authorized by the certifying authority. CERTIFIED_3 = 3 //the profiled capability has been successfully tested by a //testing organisation authorized by the certifying authority. }; /** * StatusCode //ToDo: Do we need them? How do we implement them (enum)? * Part: 4 * Chapter: 7.33 * Page: 136 */ /** * TimestampsToReturn * Part: 4 * Chapter: 7.34 * Page: 140 */ enum BED_TimestampsToReturn { SOURCE_0 = 1, //Return the source timestamp. //If used in HistoryRead the source timestamp is used to determine which historical data values are returned. SERVER_1 = 1, //Return the Server timestamp. //If used in HistoryRead the Server timestamp is used to determine which historical data values are returned. BOTH_2 = 2, //Return both the source and Server timestamps. //If used in HistoryRead the source timestamp is used to determine which historical data values are returned. NEITHER_3 = 3 //Return neither timestamp. //This is the default value for MonitoredItems if a Variable value is not being accessed. //For HistoryRead this is not a valid setting. }; /** * UserIdentityToken Encrypted Token Format * Part: 4 * Chapter: 7.35.1 * Page: 140 */ struct BED_UserIdentityTokenEncryptedTokenFormat { UA_Byte length[4]; // Byte tokenData[]; // Byte serverNonce[]; }; /** * AnonymousIdentityToken * Part: 4 * Chapter: 7.35.2 * Page: 141 */ struct BED_AnonymousIdentityToken { UA_String policyId; }; /** * UserNameIdentityToken * Part: 4 * Chapter: 7.35.3 * Page: 141 */ struct BED_UserNameIdentityToken { UA_String policyId; UA_String userName; UA_ByteString password; UA_String encryptionAlogrithm; }; /** * X509IdentityTokens * Part: 4 * Chapter: 7.35.4 * Page: 141 */ struct BED_X509IdentityTokens { UA_String policyId; UA_ByteString certificateData; }; /** * IssuedIdentityToken * Part: 4 * Chapter: 7.35.5 * Page: 142 */ struct BED_IssuedIdentityToken { UA_String policyId; UA_ByteString tokenData; UA_String encryptionAlgorithm; }; enum BED_UserIdentityTokenType { ANONYMOUS_0 = 0, USERNAME_1 = 1, CERTIFICATE_2 = 2, ISSUEDTOKEN_3 = 3 }; /** * UserTokenPolicy * Part: 4 * Chapter: 7.36 * Page: 142 */ struct BED_UserTokenPolicy { UA_String policyId; enum BED_UserIdentityTokenType tokenType; UA_String issuedTokenType; UA_String issuerEndpointUrl; UA_String securityPolicyUri; }; /** * ViewDescription * Part: 4 * Chapter: 7.37 * Page: 143 */ struct BED_ViewDescription { // struct UA_NodeId viewId; UA_DateTime timestamp; UA_UInt32 viewVersion; }; #endif /* OPCUA_ADVANCEDDATATYPES_H_ */