Azure IoT / serializer

Dependents:   sht15_remote_monitoring f767zi_mqtt remote_monitoring simplesample_amqp ... more

Committer:
AzureIoTClient
Date:
Thu Oct 22 18:33:28 2015 -0700
Revision:
4:233dd7616d73
Parent:
0:1f9b2707ec7d
Child:
10:c2aee3965a83
v1.0.0-preview.4

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AzureIoTClient 0:1f9b2707ec7d 1 // Copyright (c) Microsoft. All rights reserved.
AzureIoTClient 0:1f9b2707ec7d 2 // Licensed under the MIT license. See LICENSE file in the project root for full license information.
AzureIoTClient 0:1f9b2707ec7d 3
AzureIoTClient 0:1f9b2707ec7d 4 #ifndef CODEFIRST_H
AzureIoTClient 0:1f9b2707ec7d 5 #define CODEFIRST_H
AzureIoTClient 0:1f9b2707ec7d 6
AzureIoTClient 0:1f9b2707ec7d 7 #include "agenttypesystem.h"
AzureIoTClient 0:1f9b2707ec7d 8 #include "schema.h"
AzureIoTClient 0:1f9b2707ec7d 9 #include "macro_utils.h"
AzureIoTClient 0:1f9b2707ec7d 10 #include "strings.h"
AzureIoTClient 0:1f9b2707ec7d 11 #include "iotdevice.h"
AzureIoTClient 0:1f9b2707ec7d 12
AzureIoTClient 0:1f9b2707ec7d 13 #ifdef __cplusplus
AzureIoTClient 0:1f9b2707ec7d 14 #include <cstddef>
AzureIoTClient 0:1f9b2707ec7d 15 #include <cstdarg>
AzureIoTClient 0:1f9b2707ec7d 16 extern "C" {
AzureIoTClient 0:1f9b2707ec7d 17 #else
AzureIoTClient 0:1f9b2707ec7d 18 #include <stddef.h>
AzureIoTClient 0:1f9b2707ec7d 19 #include <stdarg.h>
AzureIoTClient 0:1f9b2707ec7d 20 #endif
AzureIoTClient 0:1f9b2707ec7d 21
AzureIoTClient 0:1f9b2707ec7d 22 typedef char* ascii_char_ptr;
AzureIoTClient 0:1f9b2707ec7d 23 typedef char* ascii_char_ptr_no_quotes;
AzureIoTClient 0:1f9b2707ec7d 24
AzureIoTClient 0:1f9b2707ec7d 25 typedef enum REFLECTION_TYPE_TAG
AzureIoTClient 0:1f9b2707ec7d 26 {
AzureIoTClient 0:1f9b2707ec7d 27 REFLECTION_STRUCT_TYPE,
AzureIoTClient 0:1f9b2707ec7d 28 REFLECTION_FIELD_TYPE,
AzureIoTClient 0:1f9b2707ec7d 29 REFLECTION_PROPERTY_TYPE,
AzureIoTClient 0:1f9b2707ec7d 30 REFLECTION_ACTION_TYPE,
AzureIoTClient 0:1f9b2707ec7d 31 REFLECTION_MODEL_TYPE,
AzureIoTClient 0:1f9b2707ec7d 32 REFLECTION_NOTHING
AzureIoTClient 0:1f9b2707ec7d 33 }REFLECTION_TYPE;
AzureIoTClient 0:1f9b2707ec7d 34
AzureIoTClient 0:1f9b2707ec7d 35 typedef EXECUTE_COMMAND_RESULT (*actionWrapper)(void* device, size_t ParameterCount, const AGENT_DATA_TYPE* values);
AzureIoTClient 0:1f9b2707ec7d 36
AzureIoTClient 0:1f9b2707ec7d 37 typedef struct REFLECTION_STRUCT_TAG
AzureIoTClient 0:1f9b2707ec7d 38 {
AzureIoTClient 0:1f9b2707ec7d 39 const char* name;
AzureIoTClient 0:1f9b2707ec7d 40 }REFLECTION_STRUCT;
AzureIoTClient 0:1f9b2707ec7d 41
AzureIoTClient 0:1f9b2707ec7d 42 typedef struct WRAPPER_ARGUMENT_TAG
AzureIoTClient 0:1f9b2707ec7d 43 {
AzureIoTClient 0:1f9b2707ec7d 44 const char* type;
AzureIoTClient 0:1f9b2707ec7d 45 const char* name;
AzureIoTClient 0:1f9b2707ec7d 46 }WRAPPER_ARGUMENT;
AzureIoTClient 0:1f9b2707ec7d 47
AzureIoTClient 0:1f9b2707ec7d 48 typedef struct REFLECTION_ACTION_TAG
AzureIoTClient 0:1f9b2707ec7d 49 {
AzureIoTClient 0:1f9b2707ec7d 50 const char* name;
AzureIoTClient 0:1f9b2707ec7d 51 size_t nArguments;
AzureIoTClient 0:1f9b2707ec7d 52 const WRAPPER_ARGUMENT* arguments;
AzureIoTClient 0:1f9b2707ec7d 53 actionWrapper wrapper;
AzureIoTClient 0:1f9b2707ec7d 54 const char* modelName;
AzureIoTClient 0:1f9b2707ec7d 55 }REFLECTION_ACTION;
AzureIoTClient 0:1f9b2707ec7d 56
AzureIoTClient 0:1f9b2707ec7d 57 typedef struct REFLECTION_FIELD_TAG
AzureIoTClient 0:1f9b2707ec7d 58 {
AzureIoTClient 0:1f9b2707ec7d 59 const char* fieldName;
AzureIoTClient 0:1f9b2707ec7d 60 const char* fieldType;
AzureIoTClient 0:1f9b2707ec7d 61 const char* structName;
AzureIoTClient 0:1f9b2707ec7d 62 }REFLECTION_FIELD;
AzureIoTClient 0:1f9b2707ec7d 63
AzureIoTClient 0:1f9b2707ec7d 64 typedef struct REFLECTION_PROPERTY_TAG
AzureIoTClient 0:1f9b2707ec7d 65 {
AzureIoTClient 0:1f9b2707ec7d 66 const char* name;
AzureIoTClient 0:1f9b2707ec7d 67 const char* type;
AzureIoTClient 0:1f9b2707ec7d 68 int(*Create_AGENT_DATA_TYPE_from_Ptr)(void* param, AGENT_DATA_TYPE* dest);
AzureIoTClient 0:1f9b2707ec7d 69 size_t offset;
AzureIoTClient 0:1f9b2707ec7d 70 size_t size;
AzureIoTClient 0:1f9b2707ec7d 71 const char* modelName;
AzureIoTClient 0:1f9b2707ec7d 72 } REFLECTION_PROPERTY;
AzureIoTClient 0:1f9b2707ec7d 73
AzureIoTClient 0:1f9b2707ec7d 74 typedef struct REFLECTION_MODEL_TAG
AzureIoTClient 0:1f9b2707ec7d 75 {
AzureIoTClient 0:1f9b2707ec7d 76 const char* name;
AzureIoTClient 0:1f9b2707ec7d 77 } REFLECTION_MODEL;
AzureIoTClient 0:1f9b2707ec7d 78
AzureIoTClient 0:1f9b2707ec7d 79 typedef struct REFLECTED_SOMETHING_TAG
AzureIoTClient 0:1f9b2707ec7d 80 {
AzureIoTClient 0:1f9b2707ec7d 81 REFLECTION_TYPE type;
AzureIoTClient 0:1f9b2707ec7d 82 const struct REFLECTED_SOMETHING_TAG* next;
AzureIoTClient 0:1f9b2707ec7d 83 struct what
AzureIoTClient 0:1f9b2707ec7d 84 {
AzureIoTClient 0:1f9b2707ec7d 85 REFLECTION_STRUCT structure;
AzureIoTClient 0:1f9b2707ec7d 86 REFLECTION_FIELD field;
AzureIoTClient 0:1f9b2707ec7d 87 REFLECTION_PROPERTY property;
AzureIoTClient 0:1f9b2707ec7d 88 REFLECTION_ACTION action;
AzureIoTClient 0:1f9b2707ec7d 89 REFLECTION_MODEL model;
AzureIoTClient 0:1f9b2707ec7d 90 } what;
AzureIoTClient 0:1f9b2707ec7d 91 } REFLECTED_SOMETHING;
AzureIoTClient 0:1f9b2707ec7d 92
AzureIoTClient 0:1f9b2707ec7d 93 typedef struct REFLECTED_DATA_FROM_DATAPROVIDER_TAG
AzureIoTClient 0:1f9b2707ec7d 94 {
AzureIoTClient 0:1f9b2707ec7d 95 const REFLECTED_SOMETHING* reflectedData;
AzureIoTClient 0:1f9b2707ec7d 96 }REFLECTED_DATA_FROM_DATAPROVIDER;
AzureIoTClient 0:1f9b2707ec7d 97
AzureIoTClient 0:1f9b2707ec7d 98 #define ALL_SOMETHING_REFLECTED(schemaNamespace) C2(schemaNamespace, _allSomethingReflected)
AzureIoTClient 0:1f9b2707ec7d 99 #define ALL_REFLECTED(schemaNamespace) C2(schemaNamespace, _allReflected)
AzureIoTClient 0:1f9b2707ec7d 100 #define ADDRESS_OF_ALL_REFLECTED(schemaNamespace) & C2(schemaNamespace, _allReflected),
AzureIoTClient 0:1f9b2707ec7d 101 #define DECLARE_EXTERN_CONST_DATAPROVIDER_DATA(x) extern const REFLECTED_DATA_FROM_DATAPROVIDER ALL_REFLECTED(x);
AzureIoTClient 0:1f9b2707ec7d 102
AzureIoTClient 0:1f9b2707ec7d 103 #define CODEFIRST_ENUM_VALUES \
AzureIoTClient 0:1f9b2707ec7d 104 CODEFIRST_OK, \
AzureIoTClient 0:1f9b2707ec7d 105 CODEFIRST_INVALID_ARG, \
AzureIoTClient 0:1f9b2707ec7d 106 CODEFIRST_ALREADY_INIT, \
AzureIoTClient 0:1f9b2707ec7d 107 CODEFIRST_NOT_INIT, \
AzureIoTClient 0:1f9b2707ec7d 108 CODEFIRST_ERROR, \
AzureIoTClient 0:1f9b2707ec7d 109 CODEFIRST_NOT_ENOUGH_MEMORY, \
AzureIoTClient 0:1f9b2707ec7d 110 CODEFIRST_ACTION_NOT_FOUND, \
AzureIoTClient 0:1f9b2707ec7d 111 CODEFIRST_ACTION_EXECUTION_ERROR, \
AzureIoTClient 0:1f9b2707ec7d 112 CODEFIRST_SCHEMA_ERROR, \
AzureIoTClient 0:1f9b2707ec7d 113 CODEFIRST_AGENT_DATA_TYPE_ERROR, \
AzureIoTClient 0:1f9b2707ec7d 114 CODEFIRST_VALUES_FROM_DIFFERENT_DEVICES_ERROR, \
AzureIoTClient 0:1f9b2707ec7d 115 CODEFIRST_DEVICE_FAILED, \
AzureIoTClient 0:1f9b2707ec7d 116 CODEFIRST_DEVICE_PUBLISH_FAILED, \
AzureIoTClient 0:1f9b2707ec7d 117 CODEFIRST_NOT_A_PROPERTY
AzureIoTClient 0:1f9b2707ec7d 118
AzureIoTClient 0:1f9b2707ec7d 119 DEFINE_ENUM(CODEFIRST_RESULT, CODEFIRST_ENUM_VALUES)
AzureIoTClient 0:1f9b2707ec7d 120
AzureIoTClient 0:1f9b2707ec7d 121 extern CODEFIRST_RESULT CodeFirst_Init(const char* overrideSchemaNamespace);
AzureIoTClient 0:1f9b2707ec7d 122 extern void CodeFirst_Deinit(void);
AzureIoTClient 0:1f9b2707ec7d 123 extern SCHEMA_HANDLE CodeFirst_RegisterSchema(const char* schemaNamespace, const REFLECTED_DATA_FROM_DATAPROVIDER* metadata);
AzureIoTClient 0:1f9b2707ec7d 124
AzureIoTClient 0:1f9b2707ec7d 125 extern EXECUTE_COMMAND_RESULT CodeFirst_InvokeAction(void* deviceHandle, void* callbackUserContext, const char* relativeActionPath, const char* actionName, size_t parameterCount, const AGENT_DATA_TYPE* parameterValues);
AzureIoTClient 0:1f9b2707ec7d 126
AzureIoTClient 0:1f9b2707ec7d 127 extern EXECUTE_COMMAND_RESULT CodeFirst_ExecuteCommand(void* device, const char* command);
AzureIoTClient 0:1f9b2707ec7d 128
AzureIoTClient 0:1f9b2707ec7d 129 extern void* CodeFirst_CreateDevice(SCHEMA_MODEL_TYPE_HANDLE model, const REFLECTED_DATA_FROM_DATAPROVIDER* metadata, size_t dataSize, bool includePropertyPath);
AzureIoTClient 0:1f9b2707ec7d 130 extern void CodeFirst_DestroyDevice(void* device);
AzureIoTClient 0:1f9b2707ec7d 131
AzureIoTClient 0:1f9b2707ec7d 132 extern CODEFIRST_RESULT CodeFirst_SendAsync(unsigned char** destination, size_t* destinationSize, size_t numProperties, ...);
AzureIoTClient 0:1f9b2707ec7d 133
AzureIoTClient 0:1f9b2707ec7d 134 extern AGENT_DATA_TYPE_TYPE CodeFirst_GetPrimitiveType(const char* typeName);
AzureIoTClient 0:1f9b2707ec7d 135
AzureIoTClient 0:1f9b2707ec7d 136 #ifdef __cplusplus
AzureIoTClient 0:1f9b2707ec7d 137 }
AzureIoTClient 0:1f9b2707ec7d 138 #endif
AzureIoTClient 0:1f9b2707ec7d 139
AzureIoTClient 0:1f9b2707ec7d 140 #endif /* CODEFIRST_H */