HW layer for the Nucleo board, it only work with old BLE_API

Dependents:   Hello_BLE F446RE-BLE

Fork of X_NUCLEO_IDB0XA1 by ST

Committer:
mridup
Date:
Wed Nov 12 09:41:31 2014 +0000
Revision:
61:929885305c17
Parent:
58:027c65a54097
Child:
64:6d7b775c3f6d
Configuration of pinNames according to platforms. Platform.h defines all tested platform pins used for configuration and testing. Device Init configuration parameters.

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 61:929885305c17 79 btle_init(BlueNRGGap::getInstance().getIsSetAddress(), D11, D12, D3);
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 }