BLE temperature profile using digital DS1820 or analog LM35 sensors

Dependencies:   DS1820

Committer:
gkroussos
Date:
Sat Mar 07 16:23:41 2015 +0000
Revision:
0:637031152314
Working version 1.0

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gkroussos 0:637031152314 1 /* mbed Microcontroller Library
gkroussos 0:637031152314 2 * Copyright (c) 2006-2013 ARM Limited
gkroussos 0:637031152314 3 *
gkroussos 0:637031152314 4 * Licensed under the Apache License, Version 2.0 (the "License");
gkroussos 0:637031152314 5 * you may not use this file except in compliance with the License.
gkroussos 0:637031152314 6 * You may obtain a copy of the License at
gkroussos 0:637031152314 7 *
gkroussos 0:637031152314 8 * http://www.apache.org/licenses/LICENSE-2.0
gkroussos 0:637031152314 9 *
gkroussos 0:637031152314 10 * Unless required by applicable law or agreed to in writing, software
gkroussos 0:637031152314 11 * distributed under the License is distributed on an "AS IS" BASIS,
gkroussos 0:637031152314 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
gkroussos 0:637031152314 13 * See the License for the specific language governing permissions and
gkroussos 0:637031152314 14 * limitations under the License.
gkroussos 0:637031152314 15 */
gkroussos 0:637031152314 16
gkroussos 0:637031152314 17 #include <stdio.h>
gkroussos 0:637031152314 18 #include <string.h>
gkroussos 0:637031152314 19
gkroussos 0:637031152314 20 #include "GapAdvertisingData.h"
gkroussos 0:637031152314 21
gkroussos 0:637031152314 22 /**************************************************************************/
gkroussos 0:637031152314 23 /*!
gkroussos 0:637031152314 24 \brief Creates a new GapAdvertisingData instance
gkroussos 0:637031152314 25
gkroussos 0:637031152314 26 \par EXAMPLE
gkroussos 0:637031152314 27
gkroussos 0:637031152314 28 \code
gkroussos 0:637031152314 29
gkroussos 0:637031152314 30 \endcode
gkroussos 0:637031152314 31 */
gkroussos 0:637031152314 32 /**************************************************************************/
gkroussos 0:637031152314 33 GapAdvertisingData::GapAdvertisingData(void)
gkroussos 0:637031152314 34 {
gkroussos 0:637031152314 35 memset(_payload, 0, GAP_ADVERTISING_DATA_MAX_PAYLOAD);
gkroussos 0:637031152314 36 _payloadLen = 0;
gkroussos 0:637031152314 37 _appearance = GENERIC_TAG;
gkroussos 0:637031152314 38 }
gkroussos 0:637031152314 39
gkroussos 0:637031152314 40 /**************************************************************************/
gkroussos 0:637031152314 41 /*!
gkroussos 0:637031152314 42 Destructor
gkroussos 0:637031152314 43 */
gkroussos 0:637031152314 44 /**************************************************************************/
gkroussos 0:637031152314 45 GapAdvertisingData::~GapAdvertisingData(void)
gkroussos 0:637031152314 46 {
gkroussos 0:637031152314 47 }
gkroussos 0:637031152314 48
gkroussos 0:637031152314 49 /**************************************************************************/
gkroussos 0:637031152314 50 /*!
gkroussos 0:637031152314 51 \brief Adds advertising data based on the specified AD type (see
gkroussos 0:637031152314 52 DataType)
gkroussos 0:637031152314 53
gkroussos 0:637031152314 54 \args[in] advDataType The Advertising 'DataType' to add
gkroussos 0:637031152314 55 \args[in] payload Pointer to the payload contents
gkroussos 0:637031152314 56 \args[in] len Size of the payload in bytes
gkroussos 0:637031152314 57
gkroussos 0:637031152314 58 \returns ble_error_t
gkroussos 0:637031152314 59
gkroussos 0:637031152314 60 \retval BLE_ERROR_NONE
gkroussos 0:637031152314 61 Everything executed properly
gkroussos 0:637031152314 62
gkroussos 0:637031152314 63 \retval BLE_ERROR_BUFFER_OVERFLOW
gkroussos 0:637031152314 64 The specified data would cause the advertising buffer
gkroussos 0:637031152314 65 to overflow
gkroussos 0:637031152314 66
gkroussos 0:637031152314 67 \par EXAMPLE
gkroussos 0:637031152314 68
gkroussos 0:637031152314 69 \code
gkroussos 0:637031152314 70
gkroussos 0:637031152314 71 \endcode
gkroussos 0:637031152314 72 */
gkroussos 0:637031152314 73 /**************************************************************************/
gkroussos 0:637031152314 74 ble_error_t GapAdvertisingData::addData(DataType advDataType, uint8_t * payload, uint8_t len)
gkroussos 0:637031152314 75 {
gkroussos 0:637031152314 76 /* ToDo: Check if an AD type already exists and if the existing */
gkroussos 0:637031152314 77 /* value is exclusive or not (flags, etc.) */
gkroussos 0:637031152314 78
gkroussos 0:637031152314 79 /* Make sure we don't exceed the 31 byte payload limit */
gkroussos 0:637031152314 80 if (_payloadLen + len + 2 >= GAP_ADVERTISING_DATA_MAX_PAYLOAD)
gkroussos 0:637031152314 81 return BLE_ERROR_BUFFER_OVERFLOW;
gkroussos 0:637031152314 82
gkroussos 0:637031152314 83 /* Field length */
gkroussos 0:637031152314 84 memset(&_payload[_payloadLen], len+1, 1);
gkroussos 0:637031152314 85 _payloadLen++;
gkroussos 0:637031152314 86
gkroussos 0:637031152314 87 /* Field ID */
gkroussos 0:637031152314 88 memset(&_payload[_payloadLen], (uint8_t)advDataType, 1);
gkroussos 0:637031152314 89 _payloadLen++;
gkroussos 0:637031152314 90
gkroussos 0:637031152314 91 /* Payload */
gkroussos 0:637031152314 92 memcpy(&_payload[_payloadLen], payload, len);
gkroussos 0:637031152314 93 _payloadLen += len;
gkroussos 0:637031152314 94
gkroussos 0:637031152314 95 return BLE_ERROR_NONE;
gkroussos 0:637031152314 96 }
gkroussos 0:637031152314 97
gkroussos 0:637031152314 98 /**************************************************************************/
gkroussos 0:637031152314 99 /*!
gkroussos 0:637031152314 100 \brief Helper function to add APPEARANCE data to the advertising
gkroussos 0:637031152314 101 payload
gkroussos 0:637031152314 102
gkroussos 0:637031152314 103 \args[in] appearance The APPEARANCE value to add
gkroussos 0:637031152314 104
gkroussos 0:637031152314 105 \returns ble_error_t
gkroussos 0:637031152314 106
gkroussos 0:637031152314 107 \retval BLE_ERROR_NONE
gkroussos 0:637031152314 108 Everything executed properly
gkroussos 0:637031152314 109
gkroussos 0:637031152314 110 \retval BLE_ERROR_BUFFER_OVERFLOW
gkroussos 0:637031152314 111 The specified data would cause the advertising buffer
gkroussos 0:637031152314 112 to overflow
gkroussos 0:637031152314 113
gkroussos 0:637031152314 114 \par EXAMPLE
gkroussos 0:637031152314 115
gkroussos 0:637031152314 116 \code
gkroussos 0:637031152314 117
gkroussos 0:637031152314 118 \endcode
gkroussos 0:637031152314 119 */
gkroussos 0:637031152314 120 /**************************************************************************/
gkroussos 0:637031152314 121 ble_error_t GapAdvertisingData::addAppearance(Appearance appearance)
gkroussos 0:637031152314 122 {
gkroussos 0:637031152314 123 _appearance = appearance;
gkroussos 0:637031152314 124 return addData(GapAdvertisingData::APPEARANCE, (uint8_t*)&appearance, 2);
gkroussos 0:637031152314 125 }
gkroussos 0:637031152314 126
gkroussos 0:637031152314 127 /**************************************************************************/
gkroussos 0:637031152314 128 /*!
gkroussos 0:637031152314 129 \brief Helper function to add FLAGS data to the advertising
gkroussos 0:637031152314 130 payload
gkroussos 0:637031152314 131
gkroussos 0:637031152314 132 \args[in] flag The FLAGS value to add
gkroussos 0:637031152314 133
gkroussos 0:637031152314 134 \par LE_LIMITED_DISCOVERABLE
gkroussos 0:637031152314 135 The peripheral is discoverable for a limited period of
gkroussos 0:637031152314 136 time
gkroussos 0:637031152314 137
gkroussos 0:637031152314 138 \par LE_GENERAL_DISCOVERABLE
gkroussos 0:637031152314 139 The peripheral is permanently discoverable
gkroussos 0:637031152314 140
gkroussos 0:637031152314 141 \par BREDR_NOT_SUPPORTED
gkroussos 0:637031152314 142 This peripheral is a Bluetooth Low Energy only device
gkroussos 0:637031152314 143 (no EDR support)
gkroussos 0:637031152314 144
gkroussos 0:637031152314 145 \returns ble_error_t
gkroussos 0:637031152314 146
gkroussos 0:637031152314 147 \retval BLE_ERROR_NONE
gkroussos 0:637031152314 148 Everything executed properly
gkroussos 0:637031152314 149
gkroussos 0:637031152314 150 \retval BLE_ERROR_BUFFER_OVERFLOW
gkroussos 0:637031152314 151 The specified data would cause the advertising buffer
gkroussos 0:637031152314 152 to overflow
gkroussos 0:637031152314 153
gkroussos 0:637031152314 154 \par EXAMPLE
gkroussos 0:637031152314 155
gkroussos 0:637031152314 156 \code
gkroussos 0:637031152314 157
gkroussos 0:637031152314 158 \endcode
gkroussos 0:637031152314 159 */
gkroussos 0:637031152314 160 /**************************************************************************/
gkroussos 0:637031152314 161 ble_error_t GapAdvertisingData::addFlags(Flags flag)
gkroussos 0:637031152314 162 {
gkroussos 0:637031152314 163 return addData(GapAdvertisingData::FLAGS, (uint8_t*)&flag, 1);
gkroussos 0:637031152314 164 }
gkroussos 0:637031152314 165
gkroussos 0:637031152314 166 /**************************************************************************/
gkroussos 0:637031152314 167 /*!
gkroussos 0:637031152314 168 \brief Helper function to add TX_POWER_LEVEL data to the
gkroussos 0:637031152314 169 advertising payload
gkroussos 0:637031152314 170
gkroussos 0:637031152314 171 \args[in] flag The TX_POWER_LEVEL value to add
gkroussos 0:637031152314 172
gkroussos 0:637031152314 173 \returns ble_error_t
gkroussos 0:637031152314 174
gkroussos 0:637031152314 175 \retval BLE_ERROR_NONE
gkroussos 0:637031152314 176 Everything executed properly
gkroussos 0:637031152314 177
gkroussos 0:637031152314 178 \retval BLE_ERROR_BUFFER_OVERFLOW
gkroussos 0:637031152314 179 The specified data would cause the advertising buffer
gkroussos 0:637031152314 180 to overflow
gkroussos 0:637031152314 181
gkroussos 0:637031152314 182 \par EXAMPLE
gkroussos 0:637031152314 183
gkroussos 0:637031152314 184 \code
gkroussos 0:637031152314 185
gkroussos 0:637031152314 186 \endcode
gkroussos 0:637031152314 187 */
gkroussos 0:637031152314 188 /**************************************************************************/
gkroussos 0:637031152314 189 ble_error_t GapAdvertisingData::addTxPower(int8_t txPower)
gkroussos 0:637031152314 190 {
gkroussos 0:637031152314 191 /* ToDo: Basic error checking to make sure txPower is in range */
gkroussos 0:637031152314 192 return addData(GapAdvertisingData::TX_POWER_LEVEL, (uint8_t*)&txPower, 1);
gkroussos 0:637031152314 193 }
gkroussos 0:637031152314 194
gkroussos 0:637031152314 195 /**************************************************************************/
gkroussos 0:637031152314 196 /*!
gkroussos 0:637031152314 197 \brief Clears the payload and resets the payload length counter
gkroussos 0:637031152314 198 */
gkroussos 0:637031152314 199 /**************************************************************************/
gkroussos 0:637031152314 200 void GapAdvertisingData::clear(void)
gkroussos 0:637031152314 201 {
gkroussos 0:637031152314 202 memset(&_payload, 0, GAP_ADVERTISING_DATA_MAX_PAYLOAD);
gkroussos 0:637031152314 203 _payloadLen = 0;
gkroussos 0:637031152314 204 }
gkroussos 0:637031152314 205
gkroussos 0:637031152314 206 /**************************************************************************/
gkroussos 0:637031152314 207 /*!
gkroussos 0:637031152314 208 \brief Returns a pointer to the the current payload
gkroussos 0:637031152314 209
gkroussos 0:637031152314 210 \returns A pointer to the payload
gkroussos 0:637031152314 211 */
gkroussos 0:637031152314 212 /**************************************************************************/
gkroussos 0:637031152314 213 uint8_t * GapAdvertisingData::getPayload(void)
gkroussos 0:637031152314 214 {
gkroussos 0:637031152314 215 return (_payloadLen > 0) ? _payload : NULL;
gkroussos 0:637031152314 216 }
gkroussos 0:637031152314 217
gkroussos 0:637031152314 218 /**************************************************************************/
gkroussos 0:637031152314 219 /*!
gkroussos 0:637031152314 220 \brief Returns the current payload length (0..31 bytes)
gkroussos 0:637031152314 221
gkroussos 0:637031152314 222 \returns The payload length in bytes
gkroussos 0:637031152314 223 */
gkroussos 0:637031152314 224 /**************************************************************************/
gkroussos 0:637031152314 225 uint8_t GapAdvertisingData::getPayloadLen(void)
gkroussos 0:637031152314 226 {
gkroussos 0:637031152314 227 return _payloadLen;
gkroussos 0:637031152314 228 }
gkroussos 0:637031152314 229
gkroussos 0:637031152314 230 /**************************************************************************/
gkroussos 0:637031152314 231 /*!
gkroussos 0:637031152314 232 \brief Returns the 16-bit appearance value for this device
gkroussos 0:637031152314 233
gkroussos 0:637031152314 234 \returns The 16-bit appearance value
gkroussos 0:637031152314 235 */
gkroussos 0:637031152314 236 /**************************************************************************/
gkroussos 0:637031152314 237 uint16_t GapAdvertisingData::getAppearance(void)
gkroussos 0:637031152314 238 {
gkroussos 0:637031152314 239 return (uint16_t)_appearance;
gkroussos 0:637031152314 240 }