Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: sht15_remote_monitoring f767zi_mqtt remote_monitoring simplesample_amqp ... more
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 */
Generated on Tue Jul 12 2022 19:56:37 by
1.7.2