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 19 11:24:37 2014 +0000
Revision:
64:6d7b775c3f6d
Parent:
61:929885305c17
Child:
67:23f9772ef7bf
Changed directory structure to support STM32Cube BlueNRG module, platform module and BLE_API adaptation module as separate entities. Added Doxygen support to Adaptation and used HCI components.

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 64:6d7b775c3f6d 17 /**
mridup 64:6d7b775c3f6d 18 ******************************************************************************
mridup 64:6d7b775c3f6d 19 * @file BlueNRGDevice.cpp
mridup 64:6d7b775c3f6d 20 * @author STMicroelectronics
mridup 64:6d7b775c3f6d 21 * @brief Implementation of BLEDeviceInstanceBase
mridup 64:6d7b775c3f6d 22 ******************************************************************************
mridup 64:6d7b775c3f6d 23 * @copy
mridup 64:6d7b775c3f6d 24 *
mridup 64:6d7b775c3f6d 25 * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
mridup 64:6d7b775c3f6d 26 * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
mridup 64:6d7b775c3f6d 27 * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
mridup 64:6d7b775c3f6d 28 * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
mridup 64:6d7b775c3f6d 29 * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
mridup 64:6d7b775c3f6d 30 * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
mridup 64:6d7b775c3f6d 31 *
mridup 64:6d7b775c3f6d 32 * <h2><center>&copy; COPYRIGHT 2013 STMicroelectronics</center></h2>
mridup 64:6d7b775c3f6d 33 */
mridup 64:6d7b775c3f6d 34
mridup 64:6d7b775c3f6d 35 /** @defgroup BlueNRGDevice
mridup 64:6d7b775c3f6d 36 * @brief BlueNRG BLE_API Device Adaptation
mridup 64:6d7b775c3f6d 37 * @{
mridup 64:6d7b775c3f6d 38 */
mridup 64:6d7b775c3f6d 39
mridup 2:a2b623661316 40 #include "mbed.h"
mridup 2:a2b623661316 41 #include "BlueNRGDevice.h"
mridup 41:95b8d531628c 42 #include "BlueNRGGap.h"
mridup 41:95b8d531628c 43 #include "BlueNRGGattServer.h"
mridup 2:a2b623661316 44
mridup 2:a2b623661316 45 #include "btle.h"
hemddabral 39:af09d274257b 46 #include "Utils.h"
hemddabral 39:af09d274257b 47 #include "osal.h"
mridup 2:a2b623661316 48
mridup 2:a2b623661316 49 /**
hemddabral 58:027c65a54097 50 * The singleton which represents the BlueNRG transport for the BLEDevice.
hemddabral 58:027c65a54097 51 */
mridup 2:a2b623661316 52 static BlueNRGDevice deviceInstance;
mridup 2:a2b623661316 53
mridup 2:a2b623661316 54 /**
hemddabral 58:027c65a54097 55 * BLE-API requires an implementation of the following function in order to
hemddabral 58:027c65a54097 56 * obtain its transport handle.
hemddabral 58:027c65a54097 57 */
mridup 2:a2b623661316 58 BLEDeviceInstanceBase *
mridup 2:a2b623661316 59 createBLEDeviceInstance(void)
mridup 2:a2b623661316 60 {
mridup 2:a2b623661316 61 return (&deviceInstance);
mridup 2:a2b623661316 62 }
mridup 2:a2b623661316 63
mridup 2:a2b623661316 64 /**************************************************************************/
mridup 64:6d7b775c3f6d 65 /**
mridup 2:a2b623661316 66 @brief Constructor
mridup 2:a2b623661316 67 */
mridup 2:a2b623661316 68 /**************************************************************************/
mridup 2:a2b623661316 69 BlueNRGDevice::BlueNRGDevice(void)
mridup 2:a2b623661316 70 {
mridup 45:1fff7d7d5ce7 71 isInitialized = false;
mridup 2:a2b623661316 72 }
mridup 2:a2b623661316 73
mridup 2:a2b623661316 74 /**************************************************************************/
mridup 64:6d7b775c3f6d 75 /**
mridup 2:a2b623661316 76 @brief Destructor
mridup 2:a2b623661316 77 */
mridup 2:a2b623661316 78 /**************************************************************************/
mridup 2:a2b623661316 79 BlueNRGDevice::~BlueNRGDevice(void)
mridup 2:a2b623661316 80 {
mridup 2:a2b623661316 81 }
mridup 2:a2b623661316 82
mridup 64:6d7b775c3f6d 83
mridup 64:6d7b775c3f6d 84 /**
mridup 2:a2b623661316 85 @brief Initialises anything required to start using BLE
mridup 64:6d7b775c3f6d 86 @param[in] void
mridup 2:a2b623661316 87 @returns ble_error_t
mridup 2:a2b623661316 88 */
mridup 2:a2b623661316 89 ble_error_t BlueNRGDevice::init(void)
mridup 2:a2b623661316 90 {
mridup 2:a2b623661316 91 /* ToDo: Clear memory contents, reset the SD, etc. */
mridup 61:929885305c17 92 btle_init(BlueNRGGap::getInstance().getIsSetAddress(), D11, D12, D3);
mridup 2:a2b623661316 93
mridup 45:1fff7d7d5ce7 94 isInitialized = true;
mridup 45:1fff7d7d5ce7 95
mridup 2:a2b623661316 96 return BLE_ERROR_NONE;
mridup 2:a2b623661316 97 }
mridup 2:a2b623661316 98
mridup 64:6d7b775c3f6d 99
mridup 64:6d7b775c3f6d 100 /**
mridup 2:a2b623661316 101 @brief Resets the BLE HW, removing any existing services and
mridup 2:a2b623661316 102 characteristics
mridup 64:6d7b775c3f6d 103 @param[in] void
mridup 2:a2b623661316 104 @returns ble_error_t
mridup 2:a2b623661316 105 */
mridup 2:a2b623661316 106 ble_error_t BlueNRGDevice::reset(void)
mridup 2:a2b623661316 107 {
mridup 2:a2b623661316 108 wait(0.5);
mridup 2:a2b623661316 109
mridup 2:a2b623661316 110 /* Reset BlueNRG SPI interface */
mridup 41:95b8d531628c 111 BlueNRG_RST();
hemddabral 58:027c65a54097 112
mridup 2:a2b623661316 113 /* Wait for the radio to come back up */
mridup 2:a2b623661316 114 wait(1);
mridup 45:1fff7d7d5ce7 115
mridup 45:1fff7d7d5ce7 116 isInitialized = false;
mridup 2:a2b623661316 117
mridup 2:a2b623661316 118 return BLE_ERROR_NONE;
mridup 2:a2b623661316 119 }
mridup 2:a2b623661316 120
mridup 64:6d7b775c3f6d 121
mridup 64:6d7b775c3f6d 122 /*!
mridup 64:6d7b775c3f6d 123 @brief Wait for any BLE Event like BLE Connection, Read Request etc.
mridup 64:6d7b775c3f6d 124 @param[in] void
mridup 64:6d7b775c3f6d 125 @returns char *
mridup 64:6d7b775c3f6d 126 */
mridup 2:a2b623661316 127 void BlueNRGDevice::waitForEvent(void)
mridup 2:a2b623661316 128 {
mridup 2:a2b623661316 129 HCI_Process();//Send App Events??
mridup 2:a2b623661316 130
mridup 2:a2b623661316 131 }
hemddabral 37:07487777d9c6 132
hemddabral 37:07487777d9c6 133
hemddabral 37:07487777d9c6 134 /*!
hemddabral 37:07487777d9c6 135 @brief get GAP version
mridup 64:6d7b775c3f6d 136 @param[in] void
mridup 64:6d7b775c3f6d 137 @returns char *
hemddabral 37:07487777d9c6 138 */
hemddabral 37:07487777d9c6 139 const char *BlueNRGDevice::getVersion(void)
hemddabral 37:07487777d9c6 140 {
hemddabral 39:af09d274257b 141 char *version = new char[6];
hemddabral 39:af09d274257b 142 memcpy((void *)version, "1.0.0", 5);
hemddabral 39:af09d274257b 143 return version;
hemddabral 37:07487777d9c6 144 }
hemddabral 37:07487777d9c6 145
mridup 45:1fff7d7d5ce7 146 /**************************************************************************/
mridup 45:1fff7d7d5ce7 147 /*!
mridup 45:1fff7d7d5ce7 148 @brief get init state
mridup 64:6d7b775c3f6d 149 @param[in] void
mridup 45:1fff7d7d5ce7 150 @returns bool
mridup 45:1fff7d7d5ce7 151 */
mridup 45:1fff7d7d5ce7 152 /**************************************************************************/
mridup 45:1fff7d7d5ce7 153 bool BlueNRGDevice::getIsInitialized(void)
mridup 45:1fff7d7d5ce7 154 {
mridup 45:1fff7d7d5ce7 155 return isInitialized;
mridup 45:1fff7d7d5ce7 156 }
hemddabral 37:07487777d9c6 157
hemddabral 37:07487777d9c6 158 /**************************************************************************/
hemddabral 37:07487777d9c6 159 /*!
hemddabral 37:07487777d9c6 160 @brief get reference to GAP object
mridup 64:6d7b775c3f6d 161 @param[in] void
hemddabral 37:07487777d9c6 162 @returns Gap&
hemddabral 37:07487777d9c6 163 */
hemddabral 37:07487777d9c6 164 /**************************************************************************/
hemddabral 37:07487777d9c6 165 Gap &BlueNRGDevice::getGap()
hemddabral 37:07487777d9c6 166 {
hemddabral 58:027c65a54097 167 return BlueNRGGap::getInstance();
hemddabral 37:07487777d9c6 168 }
hemddabral 37:07487777d9c6 169
hemddabral 37:07487777d9c6 170 /**************************************************************************/
hemddabral 37:07487777d9c6 171 /*!
hemddabral 37:07487777d9c6 172 @brief get reference to GATT server object
mridup 64:6d7b775c3f6d 173 @param[in] void
hemddabral 37:07487777d9c6 174 @returns GattServer&
hemddabral 37:07487777d9c6 175 */
hemddabral 37:07487777d9c6 176 /**************************************************************************/
hemddabral 37:07487777d9c6 177 GattServer &BlueNRGDevice::getGattServer()
hemddabral 37:07487777d9c6 178 {
hemddabral 58:027c65a54097 179 return BlueNRGGattServer::getInstance();
hemddabral 37:07487777d9c6 180 }
hemddabral 37:07487777d9c6 181
hemddabral 37:07487777d9c6 182 /**************************************************************************/
hemddabral 37:07487777d9c6 183 /*!
hemddabral 37:07487777d9c6 184 @brief set Tx power level
mridup 64:6d7b775c3f6d 185 @param[in] txPower Transmission Power level
hemddabral 37:07487777d9c6 186 @returns ble_error_t
hemddabral 37:07487777d9c6 187 */
hemddabral 37:07487777d9c6 188 /**************************************************************************/
hemddabral 37:07487777d9c6 189 ble_error_t BlueNRGDevice::setTxPower(int8_t txPower)
hemddabral 37:07487777d9c6 190 {
hemddabral 39:af09d274257b 191 int8_t enHighPower = 0;
hemddabral 39:af09d274257b 192 int8_t paLevel = 0;
hemddabral 39:af09d274257b 193 int8_t dbmActuallySet = getHighPowerAndPALevelValue(txPower, enHighPower, paLevel);
hemddabral 39:af09d274257b 194 DEBUG("txPower=%d, dbmActuallySet=%d\n\r", txPower, dbmActuallySet);
hemddabral 39:af09d274257b 195 DEBUG("enHighPower=%d, paLevel=%d\n\r", enHighPower, paLevel);
hemddabral 39:af09d274257b 196 aci_hal_set_tx_power_level(enHighPower, paLevel);
hemddabral 37:07487777d9c6 197 return BLE_ERROR_NONE;
hemddabral 37:07487777d9c6 198 }