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/smartpointer.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. */ #ifndef SMART_POINTER_H #define SMART_POINTER_H class ReferenceCount { private: int _count; // Reference count public: void add_ref() { // Increment the reference count _count++; } int release() { // Decrement the reference count and // return the reference count. return --_count; } }; template < typename T > class SmartPointer { private: T *_data; // Generic pointer to be stored ReferenceCount *_reference; // Reference count public: SmartPointer() : _data(0), _reference(0) { // Create a new reference _reference = new ReferenceCount(); // Increment the reference count _reference->add_ref(); } SmartPointer(T* value) : _data(value), _reference(0) { // Create a new reference _reference = new ReferenceCount(); // Increment the reference count _reference->add_ref(); } SmartPointer(const SmartPointer<T>& smart_pointer) : _data(smart_pointer._data), reference(smart_pointer._reference) { // Copy constructor // Copy the data and reference pointer // and increment the reference count _reference->add_ref(); } ~SmartPointer() { if(_reference->release() == 0) { delete _data; delete _reference; } } T& operator* () { return *_data; } T* operator-> () { return _data; } SmartPointer<T>& operator = (const SmartPointer<T>& smart_pointer) { // Assignment operator if (this != &SmartPointer) { // Avoid self assignment // Decrement the old reference count // if reference become zero delete the old data if(_reference->release() == 0) { delete _data; delete _reference; } // Copy the data and reference pointer // and increment the reference count _data = SmartPointer._data; _reference = SmartPointer._reference; _reference->add_ref(); } return *this; } }; #endif // SMART_POINTER_H