source: azure_iot_hub_f767zi/trunk/azure_iot_sdk/serializer/inc/codefirst.h@ 457

Last change on this file since 457 was 457, checked in by coas-nagasima, 4 years ago

ファイルを追加

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-chdr;charset=UTF-8
File size: 6.5 KB
Line 
1// Copyright (c) Microsoft. All rights reserved.
2// Licensed under the MIT license. See LICENSE file in the project root for full license information.
3
4#ifndef CODEFIRST_H
5#define CODEFIRST_H
6
7#include "methodreturn.h"
8#include "agenttypesystem.h"
9#include "schema.h"
10#include "azure_macro_utils/macro_utils.h"
11#include "azure_c_shared_utility/strings.h"
12#include "iotdevice.h"
13
14#ifdef __cplusplus
15#include <cstddef>
16#include <cstdarg>
17extern "C" {
18#else
19#include <stddef.h>
20#include <stdarg.h>
21#include <stdbool.h>
22#endif
23
24typedef char* ascii_char_ptr;
25typedef char* ascii_char_ptr_no_quotes;
26
27typedef enum REFLECTION_TYPE_TAG
28{
29 REFLECTION_METHOD_TYPE,
30 REFLECTION_DESIRED_PROPERTY_TYPE,
31 REFLECTION_REPORTED_PROPERTY_TYPE,
32 REFLECTION_STRUCT_TYPE,
33 REFLECTION_FIELD_TYPE,
34 REFLECTION_PROPERTY_TYPE,
35 REFLECTION_ACTION_TYPE,
36 REFLECTION_MODEL_TYPE,
37 REFLECTION_NOTHING
38}REFLECTION_TYPE;
39
40typedef EXECUTE_COMMAND_RESULT (*actionWrapper)(void* device, size_t ParameterCount, const AGENT_DATA_TYPE* values);
41
42typedef METHODRETURN_HANDLE (*methodWrapper)(void* device, size_t ParameterCount, const AGENT_DATA_TYPE* values);
43
44typedef struct REFLECTION_STRUCT_TAG
45{
46 const char* name;
47}REFLECTION_STRUCT;
48
49typedef struct WRAPPER_ARGUMENT_TAG
50{
51 const char* type;
52 const char* name;
53}WRAPPER_ARGUMENT;
54
55typedef struct REFLECTION_ACTION_TAG
56{
57 const char* name;
58 size_t nArguments;
59 const WRAPPER_ARGUMENT* arguments;
60 actionWrapper wrapper;
61 const char* modelName;
62}REFLECTION_ACTION;
63
64typedef struct REFLECTION_METHOD_TAG
65{
66 const char* name;
67 size_t nArguments;
68 const WRAPPER_ARGUMENT* arguments;
69 methodWrapper wrapper;
70 const char* modelName;
71}REFLECTION_METHOD;
72
73typedef struct REFLECTION_FIELD_TAG
74{
75 const char* fieldName;
76 const char* fieldType;
77 const char* structName;
78}REFLECTION_FIELD;
79
80typedef struct REFLECTION_PROPERTY_TAG
81{
82 const char* name;
83 const char* type;
84 int(*Create_AGENT_DATA_TYPE_from_Ptr)(void* param, AGENT_DATA_TYPE* dest);
85 size_t offset;
86 size_t size;
87 const char* modelName;
88} REFLECTION_PROPERTY;
89
90
91typedef struct REFLECTION_REPORTED_PROPERTY_TAG
92{
93 const char* name;
94 const char* type;
95 int(*Create_AGENT_DATA_TYPE_from_Ptr)(void* param, AGENT_DATA_TYPE* dest);
96 size_t offset;
97 size_t size;
98 const char* modelName;
99} REFLECTION_REPORTED_PROPERTY;
100
101typedef struct REFLECTION_DESIRED_PROPERTY_TAG
102{
103 pfOnDesiredProperty onDesiredProperty;
104 void(*desiredPropertInitialize)(void* destination);
105 void(*desiredPropertDeinitialize)(void* destination);
106 const char* name;
107 const char* type;
108 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*/
109 size_t offset;
110 size_t size;
111 const char* modelName;
112} REFLECTION_DESIRED_PROPERTY;
113
114typedef struct REFLECTION_MODEL_TAG
115{
116 const char* name;
117} REFLECTION_MODEL;
118
119typedef struct REFLECTED_SOMETHING_TAG
120{
121 REFLECTION_TYPE type;
122 const struct REFLECTED_SOMETHING_TAG* next;
123 struct what
124 {
125 REFLECTION_METHOD method;
126 REFLECTION_DESIRED_PROPERTY desiredProperty;
127 REFLECTION_REPORTED_PROPERTY reportedProperty;
128 REFLECTION_STRUCT structure;
129 REFLECTION_FIELD field;
130 REFLECTION_PROPERTY property;
131 REFLECTION_ACTION action;
132 REFLECTION_MODEL model;
133 } what;
134} REFLECTED_SOMETHING;
135
136typedef struct REFLECTED_DATA_FROM_DATAPROVIDER_TAG
137{
138 const REFLECTED_SOMETHING* reflectedData;
139}REFLECTED_DATA_FROM_DATAPROVIDER;
140
141#define ALL_SOMETHING_REFLECTED(schemaNamespace) MU_C2(schemaNamespace, _allSomethingReflected)
142#define ALL_REFLECTED(schemaNamespace) MU_C2(schemaNamespace, _allReflected)
143#define ADDRESS_OF_ALL_REFLECTED(schemaNamespace) & MU_C2(schemaNamespace, _allReflected),
144#define DECLARE_EXTERN_CONST_DATAPROVIDER_DATA(x) extern const REFLECTED_DATA_FROM_DATAPROVIDER ALL_REFLECTED(x);
145
146#define CODEFIRST_RESULT_VALUES \
147CODEFIRST_OK, \
148CODEFIRST_INVALID_ARG, \
149CODEFIRST_ALREADY_INIT, \
150CODEFIRST_NOT_INIT, \
151CODEFIRST_ERROR, \
152CODEFIRST_NOT_ENOUGH_MEMORY, \
153CODEFIRST_ACTION_NOT_FOUND, \
154CODEFIRST_ACTION_EXECUTION_ERROR, \
155CODEFIRST_SCHEMA_ERROR, \
156CODEFIRST_AGENT_DATA_TYPE_ERROR, \
157CODEFIRST_VALUES_FROM_DIFFERENT_DEVICES_ERROR, \
158CODEFIRST_DEVICE_FAILED, \
159CODEFIRST_DEVICE_PUBLISH_FAILED, \
160CODEFIRST_NOT_A_PROPERTY
161
162MU_DEFINE_ENUM_WITHOUT_INVALID(CODEFIRST_RESULT, CODEFIRST_RESULT_VALUES)
163
164#include "umock_c/umock_c_prod.h"
165MOCKABLE_FUNCTION(, CODEFIRST_RESULT, CodeFirst_Init, const char*, overrideSchemaNamespace);
166MOCKABLE_FUNCTION(, void, CodeFirst_Deinit);
167MOCKABLE_FUNCTION(, SCHEMA_HANDLE, CodeFirst_RegisterSchema, const char*, schemaNamespace, const REFLECTED_DATA_FROM_DATAPROVIDER*, metadata);
168
169MOCKABLE_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);
170
171MOCKABLE_FUNCTION(, METHODRETURN_HANDLE, CodeFirst_InvokeMethod, DEVICE_HANDLE, deviceHandle, void*, callbackUserContext, const char*, relativeMethodPath, const char*, methodName, size_t, parameterCount, const AGENT_DATA_TYPE*, parameterValues);
172
173MOCKABLE_FUNCTION(, EXECUTE_COMMAND_RESULT, CodeFirst_ExecuteCommand, void*, device, const char*, command);
174
175MOCKABLE_FUNCTION(, METHODRETURN_HANDLE, CodeFirst_ExecuteMethod, void*, device, const char*, methodName, const char*, methodPayload);
176
177MOCKABLE_FUNCTION(, void*, CodeFirst_CreateDevice, SCHEMA_MODEL_TYPE_HANDLE, model, const REFLECTED_DATA_FROM_DATAPROVIDER*, metadata, size_t, dataSize, bool, includePropertyPath);
178MOCKABLE_FUNCTION(, void, CodeFirst_DestroyDevice, void*, device);
179
180extern CODEFIRST_RESULT CodeFirst_SendAsync(unsigned char** destination, size_t* destinationSize, size_t numProperties, ...);
181extern CODEFIRST_RESULT CodeFirst_SendAsyncReported(unsigned char** destination, size_t* destinationSize, size_t numReportedProperties, ...);
182
183MOCKABLE_FUNCTION(, CODEFIRST_RESULT, CodeFirst_IngestDesiredProperties, void*, device, const char*, jsonPayload, bool, parseDesiredNode);
184
185MOCKABLE_FUNCTION(, AGENT_DATA_TYPE_TYPE, CodeFirst_GetPrimitiveType, const char*, typeName);
186
187#ifdef __cplusplus
188}
189#endif
190
191#endif /* CODEFIRST_H */
Note: See TracBrowser for help on using the repository browser.