DISCO_L475VG_IOT01 wifi library with TCP-SSL support

Dependents:   DISCO_L475VG_IOT01-Telegram-BOT

Committer:
dvddnr
Date:
Fri Jan 26 14:58:24 2018 +0000
Revision:
1:0ce37d60fe92
Parent:
0:991714b0e830
reworked tcp ssl wrapper

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dvddnr 0:991714b0e830 1 /**
dvddnr 0:991714b0e830 2 ******************************************************************************
dvddnr 0:991714b0e830 3 * @file es_wifi_io.c
dvddnr 0:991714b0e830 4 * @author MCD Application Team
dvddnr 0:991714b0e830 5 * @version V1.1.0
dvddnr 0:991714b0e830 6 * @date 04-September-2017
dvddnr 0:991714b0e830 7 * @brief This file implments the IO operations to deal with the es-wifi
dvddnr 0:991714b0e830 8 * module. It mainly Inits and Deinits the SPI interface. Send and
dvddnr 0:991714b0e830 9 * receive data over it.
dvddnr 0:991714b0e830 10 ******************************************************************************
dvddnr 0:991714b0e830 11 * @attention
dvddnr 0:991714b0e830 12 *
dvddnr 0:991714b0e830 13 * <h2><center>&copy; Copyright (c) 2017 STMicroelectronics International N.V.
dvddnr 0:991714b0e830 14 * All rights reserved.</center></h2>
dvddnr 0:991714b0e830 15 *
dvddnr 0:991714b0e830 16 * Redistribution and use in source and binary forms, with or without
dvddnr 0:991714b0e830 17 * modification, are permitted, provided that the following conditions are met:
dvddnr 0:991714b0e830 18 *
dvddnr 0:991714b0e830 19 * 1. Redistribution of source code must retain the above copyright notice,
dvddnr 0:991714b0e830 20 * this list of conditions and the following disclaimer.
dvddnr 0:991714b0e830 21 * 2. Redistributions in binary form must reproduce the above copyright notice,
dvddnr 0:991714b0e830 22 * this list of conditions and the following disclaimer in the documentation
dvddnr 0:991714b0e830 23 * and/or other materials provided with the distribution.
dvddnr 0:991714b0e830 24 * 3. Neither the name of STMicroelectronics nor the names of other
dvddnr 0:991714b0e830 25 * contributors to this software may be used to endorse or promote products
dvddnr 0:991714b0e830 26 * derived from this software without specific written permission.
dvddnr 0:991714b0e830 27 * 4. This software, including modifications and/or derivative works of this
dvddnr 0:991714b0e830 28 * software, must execute solely and exclusively on microcontroller or
dvddnr 0:991714b0e830 29 * microprocessor devices manufactured by or for STMicroelectronics.
dvddnr 0:991714b0e830 30 * 5. Redistribution and use of this software other than as permitted under
dvddnr 0:991714b0e830 31 * this license is void and will automatically terminate your rights under
dvddnr 0:991714b0e830 32 * this license.
dvddnr 0:991714b0e830 33 *
dvddnr 0:991714b0e830 34 * THIS SOFTWARE IS PROVIDED BY STMICROELECTRONICS AND CONTRIBUTORS "AS IS"
dvddnr 0:991714b0e830 35 * AND ANY EXPRESS, IMPLIED OR STATUTORY WARRANTIES, INCLUDING, BUT NOT
dvddnr 0:991714b0e830 36 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
dvddnr 0:991714b0e830 37 * PARTICULAR PURPOSE AND NON-INFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY
dvddnr 0:991714b0e830 38 * RIGHTS ARE DISCLAIMED TO THE FULLEST EXTENT PERMITTED BY LAW. IN NO EVENT
dvddnr 0:991714b0e830 39 * SHALL STMICROELECTRONICS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
dvddnr 0:991714b0e830 40 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
dvddnr 0:991714b0e830 41 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
dvddnr 0:991714b0e830 42 * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
dvddnr 0:991714b0e830 43 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
dvddnr 0:991714b0e830 44 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
dvddnr 0:991714b0e830 45 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
dvddnr 0:991714b0e830 46 *
dvddnr 0:991714b0e830 47 ******************************************************************************
dvddnr 0:991714b0e830 48 */
dvddnr 0:991714b0e830 49
dvddnr 0:991714b0e830 50 /* Includes ------------------------------------------------------------------*/
dvddnr 0:991714b0e830 51 #include "es_wifi_io.h"
dvddnr 0:991714b0e830 52 #include <string.h>
dvddnr 0:991714b0e830 53
dvddnr 0:991714b0e830 54 /* Private define ------------------------------------------------------------*/
dvddnr 0:991714b0e830 55 #define MIN(a, b) ((a) < (b) ? (a) : (b))
dvddnr 0:991714b0e830 56 /* Private typedef -----------------------------------------------------------*/
dvddnr 0:991714b0e830 57 /* Private macro -------------------------------------------------------------*/
dvddnr 0:991714b0e830 58 /* Private variables ---------------------------------------------------------*/
dvddnr 0:991714b0e830 59 SPI_HandleTypeDef hspi;
dvddnr 0:991714b0e830 60
dvddnr 0:991714b0e830 61 /* Private function prototypes -----------------------------------------------*/
dvddnr 0:991714b0e830 62
dvddnr 0:991714b0e830 63 /* Private functions ---------------------------------------------------------*/
dvddnr 0:991714b0e830 64 /*******************************************************************************
dvddnr 0:991714b0e830 65 COM Driver Interface (SPI)
dvddnr 0:991714b0e830 66 *******************************************************************************/
dvddnr 0:991714b0e830 67 /**
dvddnr 0:991714b0e830 68 * @brief Initialize SPI MSP
dvddnr 0:991714b0e830 69 * @param hspi: SPI handle
dvddnr 0:991714b0e830 70 * @retval None
dvddnr 0:991714b0e830 71 */
dvddnr 0:991714b0e830 72 void SPI_WIFI_MspInit(SPI_HandleTypeDef* hspi)
dvddnr 0:991714b0e830 73 {
dvddnr 0:991714b0e830 74
dvddnr 0:991714b0e830 75 GPIO_InitTypeDef GPIO_Init;
dvddnr 0:991714b0e830 76
dvddnr 0:991714b0e830 77 __HAL_RCC_SPI3_CLK_ENABLE();
dvddnr 0:991714b0e830 78
dvddnr 0:991714b0e830 79 __HAL_RCC_GPIOB_CLK_ENABLE();
dvddnr 0:991714b0e830 80 __HAL_RCC_GPIOC_CLK_ENABLE();
dvddnr 0:991714b0e830 81 __HAL_RCC_GPIOE_CLK_ENABLE();
dvddnr 0:991714b0e830 82
dvddnr 0:991714b0e830 83 /* configure Wake up pin */
dvddnr 0:991714b0e830 84 HAL_GPIO_WritePin(GPIOB,GPIO_PIN_13, GPIO_PIN_RESET );
dvddnr 0:991714b0e830 85 GPIO_Init.Pin = GPIO_PIN_13;
dvddnr 0:991714b0e830 86 GPIO_Init.Mode = GPIO_MODE_OUTPUT_PP;
dvddnr 0:991714b0e830 87 GPIO_Init.Pull = GPIO_NOPULL;
dvddnr 0:991714b0e830 88 GPIO_Init.Speed = GPIO_SPEED_FREQ_LOW;
dvddnr 0:991714b0e830 89 HAL_GPIO_Init(GPIOB, &GPIO_Init );
dvddnr 0:991714b0e830 90
dvddnr 0:991714b0e830 91 /* configure Data ready pin */
dvddnr 0:991714b0e830 92 GPIO_Init.Pin = GPIO_PIN_1;
dvddnr 0:991714b0e830 93 GPIO_Init.Mode = GPIO_MODE_IT_RISING;
dvddnr 0:991714b0e830 94 GPIO_Init.Pull = GPIO_NOPULL;
dvddnr 0:991714b0e830 95 GPIO_Init.Speed = GPIO_SPEED_FREQ_LOW;
dvddnr 0:991714b0e830 96 HAL_GPIO_Init(GPIOE, &GPIO_Init );
dvddnr 0:991714b0e830 97
dvddnr 0:991714b0e830 98 /* configure Reset pin */
dvddnr 0:991714b0e830 99 GPIO_Init.Pin = GPIO_PIN_8;
dvddnr 0:991714b0e830 100 GPIO_Init.Mode = GPIO_MODE_OUTPUT_PP;
dvddnr 0:991714b0e830 101 GPIO_Init.Pull = GPIO_NOPULL;
dvddnr 0:991714b0e830 102 GPIO_Init.Speed = GPIO_SPEED_FREQ_LOW;
dvddnr 0:991714b0e830 103 GPIO_Init.Alternate = 0;
dvddnr 0:991714b0e830 104 HAL_GPIO_Init(GPIOE, &GPIO_Init );
dvddnr 0:991714b0e830 105
dvddnr 0:991714b0e830 106 /* configure SPI NSS pin pin */
dvddnr 0:991714b0e830 107 HAL_GPIO_WritePin( GPIOE , GPIO_PIN_0, GPIO_PIN_SET );
dvddnr 0:991714b0e830 108 GPIO_Init.Pin = GPIO_PIN_0;
dvddnr 0:991714b0e830 109 GPIO_Init.Mode = GPIO_MODE_OUTPUT_PP;
dvddnr 0:991714b0e830 110 GPIO_Init.Pull = GPIO_NOPULL;
dvddnr 0:991714b0e830 111 GPIO_Init.Speed = GPIO_SPEED_FREQ_MEDIUM;
dvddnr 0:991714b0e830 112 HAL_GPIO_Init( GPIOE, &GPIO_Init );
dvddnr 0:991714b0e830 113
dvddnr 0:991714b0e830 114 /* configure SPI CLK pin */
dvddnr 0:991714b0e830 115 GPIO_Init.Pin = GPIO_PIN_10;
dvddnr 0:991714b0e830 116 GPIO_Init.Mode = GPIO_MODE_AF_PP;
dvddnr 0:991714b0e830 117 GPIO_Init.Pull = GPIO_NOPULL;
dvddnr 0:991714b0e830 118 GPIO_Init.Speed = GPIO_SPEED_FREQ_MEDIUM;
dvddnr 0:991714b0e830 119 GPIO_Init.Alternate = GPIO_AF6_SPI3;
dvddnr 0:991714b0e830 120 HAL_GPIO_Init(GPIOC, &GPIO_Init );
dvddnr 0:991714b0e830 121
dvddnr 0:991714b0e830 122 /* configure SPI MOSI pin */
dvddnr 0:991714b0e830 123 GPIO_Init.Pin = GPIO_PIN_12;
dvddnr 0:991714b0e830 124 GPIO_Init.Mode = GPIO_MODE_AF_PP;
dvddnr 0:991714b0e830 125 GPIO_Init.Pull = GPIO_NOPULL;
dvddnr 0:991714b0e830 126 GPIO_Init.Speed = GPIO_SPEED_FREQ_MEDIUM;
dvddnr 0:991714b0e830 127 GPIO_Init.Alternate = GPIO_AF6_SPI3;
dvddnr 0:991714b0e830 128 HAL_GPIO_Init( GPIOC, &GPIO_Init );
dvddnr 0:991714b0e830 129
dvddnr 0:991714b0e830 130 /* configure SPI MISO pin */
dvddnr 0:991714b0e830 131 GPIO_Init.Pin = GPIO_PIN_11;
dvddnr 0:991714b0e830 132 GPIO_Init.Mode = GPIO_MODE_AF_PP;
dvddnr 0:991714b0e830 133 GPIO_Init.Pull = GPIO_PULLUP;
dvddnr 0:991714b0e830 134 GPIO_Init.Speed = GPIO_SPEED_FREQ_MEDIUM;
dvddnr 0:991714b0e830 135 GPIO_Init.Alternate = GPIO_AF6_SPI3;
dvddnr 0:991714b0e830 136 HAL_GPIO_Init(GPIOC, &GPIO_Init );
dvddnr 0:991714b0e830 137 }
dvddnr 0:991714b0e830 138
dvddnr 0:991714b0e830 139 /**
dvddnr 0:991714b0e830 140 * @brief Initialize the SPI3
dvddnr 0:991714b0e830 141 * @param None
dvddnr 0:991714b0e830 142 * @retval None
dvddnr 0:991714b0e830 143 */
dvddnr 0:991714b0e830 144 int8_t SPI_WIFI_Init(void)
dvddnr 0:991714b0e830 145 {
dvddnr 0:991714b0e830 146 uint32_t tickstart = HAL_GetTick();
dvddnr 0:991714b0e830 147 uint8_t Prompt[6];
dvddnr 0:991714b0e830 148 uint8_t count = 0;
dvddnr 0:991714b0e830 149 HAL_StatusTypeDef Status;
dvddnr 0:991714b0e830 150
dvddnr 0:991714b0e830 151 hspi.Instance = SPI3;
dvddnr 0:991714b0e830 152 SPI_WIFI_MspInit(&hspi);
dvddnr 0:991714b0e830 153
dvddnr 0:991714b0e830 154 hspi.Init.Mode = SPI_MODE_MASTER;
dvddnr 0:991714b0e830 155 hspi.Init.Direction = SPI_DIRECTION_2LINES;
dvddnr 0:991714b0e830 156 hspi.Init.DataSize = SPI_DATASIZE_16BIT;
dvddnr 0:991714b0e830 157 hspi.Init.CLKPolarity = SPI_POLARITY_LOW;
dvddnr 0:991714b0e830 158 hspi.Init.CLKPhase = SPI_PHASE_1EDGE;
dvddnr 0:991714b0e830 159 hspi.Init.NSS = SPI_NSS_SOFT;
dvddnr 0:991714b0e830 160 hspi.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_8; /* 80/8= 10MHz (Inventek WIFI module supportes up to 20MHz)*/
dvddnr 0:991714b0e830 161 hspi.Init.FirstBit = SPI_FIRSTBIT_MSB;
dvddnr 0:991714b0e830 162 hspi.Init.TIMode = SPI_TIMODE_DISABLE;
dvddnr 0:991714b0e830 163 hspi.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
dvddnr 0:991714b0e830 164 hspi.Init.CRCPolynomial = 0;
dvddnr 0:991714b0e830 165
dvddnr 0:991714b0e830 166 if(HAL_SPI_Init( &hspi ) != HAL_OK)
dvddnr 0:991714b0e830 167 {
dvddnr 0:991714b0e830 168 return -1;
dvddnr 0:991714b0e830 169 }
dvddnr 0:991714b0e830 170
dvddnr 0:991714b0e830 171 WIFI_RESET_MODULE();
dvddnr 0:991714b0e830 172
dvddnr 0:991714b0e830 173 WIFI_ENABLE_NSS();
dvddnr 0:991714b0e830 174
dvddnr 0:991714b0e830 175 while (WIFI_IS_CMDDATA_READY())
dvddnr 0:991714b0e830 176 {
dvddnr 0:991714b0e830 177 Status = HAL_SPI_Receive(&hspi , &Prompt[count], 1, 0xFFFF);
dvddnr 0:991714b0e830 178 count += 2;
dvddnr 0:991714b0e830 179 if(((HAL_GetTick() - tickstart ) > 0xFFFF) || (Status != HAL_OK))
dvddnr 0:991714b0e830 180 {
dvddnr 0:991714b0e830 181 WIFI_DISABLE_NSS();
dvddnr 0:991714b0e830 182 return -1;
dvddnr 0:991714b0e830 183 }
dvddnr 0:991714b0e830 184 }
dvddnr 0:991714b0e830 185
dvddnr 0:991714b0e830 186 if((Prompt[0] != 0x15) ||(Prompt[1] != 0x15) ||(Prompt[2] != '\r')||
dvddnr 0:991714b0e830 187 (Prompt[3] != '\n') ||(Prompt[4] != '>') ||(Prompt[5] != ' '))
dvddnr 0:991714b0e830 188 {
dvddnr 0:991714b0e830 189 WIFI_DISABLE_NSS();
dvddnr 0:991714b0e830 190 return -1;
dvddnr 0:991714b0e830 191 }
dvddnr 0:991714b0e830 192
dvddnr 0:991714b0e830 193 WIFI_DISABLE_NSS();
dvddnr 0:991714b0e830 194 return 0;
dvddnr 0:991714b0e830 195 }
dvddnr 0:991714b0e830 196
dvddnr 0:991714b0e830 197 /**
dvddnr 0:991714b0e830 198 * @brief DeInitialize the SPI
dvddnr 0:991714b0e830 199 * @param None
dvddnr 0:991714b0e830 200 * @retval None
dvddnr 0:991714b0e830 201 */
dvddnr 0:991714b0e830 202 int8_t SPI_WIFI_DeInit(void)
dvddnr 0:991714b0e830 203 {
dvddnr 0:991714b0e830 204 HAL_SPI_DeInit( &hspi );
dvddnr 0:991714b0e830 205 return 0;
dvddnr 0:991714b0e830 206 }
dvddnr 0:991714b0e830 207
dvddnr 0:991714b0e830 208 /**
dvddnr 0:991714b0e830 209 * @brief Receive wifi Data from SPI
dvddnr 0:991714b0e830 210 * @param pdata : pointer to data
dvddnr 0:991714b0e830 211 * @param len : Data length
dvddnr 0:991714b0e830 212 * @param timeout : send timeout in mS
dvddnr 0:991714b0e830 213 * @retval Length of received data (payload)
dvddnr 0:991714b0e830 214 */
dvddnr 0:991714b0e830 215 int16_t SPI_WIFI_ReceiveData(uint8_t *pData, uint16_t len, uint32_t timeout)
dvddnr 0:991714b0e830 216 {
dvddnr 0:991714b0e830 217 uint32_t tickstart = HAL_GetTick();
dvddnr 0:991714b0e830 218 int16_t length = 0;
dvddnr 0:991714b0e830 219 uint8_t tmp[2];
dvddnr 0:991714b0e830 220
dvddnr 0:991714b0e830 221 HAL_SPIEx_FlushRxFifo(&hspi);
dvddnr 0:991714b0e830 222
dvddnr 0:991714b0e830 223
dvddnr 0:991714b0e830 224 WIFI_DISABLE_NSS();
dvddnr 0:991714b0e830 225
dvddnr 0:991714b0e830 226 while (!WIFI_IS_CMDDATA_READY())
dvddnr 0:991714b0e830 227 {
dvddnr 0:991714b0e830 228 if((HAL_GetTick() - tickstart ) > timeout)
dvddnr 0:991714b0e830 229 {
dvddnr 0:991714b0e830 230 return -1;
dvddnr 0:991714b0e830 231 }
dvddnr 0:991714b0e830 232 }
dvddnr 0:991714b0e830 233
dvddnr 0:991714b0e830 234 WIFI_ENABLE_NSS();
dvddnr 0:991714b0e830 235
dvddnr 0:991714b0e830 236 while (WIFI_IS_CMDDATA_READY())
dvddnr 0:991714b0e830 237 {
dvddnr 0:991714b0e830 238 if((length < len) || (!len))
dvddnr 0:991714b0e830 239 {
dvddnr 0:991714b0e830 240 HAL_SPI_Receive(&hspi, tmp, 1, timeout) ;
dvddnr 0:991714b0e830 241 /* let some time to hardware to change CMDDATA signal */
dvddnr 0:991714b0e830 242 if(tmp[1] == 0x15)
dvddnr 0:991714b0e830 243 {
dvddnr 0:991714b0e830 244 SPI_WIFI_Delay(1);
dvddnr 0:991714b0e830 245 }
dvddnr 0:991714b0e830 246 /*This the last data */
dvddnr 0:991714b0e830 247 if(!WIFI_IS_CMDDATA_READY())
dvddnr 0:991714b0e830 248 {
dvddnr 0:991714b0e830 249 if(tmp[1] == 0x15)
dvddnr 0:991714b0e830 250 {
dvddnr 0:991714b0e830 251 if ((tmp[0] != 0x15))
dvddnr 0:991714b0e830 252 {
dvddnr 0:991714b0e830 253 pData[0] = tmp[0];
dvddnr 0:991714b0e830 254 length++;
dvddnr 0:991714b0e830 255 }
dvddnr 0:991714b0e830 256 break;
dvddnr 0:991714b0e830 257 }
dvddnr 0:991714b0e830 258 }
dvddnr 0:991714b0e830 259
dvddnr 0:991714b0e830 260 pData[0] = tmp[0];
dvddnr 0:991714b0e830 261 pData[1] = tmp[1];
dvddnr 0:991714b0e830 262 length += 2;
dvddnr 0:991714b0e830 263 pData += 2;
dvddnr 0:991714b0e830 264
dvddnr 0:991714b0e830 265 if((HAL_GetTick() - tickstart ) > timeout)
dvddnr 0:991714b0e830 266 {
dvddnr 0:991714b0e830 267 WIFI_DISABLE_NSS();
dvddnr 0:991714b0e830 268 return -1;
dvddnr 0:991714b0e830 269 }
dvddnr 0:991714b0e830 270 }
dvddnr 0:991714b0e830 271 else
dvddnr 0:991714b0e830 272 {
dvddnr 0:991714b0e830 273 break;
dvddnr 0:991714b0e830 274 }
dvddnr 0:991714b0e830 275 }
dvddnr 0:991714b0e830 276
dvddnr 0:991714b0e830 277 WIFI_DISABLE_NSS();
dvddnr 0:991714b0e830 278 return length;
dvddnr 0:991714b0e830 279 }
dvddnr 0:991714b0e830 280 /**
dvddnr 0:991714b0e830 281 * @brief Send wifi Data thru SPI
dvddnr 0:991714b0e830 282 * @param pdata : pointer to data
dvddnr 0:991714b0e830 283 * @param len : Data length
dvddnr 0:991714b0e830 284 * @param timeout : send timeout in mS
dvddnr 0:991714b0e830 285 * @retval Length of sent data
dvddnr 0:991714b0e830 286 */
dvddnr 0:991714b0e830 287 int16_t SPI_WIFI_SendData( uint8_t *pdata, uint16_t len, uint32_t timeout)
dvddnr 0:991714b0e830 288 {
dvddnr 0:991714b0e830 289 uint32_t tickstart = HAL_GetTick();
dvddnr 0:991714b0e830 290 uint8_t Padding[2];
dvddnr 0:991714b0e830 291
dvddnr 0:991714b0e830 292 while (!WIFI_IS_CMDDATA_READY())
dvddnr 0:991714b0e830 293 {
dvddnr 0:991714b0e830 294 if((HAL_GetTick() - tickstart ) > timeout)
dvddnr 0:991714b0e830 295 {
dvddnr 0:991714b0e830 296 WIFI_DISABLE_NSS();
dvddnr 0:991714b0e830 297 return -1;
dvddnr 0:991714b0e830 298 }
dvddnr 0:991714b0e830 299 }
dvddnr 0:991714b0e830 300
dvddnr 0:991714b0e830 301 WIFI_ENABLE_NSS();
dvddnr 0:991714b0e830 302
dvddnr 0:991714b0e830 303 if (len > 1)
dvddnr 0:991714b0e830 304 {
dvddnr 0:991714b0e830 305 if( HAL_SPI_Transmit(&hspi, (uint8_t *)pdata , len/2, timeout) != HAL_OK)
dvddnr 0:991714b0e830 306 {
dvddnr 0:991714b0e830 307 WIFI_DISABLE_NSS();
dvddnr 0:991714b0e830 308 return -1;
dvddnr 0:991714b0e830 309 }
dvddnr 0:991714b0e830 310 }
dvddnr 0:991714b0e830 311
dvddnr 0:991714b0e830 312 if ( len & 1)
dvddnr 0:991714b0e830 313 {
dvddnr 0:991714b0e830 314 Padding[0] = pdata[len-1];
dvddnr 0:991714b0e830 315 Padding[1] = '\n';
dvddnr 0:991714b0e830 316
dvddnr 0:991714b0e830 317 if( HAL_SPI_Transmit(&hspi, Padding, 1, timeout) != HAL_OK)
dvddnr 0:991714b0e830 318 {
dvddnr 0:991714b0e830 319 WIFI_DISABLE_NSS();
dvddnr 0:991714b0e830 320 return -1;
dvddnr 0:991714b0e830 321 }
dvddnr 0:991714b0e830 322 }
dvddnr 0:991714b0e830 323
dvddnr 0:991714b0e830 324 return len;
dvddnr 0:991714b0e830 325 }
dvddnr 0:991714b0e830 326
dvddnr 0:991714b0e830 327 /**
dvddnr 0:991714b0e830 328 * @brief Delay
dvddnr 0:991714b0e830 329 * @param Delay in ms
dvddnr 0:991714b0e830 330 * @retval None
dvddnr 0:991714b0e830 331 */
dvddnr 0:991714b0e830 332 void SPI_WIFI_Delay(uint32_t Delay)
dvddnr 0:991714b0e830 333 {
dvddnr 0:991714b0e830 334 HAL_Delay(Delay);
dvddnr 0:991714b0e830 335 }
dvddnr 0:991714b0e830 336 /**
dvddnr 0:991714b0e830 337 * @}
dvddnr 0:991714b0e830 338 */
dvddnr 0:991714b0e830 339
dvddnr 0:991714b0e830 340 /**
dvddnr 0:991714b0e830 341 * @}
dvddnr 0:991714b0e830 342 */
dvddnr 0:991714b0e830 343
dvddnr 0:991714b0e830 344 /**
dvddnr 0:991714b0e830 345 * @}
dvddnr 0:991714b0e830 346 */
dvddnr 0:991714b0e830 347
dvddnr 0:991714b0e830 348 /**
dvddnr 0:991714b0e830 349 * @}
dvddnr 0:991714b0e830 350 */
dvddnr 0:991714b0e830 351 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/