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
Diff: codefirst.h
- Revision:
- 0:1f9b2707ec7d
- Child:
- 10:c2aee3965a83
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/codefirst.h Tue Sep 15 21:57:26 2015 -0700 @@ -0,0 +1,140 @@ +// 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 */