Azure IoT / serializer

Dependents:   sht15_remote_monitoring f767zi_mqtt remote_monitoring simplesample_amqp ... more

Committer:
AzureIoTClient
Date:
Thu Oct 22 18:33:28 2015 -0700
Revision:
4:233dd7616d73
Parent:
0:1f9b2707ec7d
Child:
5:c08e3ffc68e4
v1.0.0-preview.4

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AzureIoTClient 0:1f9b2707ec7d 1 // Copyright (c) Microsoft. All rights reserved.
AzureIoTClient 0:1f9b2707ec7d 2 // Licensed under the MIT license. See LICENSE file in the project root for full license information.
AzureIoTClient 0:1f9b2707ec7d 3
AzureIoTClient 0:1f9b2707ec7d 4 #ifndef AGENT_DATA_TYPES_H
AzureIoTClient 0:1f9b2707ec7d 5 #define AGENT_DATA_TYPES_H
AzureIoTClient 0:1f9b2707ec7d 6
AzureIoTClient 0:1f9b2707ec7d 7 #ifdef __cplusplus
AzureIoTClient 0:1f9b2707ec7d 8 #include <cstdint>
AzureIoTClient 0:1f9b2707ec7d 9 #include <ctime>
AzureIoTClient 0:1f9b2707ec7d 10 #include <cstddef>
AzureIoTClient 0:1f9b2707ec7d 11 #else
AzureIoTClient 0:1f9b2707ec7d 12 #if ((defined _WIN32_WCE) && _WIN32_WCE==0x0600)
AzureIoTClient 0:1f9b2707ec7d 13 #include "stdint_ce6.h"
AzureIoTClient 0:1f9b2707ec7d 14 #else
AzureIoTClient 0:1f9b2707ec7d 15 #include <stdint.h>
AzureIoTClient 0:1f9b2707ec7d 16 #endif
AzureIoTClient 0:1f9b2707ec7d 17 #include <stddef.h>
AzureIoTClient 0:1f9b2707ec7d 18 #endif
AzureIoTClient 0:1f9b2707ec7d 19
AzureIoTClient 0:1f9b2707ec7d 20 #include "agenttime.h"
AzureIoTClient 0:1f9b2707ec7d 21 #include "macro_utils.h"
AzureIoTClient 0:1f9b2707ec7d 22 #include "strings.h"
AzureIoTClient 0:1f9b2707ec7d 23
AzureIoTClient 0:1f9b2707ec7d 24 /*Codes_SRS_AGENT_TYPE_SYSTEM_99_001:[ AGENT_TYPE_SYSTEM shall have the following interface]*/
AzureIoTClient 0:1f9b2707ec7d 25
AzureIoTClient 0:1f9b2707ec7d 26 #ifdef __cplusplus
AzureIoTClient 0:1f9b2707ec7d 27 extern "C"
AzureIoTClient 0:1f9b2707ec7d 28 {
AzureIoTClient 0:1f9b2707ec7d 29 #endif
AzureIoTClient 0:1f9b2707ec7d 30
AzureIoTClient 0:1f9b2707ec7d 31 /*the following forward declarations the closest implementation to "interface" in OOP*/
AzureIoTClient 0:1f9b2707ec7d 32 struct AGENT_DATA_TYPE_TAG;
AzureIoTClient 0:1f9b2707ec7d 33 typedef struct AGENT_DATA_TYPE_TAG AGENT_DATA_TYPE;
AzureIoTClient 0:1f9b2707ec7d 34
AzureIoTClient 0:1f9b2707ec7d 35 /*this file contains the definitions of the data types of EDM*/
AzureIoTClient 0:1f9b2707ec7d 36 /*the types are taken from */
AzureIoTClient 0:1f9b2707ec7d 37 /*http://docs.oasis-open.org/odata/odata/v4.0/cos01/part3-csdl/odata-v4.0-cos01-part3-csdl.html*/
AzureIoTClient 0:1f9b2707ec7d 38 /*chapter 4.4 - "Primitive Data Types" */
AzureIoTClient 0:1f9b2707ec7d 39
AzureIoTClient 0:1f9b2707ec7d 40 /*the C implementation of these types follows:*/
AzureIoTClient 0:1f9b2707ec7d 41 /*even the simpler types are encapsulated in structs to purposely avoid compiler promotions/casts etc*/
AzureIoTClient 0:1f9b2707ec7d 42
AzureIoTClient 0:1f9b2707ec7d 43 /*Binary data.*/
AzureIoTClient 0:1f9b2707ec7d 44 typedef struct EDM_BINARY_TAG
AzureIoTClient 0:1f9b2707ec7d 45 {
AzureIoTClient 0:1f9b2707ec7d 46 size_t size;
AzureIoTClient 0:1f9b2707ec7d 47 unsigned char* data;
AzureIoTClient 0:1f9b2707ec7d 48 }EDM_BINARY;
AzureIoTClient 0:1f9b2707ec7d 49
AzureIoTClient 0:1f9b2707ec7d 50 #define EDM_BOOLEANS_VALUES \
AzureIoTClient 0:1f9b2707ec7d 51 EDM_TRUE, \
AzureIoTClient 0:1f9b2707ec7d 52 EDM_FALSE
AzureIoTClient 0:1f9b2707ec7d 53
AzureIoTClient 0:1f9b2707ec7d 54 DEFINE_ENUM(EDM_BOOLEANS, EDM_BOOLEANS_VALUES);
AzureIoTClient 0:1f9b2707ec7d 55
AzureIoTClient 0:1f9b2707ec7d 56 /*Binary-valued logic.*/
AzureIoTClient 0:1f9b2707ec7d 57 typedef struct EDM_BOOLEAN_TAG
AzureIoTClient 0:1f9b2707ec7d 58 {
AzureIoTClient 0:1f9b2707ec7d 59 EDM_BOOLEANS value;
AzureIoTClient 0:1f9b2707ec7d 60 }EDM_BOOLEAN;
AzureIoTClient 0:1f9b2707ec7d 61
AzureIoTClient 0:1f9b2707ec7d 62 /*Unsigned 8-bit integer*/
AzureIoTClient 0:1f9b2707ec7d 63 typedef struct EDM_BYTE_TAG
AzureIoTClient 0:1f9b2707ec7d 64 {
AzureIoTClient 0:1f9b2707ec7d 65 uint8_t value;
AzureIoTClient 0:1f9b2707ec7d 66 } EDM_BYTE;
AzureIoTClient 0:1f9b2707ec7d 67
AzureIoTClient 0:1f9b2707ec7d 68 /*Date without a time-zone offset*/
AzureIoTClient 0:1f9b2707ec7d 69 /*The edm:Date expression evaluates to a primitive date value. A date expression MUST be assigned a
AzureIoTClient 0:1f9b2707ec7d 70 value of type xs:date, see [XML-Schema-2], section 3.3.9. The value MUST also conform to rule
AzureIoTClient 0:1f9b2707ec7d 71 dateValue in [OData-ABNF], i.e. it MUST NOT contain a time-zone offset.*/
AzureIoTClient 0:1f9b2707ec7d 72 /*section 3.3.9: date uses the date/timeSevenPropertyModel, with hour, minute, and second required to be absent.*/
AzureIoTClient 0:1f9b2707ec7d 73 /*dateValue in OData-ABNF is : dateValue = year "-" month "-" day */
AzureIoTClient 0:1f9b2707ec7d 74 /*year = [ "-" ] ( "0" 3DIGIT / oneToNine 3*DIGIT )
AzureIoTClient 0:1f9b2707ec7d 75 month = "0" oneToNine
AzureIoTClient 0:1f9b2707ec7d 76 / "1" ( "0" / "1" / "2" )
AzureIoTClient 0:1f9b2707ec7d 77 day = "0" oneToNine
AzureIoTClient 0:1f9b2707ec7d 78 / ( "1" / "2" ) DIGIT
AzureIoTClient 0:1f9b2707ec7d 79 / "3" ( "0" / "1" )*/
AzureIoTClient 0:1f9b2707ec7d 80 typedef struct EDM_DATE_TAG
AzureIoTClient 0:1f9b2707ec7d 81 {
AzureIoTClient 0:1f9b2707ec7d 82 int16_t year; /*can represent all values for a year*/ /*they can be between -9999 and 9999*/
AzureIoTClient 0:1f9b2707ec7d 83 uint8_t month;
AzureIoTClient 0:1f9b2707ec7d 84 uint8_t day;
AzureIoTClient 0:1f9b2707ec7d 85 } EDM_DATE;
AzureIoTClient 0:1f9b2707ec7d 86
AzureIoTClient 0:1f9b2707ec7d 87
AzureIoTClient 0:1f9b2707ec7d 88 /*The edm:DateTimeOffset expression evaluates to a primitive date/time value with a time-zone offset.
AzureIoTClient 0:1f9b2707ec7d 89 A date/time expression MUST be assigned a value of type xs:dateTimeStamp, see [XML-Schema-2],
AzureIoTClient 0:1f9b2707ec7d 90 section 3.4.28. The value MUST also conform to rule dateTimeOffsetValue in [OData-ABNF], i.e. it
AzureIoTClient 0:1f9b2707ec7d 91 MUST NOT contain an end-of-day fragment (24:00:00).*/
AzureIoTClient 0:1f9b2707ec7d 92 /*section 3.4.28 says : dateTimeStampLexicalRep ::= yearFrag '-' monthFrag '-' dayFrag 'T' ((hourFrag ':' minuteFrag ':' secondFrag) | endOfDayFrag) timezoneFrag?*/
AzureIoTClient 0:1f9b2707ec7d 93 /*[OData-ABNF] says: dateTimeOffsetValue = year "-" month "-" day "T" hour ":" minute [ ":" second [ "." fractionalSeconds ] ] ( "Z" / sign hour ":" minute )*/
AzureIoTClient 0:1f9b2707ec7d 94 /*fractionalSeconds = 1*12DIGIT, FYI*/
AzureIoTClient 0:1f9b2707ec7d 95 typedef struct EDM_DATE_TIME_OFFSET_TAG
AzureIoTClient 0:1f9b2707ec7d 96 {
AzureIoTClient 0:1f9b2707ec7d 97 struct tm dateTime;
AzureIoTClient 0:1f9b2707ec7d 98 uint8_t hasFractionalSecond;
AzureIoTClient 0:1f9b2707ec7d 99 uint64_t fractionalSecond; /*because UINT32 only has 10 digits*/
AzureIoTClient 0:1f9b2707ec7d 100 uint8_t hasTimeZone;
AzureIoTClient 0:1f9b2707ec7d 101 int8_t timeZoneHour;
AzureIoTClient 0:1f9b2707ec7d 102 uint8_t timeZoneMinute;
AzureIoTClient 0:1f9b2707ec7d 103 }EDM_DATE_TIME_OFFSET;
AzureIoTClient 0:1f9b2707ec7d 104
AzureIoTClient 0:1f9b2707ec7d 105 /*Edm.Guid*/
AzureIoTClient 0:1f9b2707ec7d 106 /*16-byte (128-bit) unique identifier*/
AzureIoTClient 0:1f9b2707ec7d 107 /*The edm:Guid expression evaluates to a primitive 32-character string value. A guid expression MUST be
AzureIoTClient 0:1f9b2707ec7d 108 assigned a value conforming to the rule guidValue in [OData-ABNF].*/
AzureIoTClient 0:1f9b2707ec7d 109 /*guidValue is 8HEXDIG "-" 4HEXDIG "-" 4HEXDIG "-" 4HEXDIG "-" 12HEXDIG*/
AzureIoTClient 0:1f9b2707ec7d 110 typedef struct EDM_GUID_TAG
AzureIoTClient 0:1f9b2707ec7d 111 {
AzureIoTClient 0:1f9b2707ec7d 112 uint8_t GUID[16];
AzureIoTClient 0:1f9b2707ec7d 113 }EDM_GUID;
AzureIoTClient 0:1f9b2707ec7d 114
AzureIoTClient 0:1f9b2707ec7d 115
AzureIoTClient 0:1f9b2707ec7d 116 /*Edm.Decimal*/
AzureIoTClient 0:1f9b2707ec7d 117 /*The edm:Decimal expression evaluates to a primitive decimal value. A decimal expression MUST be
AzureIoTClient 0:1f9b2707ec7d 118 assigned a value conforming to the rule decimalValue in [OData-ABNF].*/
AzureIoTClient 0:1f9b2707ec7d 119 /*[OData-ABNF] says: decimalValue = [SIGN] 1*DIGIT ["." 1*DIGIT] */
AzureIoTClient 0:1f9b2707ec7d 120 /* this is binary coded decimal style then*/
AzureIoTClient 0:1f9b2707ec7d 121 typedef struct EDM_DECIMAL_TAG
AzureIoTClient 0:1f9b2707ec7d 122 {
AzureIoTClient 0:1f9b2707ec7d 123 STRING_HANDLE value;
AzureIoTClient 0:1f9b2707ec7d 124 } EDM_DECIMAL;
AzureIoTClient 0:1f9b2707ec7d 125
AzureIoTClient 0:1f9b2707ec7d 126 /*Edm.Double*/
AzureIoTClient 0:1f9b2707ec7d 127 /*IEEE 754 binary64 floating-point number (15-17 decimal digits)*/
AzureIoTClient 0:1f9b2707ec7d 128
AzureIoTClient 0:1f9b2707ec7d 129 typedef struct EDM_DOUBLE_TAG
AzureIoTClient 0:1f9b2707ec7d 130 {
AzureIoTClient 0:1f9b2707ec7d 131 double value;
AzureIoTClient 0:1f9b2707ec7d 132 } EDM_DOUBLE;
AzureIoTClient 0:1f9b2707ec7d 133
AzureIoTClient 0:1f9b2707ec7d 134
AzureIoTClient 0:1f9b2707ec7d 135 /*Edm.Duration*/
AzureIoTClient 0:1f9b2707ec7d 136 /*Signed duration in days, hours, minutes, and (sub)seconds*/
AzureIoTClient 0:1f9b2707ec7d 137 /*The edm:Duration expression evaluates to a primitive duration value. A duration expression MUST be
AzureIoTClient 0:1f9b2707ec7d 138 assigned a value of type xs:dayTimeDuration, see [XML-Schema-2], section 3.4.27.*/
AzureIoTClient 0:1f9b2707ec7d 139 /*XML-Schema section 3.4.27 says: "[...]leaving only those with day, hour, minutes, and/or seconds fields." */
AzureIoTClient 0:1f9b2707ec7d 140 /*day is "unsignedNoDecimalPtNumeral" and that can have as many digits... ?*/
AzureIoTClient 0:1f9b2707ec7d 141 typedef struct EDM_DURATION_TAG
AzureIoTClient 0:1f9b2707ec7d 142 {
AzureIoTClient 0:1f9b2707ec7d 143 size_t nDigits;
AzureIoTClient 0:1f9b2707ec7d 144 char* digits;
AzureIoTClient 0:1f9b2707ec7d 145 }
AzureIoTClient 0:1f9b2707ec7d 146 EDM_DURATION;
AzureIoTClient 0:1f9b2707ec7d 147
AzureIoTClient 0:1f9b2707ec7d 148
AzureIoTClient 0:1f9b2707ec7d 149 /*Edm.Int16*/
AzureIoTClient 0:1f9b2707ec7d 150 /*Signed 16-bit integer*/
AzureIoTClient 0:1f9b2707ec7d 151 /*[OData=ABNF] says about Int16: numbers in the range from -32768 to 32767 */
AzureIoTClient 0:1f9b2707ec7d 152 /*this is not C compliant, because C89 has for (read:guarantees) short SHRT_MIN -32767... (notice how it misses -32768)*/
AzureIoTClient 0:1f9b2707ec7d 153 /*C99 has the same*/
AzureIoTClient 0:1f9b2707ec7d 154 /*C11 has the same*/
AzureIoTClient 0:1f9b2707ec7d 155 /*platform types has to check for -32768 compliance*/
AzureIoTClient 0:1f9b2707ec7d 156 typedef struct EDM_INT16_TAG
AzureIoTClient 0:1f9b2707ec7d 157 {
AzureIoTClient 0:1f9b2707ec7d 158 int16_t value;
AzureIoTClient 0:1f9b2707ec7d 159 } EDM_INT16;
AzureIoTClient 0:1f9b2707ec7d 160
AzureIoTClient 0:1f9b2707ec7d 161 /*Edm.Int32*/
AzureIoTClient 0:1f9b2707ec7d 162 /*Signed 32-bit integer*/
AzureIoTClient 0:1f9b2707ec7d 163 /*OData-ABNF has for int32Value = [ sign ] 1*10DIGIT ; numbers in the range from -2147483648 to 2147483647*/
AzureIoTClient 0:1f9b2707ec7d 164 /*same issue as for EDM_16*/
AzureIoTClient 0:1f9b2707ec7d 165 /*platform types has to check compliance based on LONG_MIN #define*/
AzureIoTClient 0:1f9b2707ec7d 166 typedef struct EDM_INT32_TAG
AzureIoTClient 0:1f9b2707ec7d 167 {
AzureIoTClient 0:1f9b2707ec7d 168 int32_t value;
AzureIoTClient 0:1f9b2707ec7d 169 } EDM_INT32;
AzureIoTClient 0:1f9b2707ec7d 170
AzureIoTClient 0:1f9b2707ec7d 171 /*Edm.Int64*/
AzureIoTClient 0:1f9b2707ec7d 172 /*Signed 64-bit integer*/
AzureIoTClient 0:1f9b2707ec7d 173 /*OData=ABNF: int64Value = [ sign ] 1*19DIGIT ; numbers in the range from -9223372036854775808 to 9223372036854775807*/
AzureIoTClient 0:1f9b2707ec7d 174 /*C89 has no mention of anything on 64bits*/
AzureIoTClient 0:1f9b2707ec7d 175 /*C99 mention LLONG_MIN as -9223372036854775807 and LLONG_MAX as 9223372036854775807*/
AzureIoTClient 0:1f9b2707ec7d 176 /*C11 is the same as C99*/
AzureIoTClient 0:1f9b2707ec7d 177 typedef struct EDM_INT64_TAG
AzureIoTClient 0:1f9b2707ec7d 178 {
AzureIoTClient 0:1f9b2707ec7d 179 int64_t value; /*SINT64 might be a single type or s truct provided by platformTypes, depending on C compiler support*/
AzureIoTClient 0:1f9b2707ec7d 180 } EDM_INT64;
AzureIoTClient 0:1f9b2707ec7d 181
AzureIoTClient 0:1f9b2707ec7d 182 /*Edm.SByte*/
AzureIoTClient 0:1f9b2707ec7d 183 /*Signed 8-bit integer*/
AzureIoTClient 0:1f9b2707ec7d 184 /*OData=ABNF: sbyteValue = [ sign ] 1*3DIGIT ; numbers in the range from -128 to 127*/
AzureIoTClient 0:1f9b2707ec7d 185 /*C89, C99, C11 all have SCHAR_MIN, SCHAR_MAX between -127 and 127 (guaranteed)*/
AzureIoTClient 0:1f9b2707ec7d 186 /*so platformTypes.h has to check that -128 is attainable*/
AzureIoTClient 0:1f9b2707ec7d 187 typedef struct EDM_SBYTE_TAG
AzureIoTClient 0:1f9b2707ec7d 188 {
AzureIoTClient 0:1f9b2707ec7d 189 int8_t value;
AzureIoTClient 0:1f9b2707ec7d 190 } EDM_SBYTE;
AzureIoTClient 0:1f9b2707ec7d 191
AzureIoTClient 0:1f9b2707ec7d 192 /*Edm.Single*/
AzureIoTClient 0:1f9b2707ec7d 193 /*IEEE 754 binary32 floating-point number (6-9 decimal digits)*/
AzureIoTClient 0:1f9b2707ec7d 194 /*with the same "fears" as for Edm.Double*/
AzureIoTClient 0:1f9b2707ec7d 195 typedef struct EDM_SINGLE_TAG
AzureIoTClient 0:1f9b2707ec7d 196 {
AzureIoTClient 0:1f9b2707ec7d 197 float value;
AzureIoTClient 0:1f9b2707ec7d 198 } EDM_SINGLE;
AzureIoTClient 0:1f9b2707ec7d 199
AzureIoTClient 0:1f9b2707ec7d 200 /*not clear what this is
AzureIoTClient 0:1f9b2707ec7d 201 typedef EDM_STREAM_TAG
AzureIoTClient 0:1f9b2707ec7d 202 {
AzureIoTClient 0:1f9b2707ec7d 203
AzureIoTClient 0:1f9b2707ec7d 204 }EDM_STREAM;
AzureIoTClient 0:1f9b2707ec7d 205 */
AzureIoTClient 0:1f9b2707ec7d 206
AzureIoTClient 0:1f9b2707ec7d 207 /*Edm.String*/
AzureIoTClient 0:1f9b2707ec7d 208 /*Sequence of UTF-8 characters*/
AzureIoTClient 0:1f9b2707ec7d 209 typedef struct EDM_STRING_TAG
AzureIoTClient 0:1f9b2707ec7d 210 {
AzureIoTClient 0:1f9b2707ec7d 211 size_t length; /*number of unsigned char* in the string*/
AzureIoTClient 0:1f9b2707ec7d 212 char* chars;
AzureIoTClient 0:1f9b2707ec7d 213 } EDM_STRING;
AzureIoTClient 0:1f9b2707ec7d 214
AzureIoTClient 0:1f9b2707ec7d 215 /*Edm.TimeOfDay*/
AzureIoTClient 0:1f9b2707ec7d 216 /*Clock time 00:00-23:59:59.999999999999*/
AzureIoTClient 0:1f9b2707ec7d 217 /*The edm:TimeOfDay expression evaluates to a primitive time value. A time-of-day expression MUST be
AzureIoTClient 0:1f9b2707ec7d 218 assigned a value conforming to the rule timeOfDayValue in [OData-ABNF].*/
AzureIoTClient 0:1f9b2707ec7d 219 /*timeOfDayValue = hour ":" minute [ ":" second [ "." fractionalSeconds ] ]*/
AzureIoTClient 0:1f9b2707ec7d 220 typedef struct EDM_TIME_OF_DAY_TAG
AzureIoTClient 0:1f9b2707ec7d 221 {
AzureIoTClient 0:1f9b2707ec7d 222 uint8_t hour;
AzureIoTClient 0:1f9b2707ec7d 223 uint8_t minute;
AzureIoTClient 0:1f9b2707ec7d 224 uint8_t second;
AzureIoTClient 0:1f9b2707ec7d 225 uint64_t fractionalSecond;
AzureIoTClient 0:1f9b2707ec7d 226 }EDM_TIME_OF_DAY;
AzureIoTClient 0:1f9b2707ec7d 227
AzureIoTClient 0:1f9b2707ec7d 228 /*positionLiteral = doubleValue SP doubleValue ; longitude, then latitude*/
AzureIoTClient 0:1f9b2707ec7d 229 typedef struct EDM_POSITION_LITERAL_TAG
AzureIoTClient 0:1f9b2707ec7d 230 {
AzureIoTClient 0:1f9b2707ec7d 231 double longitude;
AzureIoTClient 0:1f9b2707ec7d 232 double latitude;
AzureIoTClient 0:1f9b2707ec7d 233 }EDM_POSITION_LITERAL;
AzureIoTClient 0:1f9b2707ec7d 234
AzureIoTClient 0:1f9b2707ec7d 235
AzureIoTClient 0:1f9b2707ec7d 236 /*sridLiteral = "SRID" EQ 1*5DIGIT SEMI*/
AzureIoTClient 0:1f9b2707ec7d 237 typedef struct EDM_SRID_LITERAL_TAG
AzureIoTClient 0:1f9b2707ec7d 238 {
AzureIoTClient 0:1f9b2707ec7d 239 uint16_t digits;
AzureIoTClient 0:1f9b2707ec7d 240 } EDM_SRID_LITERAL;
AzureIoTClient 0:1f9b2707ec7d 241
AzureIoTClient 0:1f9b2707ec7d 242 /*lineStringData = OPEN positionLiteral 1*( COMMA positionLiteral ) CLOSE*/
AzureIoTClient 0:1f9b2707ec7d 243 typedef struct EDM_LINE_STRING_DATA_TAG
AzureIoTClient 0:1f9b2707ec7d 244 {
AzureIoTClient 0:1f9b2707ec7d 245 size_t nPositionLiterals;
AzureIoTClient 0:1f9b2707ec7d 246 EDM_POSITION_LITERAL *positionLiterals;
AzureIoTClient 0:1f9b2707ec7d 247 }EDM_LINE_STRING_DATA;
AzureIoTClient 0:1f9b2707ec7d 248
AzureIoTClient 0:1f9b2707ec7d 249 /*pointData = OPEN positionLiteral CLOSE*/
AzureIoTClient 0:1f9b2707ec7d 250 typedef struct EDM_POINT_DATA_TAG
AzureIoTClient 0:1f9b2707ec7d 251 {
AzureIoTClient 0:1f9b2707ec7d 252 EDM_POSITION_LITERAL positionLiteral;
AzureIoTClient 0:1f9b2707ec7d 253 }EDM_POINT_DATA;
AzureIoTClient 0:1f9b2707ec7d 254
AzureIoTClient 0:1f9b2707ec7d 255 /*ringLiteral = OPEN positionLiteral *( COMMA positionLiteral ) CLOSE*/
AzureIoTClient 0:1f9b2707ec7d 256 typedef struct EDM_RING_LITERAL_TAG
AzureIoTClient 0:1f9b2707ec7d 257 {
AzureIoTClient 0:1f9b2707ec7d 258 size_t nPositionLiterals;
AzureIoTClient 0:1f9b2707ec7d 259 EDM_POSITION_LITERAL *positionLiterals;
AzureIoTClient 0:1f9b2707ec7d 260 }EDM_RING_LITERAL;
AzureIoTClient 0:1f9b2707ec7d 261
AzureIoTClient 0:1f9b2707ec7d 262 /*pointLiteral ="Point" pointData*/
AzureIoTClient 0:1f9b2707ec7d 263 typedef struct EDM_POINT_LITERAL_TAG
AzureIoTClient 0:1f9b2707ec7d 264 {
AzureIoTClient 0:1f9b2707ec7d 265 EDM_POINT_DATA pointData;
AzureIoTClient 0:1f9b2707ec7d 266 } EDM_POINT_LITERAL;
AzureIoTClient 0:1f9b2707ec7d 267
AzureIoTClient 0:1f9b2707ec7d 268 /*polygonData = OPEN ringLiteral *( COMMA ringLiteral ) CLOSE*/
AzureIoTClient 0:1f9b2707ec7d 269 typedef struct EDM_POLYGON_DATA_TAG
AzureIoTClient 0:1f9b2707ec7d 270 {
AzureIoTClient 0:1f9b2707ec7d 271 size_t nRingLiterals;
AzureIoTClient 0:1f9b2707ec7d 272 EDM_RING_LITERAL *ringLiterals;
AzureIoTClient 0:1f9b2707ec7d 273 }EDM_POLYGON_DATA;
AzureIoTClient 0:1f9b2707ec7d 274
AzureIoTClient 0:1f9b2707ec7d 275 /*polygonLiteral = "Polygon" polygonData*/
AzureIoTClient 0:1f9b2707ec7d 276 typedef struct EDM_POLYGON_LITERAL_TAG
AzureIoTClient 0:1f9b2707ec7d 277 {
AzureIoTClient 0:1f9b2707ec7d 278 EDM_POLYGON_DATA polygonData;
AzureIoTClient 0:1f9b2707ec7d 279 }EDM_POLYGON_LITERAL;
AzureIoTClient 0:1f9b2707ec7d 280
AzureIoTClient 0:1f9b2707ec7d 281 /*fullPolygonLiteral = sridLiteral polygonLiteral*/
AzureIoTClient 0:1f9b2707ec7d 282 typedef struct EDM_FULL_POLYGON_LITERAL_TAG
AzureIoTClient 0:1f9b2707ec7d 283 {
AzureIoTClient 0:1f9b2707ec7d 284 EDM_SRID_LITERAL srid;
AzureIoTClient 0:1f9b2707ec7d 285 EDM_POLYGON_LITERAL polygonLiteral;
AzureIoTClient 0:1f9b2707ec7d 286 }EDM_FULL_POLYGON_LITERAL;
AzureIoTClient 0:1f9b2707ec7d 287
AzureIoTClient 0:1f9b2707ec7d 288 /*fullPointLiteral = sridLiteral pointLiteral*/
AzureIoTClient 0:1f9b2707ec7d 289 typedef struct EDM_FULL_POINT_LITERAL_TAG
AzureIoTClient 0:1f9b2707ec7d 290 {
AzureIoTClient 0:1f9b2707ec7d 291 EDM_SRID_LITERAL srid;
AzureIoTClient 0:1f9b2707ec7d 292 EDM_POINT_LITERAL pointLiteral;
AzureIoTClient 0:1f9b2707ec7d 293 } EDM_FULL_POINT_LITERAL;
AzureIoTClient 0:1f9b2707ec7d 294
AzureIoTClient 0:1f9b2707ec7d 295 /*geographyPoint = geographyPrefix SQUOTE fullPointLiteral SQUOTE*/
AzureIoTClient 0:1f9b2707ec7d 296 typedef struct EDM_GEOGRAPHY_POINT_TAG
AzureIoTClient 0:1f9b2707ec7d 297 {
AzureIoTClient 0:1f9b2707ec7d 298 EDM_FULL_POINT_LITERAL fullPointLiteral;
AzureIoTClient 0:1f9b2707ec7d 299 }EDM_GEOGRAPHY_POINT;
AzureIoTClient 0:1f9b2707ec7d 300
AzureIoTClient 0:1f9b2707ec7d 301 /*multiPolygonLiteral = "MultiPolygon(" [ polygonData *( COMMA polygonData ) ] CLOSE*/
AzureIoTClient 0:1f9b2707ec7d 302 typedef struct EDM_MULTI_POLYGON_LITERAL_TAG
AzureIoTClient 0:1f9b2707ec7d 303 {
AzureIoTClient 0:1f9b2707ec7d 304 size_t nPolygonDatas;
AzureIoTClient 0:1f9b2707ec7d 305 EDM_POLYGON_DATA * polygonDatas;
AzureIoTClient 0:1f9b2707ec7d 306 }EDM_MULTI_POLYGON_LITERAL;
AzureIoTClient 0:1f9b2707ec7d 307
AzureIoTClient 0:1f9b2707ec7d 308 /*fullMultiPolygonLiteral = sridLiteral multiPolygonLiteral*/
AzureIoTClient 0:1f9b2707ec7d 309 typedef struct EDM_FULL_MULTI_POLYGON_LITERAL_TAG
AzureIoTClient 0:1f9b2707ec7d 310 {
AzureIoTClient 0:1f9b2707ec7d 311 EDM_SRID_LITERAL srid;
AzureIoTClient 0:1f9b2707ec7d 312 EDM_MULTI_POLYGON_LITERAL multiPolygonLiteral;
AzureIoTClient 0:1f9b2707ec7d 313 }EDM_FULL_MULTI_POLYGON_LITERAL;
AzureIoTClient 0:1f9b2707ec7d 314
AzureIoTClient 0:1f9b2707ec7d 315 /*multiPointLiteral = "MultiPoint(" [ pointData *( COMMA pointData ) ] CLOSE*/
AzureIoTClient 0:1f9b2707ec7d 316 typedef struct EDM_MULTI_POINT_LITERAL_TAG
AzureIoTClient 0:1f9b2707ec7d 317 {
AzureIoTClient 0:1f9b2707ec7d 318 size_t nPointDatas;
AzureIoTClient 0:1f9b2707ec7d 319 EDM_POINT_DATA *pointDatas;
AzureIoTClient 0:1f9b2707ec7d 320 }EDM_MULTI_POINT_LITERAL;
AzureIoTClient 0:1f9b2707ec7d 321
AzureIoTClient 0:1f9b2707ec7d 322 /*fullMultiPointLiteral = sridLiteral multiPointLiteral*/
AzureIoTClient 0:1f9b2707ec7d 323 typedef struct EDM_FULL_MULTI_POINT_LITERAL_TAG
AzureIoTClient 0:1f9b2707ec7d 324 {
AzureIoTClient 0:1f9b2707ec7d 325 EDM_SRID_LITERAL srid;
AzureIoTClient 0:1f9b2707ec7d 326 EDM_MULTI_POINT_LITERAL multiPointLiteral;
AzureIoTClient 0:1f9b2707ec7d 327 }EDM_FULL_MULTI_POINT_LITERAL;
AzureIoTClient 0:1f9b2707ec7d 328
AzureIoTClient 0:1f9b2707ec7d 329 /*lineStringLiteral = "LineString" lineStringData*/
AzureIoTClient 0:1f9b2707ec7d 330 typedef struct EDM_LINE_STRING_LITERAL_TAG
AzureIoTClient 0:1f9b2707ec7d 331 {
AzureIoTClient 0:1f9b2707ec7d 332 EDM_LINE_STRING_DATA lineStringData;
AzureIoTClient 0:1f9b2707ec7d 333 }EDM_LINE_STRING_LITERAL;
AzureIoTClient 0:1f9b2707ec7d 334
AzureIoTClient 0:1f9b2707ec7d 335 /*fullLineStringLiteral = sridLiteral lineStringLiteral*/
AzureIoTClient 0:1f9b2707ec7d 336 typedef struct EDM_FULL_LINE_STRING_LITERAL_TAG
AzureIoTClient 0:1f9b2707ec7d 337 {
AzureIoTClient 0:1f9b2707ec7d 338 EDM_SRID_LITERAL srid;
AzureIoTClient 0:1f9b2707ec7d 339 EDM_LINE_STRING_LITERAL lineStringLiteral;
AzureIoTClient 0:1f9b2707ec7d 340 } EDM_FULL_LINE_STRING_LITERAL;
AzureIoTClient 0:1f9b2707ec7d 341
AzureIoTClient 0:1f9b2707ec7d 342 /*multiLineStringLiteral = "MultiLineString(" [ lineStringData *( COMMA lineStringData ) ] CLOSE*/
AzureIoTClient 0:1f9b2707ec7d 343 typedef struct EDM_MULTI_LINE_STRING_LITERAL_TAG
AzureIoTClient 0:1f9b2707ec7d 344 {
AzureIoTClient 0:1f9b2707ec7d 345 size_t nLineStringDatas;
AzureIoTClient 0:1f9b2707ec7d 346 EDM_LINE_STRING_DATA lineStringData;
AzureIoTClient 0:1f9b2707ec7d 347 }EDM_MULTI_LINE_STRING_LITERAL;
AzureIoTClient 0:1f9b2707ec7d 348
AzureIoTClient 0:1f9b2707ec7d 349 /*fullMultiLineStringLiteral = sridLiteral multiLineStringLiteral*/
AzureIoTClient 0:1f9b2707ec7d 350 typedef struct EDM_FULL_MULTI_LINE_STRING_LITERAL_TAG
AzureIoTClient 0:1f9b2707ec7d 351 {
AzureIoTClient 0:1f9b2707ec7d 352 EDM_SRID_LITERAL srid;
AzureIoTClient 0:1f9b2707ec7d 353 EDM_MULTI_LINE_STRING_LITERAL multiLineStringLiteral;
AzureIoTClient 0:1f9b2707ec7d 354 }EDM_FULL_MULTI_LINE_STRING_LITERAL;
AzureIoTClient 0:1f9b2707ec7d 355
AzureIoTClient 0:1f9b2707ec7d 356
AzureIoTClient 0:1f9b2707ec7d 357
AzureIoTClient 0:1f9b2707ec7d 358 /*forward defines*/
AzureIoTClient 0:1f9b2707ec7d 359 struct EDM_GEO_LITERAL_TAG;
AzureIoTClient 0:1f9b2707ec7d 360 typedef struct EDM_GEO_LITERAL_TAG EDM_GEO_LITERAL;
AzureIoTClient 0:1f9b2707ec7d 361
AzureIoTClient 0:1f9b2707ec7d 362 /*collectionLiteral = "Collection(" geoLiteral *( COMMA geoLiteral ) CLOSE*/
AzureIoTClient 0:1f9b2707ec7d 363 typedef struct EDM_COLLECTION_LITERAL_TAG
AzureIoTClient 0:1f9b2707ec7d 364 {
AzureIoTClient 0:1f9b2707ec7d 365 size_t nGeoLiterals;
AzureIoTClient 0:1f9b2707ec7d 366 EDM_GEO_LITERAL* geoLiterals;
AzureIoTClient 0:1f9b2707ec7d 367 } EDM_COLLECTION_LITERAL;
AzureIoTClient 0:1f9b2707ec7d 368
AzureIoTClient 0:1f9b2707ec7d 369 /*geoLiteral = collectionLiteral
AzureIoTClient 0:1f9b2707ec7d 370 / lineStringLiteral
AzureIoTClient 0:1f9b2707ec7d 371 / multiPointLiteral
AzureIoTClient 0:1f9b2707ec7d 372 / multiLineStringLiteral
AzureIoTClient 0:1f9b2707ec7d 373 / multiPolygonLiteral
AzureIoTClient 0:1f9b2707ec7d 374 / pointLiteral
AzureIoTClient 0:1f9b2707ec7d 375 / polygonLiteral
AzureIoTClient 0:1f9b2707ec7d 376 */
AzureIoTClient 0:1f9b2707ec7d 377 typedef enum EDM_GEO_LITERAL_TYPE_TAG
AzureIoTClient 0:1f9b2707ec7d 378 {
AzureIoTClient 0:1f9b2707ec7d 379 EDM_COLLECTION_LITERAL_TYPE,
AzureIoTClient 0:1f9b2707ec7d 380 EDM_LINE_STRING_LITERAL_TYPE,
AzureIoTClient 0:1f9b2707ec7d 381 EDM_MULTI_POINT_LITERAL_TYPE,
AzureIoTClient 0:1f9b2707ec7d 382 EDM_MULTI_LINE_STRING_LITERAL_TYPE,
AzureIoTClient 0:1f9b2707ec7d 383 EDM_MULTI_POLIGON_LITERAL_TYPE,
AzureIoTClient 0:1f9b2707ec7d 384 EDM_POINT_LITERAL_TYPE,
AzureIoTClient 0:1f9b2707ec7d 385 EDM_POLYGON_LITERAL_TYPE
AzureIoTClient 0:1f9b2707ec7d 386 }EDM_GEO_LITERAL_TYPE;
AzureIoTClient 0:1f9b2707ec7d 387
AzureIoTClient 0:1f9b2707ec7d 388 struct EDM_GEO_LITERAL_TAG
AzureIoTClient 0:1f9b2707ec7d 389 {
AzureIoTClient 0:1f9b2707ec7d 390 EDM_GEO_LITERAL_TYPE literalType;
AzureIoTClient 0:1f9b2707ec7d 391 union
AzureIoTClient 0:1f9b2707ec7d 392 {
AzureIoTClient 0:1f9b2707ec7d 393 EDM_COLLECTION_LITERAL collectionLiteral;
AzureIoTClient 0:1f9b2707ec7d 394 EDM_LINE_STRING_LITERAL lineStringLiteral;
AzureIoTClient 0:1f9b2707ec7d 395 EDM_MULTI_POINT_LITERAL multiPointLiteral;
AzureIoTClient 0:1f9b2707ec7d 396 EDM_MULTI_LINE_STRING_LITERAL multiLineStringLiteral;
AzureIoTClient 0:1f9b2707ec7d 397 EDM_MULTI_POLYGON_LITERAL multiPolygonLiteral;
AzureIoTClient 0:1f9b2707ec7d 398 EDM_POINT_LITERAL pointLiteral;
AzureIoTClient 0:1f9b2707ec7d 399 EDM_POLYGON_LITERAL polygonLiteral;
AzureIoTClient 0:1f9b2707ec7d 400 } u;
AzureIoTClient 0:1f9b2707ec7d 401 };
AzureIoTClient 0:1f9b2707ec7d 402
AzureIoTClient 0:1f9b2707ec7d 403 /*fullCollectionLiteral = sridLiteral collectionLiteral*/
AzureIoTClient 0:1f9b2707ec7d 404 typedef struct EDM_FULL_COLLECTION_LITERAL_TAG
AzureIoTClient 0:1f9b2707ec7d 405 {
AzureIoTClient 0:1f9b2707ec7d 406 EDM_SRID_LITERAL srid;
AzureIoTClient 0:1f9b2707ec7d 407 EDM_COLLECTION_LITERAL collectionLiteral;
AzureIoTClient 0:1f9b2707ec7d 408 }EDM_FULL_COLLECTION_LITERAL;
AzureIoTClient 0:1f9b2707ec7d 409
AzureIoTClient 0:1f9b2707ec7d 410 /*now geography stuff*/
AzureIoTClient 0:1f9b2707ec7d 411
AzureIoTClient 0:1f9b2707ec7d 412 /*geographyCollection = geographyPrefix SQUOTE fullCollectionLiteral SQUOTE*/
AzureIoTClient 0:1f9b2707ec7d 413 typedef struct EDM_GEOGRAPHY_COLLECTION_TAG
AzureIoTClient 0:1f9b2707ec7d 414 {
AzureIoTClient 0:1f9b2707ec7d 415 EDM_FULL_COLLECTION_LITERAL fullCollectionLiteral;
AzureIoTClient 0:1f9b2707ec7d 416 }EDM_GEOGRAPHY_COLLECTION;
AzureIoTClient 0:1f9b2707ec7d 417
AzureIoTClient 0:1f9b2707ec7d 418 /*geographyLineString = geographyPrefix SQUOTE fullLineStringLiteral SQUOTE*/
AzureIoTClient 0:1f9b2707ec7d 419 typedef struct EDM_GEOGRAPHY_LINE_STRING_TAG
AzureIoTClient 0:1f9b2707ec7d 420 {
AzureIoTClient 0:1f9b2707ec7d 421 EDM_FULL_LINE_STRING_LITERAL fullLineStringLiteral;
AzureIoTClient 0:1f9b2707ec7d 422 }EDM_GEOGRAPHY_LINE_STRING;
AzureIoTClient 0:1f9b2707ec7d 423
AzureIoTClient 0:1f9b2707ec7d 424 /*geographyMultiLineString = geographyPrefix SQUOTE fullMultiLineStringLiteral SQUOTE*/
AzureIoTClient 0:1f9b2707ec7d 425 typedef struct EDM_GEOGRAPHY_MULTI_LINE_STRING_TAG
AzureIoTClient 0:1f9b2707ec7d 426 {
AzureIoTClient 0:1f9b2707ec7d 427 EDM_FULL_MULTI_LINE_STRING_LITERAL fullMultiLineStringLiteral;
AzureIoTClient 0:1f9b2707ec7d 428 }EDM_GEOGRAPHY_MULTI_LINE_STRING;
AzureIoTClient 0:1f9b2707ec7d 429
AzureIoTClient 0:1f9b2707ec7d 430 /*geographyMultiPoint = geographyPrefix SQUOTE fullMultiPointLiteral SQUOTE*/
AzureIoTClient 0:1f9b2707ec7d 431 typedef struct EDM_GEOGRAPHY_MULTI_POINT_TAG
AzureIoTClient 0:1f9b2707ec7d 432 {
AzureIoTClient 0:1f9b2707ec7d 433 EDM_FULL_MULTI_POINT_LITERAL fullMultiPointLiteral;
AzureIoTClient 0:1f9b2707ec7d 434 }EDM_GEOGRAPHY_MULTI_POINT;
AzureIoTClient 0:1f9b2707ec7d 435
AzureIoTClient 0:1f9b2707ec7d 436 /*geographyMultiPolygon = geographyPrefix SQUOTE fullMultiPolygonLiteral SQUOTE*/
AzureIoTClient 0:1f9b2707ec7d 437 typedef struct EDM_GEOGRAPHY_MULTI_POLYGON_TAG
AzureIoTClient 0:1f9b2707ec7d 438 {
AzureIoTClient 0:1f9b2707ec7d 439 EDM_FULL_MULTI_POLYGON_LITERAL fullMultiPolygonLiteral;
AzureIoTClient 0:1f9b2707ec7d 440 }EDM_GEOGRAPHY_MULTI_POLYGON;
AzureIoTClient 0:1f9b2707ec7d 441
AzureIoTClient 0:1f9b2707ec7d 442 /*geographyPolygon = geographyPrefix SQUOTE fullPolygonLiteral SQUOTE*/
AzureIoTClient 0:1f9b2707ec7d 443 typedef struct EDM_GEOGRAPHY_POLYGON_TAG
AzureIoTClient 0:1f9b2707ec7d 444 {
AzureIoTClient 0:1f9b2707ec7d 445 EDM_FULL_POLYGON_LITERAL fullPolygonLiteral;
AzureIoTClient 0:1f9b2707ec7d 446 }EDM_GEOGRAPHY_POLYGON;
AzureIoTClient 0:1f9b2707ec7d 447
AzureIoTClient 0:1f9b2707ec7d 448 /*geometryCollection = geometryPrefix SQUOTE fullCollectionLiteral SQUOTE*/
AzureIoTClient 0:1f9b2707ec7d 449 /*forward defines*/
AzureIoTClient 0:1f9b2707ec7d 450
AzureIoTClient 0:1f9b2707ec7d 451
AzureIoTClient 0:1f9b2707ec7d 452 /*geometryPolygon = geometryPrefix SQUOTE fullPolygonLiteral SQUOTE*/
AzureIoTClient 0:1f9b2707ec7d 453 typedef struct EDM_GEOMETRY_POLYGON_TAG
AzureIoTClient 0:1f9b2707ec7d 454 {
AzureIoTClient 0:1f9b2707ec7d 455 EDM_FULL_POLYGON_LITERAL fullPolygonLiteral;
AzureIoTClient 0:1f9b2707ec7d 456 }EDM_GEOMETRY_POLYGON;
AzureIoTClient 0:1f9b2707ec7d 457
AzureIoTClient 0:1f9b2707ec7d 458 /*geometryPoint = geometryPrefix SQUOTE fullPointLiteral SQUOTE*/
AzureIoTClient 0:1f9b2707ec7d 459 typedef struct EDM_GEOMETRY_POINT_TAG
AzureIoTClient 0:1f9b2707ec7d 460 {
AzureIoTClient 0:1f9b2707ec7d 461 EDM_FULL_POINT_LITERAL fullPointLiteral;
AzureIoTClient 0:1f9b2707ec7d 462 }EDM_GEOMETRY_POINT;
AzureIoTClient 0:1f9b2707ec7d 463
AzureIoTClient 0:1f9b2707ec7d 464 /*geometryMultiPolygon = geometryPrefix SQUOTE fullMultiPolygonLiteral SQUOTE*/
AzureIoTClient 0:1f9b2707ec7d 465 typedef struct EDM_GEOMETRY_MULTI_POLYGON_TAG
AzureIoTClient 0:1f9b2707ec7d 466 {
AzureIoTClient 0:1f9b2707ec7d 467 EDM_FULL_MULTI_POLYGON_LITERAL fullMultiPolygonLiteral;
AzureIoTClient 0:1f9b2707ec7d 468 }
AzureIoTClient 0:1f9b2707ec7d 469 EDM_GEOMETRY_MULTI_POLYGON;
AzureIoTClient 0:1f9b2707ec7d 470
AzureIoTClient 0:1f9b2707ec7d 471 /*geometryMultiPoint = geometryPrefix SQUOTE fullMultiPointLiteral SQUOTE*/
AzureIoTClient 0:1f9b2707ec7d 472 typedef struct EDM_GEOMETRY_MULTI_POINT_TAG
AzureIoTClient 0:1f9b2707ec7d 473 {
AzureIoTClient 0:1f9b2707ec7d 474 EDM_FULL_MULTI_POINT_LITERAL fullMultiPointLiteral;
AzureIoTClient 0:1f9b2707ec7d 475 }EDM_GEOMETRY_MULTI_POINT;
AzureIoTClient 0:1f9b2707ec7d 476
AzureIoTClient 0:1f9b2707ec7d 477 /*geometryMultiLineString = geometryPrefix SQUOTE fullMultiLineStringLiteral SQUOTE*/
AzureIoTClient 0:1f9b2707ec7d 478 typedef struct EDM_GEOMETRY_MULTI_LINE_STRING_TAG
AzureIoTClient 0:1f9b2707ec7d 479 {
AzureIoTClient 0:1f9b2707ec7d 480 EDM_FULL_MULTI_LINE_STRING_LITERAL fullMultiLineStringLiteral;
AzureIoTClient 0:1f9b2707ec7d 481 }EDM_GEOMETRY_MULTI_LINE_STRING;
AzureIoTClient 0:1f9b2707ec7d 482
AzureIoTClient 0:1f9b2707ec7d 483 /*geometryLineString = geometryPrefix SQUOTE fullLineStringLiteral SQUOTE*/
AzureIoTClient 0:1f9b2707ec7d 484 typedef struct EDM_GEOMETRY_LINE_STRING_TAG
AzureIoTClient 0:1f9b2707ec7d 485 {
AzureIoTClient 0:1f9b2707ec7d 486 EDM_FULL_LINE_STRING_LITERAL fullLineStringLiteral;
AzureIoTClient 0:1f9b2707ec7d 487 }EDM_GEOMETRY_LINE_STRING;
AzureIoTClient 0:1f9b2707ec7d 488
AzureIoTClient 0:1f9b2707ec7d 489 /*geometryCollection = geometryPrefix SQUOTE fullCollectionLiteral SQUOTE*/
AzureIoTClient 0:1f9b2707ec7d 490 typedef struct EDM_GEOMETRY_COLLECTION_TAG
AzureIoTClient 0:1f9b2707ec7d 491 {
AzureIoTClient 0:1f9b2707ec7d 492 EDM_FULL_COLLECTION_LITERAL fullCollectionLiteral;
AzureIoTClient 0:1f9b2707ec7d 493 }EDM_GEOMETRY_COLLECTION;
AzureIoTClient 0:1f9b2707ec7d 494
AzureIoTClient 0:1f9b2707ec7d 495 /*holds the name and the value of a COMPLEX_TYPE... field*/
AzureIoTClient 0:1f9b2707ec7d 496 typedef struct COMPLEX_TYPE_FIELD_TAG
AzureIoTClient 0:1f9b2707ec7d 497 {
AzureIoTClient 0:1f9b2707ec7d 498 const char* fieldName;
AzureIoTClient 0:1f9b2707ec7d 499 AGENT_DATA_TYPE* value;
AzureIoTClient 0:1f9b2707ec7d 500 }COMPLEX_TYPE_FIELD_TYPE;
AzureIoTClient 0:1f9b2707ec7d 501
AzureIoTClient 0:1f9b2707ec7d 502 /*EDM_COMPLEX_TYPE - this type doesn't exist in EDMX as a primitive type*/
AzureIoTClient 0:1f9b2707ec7d 503 typedef struct EDM_COMPLEX_TYPE_TAG
AzureIoTClient 0:1f9b2707ec7d 504 {
AzureIoTClient 0:1f9b2707ec7d 505 size_t nMembers;
AzureIoTClient 0:1f9b2707ec7d 506 COMPLEX_TYPE_FIELD_TYPE *fields;
AzureIoTClient 0:1f9b2707ec7d 507 }EDM_COMPLEX_TYPE;
AzureIoTClient 0:1f9b2707ec7d 508
AzureIoTClient 0:1f9b2707ec7d 509 #define AGENT_DATA_TYPES_RESULT_VALUES \
AzureIoTClient 0:1f9b2707ec7d 510 AGENT_DATA_TYPES_OK, \
AzureIoTClient 0:1f9b2707ec7d 511 AGENT_DATA_TYPES_ERROR, \
AzureIoTClient 0:1f9b2707ec7d 512 AGENT_DATA_TYPES_INVALID_ARG, \
AzureIoTClient 0:1f9b2707ec7d 513 AGENT_DATA_TYPES_NOT_IMPLEMENTED, \
AzureIoTClient 0:1f9b2707ec7d 514 AGENT_DATA_TYPES_JSON_ENCODER_ERRROR
AzureIoTClient 0:1f9b2707ec7d 515
AzureIoTClient 0:1f9b2707ec7d 516 DEFINE_ENUM(AGENT_DATA_TYPES_RESULT, AGENT_DATA_TYPES_RESULT_VALUES);
AzureIoTClient 0:1f9b2707ec7d 517
AzureIoTClient 0:1f9b2707ec7d 518 #define AGENT_DATA_TYPE_TYPE_VALUES\
AzureIoTClient 0:1f9b2707ec7d 519 EDM_NO_TYPE, \
AzureIoTClient 0:1f9b2707ec7d 520 EDM_BINARY_TYPE, \
AzureIoTClient 0:1f9b2707ec7d 521 EDM_BOOLEAN_TYPE, \
AzureIoTClient 0:1f9b2707ec7d 522 EDM_BYTE_TYPE, \
AzureIoTClient 0:1f9b2707ec7d 523 EDM_DATE_TYPE, \
AzureIoTClient 0:1f9b2707ec7d 524 EDM_DATE_TIME_OFFSET_TYPE, \
AzureIoTClient 0:1f9b2707ec7d 525 EDM_DECIMAL_TYPE, \
AzureIoTClient 0:1f9b2707ec7d 526 EDM_DOUBLE_TYPE, \
AzureIoTClient 0:1f9b2707ec7d 527 EDM_DURATION_TYPE, \
AzureIoTClient 0:1f9b2707ec7d 528 EDM_GUID_TYPE, \
AzureIoTClient 0:1f9b2707ec7d 529 EDM_INT16_TYPE, \
AzureIoTClient 0:1f9b2707ec7d 530 EDM_INT32_TYPE, \
AzureIoTClient 0:1f9b2707ec7d 531 EDM_INT64_TYPE, \
AzureIoTClient 0:1f9b2707ec7d 532 EDM_SBYTE_TYPE, \
AzureIoTClient 0:1f9b2707ec7d 533 EDM_SINGLE_TYPE, \
AzureIoTClient 0:1f9b2707ec7d 534 EDM_STREAM, /*not supported, because what is stream?*/ \
AzureIoTClient 0:1f9b2707ec7d 535 EDM_STRING_TYPE, \
AzureIoTClient 0:1f9b2707ec7d 536 EDM_TIME_OF_DAY_TYPE, \
AzureIoTClient 0:1f9b2707ec7d 537 EDM_GEOGRAPHY_TYPE, /*not supported because what is "abstract base type"*/ \
AzureIoTClient 0:1f9b2707ec7d 538 EDM_GEOGRAPHY_POINT_TYPE, \
AzureIoTClient 0:1f9b2707ec7d 539 EDM_GEOGRAPHY_LINE_STRING_TYPE, \
AzureIoTClient 0:1f9b2707ec7d 540 EDM_GEOGRAPHY_POLYGON_TYPE, \
AzureIoTClient 0:1f9b2707ec7d 541 EDM_GEOGRAPHY_MULTI_POINT_TYPE, \
AzureIoTClient 0:1f9b2707ec7d 542 EDM_GEOGRAPHY_MULTI_LINE_STRING_TYPE, \
AzureIoTClient 0:1f9b2707ec7d 543 EDM_GEOGRAPHY_MULTI_POLYGON_TYPE, \
AzureIoTClient 0:1f9b2707ec7d 544 EDM_GEOGRAPHY_COLLECTION_TYPE, \
AzureIoTClient 0:1f9b2707ec7d 545 EDM_GEOMETRY_TYPE, /*not supported because what is "abstract base type"*/ \
AzureIoTClient 0:1f9b2707ec7d 546 EDM_GEOMETRY_POINT_TYPE, \
AzureIoTClient 0:1f9b2707ec7d 547 EDM_GEOMETRY_LINE_STRING_TYPE, \
AzureIoTClient 0:1f9b2707ec7d 548 EDM_GEOMETRY_POLYGON_TYPE, \
AzureIoTClient 0:1f9b2707ec7d 549 EDM_GEOMETRY_MULTI_POINT_TYPE, \
AzureIoTClient 0:1f9b2707ec7d 550 EDM_GEOMETRY_MULTI_LINE_STRING_TYPE, \
AzureIoTClient 0:1f9b2707ec7d 551 EDM_GEOMETRY_MULTI_POLYGON_TYPE, \
AzureIoTClient 0:1f9b2707ec7d 552 EDM_GEOMETRY_COLLECTION_TYPE, \
AzureIoTClient 0:1f9b2707ec7d 553 EDM_COMPLEX_TYPE_TYPE, \
AzureIoTClient 0:1f9b2707ec7d 554 EDM_NULL_TYPE, \
AzureIoTClient 0:1f9b2707ec7d 555 EDM_ENTITY_TYPE_TYPE, \
AzureIoTClient 0:1f9b2707ec7d 556 EDM_STRING_NO_QUOTES_TYPE \
AzureIoTClient 0:1f9b2707ec7d 557
AzureIoTClient 0:1f9b2707ec7d 558
AzureIoTClient 0:1f9b2707ec7d 559 DEFINE_ENUM(AGENT_DATA_TYPE_TYPE, AGENT_DATA_TYPE_TYPE_VALUES);
AzureIoTClient 0:1f9b2707ec7d 560
AzureIoTClient 0:1f9b2707ec7d 561 typedef struct AGENT_DATA_TYPE_TAG
AzureIoTClient 0:1f9b2707ec7d 562 {
AzureIoTClient 0:1f9b2707ec7d 563 AGENT_DATA_TYPE_TYPE type;
AzureIoTClient 0:1f9b2707ec7d 564 union
AzureIoTClient 0:1f9b2707ec7d 565 {
AzureIoTClient 0:1f9b2707ec7d 566 EDM_BINARY edmBinary;
AzureIoTClient 0:1f9b2707ec7d 567 EDM_BOOLEAN edmBoolean;
AzureIoTClient 0:1f9b2707ec7d 568 EDM_BYTE edmByte;
AzureIoTClient 0:1f9b2707ec7d 569 EDM_DATE edmDate;
AzureIoTClient 0:1f9b2707ec7d 570 EDM_DATE_TIME_OFFSET edmDateTimeOffset;
AzureIoTClient 0:1f9b2707ec7d 571 EDM_DECIMAL edmDecimal;
AzureIoTClient 0:1f9b2707ec7d 572 EDM_DOUBLE edmDouble;
AzureIoTClient 0:1f9b2707ec7d 573 EDM_DURATION edmDuration;
AzureIoTClient 0:1f9b2707ec7d 574 EDM_GUID edmGuid;
AzureIoTClient 0:1f9b2707ec7d 575 EDM_INT16 edmInt16;
AzureIoTClient 0:1f9b2707ec7d 576 EDM_INT32 edmInt32;
AzureIoTClient 0:1f9b2707ec7d 577 EDM_INT64 edmInt64;
AzureIoTClient 0:1f9b2707ec7d 578 EDM_SBYTE edmSbyte;
AzureIoTClient 0:1f9b2707ec7d 579 EDM_SINGLE edmSingle;
AzureIoTClient 0:1f9b2707ec7d 580 /*EDM_STREAM, not supported, because what is stream?*/
AzureIoTClient 0:1f9b2707ec7d 581 EDM_STRING edmString;
AzureIoTClient 0:1f9b2707ec7d 582 EDM_STRING edmStringNoQuotes;
AzureIoTClient 0:1f9b2707ec7d 583 EDM_TIME_OF_DAY edmTimeOfDay;
AzureIoTClient 0:1f9b2707ec7d 584 /*EDM_GEOGRAPHY_, not supported because what is "abstract base type"*/
AzureIoTClient 0:1f9b2707ec7d 585 EDM_GEOGRAPHY_POINT edmGeographyPoint;
AzureIoTClient 0:1f9b2707ec7d 586 EDM_GEOGRAPHY_LINE_STRING edmGeographyLineString;
AzureIoTClient 0:1f9b2707ec7d 587 EDM_GEOGRAPHY_POLYGON edmGeographyPolygon;
AzureIoTClient 0:1f9b2707ec7d 588 EDM_GEOGRAPHY_MULTI_POINT edmGeographyMultiPoint;
AzureIoTClient 0:1f9b2707ec7d 589 EDM_GEOGRAPHY_MULTI_LINE_STRING edmGeographyMultiLineString;
AzureIoTClient 0:1f9b2707ec7d 590 EDM_GEOGRAPHY_MULTI_POLYGON edmGeographyMultiPolygon;
AzureIoTClient 0:1f9b2707ec7d 591 EDM_GEOGRAPHY_COLLECTION edmGeographyCollection;
AzureIoTClient 0:1f9b2707ec7d 592 /* EDM_GEOMETRY_, not supported because what is "abstract base type"*/
AzureIoTClient 0:1f9b2707ec7d 593 EDM_GEOMETRY_POINT edmGeometryPoint;
AzureIoTClient 0:1f9b2707ec7d 594 EDM_GEOMETRY_LINE_STRING edmGeometryLineString;
AzureIoTClient 0:1f9b2707ec7d 595 EDM_GEOMETRY_POLYGON edmGeometryPolygon;
AzureIoTClient 0:1f9b2707ec7d 596 EDM_GEOMETRY_MULTI_POINT edmGeometryMultiPoint;
AzureIoTClient 0:1f9b2707ec7d 597 EDM_GEOMETRY_MULTI_LINE_STRING edmGeoemtryMultiLineString;
AzureIoTClient 0:1f9b2707ec7d 598 EDM_GEOMETRY_MULTI_POLYGON edmGeometryMultiPolygon;
AzureIoTClient 0:1f9b2707ec7d 599 EDM_GEOMETRY_COLLECTION edmGeometryCollection;
AzureIoTClient 0:1f9b2707ec7d 600 EDM_COMPLEX_TYPE edmComplexType;
AzureIoTClient 0:1f9b2707ec7d 601 } value;
AzureIoTClient 0:1f9b2707ec7d 602 }AGENT_DATA_TYPE;
AzureIoTClient 0:1f9b2707ec7d 603
AzureIoTClient 0:1f9b2707ec7d 604
AzureIoTClient 0:1f9b2707ec7d 605 extern AGENT_DATA_TYPES_RESULT AgentDataTypes_ToString(STRING_HANDLE destination, const AGENT_DATA_TYPE* value);
AzureIoTClient 0:1f9b2707ec7d 606
AzureIoTClient 0:1f9b2707ec7d 607 /*Create/Destroy work in pairs. For some data type not calling Uncreate might be ok. For some, it will lead to memory leaks*/
AzureIoTClient 0:1f9b2707ec7d 608
AzureIoTClient 0:1f9b2707ec7d 609 /*creates an AGENT_DATA_TYPE containing a EDM_BOOLEAN from a int*/
AzureIoTClient 0:1f9b2707ec7d 610 extern AGENT_DATA_TYPES_RESULT Create_EDM_BOOLEAN_from_int(AGENT_DATA_TYPE* agentData, int v);
AzureIoTClient 0:1f9b2707ec7d 611
AzureIoTClient 0:1f9b2707ec7d 612 /*creates an AGENT_DATA_TYPE containing a UINT8*/
AzureIoTClient 0:1f9b2707ec7d 613 extern AGENT_DATA_TYPES_RESULT Create_AGENT_DATA_TYPE_from_UINT8(AGENT_DATA_TYPE* agentData, uint8_t v);
AzureIoTClient 0:1f9b2707ec7d 614
AzureIoTClient 0:1f9b2707ec7d 615 /*creates an AGENT_DATA_TYPE containing a EDM_DATE */
AzureIoTClient 0:1f9b2707ec7d 616 extern AGENT_DATA_TYPES_RESULT Create_AGENT_DATA_TYPE_from_date(AGENT_DATA_TYPE* agentData, int16_t year, uint8_t month, uint8_t day);
AzureIoTClient 0:1f9b2707ec7d 617
AzureIoTClient 0:1f9b2707ec7d 618 /*create an AGENT_DATA_TYPE containing an EDM_DECIMAL from a string representation*/
AzureIoTClient 0:1f9b2707ec7d 619 extern AGENT_DATA_TYPES_RESULT Create_EDM_DECIMAL_from_charz(AGENT_DATA_TYPE* agentData, const char* v);
AzureIoTClient 0:1f9b2707ec7d 620
AzureIoTClient 0:1f9b2707ec7d 621 /*create an AGENT_DATA_TYPE containing an EDM_DOUBLE from a double*/
AzureIoTClient 0:1f9b2707ec7d 622 extern AGENT_DATA_TYPES_RESULT Create_AGENT_DATA_TYPE_from_DOUBLE(AGENT_DATA_TYPE* agentData, double v);
AzureIoTClient 0:1f9b2707ec7d 623
AzureIoTClient 0:1f9b2707ec7d 624 /*create an AGENT_DATA_TYPE from INT16_T*/
AzureIoTClient 0:1f9b2707ec7d 625 extern AGENT_DATA_TYPES_RESULT Create_AGENT_DATA_TYPE_from_SINT16(AGENT_DATA_TYPE* agentData, int16_t v);
AzureIoTClient 0:1f9b2707ec7d 626
AzureIoTClient 0:1f9b2707ec7d 627 /*create an AGENT_DATA_TYPE from INT32_T*/
AzureIoTClient 0:1f9b2707ec7d 628 extern AGENT_DATA_TYPES_RESULT Create_AGENT_DATA_TYPE_from_SINT32(AGENT_DATA_TYPE* agentData, int32_t v);
AzureIoTClient 0:1f9b2707ec7d 629
AzureIoTClient 0:1f9b2707ec7d 630 /*create an AGENT_DATA_TYPE from INT64_T*/
AzureIoTClient 0:1f9b2707ec7d 631 extern AGENT_DATA_TYPES_RESULT Create_AGENT_DATA_TYPE_from_SINT64(AGENT_DATA_TYPE* agentData, int64_t v);
AzureIoTClient 0:1f9b2707ec7d 632
AzureIoTClient 0:1f9b2707ec7d 633 /*create an AGENT_DATA_TYPE from int8_t*/
AzureIoTClient 0:1f9b2707ec7d 634 extern AGENT_DATA_TYPES_RESULT Create_AGENT_DATA_TYPE_from_SINT8(AGENT_DATA_TYPE* agentData, int8_t v);
AzureIoTClient 0:1f9b2707ec7d 635
AzureIoTClient 0:1f9b2707ec7d 636 /*Codes_SRS_AGENT_TYPE_SYSTEM_99_091:[Creates an AGENT_DATA_TYPE containing an Edm.DateTimeOffset from an EDM_DATE_TIME_OFFSET.]*/
AzureIoTClient 0:1f9b2707ec7d 637 extern AGENT_DATA_TYPES_RESULT Create_AGENT_DATA_TYPE_from_EDM_DATE_TIME_OFFSET(AGENT_DATA_TYPE* agentData, EDM_DATE_TIME_OFFSET v);
AzureIoTClient 0:1f9b2707ec7d 638
AzureIoTClient 0:1f9b2707ec7d 639 /*creates an AGENT_DATA_TYPE containing a EDM_GUID*/
AzureIoTClient 0:1f9b2707ec7d 640 extern AGENT_DATA_TYPES_RESULT Create_AGENT_DATA_TYPE_from_EDM_GUID(AGENT_DATA_TYPE* agentData, EDM_GUID v);
AzureIoTClient 0:1f9b2707ec7d 641
AzureIoTClient 0:1f9b2707ec7d 642 /*creates an AGENT_DATA_TYPE containing a EDM_BINARY*/
AzureIoTClient 0:1f9b2707ec7d 643 extern AGENT_DATA_TYPES_RESULT Create_AGENT_DATA_TYPE_from_EDM_BINARY(AGENT_DATA_TYPE* agentData, EDM_BINARY v);
AzureIoTClient 0:1f9b2707ec7d 644
AzureIoTClient 0:1f9b2707ec7d 645 /*create an AGENT_DATA_TYPE from SINGLE*/
AzureIoTClient 0:1f9b2707ec7d 646 extern AGENT_DATA_TYPES_RESULT Create_AGENT_DATA_TYPE_from_FLOAT(AGENT_DATA_TYPE* agentData, float v);
AzureIoTClient 0:1f9b2707ec7d 647
AzureIoTClient 0:1f9b2707ec7d 648 /*create an AGENT_DATA_TYPE from ANSI zero terminated string*/
AzureIoTClient 0:1f9b2707ec7d 649 extern AGENT_DATA_TYPES_RESULT Create_AGENT_DATA_TYPE_from_charz(AGENT_DATA_TYPE* agentData, const char* v);
AzureIoTClient 0:1f9b2707ec7d 650
AzureIoTClient 0:1f9b2707ec7d 651 /*create an AGENT_DATA_TYPE from ANSI zero terminated string (no quotes)*/
AzureIoTClient 0:1f9b2707ec7d 652 extern AGENT_DATA_TYPES_RESULT Create_AGENT_DATA_TYPE_from_charz_no_quotes(AGENT_DATA_TYPE* agentData, const char* v);
AzureIoTClient 0:1f9b2707ec7d 653
AzureIoTClient 0:1f9b2707ec7d 654 /*create an AGENT_DATA_TYPE of type EDM_NULL_TYPE */
AzureIoTClient 0:1f9b2707ec7d 655 extern AGENT_DATA_TYPES_RESULT Create_NULL_AGENT_DATA_TYPE(AGENT_DATA_TYPE* agentData);
AzureIoTClient 0:1f9b2707ec7d 656
AzureIoTClient 0:1f9b2707ec7d 657 /*create an AGENT_DATA_TYPE that holds a structs from its fields*/
AzureIoTClient 0:1f9b2707ec7d 658 extern AGENT_DATA_TYPES_RESULT Create_AGENT_DATA_TYPE_from_Members(AGENT_DATA_TYPE* agentData, const char* typeName, size_t nMembers, const char* const * memberNames, const AGENT_DATA_TYPE*memberValues);
AzureIoTClient 0:1f9b2707ec7d 659
AzureIoTClient 0:1f9b2707ec7d 660 /*create a complex AGENT_DATA_TYPE from pointers to AGENT_DATA_TYPE fields*/
AzureIoTClient 0:1f9b2707ec7d 661 extern AGENT_DATA_TYPES_RESULT Create_AGENT_DATA_TYPE_from_MemberPointers(AGENT_DATA_TYPE* agentData, const char* typeName, size_t nMembers, const char* const * memberNames, const AGENT_DATA_TYPE** memberPointerValues);
AzureIoTClient 0:1f9b2707ec7d 662
AzureIoTClient 0:1f9b2707ec7d 663 /*creates a copy of the AGENT_DATA_TYPE*/
AzureIoTClient 0:1f9b2707ec7d 664 extern AGENT_DATA_TYPES_RESULT Create_AGENT_DATA_TYPE_from_AGENT_DATA_TYPE(AGENT_DATA_TYPE* dest, const AGENT_DATA_TYPE* src);
AzureIoTClient 0:1f9b2707ec7d 665
AzureIoTClient 0:1f9b2707ec7d 666 extern void Destroy_AGENT_DATA_TYPE(AGENT_DATA_TYPE* agentData);
AzureIoTClient 0:1f9b2707ec7d 667
AzureIoTClient 0:1f9b2707ec7d 668 extern AGENT_DATA_TYPES_RESULT CreateAgentDataType_From_String(const char* source, AGENT_DATA_TYPE_TYPE type, AGENT_DATA_TYPE* agentData);
AzureIoTClient 0:1f9b2707ec7d 669
AzureIoTClient 0:1f9b2707ec7d 670 extern COMPLEX_TYPE_FIELD_TYPE* AgentDataType_GetComplexTypeField(AGENT_DATA_TYPE* agentData, size_t index);;
AzureIoTClient 0:1f9b2707ec7d 671
AzureIoTClient 0:1f9b2707ec7d 672 #ifdef __cplusplus
AzureIoTClient 0:1f9b2707ec7d 673 }
AzureIoTClient 0:1f9b2707ec7d 674 #endif
AzureIoTClient 0:1f9b2707ec7d 675
AzureIoTClient 0:1f9b2707ec7d 676 #endif