ON Semiconductor / mbed-os

Dependents:   mbed-TFT-example-NCS36510 mbed-Accelerometer-example-NCS36510 mbed-Accelerometer-example-NCS36510

Committer:
jacobjohnson
Date:
Mon Feb 27 17:45:05 2017 +0000
Revision:
1:f30bdcd2b33b
Parent:
0:098463de4c5d
changed the inputscale from 1 to 7 in analogin_api.c.  This will need to be changed later, and accessed from the main level, but for now this allows the  adc to read a value from 0 to 3.7V, instead of just up to 1V.;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
group-onsemi 0:098463de4c5d 1 /* mbed Microcontroller Library
group-onsemi 0:098463de4c5d 2 * Copyright (c) 2006-2013 ARM Limited
group-onsemi 0:098463de4c5d 3 *
group-onsemi 0:098463de4c5d 4 * Licensed under the Apache License, Version 2.0 (the "License");
group-onsemi 0:098463de4c5d 5 * you may not use this file except in compliance with the License.
group-onsemi 0:098463de4c5d 6 * You may obtain a copy of the License at
group-onsemi 0:098463de4c5d 7 *
group-onsemi 0:098463de4c5d 8 * http://www.apache.org/licenses/LICENSE-2.0
group-onsemi 0:098463de4c5d 9 *
group-onsemi 0:098463de4c5d 10 * Unless required by applicable law or agreed to in writing, software
group-onsemi 0:098463de4c5d 11 * distributed under the License is distributed on an "AS IS" BASIS,
group-onsemi 0:098463de4c5d 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
group-onsemi 0:098463de4c5d 13 * See the License for the specific language governing permissions and
group-onsemi 0:098463de4c5d 14 * limitations under the License.
group-onsemi 0:098463de4c5d 15 */
group-onsemi 0:098463de4c5d 16
group-onsemi 0:098463de4c5d 17 #ifndef __GAP_ADVERTISING_PARAMS_H__
group-onsemi 0:098463de4c5d 18 #define __GAP_ADVERTISING_PARAMS_H__
group-onsemi 0:098463de4c5d 19
group-onsemi 0:098463de4c5d 20 /**
group-onsemi 0:098463de4c5d 21 * This class provides a wrapper for the core advertising parameters,
group-onsemi 0:098463de4c5d 22 * including the advertising type (Connectable Undirected,
group-onsemi 0:098463de4c5d 23 * Non Connectable Undirected and so on), as well as the advertising and
group-onsemi 0:098463de4c5d 24 * timeout intervals.
group-onsemi 0:098463de4c5d 25 */
group-onsemi 0:098463de4c5d 26 class GapAdvertisingParams {
group-onsemi 0:098463de4c5d 27 public:
group-onsemi 0:098463de4c5d 28 /**
group-onsemi 0:098463de4c5d 29 * Minimum Advertising interval for connectable undirected and connectable
group-onsemi 0:098463de4c5d 30 * directed events in 625us units - 20ms.
group-onsemi 0:098463de4c5d 31 */
group-onsemi 0:098463de4c5d 32 static const unsigned GAP_ADV_PARAMS_INTERVAL_MIN = 0x0020;
group-onsemi 0:098463de4c5d 33 /**
group-onsemi 0:098463de4c5d 34 * Minimum Advertising interval for scannable and non-connectable
group-onsemi 0:098463de4c5d 35 * undirected events in 625us units - 100ms.
group-onsemi 0:098463de4c5d 36 */
group-onsemi 0:098463de4c5d 37 static const unsigned GAP_ADV_PARAMS_INTERVAL_MIN_NONCON = 0x00A0;
group-onsemi 0:098463de4c5d 38 /**
group-onsemi 0:098463de4c5d 39 * Maximum Advertising interval in 625us units - 10.24s.
group-onsemi 0:098463de4c5d 40 */
group-onsemi 0:098463de4c5d 41 static const unsigned GAP_ADV_PARAMS_INTERVAL_MAX = 0x4000;
group-onsemi 0:098463de4c5d 42 /**
group-onsemi 0:098463de4c5d 43 * Maximum advertising timeout seconds.
group-onsemi 0:098463de4c5d 44 */
group-onsemi 0:098463de4c5d 45 static const unsigned GAP_ADV_PARAMS_TIMEOUT_MAX = 0x3FFF;
group-onsemi 0:098463de4c5d 46
group-onsemi 0:098463de4c5d 47 /**
group-onsemi 0:098463de4c5d 48 * Encapsulates the peripheral advertising modes, which determine how
group-onsemi 0:098463de4c5d 49 * the device appears to other central devices in hearing range.
group-onsemi 0:098463de4c5d 50 */
group-onsemi 0:098463de4c5d 51 enum AdvertisingType_t {
group-onsemi 0:098463de4c5d 52 ADV_CONNECTABLE_UNDIRECTED, /**< Vol 3, Part C, Section 9.3.4 and Vol 6, Part B, Section 2.3.1.1. */
group-onsemi 0:098463de4c5d 53 ADV_CONNECTABLE_DIRECTED, /**< Vol 3, Part C, Section 9.3.3 and Vol 6, Part B, Section 2.3.1.2. */
group-onsemi 0:098463de4c5d 54 ADV_SCANNABLE_UNDIRECTED, /**< Include support for Scan Response payloads, see Vol 6, Part B, Section 2.3.1.4. */
group-onsemi 0:098463de4c5d 55 ADV_NON_CONNECTABLE_UNDIRECTED /**< Vol 3, Part C, Section 9.3.2 and Vol 6, Part B, Section 2.3.1.3. */
group-onsemi 0:098463de4c5d 56 };
group-onsemi 0:098463de4c5d 57 /**
group-onsemi 0:098463de4c5d 58 * Type alias for GapAdvertisingParams::AdvertisingType_t.
group-onsemi 0:098463de4c5d 59 *
group-onsemi 0:098463de4c5d 60 * @deprecated This type alias will be dropped in future releases.
group-onsemi 0:098463de4c5d 61 */
group-onsemi 0:098463de4c5d 62 typedef enum AdvertisingType_t AdvertisingType;
group-onsemi 0:098463de4c5d 63
group-onsemi 0:098463de4c5d 64 public:
group-onsemi 0:098463de4c5d 65 /**
group-onsemi 0:098463de4c5d 66 * Construct an instance of GapAdvertisingParams.
group-onsemi 0:098463de4c5d 67 *
group-onsemi 0:098463de4c5d 68 * @param[in] advType
group-onsemi 0:098463de4c5d 69 * Type of advertising. Default is
group-onsemi 0:098463de4c5d 70 * GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED.
group-onsemi 0:098463de4c5d 71 * @param[in] interval
group-onsemi 0:098463de4c5d 72 * Advertising interval in units of 0.625ms. Default is
group-onsemi 0:098463de4c5d 73 * GapAdvertisingParams::GAP_ADV_PARAMS_INTERVAL_MIN_NONCON.
group-onsemi 0:098463de4c5d 74 * @param[in] timeout
group-onsemi 0:098463de4c5d 75 * Advertising timeout. Default is 0.
group-onsemi 0:098463de4c5d 76 */
group-onsemi 0:098463de4c5d 77 GapAdvertisingParams(AdvertisingType_t advType = ADV_CONNECTABLE_UNDIRECTED,
group-onsemi 0:098463de4c5d 78 uint16_t interval = GAP_ADV_PARAMS_INTERVAL_MIN_NONCON,
group-onsemi 0:098463de4c5d 79 uint16_t timeout = 0) : _advType(advType), _interval(interval), _timeout(timeout) {
group-onsemi 0:098463de4c5d 80 /* Interval checks. */
group-onsemi 0:098463de4c5d 81 if (_advType == ADV_CONNECTABLE_DIRECTED) {
group-onsemi 0:098463de4c5d 82 /* Interval must be 0 in directed connectable mode. */
group-onsemi 0:098463de4c5d 83 _interval = 0;
group-onsemi 0:098463de4c5d 84 } else if (_advType == ADV_NON_CONNECTABLE_UNDIRECTED) {
group-onsemi 0:098463de4c5d 85 /* Min interval is slightly larger than in other modes. */
group-onsemi 0:098463de4c5d 86 if (_interval < GAP_ADV_PARAMS_INTERVAL_MIN_NONCON) {
group-onsemi 0:098463de4c5d 87 _interval = GAP_ADV_PARAMS_INTERVAL_MIN_NONCON;
group-onsemi 0:098463de4c5d 88 }
group-onsemi 0:098463de4c5d 89 if (_interval > GAP_ADV_PARAMS_INTERVAL_MAX) {
group-onsemi 0:098463de4c5d 90 _interval = GAP_ADV_PARAMS_INTERVAL_MAX;
group-onsemi 0:098463de4c5d 91 }
group-onsemi 0:098463de4c5d 92 } else {
group-onsemi 0:098463de4c5d 93 /* Stay within interval limits. */
group-onsemi 0:098463de4c5d 94 if (_interval < GAP_ADV_PARAMS_INTERVAL_MIN) {
group-onsemi 0:098463de4c5d 95 _interval = GAP_ADV_PARAMS_INTERVAL_MIN;
group-onsemi 0:098463de4c5d 96 }
group-onsemi 0:098463de4c5d 97 if (_interval > GAP_ADV_PARAMS_INTERVAL_MAX) {
group-onsemi 0:098463de4c5d 98 _interval = GAP_ADV_PARAMS_INTERVAL_MAX;
group-onsemi 0:098463de4c5d 99 }
group-onsemi 0:098463de4c5d 100 }
group-onsemi 0:098463de4c5d 101
group-onsemi 0:098463de4c5d 102 /* Timeout checks. */
group-onsemi 0:098463de4c5d 103 if (timeout) {
group-onsemi 0:098463de4c5d 104 /* Stay within timeout limits. */
group-onsemi 0:098463de4c5d 105 if (_timeout > GAP_ADV_PARAMS_TIMEOUT_MAX) {
group-onsemi 0:098463de4c5d 106 _timeout = GAP_ADV_PARAMS_TIMEOUT_MAX;
group-onsemi 0:098463de4c5d 107 }
group-onsemi 0:098463de4c5d 108 }
group-onsemi 0:098463de4c5d 109 }
group-onsemi 0:098463de4c5d 110
group-onsemi 0:098463de4c5d 111 static const uint16_t UNIT_0_625_MS = 625; /**< Number of microseconds in 0.625 milliseconds. */
group-onsemi 0:098463de4c5d 112 /**
group-onsemi 0:098463de4c5d 113 * Convert milliseconds to units of 0.625ms.
group-onsemi 0:098463de4c5d 114 *
group-onsemi 0:098463de4c5d 115 * @param[in] durationInMillis
group-onsemi 0:098463de4c5d 116 * The number of milliseconds to convert.
group-onsemi 0:098463de4c5d 117 *
group-onsemi 0:098463de4c5d 118 * @return The value of @p durationInMillis in units of 0.625ms.
group-onsemi 0:098463de4c5d 119 */
group-onsemi 0:098463de4c5d 120 static uint16_t MSEC_TO_ADVERTISEMENT_DURATION_UNITS(uint32_t durationInMillis) {
group-onsemi 0:098463de4c5d 121 return (durationInMillis * 1000) / UNIT_0_625_MS;
group-onsemi 0:098463de4c5d 122 }
group-onsemi 0:098463de4c5d 123 /**
group-onsemi 0:098463de4c5d 124 * Convert units of 0.625ms to milliseconds.
group-onsemi 0:098463de4c5d 125 *
group-onsemi 0:098463de4c5d 126 * @param[in] gapUnits
group-onsemi 0:098463de4c5d 127 * The number of units of 0.625ms to convert.
group-onsemi 0:098463de4c5d 128 *
group-onsemi 0:098463de4c5d 129 * @return The value of @p gapUnits in milliseconds.
group-onsemi 0:098463de4c5d 130 */
group-onsemi 0:098463de4c5d 131 static uint16_t ADVERTISEMENT_DURATION_UNITS_TO_MS(uint16_t gapUnits) {
group-onsemi 0:098463de4c5d 132 return (gapUnits * UNIT_0_625_MS) / 1000;
group-onsemi 0:098463de4c5d 133 }
group-onsemi 0:098463de4c5d 134
group-onsemi 0:098463de4c5d 135 /**
group-onsemi 0:098463de4c5d 136 * Get the advertising type.
group-onsemi 0:098463de4c5d 137 *
group-onsemi 0:098463de4c5d 138 * @return The advertising type.
group-onsemi 0:098463de4c5d 139 */
group-onsemi 0:098463de4c5d 140 AdvertisingType_t getAdvertisingType(void) const {
group-onsemi 0:098463de4c5d 141 return _advType;
group-onsemi 0:098463de4c5d 142 }
group-onsemi 0:098463de4c5d 143
group-onsemi 0:098463de4c5d 144 /**
group-onsemi 0:098463de4c5d 145 * Get the advertising interval in milliseconds.
group-onsemi 0:098463de4c5d 146 *
group-onsemi 0:098463de4c5d 147 * @return The advertisement interval (in milliseconds).
group-onsemi 0:098463de4c5d 148 */
group-onsemi 0:098463de4c5d 149 uint16_t getInterval(void) const {
group-onsemi 0:098463de4c5d 150 return ADVERTISEMENT_DURATION_UNITS_TO_MS(_interval);
group-onsemi 0:098463de4c5d 151 }
group-onsemi 0:098463de4c5d 152
group-onsemi 0:098463de4c5d 153 /**
group-onsemi 0:098463de4c5d 154 * Get the advertisement interval in units of 0.625ms.
group-onsemi 0:098463de4c5d 155 *
group-onsemi 0:098463de4c5d 156 * @return The advertisement interval in advertisement duration units (0.625ms units).
group-onsemi 0:098463de4c5d 157 */
group-onsemi 0:098463de4c5d 158 uint16_t getIntervalInADVUnits(void) const {
group-onsemi 0:098463de4c5d 159 return _interval;
group-onsemi 0:098463de4c5d 160 }
group-onsemi 0:098463de4c5d 161
group-onsemi 0:098463de4c5d 162 /**
group-onsemi 0:098463de4c5d 163 * Get The advertising timeout.
group-onsemi 0:098463de4c5d 164 *
group-onsemi 0:098463de4c5d 165 * @return The advertising timeout (in seconds).
group-onsemi 0:098463de4c5d 166 */
group-onsemi 0:098463de4c5d 167 uint16_t getTimeout(void) const {
group-onsemi 0:098463de4c5d 168 return _timeout;
group-onsemi 0:098463de4c5d 169 }
group-onsemi 0:098463de4c5d 170
group-onsemi 0:098463de4c5d 171 /**
group-onsemi 0:098463de4c5d 172 * Set the advertising type.
group-onsemi 0:098463de4c5d 173 *
group-onsemi 0:098463de4c5d 174 * @param[in] newAdvType
group-onsemi 0:098463de4c5d 175 * The new advertising type.
group-onsemi 0:098463de4c5d 176 */
group-onsemi 0:098463de4c5d 177 void setAdvertisingType(AdvertisingType_t newAdvType) {
group-onsemi 0:098463de4c5d 178 _advType = newAdvType;
group-onsemi 0:098463de4c5d 179 }
group-onsemi 0:098463de4c5d 180
group-onsemi 0:098463de4c5d 181 /**
group-onsemi 0:098463de4c5d 182 * Set the advertising interval in milliseconds.
group-onsemi 0:098463de4c5d 183 *
group-onsemi 0:098463de4c5d 184 * @param[in] newInterval
group-onsemi 0:098463de4c5d 185 * The new advertising interval in milliseconds.
group-onsemi 0:098463de4c5d 186 */
group-onsemi 0:098463de4c5d 187 void setInterval(uint16_t newInterval) {
group-onsemi 0:098463de4c5d 188 _interval = MSEC_TO_ADVERTISEMENT_DURATION_UNITS(newInterval);
group-onsemi 0:098463de4c5d 189 }
group-onsemi 0:098463de4c5d 190
group-onsemi 0:098463de4c5d 191 /**
group-onsemi 0:098463de4c5d 192 * Set the advertising timeout.
group-onsemi 0:098463de4c5d 193 *
group-onsemi 0:098463de4c5d 194 * @param[in] newTimeout
group-onsemi 0:098463de4c5d 195 * The new advertising timeout (in seconds).
group-onsemi 0:098463de4c5d 196 */
group-onsemi 0:098463de4c5d 197 void setTimeout(uint16_t newTimeout) {
group-onsemi 0:098463de4c5d 198 _timeout = newTimeout;
group-onsemi 0:098463de4c5d 199 }
group-onsemi 0:098463de4c5d 200
group-onsemi 0:098463de4c5d 201 private:
group-onsemi 0:098463de4c5d 202 AdvertisingType_t _advType; /**< The advertising type. */
group-onsemi 0:098463de4c5d 203 uint16_t _interval; /**< The advertising interval in ADV duration units (i.e. 0.625ms). */
group-onsemi 0:098463de4c5d 204 uint16_t _timeout; /**< The advertising timeout in seconds. */
group-onsemi 0:098463de4c5d 205 };
group-onsemi 0:098463de4c5d 206
group-onsemi 0:098463de4c5d 207 #endif /* ifndef __GAP_ADVERTISING_PARAMS_H__ */