Xin Zhang / azure-iot-c-sdk-f767zi

Dependents:   samplemqtt

Committer:
XinZhangMS
Date:
Thu Aug 23 06:52:14 2018 +0000
Revision:
0:f7f1f0d76dd6
azure-c-sdk for mbed os supporting NUCLEO_F767ZI

Who changed what in which revision?

UserRevisionLine numberNew contents of line
XinZhangMS 0:f7f1f0d76dd6 1 // Copyright (c) Microsoft. All rights reserved.
XinZhangMS 0:f7f1f0d76dd6 2 // Licensed under the MIT license. See LICENSE file in the project root for full license information.
XinZhangMS 0:f7f1f0d76dd6 3
XinZhangMS 0:f7f1f0d76dd6 4 #ifndef CODEFIRST_H
XinZhangMS 0:f7f1f0d76dd6 5 #define CODEFIRST_H
XinZhangMS 0:f7f1f0d76dd6 6
XinZhangMS 0:f7f1f0d76dd6 7 #include "methodreturn.h"
XinZhangMS 0:f7f1f0d76dd6 8 #include "agenttypesystem.h"
XinZhangMS 0:f7f1f0d76dd6 9 #include "schema.h"
XinZhangMS 0:f7f1f0d76dd6 10 #include "azure_c_shared_utility/macro_utils.h"
XinZhangMS 0:f7f1f0d76dd6 11 #include "azure_c_shared_utility/strings.h"
XinZhangMS 0:f7f1f0d76dd6 12 #include "iotdevice.h"
XinZhangMS 0:f7f1f0d76dd6 13
XinZhangMS 0:f7f1f0d76dd6 14 #ifdef __cplusplus
XinZhangMS 0:f7f1f0d76dd6 15 #include <cstddef>
XinZhangMS 0:f7f1f0d76dd6 16 #include <cstdarg>
XinZhangMS 0:f7f1f0d76dd6 17 extern "C" {
XinZhangMS 0:f7f1f0d76dd6 18 #else
XinZhangMS 0:f7f1f0d76dd6 19 #include <stddef.h>
XinZhangMS 0:f7f1f0d76dd6 20 #include <stdarg.h>
XinZhangMS 0:f7f1f0d76dd6 21 #include <stdbool.h>
XinZhangMS 0:f7f1f0d76dd6 22 #endif
XinZhangMS 0:f7f1f0d76dd6 23
XinZhangMS 0:f7f1f0d76dd6 24 typedef char* ascii_char_ptr;
XinZhangMS 0:f7f1f0d76dd6 25 typedef char* ascii_char_ptr_no_quotes;
XinZhangMS 0:f7f1f0d76dd6 26
XinZhangMS 0:f7f1f0d76dd6 27 typedef enum REFLECTION_TYPE_TAG
XinZhangMS 0:f7f1f0d76dd6 28 {
XinZhangMS 0:f7f1f0d76dd6 29 REFLECTION_METHOD_TYPE,
XinZhangMS 0:f7f1f0d76dd6 30 REFLECTION_DESIRED_PROPERTY_TYPE,
XinZhangMS 0:f7f1f0d76dd6 31 REFLECTION_REPORTED_PROPERTY_TYPE,
XinZhangMS 0:f7f1f0d76dd6 32 REFLECTION_STRUCT_TYPE,
XinZhangMS 0:f7f1f0d76dd6 33 REFLECTION_FIELD_TYPE,
XinZhangMS 0:f7f1f0d76dd6 34 REFLECTION_PROPERTY_TYPE,
XinZhangMS 0:f7f1f0d76dd6 35 REFLECTION_ACTION_TYPE,
XinZhangMS 0:f7f1f0d76dd6 36 REFLECTION_MODEL_TYPE,
XinZhangMS 0:f7f1f0d76dd6 37 REFLECTION_NOTHING
XinZhangMS 0:f7f1f0d76dd6 38 }REFLECTION_TYPE;
XinZhangMS 0:f7f1f0d76dd6 39
XinZhangMS 0:f7f1f0d76dd6 40 typedef EXECUTE_COMMAND_RESULT (*actionWrapper)(void* device, size_t ParameterCount, const AGENT_DATA_TYPE* values);
XinZhangMS 0:f7f1f0d76dd6 41
XinZhangMS 0:f7f1f0d76dd6 42 typedef METHODRETURN_HANDLE (*methodWrapper)(void* device, size_t ParameterCount, const AGENT_DATA_TYPE* values);
XinZhangMS 0:f7f1f0d76dd6 43
XinZhangMS 0:f7f1f0d76dd6 44 typedef struct REFLECTION_STRUCT_TAG
XinZhangMS 0:f7f1f0d76dd6 45 {
XinZhangMS 0:f7f1f0d76dd6 46 const char* name;
XinZhangMS 0:f7f1f0d76dd6 47 }REFLECTION_STRUCT;
XinZhangMS 0:f7f1f0d76dd6 48
XinZhangMS 0:f7f1f0d76dd6 49 typedef struct WRAPPER_ARGUMENT_TAG
XinZhangMS 0:f7f1f0d76dd6 50 {
XinZhangMS 0:f7f1f0d76dd6 51 const char* type;
XinZhangMS 0:f7f1f0d76dd6 52 const char* name;
XinZhangMS 0:f7f1f0d76dd6 53 }WRAPPER_ARGUMENT;
XinZhangMS 0:f7f1f0d76dd6 54
XinZhangMS 0:f7f1f0d76dd6 55 typedef struct REFLECTION_ACTION_TAG
XinZhangMS 0:f7f1f0d76dd6 56 {
XinZhangMS 0:f7f1f0d76dd6 57 const char* name;
XinZhangMS 0:f7f1f0d76dd6 58 size_t nArguments;
XinZhangMS 0:f7f1f0d76dd6 59 const WRAPPER_ARGUMENT* arguments;
XinZhangMS 0:f7f1f0d76dd6 60 actionWrapper wrapper;
XinZhangMS 0:f7f1f0d76dd6 61 const char* modelName;
XinZhangMS 0:f7f1f0d76dd6 62 }REFLECTION_ACTION;
XinZhangMS 0:f7f1f0d76dd6 63
XinZhangMS 0:f7f1f0d76dd6 64 typedef struct REFLECTION_METHOD_TAG
XinZhangMS 0:f7f1f0d76dd6 65 {
XinZhangMS 0:f7f1f0d76dd6 66 const char* name;
XinZhangMS 0:f7f1f0d76dd6 67 size_t nArguments;
XinZhangMS 0:f7f1f0d76dd6 68 const WRAPPER_ARGUMENT* arguments;
XinZhangMS 0:f7f1f0d76dd6 69 methodWrapper wrapper;
XinZhangMS 0:f7f1f0d76dd6 70 const char* modelName;
XinZhangMS 0:f7f1f0d76dd6 71 }REFLECTION_METHOD;
XinZhangMS 0:f7f1f0d76dd6 72
XinZhangMS 0:f7f1f0d76dd6 73 typedef struct REFLECTION_FIELD_TAG
XinZhangMS 0:f7f1f0d76dd6 74 {
XinZhangMS 0:f7f1f0d76dd6 75 const char* fieldName;
XinZhangMS 0:f7f1f0d76dd6 76 const char* fieldType;
XinZhangMS 0:f7f1f0d76dd6 77 const char* structName;
XinZhangMS 0:f7f1f0d76dd6 78 }REFLECTION_FIELD;
XinZhangMS 0:f7f1f0d76dd6 79
XinZhangMS 0:f7f1f0d76dd6 80 typedef struct REFLECTION_PROPERTY_TAG
XinZhangMS 0:f7f1f0d76dd6 81 {
XinZhangMS 0:f7f1f0d76dd6 82 const char* name;
XinZhangMS 0:f7f1f0d76dd6 83 const char* type;
XinZhangMS 0:f7f1f0d76dd6 84 int(*Create_AGENT_DATA_TYPE_from_Ptr)(void* param, AGENT_DATA_TYPE* dest);
XinZhangMS 0:f7f1f0d76dd6 85 size_t offset;
XinZhangMS 0:f7f1f0d76dd6 86 size_t size;
XinZhangMS 0:f7f1f0d76dd6 87 const char* modelName;
XinZhangMS 0:f7f1f0d76dd6 88 } REFLECTION_PROPERTY;
XinZhangMS 0:f7f1f0d76dd6 89
XinZhangMS 0:f7f1f0d76dd6 90
XinZhangMS 0:f7f1f0d76dd6 91 typedef struct REFLECTION_REPORTED_PROPERTY_TAG
XinZhangMS 0:f7f1f0d76dd6 92 {
XinZhangMS 0:f7f1f0d76dd6 93 const char* name;
XinZhangMS 0:f7f1f0d76dd6 94 const char* type;
XinZhangMS 0:f7f1f0d76dd6 95 int(*Create_AGENT_DATA_TYPE_from_Ptr)(void* param, AGENT_DATA_TYPE* dest);
XinZhangMS 0:f7f1f0d76dd6 96 size_t offset;
XinZhangMS 0:f7f1f0d76dd6 97 size_t size;
XinZhangMS 0:f7f1f0d76dd6 98 const char* modelName;
XinZhangMS 0:f7f1f0d76dd6 99 } REFLECTION_REPORTED_PROPERTY;
XinZhangMS 0:f7f1f0d76dd6 100
XinZhangMS 0:f7f1f0d76dd6 101 typedef struct REFLECTION_DESIRED_PROPERTY_TAG
XinZhangMS 0:f7f1f0d76dd6 102 {
XinZhangMS 0:f7f1f0d76dd6 103 pfOnDesiredProperty onDesiredProperty;
XinZhangMS 0:f7f1f0d76dd6 104 void(*desiredPropertInitialize)(void* destination);
XinZhangMS 0:f7f1f0d76dd6 105 void(*desiredPropertDeinitialize)(void* destination);
XinZhangMS 0:f7f1f0d76dd6 106 const char* name;
XinZhangMS 0:f7f1f0d76dd6 107 const char* type;
XinZhangMS 0:f7f1f0d76dd6 108 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*/
XinZhangMS 0:f7f1f0d76dd6 109 size_t offset;
XinZhangMS 0:f7f1f0d76dd6 110 size_t size;
XinZhangMS 0:f7f1f0d76dd6 111 const char* modelName;
XinZhangMS 0:f7f1f0d76dd6 112 } REFLECTION_DESIRED_PROPERTY;
XinZhangMS 0:f7f1f0d76dd6 113
XinZhangMS 0:f7f1f0d76dd6 114 typedef struct REFLECTION_MODEL_TAG
XinZhangMS 0:f7f1f0d76dd6 115 {
XinZhangMS 0:f7f1f0d76dd6 116 const char* name;
XinZhangMS 0:f7f1f0d76dd6 117 } REFLECTION_MODEL;
XinZhangMS 0:f7f1f0d76dd6 118
XinZhangMS 0:f7f1f0d76dd6 119 typedef struct REFLECTED_SOMETHING_TAG
XinZhangMS 0:f7f1f0d76dd6 120 {
XinZhangMS 0:f7f1f0d76dd6 121 REFLECTION_TYPE type;
XinZhangMS 0:f7f1f0d76dd6 122 const struct REFLECTED_SOMETHING_TAG* next;
XinZhangMS 0:f7f1f0d76dd6 123 struct what
XinZhangMS 0:f7f1f0d76dd6 124 {
XinZhangMS 0:f7f1f0d76dd6 125 REFLECTION_METHOD method;
XinZhangMS 0:f7f1f0d76dd6 126 REFLECTION_DESIRED_PROPERTY desiredProperty;
XinZhangMS 0:f7f1f0d76dd6 127 REFLECTION_REPORTED_PROPERTY reportedProperty;
XinZhangMS 0:f7f1f0d76dd6 128 REFLECTION_STRUCT structure;
XinZhangMS 0:f7f1f0d76dd6 129 REFLECTION_FIELD field;
XinZhangMS 0:f7f1f0d76dd6 130 REFLECTION_PROPERTY property;
XinZhangMS 0:f7f1f0d76dd6 131 REFLECTION_ACTION action;
XinZhangMS 0:f7f1f0d76dd6 132 REFLECTION_MODEL model;
XinZhangMS 0:f7f1f0d76dd6 133 } what;
XinZhangMS 0:f7f1f0d76dd6 134 } REFLECTED_SOMETHING;
XinZhangMS 0:f7f1f0d76dd6 135
XinZhangMS 0:f7f1f0d76dd6 136 typedef struct REFLECTED_DATA_FROM_DATAPROVIDER_TAG
XinZhangMS 0:f7f1f0d76dd6 137 {
XinZhangMS 0:f7f1f0d76dd6 138 const REFLECTED_SOMETHING* reflectedData;
XinZhangMS 0:f7f1f0d76dd6 139 }REFLECTED_DATA_FROM_DATAPROVIDER;
XinZhangMS 0:f7f1f0d76dd6 140
XinZhangMS 0:f7f1f0d76dd6 141 #define ALL_SOMETHING_REFLECTED(schemaNamespace) C2(schemaNamespace, _allSomethingReflected)
XinZhangMS 0:f7f1f0d76dd6 142 #define ALL_REFLECTED(schemaNamespace) C2(schemaNamespace, _allReflected)
XinZhangMS 0:f7f1f0d76dd6 143 #define ADDRESS_OF_ALL_REFLECTED(schemaNamespace) & C2(schemaNamespace, _allReflected),
XinZhangMS 0:f7f1f0d76dd6 144 #define DECLARE_EXTERN_CONST_DATAPROVIDER_DATA(x) extern const REFLECTED_DATA_FROM_DATAPROVIDER ALL_REFLECTED(x);
XinZhangMS 0:f7f1f0d76dd6 145
XinZhangMS 0:f7f1f0d76dd6 146 #define CODEFIRST_RESULT_VALUES \
XinZhangMS 0:f7f1f0d76dd6 147 CODEFIRST_OK, \
XinZhangMS 0:f7f1f0d76dd6 148 CODEFIRST_INVALID_ARG, \
XinZhangMS 0:f7f1f0d76dd6 149 CODEFIRST_ALREADY_INIT, \
XinZhangMS 0:f7f1f0d76dd6 150 CODEFIRST_NOT_INIT, \
XinZhangMS 0:f7f1f0d76dd6 151 CODEFIRST_ERROR, \
XinZhangMS 0:f7f1f0d76dd6 152 CODEFIRST_NOT_ENOUGH_MEMORY, \
XinZhangMS 0:f7f1f0d76dd6 153 CODEFIRST_ACTION_NOT_FOUND, \
XinZhangMS 0:f7f1f0d76dd6 154 CODEFIRST_ACTION_EXECUTION_ERROR, \
XinZhangMS 0:f7f1f0d76dd6 155 CODEFIRST_SCHEMA_ERROR, \
XinZhangMS 0:f7f1f0d76dd6 156 CODEFIRST_AGENT_DATA_TYPE_ERROR, \
XinZhangMS 0:f7f1f0d76dd6 157 CODEFIRST_VALUES_FROM_DIFFERENT_DEVICES_ERROR, \
XinZhangMS 0:f7f1f0d76dd6 158 CODEFIRST_DEVICE_FAILED, \
XinZhangMS 0:f7f1f0d76dd6 159 CODEFIRST_DEVICE_PUBLISH_FAILED, \
XinZhangMS 0:f7f1f0d76dd6 160 CODEFIRST_NOT_A_PROPERTY
XinZhangMS 0:f7f1f0d76dd6 161
XinZhangMS 0:f7f1f0d76dd6 162 DEFINE_ENUM(CODEFIRST_RESULT, CODEFIRST_RESULT_VALUES)
XinZhangMS 0:f7f1f0d76dd6 163
XinZhangMS 0:f7f1f0d76dd6 164 #include "azure_c_shared_utility/umock_c_prod.h"
XinZhangMS 0:f7f1f0d76dd6 165 MOCKABLE_FUNCTION(, CODEFIRST_RESULT, CodeFirst_Init, const char*, overrideSchemaNamespace);
XinZhangMS 0:f7f1f0d76dd6 166 MOCKABLE_FUNCTION(, void, CodeFirst_Deinit);
XinZhangMS 0:f7f1f0d76dd6 167 MOCKABLE_FUNCTION(, SCHEMA_HANDLE, CodeFirst_RegisterSchema, const char*, schemaNamespace, const REFLECTED_DATA_FROM_DATAPROVIDER*, metadata);
XinZhangMS 0:f7f1f0d76dd6 168
XinZhangMS 0:f7f1f0d76dd6 169 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);
XinZhangMS 0:f7f1f0d76dd6 170
XinZhangMS 0:f7f1f0d76dd6 171 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);
XinZhangMS 0:f7f1f0d76dd6 172
XinZhangMS 0:f7f1f0d76dd6 173 MOCKABLE_FUNCTION(, EXECUTE_COMMAND_RESULT, CodeFirst_ExecuteCommand, void*, device, const char*, command);
XinZhangMS 0:f7f1f0d76dd6 174
XinZhangMS 0:f7f1f0d76dd6 175 MOCKABLE_FUNCTION(, METHODRETURN_HANDLE, CodeFirst_ExecuteMethod, void*, device, const char*, methodName, const char*, methodPayload);
XinZhangMS 0:f7f1f0d76dd6 176
XinZhangMS 0:f7f1f0d76dd6 177 MOCKABLE_FUNCTION(, void*, CodeFirst_CreateDevice, SCHEMA_MODEL_TYPE_HANDLE, model, const REFLECTED_DATA_FROM_DATAPROVIDER*, metadata, size_t, dataSize, bool, includePropertyPath);
XinZhangMS 0:f7f1f0d76dd6 178 MOCKABLE_FUNCTION(, void, CodeFirst_DestroyDevice, void*, device);
XinZhangMS 0:f7f1f0d76dd6 179
XinZhangMS 0:f7f1f0d76dd6 180 extern CODEFIRST_RESULT CodeFirst_SendAsync(unsigned char** destination, size_t* destinationSize, size_t numProperties, ...);
XinZhangMS 0:f7f1f0d76dd6 181 extern CODEFIRST_RESULT CodeFirst_SendAsyncReported(unsigned char** destination, size_t* destinationSize, size_t numReportedProperties, ...);
XinZhangMS 0:f7f1f0d76dd6 182
XinZhangMS 0:f7f1f0d76dd6 183 MOCKABLE_FUNCTION(, CODEFIRST_RESULT, CodeFirst_IngestDesiredProperties, void*, device, const char*, jsonPayload, bool, parseDesiredNode);
XinZhangMS 0:f7f1f0d76dd6 184
XinZhangMS 0:f7f1f0d76dd6 185 MOCKABLE_FUNCTION(, AGENT_DATA_TYPE_TYPE, CodeFirst_GetPrimitiveType, const char*, typeName);
XinZhangMS 0:f7f1f0d76dd6 186
XinZhangMS 0:f7f1f0d76dd6 187 #ifdef __cplusplus
XinZhangMS 0:f7f1f0d76dd6 188 }
XinZhangMS 0:f7f1f0d76dd6 189 #endif
XinZhangMS 0:f7f1f0d76dd6 190
XinZhangMS 0:f7f1f0d76dd6 191 #endif /* CODEFIRST_H */