merge GapAdvertisingData.cpp into GapAdvertisingData.h

This commit is contained in:
Rohit Grover 2015-04-09 08:45:45 +01:00
parent 88e59f3332
commit 04d91605dd
2 changed files with 110 additions and 248 deletions

View file

@ -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;
}

View file

@ -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 @@ public:
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 */
}
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;
/**
* 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);
}
/**
* 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];