Xin Zhang / azure-iot-c-sdk-f767zi

Dependents:   samplemqtt

Committer:
XinZhangMS
Date:
Thu Aug 23 06:52:14 2018 +0000
Revision:
0:f7f1f0d76dd6
azure-c-sdk for mbed os supporting NUCLEO_F767ZI

Who changed what in which revision?

UserRevisionLine numberNew contents of line
XinZhangMS 0:f7f1f0d76dd6 1 // Copyright (c) Microsoft. All rights reserved.
XinZhangMS 0:f7f1f0d76dd6 2 // Licensed under the MIT license. See LICENSE file in the project root for full license information.
XinZhangMS 0:f7f1f0d76dd6 3
XinZhangMS 0:f7f1f0d76dd6 4 #include "azure_c_shared_utility/gballoc.h"
XinZhangMS 0:f7f1f0d76dd6 5
XinZhangMS 0:f7f1f0d76dd6 6 #include "schemalib.h"
XinZhangMS 0:f7f1f0d76dd6 7 #include "codefirst.h"
XinZhangMS 0:f7f1f0d76dd6 8 #include "schema.h"
XinZhangMS 0:f7f1f0d76dd6 9 #include "datamarshaller.h"
XinZhangMS 0:f7f1f0d76dd6 10 #include "datapublisher.h"
XinZhangMS 0:f7f1f0d76dd6 11 #include <stddef.h>
XinZhangMS 0:f7f1f0d76dd6 12 #include "azure_c_shared_utility/xlogging.h"
XinZhangMS 0:f7f1f0d76dd6 13 #include "iotdevice.h"
XinZhangMS 0:f7f1f0d76dd6 14
XinZhangMS 0:f7f1f0d76dd6 15 #define DEFAULT_CONTAINER_NAME "Container"
XinZhangMS 0:f7f1f0d76dd6 16
XinZhangMS 0:f7f1f0d76dd6 17 DEFINE_ENUM_STRINGS(SERIALIZER_RESULT, SERIALIZER_RESULT_VALUES);
XinZhangMS 0:f7f1f0d76dd6 18
XinZhangMS 0:f7f1f0d76dd6 19 typedef enum AGENT_STATE_TAG
XinZhangMS 0:f7f1f0d76dd6 20 {
XinZhangMS 0:f7f1f0d76dd6 21 AGENT_NOT_INITIALIZED,
XinZhangMS 0:f7f1f0d76dd6 22 AGENT_INITIALIZED
XinZhangMS 0:f7f1f0d76dd6 23 } AGENT_STATE;
XinZhangMS 0:f7f1f0d76dd6 24
XinZhangMS 0:f7f1f0d76dd6 25 static AGENT_STATE g_AgentState = AGENT_NOT_INITIALIZED;
XinZhangMS 0:f7f1f0d76dd6 26
XinZhangMS 0:f7f1f0d76dd6 27 SERIALIZER_RESULT serializer_init(const char* overrideSchemaNamespace)
XinZhangMS 0:f7f1f0d76dd6 28 {
XinZhangMS 0:f7f1f0d76dd6 29 SERIALIZER_RESULT result;
XinZhangMS 0:f7f1f0d76dd6 30
XinZhangMS 0:f7f1f0d76dd6 31 /* Codes_SRS_SCHEMALIB_99_074:[serializer_init when already initialized shall return SERIALIZER_ALREADY_INIT.] */
XinZhangMS 0:f7f1f0d76dd6 32 if (g_AgentState != AGENT_NOT_INITIALIZED)
XinZhangMS 0:f7f1f0d76dd6 33 {
XinZhangMS 0:f7f1f0d76dd6 34 result = SERIALIZER_ALREADY_INIT;
XinZhangMS 0:f7f1f0d76dd6 35 LogError("(result = %s)", ENUM_TO_STRING(SERIALIZER_RESULT, result));
XinZhangMS 0:f7f1f0d76dd6 36 }
XinZhangMS 0:f7f1f0d76dd6 37 else
XinZhangMS 0:f7f1f0d76dd6 38 {
XinZhangMS 0:f7f1f0d76dd6 39 /* Codes_SRS_SCHEMALIB_99_006:[ Initialize CodeFirst by a call to CodeFirst_Init.] */
XinZhangMS 0:f7f1f0d76dd6 40 /* Codes_SRS_SCHEMALIB_99_076:[serializer_init shall pass the value of overrideSchemaNamespace argument to CodeFirst_Init.] */
XinZhangMS 0:f7f1f0d76dd6 41 if (CodeFirst_Init(overrideSchemaNamespace) != CODEFIRST_OK)
XinZhangMS 0:f7f1f0d76dd6 42 {
XinZhangMS 0:f7f1f0d76dd6 43 /* Codes_SRS_SCHEMALIB_99_007:[ On error SERIALIZER_CODEFIRST_INIT_FAILED shall be returned.] */
XinZhangMS 0:f7f1f0d76dd6 44 result = SERIALIZER_CODEFIRST_INIT_FAILED;
XinZhangMS 0:f7f1f0d76dd6 45 LogError("(result = %s)", ENUM_TO_STRING(SERIALIZER_RESULT, result));
XinZhangMS 0:f7f1f0d76dd6 46 }
XinZhangMS 0:f7f1f0d76dd6 47 else
XinZhangMS 0:f7f1f0d76dd6 48 {
XinZhangMS 0:f7f1f0d76dd6 49 /* Codes_SRS_SCHEMALIB_99_075:[When an serializer_init call fails for any reason the previous initialization state shall be preserved. The initialized state shall only be changed on a succesfull Init.] */
XinZhangMS 0:f7f1f0d76dd6 50 g_AgentState = AGENT_INITIALIZED;
XinZhangMS 0:f7f1f0d76dd6 51
XinZhangMS 0:f7f1f0d76dd6 52 /* Codes_SRS_SCHEMALIB_99_073:[On success serializer_init shall return SERIALIZER_OK.] */
XinZhangMS 0:f7f1f0d76dd6 53 result = SERIALIZER_OK;
XinZhangMS 0:f7f1f0d76dd6 54 }
XinZhangMS 0:f7f1f0d76dd6 55 }
XinZhangMS 0:f7f1f0d76dd6 56
XinZhangMS 0:f7f1f0d76dd6 57 return result;
XinZhangMS 0:f7f1f0d76dd6 58 }
XinZhangMS 0:f7f1f0d76dd6 59
XinZhangMS 0:f7f1f0d76dd6 60 void serializer_deinit(void)
XinZhangMS 0:f7f1f0d76dd6 61 {
XinZhangMS 0:f7f1f0d76dd6 62 /* Codes_SRS_SCHEMALIB_99_025:[ serializer_deinit shall de-initialize all modules initialized by serializer_init.] */
XinZhangMS 0:f7f1f0d76dd6 63 if (g_AgentState == AGENT_INITIALIZED)
XinZhangMS 0:f7f1f0d76dd6 64 {
XinZhangMS 0:f7f1f0d76dd6 65 CodeFirst_Deinit();
XinZhangMS 0:f7f1f0d76dd6 66 }
XinZhangMS 0:f7f1f0d76dd6 67
XinZhangMS 0:f7f1f0d76dd6 68 /* Codes_SRS_SCHEMALIB_99_026:[ A subsequent call to serializer_start shall succeed.] */
XinZhangMS 0:f7f1f0d76dd6 69 g_AgentState = AGENT_NOT_INITIALIZED;
XinZhangMS 0:f7f1f0d76dd6 70 }
XinZhangMS 0:f7f1f0d76dd6 71
XinZhangMS 0:f7f1f0d76dd6 72 SERIALIZER_RESULT serializer_setconfig(SERIALIZER_CONFIG which, void* value)
XinZhangMS 0:f7f1f0d76dd6 73 {
XinZhangMS 0:f7f1f0d76dd6 74 SERIALIZER_RESULT result;
XinZhangMS 0:f7f1f0d76dd6 75
XinZhangMS 0:f7f1f0d76dd6 76 /* Codes_SRS_SCHEMALIB_99_137:[ If the value argument is NULL, serializer_setconfig shall return SERIALIZER_INVALID_ARG.] */
XinZhangMS 0:f7f1f0d76dd6 77 if (value == NULL)
XinZhangMS 0:f7f1f0d76dd6 78 {
XinZhangMS 0:f7f1f0d76dd6 79 result = SERIALIZER_INVALID_ARG;
XinZhangMS 0:f7f1f0d76dd6 80 }
XinZhangMS 0:f7f1f0d76dd6 81 /* Codes_SRS_SCHEMALIB_99_142:[ When the which argument is SerializeDelayedBufferMaxSize, serializer_setconfig shall invoke DataPublisher_SetMaxBufferSize with the dereferenced value argument, and shall return SERIALIZER_OK.] */
XinZhangMS 0:f7f1f0d76dd6 82 else if (which == SerializeDelayedBufferMaxSize)
XinZhangMS 0:f7f1f0d76dd6 83 {
XinZhangMS 0:f7f1f0d76dd6 84 DataPublisher_SetMaxBufferSize(*(size_t*)value);
XinZhangMS 0:f7f1f0d76dd6 85 result = SERIALIZER_OK;
XinZhangMS 0:f7f1f0d76dd6 86 }
XinZhangMS 0:f7f1f0d76dd6 87 /* Codes_SRS_SCHEMALIB_99_138:[ If the which argument is not one of the declared members of the SERIALIZER_CONFIG enum, serializer_setconfig shall return SERIALIZER_INVALID_ARG.] */
XinZhangMS 0:f7f1f0d76dd6 88 else
XinZhangMS 0:f7f1f0d76dd6 89 {
XinZhangMS 0:f7f1f0d76dd6 90 result = SERIALIZER_INVALID_ARG;
XinZhangMS 0:f7f1f0d76dd6 91 }
XinZhangMS 0:f7f1f0d76dd6 92
XinZhangMS 0:f7f1f0d76dd6 93 return result;
XinZhangMS 0:f7f1f0d76dd6 94 }