High level Bluetooth Low Energy API and radio abstraction layer
Fork of BLE_API by
Revision 331:10f190629734, committed 2015-04-15
- Comitter:
- rgrover1
- Date:
- Wed Apr 15 09:05:10 2015 +0100
- Parent:
- 330:2a3f554ee9fd
- Child:
- 332:1dc2f80b4710
- Commit message:
- Synchronized with git rev 04d91605
Author: Rohit Grover
merge GapAdvertisingData.cpp into GapAdvertisingData.h
Changed in this revision
common/GapAdvertisingData.cpp | Show diff for this revision Revisions of this file |
public/GapAdvertisingData.h | Show annotated file Show diff for this revision Revisions of this file |
--- a/common/GapAdvertisingData.cpp Wed Apr 15 09:05:10 2015 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,238 +0,0 @@ -/* mbed Microcontroller Library - * Copyright (c) 2006-2013 ARM Limited - * - * 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 <stdio.h> -#include <string.h> - -#include "GapAdvertisingData.h" - -/**************************************************************************/ -/*! - \brief Creates a new GapAdvertisingData instance - - \par EXAMPLE - - \code - - \endcode -*/ -/**************************************************************************/ -GapAdvertisingData::GapAdvertisingData(void) : _payload(), _payloadLen(0), _appearance(GENERIC_TAG) { - /* empty */ -} - -/**************************************************************************/ -/*! - Destructor -*/ -/**************************************************************************/ -GapAdvertisingData::~GapAdvertisingData(void) -{ -} - -/**************************************************************************/ -/*! - \brief Adds advertising data based on the specified AD type (see - DataType) - - \args[in] advDataType The Advertising 'DataType' to add - \args[in] payload Pointer to the payload contents - \args[in] len Size of the payload in bytes - - \returns ble_error_t - - \retval BLE_ERROR_NONE - Everything executed properly - - \retval BLE_ERROR_BUFFER_OVERFLOW - The specified data would cause the advertising buffer - to overflow - - \par EXAMPLE - - \code - - \endcode -*/ -/**************************************************************************/ -ble_error_t GapAdvertisingData::addData(DataType advDataType, const uint8_t *payload, uint8_t len) -{ - /* ToDo: Check if an AD type already exists and if the existing */ - /* value is exclusive or not (flags, etc.) */ - - /* Make sure we don't exceed the 31 byte payload limit */ - if (_payloadLen + len + 2 > GAP_ADVERTISING_DATA_MAX_PAYLOAD) { - return BLE_ERROR_BUFFER_OVERFLOW; - } - - /* Field length */ - memset(&_payload[_payloadLen], len + 1, 1); - _payloadLen++; - - /* Field ID */ - memset(&_payload[_payloadLen], (uint8_t)advDataType, 1); - _payloadLen++; - - /* Payload */ - memcpy(&_payload[_payloadLen], payload, len); - _payloadLen += len; - - return BLE_ERROR_NONE; -} - -/**************************************************************************/ -/*! - \brief Helper function to add APPEARANCE data to the advertising - payload - - \args[in] appearance The APPEARANCE value to add - - \returns ble_error_t - - \retval BLE_ERROR_NONE - Everything executed properly - - \retval BLE_ERROR_BUFFER_OVERFLOW - The specified data would cause the advertising buffer - to overflow - - \par EXAMPLE - - \code - - \endcode -*/ -/**************************************************************************/ -ble_error_t GapAdvertisingData::addAppearance(Appearance appearance) -{ - _appearance = appearance; - return addData(GapAdvertisingData::APPEARANCE, (uint8_t *)&appearance, 2); -} - -/**************************************************************************/ -/*! - \brief Helper function to add FLAGS data to the advertising - payload - - \args[in] flag The FLAGS value to add - - \par LE_LIMITED_DISCOVERABLE - The peripheral is discoverable for a limited period of - time - - \par LE_GENERAL_DISCOVERABLE - The peripheral is permanently discoverable - - \par BREDR_NOT_SUPPORTED - This peripheral is a Bluetooth Low Energy only device - (no EDR support) - - \returns ble_error_t - - \retval BLE_ERROR_NONE - Everything executed properly - - \retval BLE_ERROR_BUFFER_OVERFLOW - The specified data would cause the advertising buffer - to overflow - - \par EXAMPLE - - \code - - \endcode -*/ -/**************************************************************************/ -ble_error_t GapAdvertisingData::addFlags(uint8_t flags) -{ - return addData(GapAdvertisingData::FLAGS, &flags, 1); -} - -/**************************************************************************/ -/*! - \brief Helper function to add TX_POWER_LEVEL data to the - advertising payload - - \args[in] flag The TX_POWER_LEVEL value to add - - \returns ble_error_t - - \retval BLE_ERROR_NONE - Everything executed properly - - \retval BLE_ERROR_BUFFER_OVERFLOW - The specified data would cause the advertising buffer - to overflow - - \par EXAMPLE - - \code - - \endcode -*/ -/**************************************************************************/ -ble_error_t GapAdvertisingData::addTxPower(int8_t txPower) -{ - /* ToDo: Basic error checking to make sure txPower is in range */ - return addData(GapAdvertisingData::TX_POWER_LEVEL, (uint8_t *)&txPower, 1); -} - -/**************************************************************************/ -/*! - \brief Clears the payload and resets the payload length counter -*/ -/**************************************************************************/ -void GapAdvertisingData::clear(void) -{ - memset(&_payload, 0, GAP_ADVERTISING_DATA_MAX_PAYLOAD); - _payloadLen = 0; -} - -/**************************************************************************/ -/*! - \brief Returns a pointer to the the current payload - - \returns A pointer to the payload -*/ -/**************************************************************************/ -const uint8_t *GapAdvertisingData::getPayload(void) const -{ - return (_payloadLen > 0) ? _payload : NULL; -} - -/**************************************************************************/ -/*! - \brief Returns the current payload length (0..31 bytes) - - \returns The payload length in bytes -*/ -/**************************************************************************/ -uint8_t GapAdvertisingData::getPayloadLen(void) const -{ - return _payloadLen; -} - -/**************************************************************************/ -/*! - \brief Returns the 16-bit appearance value for this device - - \returns The 16-bit appearance value -*/ -/**************************************************************************/ -uint16_t GapAdvertisingData::getAppearance(void) const -{ - return (uint16_t)_appearance; -} \ No newline at end of file
--- a/public/GapAdvertisingData.h Wed Apr 15 09:05:10 2015 +0100 +++ b/public/GapAdvertisingData.h Wed Apr 15 09:05:10 2015 +0100 @@ -17,6 +17,8 @@ #ifndef __GAP_ADVERTISING_DATA_H__ #define __GAP_ADVERTISING_DATA_H__ +#include <string.h> + #include "blecommon.h" #define GAP_ADVERTISING_DATA_MAX_PAYLOAD (31) @@ -188,17 +190,115 @@ OUTDOOR_LOCATION_AND_NAVIGATION_POD = 5188 /**< Outdoor Location and Navigation Pod */ }; - GapAdvertisingData(void); - virtual ~GapAdvertisingData(void); + GapAdvertisingData(void) : _payload(), _payloadLen(0), _appearance(GENERIC_TAG) { + /* empty */ + } + + /** + * Adds advertising data based on the specified AD type (see DataType) + * + * @param advDataType The Advertising 'DataType' to add + * @param payload Pointer to the payload contents + * @param len Size of the payload in bytes + * + * @return BLE_ERROR_BUFFER_OVERFLOW if the specified data would cause the + * advertising buffer to overflow, else BLE_ERROR_NONE. + */ + ble_error_t addData(DataType advDataType, const uint8_t *payload, uint8_t len) + { + /* ToDo: Check if an AD type already exists and if the existing */ + /* value is exclusive or not (flags, etc.) */ + + /* Make sure we don't exceed the 31 byte payload limit */ + if (_payloadLen + len + 2 > GAP_ADVERTISING_DATA_MAX_PAYLOAD) { + return BLE_ERROR_BUFFER_OVERFLOW; + } + + /* Field length */ + memset(&_payload[_payloadLen], len + 1, 1); + _payloadLen++; + + /* Field ID */ + memset(&_payload[_payloadLen], (uint8_t)advDataType, 1); + _payloadLen++; + + /* Payload */ + memcpy(&_payload[_payloadLen], payload, len); + _payloadLen += len; + + return BLE_ERROR_NONE; + } + + /** + * Helper function to add APPEARANCE data to the advertising payload + * + * @param appearance + * The APPEARANCE value to add + * + * @return BLE_ERROR_BUFFER_OVERFLOW if the specified data would cause the + * advertising buffer to overflow, else BLE_ERROR_NONE. + */ + ble_error_t addAppearance(Appearance appearance = GENERIC_TAG) { + _appearance = appearance; + return addData(GapAdvertisingData::APPEARANCE, (uint8_t *)&appearance, 2); + } - ble_error_t addData(DataType, const uint8_t *, uint8_t); - ble_error_t addAppearance(Appearance appearance = GENERIC_TAG); - ble_error_t addFlags(uint8_t flags = LE_GENERAL_DISCOVERABLE); - ble_error_t addTxPower(int8_t txPower); - void clear(void); - const uint8_t *getPayload(void) const; - uint8_t getPayloadLen(void) const; - uint16_t getAppearance(void) const; + /** + * Helper function to add FLAGS data to the advertising payload. + * @param flags + * LE_LIMITED_DISCOVERABLE + * The peripheral is discoverable for a limited period of time. + * LE_GENERAL_DISCOVERABLE + * The peripheral is permanently discoverable. + * BREDR_NOT_SUPPORTED + * This peripheral is a Bluetooth Low Energy only device (no EDR support). + * + * @return BLE_ERROR_BUFFER_OVERFLOW if the specified data would cause the + * advertising buffer to overflow, else BLE_ERROR_NONE. + */ + ble_error_t addFlags(uint8_t flags = LE_GENERAL_DISCOVERABLE) { + return addData(GapAdvertisingData::FLAGS, &flags, 1); + } + + /** + * Helper function to add TX_POWER_LEVEL data to the advertising payload + * + * @return BLE_ERROR_BUFFER_OVERFLOW if the specified data would cause the + * advertising buffer to overflow, else BLE_ERROR_NONE. + */ + ble_error_t addTxPower(int8_t txPower) { + /* ToDo: Basic error checking to make sure txPower is in range */ + return addData(GapAdvertisingData::TX_POWER_LEVEL, (uint8_t *)&txPower, 1); + } + + /** + * Clears the payload and resets the payload length counter + */ + void clear(void) { + memset(&_payload, 0, GAP_ADVERTISING_DATA_MAX_PAYLOAD); + _payloadLen = 0; + } + + /** + * Returns a pointer to the the current payload + */ + const uint8_t *getPayload(void) const { + return (_payloadLen > 0) ? _payload : NULL; + } + + /** + * Returns the current payload length (0..31 bytes) + */ + uint8_t getPayloadLen(void) const { + return _payloadLen; + } + + /** + * Returns the 16-bit appearance value for this device + */ + uint16_t getAppearance(void) const { + return (uint16_t)_appearance; + } private: uint8_t _payload[GAP_ADVERTISING_DATA_MAX_PAYLOAD];