Devchannel Team / X_NUCLEO_IDB0XA1

Dependents:   Hello_BLE F446RE-BLE

Fork of X_NUCLEO_IDB0XA1 by ST

Committer:
hemddabral
Date:
Tue Oct 07 10:13:02 2014 +0000
Revision:
58:027c65a54097
Parent:
45:1fff7d7d5ce7
Child:
61:929885305c17
code cleanup and indentation.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mridup 2:a2b623661316 1 /* mbed Microcontroller Library
hemddabral 58:027c65a54097 2 * Copyright (c) 2006-2013 ARM Limited
hemddabral 58:027c65a54097 3 *
hemddabral 58:027c65a54097 4 * Licensed under the Apache License, Version 2.0 (the "License");
hemddabral 58:027c65a54097 5 * you may not use this file except in compliance with the License.
hemddabral 58:027c65a54097 6 * You may obtain a copy of the License at
hemddabral 58:027c65a54097 7 *
hemddabral 58:027c65a54097 8 * http://www.apache.org/licenses/LICENSE-2.0
hemddabral 58:027c65a54097 9 *
hemddabral 58:027c65a54097 10 * Unless required by applicable law or agreed to in writing, software
hemddabral 58:027c65a54097 11 * distributed under the License is distributed on an "AS IS" BASIS,
hemddabral 58:027c65a54097 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
hemddabral 58:027c65a54097 13 * See the License for the specific language governing permissions and
hemddabral 58:027c65a54097 14 * limitations under the License.
hemddabral 58:027c65a54097 15 */
mridup 2:a2b623661316 16
mridup 2:a2b623661316 17 #include "mbed.h"
mridup 2:a2b623661316 18 #include "BlueNRGDevice.h"
mridup 41:95b8d531628c 19 #include "BlueNRGGap.h"
mridup 41:95b8d531628c 20 #include "BlueNRGGattServer.h"
mridup 2:a2b623661316 21
mridup 2:a2b623661316 22 #include "btle.h"
hemddabral 39:af09d274257b 23 #include "Utils.h"
hemddabral 39:af09d274257b 24 #include "osal.h"
mridup 2:a2b623661316 25
mridup 2:a2b623661316 26 /**
hemddabral 58:027c65a54097 27 * The singleton which represents the BlueNRG transport for the BLEDevice.
hemddabral 58:027c65a54097 28 */
mridup 2:a2b623661316 29 static BlueNRGDevice deviceInstance;
mridup 2:a2b623661316 30
mridup 2:a2b623661316 31 /**
hemddabral 58:027c65a54097 32 * BLE-API requires an implementation of the following function in order to
hemddabral 58:027c65a54097 33 * obtain its transport handle.
hemddabral 58:027c65a54097 34 */
mridup 2:a2b623661316 35 BLEDeviceInstanceBase *
mridup 2:a2b623661316 36 createBLEDeviceInstance(void)
mridup 2:a2b623661316 37 {
mridup 2:a2b623661316 38 return (&deviceInstance);
mridup 2:a2b623661316 39 }
mridup 2:a2b623661316 40
mridup 2:a2b623661316 41 /**************************************************************************/
mridup 2:a2b623661316 42 /*!
mridup 2:a2b623661316 43 @brief Constructor
mridup 2:a2b623661316 44 */
mridup 2:a2b623661316 45 /**************************************************************************/
mridup 2:a2b623661316 46 BlueNRGDevice::BlueNRGDevice(void)
mridup 2:a2b623661316 47 {
mridup 45:1fff7d7d5ce7 48 isInitialized = false;
mridup 2:a2b623661316 49 }
mridup 2:a2b623661316 50
mridup 2:a2b623661316 51 /**************************************************************************/
mridup 2:a2b623661316 52 /*!
mridup 2:a2b623661316 53 @brief Destructor
mridup 2:a2b623661316 54 */
mridup 2:a2b623661316 55 /**************************************************************************/
mridup 2:a2b623661316 56 BlueNRGDevice::~BlueNRGDevice(void)
mridup 2:a2b623661316 57 {
mridup 2:a2b623661316 58 }
mridup 2:a2b623661316 59
mridup 2:a2b623661316 60 /**************************************************************************/
mridup 2:a2b623661316 61 /*!
mridup 2:a2b623661316 62 @brief Initialises anything required to start using BLE
mridup 2:a2b623661316 63
mridup 2:a2b623661316 64 @returns ble_error_t
mridup 2:a2b623661316 65
mridup 2:a2b623661316 66 @retval BLE_ERROR_NONE
mridup 2:a2b623661316 67 Everything executed properly
mridup 2:a2b623661316 68
mridup 2:a2b623661316 69 @section EXAMPLE
mridup 2:a2b623661316 70
mridup 2:a2b623661316 71 @code
mridup 2:a2b623661316 72
mridup 2:a2b623661316 73 @endcode
mridup 2:a2b623661316 74 */
mridup 2:a2b623661316 75 /**************************************************************************/
mridup 2:a2b623661316 76 ble_error_t BlueNRGDevice::init(void)
mridup 2:a2b623661316 77 {
mridup 2:a2b623661316 78 /* ToDo: Clear memory contents, reset the SD, etc. */
mridup 41:95b8d531628c 79 btle_init(BlueNRGGap::getInstance().getIsSetAddress());
mridup 2:a2b623661316 80
mridup 45:1fff7d7d5ce7 81 isInitialized = true;
mridup 45:1fff7d7d5ce7 82
mridup 2:a2b623661316 83 return BLE_ERROR_NONE;
mridup 2:a2b623661316 84 }
mridup 2:a2b623661316 85
mridup 2:a2b623661316 86 /**************************************************************************/
mridup 2:a2b623661316 87 /*!
mridup 2:a2b623661316 88 @brief Resets the BLE HW, removing any existing services and
mridup 2:a2b623661316 89 characteristics
mridup 2:a2b623661316 90
mridup 2:a2b623661316 91 @returns ble_error_t
mridup 2:a2b623661316 92
mridup 2:a2b623661316 93 @retval BLE_ERROR_NONE
mridup 2:a2b623661316 94 Everything executed properly
mridup 2:a2b623661316 95
mridup 2:a2b623661316 96 @section EXAMPLE
mridup 2:a2b623661316 97
mridup 2:a2b623661316 98 @code
mridup 2:a2b623661316 99
mridup 2:a2b623661316 100 @endcode
mridup 2:a2b623661316 101 */
mridup 2:a2b623661316 102 /**************************************************************************/
mridup 2:a2b623661316 103 ble_error_t BlueNRGDevice::reset(void)
mridup 2:a2b623661316 104 {
mridup 2:a2b623661316 105 wait(0.5);
mridup 2:a2b623661316 106
mridup 2:a2b623661316 107 /* Reset BlueNRG SPI interface */
mridup 41:95b8d531628c 108 BlueNRG_RST();
hemddabral 58:027c65a54097 109
mridup 2:a2b623661316 110 /* Wait for the radio to come back up */
mridup 2:a2b623661316 111 wait(1);
mridup 45:1fff7d7d5ce7 112
mridup 45:1fff7d7d5ce7 113 isInitialized = false;
mridup 2:a2b623661316 114
mridup 2:a2b623661316 115 return BLE_ERROR_NONE;
mridup 2:a2b623661316 116 }
mridup 2:a2b623661316 117
mridup 2:a2b623661316 118 void BlueNRGDevice::waitForEvent(void)
mridup 2:a2b623661316 119 {
mridup 2:a2b623661316 120 HCI_Process();//Send App Events??
mridup 2:a2b623661316 121
mridup 2:a2b623661316 122 }
hemddabral 37:07487777d9c6 123
hemddabral 37:07487777d9c6 124
hemddabral 37:07487777d9c6 125 /**************************************************************************/
hemddabral 37:07487777d9c6 126 /*!
hemddabral 37:07487777d9c6 127 @brief get GAP version
hemddabral 37:07487777d9c6 128
hemddabral 37:07487777d9c6 129 @returns char *
hemddabral 37:07487777d9c6 130
hemddabral 39:af09d274257b 131 @retval pointer to version string
hemddabral 37:07487777d9c6 132
hemddabral 37:07487777d9c6 133 @section EXAMPLE
hemddabral 37:07487777d9c6 134
hemddabral 37:07487777d9c6 135 @code
hemddabral 37:07487777d9c6 136
hemddabral 37:07487777d9c6 137 @endcode
hemddabral 37:07487777d9c6 138 */
hemddabral 37:07487777d9c6 139 /**************************************************************************/
hemddabral 37:07487777d9c6 140 const char *BlueNRGDevice::getVersion(void)
hemddabral 37:07487777d9c6 141 {
hemddabral 39:af09d274257b 142 char *version = new char[6];
hemddabral 39:af09d274257b 143 memcpy((void *)version, "1.0.0", 5);
hemddabral 39:af09d274257b 144 return version;
hemddabral 37:07487777d9c6 145 }
hemddabral 37:07487777d9c6 146
mridup 45:1fff7d7d5ce7 147 /**************************************************************************/
mridup 45:1fff7d7d5ce7 148 /*!
mridup 45:1fff7d7d5ce7 149 @brief get init state
mridup 45:1fff7d7d5ce7 150
mridup 45:1fff7d7d5ce7 151 @returns bool
mridup 45:1fff7d7d5ce7 152
mridup 45:1fff7d7d5ce7 153 @retval
mridup 45:1fff7d7d5ce7 154
mridup 45:1fff7d7d5ce7 155 @section EXAMPLE
mridup 45:1fff7d7d5ce7 156
mridup 45:1fff7d7d5ce7 157 @code
mridup 45:1fff7d7d5ce7 158
mridup 45:1fff7d7d5ce7 159 @endcode
mridup 45:1fff7d7d5ce7 160 */
mridup 45:1fff7d7d5ce7 161 /**************************************************************************/
mridup 45:1fff7d7d5ce7 162 bool BlueNRGDevice::getIsInitialized(void)
mridup 45:1fff7d7d5ce7 163 {
mridup 45:1fff7d7d5ce7 164 return isInitialized;
mridup 45:1fff7d7d5ce7 165 }
hemddabral 37:07487777d9c6 166
hemddabral 37:07487777d9c6 167 /**************************************************************************/
hemddabral 37:07487777d9c6 168 /*!
hemddabral 37:07487777d9c6 169 @brief get reference to GAP object
hemddabral 37:07487777d9c6 170
hemddabral 37:07487777d9c6 171 @returns Gap&
hemddabral 37:07487777d9c6 172
hemddabral 37:07487777d9c6 173 @retval reference to gap object
hemddabral 37:07487777d9c6 174
hemddabral 37:07487777d9c6 175 @section EXAMPLE
hemddabral 37:07487777d9c6 176
hemddabral 37:07487777d9c6 177 @code
hemddabral 37:07487777d9c6 178
hemddabral 37:07487777d9c6 179 @endcode
hemddabral 37:07487777d9c6 180 */
hemddabral 37:07487777d9c6 181 /**************************************************************************/
hemddabral 37:07487777d9c6 182 Gap &BlueNRGDevice::getGap()
hemddabral 37:07487777d9c6 183 {
hemddabral 58:027c65a54097 184 return BlueNRGGap::getInstance();
hemddabral 37:07487777d9c6 185 }
hemddabral 37:07487777d9c6 186
hemddabral 37:07487777d9c6 187 /**************************************************************************/
hemddabral 37:07487777d9c6 188 /*!
hemddabral 37:07487777d9c6 189 @brief get reference to GATT server object
hemddabral 37:07487777d9c6 190
hemddabral 37:07487777d9c6 191 @returns GattServer&
hemddabral 37:07487777d9c6 192
hemddabral 37:07487777d9c6 193 @retval reference to GATT server object
hemddabral 37:07487777d9c6 194
hemddabral 37:07487777d9c6 195 @section EXAMPLE
hemddabral 37:07487777d9c6 196
hemddabral 37:07487777d9c6 197 @code
hemddabral 37:07487777d9c6 198
hemddabral 37:07487777d9c6 199 @endcode
hemddabral 37:07487777d9c6 200 */
hemddabral 37:07487777d9c6 201 /**************************************************************************/
hemddabral 37:07487777d9c6 202 GattServer &BlueNRGDevice::getGattServer()
hemddabral 37:07487777d9c6 203 {
hemddabral 58:027c65a54097 204 return BlueNRGGattServer::getInstance();
hemddabral 37:07487777d9c6 205 }
hemddabral 37:07487777d9c6 206
hemddabral 37:07487777d9c6 207 /**************************************************************************/
hemddabral 37:07487777d9c6 208 /*!
hemddabral 37:07487777d9c6 209 @brief set Tx power level
hemddabral 37:07487777d9c6 210
hemddabral 37:07487777d9c6 211 @returns ble_error_t
hemddabral 37:07487777d9c6 212
hemddabral 37:07487777d9c6 213 @retval BLE_ERROR_NONE
hemddabral 37:07487777d9c6 214 Everything executed properly
hemddabral 37:07487777d9c6 215
hemddabral 37:07487777d9c6 216 @section EXAMPLE
hemddabral 37:07487777d9c6 217
hemddabral 37:07487777d9c6 218 @code
hemddabral 37:07487777d9c6 219
hemddabral 37:07487777d9c6 220 @endcode
hemddabral 37:07487777d9c6 221 */
hemddabral 37:07487777d9c6 222 /**************************************************************************/
hemddabral 37:07487777d9c6 223 ble_error_t BlueNRGDevice::setTxPower(int8_t txPower)
hemddabral 37:07487777d9c6 224 {
hemddabral 39:af09d274257b 225 int8_t enHighPower = 0;
hemddabral 39:af09d274257b 226 int8_t paLevel = 0;
hemddabral 39:af09d274257b 227 int8_t dbmActuallySet = getHighPowerAndPALevelValue(txPower, enHighPower, paLevel);
hemddabral 39:af09d274257b 228 DEBUG("txPower=%d, dbmActuallySet=%d\n\r", txPower, dbmActuallySet);
hemddabral 39:af09d274257b 229 DEBUG("enHighPower=%d, paLevel=%d\n\r", enHighPower, paLevel);
hemddabral 39:af09d274257b 230 aci_hal_set_tx_power_level(enHighPower, paLevel);
hemddabral 37:07487777d9c6 231 return BLE_ERROR_NONE;
hemddabral 37:07487777d9c6 232 }