Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: sht15_remote_monitoring f767zi_mqtt remote_monitoring simplesample_amqp ... more
Diff: schemalib.c
- Revision:
- 4:233dd7616d73
- Parent:
- 0:1f9b2707ec7d
- Child:
- 5:c08e3ffc68e4
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/schemalib.c Thu Oct 22 18:33:28 2015 -0700
@@ -0,0 +1,98 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+#include <stdlib.h>
+#ifdef _CRTDBG_MAP_ALLOC
+#include <crtdbg.h>
+#endif
+#include "gballoc.h"
+
+#include "schemalib.h"
+#include "codefirst.h"
+#include "schema.h"
+#include "datamarshaller.h"
+#include "datapublisher.h"
+#include <stddef.h>
+#include "iot_logging.h"
+#include "iotdevice.h"
+
+#define DEFAULT_CONTAINER_NAME "Container"
+
+DEFINE_ENUM_STRINGS(SERIALIZER_RESULT, SERIALIZER_RESULT_VALUES);
+
+typedef enum AGENT_STATE_TAG
+{
+ AGENT_NOT_INITIALIZED,
+ AGENT_INITIALIZED
+} AGENT_STATE;
+
+static AGENT_STATE g_AgentState = AGENT_NOT_INITIALIZED;
+
+SERIALIZER_RESULT serializer_init(const char* overrideSchemaNamespace)
+{
+ SERIALIZER_RESULT result;
+
+ /* Codes_SRS_SCHEMALIB_99_074:[serializer_init when already initialized shall return SERIALIZER_ALREADY_INIT.] */
+ if (g_AgentState != AGENT_NOT_INITIALIZED)
+ {
+ result = SERIALIZER_ALREADY_INIT;
+ LogError("(result = %s)\r\n", ENUM_TO_STRING(SERIALIZER_RESULT, result));
+ }
+ else
+ {
+ /* Codes_SRS_SCHEMALIB_99_006:[ Initialize CodeFirst by a call to CodeFirst_Init.] */
+ /* Codes_SRS_SCHEMALIB_99_076:[serializer_init shall pass the value of overrideSchemaNamespace argument to CodeFirst_Init.] */
+ if (CodeFirst_Init(overrideSchemaNamespace) != CODEFIRST_OK)
+ {
+ /* Codes_SRS_SCHEMALIB_99_007:[ On error SERIALIZER_CODEFIRST_INIT_FAILED shall be returned.] */
+ result = SERIALIZER_CODEFIRST_INIT_FAILED;
+ LogError("(result = %s)\r\n", ENUM_TO_STRING(SERIALIZER_RESULT, result));
+ }
+ else
+ {
+ /* 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.] */
+ g_AgentState = AGENT_INITIALIZED;
+
+ /* Codes_SRS_SCHEMALIB_99_073:[On success serializer_init shall return SERIALIZER_OK.] */
+ result = SERIALIZER_OK;
+ }
+ }
+
+ return result;
+}
+
+void serializer_deinit(void)
+{
+ /* Codes_SRS_SCHEMALIB_99_025:[ serializer_deinit shall de-initialize all modules initialized by serializer_init.] */
+ if (g_AgentState == AGENT_INITIALIZED)
+ {
+ CodeFirst_Deinit();
+ }
+
+ /* Codes_SRS_SCHEMALIB_99_026:[ A subsequent call to serializer_start shall succeed.] */
+ g_AgentState = AGENT_NOT_INITIALIZED;
+}
+
+SERIALIZER_RESULT serializer_setconfig(SERIALIZER_CONFIG which, void* value)
+{
+ SERIALIZER_RESULT result;
+
+ /* Codes_SRS_SCHEMALIB_99_137:[ If the value argument is NULL, serializer_setconfig shall return SERIALIZER_INVALID_ARG.] */
+ if (value == NULL)
+ {
+ result = SERIALIZER_INVALID_ARG;
+ }
+ /* 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.] */
+ else if (which == SerializeDelayedBufferMaxSize)
+ {
+ DataPublisher_SetMaxBufferSize(*(size_t*)value);
+ result = SERIALIZER_OK;
+ }
+ /* 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.] */
+ else
+ {
+ result = SERIALIZER_INVALID_ARG;
+ }
+
+ return result;
+}
