This is an example of BLE GATT Client, which receives broadcast data from BLE_Server_BME280 ( a GATT server) , then transfers values up to mbed Device Connector (cloud).
Please refer details about BLEClient_mbedDevConn below. https://github.com/soramame21/BLEClient_mbedDevConn
The location of required BLE GATT server, BLE_Server_BME280, is at here. https://developer.mbed.org/users/edamame22/code/BLE_Server_BME280/
mbed-client/source/include/m2mtlvdeserializer.h
- Committer:
- Ren Boting
- Date:
- 2017-09-05
- Revision:
- 2:b894b3508057
- Parent:
- 0:29983394c6b6
File content as of revision 2:b894b3508057:
/* * 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. */ ~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; };