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:
Antonio Vilei
Date:
Tue Jun 16 10:23:56 2015 +0200
Revision:
74:c4526f8284d5
Parent:
70:d20d30f59b1c
Child:
75:8d763da1ccc7
Use mbed C++ API for BlueNRG Driver

Update the old driver and replace the low-level C functions
with the C++ API for SPI and InterruptIn.
Fix issues with interrupt initialization caused by the old driver
(calling mbed's private functions to setup SPI and irq and messing
up other code based on InterruptIn, e.g. button.)

Signed-off-by: Antonio Vilei <antonio.vilei@st.com>

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Silvio Lucio Oliva 70:d20d30f59b1c 1 /* mbed Microcontroller Library
Silvio Lucio Oliva 70:d20d30f59b1c 2 * Copyright (c) 2006-2013 ARM Limited
Silvio Lucio Oliva 70:d20d30f59b1c 3 *
Silvio Lucio Oliva 70:d20d30f59b1c 4 * Licensed under the Apache License, Version 2.0 (the "License");
Silvio Lucio Oliva 70:d20d30f59b1c 5 * you may not use this file except in compliance with the License.
Silvio Lucio Oliva 70:d20d30f59b1c 6 * You may obtain a copy of the License at
Silvio Lucio Oliva 70:d20d30f59b1c 7 *
Silvio Lucio Oliva 70:d20d30f59b1c 8 * http://www.apache.org/licenses/LICENSE-2.0
Silvio Lucio Oliva 70:d20d30f59b1c 9 *
Silvio Lucio Oliva 70:d20d30f59b1c 10 * Unless required by applicable law or agreed to in writing, software
Silvio Lucio Oliva 70:d20d30f59b1c 11 * distributed under the License is distributed on an "AS IS" BASIS,
Silvio Lucio Oliva 70:d20d30f59b1c 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Silvio Lucio Oliva 70:d20d30f59b1c 13 * See the License for the specific language governing permissions and
Silvio Lucio Oliva 70:d20d30f59b1c 14 * limitations under the License.
Silvio Lucio Oliva 70:d20d30f59b1c 15 */
Silvio Lucio Oliva 70:d20d30f59b1c 16
Silvio Lucio Oliva 70:d20d30f59b1c 17 /**
Silvio Lucio Oliva 70:d20d30f59b1c 18 ******************************************************************************
Silvio Lucio Oliva 70:d20d30f59b1c 19 * @file BlueNRGDevice.h
Silvio Lucio Oliva 70:d20d30f59b1c 20 * @author STMicroelectronics
Silvio Lucio Oliva 70:d20d30f59b1c 21 * @brief Header file for BLEDeviceInstanceBase based BlueNRGDevice
Silvio Lucio Oliva 70:d20d30f59b1c 22 ******************************************************************************
Silvio Lucio Oliva 70:d20d30f59b1c 23 * @copy
Silvio Lucio Oliva 70:d20d30f59b1c 24 *
Silvio Lucio Oliva 70:d20d30f59b1c 25 * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
Silvio Lucio Oliva 70:d20d30f59b1c 26 * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
Silvio Lucio Oliva 70:d20d30f59b1c 27 * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
Silvio Lucio Oliva 70:d20d30f59b1c 28 * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
Silvio Lucio Oliva 70:d20d30f59b1c 29 * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
Silvio Lucio Oliva 70:d20d30f59b1c 30 * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
Silvio Lucio Oliva 70:d20d30f59b1c 31 *
Silvio Lucio Oliva 70:d20d30f59b1c 32 * <h2><center>&copy; COPYRIGHT 2013 STMicroelectronics</center></h2>
Silvio Lucio Oliva 70:d20d30f59b1c 33 */
Silvio Lucio Oliva 70:d20d30f59b1c 34
Silvio Lucio Oliva 70:d20d30f59b1c 35 #ifndef __BLUENRG_H__
Silvio Lucio Oliva 70:d20d30f59b1c 36 #define __BLUENRG_H__
Silvio Lucio Oliva 70:d20d30f59b1c 37
Silvio Lucio Oliva 70:d20d30f59b1c 38 #define BLUENRG
Silvio Lucio Oliva 70:d20d30f59b1c 39 #define DEBUG_BLUENRG_USER
Silvio Lucio Oliva 70:d20d30f59b1c 40
Silvio Lucio Oliva 70:d20d30f59b1c 41 #include "btle.h"
Silvio Lucio Oliva 70:d20d30f59b1c 42
Silvio Lucio Oliva 70:d20d30f59b1c 43 #include "mbed.h"
Silvio Lucio Oliva 70:d20d30f59b1c 44 #include "blecommon.h"
Silvio Lucio Oliva 70:d20d30f59b1c 45 #include "BLEDevice.h"
Silvio Lucio Oliva 70:d20d30f59b1c 46 #include "BlueNRGGap.h"
Silvio Lucio Oliva 70:d20d30f59b1c 47 #include "BlueNRGGattServer.h"
Silvio Lucio Oliva 70:d20d30f59b1c 48
Silvio Lucio Oliva 70:d20d30f59b1c 49
Silvio Lucio Oliva 70:d20d30f59b1c 50 class BlueNRGDevice : public BLEDeviceInstanceBase
Silvio Lucio Oliva 70:d20d30f59b1c 51 {
Silvio Lucio Oliva 70:d20d30f59b1c 52
Silvio Lucio Oliva 70:d20d30f59b1c 53 public:
Antonio Vilei 74:c4526f8284d5 54 BlueNRGDevice(PinName mosi, PinName miso, PinName sck, PinName cs, PinName rst, PinName irq);
Silvio Lucio Oliva 70:d20d30f59b1c 55 virtual ~BlueNRGDevice(void);
Silvio Lucio Oliva 70:d20d30f59b1c 56
Silvio Lucio Oliva 70:d20d30f59b1c 57 // <<<ANDREA>>>
Silvio Lucio Oliva 70:d20d30f59b1c 58 virtual const char *getVersion(void);
Silvio Lucio Oliva 70:d20d30f59b1c 59 virtual Gap& getGap();
Silvio Lucio Oliva 70:d20d30f59b1c 60 virtual GattServer& getGattServer();
Silvio Lucio Oliva 70:d20d30f59b1c 61 virtual ble_error_t init(void);
Silvio Lucio Oliva 70:d20d30f59b1c 62 virtual ble_error_t shutdown(void);
Silvio Lucio Oliva 70:d20d30f59b1c 63 virtual ble_error_t reset(void);
Silvio Lucio Oliva 70:d20d30f59b1c 64 virtual ble_error_t initializeSecurity(bool enableBonding = true,
Silvio Lucio Oliva 70:d20d30f59b1c 65 bool requireMITM = true,
Silvio Lucio Oliva 70:d20d30f59b1c 66 Gap::SecurityIOCapabilities_t iocaps = Gap::IO_CAPS_NONE,
Silvio Lucio Oliva 70:d20d30f59b1c 67 const Gap::Passkey_t passkey = NULL);
Silvio Lucio Oliva 70:d20d30f59b1c 68 virtual ble_error_t setTxPower(int8_t txPower);
Silvio Lucio Oliva 70:d20d30f59b1c 69 virtual void getPermittedTxPowerValues(const int8_t **, size_t *);
Silvio Lucio Oliva 70:d20d30f59b1c 70 virtual void waitForEvent(void);
Silvio Lucio Oliva 70:d20d30f59b1c 71 // <<<ANDREA>>>
Silvio Lucio Oliva 70:d20d30f59b1c 72
Silvio Lucio Oliva 70:d20d30f59b1c 73 bool getIsInitialized(void);
Antonio Vilei 74:c4526f8284d5 74
Antonio Vilei 74:c4526f8284d5 75
Antonio Vilei 74:c4526f8284d5 76 bool dataPresent();
Antonio Vilei 74:c4526f8284d5 77 int32_t spiRead(uint8_t *buffer, uint8_t buff_size);
Antonio Vilei 74:c4526f8284d5 78 int32_t spiWrite(uint8_t* data1, uint8_t* data2, uint8_t Nb_bytes1, uint8_t Nb_bytes2);
Antonio Vilei 74:c4526f8284d5 79 void disable_irq();
Antonio Vilei 74:c4526f8284d5 80 void enable_irq();
Silvio Lucio Oliva 70:d20d30f59b1c 81
Silvio Lucio Oliva 70:d20d30f59b1c 82 private:
Silvio Lucio Oliva 70:d20d30f59b1c 83 bool isInitialized;
Antonio Vilei 74:c4526f8284d5 84
Antonio Vilei 74:c4526f8284d5 85 SPI spi_;
Antonio Vilei 74:c4526f8284d5 86 DigitalOut nCS_;
Antonio Vilei 74:c4526f8284d5 87 DigitalOut rst_;
Antonio Vilei 74:c4526f8284d5 88 InterruptIn irq_;
Silvio Lucio Oliva 70:d20d30f59b1c 89 };
Silvio Lucio Oliva 70:d20d30f59b1c 90
Silvio Lucio Oliva 70:d20d30f59b1c 91 #endif