my version with changed conversion between duration units

Fork of BLE_API by Bluetooth Low Energy

Committer:
jslater8
Date:
Wed Aug 05 14:20:04 2015 +0000
Revision:
758:85c13328a10a
Parent:
710:b2e1a2660ec2
Conversion from Interval duration units to milliseconds now in GapAdvertisingParams.h and changed getInterval to properly convert back to milliseconds

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rgrover1 710:b2e1a2660ec2 1 /* mbed Microcontroller Library
rgrover1 710:b2e1a2660ec2 2 * Copyright (c) 2006-2013 ARM Limited
rgrover1 710:b2e1a2660ec2 3 *
rgrover1 710:b2e1a2660ec2 4 * Licensed under the Apache License, Version 2.0 (the "License");
rgrover1 710:b2e1a2660ec2 5 * you may not use this file except in compliance with the License.
rgrover1 710:b2e1a2660ec2 6 * You may obtain a copy of the License at
rgrover1 710:b2e1a2660ec2 7 *
rgrover1 710:b2e1a2660ec2 8 * http://www.apache.org/licenses/LICENSE-2.0
rgrover1 710:b2e1a2660ec2 9 *
rgrover1 710:b2e1a2660ec2 10 * Unless required by applicable law or agreed to in writing, software
rgrover1 710:b2e1a2660ec2 11 * distributed under the License is distributed on an "AS IS" BASIS,
rgrover1 710:b2e1a2660ec2 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
rgrover1 710:b2e1a2660ec2 13 * See the License for the specific language governing permissions and
rgrover1 710:b2e1a2660ec2 14 * limitations under the License.
rgrover1 710:b2e1a2660ec2 15 */
rgrover1 710:b2e1a2660ec2 16
rgrover1 710:b2e1a2660ec2 17 #ifndef __GAP_ADVERTISING_PARAMS_H__
rgrover1 710:b2e1a2660ec2 18 #define __GAP_ADVERTISING_PARAMS_H__
rgrover1 710:b2e1a2660ec2 19
jslater8 758:85c13328a10a 20
rgrover1 710:b2e1a2660ec2 21 /**************************************************************************/
rgrover1 710:b2e1a2660ec2 22 /*!
rgrover1 710:b2e1a2660ec2 23 \brief
rgrover1 710:b2e1a2660ec2 24 This class provides a wrapper for the core advertising parameters,
rgrover1 710:b2e1a2660ec2 25 including the advertising type (Connectable Undirected,
rgrover1 710:b2e1a2660ec2 26 Non Connectable Undirected, etc.), as well as the advertising and
rgrover1 710:b2e1a2660ec2 27 timeout intervals.
rgrover1 710:b2e1a2660ec2 28
rgrover1 710:b2e1a2660ec2 29 \par
rgrover1 710:b2e1a2660ec2 30 See the following for more information on advertising types:
rgrover1 710:b2e1a2660ec2 31
rgrover1 710:b2e1a2660ec2 32 \li \c Bluetooth Core Specification 4.0 (Vol. 6), Part B, Section 2.3.1
rgrover1 710:b2e1a2660ec2 33 \li \c Bluetooth Core Specification 4.0 (Vol. 3), Part C, Section 9.3
rgrover1 710:b2e1a2660ec2 34 */
rgrover1 710:b2e1a2660ec2 35 /**************************************************************************/
rgrover1 710:b2e1a2660ec2 36 class GapAdvertisingParams {
rgrover1 710:b2e1a2660ec2 37 public:
rgrover1 710:b2e1a2660ec2 38 static const unsigned GAP_ADV_PARAMS_INTERVAL_MIN = 0x0020;
rgrover1 710:b2e1a2660ec2 39 static const unsigned GAP_ADV_PARAMS_INTERVAL_MIN_NONCON = 0x00A0;
rgrover1 710:b2e1a2660ec2 40 static const unsigned GAP_ADV_PARAMS_INTERVAL_MAX = 0x4000;
rgrover1 710:b2e1a2660ec2 41 static const unsigned GAP_ADV_PARAMS_TIMEOUT_MAX = 0x3FFF;
rgrover1 710:b2e1a2660ec2 42
rgrover1 710:b2e1a2660ec2 43 /*!
rgrover1 710:b2e1a2660ec2 44 * Encapsulates the peripheral advertising modes, which determine how
rgrover1 710:b2e1a2660ec2 45 * the device appears to other central devices in hearing range
rgrover1 710:b2e1a2660ec2 46 */
rgrover1 710:b2e1a2660ec2 47 enum AdvertisingType_t {
rgrover1 710:b2e1a2660ec2 48 ADV_CONNECTABLE_UNDIRECTED, /**< Vol 3, Part C, Section 9.3.4 and Vol 6, Part B, Section 2.3.1.1 */
rgrover1 710:b2e1a2660ec2 49 ADV_CONNECTABLE_DIRECTED, /**< Vol 3, Part C, Section 9.3.3 and Vol 6, Part B, Section 2.3.1.2 */
rgrover1 710:b2e1a2660ec2 50 ADV_SCANNABLE_UNDIRECTED, /**< Include support for Scan Response payloads, see Vol 6, Part B, Section 2.3.1.4 */
rgrover1 710:b2e1a2660ec2 51 ADV_NON_CONNECTABLE_UNDIRECTED /**< Vol 3, Part C, Section 9.3.2 and Vol 6, Part B, Section 2.3.1.3 */
rgrover1 710:b2e1a2660ec2 52 };
rgrover1 710:b2e1a2660ec2 53 typedef enum AdvertisingType_t AdvertisingType; /* deprecated type alias. */
rgrover1 710:b2e1a2660ec2 54
rgrover1 710:b2e1a2660ec2 55 public:
rgrover1 710:b2e1a2660ec2 56 GapAdvertisingParams(AdvertisingType_t advType = ADV_CONNECTABLE_UNDIRECTED,
rgrover1 710:b2e1a2660ec2 57 uint16_t interval = GAP_ADV_PARAMS_INTERVAL_MIN_NONCON,
rgrover1 710:b2e1a2660ec2 58 uint16_t timeout = 0) : _advType(advType), _interval(interval), _timeout(timeout) {
rgrover1 710:b2e1a2660ec2 59 /* Interval checks */
rgrover1 710:b2e1a2660ec2 60 if (_advType == ADV_CONNECTABLE_DIRECTED) {
rgrover1 710:b2e1a2660ec2 61 /* Interval must be 0 in directed connectable mode */
rgrover1 710:b2e1a2660ec2 62 _interval = 0;
rgrover1 710:b2e1a2660ec2 63 } else if (_advType == ADV_NON_CONNECTABLE_UNDIRECTED) {
rgrover1 710:b2e1a2660ec2 64 /* Min interval is slightly larger than in other modes */
rgrover1 710:b2e1a2660ec2 65 if (_interval < GAP_ADV_PARAMS_INTERVAL_MIN_NONCON) {
rgrover1 710:b2e1a2660ec2 66 _interval = GAP_ADV_PARAMS_INTERVAL_MIN_NONCON;
rgrover1 710:b2e1a2660ec2 67 }
rgrover1 710:b2e1a2660ec2 68 if (_interval > GAP_ADV_PARAMS_INTERVAL_MAX) {
rgrover1 710:b2e1a2660ec2 69 _interval = GAP_ADV_PARAMS_INTERVAL_MAX;
rgrover1 710:b2e1a2660ec2 70 }
rgrover1 710:b2e1a2660ec2 71 } else {
rgrover1 710:b2e1a2660ec2 72 /* Stay within interval limits */
rgrover1 710:b2e1a2660ec2 73 if (_interval < GAP_ADV_PARAMS_INTERVAL_MIN) {
rgrover1 710:b2e1a2660ec2 74 _interval = GAP_ADV_PARAMS_INTERVAL_MIN;
rgrover1 710:b2e1a2660ec2 75 }
rgrover1 710:b2e1a2660ec2 76 if (_interval > GAP_ADV_PARAMS_INTERVAL_MAX) {
rgrover1 710:b2e1a2660ec2 77 _interval = GAP_ADV_PARAMS_INTERVAL_MAX;
rgrover1 710:b2e1a2660ec2 78 }
rgrover1 710:b2e1a2660ec2 79 }
rgrover1 710:b2e1a2660ec2 80
rgrover1 710:b2e1a2660ec2 81 /* Timeout checks */
rgrover1 710:b2e1a2660ec2 82 if (timeout) {
rgrover1 710:b2e1a2660ec2 83 /* Stay within timeout limits */
rgrover1 710:b2e1a2660ec2 84 if (_timeout > GAP_ADV_PARAMS_TIMEOUT_MAX) {
rgrover1 710:b2e1a2660ec2 85 _timeout = GAP_ADV_PARAMS_TIMEOUT_MAX;
rgrover1 710:b2e1a2660ec2 86 }
rgrover1 710:b2e1a2660ec2 87 }
rgrover1 710:b2e1a2660ec2 88 }
jslater8 758:85c13328a10a 89
jslater8 758:85c13328a10a 90 static const uint16_t UNIT_1_25_MS = 1250; /**< Number of microseconds in 1.25 milliseconds. */
jslater8 758:85c13328a10a 91 static const uint16_t UNIT_0_625_MS = 625; /**< Number of microseconds in 0.625 milliseconds. */
jslater8 758:85c13328a10a 92 static uint16_t MSEC_TO_GAP_DURATION_UNITS(uint32_t durationInMillis) {
jslater8 758:85c13328a10a 93 return (durationInMillis * 1000) / UNIT_1_25_MS;
jslater8 758:85c13328a10a 94 }
jslater8 758:85c13328a10a 95 static uint16_t MSEC_TO_ADVERTISEMENT_DURATION_UNITS(uint32_t durationInMillis) {
jslater8 758:85c13328a10a 96 return (durationInMillis * 1000) / UNIT_0_625_MS;
jslater8 758:85c13328a10a 97 }
jslater8 758:85c13328a10a 98 static uint16_t ADVERTISEMENT_DURATION_UNITS_TO_MS(uint16_t gapUnits) {
jslater8 758:85c13328a10a 99 return (gapUnits * UNIT_0_625_MS) / 1000;
jslater8 758:85c13328a10a 100 }
rgrover1 710:b2e1a2660ec2 101
rgrover1 710:b2e1a2660ec2 102 AdvertisingType_t getAdvertisingType(void) const {return _advType; }
rgrover1 710:b2e1a2660ec2 103 uint16_t getInterval(void) const {return _interval;}
rgrover1 710:b2e1a2660ec2 104 uint16_t getTimeout(void) const {return _timeout; }
rgrover1 710:b2e1a2660ec2 105
rgrover1 710:b2e1a2660ec2 106 void setAdvertisingType(AdvertisingType_t newAdvType) {_advType = newAdvType; }
jslater8 758:85c13328a10a 107 void setInterval(uint16_t newInterval) {_interval = ADVERTISEMENT_DURATION_UNITS_TO_MS(newInterval);}
rgrover1 710:b2e1a2660ec2 108 void setTimeout(uint16_t newTimeout) {_timeout = newTimeout; }
rgrover1 710:b2e1a2660ec2 109
rgrover1 710:b2e1a2660ec2 110 private:
rgrover1 710:b2e1a2660ec2 111 AdvertisingType_t _advType;
rgrover1 710:b2e1a2660ec2 112 uint16_t _interval;
rgrover1 710:b2e1a2660ec2 113 uint16_t _timeout;
rgrover1 710:b2e1a2660ec2 114 };
rgrover1 710:b2e1a2660ec2 115
rgrover1 710:b2e1a2660ec2 116 #endif // ifndef __GAP_ADVERTISING_PARAMS_H__