Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: BLE_LED_IDB0XA1_demo MOTOR_BLE_V2 Motor_Ble_v1 Motor_Ble_v10223 ... more
Fork of X_NUCLEO_IDB0XA1 by
Diff: source/BlueNRGDevice.cpp
- Branch:
- 117ed4c55629877d7cb3d79c4bcb24e7da5bcab0
- Revision:
- 278:a5209d8cfd61
- Parent:
- 273:00205952d841
- Child:
- 293:5a1f577bf92f
--- a/source/BlueNRGDevice.cpp Thu Sep 15 10:51:41 2016 +0100
+++ b/source/BlueNRGDevice.cpp Thu Sep 15 10:51:43 2016 +0100
@@ -16,7 +16,7 @@
/**
******************************************************************************
- * @file BlueNRGDevice.cpp
+ * @file BlueNRGDevice.cpp
* @author STMicroelectronics
* @brief Implementation of BLEDeviceInstanceBase
******************************************************************************
@@ -30,14 +30,18 @@
* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
*
* <h2><center>© COPYRIGHT 2013 STMicroelectronics</center></h2>
- */
-
+ */
+
/** @defgroup BlueNRGDevice
* @brief BlueNRG BLE_API Device Adaptation
* @{
*/
-#include "mbed-drivers/mbed.h"
+#ifdef YOTTA_CFG_MBED_OS
+ #include "mbed-drivers/mbed.h"
+#else
+ #include "mbed.h"
+#endif
#include "BlueNRGDevice.h"
#include "BlueNRGGap.h"
#include "BlueNRGGattServer.h"
@@ -97,14 +101,14 @@
PinName sck,
PinName cs,
PinName rst,
- PinName irq) :
+ PinName irq) :
isInitialized(false), spi_(mosi, miso, sck), nCS_(cs), rst_(rst), irq_(irq)
{
// Setup the spi for 8 bit data, low clock polarity,
// 1-edge phase, with an 8MHz clock rate
spi_.format(8, 0);
spi_.frequency(8000000);
-
+
// Deselect the BlueNRG chip by keeping its nCS signal high
nCS_ = 1;
@@ -154,7 +158,7 @@
int BlueNRGDevice::updateFirmware(const uint8_t *fw_image, uint32_t fw_size)
{
int status = program_device(fw_image, fw_size);
-
+
return (status);
}
@@ -184,14 +188,14 @@
// Init the BlueNRG/BlueNRG-MS stack
btleInit();
-
+
isInitialized = true;
BLE::InitializationCompleteCallbackContext context = {
BLE::Instance(instanceID),
BLE_ERROR_NONE
};
callback.call(&context);
-
+
return BLE_ERROR_NONE;
}
@@ -218,9 +222,9 @@
}
/*!
- @brief Wait for any BLE Event like BLE Connection, Read Request etc.
+ @brief Wait for any BLE Event like BLE Connection, Read Request etc.
@param[in] void
- @returns char *
+ @returns char *
*/
void BlueNRGDevice::waitForEvent(void)
{
@@ -228,7 +232,7 @@
do {
bluenrgDeviceInstance.processEvents();
-
+
if(must_return) return;
__WFE(); /* it is recommended that SEVONPEND in the
@@ -237,8 +241,8 @@
that conrol is given back to main loop before next WFE */
} while(true);
-}
-
+}
+
/*!
@brief get GAP version
@brief Get the BLE stack version information
@@ -255,15 +259,15 @@
/*!
@brief get reference to GAP object
@param[in] void
- @returns Gap&
+ @returns Gap&
*/
/**************************************************************************/
-Gap &BlueNRGDevice::getGap()
+Gap &BlueNRGDevice::getGap()
{
return BlueNRGGap::getInstance();
}
-const Gap &BlueNRGDevice::getGap() const
+const Gap &BlueNRGDevice::getGap() const
{
return BlueNRGGap::getInstance();
}
@@ -272,10 +276,10 @@
/*!
@brief get reference to GATT server object
@param[in] void
- @returns GattServer&
+ @returns GattServer&
*/
/**************************************************************************/
-GattServer &BlueNRGDevice::getGattServer()
+GattServer &BlueNRGDevice::getGattServer()
{
return BlueNRGGattServer::getInstance();
}
@@ -284,7 +288,7 @@
{
return BlueNRGGattServer::getInstance();
}
-
+
/**************************************************************************/
/*!
@brief shut down the BLE device
@@ -325,7 +329,7 @@
return BLE_ERROR_NONE;
}
-
+
/**
* @brief Reads from BlueNRG SPI buffer and store data into local buffer.
* @param buffer : Buffer where data from SPI are stored
@@ -338,7 +342,7 @@
uint8_t len = 0;
uint8_t char_ff = 0xff;
volatile uint8_t read_char;
-
+
uint8_t i = 0;
volatile uint8_t tmpreg;
@@ -347,38 +351,38 @@
/* Select the chip */
nCS_ = 0;
-
- /* Read the header */
+
+ /* Read the header */
for (i = 0; i < 5; i++)
- {
+ {
tmpreg = spi_.write(header_master[i]);
header_slave[i] = (uint8_t)(tmpreg);
- }
-
+ }
+
if (header_slave[0] == 0x02) {
/* device is ready */
byte_count = (header_slave[4]<<8)|header_slave[3];
-
+
if (byte_count > 0) {
-
+
/* avoid to read more data that size of the buffer */
if (byte_count > buff_size){
byte_count = buff_size;
}
-
+
for (len = 0; len < byte_count; len++){
read_char = spi_.write(char_ff);
buffer[len] = read_char;
}
- }
+ }
}
/* Release CS line to deselect the chip */
nCS_ = 1;
-
+
// Add a small delay to give time to the BlueNRG to set the IRQ pin low
// to avoid a useless SPI read at the end of the transaction
for(volatile int i = 0; i < 2; i++)__NOP();
-
+
#ifdef PRINT_CSV_FORMAT
if (len > 0) {
print_csv_time();
@@ -388,8 +392,8 @@
PRINT_CSV("\n");
}
#endif
-
- return len;
+
+ return len;
}
/**
@@ -402,11 +406,11 @@
*/
int32_t BlueNRGDevice::spiWrite(uint8_t* data1,
uint8_t* data2, uint8_t Nb_bytes1, uint8_t Nb_bytes2)
-{
+{
int32_t result = 0;
uint32_t i;
volatile uint8_t tmpreg;
-
+
unsigned char header_master[HEADER_SIZE] = {0x0a, 0x00, 0x00, 0x00, 0x00};
unsigned char header_slave[HEADER_SIZE] = {0xaa, 0x00, 0x00, 0x00, 0x00};
@@ -415,24 +419,24 @@
/* CS reset */
nCS_ = 0;
- /* Exchange header */
+ /* Exchange header */
for (i = 0; i < 5; i++)
- {
+ {
tmpreg = spi_.write(header_master[i]);
header_slave[i] = tmpreg;
- }
-
+ }
+
if (header_slave[0] == 0x02) {
/* SPI is ready */
if (header_slave[1] >= (Nb_bytes1+Nb_bytes2)) {
-
+
/* Buffer is big enough */
for (i = 0; i < Nb_bytes1; i++) {
spi_.write(*(data1 + i));
}
for (i = 0; i < Nb_bytes2; i++) {
spi_.write(*(data2 + i));
- }
+ }
} else {
/* Buffer is too small */
result = -2;
@@ -441,13 +445,13 @@
/* SPI is not ready */
result = -1;
}
-
+
/* Release CS line */
//HAL_GPIO_WritePin(BNRG_SPI_CS_PORT, BNRG_SPI_CS_PIN, GPIO_PIN_SET);
nCS_ = 1;
-
+
enable_irq();
-
+
return result;
}
