mbed client lightswitch demo

Dependencies:   mbed Socket lwip-eth lwip-sys lwip

Fork of mbed-client-classic-example-lwip by Austin Blackstone

Revision:
11:cada08fc8a70
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-client/source/include/m2mtlvdeserializer.h	Thu Jun 09 17:08:36 2016 +0000
@@ -0,0 +1,184 @@
+/*
+ * Copyright (c) 2015 ARM Limited. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "mbed-client/m2mvector.h"
+#include "mbed-client/m2mobject.h"
+#include "mbed-client/m2mobjectinstance.h"
+#include "mbed-client/m2mresource.h"
+
+/**
+ * @brief M2MTLVDeserializer
+ * TLV Deserialiser get the object instances and resources as binary data and 
+ * builds the <code>lwm2m</code> representation from it. See OMA-LWM2M 
+ * specification, chapter 6.1 for the resource model and chapter 6.3.3 for
+ * the OMA-TLV specification.
+ */
+class M2MTLVDeserializer {
+
+public :
+
+    typedef enum {
+        None,
+        NotFound,
+        NotAllowed,
+        NotValid
+    } Error;
+
+    typedef enum {
+        Put,
+        Post
+    } Operation;
+
+
+    /**
+    * Constructor.
+    */
+    M2MTLVDeserializer();
+
+    /**
+    * Destructor.
+    */
+    virtual ~M2MTLVDeserializer();
+
+    /**
+     * This method checks whether the given binary encodes an object instance
+     * or something else. It returns <code>true</code> if bits 7-6 of the first
+     * byte is "00".
+     * @param tlv Binary to be checked as LWM2M object instance
+     * @return <code>true</code> or <code>false</code>.
+     */
+    bool is_object_instance(uint8_t *tlv);
+
+    
+    /**
+     * This method checks whether the given binary encodes a resource or 
+     * something else. It returns <code>true</code> if bits 7-6 of the first
+     * byte is "11".
+     * @param tlv Binary to be checked as LWM2M resource.
+     * @return <code>true</code> or <code>false</code>.
+     */
+    bool is_resource(uint8_t *tlv);
+
+    /**
+     * This method checks whether the given binary encodes a multiple resource
+     * or something else. It returns <code>true</code> if bits 7-6 of the first
+     * byte is "10".
+     * @param tlv Binary to be checked as LWM2M multiple resource.
+     * @return <code>true</code> or <code>false</code>.
+     */
+    bool is_multiple_resource(uint8_t *tlv);
+    
+    /**
+     * This method checks whether the given binary encodes a resource instance
+     * or something else. It returns <code>true</code> if bits 7-6 of the first
+     * byte is "01".
+     * @param tlv Binary to be checked as LWM2M resource instance.
+     * @return <code>true</code> or <code>false</code>.
+     */
+    bool is_resource_instance(uint8_t *tlv);
+
+    /**
+     * Deserialises the given binary that must encode object instances. Binary
+     * array can be checked before invoking this method with 
+     */
+    M2MTLVDeserializer::Error deserialise_object_instances(uint8_t* tlv,
+                                                           uint32_t tlv_size,
+                                                           M2MObject &object,
+                                                           M2MTLVDeserializer::Operation operation);
+
+    /**
+     * Deserialises the given binary that must encode resources. Binary array 
+     * can be checked before invoking this method.
+     */
+    M2MTLVDeserializer::Error deserialize_resources(uint8_t *tlv,
+                                                    uint32_t tlv_size,
+                                                    M2MObjectInstance &object_instance,
+                                                    M2MTLVDeserializer::Operation operation);
+
+    /**
+     * Deserialises the given binary that must encode resource instances. Binary array
+     * can be checked before invoking this method.
+     */
+    M2MTLVDeserializer::Error deserialize_resource_instances(uint8_t *tlv,
+                                                             uint32_t tlv_size,
+                                                             M2MResource &resource,
+                                                             M2MTLVDeserializer::Operation operation);
+    /**
+     * This method return object instance id or resource id.
+     * @param tlv Binary to be checked
+     * @return Object instance id or resource id.
+     */
+    uint16_t instance_id(uint8_t *tlv);
+    
+private:
+
+    M2MTLVDeserializer::Error deserialize_object_instances(uint8_t *tlv,
+                                                           uint32_t tlv_size,
+                                                           uint32_t offset,
+                                                           M2MObject &object,
+                                                           M2MTLVDeserializer::Operation operation,
+                                                           bool update_value);
+    
+    M2MTLVDeserializer::Error deserialize_resources(uint8_t *tlv,
+                                                    uint32_t tlv_size,
+                                                    uint32_t offset,
+                                                    M2MObjectInstance &object_instance,
+                                                    M2MTLVDeserializer::Operation operation,
+                                                    bool update_value);
+
+    M2MTLVDeserializer::Error deserialize_resource_instances(uint8_t *tlv,
+                                                             uint32_t tlv_size,
+                                                             uint32_t offset,
+                                                             M2MResource &resource,
+                                                             M2MObjectInstance &object_instance,
+                                                             M2MTLVDeserializer::Operation operation,
+                                                             bool update_value);
+
+    M2MTLVDeserializer::Error deserialize_resource_instances(uint8_t *tlv,
+                                                             uint32_t tlv_size,
+                                                             uint32_t offset,
+                                                             M2MResource &resource,
+                                                             M2MTLVDeserializer::Operation operation,
+                                                             bool update_value);
+
+    bool is_object_instance(uint8_t *tlv, uint32_t offset);
+    
+    bool is_resource(uint8_t *tlv, uint32_t offset);
+    
+    bool is_multiple_resource(uint8_t *tlv, uint32_t offset);
+    
+    bool is_resource_instance(uint8_t *tlv, uint32_t offset);
+};
+
+class TypeIdLength {
+
+public:
+
+    static TypeIdLength* createTypeIdLength(uint8_t *tlv, uint32_t offset);
+
+    TypeIdLength* deserialize();
+
+    void deserialiseID (uint32_t idLength);
+
+    void deserialiseLength (uint32_t lengthType);
+
+    uint8_t             *_tlv;
+    uint32_t            _offset;
+    uint32_t            _type;
+    uint16_t            _id;
+    uint32_t            _length;
+
+    friend class Test_M2MTLVDeserializer;
+};