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

Revision:
17:fa1bba4c6053
Parent:
10:c2aee3965a83
Child:
18:58b667752399
--- a/codefirst.h	Thu Oct 20 17:08:06 2016 -0700
+++ b/codefirst.h	Wed Nov 16 21:38:26 2016 -0800
@@ -24,6 +24,8 @@
 
 typedef enum REFLECTION_TYPE_TAG
 {
+    REFLECTION_DESIRED_PROPERTY_TYPE,
+    REFLECTION_REPORTED_PROPERTY_TYPE,
     REFLECTION_STRUCT_TYPE,
     REFLECTION_FIELD_TYPE,
     REFLECTION_PROPERTY_TYPE,
@@ -71,6 +73,30 @@
     const char* modelName;
 } REFLECTION_PROPERTY;
 
+
+typedef struct REFLECTION_REPORTED_PROPERTY_TAG
+{
+    const char* name;
+    const char* type;
+    int(*Create_AGENT_DATA_TYPE_from_Ptr)(void* param, AGENT_DATA_TYPE* dest);
+    size_t offset;
+    size_t size;
+    const char* modelName;
+} REFLECTION_REPORTED_PROPERTY;
+
+typedef struct REFLECTION_DESIRED_PROPERTY_TAG
+{
+    pfOnDesiredProperty onDesiredProperty;
+    void(*desiredPropertInitialize)(void* destination);
+    void(*desiredPropertDeinitialize)(void* destination);
+    const char* name;
+    const char* type;
+    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*/
+    size_t offset;
+    size_t size;
+    const char* modelName;
+} REFLECTION_DESIRED_PROPERTY;
+
 typedef struct REFLECTION_MODEL_TAG
 {
     const char* name;
@@ -82,6 +108,8 @@
     const struct REFLECTED_SOMETHING_TAG* next;
     struct what
     {
+        REFLECTION_DESIRED_PROPERTY desiredProperty;
+        REFLECTION_REPORTED_PROPERTY reportedProperty;
         REFLECTION_STRUCT structure;
         REFLECTION_FIELD field;
         REFLECTION_PROPERTY property;
@@ -100,7 +128,7 @@
 #define ADDRESS_OF_ALL_REFLECTED(schemaNamespace) & C2(schemaNamespace, _allReflected),
 #define DECLARE_EXTERN_CONST_DATAPROVIDER_DATA(x) extern const REFLECTED_DATA_FROM_DATAPROVIDER ALL_REFLECTED(x);
 
-#define CODEFIRST_ENUM_VALUES                  \
+#define CODEFIRST_RESULT_VALUES                \
 CODEFIRST_OK,                                  \
 CODEFIRST_INVALID_ARG,                         \
 CODEFIRST_ALREADY_INIT,                        \
@@ -116,22 +144,26 @@
 CODEFIRST_DEVICE_PUBLISH_FAILED,               \
 CODEFIRST_NOT_A_PROPERTY
 
-DEFINE_ENUM(CODEFIRST_RESULT, CODEFIRST_ENUM_VALUES)
+DEFINE_ENUM(CODEFIRST_RESULT, CODEFIRST_RESULT_VALUES)
 
-extern CODEFIRST_RESULT CodeFirst_Init(const char* overrideSchemaNamespace);
-extern void CodeFirst_Deinit(void);
-extern SCHEMA_HANDLE CodeFirst_RegisterSchema(const char* schemaNamespace, const REFLECTED_DATA_FROM_DATAPROVIDER* metadata);
+#include "azure_c_shared_utility/umock_c_prod.h"
+MOCKABLE_FUNCTION(, CODEFIRST_RESULT, CodeFirst_Init, const char*, overrideSchemaNamespace);
+MOCKABLE_FUNCTION(, void, CodeFirst_Deinit);
+MOCKABLE_FUNCTION(, SCHEMA_HANDLE, CodeFirst_RegisterSchema, const char*, schemaNamespace, const REFLECTED_DATA_FROM_DATAPROVIDER*, metadata);
 
-extern EXECUTE_COMMAND_RESULT CodeFirst_InvokeAction(void* deviceHandle, void* callbackUserContext, const char* relativeActionPath, const char* actionName, size_t parameterCount, const AGENT_DATA_TYPE* parameterValues);
+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);
 
-extern EXECUTE_COMMAND_RESULT CodeFirst_ExecuteCommand(void* device, const char* command);
+MOCKABLE_FUNCTION(, EXECUTE_COMMAND_RESULT, CodeFirst_ExecuteCommand, void*, device, const char*, command);
 
-extern void* CodeFirst_CreateDevice(SCHEMA_MODEL_TYPE_HANDLE model, const REFLECTED_DATA_FROM_DATAPROVIDER* metadata, size_t dataSize, bool includePropertyPath);
-extern void CodeFirst_DestroyDevice(void* device);
+MOCKABLE_FUNCTION(, void*, CodeFirst_CreateDevice, SCHEMA_MODEL_TYPE_HANDLE, model, const REFLECTED_DATA_FROM_DATAPROVIDER*, metadata, size_t, dataSize, bool, includePropertyPath);
+MOCKABLE_FUNCTION(, void, CodeFirst_DestroyDevice, void*, device);
 
 extern CODEFIRST_RESULT CodeFirst_SendAsync(unsigned char** destination, size_t* destinationSize, size_t numProperties, ...);
+extern CODEFIRST_RESULT CodeFirst_SendAsyncReported(unsigned char** destination, size_t* destinationSize, size_t numReportedProperties, ...);
 
-extern AGENT_DATA_TYPE_TYPE CodeFirst_GetPrimitiveType(const char* typeName);
+MOCKABLE_FUNCTION(, CODEFIRST_RESULT, CodeFirst_IngestDesiredProperties, void*, device, const char*, desiredProperties);
+
+MOCKABLE_FUNCTION(, AGENT_DATA_TYPE_TYPE, CodeFirst_GetPrimitiveType, const char*, typeName);
 
 #ifdef __cplusplus
 }