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

Revision:
0:1f9b2707ec7d
Child:
5:c08e3ffc68e4
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/schemalib.c	Tue Sep 15 21:57:26 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;
+}