A modelling and serializer library for Microsoft Azure IoTHub client applications

Dependents:   sht15_remote_monitoring f767zi_mqtt remote_monitoring simplesample_amqp ... more

This library implements a serializer library to be used in projects involving Microsoft Azure IoT Hub connectivity. The code is replicated from https://github.com/Azure/azure-iot-sdks

Committer:
AzureIoTClient
Date:
Wed Nov 16 21:38:26 2016 -0800
Revision:
17:fa1bba4c6053
Parent:
13:16e88f0cfa5f
Child:
18:58b667752399
1.0.10

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AzureIoTClient 4:233dd7616d73 1 // Copyright (c) Microsoft. All rights reserved.
AzureIoTClient 4:233dd7616d73 2 // Licensed under the MIT license. See LICENSE file in the project root for full license information.
AzureIoTClient 4:233dd7616d73 3
AzureIoTClient 4:233dd7616d73 4 /** @file serializer.h
AzureIoTClient 4:233dd7616d73 5 * @brief The IoT Hub Serializer APIs allows developers to define models for
AzureIoTClient 4:233dd7616d73 6 * their devices
AzureIoTClient 4:233dd7616d73 7 *
AzureIoTClient 4:233dd7616d73 8 * @details The IoT Hub Serializer APIs allows developers to quickly and easily define
AzureIoTClient 4:233dd7616d73 9 * models for their devices directly as code, while supporting the required
AzureIoTClient 4:233dd7616d73 10 * features for modeling devices (including multiple models and multiple
AzureIoTClient 4:233dd7616d73 11 * devices within the same application). For example:
AzureIoTClient 4:233dd7616d73 12 *
AzureIoTClient 4:233dd7616d73 13 * <pre>
AzureIoTClient 4:233dd7616d73 14 * BEGIN_NAMESPACE(Contoso);
AzureIoTClient 4:233dd7616d73 15 *
AzureIoTClient 4:233dd7616d73 16 * DECLARE_STRUCT(SystemProperties,
AzureIoTClient 4:233dd7616d73 17 * ascii_char_ptr, DeviceID,
AzureIoTClient 4:233dd7616d73 18 * _Bool, Enabled
AzureIoTClient 4:233dd7616d73 19 * );
AzureIoTClient 4:233dd7616d73 20 *
AzureIoTClient 4:233dd7616d73 21 * DECLARE_MODEL(VendingMachine,
AzureIoTClient 4:233dd7616d73 22 *
AzureIoTClient 4:233dd7616d73 23 * WITH_DATA(int, SensorValue),
AzureIoTClient 4:233dd7616d73 24 *
AzureIoTClient 4:233dd7616d73 25 * WITH_DATA(ascii_char_ptr, ObjectName),
AzureIoTClient 4:233dd7616d73 26 * WITH_DATA(ascii_char_ptr, ObjectType),
AzureIoTClient 4:233dd7616d73 27 * WITH_DATA(ascii_char_ptr, Version),
AzureIoTClient 4:233dd7616d73 28 * WITH_DATA(SystemProperties, SystemProperties),
AzureIoTClient 4:233dd7616d73 29 * WITH_DATA(ascii_char_ptr_no_quotes, Commands),
AzureIoTClient 4:233dd7616d73 30 *
AzureIoTClient 4:233dd7616d73 31 * WITH_ACTION(SetItemPrice, ascii_char_ptr, itemId, ascii_char_ptr, price)
AzureIoTClient 4:233dd7616d73 32 * );
AzureIoTClient 4:233dd7616d73 33 *
AzureIoTClient 4:233dd7616d73 34 * END_NAMESPACE(Contoso);
AzureIoTClient 4:233dd7616d73 35 * </pre>
AzureIoTClient 4:233dd7616d73 36 */
AzureIoTClient 4:233dd7616d73 37
AzureIoTClient 4:233dd7616d73 38 #ifndef SERIALIZER_H
AzureIoTClient 4:233dd7616d73 39 #define SERIALIZER_H
AzureIoTClient 4:233dd7616d73 40
AzureIoTClient 4:233dd7616d73 41 #ifdef __cplusplus
AzureIoTClient 4:233dd7616d73 42 #include <cstdlib>
AzureIoTClient 4:233dd7616d73 43 #include <cstdarg>
AzureIoTClient 4:233dd7616d73 44
AzureIoTClient 4:233dd7616d73 45 #else
AzureIoTClient 4:233dd7616d73 46 #include <stdlib.h>
AzureIoTClient 4:233dd7616d73 47 #include <stdarg.h>
AzureIoTClient 4:233dd7616d73 48 #endif
AzureIoTClient 4:233dd7616d73 49
AzureIoTClient 4:233dd7616d73 50 #ifdef _CRTDBG_MAP_ALLOC
AzureIoTClient 4:233dd7616d73 51 #include <crtdbg.h>
AzureIoTClient 4:233dd7616d73 52 #endif
AzureIoTClient 4:233dd7616d73 53
Azure.IoT Build 10:c2aee3965a83 54 #include "azure_c_shared_utility/gballoc.h"
Azure.IoT Build 10:c2aee3965a83 55 #include "azure_c_shared_utility/macro_utils.h"
AzureIoTClient 4:233dd7616d73 56 #include "iotdevice.h"
Azure.IoT Build 10:c2aee3965a83 57 #include "azure_c_shared_utility/crt_abstractions.h"
Azure.IoT Build 13:16e88f0cfa5f 58 #include "azure_c_shared_utility/xlogging.h"
AzureIoTClient 4:233dd7616d73 59 #include "schemalib.h"
AzureIoTClient 4:233dd7616d73 60 #include "codefirst.h"
AzureIoTClient 4:233dd7616d73 61 #include "agenttypesystem.h"
AzureIoTClient 4:233dd7616d73 62 #include "schema.h"
AzureIoTClient 4:233dd7616d73 63
AzureIoTClient 4:233dd7616d73 64
AzureIoTClient 4:233dd7616d73 65 #ifdef __cplusplus
AzureIoTClient 4:233dd7616d73 66 extern "C"
AzureIoTClient 4:233dd7616d73 67 {
AzureIoTClient 4:233dd7616d73 68 #endif
AzureIoTClient 4:233dd7616d73 69
AzureIoTClient 17:fa1bba4c6053 70 /* IOT Agent Macros */
AzureIoTClient 4:233dd7616d73 71
AzureIoTClient 17:fa1bba4c6053 72 /**
AzureIoTClient 17:fa1bba4c6053 73 * @def BEGIN_NAMESPACE(schemaNamespace)
AzureIoTClient 17:fa1bba4c6053 74 * This macro marks the start of a section that declares IOT model
AzureIoTClient 17:fa1bba4c6053 75 * elements (like complex types, etc.). Declarations are typically
AzureIoTClient 17:fa1bba4c6053 76 * placed in header files, so that they can be shared between
AzureIoTClient 17:fa1bba4c6053 77 * translation units.
AzureIoTClient 17:fa1bba4c6053 78 */
AzureIoTClient 17:fa1bba4c6053 79 /* Codes_SRS_SERIALIZER_99_001:[For each completed schema declaration block, a unique storage container for schema metadata shall be available in the translation unit at runtime.] */
AzureIoTClient 4:233dd7616d73 80 #define BEGIN_NAMESPACE(schemaNamespace) \
AzureIoTClient 4:233dd7616d73 81 REFLECTED_END_OF_LIST
AzureIoTClient 4:233dd7616d73 82
AzureIoTClient 4:233dd7616d73 83 /**
AzureIoTClient 4:233dd7616d73 84 * @def END_NAMESPACE(schemaNamespace)
AzureIoTClient 4:233dd7616d73 85 * This macro marks the end of a section that declares IOT model
AzureIoTClient 4:233dd7616d73 86 * elements.
AzureIoTClient 4:233dd7616d73 87 */
AzureIoTClient 4:233dd7616d73 88 #define END_NAMESPACE(schemaNamespace) \
AzureIoTClient 4:233dd7616d73 89 REFLECTED_LIST_HEAD(schemaNamespace)
AzureIoTClient 4:233dd7616d73 90
AzureIoTClient 17:fa1bba4c6053 91 #define GLOBAL_INITIALIZE_STRUCT_FIELD(structType, destination, type, name) GlobalInitialize_##type((char*)destination+offsetof(structType, name));
AzureIoTClient 17:fa1bba4c6053 92 #define GLOBAL_DEINITIALIZE_STRUCT_FIELD(structType, destination, type, name) GlobalDeinitialize_##type((char*)destination+offsetof(structType, name));
AzureIoTClient 4:233dd7616d73 93 /**
AzureIoTClient 4:233dd7616d73 94 * @def DECLARE_STRUCT(name, ...)
AzureIoTClient 4:233dd7616d73 95 * This macro allows the definition of a struct type that can then be used as
AzureIoTClient 4:233dd7616d73 96 * part of a model definition.
AzureIoTClient 17:fa1bba4c6053 97 *
AzureIoTClient 4:233dd7616d73 98 * @param name Name of the struct
AzureIoTClient 4:233dd7616d73 99 * @param element1, element2... Specifies a list of struct members
AzureIoTClient 4:233dd7616d73 100 */
AzureIoTClient 4:233dd7616d73 101 /* Codes_SRS_SERIALIZER_99_080:[ The DECLARE_STRUCT declaration shall insert metadata describing a complex data type.] */
AzureIoTClient 4:233dd7616d73 102 #define DECLARE_STRUCT(name, ...) \
AzureIoTClient 4:233dd7616d73 103 /* Codes_SRS_SERIALIZER_99_096:[ DECLARE_STRUCT shall declare a matching C struct data type named name, which can be referenced from any code that can access the declaration.] */ \
AzureIoTClient 4:233dd7616d73 104 typedef struct name##_TAG { \
AzureIoTClient 4:233dd7616d73 105 FOR_EACH_2(INSERT_FIELD_INTO_STRUCT, __VA_ARGS__) \
AzureIoTClient 4:233dd7616d73 106 } name; \
AzureIoTClient 4:233dd7616d73 107 /* Codes_SRS_SERIALIZER_99_081:[ DECLARE_STRUCT's name argument shall uniquely identify the struct within the schema.] */ \
AzureIoTClient 4:233dd7616d73 108 REFLECTED_STRUCT(name) \
AzureIoTClient 4:233dd7616d73 109 /* Codes_SRS_SERIALIZER_99_082:[ DECLARE_STRUCT's field<n>Name argument shall uniquely name a field within the struct.] */ \
AzureIoTClient 4:233dd7616d73 110 FOR_EACH_2_KEEP_1(REFLECTED_FIELD, name, __VA_ARGS__) \
AzureIoTClient 4:233dd7616d73 111 TO_AGENT_DATA_TYPE(name, __VA_ARGS__) \
AzureIoTClient 4:233dd7616d73 112 /*Codes_SRS_SERIALIZER_99_042:[ The parameter types are either predefined parameter types (specs SRS_SERIALIZER_99_004-SRS_SERIALIZER_99_014) or a type introduced by DECLARE_STRUCT.]*/ \
AzureIoTClient 4:233dd7616d73 113 static AGENT_DATA_TYPES_RESULT FromAGENT_DATA_TYPE_##name(const AGENT_DATA_TYPE* source, name* destination) \
AzureIoTClient 4:233dd7616d73 114 { \
AzureIoTClient 4:233dd7616d73 115 AGENT_DATA_TYPES_RESULT result; \
AzureIoTClient 4:233dd7616d73 116 if(source->type != EDM_COMPLEX_TYPE_TYPE) \
AzureIoTClient 4:233dd7616d73 117 { \
AzureIoTClient 4:233dd7616d73 118 result = AGENT_DATA_TYPES_INVALID_ARG; \
AzureIoTClient 4:233dd7616d73 119 } \
AzureIoTClient 4:233dd7616d73 120 else if(DIV2(COUNT_ARG(__VA_ARGS__)) != source->value.edmComplexType.nMembers) \
AzureIoTClient 4:233dd7616d73 121 { \
AzureIoTClient 4:233dd7616d73 122 /*too many or too few fields*/ \
AzureIoTClient 4:233dd7616d73 123 result = AGENT_DATA_TYPES_INVALID_ARG; \
AzureIoTClient 4:233dd7616d73 124 } \
AzureIoTClient 4:233dd7616d73 125 else \
AzureIoTClient 4:233dd7616d73 126 { \
AzureIoTClient 4:233dd7616d73 127 result = AGENT_DATA_TYPES_OK; \
AzureIoTClient 4:233dd7616d73 128 FOR_EACH_2(BUILD_DESTINATION_FIELD, __VA_ARGS__); \
AzureIoTClient 4:233dd7616d73 129 } \
AzureIoTClient 4:233dd7616d73 130 return result; \
AzureIoTClient 4:233dd7616d73 131 } \
AzureIoTClient 4:233dd7616d73 132 static void C2(destroyLocalParameter, name)(name * value) \
AzureIoTClient 4:233dd7616d73 133 { \
AzureIoTClient 4:233dd7616d73 134 FOR_EACH_2_KEEP_1(UNBUILD_DESTINATION_FIELD, value, __VA_ARGS__); \
AzureIoTClient 17:fa1bba4c6053 135 } \
AzureIoTClient 17:fa1bba4c6053 136 static void C2(GlobalInitialize_, name)(void* destination) \
AzureIoTClient 17:fa1bba4c6053 137 { \
AzureIoTClient 17:fa1bba4c6053 138 FOR_EACH_2_KEEP_2(GLOBAL_INITIALIZE_STRUCT_FIELD, name, destination, __VA_ARGS__); \
AzureIoTClient 17:fa1bba4c6053 139 } \
AzureIoTClient 17:fa1bba4c6053 140 static void C2(GlobalDeinitialize_, name)(void* destination) \
AzureIoTClient 17:fa1bba4c6053 141 { \
AzureIoTClient 17:fa1bba4c6053 142 FOR_EACH_2_KEEP_2(GLOBAL_DEINITIALIZE_STRUCT_FIELD, name, destination, __VA_ARGS__); \
AzureIoTClient 17:fa1bba4c6053 143 } \
AzureIoTClient 17:fa1bba4c6053 144
AzureIoTClient 4:233dd7616d73 145
AzureIoTClient 4:233dd7616d73 146 /**
AzureIoTClient 4:233dd7616d73 147 * @def DECLARE_MODEL(name, ...)
AzureIoTClient 4:233dd7616d73 148 * This macro allows declaring a model that can be later used to instantiate
AzureIoTClient 4:233dd7616d73 149 * a device.
AzureIoTClient 17:fa1bba4c6053 150 *
AzureIoTClient 4:233dd7616d73 151 * @param name Specifies the model name
AzureIoTClient 4:233dd7616d73 152 * @param element1, element2... Specifies a model element which can be
AzureIoTClient 4:233dd7616d73 153 * a property or an action.
AzureIoTClient 17:fa1bba4c6053 154 * - A property is described in a
AzureIoTClient 4:233dd7616d73 155 * model by using the WITH_DATA
AzureIoTClient 17:fa1bba4c6053 156 * - An action is described in a
AzureIoTClient 4:233dd7616d73 157 * model by using the ::WITH_ACTION
AzureIoTClient 4:233dd7616d73 158 * macro.
AzureIoTClient 4:233dd7616d73 159 *
AzureIoTClient 4:233dd7616d73 160 */
AzureIoTClient 17:fa1bba4c6053 161 /* WITH_DATA's name argument shall be one of the following data types: */
AzureIoTClient 17:fa1bba4c6053 162 /* Codes_SRS_SERIALIZER_99_133:[a model type introduced previously by DECLARE_MODEL] */
AzureIoTClient 17:fa1bba4c6053 163
AzureIoTClient 17:fa1bba4c6053 164 #define CREATE_DESIRED_PROPERTY_CALLBACK_MODEL_ACTION(...)
AzureIoTClient 17:fa1bba4c6053 165 #define CREATE_DESIRED_PROPERTY_CALLBACK_MODEL_DESIRED_PROPERTY(type, name, ...) IF(COUNT_ARG(__VA_ARGS__), void __VA_ARGS__ (void*);, )
AzureIoTClient 17:fa1bba4c6053 166 #define CREATE_DESIRED_PROPERTY_CALLBACK_MODEL_PROPERTY(...)
AzureIoTClient 17:fa1bba4c6053 167 #define CREATE_DESIRED_PROPERTY_CALLBACK_MODEL_REPORTED_PROPERTY(...)
AzureIoTClient 17:fa1bba4c6053 168
AzureIoTClient 17:fa1bba4c6053 169 #define CREATE_DESIRED_PROPERTY_CALLBACK(...) CREATE_DESIRED_PROPERTY_CALLBACK_##__VA_ARGS__
AzureIoTClient 17:fa1bba4c6053 170
AzureIoTClient 17:fa1bba4c6053 171 #define SERIALIZER_REGISTER_NAMESPACE(NAMESPACE) CodeFirst_RegisterSchema(#NAMESPACE, & ALL_REFLECTED(NAMESPACE))
AzureIoTClient 17:fa1bba4c6053 172
AzureIoTClient 17:fa1bba4c6053 173 #define DECLARE_MODEL(name, ...) \
AzureIoTClient 17:fa1bba4c6053 174 REFLECTED_MODEL(name) \
AzureIoTClient 17:fa1bba4c6053 175 FOR_EACH_1(CREATE_DESIRED_PROPERTY_CALLBACK, __VA_ARGS__) \
AzureIoTClient 17:fa1bba4c6053 176 typedef struct name { int :1; FOR_EACH_1(BUILD_MODEL_STRUCT, __VA_ARGS__) } name; \
AzureIoTClient 17:fa1bba4c6053 177 FOR_EACH_1_KEEP_1(CREATE_MODEL_ELEMENT, name, __VA_ARGS__) \
AzureIoTClient 17:fa1bba4c6053 178 TO_AGENT_DATA_TYPE(name, DROP_FIRST_COMMA_FROM_ARGS(EXPAND_MODEL_ARGS(__VA_ARGS__))) \
AzureIoTClient 17:fa1bba4c6053 179 int FromAGENT_DATA_TYPE_##name(const AGENT_DATA_TYPE* source, void* destination) \
AzureIoTClient 17:fa1bba4c6053 180 { \
AzureIoTClient 17:fa1bba4c6053 181 (void)(source, destination); \
AzureIoTClient 17:fa1bba4c6053 182 LogError("SHOULD NOT GET CALLED... EVER"); \
AzureIoTClient 17:fa1bba4c6053 183 return 0; \
AzureIoTClient 17:fa1bba4c6053 184 } \
AzureIoTClient 17:fa1bba4c6053 185 static void C2(GlobalInitialize_, name)(void* destination) \
AzureIoTClient 17:fa1bba4c6053 186 { \
AzureIoTClient 17:fa1bba4c6053 187 (void)destination; \
AzureIoTClient 17:fa1bba4c6053 188 FOR_EACH_1_KEEP_1(CREATE_MODEL_ELEMENT_GLOBAL_INITIALIZE, name, __VA_ARGS__) \
AzureIoTClient 17:fa1bba4c6053 189 } \
AzureIoTClient 17:fa1bba4c6053 190 static void C2(GlobalDeinitialize_, name)(void* destination) \
AzureIoTClient 17:fa1bba4c6053 191 { \
AzureIoTClient 17:fa1bba4c6053 192 (void)destination; \
AzureIoTClient 17:fa1bba4c6053 193 FOR_EACH_1_KEEP_1(CREATE_MODEL_ELEMENT_GLOBAL_DEINITIALIZE, name, __VA_ARGS__) \
AzureIoTClient 17:fa1bba4c6053 194 } \
AzureIoTClient 17:fa1bba4c6053 195
AzureIoTClient 17:fa1bba4c6053 196
AzureIoTClient 4:233dd7616d73 197
AzureIoTClient 4:233dd7616d73 198 /**
AzureIoTClient 4:233dd7616d73 199 * @def WITH_DATA(type, name)
AzureIoTClient 4:233dd7616d73 200 * The ::WITH_DATA macro allows declaring a model property in a model. A
AzureIoTClient 4:233dd7616d73 201 * property can be published by using the ::SERIALIZE macro.
AzureIoTClient 4:233dd7616d73 202 *
AzureIoTClient 4:233dd7616d73 203 * @param type Specifies the property type. Can be any of the following
AzureIoTClient 4:233dd7616d73 204 * types:
AzureIoTClient 4:233dd7616d73 205 * - int
AzureIoTClient 4:233dd7616d73 206 * - double
AzureIoTClient 4:233dd7616d73 207 * - float
AzureIoTClient 4:233dd7616d73 208 * - long
AzureIoTClient 4:233dd7616d73 209 * - int8_t
AzureIoTClient 4:233dd7616d73 210 * - uint8_t
AzureIoTClient 4:233dd7616d73 211 * - int16_t
AzureIoTClient 4:233dd7616d73 212 * - int32_t
AzureIoTClient 4:233dd7616d73 213 * - int64_t
AzureIoTClient 4:233dd7616d73 214 * - bool
AzureIoTClient 4:233dd7616d73 215 * - ascii_char_ptr
AzureIoTClient 4:233dd7616d73 216 * - EDM_DATE_TIME_OFFSET
AzureIoTClient 4:233dd7616d73 217 * - EDM_GUID
AzureIoTClient 4:233dd7616d73 218 * - EDM_BINARY
AzureIoTClient 4:233dd7616d73 219 * - Any struct type previously introduced by another ::DECLARE_STRUCT.
AzureIoTClient 4:233dd7616d73 220 *
AzureIoTClient 4:233dd7616d73 221 * @param name Specifies the property name
AzureIoTClient 4:233dd7616d73 222 */
AzureIoTClient 4:233dd7616d73 223 #define WITH_DATA(type, name) MODEL_PROPERTY(type, name)
AzureIoTClient 4:233dd7616d73 224
AzureIoTClient 17:fa1bba4c6053 225
AzureIoTClient 17:fa1bba4c6053 226 #define WITH_REPORTED_PROPERTY(type, name) MODEL_REPORTED_PROPERTY(type, name)
AzureIoTClient 17:fa1bba4c6053 227
AzureIoTClient 17:fa1bba4c6053 228 #define WITH_DESIRED_PROPERTY(type, name, ...) MODEL_DESIRED_PROPERTY(type, name, __VA_ARGS__)
AzureIoTClient 17:fa1bba4c6053 229
AzureIoTClient 4:233dd7616d73 230 /**
AzureIoTClient 4:233dd7616d73 231 * @def WITH_ACTION(name, ...)
AzureIoTClient 4:233dd7616d73 232 * The ::WITH_ACTION macro allows declaring a model action.
AzureIoTClient 4:233dd7616d73 233 *
AzureIoTClient 4:233dd7616d73 234 * @param name Specifies the action name.
AzureIoTClient 4:233dd7616d73 235 * @param argXtype, argXName... Defines the type and name for the X<sup>th</sup>
AzureIoTClient 4:233dd7616d73 236 * argument of the action. The type can be any of
AzureIoTClient 4:233dd7616d73 237 * the primitive types or a struct type.
AzureIoTClient 4:233dd7616d73 238 */
AzureIoTClient 4:233dd7616d73 239 /*Codes_SRS_SERIALIZER_99_039:[WITH_ACTION shall declare an action of the current data provider called as the first macro parameter(name) and having the first parameter called parameter1Name of type parameter1Type, the second parameter named parameter2Name having the type parameter2Type and so on.]*/
AzureIoTClient 4:233dd7616d73 240 #define WITH_ACTION(name, ...) MODEL_ACTION(name, __VA_ARGS__)
AzureIoTClient 4:233dd7616d73 241
AzureIoTClient 17:fa1bba4c6053 242
AzureIoTClient 4:233dd7616d73 243 /**
AzureIoTClient 4:233dd7616d73 244 * @def GET_MODEL_HANDLE(schemaNamespace, modelName)
AzureIoTClient 4:233dd7616d73 245 * The ::GET_MODEL_HANDLE macro returns a model handle that can be used in
AzureIoTClient 4:233dd7616d73 246 * subsequent operations like generating the CSDL schema for the model,
AzureIoTClient 4:233dd7616d73 247 * uploading the schema, creating a device, etc.
AzureIoTClient 4:233dd7616d73 248 *
AzureIoTClient 4:233dd7616d73 249 * @param schemaNamespace The namespace to which the model belongs.
AzureIoTClient 4:233dd7616d73 250 * @param modelName The name of the model.
AzureIoTClient 4:233dd7616d73 251 */
AzureIoTClient 4:233dd7616d73 252 /* Codes_SRS_SERIALIZER_99_110:[ The GET_MODEL_HANDLE function macro shall first register the schema by calling CodeFirst_RegisterSchema, passing schemaNamespace and a pointer to the metadata generated in the schema declaration block.] */
AzureIoTClient 4:233dd7616d73 253 /* Codes_SRS_SERIALIZER_99_094:[ GET_MODEL_HANDLE shall then call Schema_GetModelByName, passing the schemaHandle obtained from CodeFirst_RegisterSchema and modelName arguments, to retrieve the SCHEMA_MODEL_TYPE_HANDLE corresponding to the modelName argument.] */
AzureIoTClient 4:233dd7616d73 254 /* Codes_SRS_SERIALIZER_99_112:[ GET_MODEL_HANDLE will return the handle for the named model.] */
AzureIoTClient 4:233dd7616d73 255 #define GET_MODEL_HANDLE(schemaNamespace, modelName) \
AzureIoTClient 4:233dd7616d73 256 Schema_GetModelByName(CodeFirst_RegisterSchema(TOSTRING(schemaNamespace), &ALL_REFLECTED(schemaNamespace)), #modelName)
AzureIoTClient 4:233dd7616d73 257
AzureIoTClient 4:233dd7616d73 258 /* Codes_SRS_SERIALIZER_01_002: [If the argument serializerIncludePropertyPath is specified, its value shall be passed to CodeFirst_Create.] */
AzureIoTClient 4:233dd7616d73 259 #define CREATE_DEVICE_WITH_INCLUDE_PROPERTY_PATH(schemaNamespace, modelName, serializerIncludePropertyPath) \
AzureIoTClient 4:233dd7616d73 260 (modelName*)CodeFirst_CreateDevice(GET_MODEL_HANDLE(schemaNamespace, modelName), &ALL_REFLECTED(schemaNamespace), sizeof(modelName), serializerIncludePropertyPath)
AzureIoTClient 4:233dd7616d73 261
AzureIoTClient 4:233dd7616d73 262 /* Codes_SRS_SERIALIZER_01_003: [If the argument serializerIncludePropertyPath is not specified, CREATE_MODEL_INSTANCE shall pass false to CodeFirst_Create.] */
AzureIoTClient 4:233dd7616d73 263 #define CREATE_DEVICE_WITHOUT_INCLUDE_PROPERTY_PATH(schemaNamespace, modelName) \
AzureIoTClient 4:233dd7616d73 264 (modelName*)CodeFirst_CreateDevice(GET_MODEL_HANDLE(schemaNamespace, modelName), &ALL_REFLECTED(schemaNamespace), sizeof(modelName), false)
AzureIoTClient 4:233dd7616d73 265
AzureIoTClient 4:233dd7616d73 266 /* Codes_SRS_SERIALIZER_99_104:[ CREATE_MODEL_INSTANCE shall call GET_MODEL_HANDLE, passing schemaNamespace and modelName, to get a model handle representing the model defined in the corresponding schema declaration block.] */
AzureIoTClient 4:233dd7616d73 267 /* Codes_SRS_SERIALIZER_99_106:[ CREATE_MODEL_INSTANCE shall call CodeFirst_CreateDevice, passing the model handle (SCHEMA_MODEL_TYPE_HANDLE]*/
AzureIoTClient 4:233dd7616d73 268 /* Codes_SRS_SERIALIZER_99_107:[ If CodeFirst_CreateDevice fails, CREATE_MODEL_INSTANCE shall return NULL.] */
AzureIoTClient 4:233dd7616d73 269 /* Codes_SRS_SERIALIZER_99_108:[ If CodeFirst_CreateDevice succeeds, CREATE_MODEL_INSTANCE shall return a pointer to an instance of the C struct representing the model for the device.] */
AzureIoTClient 4:233dd7616d73 270 #define CREATE_MODEL_INSTANCE(schemaNamespace, ...) \
AzureIoTClient 4:233dd7616d73 271 IF(DIV2(COUNT_ARG(__VA_ARGS__)), CREATE_DEVICE_WITH_INCLUDE_PROPERTY_PATH, CREATE_DEVICE_WITHOUT_INCLUDE_PROPERTY_PATH) (schemaNamespace, __VA_ARGS__)
AzureIoTClient 4:233dd7616d73 272
AzureIoTClient 4:233dd7616d73 273 /* Codes_SRS_SERIALIZER_99_109:[ DESTROY_MODEL_INSTANCE shall call CodeFirst_DestroyDevice, passing the pointer returned from CREATE_MODEL_INSTANCE, to release all resources associated with the device.] */
AzureIoTClient 4:233dd7616d73 274 #define DESTROY_MODEL_INSTANCE(deviceData) \
AzureIoTClient 4:233dd7616d73 275 CodeFirst_DestroyDevice(deviceData)
AzureIoTClient 4:233dd7616d73 276
AzureIoTClient 4:233dd7616d73 277 /**
AzureIoTClient 4:233dd7616d73 278 * @def SERIALIZE(destination, destinationSize,...)
AzureIoTClient 4:233dd7616d73 279 * This macro produces JSON serialized representation of the properties.
AzureIoTClient 4:233dd7616d73 280 *
AzureIoTClient 4:233dd7616d73 281 * @param destination Pointer to an @c unsigned @c char* that
AzureIoTClient 4:233dd7616d73 282 * will receive the serialized data.
AzureIoTClient 4:233dd7616d73 283 * @param destinationSize Pointer to a @c size_t that gets
AzureIoTClient 4:233dd7616d73 284 * written with the size in bytes of the
AzureIoTClient 4:233dd7616d73 285 * serialized data
AzureIoTClient 4:233dd7616d73 286 * @param property1, property2... A list of property values to send. The
AzureIoTClient 4:233dd7616d73 287 * order in which the properties appear in
AzureIoTClient 4:233dd7616d73 288 * the list does not matter, all values
AzureIoTClient 4:233dd7616d73 289 * will be sent together.
AzureIoTClient 4:233dd7616d73 290 *
AzureIoTClient 4:233dd7616d73 291 */
AzureIoTClient 4:233dd7616d73 292 /*Codes_SRS_SERIALIZER_99_113:[ SERIALIZE shall call CodeFirst_SendAsync, passing a destination, destinationSize, the number of properties to publish, and pointers to the values for each property.] */
AzureIoTClient 4:233dd7616d73 293 /*Codes_SRS_SERIALIZER_99_117:[ If CodeFirst_SendAsync succeeds, SEND will return IOT_AGENT_OK.] */
AzureIoTClient 4:233dd7616d73 294 /*Codes_SRS_SERIALIZER_99_114:[ If CodeFirst_SendAsync fails, SEND shall return IOT_AGENT_SERIALIZE_FAILED.] */
AzureIoTClient 17:fa1bba4c6053 295 #define SERIALIZE(destination, destinationSize,...) CodeFirst_SendAsync(destination, destinationSize, COUNT_ARG(__VA_ARGS__) FOR_EACH_1(ADDRESS_MACRO, __VA_ARGS__))
AzureIoTClient 17:fa1bba4c6053 296
AzureIoTClient 17:fa1bba4c6053 297 #define SERIALIZE_REPORTED_PROPERTIES(destination, destinationSize,...) CodeFirst_SendAsyncReported(destination, destinationSize, COUNT_ARG(__VA_ARGS__) FOR_EACH_1(ADDRESS_MACRO, __VA_ARGS__))
AzureIoTClient 4:233dd7616d73 298
AzureIoTClient 4:233dd7616d73 299 /**
AzureIoTClient 4:233dd7616d73 300 * @def EXECUTE_COMMAND(device, command)
AzureIoTClient 4:233dd7616d73 301 * Any action that is declared in a model must also have an implementation as
AzureIoTClient 4:233dd7616d73 302 * a C function.
AzureIoTClient 4:233dd7616d73 303 *
AzureIoTClient 4:233dd7616d73 304 * @param device Pointer to device data.
AzureIoTClient 4:233dd7616d73 305 * @param command Values that match the arguments declared in the model
AzureIoTClient 4:233dd7616d73 306 * action.
AzureIoTClient 4:233dd7616d73 307 */
AzureIoTClient 4:233dd7616d73 308 /*Codes_SRS_SERIALIZER_02_018: [EXECUTE_COMMAND macro shall call CodeFirst_ExecuteCommand passing device, commandBuffer and commandBufferSize.]*/
AzureIoTClient 4:233dd7616d73 309 #define EXECUTE_COMMAND(device, command) (CodeFirst_ExecuteCommand(device, command))
AzureIoTClient 4:233dd7616d73 310
AzureIoTClient 17:fa1bba4c6053 311 /**
AzureIoTClient 17:fa1bba4c6053 312 * @def INGEST_DESIRED_PROPERTIES(device, desiredProperties)
AzureIoTClient 17:fa1bba4c6053 313 *
AzureIoTClient 17:fa1bba4c6053 314 * @param device return of CodeFirst_CreateDevice.
AzureIoTClient 17:fa1bba4c6053 315 * @param desiredProperties a null terminated string containing in JSON format the desired properties
AzureIoTClient 17:fa1bba4c6053 316 */
AzureIoTClient 17:fa1bba4c6053 317 #define INGEST_DESIRED_PROPERTIES(device, desiredProperties) (CodeFirst_IngestDesiredProperties(device, desiredProperties))
AzureIoTClient 17:fa1bba4c6053 318
AzureIoTClient 4:233dd7616d73 319 /* Helper macros */
AzureIoTClient 4:233dd7616d73 320
AzureIoTClient 4:233dd7616d73 321 /* These macros remove a useless comma from the beginning of an argument list that looks like:
AzureIoTClient 4:233dd7616d73 322 ,x1,y1,x2,y2 */
AzureIoTClient 4:233dd7616d73 323 #ifdef _MSC_VER
AzureIoTClient 4:233dd7616d73 324
AzureIoTClient 4:233dd7616d73 325 #define DROP_FIRST_COMMA(N, x) \
AzureIoTClient 4:233dd7616d73 326 x IFCOMMA_NOFIRST(N)
AzureIoTClient 4:233dd7616d73 327
AzureIoTClient 4:233dd7616d73 328 #define DROP_IF_EMPTY(N, x) \
AzureIoTClient 4:233dd7616d73 329 IF(COUNT_ARG(x),DROP_FIRST_COMMA(N,x),x)
AzureIoTClient 4:233dd7616d73 330
AzureIoTClient 4:233dd7616d73 331 #define DROP_FIRST_COMMA_FROM_ARGS(...) \
AzureIoTClient 4:233dd7616d73 332 FOR_EACH_1_COUNTED(DROP_IF_EMPTY, C1(__VA_ARGS__))
AzureIoTClient 4:233dd7616d73 333
AzureIoTClient 4:233dd7616d73 334 #else
AzureIoTClient 4:233dd7616d73 335
AzureIoTClient 4:233dd7616d73 336 #define DROP_FIRST_COMMA_0(N, x) \
AzureIoTClient 4:233dd7616d73 337 x IFCOMMA_NOFIRST(N)
AzureIoTClient 4:233dd7616d73 338
AzureIoTClient 4:233dd7616d73 339 #define DROP_FIRST_COMMA_1(N, x) \
AzureIoTClient 4:233dd7616d73 340 x
AzureIoTClient 4:233dd7616d73 341
AzureIoTClient 4:233dd7616d73 342 #define DROP_FIRST_COMMA(empty, N, x) \
AzureIoTClient 4:233dd7616d73 343 C2(DROP_FIRST_COMMA_,empty)(N,x)
AzureIoTClient 4:233dd7616d73 344
AzureIoTClient 4:233dd7616d73 345 #define DROP_IF_EMPTY(N, x) \
AzureIoTClient 4:233dd7616d73 346 DROP_FIRST_COMMA(ISEMPTY(x),N,x)
AzureIoTClient 4:233dd7616d73 347
AzureIoTClient 4:233dd7616d73 348 #define DROP_FIRST_COMMA_FROM_ARGS(...) \
AzureIoTClient 4:233dd7616d73 349 FOR_EACH_1_COUNTED(DROP_IF_EMPTY, __VA_ARGS__)
AzureIoTClient 4:233dd7616d73 350
AzureIoTClient 4:233dd7616d73 351 #endif
AzureIoTClient 4:233dd7616d73 352
AzureIoTClient 4:233dd7616d73 353 /* These macros expand a sequence of arguments for DECLARE_MODEL that looks like
AzureIoTClient 4:233dd7616d73 354 WITH_DATA(x, y), WITH_DATA(x2, y2) to a list of arguments consumed by the macro that marshalls a struct, like:
AzureIoTClient 4:233dd7616d73 355 x, y, x2, y2
AzureIoTClient 4:233dd7616d73 356 Actions are discarded, since no marshalling will be done for those when sending state data */
AzureIoTClient 4:233dd7616d73 357 #define TO_AGENT_DT_EXPAND_MODEL_PROPERTY(x, y) ,x,y
AzureIoTClient 17:fa1bba4c6053 358
AzureIoTClient 17:fa1bba4c6053 359 #define TO_AGENT_DT_EXPAND_MODEL_REPORTED_PROPERTY(x, y) ,x,y
AzureIoTClient 17:fa1bba4c6053 360
AzureIoTClient 17:fa1bba4c6053 361 #define TO_AGENT_DT_EXPAND_MODEL_DESIRED_PROPERTY(x, y, ...) ,x,y
AzureIoTClient 17:fa1bba4c6053 362
AzureIoTClient 4:233dd7616d73 363 #define TO_AGENT_DT_EXPAND_MODEL_ACTION(...)
AzureIoTClient 4:233dd7616d73 364
AzureIoTClient 4:233dd7616d73 365 #define TO_AGENT_DT_EXPAND_ELEMENT_ARGS(N, ...) TO_AGENT_DT_EXPAND_##__VA_ARGS__
AzureIoTClient 4:233dd7616d73 366
AzureIoTClient 4:233dd7616d73 367 #define EXPAND_MODEL_ARGS(...) \
AzureIoTClient 4:233dd7616d73 368 FOR_EACH_1_COUNTED(TO_AGENT_DT_EXPAND_ELEMENT_ARGS, __VA_ARGS__)
AzureIoTClient 4:233dd7616d73 369
AzureIoTClient 4:233dd7616d73 370 #define TO_AGENT_DATA_TYPE(name, ...) \
AzureIoTClient 4:233dd7616d73 371 static AGENT_DATA_TYPES_RESULT ToAGENT_DATA_TYPE_##name(AGENT_DATA_TYPE *destination, const name value) \
AzureIoTClient 4:233dd7616d73 372 { \
AzureIoTClient 4:233dd7616d73 373 AGENT_DATA_TYPES_RESULT result = AGENT_DATA_TYPES_OK; \
AzureIoTClient 4:233dd7616d73 374 size_t iMember = 0; \
AzureIoTClient 4:233dd7616d73 375 DEFINITION_THAT_CAN_SUSTAIN_A_COMMA_STEAL(phantomName, 1); \
AzureIoTClient 4:233dd7616d73 376 const char* memberNames[IF(DIV2(C1(COUNT_ARG(__VA_ARGS__))), DIV2(C1(COUNT_ARG(__VA_ARGS__))), 1)] = { 0 }; \
AzureIoTClient 4:233dd7616d73 377 size_t memberCount = sizeof(memberNames) / sizeof(memberNames[0]); \
AzureIoTClient 4:233dd7616d73 378 (void)value; \
AzureIoTClient 4:233dd7616d73 379 if (memberCount == 0) \
AzureIoTClient 17:fa1bba4c6053 380 { \
AzureIoTClient 4:233dd7616d73 381 result = AGENT_DATA_TYPES_OK; \
AzureIoTClient 17:fa1bba4c6053 382 } \
AzureIoTClient 17:fa1bba4c6053 383 else \
AzureIoTClient 4:233dd7616d73 384 { \
AzureIoTClient 4:233dd7616d73 385 AGENT_DATA_TYPE members[sizeof(memberNames) / sizeof(memberNames[0])]; \
AzureIoTClient 4:233dd7616d73 386 DEFINITION_THAT_CAN_SUSTAIN_A_COMMA_STEAL(phantomName, 2); \
AzureIoTClient 4:233dd7616d73 387 FOR_EACH_2(FIELD_AS_STRING, EXPAND_TWICE(__VA_ARGS__)) \
AzureIoTClient 4:233dd7616d73 388 iMember = 0; \
AzureIoTClient 4:233dd7616d73 389 INSTRUCTION_THAT_CAN_SUSTAIN_A_COMMA_STEAL; \
AzureIoTClient 4:233dd7616d73 390 FOR_EACH_2(CREATE_AGENT_DATA_TYPE, EXPAND_TWICE(__VA_ARGS__)) \
AzureIoTClient 4:233dd7616d73 391 INSTRUCTION_THAT_CAN_SUSTAIN_A_COMMA_STEAL; \
AzureIoTClient 4:233dd7616d73 392 result = ((result == AGENT_DATA_TYPES_OK) && (Create_AGENT_DATA_TYPE_from_Members(destination, #name, sizeof(memberNames) / sizeof(memberNames[0]), memberNames, members) == AGENT_DATA_TYPES_OK)) \
AzureIoTClient 4:233dd7616d73 393 ? AGENT_DATA_TYPES_OK \
AzureIoTClient 4:233dd7616d73 394 : AGENT_DATA_TYPES_ERROR; \
AzureIoTClient 4:233dd7616d73 395 { \
AzureIoTClient 4:233dd7616d73 396 size_t jMember; \
AzureIoTClient 4:233dd7616d73 397 for (jMember = 0; jMember < iMember; jMember++) \
AzureIoTClient 4:233dd7616d73 398 { \
AzureIoTClient 4:233dd7616d73 399 Destroy_AGENT_DATA_TYPE(&members[jMember]); \
AzureIoTClient 4:233dd7616d73 400 } \
AzureIoTClient 4:233dd7616d73 401 } \
AzureIoTClient 4:233dd7616d73 402 } \
AzureIoTClient 4:233dd7616d73 403 return result; \
AzureIoTClient 4:233dd7616d73 404 }
AzureIoTClient 4:233dd7616d73 405
AzureIoTClient 4:233dd7616d73 406 #define FIELD_AS_STRING(x,y) memberNames[iMember++] = #y;
AzureIoTClient 4:233dd7616d73 407
AzureIoTClient 4:233dd7616d73 408 #define REFLECTED_LIST_HEAD(name) \
AzureIoTClient 4:233dd7616d73 409 static const REFLECTED_DATA_FROM_DATAPROVIDER ALL_REFLECTED(name) = { &C2(REFLECTED_, C1(DEC(__COUNTER__))) };
AzureIoTClient 4:233dd7616d73 410 #define REFLECTED_STRUCT(name) \
AzureIoTClient 17:fa1bba4c6053 411 static const REFLECTED_SOMETHING C2(REFLECTED_, C1(INC(__COUNTER__))) = { REFLECTION_STRUCT_TYPE, &C2(REFLECTED_, C1(DEC(DEC(__COUNTER__)))), { {0}, {0}, {TOSTRING(name)}, {0}, {0}, {0}, {0}} };
AzureIoTClient 4:233dd7616d73 412 #define REFLECTED_FIELD(XstructName, XfieldType, XfieldName) \
AzureIoTClient 17:fa1bba4c6053 413 static const REFLECTED_SOMETHING C2(REFLECTED_, C1(INC(__COUNTER__))) = { REFLECTION_FIELD_TYPE, &C2(REFLECTED_, C1(DEC(DEC(__COUNTER__)))), { {0}, {0}, {0}, {TOSTRING(XfieldName), TOSTRING(XfieldType), TOSTRING(XstructName)}, {0}, {0}, {0} } };
AzureIoTClient 4:233dd7616d73 414 #define REFLECTED_MODEL(name) \
AzureIoTClient 17:fa1bba4c6053 415 static const REFLECTED_SOMETHING C2(REFLECTED_, C1(INC(__COUNTER__))) = { REFLECTION_MODEL_TYPE, &C2(REFLECTED_, C1(DEC(DEC(__COUNTER__)))), { {0}, {0}, {0}, {0}, {0}, {0}, {TOSTRING(name)} } };
AzureIoTClient 4:233dd7616d73 416 #define REFLECTED_PROPERTY(type, name, modelName) \
AzureIoTClient 17:fa1bba4c6053 417 static const REFLECTED_SOMETHING C2(REFLECTED_, C1(INC(__COUNTER__))) = { REFLECTION_PROPERTY_TYPE, &C2(REFLECTED_, C1(DEC(DEC(__COUNTER__)))), { {0}, {0}, {0}, {0}, {TOSTRING(name), TOSTRING(type), Create_AGENT_DATA_TYPE_From_Ptr_##modelName##name, offsetof(modelName, name), sizeof(type), TOSTRING(modelName)}, {0}, {0} } };
AzureIoTClient 17:fa1bba4c6053 418 #define REFLECTED_REPORTED_PROPERTY(type, name, modelName) \
AzureIoTClient 17:fa1bba4c6053 419 static const REFLECTED_SOMETHING C2(REFLECTED_, C1(INC(__COUNTER__))) = { REFLECTION_REPORTED_PROPERTY_TYPE, &C2(REFLECTED_, C1(DEC(DEC(__COUNTER__)))), { {0}, {TOSTRING(name), TOSTRING(type), Create_AGENT_DATA_TYPE_From_Ptr_##modelName##name, offsetof(modelName, name), sizeof(type), TOSTRING(modelName)}, {0}, {0}, {0}, {0}, {0} } };
AzureIoTClient 17:fa1bba4c6053 420
AzureIoTClient 17:fa1bba4c6053 421
AzureIoTClient 17:fa1bba4c6053 422 #define REFLECTED_DESIRED_PROPERTY_WITH_ON_DESIRED_PROPERTY_CHANGE(type, name, modelName, COUNTER, onDesiredPropertyChange) \
AzureIoTClient 17:fa1bba4c6053 423 static const REFLECTED_SOMETHING C2(REFLECTED_, C1(INC(COUNTER))) = { REFLECTION_DESIRED_PROPERTY_TYPE, &C2(REFLECTED_, C1(DEC(COUNTER))), { {onDesiredPropertyChange, DesiredPropertyInitialize_##modelName##name, DesiredPropertyDeinitialize_##modelName##name, TOSTRING(name), TOSTRING(type), (int(*)(const AGENT_DATA_TYPE*, void*))FromAGENT_DATA_TYPE_##type, offsetof(modelName, name), sizeof(type), TOSTRING(modelName)}, {0}, {0}, {0}, {0}, {0}, {0}} };
AzureIoTClient 17:fa1bba4c6053 424
AzureIoTClient 17:fa1bba4c6053 425 #define REFLECTED_DESIRED_PROPERTY(type, name, modelName, ...) \
AzureIoTClient 17:fa1bba4c6053 426 IF(COUNT_ARG(__VA_ARGS__), \
AzureIoTClient 17:fa1bba4c6053 427 DELAY(REFLECTED_DESIRED_PROPERTY_WITH_ON_DESIRED_PROPERTY_CHANGE)(type, name, modelName,__COUNTER__, __VA_ARGS__), \
AzureIoTClient 17:fa1bba4c6053 428 DELAY(REFLECTED_DESIRED_PROPERTY_WITH_ON_DESIRED_PROPERTY_CHANGE)(type, name, modelName,DEC(__COUNTER__), NULL) \
AzureIoTClient 17:fa1bba4c6053 429 ) \
AzureIoTClient 17:fa1bba4c6053 430
AzureIoTClient 4:233dd7616d73 431 #define REFLECTED_ACTION(name, argc, argv, fn, modelName) \
AzureIoTClient 17:fa1bba4c6053 432 static const REFLECTED_SOMETHING C2(REFLECTED_, C1(INC(__COUNTER__))) = { REFLECTION_ACTION_TYPE, &C2(REFLECTED_, C1(DEC(DEC(__COUNTER__)))), { {0}, {0}, {0}, {0}, {0}, {TOSTRING(name), (0 ? (uintptr_t)("", "") : argc), argv, fn, TOSTRING(modelName)}, {0}} };
AzureIoTClient 4:233dd7616d73 433 #define REFLECTED_END_OF_LIST \
AzureIoTClient 17:fa1bba4c6053 434 static const REFLECTED_SOMETHING C2(REFLECTED_, __COUNTER__) = { REFLECTION_NOTHING, NULL, { {0}, {0}, {0}, {0}, {0}, {0}, {0}} };
AzureIoTClient 4:233dd7616d73 435
AzureIoTClient 4:233dd7616d73 436 #define EXPAND_MODEL_PROPERTY(type, name) EXPAND_ARGS(MODEL_PROPERTY, type, name)
AzureIoTClient 17:fa1bba4c6053 437
AzureIoTClient 17:fa1bba4c6053 438 #define EXPAND_MODEL_REPORTED_PROPERTY(type, name) EXPAND_ARGS(MODEL_REPORTED_PROPERTY, type, name)
AzureIoTClient 17:fa1bba4c6053 439
AzureIoTClient 17:fa1bba4c6053 440 #define EXPAND_MODEL_DESIRED_PROPERTY(type, name, ...) EXPAND_ARGS(MODEL_DESIRED_PROPERTY, type, name, __VA_ARGS__)
AzureIoTClient 17:fa1bba4c6053 441
AzureIoTClient 4:233dd7616d73 442 #define EXPAND_MODEL_ACTION(...) EXPAND_ARGS(MODEL_ACTION, __VA_ARGS__)
AzureIoTClient 4:233dd7616d73 443
AzureIoTClient 4:233dd7616d73 444 #define BUILD_MODEL_STRUCT(elem) INSERT_FIELD_FOR_##elem
AzureIoTClient 4:233dd7616d73 445
AzureIoTClient 4:233dd7616d73 446 #define CREATE_MODEL_ENTITY(modelName, callType, ...) EXPAND_ARGS(CREATE_##callType(modelName, __VA_ARGS__))
AzureIoTClient 4:233dd7616d73 447 #define CREATE_SOMETHING(modelName, ...) EXPAND_ARGS(CREATE_MODEL_ENTITY(modelName, __VA_ARGS__))
AzureIoTClient 4:233dd7616d73 448 #define CREATE_ELEMENT(modelName, elem) EXPAND_ARGS(CREATE_SOMETHING(modelName, EXPAND_ARGS(EXPAND_##elem)))
AzureIoTClient 4:233dd7616d73 449
AzureIoTClient 4:233dd7616d73 450 #define CREATE_MODEL_ELEMENT(modelName, elem) EXPAND_ARGS(CREATE_ELEMENT(modelName, elem))
AzureIoTClient 4:233dd7616d73 451
AzureIoTClient 17:fa1bba4c6053 452
AzureIoTClient 17:fa1bba4c6053 453 #define CREATE_MODEL_ENTITY_GLOBAL_INITIALIZATION(modelName, callType, ...) EXPAND_ARGS(CREATE_GLOBAL_INITIALIZE_##callType(modelName, __VA_ARGS__))
AzureIoTClient 17:fa1bba4c6053 454 #define CREATE_SOMETHING_GLOBAL_INITIALIZATION(modelName, ...) EXPAND_ARGS(CREATE_MODEL_ENTITY_GLOBAL_INITIALIZATION(modelName, __VA_ARGS__))
AzureIoTClient 17:fa1bba4c6053 455 #define CREATE_ELEMENT_GLOBAL_INITIALIZATION(modelName, elem) EXPAND_ARGS(CREATE_SOMETHING_GLOBAL_INITIALIZATION(modelName, EXPAND_ARGS(EXPAND_##elem)))
AzureIoTClient 17:fa1bba4c6053 456 #define CREATE_MODEL_ELEMENT_GLOBAL_INITIALIZE(modelName, elem) EXPAND_ARGS(CREATE_ELEMENT_GLOBAL_INITIALIZATION(modelName, elem))
AzureIoTClient 17:fa1bba4c6053 457
AzureIoTClient 17:fa1bba4c6053 458 #define CREATE_MODEL_ENTITY_GLOBAL_DEINITIALIZATION(modelName, callType, ...) EXPAND_ARGS(CREATE_GLOBAL_DEINITIALIZE_##callType(modelName, __VA_ARGS__))
AzureIoTClient 17:fa1bba4c6053 459 #define CREATE_SOMETHING_GLOBAL_DEINITIALIZATION(modelName, ...) EXPAND_ARGS(CREATE_MODEL_ENTITY_GLOBAL_DEINITIALIZATION(modelName, __VA_ARGS__))
AzureIoTClient 17:fa1bba4c6053 460 #define CREATE_ELEMENT_GLOBAL_DEINITIALIZATION(modelName, elem) EXPAND_ARGS(CREATE_SOMETHING_GLOBAL_DEINITIALIZATION(modelName, EXPAND_ARGS(EXPAND_##elem)))
AzureIoTClient 17:fa1bba4c6053 461 #define CREATE_MODEL_ELEMENT_GLOBAL_DEINITIALIZE(modelName, elem) EXPAND_ARGS(CREATE_ELEMENT_GLOBAL_DEINITIALIZATION(modelName, elem))
AzureIoTClient 17:fa1bba4c6053 462
AzureIoTClient 4:233dd7616d73 463 #define INSERT_FIELD_INTO_STRUCT(x, y) x y;
AzureIoTClient 17:fa1bba4c6053 464
AzureIoTClient 17:fa1bba4c6053 465
AzureIoTClient 4:233dd7616d73 466 #define INSERT_FIELD_FOR_MODEL_PROPERTY(type, name) INSERT_FIELD_INTO_STRUCT(type, name)
AzureIoTClient 17:fa1bba4c6053 467 #define CREATE_GLOBAL_INITIALIZE_MODEL_PROPERTY(modelName, type, name) /*do nothing, this is written by user*/
AzureIoTClient 17:fa1bba4c6053 468 #define CREATE_GLOBAL_DEINITIALIZE_MODEL_PROPERTY(modelName, type, name) /*do nothing, this is user's stuff*/
AzureIoTClient 17:fa1bba4c6053 469
AzureIoTClient 17:fa1bba4c6053 470 /*REPORTED_PROPERTY is not different than regular WITH_DATA*/
AzureIoTClient 17:fa1bba4c6053 471 #define INSERT_FIELD_FOR_MODEL_REPORTED_PROPERTY(type, name) INSERT_FIELD_INTO_STRUCT(type, name)
AzureIoTClient 17:fa1bba4c6053 472 #define CREATE_GLOBAL_INITIALIZE_MODEL_REPORTED_PROPERTY(modelName, type,name) GlobalInitialize_##type((char*)destination+offsetof(modelName, name));
AzureIoTClient 17:fa1bba4c6053 473 #define CREATE_GLOBAL_DEINITIALIZE_MODEL_REPORTED_PROPERTY(modelName, type,name) GlobalDeinitialize_##type((char*)destination+offsetof(modelName, name));
AzureIoTClient 17:fa1bba4c6053 474
AzureIoTClient 17:fa1bba4c6053 475 /*DESIRED_PROPERTY is not different than regular WITH_DATA*/
AzureIoTClient 17:fa1bba4c6053 476 #define INSERT_FIELD_FOR_MODEL_DESIRED_PROPERTY(type, name, ...) INSERT_FIELD_INTO_STRUCT(type, name)
AzureIoTClient 17:fa1bba4c6053 477 #define CREATE_GLOBAL_INITIALIZE_MODEL_DESIRED_PROPERTY(modelName, type, name, ...) /*do nothing*/
AzureIoTClient 17:fa1bba4c6053 478 #define CREATE_GLOBAL_DEINITIALIZE_MODEL_DESIRED_PROPERTY(modelName, type, name, ...) /*do nothing*/
AzureIoTClient 17:fa1bba4c6053 479
AzureIoTClient 4:233dd7616d73 480 #define INSERT_FIELD_FOR_MODEL_ACTION(name, ...) /* action isn't a part of the model struct */
AzureIoTClient 17:fa1bba4c6053 481 #define CREATE_GLOBAL_INITIALIZE_MODEL_ACTION(...) /*do nothing*/
AzureIoTClient 17:fa1bba4c6053 482 #define CREATE_GLOBAL_DEINITIALIZE_MODEL_ACTION(...) /*do nothing*/
AzureIoTClient 4:233dd7616d73 483
AzureIoTClient 4:233dd7616d73 484 #define CREATE_MODEL_PROPERTY(modelName, type, name) \
AzureIoTClient 4:233dd7616d73 485 IMPL_PROPERTY(type, name, modelName)
AzureIoTClient 4:233dd7616d73 486
AzureIoTClient 17:fa1bba4c6053 487 #define CREATE_MODEL_REPORTED_PROPERTY(modelName, type, name) \
AzureIoTClient 17:fa1bba4c6053 488 IMPL_REPORTED_PROPERTY(type, name, modelName)
AzureIoTClient 17:fa1bba4c6053 489
AzureIoTClient 17:fa1bba4c6053 490 #define CREATE_MODEL_DESIRED_PROPERTY(modelName, type, name, ...) \
AzureIoTClient 17:fa1bba4c6053 491 IMPL_DESIRED_PROPERTY(type, name, modelName, __VA_ARGS__)
AzureIoTClient 17:fa1bba4c6053 492
AzureIoTClient 4:233dd7616d73 493 #define IMPL_PROPERTY(propertyType, propertyName, modelName) \
AzureIoTClient 17:fa1bba4c6053 494 static int Create_AGENT_DATA_TYPE_From_Ptr_##modelName##propertyName(void* param, AGENT_DATA_TYPE* dest) \
AzureIoTClient 4:233dd7616d73 495 { \
AzureIoTClient 4:233dd7616d73 496 return C1(ToAGENT_DATA_TYPE_##propertyType)(dest, *(propertyType*)param); \
AzureIoTClient 4:233dd7616d73 497 } \
AzureIoTClient 4:233dd7616d73 498 REFLECTED_PROPERTY(propertyType, propertyName, modelName)
AzureIoTClient 4:233dd7616d73 499
AzureIoTClient 17:fa1bba4c6053 500 #define IMPL_REPORTED_PROPERTY(propertyType, propertyName, modelName) \
AzureIoTClient 17:fa1bba4c6053 501 static int Create_AGENT_DATA_TYPE_From_Ptr_##modelName##propertyName(void* param, AGENT_DATA_TYPE* dest) \
AzureIoTClient 17:fa1bba4c6053 502 { \
AzureIoTClient 17:fa1bba4c6053 503 return C1(ToAGENT_DATA_TYPE_##propertyType)(dest, *(propertyType*)param); \
AzureIoTClient 17:fa1bba4c6053 504 } \
AzureIoTClient 17:fa1bba4c6053 505 REFLECTED_REPORTED_PROPERTY(propertyType, propertyName, modelName)
AzureIoTClient 17:fa1bba4c6053 506
AzureIoTClient 17:fa1bba4c6053 507 #define IMPL_DESIRED_PROPERTY(propertyType, propertyName, modelName, ...) \
AzureIoTClient 17:fa1bba4c6053 508 static void DesiredPropertyInitialize_##modelName##propertyName(void* destination) \
AzureIoTClient 17:fa1bba4c6053 509 { \
AzureIoTClient 17:fa1bba4c6053 510 GlobalInitialize_##propertyType(destination); \
AzureIoTClient 17:fa1bba4c6053 511 } \
AzureIoTClient 17:fa1bba4c6053 512 static void DesiredPropertyDeinitialize_##modelName##propertyName(void* destination) \
AzureIoTClient 17:fa1bba4c6053 513 { \
AzureIoTClient 17:fa1bba4c6053 514 GlobalDeinitialize_##propertyType(destination); \
AzureIoTClient 17:fa1bba4c6053 515 } \
AzureIoTClient 17:fa1bba4c6053 516 REFLECTED_DESIRED_PROPERTY(propertyType, propertyName, modelName, __VA_ARGS__) \
AzureIoTClient 17:fa1bba4c6053 517
AzureIoTClient 4:233dd7616d73 518 #define CREATE_MODEL_ACTION(modelName, actionName, ...) \
AzureIoTClient 4:233dd7616d73 519 DEFINITION_THAT_CAN_SUSTAIN_A_COMMA_STEAL(modelName##actionName, 1); \
AzureIoTClient 4:233dd7616d73 520 EXECUTE_COMMAND_RESULT actionName (modelName* device FOR_EACH_2(DEFINE_FUNCTION_PARAMETER, __VA_ARGS__)); \
AzureIoTClient 4:233dd7616d73 521 static EXECUTE_COMMAND_RESULT C2(actionName, WRAPPER)(void* device, size_t ParameterCount, const AGENT_DATA_TYPE* values); \
AzureIoTClient 4:233dd7616d73 522 /*for macro purposes, this array always has at least 1 element*/ \
AzureIoTClient 4:233dd7616d73 523 /*Codes_SRS_SERIALIZER_99_043:[ It is valid for a method not to have any parameters.]*/ \
AzureIoTClient 4:233dd7616d73 524 DEFINITION_THAT_CAN_SUSTAIN_A_COMMA_STEAL(actionName, 1); \
AzureIoTClient 4:233dd7616d73 525 static const WRAPPER_ARGUMENT C2(actionName, WRAPPERARGUMENTS)[DIV2(INC(INC(COUNT_ARG(__VA_ARGS__))))] = { FOR_EACH_2_COUNTED(MAKE_WRAPPER_ARGUMENT, __VA_ARGS__) IFCOMMA(INC(INC(COUNT_ARG(__VA_ARGS__)))) {0} }; \
AzureIoTClient 4:233dd7616d73 526 REFLECTED_ACTION(actionName, DIV2(COUNT_ARG(__VA_ARGS__)), C2(actionName, WRAPPERARGUMENTS), C2(actionName, WRAPPER), modelName) \
AzureIoTClient 4:233dd7616d73 527 /*Codes_SRS_SERIALIZER_99_040:[ In addition to declaring the function, DECLARE_IOT_METHOD shall provide a definition for a wrapper that takes as parameters a size_t parameterCount and const AGENT_DATA_TYPE*.] */ \
AzureIoTClient 4:233dd7616d73 528 /*Codes_SRS_SERIALIZER_99_041:[ This wrapper shall convert all the arguments to predefined types and then call the function written by the data provider developer.]*/ \
AzureIoTClient 4:233dd7616d73 529 static EXECUTE_COMMAND_RESULT C2(actionName, WRAPPER)(void* device, size_t ParameterCount, const AGENT_DATA_TYPE* values) \
AzureIoTClient 4:233dd7616d73 530 { \
AzureIoTClient 4:233dd7616d73 531 EXECUTE_COMMAND_RESULT result; \
AzureIoTClient 4:233dd7616d73 532 DEFINITION_THAT_CAN_SUSTAIN_A_COMMA_STEAL(actionName, 2); \
AzureIoTClient 4:233dd7616d73 533 /*Codes_SRS_SERIALIZER_99_045:[ If the number of passed parameters doesn't match the number of declared parameters, wrapper execution shall fail and return DATA_PROVIDER_INVALID_ARG;]*/ \
AzureIoTClient 4:233dd7616d73 534 if(ParameterCount != DIV2(COUNT_ARG(__VA_ARGS__))) \
AzureIoTClient 4:233dd7616d73 535 { \
AzureIoTClient 4:233dd7616d73 536 result = EXECUTE_COMMAND_ERROR; \
AzureIoTClient 4:233dd7616d73 537 } \
AzureIoTClient 4:233dd7616d73 538 else \
AzureIoTClient 4:233dd7616d73 539 { \
AzureIoTClient 4:233dd7616d73 540 /*the below line takes care of initialized but not referenced parameter warning*/ \
AzureIoTClient 4:233dd7616d73 541 DEFINITION_THAT_CAN_SUSTAIN_A_COMMA_STEAL(actionName, 3); \
AzureIoTClient 4:233dd7616d73 542 IF(DIV2(COUNT_ARG(__VA_ARGS__)), size_t iParameter = 0;, ) \
AzureIoTClient 4:233dd7616d73 543 DEFINITION_THAT_CAN_SUSTAIN_A_COMMA_STEAL(actionName, 4); \
AzureIoTClient 4:233dd7616d73 544 /*the below line takes care of an unused parameter when values is really never questioned*/ \
AzureIoTClient 4:233dd7616d73 545 DEFINITION_THAT_CAN_SUSTAIN_A_COMMA_STEAL(actionName, 5); \
AzureIoTClient 4:233dd7616d73 546 FOR_EACH_2(DEFINE_LOCAL_PARAMETER, __VA_ARGS__) \
AzureIoTClient 4:233dd7616d73 547 DEFINITION_THAT_CAN_SUSTAIN_A_COMMA_STEAL(actionName, 6); \
AzureIoTClient 4:233dd7616d73 548 IF(DIV2(COUNT_ARG(__VA_ARGS__)), , (void)values;) \
AzureIoTClient 4:233dd7616d73 549 INSTRUCTION_THAT_CAN_SUSTAIN_A_COMMA_STEAL; \
AzureIoTClient 4:233dd7616d73 550 FOR_EACH_2(START_BUILD_LOCAL_PARAMETER, __VA_ARGS__) \
AzureIoTClient 4:233dd7616d73 551 INSTRUCTION_THAT_CAN_SUSTAIN_A_COMMA_STEAL; \
AzureIoTClient 4:233dd7616d73 552 result = actionName((modelName*)device FOR_EACH_2(PUSH_LOCAL_PARAMETER, __VA_ARGS__)); \
AzureIoTClient 17:fa1bba4c6053 553 FOR_EACH_2_REVERSE(END_BUILD_LOCAL_PARAMETER, __VA_ARGS__) \
AzureIoTClient 4:233dd7616d73 554 } \
AzureIoTClient 4:233dd7616d73 555 return result; \
AzureIoTClient 4:233dd7616d73 556 }
AzureIoTClient 4:233dd7616d73 557
AzureIoTClient 4:233dd7616d73 558 #define CREATE_AGENT_DATA_TYPE(type, name) \
AzureIoTClient 4:233dd7616d73 559 result = (( result==AGENT_DATA_TYPES_OK) && (ToAGENT_DATA_TYPE_##type( &(members[iMember]), value.name) == AGENT_DATA_TYPES_OK))?AGENT_DATA_TYPES_OK:AGENT_DATA_TYPES_ERROR; \
AzureIoTClient 4:233dd7616d73 560 iMember+= ((result==AGENT_DATA_TYPES_OK)?1:0);
AzureIoTClient 4:233dd7616d73 561
AzureIoTClient 4:233dd7616d73 562 #define BUILD_DESTINATION_FIELD(type, name) \
AzureIoTClient 4:233dd7616d73 563 if(result == AGENT_DATA_TYPES_OK) \
AzureIoTClient 4:233dd7616d73 564 { \
AzureIoTClient 4:233dd7616d73 565 size_t i; \
AzureIoTClient 4:233dd7616d73 566 bool wasFieldConverted = false; \
AzureIoTClient 4:233dd7616d73 567 for (i = 0; i < source->value.edmComplexType.nMembers; i++) \
AzureIoTClient 4:233dd7616d73 568 { \
AzureIoTClient 4:233dd7616d73 569 /*the name of the field of the complex type must match the name of the field of the structure (parameter name here)*/ \
AzureIoTClient 4:233dd7616d73 570 if (strcmp(source->value.edmComplexType.fields[i].fieldName, TOSTRING(name)) == 0) \
AzureIoTClient 4:233dd7616d73 571 { /*Codes_SRS_SERIALIZER_99_017:[ These types can either be one of the types mentioned in WITH_DATA or it can be a type introduced by a previous DECLARE_STRUCT.]*/ \
AzureIoTClient 4:233dd7616d73 572 wasFieldConverted = (C2(FromAGENT_DATA_TYPE_, type)(source->value.edmComplexType.fields[i].value, &(destination->name)) == AGENT_DATA_TYPES_OK); \
AzureIoTClient 4:233dd7616d73 573 break; \
AzureIoTClient 4:233dd7616d73 574 } \
AzureIoTClient 4:233dd7616d73 575 } \
AzureIoTClient 4:233dd7616d73 576 result = (wasFieldConverted == true)? AGENT_DATA_TYPES_OK: AGENT_DATA_TYPES_INVALID_ARG; \
AzureIoTClient 4:233dd7616d73 577 } \
AzureIoTClient 4:233dd7616d73 578 else \
AzureIoTClient 4:233dd7616d73 579 { \
AzureIoTClient 4:233dd7616d73 580 /*fallthrough*/ \
AzureIoTClient 4:233dd7616d73 581 }
AzureIoTClient 4:233dd7616d73 582
AzureIoTClient 4:233dd7616d73 583 #define UNBUILD_DESTINATION_FIELD(value, type, name) \
AzureIoTClient 4:233dd7616d73 584 C2(destroyLocalParameter, type)(&(value->name));
AzureIoTClient 4:233dd7616d73 585
AzureIoTClient 4:233dd7616d73 586
AzureIoTClient 4:233dd7616d73 587 #define ADDRESS_MACRO(x) ,&x
AzureIoTClient 4:233dd7616d73 588
AzureIoTClient 4:233dd7616d73 589 #define KEEP_FIRST_(X, ...) X
AzureIoTClient 4:233dd7616d73 590 #ifdef _MSC_VER
AzureIoTClient 4:233dd7616d73 591 #define KEEP_FIRST(X) KEEP_FIRST_ LPAREN X)
AzureIoTClient 4:233dd7616d73 592 #else
AzureIoTClient 4:233dd7616d73 593 #define KEEP_FIRST(X) KEEP_FIRST_(X)
AzureIoTClient 4:233dd7616d73 594 #endif
AzureIoTClient 4:233dd7616d73 595
AzureIoTClient 4:233dd7616d73 596 #define PROMOTIONMAP_float double, double
AzureIoTClient 4:233dd7616d73 597 #define PROMOTIONMAP_int8_t int, int
AzureIoTClient 4:233dd7616d73 598 #define PROMOTIONMAP_uint8_t int, int
AzureIoTClient 4:233dd7616d73 599 #define PROMOTIONMAP_int16_t int, int
AzureIoTClient 4:233dd7616d73 600 #define PROMOTIONMAP__Bool int, int
AzureIoTClient 4:233dd7616d73 601 #define PROMOTIONMAP_bool int, int
AzureIoTClient 4:233dd7616d73 602
AzureIoTClient 4:233dd7616d73 603 #define CASTMAP_float (float), (float)
AzureIoTClient 4:233dd7616d73 604 #define CASTMAP_int8_t (int8_t), (int8_t)
AzureIoTClient 4:233dd7616d73 605 #define CASTMAP_uint8_t (uint8_t), (uint8_t)
AzureIoTClient 4:233dd7616d73 606 #define CASTMAP_int16_t (int16_t), (int16_t)
AzureIoTClient 4:233dd7616d73 607 #define CASTMAP__Bool 0!=, 0!=
AzureIoTClient 4:233dd7616d73 608 #define CASTMAP_bool 0!=, 0!=
AzureIoTClient 4:233dd7616d73 609
AzureIoTClient 4:233dd7616d73 610 #define EMPTY_TOKEN
AzureIoTClient 4:233dd7616d73 611
AzureIoTClient 4:233dd7616d73 612 #define ANOTHERIF(x) C2(ANOTHERIF,x)
AzureIoTClient 4:233dd7616d73 613 #define ANOTHERIF0(a,b) a
AzureIoTClient 4:233dd7616d73 614 #define ANOTHERIF1(a,b) b
AzureIoTClient 4:233dd7616d73 615 #define ANOTHERIF2(a,b) b
AzureIoTClient 4:233dd7616d73 616 #define ANOTHERIF3(a,b) b
AzureIoTClient 4:233dd7616d73 617 #define ANOTHERIF4(a,b) b
AzureIoTClient 4:233dd7616d73 618 #define ANOTHERIF5(a,b) b
AzureIoTClient 4:233dd7616d73 619 #define ANOTHERIF6(a,b) b
AzureIoTClient 4:233dd7616d73 620 #define ANOTHERIF7(a,b) b
AzureIoTClient 4:233dd7616d73 621 #define ANOTHERIF8(a,b) b
AzureIoTClient 4:233dd7616d73 622 #define ANOTHERIF9(a,b) b
AzureIoTClient 4:233dd7616d73 623 #define ANOTHERIF10(a,b) b
AzureIoTClient 4:233dd7616d73 624 #define ANOTHERIF11(a,b) b
AzureIoTClient 4:233dd7616d73 625 #define ANOTHERIF12(a,b) b
AzureIoTClient 4:233dd7616d73 626
AzureIoTClient 4:233dd7616d73 627 #define MAP_PROMOTED_TYPE(X) ANOTHERIF(DEC(COUNT_ARG(PROMOTIONMAP_##X))) (X, KEEP_FIRST(PROMOTIONMAP_##X))
AzureIoTClient 4:233dd7616d73 628 #define MAP_CAST_TYPE(X) ANOTHERIF(DEC(COUNT_ARG(CASTMAP_##X))) (EMPTY_TOKEN, KEEP_FIRST(CASTMAP_##X) )
AzureIoTClient 4:233dd7616d73 629
AzureIoTClient 4:233dd7616d73 630 #define IFCOMMA(N) C2(IFCOMMA_, N)
AzureIoTClient 4:233dd7616d73 631 #define IFCOMMA_0
AzureIoTClient 4:233dd7616d73 632 #define IFCOMMA_2
AzureIoTClient 4:233dd7616d73 633 #define IFCOMMA_4 ,
AzureIoTClient 4:233dd7616d73 634 #define IFCOMMA_6 ,
AzureIoTClient 4:233dd7616d73 635 #define IFCOMMA_8 ,
AzureIoTClient 4:233dd7616d73 636 #define IFCOMMA_10 ,
AzureIoTClient 4:233dd7616d73 637 #define IFCOMMA_12 ,
AzureIoTClient 4:233dd7616d73 638 #define IFCOMMA_14 ,
AzureIoTClient 4:233dd7616d73 639 #define IFCOMMA_16 ,
AzureIoTClient 4:233dd7616d73 640 #define IFCOMMA_18 ,
AzureIoTClient 4:233dd7616d73 641 #define IFCOMMA_20 ,
AzureIoTClient 4:233dd7616d73 642 #define IFCOMMA_22 ,
AzureIoTClient 4:233dd7616d73 643 #define IFCOMMA_24 ,
AzureIoTClient 4:233dd7616d73 644 #define IFCOMMA_26 ,
AzureIoTClient 4:233dd7616d73 645 #define IFCOMMA_28 ,
AzureIoTClient 4:233dd7616d73 646 #define IFCOMMA_30 ,
AzureIoTClient 4:233dd7616d73 647 #define IFCOMMA_32 ,
AzureIoTClient 4:233dd7616d73 648 #define IFCOMMA_34 ,
AzureIoTClient 4:233dd7616d73 649 #define IFCOMMA_36 ,
AzureIoTClient 4:233dd7616d73 650 #define IFCOMMA_38 ,
AzureIoTClient 4:233dd7616d73 651 #define IFCOMMA_40 ,
AzureIoTClient 4:233dd7616d73 652 #define IFCOMMA_42 ,
AzureIoTClient 4:233dd7616d73 653 #define IFCOMMA_44 ,
AzureIoTClient 4:233dd7616d73 654 #define IFCOMMA_46 ,
AzureIoTClient 4:233dd7616d73 655 #define IFCOMMA_48 ,
AzureIoTClient 4:233dd7616d73 656 #define IFCOMMA_50 ,
AzureIoTClient 4:233dd7616d73 657 #define IFCOMMA_52 ,
AzureIoTClient 4:233dd7616d73 658 #define IFCOMMA_54 ,
AzureIoTClient 4:233dd7616d73 659 #define IFCOMMA_56 ,
AzureIoTClient 4:233dd7616d73 660 #define IFCOMMA_58 ,
AzureIoTClient 4:233dd7616d73 661 #define IFCOMMA_60 ,
AzureIoTClient 4:233dd7616d73 662 #define IFCOMMA_62 ,
AzureIoTClient 4:233dd7616d73 663 #define IFCOMMA_64 ,
AzureIoTClient 4:233dd7616d73 664 #define IFCOMMA_66 ,
AzureIoTClient 4:233dd7616d73 665 #define IFCOMMA_68 ,
AzureIoTClient 4:233dd7616d73 666 #define IFCOMMA_70 ,
AzureIoTClient 4:233dd7616d73 667 #define IFCOMMA_72 ,
AzureIoTClient 4:233dd7616d73 668 #define IFCOMMA_74 ,
AzureIoTClient 4:233dd7616d73 669 #define IFCOMMA_76 ,
AzureIoTClient 4:233dd7616d73 670 #define IFCOMMA_78 ,
AzureIoTClient 4:233dd7616d73 671 #define IFCOMMA_80 ,
AzureIoTClient 4:233dd7616d73 672 #define IFCOMMA_82 ,
AzureIoTClient 4:233dd7616d73 673 #define IFCOMMA_84 ,
AzureIoTClient 4:233dd7616d73 674 #define IFCOMMA_86 ,
AzureIoTClient 4:233dd7616d73 675 #define IFCOMMA_88 ,
AzureIoTClient 4:233dd7616d73 676 #define IFCOMMA_90 ,
AzureIoTClient 4:233dd7616d73 677 #define IFCOMMA_92 ,
AzureIoTClient 4:233dd7616d73 678 #define IFCOMMA_94 ,
AzureIoTClient 4:233dd7616d73 679 #define IFCOMMA_96 ,
AzureIoTClient 4:233dd7616d73 680 #define IFCOMMA_98 ,
AzureIoTClient 4:233dd7616d73 681 #define IFCOMMA_100 ,
AzureIoTClient 4:233dd7616d73 682 #define IFCOMMA_102 ,
AzureIoTClient 4:233dd7616d73 683 #define IFCOMMA_104 ,
AzureIoTClient 4:233dd7616d73 684 #define IFCOMMA_106 ,
AzureIoTClient 4:233dd7616d73 685 #define IFCOMMA_108 ,
AzureIoTClient 4:233dd7616d73 686 #define IFCOMMA_110 ,
AzureIoTClient 4:233dd7616d73 687 #define IFCOMMA_112 ,
AzureIoTClient 4:233dd7616d73 688 #define IFCOMMA_114 ,
AzureIoTClient 4:233dd7616d73 689 #define IFCOMMA_116 ,
AzureIoTClient 4:233dd7616d73 690 #define IFCOMMA_118 ,
AzureIoTClient 4:233dd7616d73 691 #define IFCOMMA_120 ,
AzureIoTClient 4:233dd7616d73 692 #define IFCOMMA_122 ,
AzureIoTClient 4:233dd7616d73 693 #define IFCOMMA_124 ,
AzureIoTClient 4:233dd7616d73 694 #define IFCOMMA_126 ,
AzureIoTClient 4:233dd7616d73 695 #define IFCOMMA_128 ,
AzureIoTClient 4:233dd7616d73 696
AzureIoTClient 17:fa1bba4c6053 697 #define DEFINE_LOCAL_PARAMETER(type, name) type C2(name,_local); GlobalInitialize_##type(& C2(name, _local));
AzureIoTClient 4:233dd7616d73 698
AzureIoTClient 4:233dd7616d73 699 #define START_BUILD_LOCAL_PARAMETER(type, name) \
AzureIoTClient 4:233dd7616d73 700 if (C2(FromAGENT_DATA_TYPE_, type)(&values[iParameter], &C2(name, _local)) != AGENT_DATA_TYPES_OK) \
AzureIoTClient 4:233dd7616d73 701 { \
AzureIoTClient 4:233dd7616d73 702 /*Codes_SRS_SERIALIZER_99_046:[ If the types of the parameters do not match the declared types, DATAPROVIDER_INVALID_ARG shall be returned.]*/ \
AzureIoTClient 4:233dd7616d73 703 result = EXECUTE_COMMAND_ERROR; \
AzureIoTClient 4:233dd7616d73 704 }\
AzureIoTClient 4:233dd7616d73 705 else \
AzureIoTClient 4:233dd7616d73 706 { \
AzureIoTClient 4:233dd7616d73 707 iParameter++;
AzureIoTClient 4:233dd7616d73 708
AzureIoTClient 4:233dd7616d73 709 #define END_BUILD_LOCAL_PARAMETER(type, name) \
AzureIoTClient 4:233dd7616d73 710 (void)C2(destroyLocalParameter, type)(&C2(name, _local)); \
AzureIoTClient 4:233dd7616d73 711 }
AzureIoTClient 4:233dd7616d73 712
AzureIoTClient 4:233dd7616d73 713 /*The following constructs have been devised to work around the precompiler bug of Visual Studio 2005, version 14.00.50727.42*/
AzureIoTClient 4:233dd7616d73 714 /* The bug is explained in https://connect.microsoft.com/VisualStudio/feedback/details/278752/comma-missing-when-using-va-args */
AzureIoTClient 4:233dd7616d73 715 /*A short description is: preprocessor is myteriously eating commas ','.
AzureIoTClient 4:233dd7616d73 716 In order to feed the appetite of the preprocessor, several constructs have
AzureIoTClient 4:233dd7616d73 717 been devised that can sustain a missing ',' while still compiling and while still doing nothing
AzureIoTClient 4:233dd7616d73 718 and while hopefully being eliminated from the code based on "doesn't do anything" so no code size penalty
AzureIoTClient 4:233dd7616d73 719 */
AzureIoTClient 4:233dd7616d73 720
AzureIoTClient 4:233dd7616d73 721 /*the reason why all these constructs work is:
AzureIoTClient 4:233dd7616d73 722 if two strings separated by a comma will lose the comma (myteriously) then they will become just one string:
AzureIoTClient 4:233dd7616d73 723 "a", "b" ------Preprocessor------> "a" "b" -----Compiler----> "ab"
AzureIoTClient 4:233dd7616d73 724 */
AzureIoTClient 4:233dd7616d73 725
AzureIoTClient 4:233dd7616d73 726 #define LOTS_OF_COMMA_TO_BE_EATEN /*there were witnesses where as many as THREE commas have been eaten!*/ \
AzureIoTClient 4:233dd7616d73 727 "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"
AzureIoTClient 4:233dd7616d73 728 #define DEFINITION_THAT_CAN_SUSTAIN_A_COMMA_STEAL(name, instance) static const char* eatThese_COMMA_##name##instance[] = {LOTS_OF_COMMA_TO_BE_EATEN}
AzureIoTClient 4:233dd7616d73 729 #define INSTRUCTION_THAT_CAN_SUSTAIN_A_COMMA_STEAL 0?LOTS_OF_COMMA_TO_BE_EATEN:LOTS_OF_COMMA_TO_BE_EATEN
AzureIoTClient 4:233dd7616d73 730
AzureIoTClient 4:233dd7616d73 731 #define PUSH_LOCAL_PARAMETER(type, name) , C2(name, _local)
AzureIoTClient 4:233dd7616d73 732 #define DEFINE_FUNCTION_PARAMETER(type, name) , type name
AzureIoTClient 4:233dd7616d73 733 #define MAKE_WRAPPER_ARGUMENT(N, type, name) {TOSTRING(type), TOSTRING(name)} IFCOMMA(N)
AzureIoTClient 4:233dd7616d73 734
AzureIoTClient 4:233dd7616d73 735 /*Codes_SRS_SERIALIZER_99_019:[ Create_AGENT_DATA_TYPE_from_DOUBLE]*/
AzureIoTClient 4:233dd7616d73 736 /*Codes_SRS_SERIALIZER_99_004:[ The propertyType can be any of the following data types: double]*/
AzureIoTClient 4:233dd7616d73 737 static AGENT_DATA_TYPES_RESULT C2(ToAGENT_DATA_TYPE_, double)(AGENT_DATA_TYPE* dest, double source)
AzureIoTClient 4:233dd7616d73 738 {
AzureIoTClient 4:233dd7616d73 739 return Create_AGENT_DATA_TYPE_from_DOUBLE(dest, source);
AzureIoTClient 4:233dd7616d73 740 }
AzureIoTClient 4:233dd7616d73 741
AzureIoTClient 4:233dd7616d73 742 static AGENT_DATA_TYPES_RESULT C2(FromAGENT_DATA_TYPE_, double)(const AGENT_DATA_TYPE* agentData, double* dest)
AzureIoTClient 4:233dd7616d73 743 {
AzureIoTClient 4:233dd7616d73 744 AGENT_DATA_TYPES_RESULT result;
AzureIoTClient 4:233dd7616d73 745 if (agentData->type != EDM_DOUBLE_TYPE)
AzureIoTClient 4:233dd7616d73 746 {
AzureIoTClient 4:233dd7616d73 747 result = AGENT_DATA_TYPES_INVALID_ARG;
AzureIoTClient 4:233dd7616d73 748 }
AzureIoTClient 4:233dd7616d73 749 else
AzureIoTClient 4:233dd7616d73 750 {
AzureIoTClient 4:233dd7616d73 751 *dest = agentData->value.edmDouble.value;
AzureIoTClient 4:233dd7616d73 752 result = AGENT_DATA_TYPES_OK;
AzureIoTClient 4:233dd7616d73 753 }
AzureIoTClient 4:233dd7616d73 754 return result;
AzureIoTClient 4:233dd7616d73 755 }
AzureIoTClient 4:233dd7616d73 756
AzureIoTClient 17:fa1bba4c6053 757 static void C2(GlobalInitialize_, double)(void* dest)
AzureIoTClient 17:fa1bba4c6053 758 {
AzureIoTClient 17:fa1bba4c6053 759 *(double*)dest = 0.0;
AzureIoTClient 17:fa1bba4c6053 760 }
AzureIoTClient 17:fa1bba4c6053 761
AzureIoTClient 17:fa1bba4c6053 762 static void C2(GlobalDeinitialize_, double)(void* dest)
AzureIoTClient 17:fa1bba4c6053 763 {
AzureIoTClient 17:fa1bba4c6053 764 (void)(dest);
AzureIoTClient 17:fa1bba4c6053 765 }
AzureIoTClient 17:fa1bba4c6053 766
AzureIoTClient 4:233dd7616d73 767 /*Codes_SRS_SERIALIZER_99_021:[ Create_AGENT_DATA_TYPE_from_FLOAT]*/
AzureIoTClient 4:233dd7616d73 768 /*Codes_SRS_SERIALIZER_99_006:[ float]*/
AzureIoTClient 4:233dd7616d73 769 static AGENT_DATA_TYPES_RESULT C2(ToAGENT_DATA_TYPE_, float)(AGENT_DATA_TYPE* dest, float source)
AzureIoTClient 4:233dd7616d73 770 {
AzureIoTClient 4:233dd7616d73 771 return Create_AGENT_DATA_TYPE_from_FLOAT(dest, source);
AzureIoTClient 4:233dd7616d73 772 }
AzureIoTClient 4:233dd7616d73 773
AzureIoTClient 4:233dd7616d73 774 static AGENT_DATA_TYPES_RESULT C2(FromAGENT_DATA_TYPE_, float)(const AGENT_DATA_TYPE* agentData, float* dest)
AzureIoTClient 4:233dd7616d73 775 {
AzureIoTClient 4:233dd7616d73 776 AGENT_DATA_TYPES_RESULT result;
AzureIoTClient 4:233dd7616d73 777 if (agentData->type != EDM_SINGLE_TYPE)
AzureIoTClient 4:233dd7616d73 778 {
AzureIoTClient 4:233dd7616d73 779 result = AGENT_DATA_TYPES_INVALID_ARG;
AzureIoTClient 4:233dd7616d73 780 }
AzureIoTClient 4:233dd7616d73 781 else
AzureIoTClient 4:233dd7616d73 782 {
AzureIoTClient 4:233dd7616d73 783 *dest = agentData->value.edmSingle.value;
AzureIoTClient 4:233dd7616d73 784 result = AGENT_DATA_TYPES_OK;
AzureIoTClient 4:233dd7616d73 785 }
AzureIoTClient 4:233dd7616d73 786 return result;
AzureIoTClient 4:233dd7616d73 787 }
AzureIoTClient 4:233dd7616d73 788
AzureIoTClient 17:fa1bba4c6053 789 static void C2(GlobalInitialize_, float)(void* dest)
AzureIoTClient 17:fa1bba4c6053 790 {
AzureIoTClient 17:fa1bba4c6053 791 *(float*)dest = 0.0f;
AzureIoTClient 17:fa1bba4c6053 792 }
AzureIoTClient 17:fa1bba4c6053 793
AzureIoTClient 17:fa1bba4c6053 794 static void C2(GlobalDeinitialize_, float)(void* dest)
AzureIoTClient 17:fa1bba4c6053 795 {
AzureIoTClient 17:fa1bba4c6053 796 (void)(dest);
AzureIoTClient 17:fa1bba4c6053 797 }
AzureIoTClient 17:fa1bba4c6053 798
AzureIoTClient 4:233dd7616d73 799
AzureIoTClient 4:233dd7616d73 800 /*Codes_SRS_SERIALIZER_99_020:[ Create_AGENT_DATA_TYPE_from_SINT32]*/
AzureIoTClient 4:233dd7616d73 801 /*Codes_SRS_SERIALIZER_99_005:[ int], */
AzureIoTClient 4:233dd7616d73 802 static AGENT_DATA_TYPES_RESULT C2(ToAGENT_DATA_TYPE_, int)(AGENT_DATA_TYPE* dest, int source)
AzureIoTClient 4:233dd7616d73 803 {
AzureIoTClient 4:233dd7616d73 804 return Create_AGENT_DATA_TYPE_from_SINT32(dest, source);
AzureIoTClient 4:233dd7616d73 805 }
AzureIoTClient 4:233dd7616d73 806
AzureIoTClient 4:233dd7616d73 807 static AGENT_DATA_TYPES_RESULT C2(FromAGENT_DATA_TYPE_, int)(const AGENT_DATA_TYPE* agentData, int* dest)
AzureIoTClient 4:233dd7616d73 808 {
AzureIoTClient 4:233dd7616d73 809 AGENT_DATA_TYPES_RESULT result;
AzureIoTClient 4:233dd7616d73 810 if (agentData->type != EDM_INT32_TYPE)
AzureIoTClient 4:233dd7616d73 811 {
AzureIoTClient 4:233dd7616d73 812 result = AGENT_DATA_TYPES_INVALID_ARG;
AzureIoTClient 4:233dd7616d73 813 }
AzureIoTClient 4:233dd7616d73 814 else
AzureIoTClient 4:233dd7616d73 815 {
AzureIoTClient 4:233dd7616d73 816 *dest = agentData->value.edmInt32.value;
AzureIoTClient 4:233dd7616d73 817 result = AGENT_DATA_TYPES_OK;
AzureIoTClient 4:233dd7616d73 818 }
AzureIoTClient 4:233dd7616d73 819 return result;
AzureIoTClient 4:233dd7616d73 820 }
AzureIoTClient 4:233dd7616d73 821
AzureIoTClient 17:fa1bba4c6053 822 static void C2(GlobalInitialize_, int)(void* dest)
AzureIoTClient 17:fa1bba4c6053 823 {
AzureIoTClient 17:fa1bba4c6053 824 *(int*)dest = 0;
AzureIoTClient 17:fa1bba4c6053 825 }
AzureIoTClient 17:fa1bba4c6053 826
AzureIoTClient 17:fa1bba4c6053 827 static void C2(GlobalDeinitialize_, int)(void* dest)
AzureIoTClient 17:fa1bba4c6053 828 {
AzureIoTClient 17:fa1bba4c6053 829 (void)(dest);
AzureIoTClient 17:fa1bba4c6053 830 }
AzureIoTClient 17:fa1bba4c6053 831
AzureIoTClient 4:233dd7616d73 832 /*Codes_SRS_SERIALIZER_99_022:[ Create_AGENT_DATA_TYPE_from_SINT64]*/
AzureIoTClient 4:233dd7616d73 833 /*Codes_SRS_SERIALIZER_99_007:[ long]*/
AzureIoTClient 4:233dd7616d73 834 static AGENT_DATA_TYPES_RESULT C2(ToAGENT_DATA_TYPE_, long)(AGENT_DATA_TYPE* dest, long source)
AzureIoTClient 4:233dd7616d73 835 {
AzureIoTClient 4:233dd7616d73 836 return Create_AGENT_DATA_TYPE_from_SINT64(dest, source);
AzureIoTClient 4:233dd7616d73 837 }
AzureIoTClient 4:233dd7616d73 838
AzureIoTClient 4:233dd7616d73 839 static AGENT_DATA_TYPES_RESULT C2(FromAGENT_DATA_TYPE_, long)(const AGENT_DATA_TYPE* agentData, long* dest)
AzureIoTClient 4:233dd7616d73 840 {
AzureIoTClient 4:233dd7616d73 841 AGENT_DATA_TYPES_RESULT result;
AzureIoTClient 4:233dd7616d73 842 if (agentData->type != EDM_INT64_TYPE)
AzureIoTClient 4:233dd7616d73 843 {
AzureIoTClient 4:233dd7616d73 844 result = AGENT_DATA_TYPES_INVALID_ARG;
AzureIoTClient 4:233dd7616d73 845 }
AzureIoTClient 4:233dd7616d73 846 else
AzureIoTClient 4:233dd7616d73 847 {
AzureIoTClient 4:233dd7616d73 848 *dest = (long)agentData->value.edmInt64.value;
AzureIoTClient 4:233dd7616d73 849 result = AGENT_DATA_TYPES_OK;
AzureIoTClient 4:233dd7616d73 850 }
AzureIoTClient 4:233dd7616d73 851 return result;
AzureIoTClient 4:233dd7616d73 852 }
AzureIoTClient 4:233dd7616d73 853
AzureIoTClient 17:fa1bba4c6053 854 static void C2(GlobalInitialize_, long)(void* dest)
AzureIoTClient 17:fa1bba4c6053 855 {
AzureIoTClient 17:fa1bba4c6053 856 *(long*)dest = 0;
AzureIoTClient 17:fa1bba4c6053 857 }
AzureIoTClient 17:fa1bba4c6053 858
AzureIoTClient 17:fa1bba4c6053 859 static void C2(GlobalDeinitialize_, long)(void* dest)
AzureIoTClient 17:fa1bba4c6053 860 {
AzureIoTClient 17:fa1bba4c6053 861 (void)(dest);
AzureIoTClient 17:fa1bba4c6053 862 }
AzureIoTClient 17:fa1bba4c6053 863
AzureIoTClient 17:fa1bba4c6053 864
AzureIoTClient 4:233dd7616d73 865 /*Codes_SRS_SERIALIZER_99_023:[ Create_AGENT_DATA_TYPE_from_SINT8]*/
AzureIoTClient 4:233dd7616d73 866 /*Codes_SRS_SERIALIZER_99_008:[ int8_t]*/
AzureIoTClient 4:233dd7616d73 867 static AGENT_DATA_TYPES_RESULT C2(ToAGENT_DATA_TYPE_, int8_t)(AGENT_DATA_TYPE* dest, int8_t source)
AzureIoTClient 4:233dd7616d73 868 {
AzureIoTClient 4:233dd7616d73 869 return Create_AGENT_DATA_TYPE_from_SINT8(dest, source);
AzureIoTClient 4:233dd7616d73 870 }
AzureIoTClient 4:233dd7616d73 871
AzureIoTClient 4:233dd7616d73 872 static AGENT_DATA_TYPES_RESULT C2(FromAGENT_DATA_TYPE_, int8_t)(const AGENT_DATA_TYPE* agentData, int8_t* dest)
AzureIoTClient 4:233dd7616d73 873 {
AzureIoTClient 4:233dd7616d73 874 AGENT_DATA_TYPES_RESULT result;
AzureIoTClient 4:233dd7616d73 875 if (agentData->type != EDM_SBYTE_TYPE)
AzureIoTClient 4:233dd7616d73 876 {
AzureIoTClient 4:233dd7616d73 877 result = AGENT_DATA_TYPES_INVALID_ARG;
AzureIoTClient 4:233dd7616d73 878 }
AzureIoTClient 4:233dd7616d73 879 else
AzureIoTClient 4:233dd7616d73 880 {
AzureIoTClient 4:233dd7616d73 881 *dest = agentData->value.edmSbyte.value;
AzureIoTClient 4:233dd7616d73 882 result = AGENT_DATA_TYPES_OK;
AzureIoTClient 4:233dd7616d73 883 }
AzureIoTClient 4:233dd7616d73 884 return result;
AzureIoTClient 4:233dd7616d73 885 }
AzureIoTClient 4:233dd7616d73 886
AzureIoTClient 17:fa1bba4c6053 887 static void C2(GlobalInitialize_, int8_t)(void* dest)
AzureIoTClient 17:fa1bba4c6053 888 {
AzureIoTClient 17:fa1bba4c6053 889 *(int8_t*)dest = 0;
AzureIoTClient 17:fa1bba4c6053 890 }
AzureIoTClient 17:fa1bba4c6053 891
AzureIoTClient 17:fa1bba4c6053 892 static void C2(GlobalDeinitialize_, int8_t)(void* dest)
AzureIoTClient 17:fa1bba4c6053 893 {
AzureIoTClient 17:fa1bba4c6053 894 (void)(dest);
AzureIoTClient 17:fa1bba4c6053 895 }
AzureIoTClient 17:fa1bba4c6053 896
AzureIoTClient 4:233dd7616d73 897 /*Codes_SRS_SERIALIZER_99_024:[ Create_AGENT_DATA_TYPE_from_UINT8]*/
AzureIoTClient 4:233dd7616d73 898 /*Codes_SRS_SERIALIZER_99_009:[ uint8_t]*/
AzureIoTClient 4:233dd7616d73 899 static AGENT_DATA_TYPES_RESULT C2(ToAGENT_DATA_TYPE_, uint8_t)(AGENT_DATA_TYPE* dest, uint8_t source)
AzureIoTClient 4:233dd7616d73 900 {
AzureIoTClient 4:233dd7616d73 901 return Create_AGENT_DATA_TYPE_from_UINT8(dest, source);
AzureIoTClient 4:233dd7616d73 902 }
AzureIoTClient 4:233dd7616d73 903
AzureIoTClient 4:233dd7616d73 904 static AGENT_DATA_TYPES_RESULT C2(FromAGENT_DATA_TYPE_, uint8_t)(const AGENT_DATA_TYPE* agentData, uint8_t* dest)
AzureIoTClient 4:233dd7616d73 905 {
AzureIoTClient 4:233dd7616d73 906 AGENT_DATA_TYPES_RESULT result;
AzureIoTClient 4:233dd7616d73 907 if (agentData->type != EDM_BYTE_TYPE)
AzureIoTClient 4:233dd7616d73 908 {
AzureIoTClient 4:233dd7616d73 909 result = AGENT_DATA_TYPES_INVALID_ARG;
AzureIoTClient 4:233dd7616d73 910 }
AzureIoTClient 4:233dd7616d73 911 else
AzureIoTClient 4:233dd7616d73 912 {
AzureIoTClient 4:233dd7616d73 913 *dest = agentData->value.edmByte.value;
AzureIoTClient 4:233dd7616d73 914 result = AGENT_DATA_TYPES_OK;
AzureIoTClient 4:233dd7616d73 915 }
AzureIoTClient 4:233dd7616d73 916 return result;
AzureIoTClient 4:233dd7616d73 917 }
AzureIoTClient 4:233dd7616d73 918
AzureIoTClient 17:fa1bba4c6053 919 static void C2(GlobalInitialize_, uint8_t)(void* dest)
AzureIoTClient 17:fa1bba4c6053 920 {
AzureIoTClient 17:fa1bba4c6053 921 *(uint8_t*)dest = 0;
AzureIoTClient 17:fa1bba4c6053 922 }
AzureIoTClient 17:fa1bba4c6053 923
AzureIoTClient 17:fa1bba4c6053 924 static void C2(GlobalDeinitialize_, uint8_t)(void* dest)
AzureIoTClient 17:fa1bba4c6053 925 {
AzureIoTClient 17:fa1bba4c6053 926 (void)(dest);
AzureIoTClient 17:fa1bba4c6053 927 }
AzureIoTClient 17:fa1bba4c6053 928
AzureIoTClient 17:fa1bba4c6053 929
AzureIoTClient 4:233dd7616d73 930 /*Codes_SRS_SERIALIZER_99_025:[ Create_AGENT_DATA_TYPE_from_SINT16]*/
AzureIoTClient 4:233dd7616d73 931 /*Codes_SRS_SERIALIZER_99_010:[ int16_t]*/
AzureIoTClient 4:233dd7616d73 932 static AGENT_DATA_TYPES_RESULT C2(ToAGENT_DATA_TYPE_, int16_t)(AGENT_DATA_TYPE* dest, int16_t source)
AzureIoTClient 4:233dd7616d73 933 {
AzureIoTClient 4:233dd7616d73 934 return Create_AGENT_DATA_TYPE_from_SINT16(dest, source);
AzureIoTClient 4:233dd7616d73 935 }
AzureIoTClient 4:233dd7616d73 936
AzureIoTClient 4:233dd7616d73 937 static AGENT_DATA_TYPES_RESULT C2(FromAGENT_DATA_TYPE_, int16_t)(const AGENT_DATA_TYPE* agentData, int16_t* dest)
AzureIoTClient 4:233dd7616d73 938 {
AzureIoTClient 4:233dd7616d73 939 AGENT_DATA_TYPES_RESULT result;
AzureIoTClient 4:233dd7616d73 940 if (agentData->type != EDM_INT16_TYPE)
AzureIoTClient 4:233dd7616d73 941 {
AzureIoTClient 4:233dd7616d73 942 result = AGENT_DATA_TYPES_INVALID_ARG;
AzureIoTClient 4:233dd7616d73 943 }
AzureIoTClient 4:233dd7616d73 944 else
AzureIoTClient 4:233dd7616d73 945 {
AzureIoTClient 4:233dd7616d73 946 *dest = agentData->value.edmInt16.value;
AzureIoTClient 4:233dd7616d73 947 result = AGENT_DATA_TYPES_OK;
AzureIoTClient 4:233dd7616d73 948 }
AzureIoTClient 4:233dd7616d73 949 return result;
AzureIoTClient 4:233dd7616d73 950 }
AzureIoTClient 4:233dd7616d73 951
AzureIoTClient 17:fa1bba4c6053 952 static void C2(GlobalInitialize_, int16_t)(void* dest)
AzureIoTClient 17:fa1bba4c6053 953 {
AzureIoTClient 17:fa1bba4c6053 954 *(int16_t*)dest = 0;
AzureIoTClient 17:fa1bba4c6053 955 }
AzureIoTClient 17:fa1bba4c6053 956
AzureIoTClient 17:fa1bba4c6053 957 static void C2(GlobalDeinitialize_, int16_t)(void* dest)
AzureIoTClient 17:fa1bba4c6053 958 {
AzureIoTClient 17:fa1bba4c6053 959 (void)(dest);
AzureIoTClient 17:fa1bba4c6053 960 }
AzureIoTClient 17:fa1bba4c6053 961
AzureIoTClient 4:233dd7616d73 962 /*Codes_SRS_SERIALIZER_99_026:[ Create_AGENT_DATA_TYPE_from_SINT32]*/
AzureIoTClient 4:233dd7616d73 963 /*Codes_SRS_SERIALIZER_99_011:[ int32_t]*/
AzureIoTClient 4:233dd7616d73 964 static AGENT_DATA_TYPES_RESULT C2(ToAGENT_DATA_TYPE_, int32_t)(AGENT_DATA_TYPE* dest, int32_t source)
AzureIoTClient 4:233dd7616d73 965 {
AzureIoTClient 4:233dd7616d73 966 return Create_AGENT_DATA_TYPE_from_SINT32(dest, source);
AzureIoTClient 4:233dd7616d73 967 }
AzureIoTClient 4:233dd7616d73 968
AzureIoTClient 4:233dd7616d73 969 static AGENT_DATA_TYPES_RESULT C2(FromAGENT_DATA_TYPE_, int32_t)(const AGENT_DATA_TYPE* agentData, int32_t* dest)
AzureIoTClient 4:233dd7616d73 970 {
AzureIoTClient 4:233dd7616d73 971 AGENT_DATA_TYPES_RESULT result;
AzureIoTClient 4:233dd7616d73 972 if (agentData->type != EDM_INT32_TYPE)
AzureIoTClient 4:233dd7616d73 973 {
AzureIoTClient 4:233dd7616d73 974 result = AGENT_DATA_TYPES_INVALID_ARG;
AzureIoTClient 4:233dd7616d73 975 }
AzureIoTClient 4:233dd7616d73 976 else
AzureIoTClient 4:233dd7616d73 977 {
AzureIoTClient 4:233dd7616d73 978 *dest = agentData->value.edmInt32.value;
AzureIoTClient 4:233dd7616d73 979 result = AGENT_DATA_TYPES_OK;
AzureIoTClient 4:233dd7616d73 980 }
AzureIoTClient 4:233dd7616d73 981 return result;
AzureIoTClient 4:233dd7616d73 982 }
AzureIoTClient 4:233dd7616d73 983
AzureIoTClient 17:fa1bba4c6053 984 static void C2(GlobalInitialize_, int32_t)(void* dest)
AzureIoTClient 17:fa1bba4c6053 985 {
AzureIoTClient 17:fa1bba4c6053 986 *(int32_t*)dest = 0;
AzureIoTClient 17:fa1bba4c6053 987 }
AzureIoTClient 17:fa1bba4c6053 988
AzureIoTClient 17:fa1bba4c6053 989 static void C2(GlobalDeinitialize_, int32_t)(void* dest)
AzureIoTClient 17:fa1bba4c6053 990 {
AzureIoTClient 17:fa1bba4c6053 991 (void)(dest);
AzureIoTClient 17:fa1bba4c6053 992 }
AzureIoTClient 17:fa1bba4c6053 993
AzureIoTClient 4:233dd7616d73 994 /*Codes_SRS_SERIALIZER_99_027:[ Create_AGENT_DATA_TYPE_from_SINT64]*/
AzureIoTClient 4:233dd7616d73 995 /*Codes_SRS_SERIALIZER_99_012:[ int64_t]*/
AzureIoTClient 4:233dd7616d73 996 static AGENT_DATA_TYPES_RESULT C2(ToAGENT_DATA_TYPE_, int64_t)(AGENT_DATA_TYPE* dest, int64_t source)
AzureIoTClient 4:233dd7616d73 997 {
AzureIoTClient 4:233dd7616d73 998 return Create_AGENT_DATA_TYPE_from_SINT64(dest, source);
AzureIoTClient 4:233dd7616d73 999 }
AzureIoTClient 4:233dd7616d73 1000
AzureIoTClient 4:233dd7616d73 1001 static AGENT_DATA_TYPES_RESULT C2(FromAGENT_DATA_TYPE_, int64_t)(const AGENT_DATA_TYPE* agentData, int64_t* dest)
AzureIoTClient 4:233dd7616d73 1002 {
AzureIoTClient 4:233dd7616d73 1003 AGENT_DATA_TYPES_RESULT result;
AzureIoTClient 4:233dd7616d73 1004 if (agentData->type != EDM_INT64_TYPE)
AzureIoTClient 4:233dd7616d73 1005 {
AzureIoTClient 4:233dd7616d73 1006 result = AGENT_DATA_TYPES_INVALID_ARG;
AzureIoTClient 4:233dd7616d73 1007 }
AzureIoTClient 4:233dd7616d73 1008 else
AzureIoTClient 4:233dd7616d73 1009 {
AzureIoTClient 4:233dd7616d73 1010 *dest = agentData->value.edmInt64.value;
AzureIoTClient 4:233dd7616d73 1011 result = AGENT_DATA_TYPES_OK;
AzureIoTClient 4:233dd7616d73 1012 }
AzureIoTClient 4:233dd7616d73 1013 return result;
AzureIoTClient 4:233dd7616d73 1014 }
AzureIoTClient 4:233dd7616d73 1015
AzureIoTClient 17:fa1bba4c6053 1016 static void C2(GlobalInitialize_, int64_t)(void* dest)
AzureIoTClient 17:fa1bba4c6053 1017 {
AzureIoTClient 17:fa1bba4c6053 1018 *(int64_t*)dest = 0;
AzureIoTClient 17:fa1bba4c6053 1019 }
AzureIoTClient 17:fa1bba4c6053 1020
AzureIoTClient 17:fa1bba4c6053 1021 static void C2(GlobalDeinitialize_, int64_t)(void* dest)
AzureIoTClient 17:fa1bba4c6053 1022 {
AzureIoTClient 17:fa1bba4c6053 1023 (void)(dest);
AzureIoTClient 17:fa1bba4c6053 1024 }
AzureIoTClient 17:fa1bba4c6053 1025
AzureIoTClient 4:233dd7616d73 1026 /*Codes_SRS_SERIALIZER_99_013:[ bool]*/
AzureIoTClient 4:233dd7616d73 1027 static AGENT_DATA_TYPES_RESULT C2(ToAGENT_DATA_TYPE_, bool)(AGENT_DATA_TYPE* dest, bool source)
AzureIoTClient 4:233dd7616d73 1028 {
AzureIoTClient 4:233dd7616d73 1029 return Create_EDM_BOOLEAN_from_int(dest, source == true);
AzureIoTClient 4:233dd7616d73 1030 }
AzureIoTClient 4:233dd7616d73 1031
AzureIoTClient 4:233dd7616d73 1032 static AGENT_DATA_TYPES_RESULT C2(FromAGENT_DATA_TYPE_, bool)(const AGENT_DATA_TYPE* agentData, bool* dest)
AzureIoTClient 4:233dd7616d73 1033 {
AzureIoTClient 4:233dd7616d73 1034 AGENT_DATA_TYPES_RESULT result;
AzureIoTClient 4:233dd7616d73 1035 if (agentData->type != EDM_BOOLEAN_TYPE)
AzureIoTClient 4:233dd7616d73 1036 {
AzureIoTClient 4:233dd7616d73 1037 result = AGENT_DATA_TYPES_INVALID_ARG;
AzureIoTClient 4:233dd7616d73 1038 }
AzureIoTClient 4:233dd7616d73 1039 else
AzureIoTClient 4:233dd7616d73 1040 {
AzureIoTClient 4:233dd7616d73 1041 *dest = (agentData->value.edmBoolean.value == EDM_TRUE) ? true : false;
AzureIoTClient 4:233dd7616d73 1042 result = AGENT_DATA_TYPES_OK;
AzureIoTClient 4:233dd7616d73 1043 }
AzureIoTClient 4:233dd7616d73 1044 return result;
AzureIoTClient 4:233dd7616d73 1045 }
AzureIoTClient 4:233dd7616d73 1046
AzureIoTClient 17:fa1bba4c6053 1047 static void C2(GlobalInitialize_, bool)(void* dest)
AzureIoTClient 17:fa1bba4c6053 1048 {
AzureIoTClient 17:fa1bba4c6053 1049 *(bool*)dest = false;
AzureIoTClient 17:fa1bba4c6053 1050 }
AzureIoTClient 17:fa1bba4c6053 1051
AzureIoTClient 17:fa1bba4c6053 1052 static void C2(GlobalDeinitialize_, bool)(void* dest)
AzureIoTClient 17:fa1bba4c6053 1053 {
AzureIoTClient 17:fa1bba4c6053 1054 (void)(dest);
AzureIoTClient 17:fa1bba4c6053 1055 }
AzureIoTClient 17:fa1bba4c6053 1056
AzureIoTClient 4:233dd7616d73 1057 /*Codes_SRS_SERIALIZER_99_014:[ ascii_char_ptr]*/
AzureIoTClient 4:233dd7616d73 1058 static AGENT_DATA_TYPES_RESULT C2(ToAGENT_DATA_TYPE_, ascii_char_ptr)(AGENT_DATA_TYPE* dest, ascii_char_ptr source)
AzureIoTClient 4:233dd7616d73 1059 {
AzureIoTClient 4:233dd7616d73 1060 return Create_AGENT_DATA_TYPE_from_charz(dest, source);
AzureIoTClient 4:233dd7616d73 1061 }
AzureIoTClient 4:233dd7616d73 1062
AzureIoTClient 4:233dd7616d73 1063 static AGENT_DATA_TYPES_RESULT C2(FromAGENT_DATA_TYPE_, ascii_char_ptr)(const AGENT_DATA_TYPE* agentData, ascii_char_ptr* dest)
AzureIoTClient 4:233dd7616d73 1064 {
AzureIoTClient 4:233dd7616d73 1065 AGENT_DATA_TYPES_RESULT result;
AzureIoTClient 4:233dd7616d73 1066 if (agentData->type != EDM_STRING_TYPE)
AzureIoTClient 4:233dd7616d73 1067 {
AzureIoTClient 4:233dd7616d73 1068 result = AGENT_DATA_TYPES_INVALID_ARG;
AzureIoTClient 4:233dd7616d73 1069 }
AzureIoTClient 4:233dd7616d73 1070 else
AzureIoTClient 4:233dd7616d73 1071 {
AzureIoTClient 17:fa1bba4c6053 1072 if (*dest != NULL)
AzureIoTClient 17:fa1bba4c6053 1073 {
AzureIoTClient 17:fa1bba4c6053 1074 free(*dest);
AzureIoTClient 17:fa1bba4c6053 1075 *dest = NULL;
AzureIoTClient 17:fa1bba4c6053 1076 }
AzureIoTClient 17:fa1bba4c6053 1077
AzureIoTClient 17:fa1bba4c6053 1078 if (mallocAndStrcpy_s(dest, agentData->value.edmString.chars) != 0)
AzureIoTClient 17:fa1bba4c6053 1079 {
AzureIoTClient 17:fa1bba4c6053 1080 LogError("failure in mallocAndStrcpy_s");
AzureIoTClient 17:fa1bba4c6053 1081 result = AGENT_DATA_TYPES_ERROR;
AzureIoTClient 17:fa1bba4c6053 1082 }
AzureIoTClient 17:fa1bba4c6053 1083 else
AzureIoTClient 17:fa1bba4c6053 1084 {
AzureIoTClient 17:fa1bba4c6053 1085 result = AGENT_DATA_TYPES_OK;
AzureIoTClient 17:fa1bba4c6053 1086 }
AzureIoTClient 17:fa1bba4c6053 1087
AzureIoTClient 4:233dd7616d73 1088 }
AzureIoTClient 4:233dd7616d73 1089 return result;
AzureIoTClient 4:233dd7616d73 1090 }
AzureIoTClient 4:233dd7616d73 1091
AzureIoTClient 17:fa1bba4c6053 1092 static void C2(GlobalInitialize_, ascii_char_ptr)(void* dest)
AzureIoTClient 17:fa1bba4c6053 1093 {
AzureIoTClient 17:fa1bba4c6053 1094 *(ascii_char_ptr*)dest = NULL;
AzureIoTClient 17:fa1bba4c6053 1095 }
AzureIoTClient 17:fa1bba4c6053 1096
AzureIoTClient 17:fa1bba4c6053 1097 static void C2(GlobalDeinitialize_, ascii_char_ptr)(void* dest)
AzureIoTClient 17:fa1bba4c6053 1098 {
AzureIoTClient 17:fa1bba4c6053 1099 if (*(ascii_char_ptr*)dest != NULL)
AzureIoTClient 17:fa1bba4c6053 1100 {
AzureIoTClient 17:fa1bba4c6053 1101 free(*(ascii_char_ptr*)dest);
AzureIoTClient 17:fa1bba4c6053 1102 }
AzureIoTClient 17:fa1bba4c6053 1103 }
AzureIoTClient 17:fa1bba4c6053 1104
AzureIoTClient 4:233dd7616d73 1105 static AGENT_DATA_TYPES_RESULT C2(ToAGENT_DATA_TYPE_, ascii_char_ptr_no_quotes)(AGENT_DATA_TYPE* dest, ascii_char_ptr_no_quotes source)
AzureIoTClient 4:233dd7616d73 1106 {
AzureIoTClient 4:233dd7616d73 1107 return Create_AGENT_DATA_TYPE_from_charz_no_quotes(dest, source);
AzureIoTClient 4:233dd7616d73 1108 }
AzureIoTClient 4:233dd7616d73 1109
AzureIoTClient 4:233dd7616d73 1110 static AGENT_DATA_TYPES_RESULT C2(FromAGENT_DATA_TYPE_, ascii_char_ptr_no_quotes)(const AGENT_DATA_TYPE* agentData, ascii_char_ptr_no_quotes* dest)
AzureIoTClient 4:233dd7616d73 1111 {
AzureIoTClient 4:233dd7616d73 1112 AGENT_DATA_TYPES_RESULT result;
AzureIoTClient 4:233dd7616d73 1113 if (agentData->type != EDM_STRING_NO_QUOTES_TYPE)
AzureIoTClient 4:233dd7616d73 1114 {
AzureIoTClient 4:233dd7616d73 1115 result = AGENT_DATA_TYPES_INVALID_ARG;
AzureIoTClient 4:233dd7616d73 1116 }
AzureIoTClient 4:233dd7616d73 1117 else
AzureIoTClient 4:233dd7616d73 1118 {
AzureIoTClient 17:fa1bba4c6053 1119 if (*dest != NULL)
AzureIoTClient 17:fa1bba4c6053 1120 {
AzureIoTClient 17:fa1bba4c6053 1121 free(*dest);
AzureIoTClient 17:fa1bba4c6053 1122 *dest = NULL;
AzureIoTClient 17:fa1bba4c6053 1123 }
AzureIoTClient 17:fa1bba4c6053 1124
AzureIoTClient 17:fa1bba4c6053 1125 if (mallocAndStrcpy_s(dest, agentData->value.edmStringNoQuotes.chars) != 0)
AzureIoTClient 17:fa1bba4c6053 1126 {
AzureIoTClient 17:fa1bba4c6053 1127 LogError("failure in mallocAndStrcpy_s");
AzureIoTClient 17:fa1bba4c6053 1128 result = AGENT_DATA_TYPES_ERROR;
AzureIoTClient 17:fa1bba4c6053 1129 }
AzureIoTClient 17:fa1bba4c6053 1130 else
AzureIoTClient 17:fa1bba4c6053 1131 {
AzureIoTClient 17:fa1bba4c6053 1132 result = AGENT_DATA_TYPES_OK;
AzureIoTClient 17:fa1bba4c6053 1133 }
AzureIoTClient 4:233dd7616d73 1134 }
AzureIoTClient 4:233dd7616d73 1135 return result;
AzureIoTClient 4:233dd7616d73 1136 }
AzureIoTClient 4:233dd7616d73 1137
AzureIoTClient 17:fa1bba4c6053 1138 static void C2(GlobalInitialize_, ascii_char_ptr_no_quotes)(void* dest)
AzureIoTClient 17:fa1bba4c6053 1139 {
AzureIoTClient 17:fa1bba4c6053 1140 *(ascii_char_ptr_no_quotes*)dest = NULL;
AzureIoTClient 17:fa1bba4c6053 1141 }
AzureIoTClient 17:fa1bba4c6053 1142
AzureIoTClient 17:fa1bba4c6053 1143 static void C2(GlobalDeinitialize_, ascii_char_ptr_no_quotes)(void* dest)
AzureIoTClient 17:fa1bba4c6053 1144 {
AzureIoTClient 17:fa1bba4c6053 1145 if (*(ascii_char_ptr_no_quotes*)dest != NULL)
AzureIoTClient 17:fa1bba4c6053 1146 {
AzureIoTClient 17:fa1bba4c6053 1147 free(*(ascii_char_ptr_no_quotes*)dest);
AzureIoTClient 17:fa1bba4c6053 1148 }
AzureIoTClient 17:fa1bba4c6053 1149 }
AzureIoTClient 17:fa1bba4c6053 1150
AzureIoTClient 4:233dd7616d73 1151 /*Codes_SRS_SERIALIZER_99_051:[ EDM_DATE_TIME_OFFSET*/
AzureIoTClient 4:233dd7616d73 1152 /*Codes_SRS_SERIALIZER_99_053:[Create_AGENT_DATA_TYPE_from_EDM_DATE_TIME_OFFSET]*/
AzureIoTClient 4:233dd7616d73 1153 static AGENT_DATA_TYPES_RESULT C2(ToAGENT_DATA_TYPE_, EDM_DATE_TIME_OFFSET)(AGENT_DATA_TYPE* dest, EDM_DATE_TIME_OFFSET source)
AzureIoTClient 4:233dd7616d73 1154 {
AzureIoTClient 4:233dd7616d73 1155 return Create_AGENT_DATA_TYPE_from_EDM_DATE_TIME_OFFSET(dest, source);
AzureIoTClient 4:233dd7616d73 1156 }
AzureIoTClient 4:233dd7616d73 1157
AzureIoTClient 4:233dd7616d73 1158 static AGENT_DATA_TYPES_RESULT C2(FromAGENT_DATA_TYPE_, EDM_DATE_TIME_OFFSET)(const AGENT_DATA_TYPE* agentData, EDM_DATE_TIME_OFFSET* dest)
AzureIoTClient 4:233dd7616d73 1159 {
AzureIoTClient 4:233dd7616d73 1160 AGENT_DATA_TYPES_RESULT result;
AzureIoTClient 4:233dd7616d73 1161 if (agentData->type != EDM_DATE_TIME_OFFSET_TYPE)
AzureIoTClient 4:233dd7616d73 1162 {
AzureIoTClient 4:233dd7616d73 1163 result = AGENT_DATA_TYPES_INVALID_ARG;
AzureIoTClient 4:233dd7616d73 1164 }
AzureIoTClient 4:233dd7616d73 1165 else
AzureIoTClient 4:233dd7616d73 1166 {
AzureIoTClient 4:233dd7616d73 1167 *dest = agentData->value.edmDateTimeOffset;
AzureIoTClient 4:233dd7616d73 1168 result = AGENT_DATA_TYPES_OK;
AzureIoTClient 4:233dd7616d73 1169 }
AzureIoTClient 4:233dd7616d73 1170 return result;
AzureIoTClient 4:233dd7616d73 1171 }
AzureIoTClient 4:233dd7616d73 1172
AzureIoTClient 17:fa1bba4c6053 1173 static void C2(GlobalInitialize_, EDM_DATE_TIME_OFFSET)(void* dest)
AzureIoTClient 17:fa1bba4c6053 1174 {
AzureIoTClient 17:fa1bba4c6053 1175 memset(dest, 0, sizeof(EDM_DATE_TIME_OFFSET));
AzureIoTClient 17:fa1bba4c6053 1176 }
AzureIoTClient 17:fa1bba4c6053 1177
AzureIoTClient 17:fa1bba4c6053 1178 static void C2(GlobalDeinitialize_, EDM_DATE_TIME_OFFSET)(void* dest)
AzureIoTClient 17:fa1bba4c6053 1179 {
AzureIoTClient 17:fa1bba4c6053 1180 (void)(dest);
AzureIoTClient 17:fa1bba4c6053 1181 }
AzureIoTClient 17:fa1bba4c6053 1182
AzureIoTClient 4:233dd7616d73 1183 /*Codes_SRS_SERIALIZER_99_072:[ EDM_GUID]*/
AzureIoTClient 4:233dd7616d73 1184 /*Codes_SRS_SERIALIZER_99_073:[ Create_AGENT_DATA_TYPE_from_EDM_GUID]*/
AzureIoTClient 4:233dd7616d73 1185 static AGENT_DATA_TYPES_RESULT C2(ToAGENT_DATA_TYPE_, EDM_GUID)(AGENT_DATA_TYPE* dest, EDM_GUID guid)
AzureIoTClient 4:233dd7616d73 1186 {
AzureIoTClient 4:233dd7616d73 1187 return Create_AGENT_DATA_TYPE_from_EDM_GUID(dest, guid);
AzureIoTClient 4:233dd7616d73 1188 }
AzureIoTClient 4:233dd7616d73 1189
AzureIoTClient 4:233dd7616d73 1190 static AGENT_DATA_TYPES_RESULT C2(FromAGENT_DATA_TYPE_, EDM_GUID)(const AGENT_DATA_TYPE* agentData, EDM_GUID* dest)
AzureIoTClient 4:233dd7616d73 1191 {
AzureIoTClient 4:233dd7616d73 1192 AGENT_DATA_TYPES_RESULT result;
AzureIoTClient 4:233dd7616d73 1193 if (agentData->type != EDM_GUID_TYPE)
AzureIoTClient 4:233dd7616d73 1194 {
AzureIoTClient 4:233dd7616d73 1195 result = AGENT_DATA_TYPES_INVALID_ARG;
AzureIoTClient 4:233dd7616d73 1196 }
AzureIoTClient 4:233dd7616d73 1197 else
AzureIoTClient 4:233dd7616d73 1198 {
AzureIoTClient 4:233dd7616d73 1199 memcpy(dest->GUID, agentData->value.edmGuid.GUID, 16);
AzureIoTClient 4:233dd7616d73 1200 result = AGENT_DATA_TYPES_OK;
AzureIoTClient 4:233dd7616d73 1201 }
AzureIoTClient 4:233dd7616d73 1202 return result;
AzureIoTClient 4:233dd7616d73 1203 }
AzureIoTClient 4:233dd7616d73 1204
AzureIoTClient 17:fa1bba4c6053 1205 static void C2(GlobalInitialize_, EDM_GUID)(void* dest)
AzureIoTClient 17:fa1bba4c6053 1206 {
AzureIoTClient 17:fa1bba4c6053 1207 memset(dest, 0, sizeof(EDM_GUID));
AzureIoTClient 17:fa1bba4c6053 1208 }
AzureIoTClient 17:fa1bba4c6053 1209
AzureIoTClient 17:fa1bba4c6053 1210 static void C2(GlobalDeinitialize_, EDM_GUID)(void* dest)
AzureIoTClient 17:fa1bba4c6053 1211 {
AzureIoTClient 17:fa1bba4c6053 1212 (void)(dest);
AzureIoTClient 17:fa1bba4c6053 1213 }
AzureIoTClient 17:fa1bba4c6053 1214
AzureIoTClient 17:fa1bba4c6053 1215
AzureIoTClient 4:233dd7616d73 1216 /*Codes_SRS_SERIALIZER_99_074:[ EDM_BINARY]*/
AzureIoTClient 4:233dd7616d73 1217 /*Codes_SRS_SERIALIZER_99_075:[ Create_AGENT_DATA_TYPE_from_EDM_BINARY]*/
AzureIoTClient 4:233dd7616d73 1218 static AGENT_DATA_TYPES_RESULT C2(ToAGENT_DATA_TYPE_, EDM_BINARY)(AGENT_DATA_TYPE* dest, EDM_BINARY edmBinary)
AzureIoTClient 4:233dd7616d73 1219 {
AzureIoTClient 4:233dd7616d73 1220 return Create_AGENT_DATA_TYPE_from_EDM_BINARY(dest, edmBinary);
AzureIoTClient 4:233dd7616d73 1221 }
AzureIoTClient 4:233dd7616d73 1222
AzureIoTClient 4:233dd7616d73 1223 static AGENT_DATA_TYPES_RESULT C2(FromAGENT_DATA_TYPE_, EDM_BINARY)(const AGENT_DATA_TYPE* agentData, EDM_BINARY* dest)
AzureIoTClient 4:233dd7616d73 1224 {
AzureIoTClient 4:233dd7616d73 1225 AGENT_DATA_TYPES_RESULT result;
AzureIoTClient 4:233dd7616d73 1226 if (agentData->type != EDM_BINARY_TYPE)
AzureIoTClient 4:233dd7616d73 1227 {
AzureIoTClient 4:233dd7616d73 1228 result = AGENT_DATA_TYPES_INVALID_ARG;
AzureIoTClient 4:233dd7616d73 1229 }
AzureIoTClient 4:233dd7616d73 1230 else
AzureIoTClient 4:233dd7616d73 1231 {
AzureIoTClient 4:233dd7616d73 1232 if ((dest->data = (unsigned char *)malloc(agentData->value.edmBinary.size)) == NULL) /*cast because this get included in a C++ file.*/
AzureIoTClient 4:233dd7616d73 1233 {
AzureIoTClient 4:233dd7616d73 1234 result = AGENT_DATA_TYPES_ERROR;
AzureIoTClient 4:233dd7616d73 1235 }
AzureIoTClient 4:233dd7616d73 1236 else
AzureIoTClient 4:233dd7616d73 1237 {
AzureIoTClient 4:233dd7616d73 1238 memcpy(dest->data, agentData->value.edmBinary.data, agentData->value.edmBinary.size);
AzureIoTClient 4:233dd7616d73 1239 dest->size = agentData->value.edmBinary.size;
AzureIoTClient 4:233dd7616d73 1240 result = AGENT_DATA_TYPES_OK;
AzureIoTClient 4:233dd7616d73 1241 }
AzureIoTClient 4:233dd7616d73 1242 }
AzureIoTClient 4:233dd7616d73 1243 return result;
AzureIoTClient 4:233dd7616d73 1244 }
AzureIoTClient 4:233dd7616d73 1245
AzureIoTClient 17:fa1bba4c6053 1246 static void C2(GlobalInitialize_, EDM_BINARY)(void* dest)
AzureIoTClient 17:fa1bba4c6053 1247 {
AzureIoTClient 17:fa1bba4c6053 1248 ((EDM_BINARY*)dest)->data = NULL;
AzureIoTClient 17:fa1bba4c6053 1249 ((EDM_BINARY*)dest)->size = 0;
AzureIoTClient 17:fa1bba4c6053 1250 }
AzureIoTClient 17:fa1bba4c6053 1251
AzureIoTClient 17:fa1bba4c6053 1252 static void C2(GlobalDeinitialize_, EDM_BINARY)(void* dest)
AzureIoTClient 17:fa1bba4c6053 1253 {
AzureIoTClient 17:fa1bba4c6053 1254 if ((((EDM_BINARY*)dest)->data) != NULL)
AzureIoTClient 17:fa1bba4c6053 1255 {
AzureIoTClient 17:fa1bba4c6053 1256 free(((EDM_BINARY*)dest)->data);
AzureIoTClient 17:fa1bba4c6053 1257 }
AzureIoTClient 17:fa1bba4c6053 1258 }
AzureIoTClient 17:fa1bba4c6053 1259
AzureIoTClient 4:233dd7616d73 1260 static void C2(destroyLocalParameter, EDM_BINARY)(EDM_BINARY* value)
AzureIoTClient 4:233dd7616d73 1261 {
AzureIoTClient 4:233dd7616d73 1262 if (value != NULL)
AzureIoTClient 4:233dd7616d73 1263 {
AzureIoTClient 4:233dd7616d73 1264 free(value->data);
AzureIoTClient 4:233dd7616d73 1265 value->data = NULL;
AzureIoTClient 4:233dd7616d73 1266 value->size = 0;
AzureIoTClient 4:233dd7616d73 1267 }
AzureIoTClient 4:233dd7616d73 1268 }
AzureIoTClient 4:233dd7616d73 1269
AzureIoTClient 4:233dd7616d73 1270 static void C2(destroyLocalParameter, EDM_BOOLEAN)(EDM_BOOLEAN* value)
AzureIoTClient 4:233dd7616d73 1271 {
AzureIoTClient 4:233dd7616d73 1272 (void)value;
AzureIoTClient 4:233dd7616d73 1273 }
AzureIoTClient 4:233dd7616d73 1274
AzureIoTClient 4:233dd7616d73 1275 static void C2(destroyLocalParameter, EDM_BYTE)(EDM_BYTE* value)
AzureIoTClient 4:233dd7616d73 1276 {
AzureIoTClient 4:233dd7616d73 1277 (void)value;
AzureIoTClient 4:233dd7616d73 1278 }
AzureIoTClient 4:233dd7616d73 1279
AzureIoTClient 4:233dd7616d73 1280 static void C2(destroyLocalParameter, EDM_DATE)(EDM_DATE* value)
AzureIoTClient 4:233dd7616d73 1281 {
AzureIoTClient 4:233dd7616d73 1282 (void)value;
AzureIoTClient 4:233dd7616d73 1283 }
AzureIoTClient 4:233dd7616d73 1284
AzureIoTClient 4:233dd7616d73 1285 static void C2(destroyLocalParameter, EDM_DATE_TIME_OFFSET)(EDM_DATE_TIME_OFFSET* value)
AzureIoTClient 4:233dd7616d73 1286 {
AzureIoTClient 4:233dd7616d73 1287 (void)value;
AzureIoTClient 4:233dd7616d73 1288 }
AzureIoTClient 4:233dd7616d73 1289
AzureIoTClient 4:233dd7616d73 1290 static void C2(destroyLocalParameter, EDM_DECIMAL)(EDM_DECIMAL* value)
AzureIoTClient 4:233dd7616d73 1291 {
AzureIoTClient 4:233dd7616d73 1292 if (value != NULL)
AzureIoTClient 4:233dd7616d73 1293 {
AzureIoTClient 4:233dd7616d73 1294 STRING_delete(value->value);
AzureIoTClient 4:233dd7616d73 1295 value->value = NULL;
AzureIoTClient 4:233dd7616d73 1296 }
AzureIoTClient 4:233dd7616d73 1297 }
AzureIoTClient 4:233dd7616d73 1298
AzureIoTClient 4:233dd7616d73 1299 static void C2(destroyLocalParameter, EDM_DOUBLE)(EDM_DOUBLE* value)
AzureIoTClient 4:233dd7616d73 1300 {
AzureIoTClient 4:233dd7616d73 1301 (void)value;
AzureIoTClient 4:233dd7616d73 1302 }
AzureIoTClient 4:233dd7616d73 1303
AzureIoTClient 4:233dd7616d73 1304 static void C2(destroyLocalParameter, EDM_DURATION)(EDM_DURATION* value)
AzureIoTClient 4:233dd7616d73 1305 {
AzureIoTClient 4:233dd7616d73 1306 if (value != NULL)
AzureIoTClient 4:233dd7616d73 1307 {
AzureIoTClient 4:233dd7616d73 1308 free(value->digits);
AzureIoTClient 4:233dd7616d73 1309 value->digits = NULL;
AzureIoTClient 4:233dd7616d73 1310 value->nDigits = 0;
AzureIoTClient 4:233dd7616d73 1311 }
AzureIoTClient 4:233dd7616d73 1312 }
AzureIoTClient 4:233dd7616d73 1313
AzureIoTClient 4:233dd7616d73 1314 static void C2(destroyLocalParameter, EDM_GUID)(EDM_GUID* value)
AzureIoTClient 4:233dd7616d73 1315 {
AzureIoTClient 4:233dd7616d73 1316 (void)value;
AzureIoTClient 4:233dd7616d73 1317 }
AzureIoTClient 4:233dd7616d73 1318
AzureIoTClient 4:233dd7616d73 1319 static void C2(destroyLocalParameter, EDM_INT16)(EDM_INT16* value)
AzureIoTClient 4:233dd7616d73 1320 {
AzureIoTClient 4:233dd7616d73 1321 (void)value;
AzureIoTClient 4:233dd7616d73 1322 }
AzureIoTClient 4:233dd7616d73 1323
AzureIoTClient 4:233dd7616d73 1324 static void C2(destroyLocalParameter, EDM_INT32)(EDM_INT32* value)
AzureIoTClient 4:233dd7616d73 1325 {
AzureIoTClient 4:233dd7616d73 1326 (void)value;
AzureIoTClient 4:233dd7616d73 1327 }
AzureIoTClient 4:233dd7616d73 1328
AzureIoTClient 4:233dd7616d73 1329 static void C2(destroyLocalParameter, EDM_INT64)(EDM_INT64* value)
AzureIoTClient 4:233dd7616d73 1330 {
AzureIoTClient 4:233dd7616d73 1331 (void)value;
AzureIoTClient 4:233dd7616d73 1332 }
AzureIoTClient 4:233dd7616d73 1333
AzureIoTClient 4:233dd7616d73 1334 static void C2(destroyLocalParameter, EDM_SBYTE)(EDM_SBYTE* value)
AzureIoTClient 4:233dd7616d73 1335 {
AzureIoTClient 4:233dd7616d73 1336 (void)value;
AzureIoTClient 4:233dd7616d73 1337 }
AzureIoTClient 4:233dd7616d73 1338
AzureIoTClient 4:233dd7616d73 1339 static void C2(destroyLocalParameter, EDM_SINGLE)(EDM_SINGLE* value)
AzureIoTClient 4:233dd7616d73 1340 {
AzureIoTClient 4:233dd7616d73 1341 (void)value;
AzureIoTClient 4:233dd7616d73 1342 }
AzureIoTClient 4:233dd7616d73 1343
AzureIoTClient 4:233dd7616d73 1344 static void C2(destroyLocalParameter, EDM_STRING)(EDM_STRING* value)
AzureIoTClient 4:233dd7616d73 1345 {
AzureIoTClient 4:233dd7616d73 1346 (void)value;
AzureIoTClient 4:233dd7616d73 1347 }
AzureIoTClient 4:233dd7616d73 1348
AzureIoTClient 4:233dd7616d73 1349
AzureIoTClient 4:233dd7616d73 1350 static void C2(destroyLocalParameter, EDM_TIME_OF_DAY)(EDM_TIME_OF_DAY* value)
AzureIoTClient 4:233dd7616d73 1351 {
AzureIoTClient 4:233dd7616d73 1352 (void)value;
AzureIoTClient 4:233dd7616d73 1353 }
AzureIoTClient 4:233dd7616d73 1354
AzureIoTClient 4:233dd7616d73 1355 static void C2(destroyLocalParameter, int)(int* value)
AzureIoTClient 4:233dd7616d73 1356 {
AzureIoTClient 4:233dd7616d73 1357 (void)value;
AzureIoTClient 4:233dd7616d73 1358 }
AzureIoTClient 4:233dd7616d73 1359
AzureIoTClient 4:233dd7616d73 1360 static void C2(destroyLocalParameter, float)(float* value)
AzureIoTClient 4:233dd7616d73 1361 {
AzureIoTClient 4:233dd7616d73 1362 (void)value;
AzureIoTClient 4:233dd7616d73 1363 }
AzureIoTClient 4:233dd7616d73 1364
AzureIoTClient 4:233dd7616d73 1365 static void C2(destroyLocalParameter, double)(double* value)
AzureIoTClient 4:233dd7616d73 1366 {
AzureIoTClient 4:233dd7616d73 1367 (void)value;
AzureIoTClient 4:233dd7616d73 1368 }
AzureIoTClient 4:233dd7616d73 1369
AzureIoTClient 4:233dd7616d73 1370 static void C2(destroyLocalParameter, long)(long* value)
AzureIoTClient 4:233dd7616d73 1371 {
AzureIoTClient 4:233dd7616d73 1372 (void)value;
AzureIoTClient 4:233dd7616d73 1373 }
AzureIoTClient 4:233dd7616d73 1374
AzureIoTClient 4:233dd7616d73 1375 static void C2(destroyLocalParameter, int8_t)(int8_t* value)
AzureIoTClient 4:233dd7616d73 1376 {
AzureIoTClient 4:233dd7616d73 1377 (void)value;
AzureIoTClient 4:233dd7616d73 1378 }
AzureIoTClient 4:233dd7616d73 1379
AzureIoTClient 4:233dd7616d73 1380 static void C2(destroyLocalParameter, uint8_t)(uint8_t* value)
AzureIoTClient 4:233dd7616d73 1381 {
AzureIoTClient 4:233dd7616d73 1382 (void)value;
AzureIoTClient 4:233dd7616d73 1383 }
AzureIoTClient 4:233dd7616d73 1384
AzureIoTClient 4:233dd7616d73 1385 static void C2(destroyLocalParameter, int16_t)(int16_t* value)
AzureIoTClient 4:233dd7616d73 1386 {
AzureIoTClient 4:233dd7616d73 1387 (void)value;
AzureIoTClient 4:233dd7616d73 1388 }
AzureIoTClient 4:233dd7616d73 1389
AzureIoTClient 4:233dd7616d73 1390 static void C2(destroyLocalParameter, int32_t)(int32_t* value)
AzureIoTClient 4:233dd7616d73 1391 {
AzureIoTClient 4:233dd7616d73 1392 (void)value;
AzureIoTClient 4:233dd7616d73 1393 }
AzureIoTClient 4:233dd7616d73 1394
AzureIoTClient 4:233dd7616d73 1395 static void C2(destroyLocalParameter, int64_t)(int64_t* value)
AzureIoTClient 4:233dd7616d73 1396 {
AzureIoTClient 4:233dd7616d73 1397 (void)value;
AzureIoTClient 4:233dd7616d73 1398 }
AzureIoTClient 4:233dd7616d73 1399
AzureIoTClient 4:233dd7616d73 1400 static void C2(destroyLocalParameter, bool)(bool* value)
AzureIoTClient 4:233dd7616d73 1401 {
AzureIoTClient 4:233dd7616d73 1402 (void)value;
AzureIoTClient 4:233dd7616d73 1403 }
AzureIoTClient 4:233dd7616d73 1404
AzureIoTClient 4:233dd7616d73 1405 static void C2(destroyLocalParameter, ascii_char_ptr)(ascii_char_ptr* value)
AzureIoTClient 4:233dd7616d73 1406 {
AzureIoTClient 17:fa1bba4c6053 1407 if (value != NULL)
AzureIoTClient 17:fa1bba4c6053 1408 {
AzureIoTClient 17:fa1bba4c6053 1409 free(*value);
AzureIoTClient 17:fa1bba4c6053 1410 }
AzureIoTClient 17:fa1bba4c6053 1411
AzureIoTClient 4:233dd7616d73 1412 }
AzureIoTClient 4:233dd7616d73 1413
AzureIoTClient 4:233dd7616d73 1414 static void C2(destroyLocalParameter, ascii_char_ptr_no_quotes)(ascii_char_ptr_no_quotes* value)
AzureIoTClient 4:233dd7616d73 1415 {
AzureIoTClient 17:fa1bba4c6053 1416 if (value != NULL)
AzureIoTClient 17:fa1bba4c6053 1417 {
AzureIoTClient 17:fa1bba4c6053 1418 free(*value);
AzureIoTClient 17:fa1bba4c6053 1419 }
AzureIoTClient 4:233dd7616d73 1420 }
AzureIoTClient 4:233dd7616d73 1421
AzureIoTClient 4:233dd7616d73 1422 #ifdef __cplusplus
AzureIoTClient 4:233dd7616d73 1423 }
AzureIoTClient 4:233dd7616d73 1424 #endif
AzureIoTClient 4:233dd7616d73 1425
AzureIoTClient 4:233dd7616d73 1426 #endif /*SERIALIZER_H*/
AzureIoTClient 4:233dd7616d73 1427
AzureIoTClient 4:233dd7616d73 1428