Azure IoT / serializer

Dependents:   sht15_remote_monitoring f767zi_mqtt remote_monitoring simplesample_amqp ... more

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers codefirst.h Source File

codefirst.h

00001 // Copyright (c) Microsoft. All rights reserved.
00002 // Licensed under the MIT license. See LICENSE file in the project root for full license information.
00003 
00004 #ifndef CODEFIRST_H
00005 #define CODEFIRST_H
00006 
00007 #include "methodreturn.h"
00008 #include "agenttypesystem.h"
00009 #include "schema.h"
00010 #include "azure_c_shared_utility/macro_utils.h"
00011 #include "azure_c_shared_utility/strings.h"
00012 #include "iotdevice.h"
00013 
00014 #ifdef __cplusplus
00015 #include <cstddef>
00016 #include <cstdarg>
00017 extern "C" {
00018 #else
00019 #include <stddef.h>
00020 #include <stdarg.h>
00021 #include <stdbool.h>
00022 #endif
00023 
00024 typedef char* ascii_char_ptr;
00025 typedef char* ascii_char_ptr_no_quotes;
00026 
00027 typedef enum REFLECTION_TYPE_TAG
00028 {
00029     REFLECTION_METHOD_TYPE,
00030     REFLECTION_DESIRED_PROPERTY_TYPE,
00031     REFLECTION_REPORTED_PROPERTY_TYPE,
00032     REFLECTION_STRUCT_TYPE,
00033     REFLECTION_FIELD_TYPE,
00034     REFLECTION_PROPERTY_TYPE,
00035     REFLECTION_ACTION_TYPE,
00036     REFLECTION_MODEL_TYPE,
00037     REFLECTION_NOTHING
00038 }REFLECTION_TYPE;
00039 
00040 typedef EXECUTE_COMMAND_RESULT (*actionWrapper)(void* device, size_t ParameterCount, const AGENT_DATA_TYPE* values);
00041 
00042 typedef METHODRETURN_HANDLE (*methodWrapper)(void* device, size_t ParameterCount, const AGENT_DATA_TYPE* values);
00043 
00044 typedef struct REFLECTION_STRUCT_TAG
00045 {
00046     const char* name;
00047 }REFLECTION_STRUCT;
00048 
00049 typedef struct WRAPPER_ARGUMENT_TAG
00050 {
00051     const char* type;
00052     const char* name;
00053 }WRAPPER_ARGUMENT;
00054 
00055 typedef struct REFLECTION_ACTION_TAG
00056 {
00057     const char* name;
00058     size_t nArguments;
00059     const WRAPPER_ARGUMENT* arguments;
00060     actionWrapper wrapper;
00061     const char* modelName;
00062 }REFLECTION_ACTION;
00063 
00064 typedef struct REFLECTION_METHOD_TAG
00065 {
00066     const char* name;
00067     size_t nArguments;
00068     const WRAPPER_ARGUMENT* arguments;
00069     methodWrapper wrapper;
00070     const char* modelName;
00071 }REFLECTION_METHOD;
00072 
00073 typedef struct REFLECTION_FIELD_TAG
00074 {
00075     const char* fieldName;
00076     const char* fieldType;
00077     const char* structName;
00078 }REFLECTION_FIELD;
00079 
00080 typedef struct REFLECTION_PROPERTY_TAG
00081 {
00082     const char* name;
00083     const char* type;
00084     int(*Create_AGENT_DATA_TYPE_from_Ptr)(void* param, AGENT_DATA_TYPE* dest);
00085     size_t offset;
00086     size_t size;
00087     const char* modelName;
00088 } REFLECTION_PROPERTY;
00089 
00090 
00091 typedef struct REFLECTION_REPORTED_PROPERTY_TAG
00092 {
00093     const char* name;
00094     const char* type;
00095     int(*Create_AGENT_DATA_TYPE_from_Ptr)(void* param, AGENT_DATA_TYPE* dest);
00096     size_t offset;
00097     size_t size;
00098     const char* modelName;
00099 } REFLECTION_REPORTED_PROPERTY;
00100 
00101 typedef struct REFLECTION_DESIRED_PROPERTY_TAG
00102 {
00103     pfOnDesiredProperty onDesiredProperty;
00104     void(*desiredPropertInitialize)(void* destination);
00105     void(*desiredPropertDeinitialize)(void* destination);
00106     const char* name;
00107     const char* type;
00108     int(*FromAGENT_DATA_TYPE)(const AGENT_DATA_TYPE* source, void* dest); /*destination is "something" everytime. When the DESIRED_PROPERTY is a MODEL, the function is empty*/
00109     size_t offset;
00110     size_t size;
00111     const char* modelName;
00112 } REFLECTION_DESIRED_PROPERTY;
00113 
00114 typedef struct REFLECTION_MODEL_TAG
00115 {
00116     const char* name;
00117 } REFLECTION_MODEL;
00118 
00119 typedef struct REFLECTED_SOMETHING_TAG
00120 {
00121     REFLECTION_TYPE type;
00122     const struct REFLECTED_SOMETHING_TAG* next;
00123     struct what
00124     {
00125         REFLECTION_METHOD method;
00126         REFLECTION_DESIRED_PROPERTY desiredProperty;
00127         REFLECTION_REPORTED_PROPERTY reportedProperty;
00128         REFLECTION_STRUCT structure;
00129         REFLECTION_FIELD field;
00130         REFLECTION_PROPERTY property;
00131         REFLECTION_ACTION action;
00132         REFLECTION_MODEL model;
00133     } what;
00134 } REFLECTED_SOMETHING;
00135 
00136 typedef struct REFLECTED_DATA_FROM_DATAPROVIDER_TAG
00137 {
00138     const REFLECTED_SOMETHING* reflectedData;
00139 }REFLECTED_DATA_FROM_DATAPROVIDER;
00140 
00141 #define ALL_SOMETHING_REFLECTED(schemaNamespace) C2(schemaNamespace, _allSomethingReflected)
00142 #define ALL_REFLECTED(schemaNamespace) C2(schemaNamespace, _allReflected)
00143 #define ADDRESS_OF_ALL_REFLECTED(schemaNamespace) & C2(schemaNamespace, _allReflected),
00144 #define DECLARE_EXTERN_CONST_DATAPROVIDER_DATA(x) extern const REFLECTED_DATA_FROM_DATAPROVIDER ALL_REFLECTED(x);
00145 
00146 #define CODEFIRST_RESULT_VALUES                \
00147 CODEFIRST_OK,                                  \
00148 CODEFIRST_INVALID_ARG,                         \
00149 CODEFIRST_ALREADY_INIT,                        \
00150 CODEFIRST_NOT_INIT,                            \
00151 CODEFIRST_ERROR,                               \
00152 CODEFIRST_NOT_ENOUGH_MEMORY,                   \
00153 CODEFIRST_ACTION_NOT_FOUND,                    \
00154 CODEFIRST_ACTION_EXECUTION_ERROR,              \
00155 CODEFIRST_SCHEMA_ERROR,                        \
00156 CODEFIRST_AGENT_DATA_TYPE_ERROR,               \
00157 CODEFIRST_VALUES_FROM_DIFFERENT_DEVICES_ERROR, \
00158 CODEFIRST_DEVICE_FAILED,                       \
00159 CODEFIRST_DEVICE_PUBLISH_FAILED,               \
00160 CODEFIRST_NOT_A_PROPERTY
00161 
00162 DEFINE_ENUM(CODEFIRST_RESULT, CODEFIRST_RESULT_VALUES)
00163 
00164 #include "azure_c_shared_utility/umock_c_prod.h"
00165 MOCKABLE_FUNCTION(, CODEFIRST_RESULT, CodeFirst_Init, const char*, overrideSchemaNamespace);
00166 MOCKABLE_FUNCTION(, void, CodeFirst_Deinit);
00167 MOCKABLE_FUNCTION(, SCHEMA_HANDLE, CodeFirst_RegisterSchema, const char*, schemaNamespace, const REFLECTED_DATA_FROM_DATAPROVIDER*, metadata);
00168 
00169 MOCKABLE_FUNCTION(, EXECUTE_COMMAND_RESULT, CodeFirst_InvokeAction, DEVICE_HANDLE, deviceHandle, void*, callbackUserContext, const char*, relativeActionPath, const char*, actionName, size_t, parameterCount, const AGENT_DATA_TYPE*, parameterValues);
00170 
00171 MOCKABLE_FUNCTION(, METHODRETURN_HANDLE, CodeFirst_InvokeMethod, DEVICE_HANDLE, deviceHandle, void*, callbackUserContext, const char*, relativeMethodPath, const char*, methodName, size_t, parameterCount, const AGENT_DATA_TYPE*, parameterValues);
00172 
00173 MOCKABLE_FUNCTION(, EXECUTE_COMMAND_RESULT, CodeFirst_ExecuteCommand, void*, device, const char*, command);
00174 
00175 MOCKABLE_FUNCTION(, METHODRETURN_HANDLE, CodeFirst_ExecuteMethod, void*, device, const char*, methodName, const char*, methodPayload);
00176 
00177 MOCKABLE_FUNCTION(, void*, CodeFirst_CreateDevice, SCHEMA_MODEL_TYPE_HANDLE, model, const REFLECTED_DATA_FROM_DATAPROVIDER*, metadata, size_t, dataSize, bool, includePropertyPath);
00178 MOCKABLE_FUNCTION(, void, CodeFirst_DestroyDevice, void*, device);
00179 
00180 extern CODEFIRST_RESULT CodeFirst_SendAsync(unsigned char** destination, size_t* destinationSize, size_t numProperties, ...);
00181 extern CODEFIRST_RESULT CodeFirst_SendAsyncReported(unsigned char** destination, size_t* destinationSize, size_t numReportedProperties, ...);
00182 
00183 MOCKABLE_FUNCTION(, CODEFIRST_RESULT, CodeFirst_IngestDesiredProperties, void*, device, const char*, jsonPayload, bool, parseDesiredNode);
00184 
00185 MOCKABLE_FUNCTION(, AGENT_DATA_TYPE_TYPE, CodeFirst_GetPrimitiveType, const char*, typeName);
00186 
00187 #ifdef __cplusplus
00188 }
00189 #endif
00190 
00191 #endif /* CODEFIRST_H */