Adapted to OBCP ENSMM

Dependents:   SimpleBLE-ObCP_ENSMM_V2019_Test_BLE_S SimpleBLE-ObCp_test-BLE_envoi SimpleBLE-ObCp_test-BLE Roller_catcher_Envoi ... more

Committer:
Wolfgang Betz
Date:
Wed Oct 07 08:39:04 2015 +0200
Revision:
132:51056160fa4a
Child:
133:1bb8df697f7f
Andrea's version as of mail from 10/06/2015 05:56 PM

From: Andrea PALMIERI <andrea.palmieri@st.com>
To: Wolfgang BETZ <wolfgang.betz@st.com>, Rohit Grover <rohit.grover@arm.com>,
Antonio VILEI <antonio.vilei@st.com>, Mihail Stoyanov
<Mihail.Stoyanov@arm.com>
CC: Nicola CAPOVILLA <nicola.capovilla@st.com>, Silvio Lucio OLIVA
<silvio.oliva@st.com>, "jonathan.austin@arm.com" <jonathan.austin@arm.com>
Content-Class: urn:content-classes:message
Date: Tue, 6 Oct 2015 17:56:34 +0200
Subject: RE: Arduino Compatibility of X-NUCLEO-IDB04A1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Wolfgang Betz 132:51056160fa4a 1 /**
Wolfgang Betz 132:51056160fa4a 2 ******************************************************************************
Wolfgang Betz 132:51056160fa4a 3 * @file stm32_bluenrg_ble.cpp
Wolfgang Betz 132:51056160fa4a 4 * @author CL
Wolfgang Betz 132:51056160fa4a 5 * @version V1.0.0
Wolfgang Betz 132:51056160fa4a 6 * @date 15-June-2015
Wolfgang Betz 132:51056160fa4a 7 * @brief
Wolfgang Betz 132:51056160fa4a 8 ******************************************************************************
Wolfgang Betz 132:51056160fa4a 9 * @attention
Wolfgang Betz 132:51056160fa4a 10 *
Wolfgang Betz 132:51056160fa4a 11 * <h2><center>&copy; COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
Wolfgang Betz 132:51056160fa4a 12 *
Wolfgang Betz 132:51056160fa4a 13 * Redistribution and use in source and binary forms, with or without modification,
Wolfgang Betz 132:51056160fa4a 14 * are permitted provided that the following conditions are met:
Wolfgang Betz 132:51056160fa4a 15 * 1. Redistributions of source code must retain the above copyright notice,
Wolfgang Betz 132:51056160fa4a 16 * this list of conditions and the following disclaimer.
Wolfgang Betz 132:51056160fa4a 17 * 2. Redistributions in binary form must reproduce the above copyright notice,
Wolfgang Betz 132:51056160fa4a 18 * this list of conditions and the following disclaimer in the documentation
Wolfgang Betz 132:51056160fa4a 19 * and/or other materials provided with the distribution.
Wolfgang Betz 132:51056160fa4a 20 * 3. Neither the name of STMicroelectronics nor the names of its contributors
Wolfgang Betz 132:51056160fa4a 21 * may be used to endorse or promote products derived from this software
Wolfgang Betz 132:51056160fa4a 22 * without specific prior written permission.
Wolfgang Betz 132:51056160fa4a 23 *
Wolfgang Betz 132:51056160fa4a 24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
Wolfgang Betz 132:51056160fa4a 25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
Wolfgang Betz 132:51056160fa4a 26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
Wolfgang Betz 132:51056160fa4a 27 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
Wolfgang Betz 132:51056160fa4a 28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
Wolfgang Betz 132:51056160fa4a 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
Wolfgang Betz 132:51056160fa4a 30 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
Wolfgang Betz 132:51056160fa4a 31 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
Wolfgang Betz 132:51056160fa4a 32 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
Wolfgang Betz 132:51056160fa4a 33 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Wolfgang Betz 132:51056160fa4a 34 *
Wolfgang Betz 132:51056160fa4a 35 ******************************************************************************
Wolfgang Betz 132:51056160fa4a 36 */
Wolfgang Betz 132:51056160fa4a 37
Wolfgang Betz 132:51056160fa4a 38 /* Includes ------------------------------------------------------------------*/
Wolfgang Betz 132:51056160fa4a 39 #include "BlueNRGGap.h"
Wolfgang Betz 132:51056160fa4a 40 #include "BlueNRGDevice.h"
Wolfgang Betz 132:51056160fa4a 41 #include "Utils.h"
Wolfgang Betz 132:51056160fa4a 42
Wolfgang Betz 132:51056160fa4a 43 // FIXME: find a better way to get the instance of the BlueNRG device
Wolfgang Betz 132:51056160fa4a 44 extern BlueNRGDevice bluenrgDeviceInstance;
Wolfgang Betz 132:51056160fa4a 45
Wolfgang Betz 132:51056160fa4a 46
Wolfgang Betz 132:51056160fa4a 47 ////////////////////////////////////////
Wolfgang Betz 132:51056160fa4a 48 // Start of C function wrappers
Wolfgang Betz 132:51056160fa4a 49 #ifdef __cplusplus
Wolfgang Betz 132:51056160fa4a 50 extern "C" {
Wolfgang Betz 132:51056160fa4a 51 #endif
Wolfgang Betz 132:51056160fa4a 52
Wolfgang Betz 132:51056160fa4a 53 #include "stm32_bluenrg_ble.h"
Wolfgang Betz 132:51056160fa4a 54 #include "gp_timer.h"
Wolfgang Betz 132:51056160fa4a 55 #include "debug.h"
Wolfgang Betz 132:51056160fa4a 56
Wolfgang Betz 132:51056160fa4a 57
Wolfgang Betz 132:51056160fa4a 58 void BlueNRG_RST(void)
Wolfgang Betz 132:51056160fa4a 59 {
Wolfgang Betz 132:51056160fa4a 60 bluenrgDeviceInstance.reset();
Wolfgang Betz 132:51056160fa4a 61 }
Wolfgang Betz 132:51056160fa4a 62
Wolfgang Betz 132:51056160fa4a 63 uint8_t BlueNRG_DataPresent(void)
Wolfgang Betz 132:51056160fa4a 64 {
Wolfgang Betz 132:51056160fa4a 65 return (bluenrgDeviceInstance.dataPresent());
Wolfgang Betz 132:51056160fa4a 66 }
Wolfgang Betz 132:51056160fa4a 67
Wolfgang Betz 132:51056160fa4a 68
Wolfgang Betz 132:51056160fa4a 69 /**
Wolfgang Betz 132:51056160fa4a 70 * @brief This function is a utility to print the log time
Wolfgang Betz 132:51056160fa4a 71 * in the format HH:MM:SS:MSS (DK GUI time format)
Wolfgang Betz 132:51056160fa4a 72 * @param None
Wolfgang Betz 132:51056160fa4a 73 * @retval None
Wolfgang Betz 132:51056160fa4a 74 */
Wolfgang Betz 132:51056160fa4a 75 void print_csv_time(void){
Wolfgang Betz 132:51056160fa4a 76 #ifdef PRINT_CSV_FORMAT
Wolfgang Betz 132:51056160fa4a 77 uint32_t ms = 0;//ms_counter;
Wolfgang Betz 132:51056160fa4a 78 PRINT_CSV("%02d:%02d:%02d.%03d", ms/(60*60*1000)%24, ms/(60*1000)%60, (ms/1000)%60, ms%1000);
Wolfgang Betz 132:51056160fa4a 79 #endif
Wolfgang Betz 132:51056160fa4a 80 }
Wolfgang Betz 132:51056160fa4a 81
Wolfgang Betz 132:51056160fa4a 82 /**
Wolfgang Betz 132:51056160fa4a 83 * @brief Writes data to a serial interface.
Wolfgang Betz 132:51056160fa4a 84 * @param data1 : 1st buffer
Wolfgang Betz 132:51056160fa4a 85 * @param data2 : 2nd buffer
Wolfgang Betz 132:51056160fa4a 86 * @param n_bytes1: number of bytes in 1st buffer
Wolfgang Betz 132:51056160fa4a 87 * @param n_bytes2: number of bytes in 2nd buffer
Wolfgang Betz 132:51056160fa4a 88 * @retval None
Wolfgang Betz 132:51056160fa4a 89 */
Wolfgang Betz 132:51056160fa4a 90 void Hal_Write_Serial(const void* data1, const void* data2, int32_t n_bytes1,
Wolfgang Betz 132:51056160fa4a 91 int32_t n_bytes2)
Wolfgang Betz 132:51056160fa4a 92 {
Wolfgang Betz 132:51056160fa4a 93 struct timer t;
Wolfgang Betz 132:51056160fa4a 94
Wolfgang Betz 132:51056160fa4a 95 Timer_Set(&t, CLOCK_SECOND/10);
Wolfgang Betz 132:51056160fa4a 96
Wolfgang Betz 132:51056160fa4a 97 #ifdef PRINT_CSV_FORMAT
Wolfgang Betz 132:51056160fa4a 98 print_csv_time();
Wolfgang Betz 132:51056160fa4a 99 for (int i=0; i<n_bytes1; i++) {
Wolfgang Betz 132:51056160fa4a 100 PRINT_CSV(" %02x", ((uint8_t *)data1)[i]);
Wolfgang Betz 132:51056160fa4a 101 }
Wolfgang Betz 132:51056160fa4a 102 for (int i=0; i<n_bytes2; i++) {
Wolfgang Betz 132:51056160fa4a 103 PRINT_CSV(" %02x", ((uint8_t *)data2)[i]);
Wolfgang Betz 132:51056160fa4a 104 }
Wolfgang Betz 132:51056160fa4a 105 PRINT_CSV("\n");
Wolfgang Betz 132:51056160fa4a 106 #endif
Wolfgang Betz 132:51056160fa4a 107
Wolfgang Betz 132:51056160fa4a 108 while(1){
Wolfgang Betz 132:51056160fa4a 109 if(BlueNRG_SPI_Write((uint8_t *)data1,(uint8_t *)data2, n_bytes1, n_bytes2)==0) break;
Wolfgang Betz 132:51056160fa4a 110 if(Timer_Expired(&t)){
Wolfgang Betz 132:51056160fa4a 111 break;
Wolfgang Betz 132:51056160fa4a 112 }
Wolfgang Betz 132:51056160fa4a 113 }
Wolfgang Betz 132:51056160fa4a 114 }
Wolfgang Betz 132:51056160fa4a 115
Wolfgang Betz 132:51056160fa4a 116
Wolfgang Betz 132:51056160fa4a 117 /**
Wolfgang Betz 132:51056160fa4a 118 * @brief Activate internal bootloader using pin.
Wolfgang Betz 132:51056160fa4a 119 * @param None
Wolfgang Betz 132:51056160fa4a 120 * @retval None
Wolfgang Betz 132:51056160fa4a 121 */
Wolfgang Betz 132:51056160fa4a 122 void BlueNRG_HW_Bootloader(void)
Wolfgang Betz 132:51056160fa4a 123 {
Wolfgang Betz 132:51056160fa4a 124 // FIXME: this is not implemented yet
Wolfgang Betz 132:51056160fa4a 125 while (1);
Wolfgang Betz 132:51056160fa4a 126 }
Wolfgang Betz 132:51056160fa4a 127
Wolfgang Betz 132:51056160fa4a 128 /**
Wolfgang Betz 132:51056160fa4a 129 * @brief Reads from BlueNRG SPI buffer and store data into local buffer.
Wolfgang Betz 132:51056160fa4a 130 * @param buffer : Buffer where data from SPI are stored
Wolfgang Betz 132:51056160fa4a 131 * @param buff_size: Buffer size
Wolfgang Betz 132:51056160fa4a 132 * @retval int32_t : Number of read bytes
Wolfgang Betz 132:51056160fa4a 133 */
Wolfgang Betz 132:51056160fa4a 134 int32_t BlueNRG_SPI_Read_All(uint8_t *buffer,
Wolfgang Betz 132:51056160fa4a 135 uint8_t buff_size)
Wolfgang Betz 132:51056160fa4a 136 {
Wolfgang Betz 132:51056160fa4a 137 int32_t ret = bluenrgDeviceInstance.spiRead(buffer, buff_size);
Wolfgang Betz 132:51056160fa4a 138
Wolfgang Betz 132:51056160fa4a 139 return ret;
Wolfgang Betz 132:51056160fa4a 140 }
Wolfgang Betz 132:51056160fa4a 141
Wolfgang Betz 132:51056160fa4a 142 /**
Wolfgang Betz 132:51056160fa4a 143 * @brief Writes data from local buffer to SPI.
Wolfgang Betz 132:51056160fa4a 144 * @param data1 : First data buffer to be written
Wolfgang Betz 132:51056160fa4a 145 * @param data2 : Second data buffer to be written
Wolfgang Betz 132:51056160fa4a 146 * @param Nb_bytes1: Size of first data buffer to be written
Wolfgang Betz 132:51056160fa4a 147 * @param Nb_bytes2: Size of second data buffer to be written
Wolfgang Betz 132:51056160fa4a 148 * @retval Number of read bytes
Wolfgang Betz 132:51056160fa4a 149 */
Wolfgang Betz 132:51056160fa4a 150 int32_t BlueNRG_SPI_Write(uint8_t* data1,
Wolfgang Betz 132:51056160fa4a 151 uint8_t* data2, uint8_t Nb_bytes1, uint8_t Nb_bytes2)
Wolfgang Betz 132:51056160fa4a 152 {
Wolfgang Betz 132:51056160fa4a 153 int32_t ret = bluenrgDeviceInstance.spiWrite(data1, data2, Nb_bytes1, Nb_bytes2);
Wolfgang Betz 132:51056160fa4a 154
Wolfgang Betz 132:51056160fa4a 155 return ret;
Wolfgang Betz 132:51056160fa4a 156 }
Wolfgang Betz 132:51056160fa4a 157
Wolfgang Betz 132:51056160fa4a 158 /**
Wolfgang Betz 132:51056160fa4a 159 * @brief Enable SPI IRQ.
Wolfgang Betz 132:51056160fa4a 160 * @param None
Wolfgang Betz 132:51056160fa4a 161 * @retval None
Wolfgang Betz 132:51056160fa4a 162 */
Wolfgang Betz 132:51056160fa4a 163 void Enable_SPI_IRQ(void)
Wolfgang Betz 132:51056160fa4a 164 {
Wolfgang Betz 132:51056160fa4a 165 bluenrgDeviceInstance.enable_irq();
Wolfgang Betz 132:51056160fa4a 166 }
Wolfgang Betz 132:51056160fa4a 167
Wolfgang Betz 132:51056160fa4a 168 /**
Wolfgang Betz 132:51056160fa4a 169 * @brief Disable SPI IRQ.
Wolfgang Betz 132:51056160fa4a 170 * @param None
Wolfgang Betz 132:51056160fa4a 171 * @retval None
Wolfgang Betz 132:51056160fa4a 172 */
Wolfgang Betz 132:51056160fa4a 173 void Disable_SPI_IRQ(void)
Wolfgang Betz 132:51056160fa4a 174 {
Wolfgang Betz 132:51056160fa4a 175 bluenrgDeviceInstance.disable_irq();
Wolfgang Betz 132:51056160fa4a 176 }
Wolfgang Betz 132:51056160fa4a 177
Wolfgang Betz 132:51056160fa4a 178 /**
Wolfgang Betz 132:51056160fa4a 179 * @brief Clear Pending SPI IRQ.
Wolfgang Betz 132:51056160fa4a 180 * @param None
Wolfgang Betz 132:51056160fa4a 181 * @retval None
Wolfgang Betz 132:51056160fa4a 182 */
Wolfgang Betz 132:51056160fa4a 183 void Clear_SPI_IRQ(void)
Wolfgang Betz 132:51056160fa4a 184 {
Wolfgang Betz 132:51056160fa4a 185 }
Wolfgang Betz 132:51056160fa4a 186
Wolfgang Betz 132:51056160fa4a 187 /**
Wolfgang Betz 132:51056160fa4a 188 * @brief Clear EXTI (External Interrupt) line for SPI IRQ.
Wolfgang Betz 132:51056160fa4a 189 * @param None
Wolfgang Betz 132:51056160fa4a 190 * @retval None
Wolfgang Betz 132:51056160fa4a 191 */
Wolfgang Betz 132:51056160fa4a 192 void Clear_SPI_EXTI_Flag(void)
Wolfgang Betz 132:51056160fa4a 193 {
Wolfgang Betz 132:51056160fa4a 194 }
Wolfgang Betz 132:51056160fa4a 195
Wolfgang Betz 132:51056160fa4a 196
Wolfgang Betz 132:51056160fa4a 197
Wolfgang Betz 132:51056160fa4a 198
Wolfgang Betz 132:51056160fa4a 199 #ifdef __cplusplus
Wolfgang Betz 132:51056160fa4a 200 }
Wolfgang Betz 132:51056160fa4a 201 #endif
Wolfgang Betz 132:51056160fa4a 202 // End of C function wrappers
Wolfgang Betz 132:51056160fa4a 203 ////////////////////////////////////////
Wolfgang Betz 132:51056160fa4a 204
Wolfgang Betz 132:51056160fa4a 205 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/