VNG board
Fork of BLE_API by
common/GapAdvertisingData.cpp
- Committer:
- Rohit Grover
- Date:
- 2014-07-23
- Revision:
- 106:a20be740075d
File content as of revision 106:a20be740075d:
/* 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; }