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
codefirst.h
- Committer:
- AzureIoTClient
- Date:
- 2015-09-15
- Revision:
- 0:1f9b2707ec7d
- Child:
- 10:c2aee3965a83
File content as of revision 0:1f9b2707ec7d:
// Copyright (c) Microsoft. All rights reserved. // Licensed under the MIT license. See LICENSE file in the project root for full license information. #ifndef CODEFIRST_H #define CODEFIRST_H #include "agenttypesystem.h" #include "schema.h" #include "macro_utils.h" #include "strings.h" #include "iotdevice.h" #ifdef __cplusplus #include <cstddef> #include <cstdarg> extern "C" { #else #include <stddef.h> #include <stdarg.h> #endif typedef char* ascii_char_ptr; typedef char* ascii_char_ptr_no_quotes; typedef enum REFLECTION_TYPE_TAG { REFLECTION_STRUCT_TYPE, REFLECTION_FIELD_TYPE, REFLECTION_PROPERTY_TYPE, REFLECTION_ACTION_TYPE, REFLECTION_MODEL_TYPE, REFLECTION_NOTHING }REFLECTION_TYPE; typedef EXECUTE_COMMAND_RESULT (*actionWrapper)(void* device, size_t ParameterCount, const AGENT_DATA_TYPE* values); typedef struct REFLECTION_STRUCT_TAG { const char* name; }REFLECTION_STRUCT; typedef struct WRAPPER_ARGUMENT_TAG { const char* type; const char* name; }WRAPPER_ARGUMENT; typedef struct REFLECTION_ACTION_TAG { const char* name; size_t nArguments; const WRAPPER_ARGUMENT* arguments; actionWrapper wrapper; const char* modelName; }REFLECTION_ACTION; typedef struct REFLECTION_FIELD_TAG { const char* fieldName; const char* fieldType; const char* structName; }REFLECTION_FIELD; typedef struct REFLECTION_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_PROPERTY; typedef struct REFLECTION_MODEL_TAG { const char* name; } REFLECTION_MODEL; typedef struct REFLECTED_SOMETHING_TAG { REFLECTION_TYPE type; const struct REFLECTED_SOMETHING_TAG* next; struct what { REFLECTION_STRUCT structure; REFLECTION_FIELD field; REFLECTION_PROPERTY property; REFLECTION_ACTION action; REFLECTION_MODEL model; } what; } REFLECTED_SOMETHING; typedef struct REFLECTED_DATA_FROM_DATAPROVIDER_TAG { const REFLECTED_SOMETHING* reflectedData; }REFLECTED_DATA_FROM_DATAPROVIDER; #define ALL_SOMETHING_REFLECTED(schemaNamespace) C2(schemaNamespace, _allSomethingReflected) #define ALL_REFLECTED(schemaNamespace) C2(schemaNamespace, _allReflected) #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 \ CODEFIRST_OK, \ CODEFIRST_INVALID_ARG, \ CODEFIRST_ALREADY_INIT, \ CODEFIRST_NOT_INIT, \ CODEFIRST_ERROR, \ CODEFIRST_NOT_ENOUGH_MEMORY, \ CODEFIRST_ACTION_NOT_FOUND, \ CODEFIRST_ACTION_EXECUTION_ERROR, \ CODEFIRST_SCHEMA_ERROR, \ CODEFIRST_AGENT_DATA_TYPE_ERROR, \ CODEFIRST_VALUES_FROM_DIFFERENT_DEVICES_ERROR, \ CODEFIRST_DEVICE_FAILED, \ CODEFIRST_DEVICE_PUBLISH_FAILED, \ CODEFIRST_NOT_A_PROPERTY DEFINE_ENUM(CODEFIRST_RESULT, CODEFIRST_ENUM_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); extern EXECUTE_COMMAND_RESULT CodeFirst_InvokeAction(void* 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); 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); extern CODEFIRST_RESULT CodeFirst_SendAsync(unsigned char** destination, size_t* destinationSize, size_t numProperties, ...); extern AGENT_DATA_TYPE_TYPE CodeFirst_GetPrimitiveType(const char* typeName); #ifdef __cplusplus } #endif #endif /* CODEFIRST_H */