BLE Temperature Service Mobile and Ubiquitous Computing Module Birkbeck College

Dependencies:   DS1820

Committer:
gkroussos
Date:
Sun Mar 08 19:42:20 2015 +0000
Revision:
0:dd0fea342ad2
BLE Temperature Service ; Mobile and Ubiquitous Computing Module; Birkbeck College

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gkroussos 0:dd0fea342ad2 1 /* mbed Microcontroller Library
gkroussos 0:dd0fea342ad2 2 * Copyright (c) 2006-2013 ARM Limited
gkroussos 0:dd0fea342ad2 3 *
gkroussos 0:dd0fea342ad2 4 * Licensed under the Apache License, Version 2.0 (the "License");
gkroussos 0:dd0fea342ad2 5 * you may not use this file except in compliance with the License.
gkroussos 0:dd0fea342ad2 6 * You may obtain a copy of the License at
gkroussos 0:dd0fea342ad2 7 *
gkroussos 0:dd0fea342ad2 8 * http://www.apache.org/licenses/LICENSE-2.0
gkroussos 0:dd0fea342ad2 9 *
gkroussos 0:dd0fea342ad2 10 * Unless required by applicable law or agreed to in writing, software
gkroussos 0:dd0fea342ad2 11 * distributed under the License is distributed on an "AS IS" BASIS,
gkroussos 0:dd0fea342ad2 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
gkroussos 0:dd0fea342ad2 13 * See the License for the specific language governing permissions and
gkroussos 0:dd0fea342ad2 14 * limitations under the License.
gkroussos 0:dd0fea342ad2 15 */
gkroussos 0:dd0fea342ad2 16
gkroussos 0:dd0fea342ad2 17 #include <stdio.h>
gkroussos 0:dd0fea342ad2 18 #include <string.h>
gkroussos 0:dd0fea342ad2 19
gkroussos 0:dd0fea342ad2 20 #include "blecommon.h"
gkroussos 0:dd0fea342ad2 21 #include "GapAdvertisingParams.h"
gkroussos 0:dd0fea342ad2 22
gkroussos 0:dd0fea342ad2 23 /**************************************************************************/
gkroussos 0:dd0fea342ad2 24 /*!
gkroussos 0:dd0fea342ad2 25 \brief
gkroussos 0:dd0fea342ad2 26 Instantiates a new GapAdvertisingParams instance
gkroussos 0:dd0fea342ad2 27
gkroussos 0:dd0fea342ad2 28 \param[in] advType
gkroussos 0:dd0fea342ad2 29 The GAP advertising mode to use for this device. Valid
gkroussos 0:dd0fea342ad2 30 values are defined in AdvertisingType:
gkroussos 0:dd0fea342ad2 31
gkroussos 0:dd0fea342ad2 32 \par ADV_NON_CONNECTABLE_UNDIRECTED
gkroussos 0:dd0fea342ad2 33 All connections to the peripheral device will be refused.
gkroussos 0:dd0fea342ad2 34
gkroussos 0:dd0fea342ad2 35 \par ADV_CONNECTABLE_DIRECTED
gkroussos 0:dd0fea342ad2 36 Only connections from a pre-defined central device will be
gkroussos 0:dd0fea342ad2 37 accepted.
gkroussos 0:dd0fea342ad2 38
gkroussos 0:dd0fea342ad2 39 \par ADV_CONNECTABLE_UNDIRECTED
gkroussos 0:dd0fea342ad2 40 Any central device can connect to this peripheral.
gkroussos 0:dd0fea342ad2 41
gkroussos 0:dd0fea342ad2 42 \par ADV_SCANNABLE_UNDIRECTED
gkroussos 0:dd0fea342ad2 43 Any central device can connect to this peripheral, and
gkroussos 0:dd0fea342ad2 44 the secondary Scan Response payload will be included or
gkroussos 0:dd0fea342ad2 45 available to central devices.
gkroussos 0:dd0fea342ad2 46
gkroussos 0:dd0fea342ad2 47 \par
gkroussos 0:dd0fea342ad2 48 See Bluetooth Core Specification 4.0 (Vol. 3), Part C,
gkroussos 0:dd0fea342ad2 49 Section 9.3 and Core Specification 4.0 (Vol. 6), Part B,
gkroussos 0:dd0fea342ad2 50 Section 2.3.1 for further information on GAP connection
gkroussos 0:dd0fea342ad2 51 modes
gkroussos 0:dd0fea342ad2 52
gkroussos 0:dd0fea342ad2 53 \param[in] interval
gkroussos 0:dd0fea342ad2 54 Advertising interval between 0x0020 and 0x4000 in 0.625ms
gkroussos 0:dd0fea342ad2 55 units (20ms to 10.24s). If using non-connectable mode
gkroussos 0:dd0fea342ad2 56 (ADV_NON_CONNECTABLE_UNDIRECTED) this min value is
gkroussos 0:dd0fea342ad2 57 0x00A0 (100ms).
gkroussos 0:dd0fea342ad2 58
gkroussos 0:dd0fea342ad2 59 \par
gkroussos 0:dd0fea342ad2 60 Increasing this value will allow central devices to detect
gkroussos 0:dd0fea342ad2 61 your peripheral faster at the expense of more power being
gkroussos 0:dd0fea342ad2 62 used by the radio due to the higher data transmit rate.
gkroussos 0:dd0fea342ad2 63
gkroussos 0:dd0fea342ad2 64 \par
gkroussos 0:dd0fea342ad2 65 This field must be set to 0 if connectionMode is equal
gkroussos 0:dd0fea342ad2 66 to ADV_CONNECTABLE_DIRECTED
gkroussos 0:dd0fea342ad2 67
gkroussos 0:dd0fea342ad2 68 \par
gkroussos 0:dd0fea342ad2 69 See Bluetooth Core Specification, Vol 3., Part C,
gkroussos 0:dd0fea342ad2 70 Appendix A for suggested advertising intervals.
gkroussos 0:dd0fea342ad2 71
gkroussos 0:dd0fea342ad2 72 \param[in] timeout
gkroussos 0:dd0fea342ad2 73 Advertising timeout between 0x1 and 0x3FFF (1 and 16383)
gkroussos 0:dd0fea342ad2 74 in seconds. Enter 0 to disable the advertising timeout.
gkroussos 0:dd0fea342ad2 75
gkroussos 0:dd0fea342ad2 76 \par EXAMPLE
gkroussos 0:dd0fea342ad2 77
gkroussos 0:dd0fea342ad2 78 \code
gkroussos 0:dd0fea342ad2 79
gkroussos 0:dd0fea342ad2 80 \endcode
gkroussos 0:dd0fea342ad2 81 */
gkroussos 0:dd0fea342ad2 82 /**************************************************************************/
gkroussos 0:dd0fea342ad2 83 GapAdvertisingParams::GapAdvertisingParams(AdvertisingType advType, uint16_t interval, uint16_t timeout)
gkroussos 0:dd0fea342ad2 84 {
gkroussos 0:dd0fea342ad2 85 _advType = advType;
gkroussos 0:dd0fea342ad2 86 _interval = interval;
gkroussos 0:dd0fea342ad2 87 _timeout = timeout;
gkroussos 0:dd0fea342ad2 88
gkroussos 0:dd0fea342ad2 89 /* Interval checks */
gkroussos 0:dd0fea342ad2 90 if (_advType == ADV_CONNECTABLE_DIRECTED)
gkroussos 0:dd0fea342ad2 91 {
gkroussos 0:dd0fea342ad2 92 /* Interval must be 0 in directed connectable mode */
gkroussos 0:dd0fea342ad2 93 _interval = 0;
gkroussos 0:dd0fea342ad2 94 }
gkroussos 0:dd0fea342ad2 95 else if (_advType == ADV_NON_CONNECTABLE_UNDIRECTED)
gkroussos 0:dd0fea342ad2 96 {
gkroussos 0:dd0fea342ad2 97 /* Min interval is slightly larger than in other modes */
gkroussos 0:dd0fea342ad2 98 if (_interval < GAP_ADV_PARAMS_INTERVAL_MIN_NONCON)
gkroussos 0:dd0fea342ad2 99 {
gkroussos 0:dd0fea342ad2 100 _interval = GAP_ADV_PARAMS_INTERVAL_MIN_NONCON;
gkroussos 0:dd0fea342ad2 101 }
gkroussos 0:dd0fea342ad2 102 if (_interval > GAP_ADV_PARAMS_INTERVAL_MAX)
gkroussos 0:dd0fea342ad2 103 {
gkroussos 0:dd0fea342ad2 104 _interval = GAP_ADV_PARAMS_INTERVAL_MAX;
gkroussos 0:dd0fea342ad2 105 }
gkroussos 0:dd0fea342ad2 106 }
gkroussos 0:dd0fea342ad2 107 else
gkroussos 0:dd0fea342ad2 108 {
gkroussos 0:dd0fea342ad2 109 /* Stay within interval limits */
gkroussos 0:dd0fea342ad2 110 if (_interval < GAP_ADV_PARAMS_INTERVAL_MIN)
gkroussos 0:dd0fea342ad2 111 {
gkroussos 0:dd0fea342ad2 112 _interval = GAP_ADV_PARAMS_INTERVAL_MIN;
gkroussos 0:dd0fea342ad2 113 }
gkroussos 0:dd0fea342ad2 114 if (_interval > GAP_ADV_PARAMS_INTERVAL_MAX)
gkroussos 0:dd0fea342ad2 115 {
gkroussos 0:dd0fea342ad2 116 _interval = GAP_ADV_PARAMS_INTERVAL_MAX;
gkroussos 0:dd0fea342ad2 117 }
gkroussos 0:dd0fea342ad2 118 }
gkroussos 0:dd0fea342ad2 119
gkroussos 0:dd0fea342ad2 120 /* Timeout checks */
gkroussos 0:dd0fea342ad2 121 if (timeout)
gkroussos 0:dd0fea342ad2 122 {
gkroussos 0:dd0fea342ad2 123 /* Stay within timeout limits */
gkroussos 0:dd0fea342ad2 124 if (_timeout > GAP_ADV_PARAMS_TIMEOUT_MAX)
gkroussos 0:dd0fea342ad2 125 {
gkroussos 0:dd0fea342ad2 126 _timeout = GAP_ADV_PARAMS_TIMEOUT_MAX;
gkroussos 0:dd0fea342ad2 127 }
gkroussos 0:dd0fea342ad2 128 }
gkroussos 0:dd0fea342ad2 129 }
gkroussos 0:dd0fea342ad2 130
gkroussos 0:dd0fea342ad2 131 /**************************************************************************/
gkroussos 0:dd0fea342ad2 132 /*!
gkroussos 0:dd0fea342ad2 133 Destructor
gkroussos 0:dd0fea342ad2 134 */
gkroussos 0:dd0fea342ad2 135 /**************************************************************************/
gkroussos 0:dd0fea342ad2 136 GapAdvertisingParams::~GapAdvertisingParams(void)
gkroussos 0:dd0fea342ad2 137 {
gkroussos 0:dd0fea342ad2 138 }
gkroussos 0:dd0fea342ad2 139
gkroussos 0:dd0fea342ad2 140 /**************************************************************************/
gkroussos 0:dd0fea342ad2 141 /*!
gkroussos 0:dd0fea342ad2 142 \brief returns the current Advertising Type value
gkroussos 0:dd0fea342ad2 143 */
gkroussos 0:dd0fea342ad2 144 /**************************************************************************/
gkroussos 0:dd0fea342ad2 145 GapAdvertisingParams::AdvertisingType GapAdvertisingParams::getAdvertisingType(void)
gkroussos 0:dd0fea342ad2 146 {
gkroussos 0:dd0fea342ad2 147 return _advType;
gkroussos 0:dd0fea342ad2 148 }
gkroussos 0:dd0fea342ad2 149
gkroussos 0:dd0fea342ad2 150 /**************************************************************************/
gkroussos 0:dd0fea342ad2 151 /*!
gkroussos 0:dd0fea342ad2 152 \brief returns the current Advertising Delay (in units of 0.625ms)
gkroussos 0:dd0fea342ad2 153 */
gkroussos 0:dd0fea342ad2 154 /**************************************************************************/
gkroussos 0:dd0fea342ad2 155 uint16_t GapAdvertisingParams::getInterval(void)
gkroussos 0:dd0fea342ad2 156 {
gkroussos 0:dd0fea342ad2 157 return _interval;
gkroussos 0:dd0fea342ad2 158 }
gkroussos 0:dd0fea342ad2 159
gkroussos 0:dd0fea342ad2 160 /**************************************************************************/
gkroussos 0:dd0fea342ad2 161 /*!
gkroussos 0:dd0fea342ad2 162 \brief returns the current Advertising Timeout (in seconds)
gkroussos 0:dd0fea342ad2 163 */
gkroussos 0:dd0fea342ad2 164 /**************************************************************************/
gkroussos 0:dd0fea342ad2 165 uint16_t GapAdvertisingParams::getTimeout(void)
gkroussos 0:dd0fea342ad2 166 {
gkroussos 0:dd0fea342ad2 167 return _timeout;
gkroussos 0:dd0fea342ad2 168 }