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: Hello_BLE F446RE-BLE
Fork of X_NUCLEO_IDB0XA1 by
platform/X-NUCLEO-IDB04A1/stm32_bluenrg_ble.cpp
- Committer:
- leonardoaraujosantos
- Date:
- 2015-11-03
- Revision:
- 129:57997390c086
- Parent:
- 119:19128d9d254f
- Child:
- 120:554a95afbd16
File content as of revision 129:57997390c086:
/**
******************************************************************************
* @file stm32_bluenrg_ble.cpp
* @author CL
* @version V1.0.0
* @date 15-June-2015
* @brief
******************************************************************************
* @attention
*
* <h2><center>© COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. Neither the name of STMicroelectronics nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
******************************************************************************
*/
/* Includes ------------------------------------------------------------------*/
#include "BlueNRGGap.h"
#include "BlueNRGDevice.h"
#include "Utils.h"
// FIXME: find a better way to get the instance of the BlueNRG device
extern BlueNRGDevice bluenrgDeviceInstance;
////////////////////////////////////////
// Start of C function wrappers
#ifdef __cplusplus
extern "C" {
#endif
#include "stm32_bluenrg_ble.h"
#include "gp_timer.h"
#include "debug.h"
void BlueNRG_RST(void)
{
bluenrgDeviceInstance.reset();
}
uint8_t BlueNRG_DataPresent(void)
{
return (bluenrgDeviceInstance.dataPresent());
}
/**
* @brief This function is a utility to print the log time
* in the format HH:MM:SS:MSS (DK GUI time format)
* @param None
* @retval None
*/
void print_csv_time(void){
#ifdef PRINT_CSV_FORMAT
uint32_t ms = 0;//ms_counter;
PRINT_CSV("%02d:%02d:%02d.%03d", ms/(60*60*1000)%24, ms/(60*1000)%60, (ms/1000)%60, ms%1000);
#endif
}
/**
* @brief Writes data to a serial interface.
* @param data1 : 1st buffer
* @param data2 : 2nd buffer
* @param n_bytes1: number of bytes in 1st buffer
* @param n_bytes2: number of bytes in 2nd buffer
* @retval None
*/
void Hal_Write_Serial(const void* data1, const void* data2, int32_t n_bytes1,
int32_t n_bytes2)
{
struct timer t;
Timer_Set(&t, CLOCK_SECOND/10);
#ifdef PRINT_CSV_FORMAT
print_csv_time();
for (int i=0; i<n_bytes1; i++) {
PRINT_CSV(" %02x", ((uint8_t *)data1)[i]);
}
for (int i=0; i<n_bytes2; i++) {
PRINT_CSV(" %02x", ((uint8_t *)data2)[i]);
}
PRINT_CSV("\n");
#endif
while(1){
if(BlueNRG_SPI_Write((uint8_t *)data1,(uint8_t *)data2, n_bytes1, n_bytes2)==0) break;
if(Timer_Expired(&t)){
break;
}
}
}
/**
* @brief Activate internal bootloader using pin.
* @param None
* @retval None
*/
void BlueNRG_HW_Bootloader(void)
{
// FIXME: this is not implemented yet
while (1);
}
/**
* @brief Reads from BlueNRG SPI buffer and store data into local buffer.
* @param buffer : Buffer where data from SPI are stored
* @param buff_size: Buffer size
* @retval int32_t : Number of read bytes
*/
int32_t BlueNRG_SPI_Read_All(uint8_t *buffer,
uint8_t buff_size)
{
int32_t ret = bluenrgDeviceInstance.spiRead(buffer, buff_size);
return ret;
}
/**
* @brief Writes data from local buffer to SPI.
* @param data1 : First data buffer to be written
* @param data2 : Second data buffer to be written
* @param Nb_bytes1: Size of first data buffer to be written
* @param Nb_bytes2: Size of second data buffer to be written
* @retval Number of read bytes
*/
int32_t BlueNRG_SPI_Write(uint8_t* data1,
uint8_t* data2, uint8_t Nb_bytes1, uint8_t Nb_bytes2)
{
int32_t ret = bluenrgDeviceInstance.spiWrite(data1, data2, Nb_bytes1, Nb_bytes2);
return ret;
}
/**
* @brief Enable SPI IRQ.
* @param None
* @retval None
*/
void Enable_SPI_IRQ(void)
{
bluenrgDeviceInstance.enable_irq();
}
/**
* @brief Disable SPI IRQ.
* @param None
* @retval None
*/
void Disable_SPI_IRQ(void)
{
bluenrgDeviceInstance.disable_irq();
}
/**
* @brief Clear Pending SPI IRQ.
* @param None
* @retval None
*/
void Clear_SPI_IRQ(void)
{
}
/**
* @brief Clear EXTI (External Interrupt) line for SPI IRQ.
* @param None
* @retval None
*/
void Clear_SPI_EXTI_Flag(void)
{
}
#ifdef __cplusplus
}
#endif
// End of C function wrappers
////////////////////////////////////////
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
