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.
Fork of X_NUCLEO_IDB0XA1 by
Diff: source/BlueNRGDevice.cpp
- Branch:
- 117ed4c55629877d7cb3d79c4bcb24e7da5bcab0
- Revision:
- 278:a5209d8cfd61
- Parent:
- 273:00205952d841
- Child:
- 293:5a1f577bf92f
diff -r 8da7a954664d -r a5209d8cfd61 source/BlueNRGDevice.cpp
--- 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;
}
