test
Dependents: BLE_HeartRate_IDB0XA1_EPUDEE_Avril2018
Fork of X_NUCLEO_IDB0XA1 by
Diff: source/platform/stm32_bluenrg_ble.cpp
- Revision:
- 132:51056160fa4a
- Child:
- 133:1bb8df697f7f
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/source/platform/stm32_bluenrg_ble.cpp Wed Oct 07 08:39:04 2015 +0200 @@ -0,0 +1,205 @@ +/** + ****************************************************************************** + * @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****/