test

Files at this revision

API Documentation at this revision

Comitter:
mylene
Date:
Thu Oct 15 19:38:32 2020 +0000
Parent:
13:85dbcff443aa
Commit message:
l;

Changed in this revision

Drivers/BSP/Components/Common/accelero.h Show diff for this revision Revisions of this file
Drivers/BSP/Components/Common/audio.h Show diff for this revision Revisions of this file
Drivers/BSP/Components/Common/camera.h Show diff for this revision Revisions of this file
Drivers/BSP/Components/Common/epd.h Show diff for this revision Revisions of this file
Drivers/BSP/Components/Common/gyro.h Show diff for this revision Revisions of this file
Drivers/BSP/Components/Common/idd.h Show diff for this revision Revisions of this file
Drivers/BSP/Components/Common/io.h Show diff for this revision Revisions of this file
Drivers/BSP/Components/Common/lcd.h Show diff for this revision Revisions of this file
Drivers/BSP/Components/Common/magneto.h Show diff for this revision Revisions of this file
Drivers/BSP/Components/Common/ts.h Show diff for this revision Revisions of this file
Drivers/BSP/Components/Common/tsensor.h Show diff for this revision Revisions of this file
Drivers/BSP/Components/ft5336/ft5336.c Show diff for this revision Revisions of this file
Drivers/BSP/Components/ft5336/ft5336.h Show diff for this revision Revisions of this file
Drivers/BSP/Components/n25q128a/n25q128a.h Show diff for this revision Revisions of this file
Drivers/BSP/Components/ov9655/ov9655.c Show diff for this revision Revisions of this file
Drivers/BSP/Components/ov9655/ov9655.h Show diff for this revision Revisions of this file
Drivers/BSP/Components/rk043fn48h/rk043fn48h.h Show diff for this revision Revisions of this file
Drivers/BSP/Components/wm8994/wm8994.c Show diff for this revision Revisions of this file
Drivers/BSP/Components/wm8994/wm8994.h Show diff for this revision Revisions of this file
Drivers/BSP/STM32746G-Discovery/stm32746g_discovery.c Show diff for this revision Revisions of this file
Drivers/BSP/STM32746G-Discovery/stm32746g_discovery.h Show diff for this revision Revisions of this file
Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_audio.c Show diff for this revision Revisions of this file
Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_audio.h Show diff for this revision Revisions of this file
Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_camera.c Show diff for this revision Revisions of this file
Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_camera.h Show diff for this revision Revisions of this file
Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_eeprom.c Show diff for this revision Revisions of this file
Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_eeprom.h Show diff for this revision Revisions of this file
Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_lcd.c Show diff for this revision Revisions of this file
Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_lcd.h Show diff for this revision Revisions of this file
Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_qspi.c Show diff for this revision Revisions of this file
Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_qspi.h Show diff for this revision Revisions of this file
Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_sd.c Show diff for this revision Revisions of this file
Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_sd.h Show diff for this revision Revisions of this file
Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_sdram.c Show diff for this revision Revisions of this file
Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_sdram.h Show diff for this revision Revisions of this file
Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_ts.c Show diff for this revision Revisions of this file
Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_ts.h Show diff for this revision Revisions of this file
diff -r 85dbcff443aa -r 1a18e061d0ec Drivers/BSP/Components/Common/accelero.h
--- a/Drivers/BSP/Components/Common/accelero.h	Wed Nov 27 08:29:42 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,143 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    accelero.h
-  * @author  MCD Application Team
-  * @version V4.0.1
-  * @date    21-July-2015
-  * @brief   This header file contains the functions prototypes for the Accelerometer driver.
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT(c) 2015 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.
-  *
-  ******************************************************************************
-  */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __ACCELERO_H
-#define __ACCELERO_H
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include <stdint.h>
-
-/** @addtogroup BSP
-  * @{
-  */
-
-/** @addtogroup Components
-  * @{
-  */
-    
-/** @addtogroup ACCELERO
-  * @{
-  */
-
-/** @defgroup ACCELERO_Exported_Types
-  * @{
-  */ 
-
-/** @defgroup ACCELERO_Driver_structure  Accelerometer Driver structure
-  * @{
-  */
-typedef struct
-{  
-  void      (*Init)(uint16_t);
-  void      (*DeInit)(void); 
-  uint8_t   (*ReadID)(void);
-  void      (*Reset)(void);
-  void      (*LowPower)(void);
-  void      (*ConfigIT)(void);
-  void      (*EnableIT)(uint8_t);
-  void      (*DisableIT)(uint8_t);
-  uint8_t   (*ITStatus)(uint16_t);
-  void      (*ClearIT)(void);
-  void      (*FilterConfig)(uint8_t);
-  void      (*FilterCmd)(uint8_t);
-  void      (*GetXYZ)(int16_t *);
-}ACCELERO_DrvTypeDef;
-/**
-  * @}
-  */
-
-/** @defgroup ACCELERO_Configuration_structure  Accelerometer Configuration structure
-  * @{
-  */
-
-/* ACCELERO struct */
-typedef struct
-{
-  uint8_t Power_Mode;                         /* Power-down/Normal Mode */
-  uint8_t AccOutput_DataRate;                 /* OUT data rate */
-  uint8_t Axes_Enable;                        /* Axes enable */
-  uint8_t High_Resolution;                    /* High Resolution enabling/disabling */
-  uint8_t BlockData_Update;                   /* Block Data Update */
-  uint8_t Endianness;                         /* Endian Data selection */
-  uint8_t AccFull_Scale;                      /* Full Scale selection */
-  uint8_t Communication_Mode;
-}ACCELERO_InitTypeDef;
-
-/* ACCELERO High Pass Filter struct */
-typedef struct
-{
-  uint8_t HighPassFilter_Mode_Selection;      /* Internal filter mode */
-  uint8_t HighPassFilter_CutOff_Frequency;    /* High pass filter cut-off frequency */
-  uint8_t HighPassFilter_AOI1;                /* HPF_enabling/disabling for AOI function on interrupt 1 */
-  uint8_t HighPassFilter_AOI2;                /* HPF_enabling/disabling for AOI function on interrupt 2 */
-  uint8_t HighPassFilter_Data_Sel;
-  uint8_t HighPassFilter_Stat;
-}ACCELERO_FilterConfigTypeDef;
-
-/**
-  * @}
-  */
-
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __ACCELERO_H */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r 85dbcff443aa -r 1a18e061d0ec Drivers/BSP/Components/Common/audio.h
--- a/Drivers/BSP/Components/Common/audio.h	Wed Nov 27 08:29:42 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,122 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    audio.h
-  * @author  MCD Application Team
-  * @version V4.0.1
-  * @date    21-July-2015
-  * @brief   This header file contains the common defines and functions prototypes
-  *          for the Audio driver.  
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT(c) 2015 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.
-  *
-  ******************************************************************************
-  */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __AUDIO_H
-#define __AUDIO_H
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include <stdint.h>
-
-/** @addtogroup BSP
-  * @{
-  */
-
-/** @addtogroup Components
-  * @{
-  */
-    
-/** @addtogroup AUDIO
-  * @{
-  */
-
-/** @defgroup AUDIO_Exported_Constants
-  * @{
-  */
-
-/* Codec audio Standards */
-#define CODEC_STANDARD                0x04
-#define I2S_STANDARD                  I2S_STANDARD_PHILIPS
-
-/**
-  * @}
-  */
-
-/** @defgroup AUDIO_Exported_Types
-  * @{
-  */
-
-/** @defgroup AUDIO_Driver_structure  Audio Driver structure
-  * @{
-  */
-typedef struct
-{
-  uint32_t  (*Init)(uint16_t, uint16_t, uint8_t, uint32_t);
-  void      (*DeInit)(void);
-  uint32_t  (*ReadID)(uint16_t);
-  uint32_t  (*Play)(uint16_t, uint16_t*, uint16_t);
-  uint32_t  (*Pause)(uint16_t);
-  uint32_t  (*Resume)(uint16_t);
-  uint32_t  (*Stop)(uint16_t, uint32_t);
-  uint32_t  (*SetFrequency)(uint16_t, uint32_t);
-  uint32_t  (*SetVolume)(uint16_t, uint8_t);
-  uint32_t  (*SetMute)(uint16_t, uint32_t);
-  uint32_t  (*SetOutputMode)(uint16_t, uint8_t);
-  uint32_t  (*Reset)(uint16_t);
-}AUDIO_DrvTypeDef;
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __AUDIO_H */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r 85dbcff443aa -r 1a18e061d0ec Drivers/BSP/Components/Common/camera.h
--- a/Drivers/BSP/Components/Common/camera.h	Wed Nov 27 08:29:42 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,141 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    camera.h
-  * @author  MCD Application Team
-  * @version V4.0.1
-  * @date    21-July-2015
-  * @brief   This header file contains the common defines and functions prototypes
-  *          for the camera driver.   
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT(c) 2015 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.
-  *
-  ******************************************************************************
-  */ 
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __CAMERA_H
-#define __CAMERA_H
-
-#ifdef __cplusplus
- extern "C" {
-#endif 
-
-/* Includes ------------------------------------------------------------------*/
-#include <stdint.h>
-
-/** @addtogroup BSP
-  * @{
-  */
-
-/** @addtogroup Components
-  * @{
-  */
-    
-/** @addtogroup CAMERA
-  * @{
-  */
-
-
-/** @defgroup CAMERA_Exported_Types
-  * @{
-  */ 
-
-/** @defgroup CAMERA_Driver_structure  Camera Driver structure
-  * @{
-  */
-typedef struct
-{
-  void     (*Init)(uint16_t, uint32_t);
-  uint16_t (*ReadID)(uint16_t);  
-  void     (*Config)(uint16_t, uint32_t, uint32_t, uint32_t);
-}CAMERA_DrvTypeDef;
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-/** @defgroup CAMERA_Exported_Constants
-  * @{
-  */
-#define CAMERA_R160x120                 0x00   /* QQVGA Resolution                     */
-#define CAMERA_R320x240                 0x01   /* QVGA Resolution                      */
-#define CAMERA_R480x272                 0x02   /* 480x272 Resolution                   */
-#define CAMERA_R640x480                 0x03   /* VGA Resolution                       */  
-
-#define CAMERA_CONTRAST_BRIGHTNESS      0x00   /* Camera contrast brightness features  */
-#define CAMERA_BLACK_WHITE              0x01   /* Camera black white feature           */
-#define CAMERA_COLOR_EFFECT             0x03   /* Camera color effect feature          */
-
-#define CAMERA_BRIGHTNESS_LEVEL0        0x00   /* Brightness level -2         */
-#define CAMERA_BRIGHTNESS_LEVEL1        0x01   /* Brightness level -1         */
-#define CAMERA_BRIGHTNESS_LEVEL2        0x02   /* Brightness level 0          */
-#define CAMERA_BRIGHTNESS_LEVEL3        0x03   /* Brightness level +1         */
-#define CAMERA_BRIGHTNESS_LEVEL4        0x04   /* Brightness level +2         */
-
-#define CAMERA_CONTRAST_LEVEL0          0x05   /* Contrast level -2           */
-#define CAMERA_CONTRAST_LEVEL1          0x06   /* Contrast level -1           */
-#define CAMERA_CONTRAST_LEVEL2          0x07   /* Contrast level  0           */
-#define CAMERA_CONTRAST_LEVEL3          0x08   /* Contrast level +1           */
-#define CAMERA_CONTRAST_LEVEL4          0x09   /* Contrast level +2           */    
-    
-#define CAMERA_BLACK_WHITE_BW           0x00   /* Black and white effect      */
-#define CAMERA_BLACK_WHITE_NEGATIVE     0x01   /* Negative effect             */
-#define CAMERA_BLACK_WHITE_BW_NEGATIVE  0x02   /* BW and Negative effect      */
-#define CAMERA_BLACK_WHITE_NORMAL       0x03   /* Normal effect               */
-                                        
-#define CAMERA_COLOR_EFFECT_NONE        0x00   /* No effects                  */
-#define CAMERA_COLOR_EFFECT_BLUE        0x01   /* Blue effect                 */
-#define CAMERA_COLOR_EFFECT_GREEN       0x02   /* Green effect                */
-#define CAMERA_COLOR_EFFECT_RED         0x03   /* Red effect                  */
-#define CAMERA_COLOR_EFFECT_ANTIQUE     0x04   /* Antique effect              */
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __CAMERA_H */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r 85dbcff443aa -r 1a18e061d0ec Drivers/BSP/Components/Common/epd.h
--- a/Drivers/BSP/Components/Common/epd.h	Wed Nov 27 08:29:42 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,115 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    epd.h
-  * @author  MCD Application Team
-  * @version V4.0.1
-  * @date    21-July-2015
-  * @brief   This file contains all the functions prototypes for the 
-  *          EPD (E Paper Display) driver.   
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT(c) 2015 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.
-  *
-  ******************************************************************************
-  */ 
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __EPD_H
-#define __EPD_H
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include <stdint.h>
-
-/** @addtogroup BSP
-  * @{
-  */
-
-/** @addtogroup Components
-  * @{
-  */
-  
-/** @addtogroup Common
-  * @{
-  */
-
-/** @addtogroup EPD
-  * @{
-  */
-
-/** @defgroup EPD_Exported_Types
-  * @{
-  */
-
-/** @defgroup EPD_Driver_structure  E Paper Display Driver structure
-  * @{
-  */
-typedef struct
-{
-  void     (*Init)(void);
-  void     (*WritePixel)(uint8_t);
-
-  /* Optimized operation */
-  void     (*SetDisplayWindow)(uint16_t, uint16_t, uint16_t, uint16_t);
-  void     (*RefreshDisplay)(void);
-  void     (*CloseChargePump)(void);
-
-  uint16_t (*GetEpdPixelWidth)(void);
-  uint16_t (*GetEpdPixelHeight)(void);
-  void     (*DrawImage)(uint16_t, uint16_t, uint16_t, uint16_t, uint8_t*);
-}
-EPD_DrvTypeDef;
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* EPD_H */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r 85dbcff443aa -r 1a18e061d0ec Drivers/BSP/Components/Common/gyro.h
--- a/Drivers/BSP/Components/Common/gyro.h	Wed Nov 27 08:29:42 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,145 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    gyro.h
-  * @author  MCD Application Team
-  * @version V4.0.1
-  * @date    21-July-2015
-  * @brief   This header file contains the functions prototypes for the gyroscope driver.
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT(c) 2015 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.
-  *
-  ******************************************************************************
-  */
-  
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __GYRO_H
-#define __GYRO_H
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include <stdint.h>
-
-/** @addtogroup BSP
-  * @{
-  */
-
-/** @addtogroup Components
-  * @{
-  */
-    
-/** @addtogroup GYRO
-  * @{
-  */
-
-/** @defgroup GYRO_Exported_Types
-  * @{
-  */
-
-/** @defgroup GYRO_Driver_structure  Gyroscope Driver structure
-  * @{
-  */
-typedef struct
-{  
-  void       (*Init)(uint16_t);
-  void       (*DeInit)(void); 
-  uint8_t    (*ReadID)(void);
-  void       (*Reset)(void);
-  void       (*LowPower)(uint16_t);   
-  void       (*ConfigIT)(uint16_t); 
-  void       (*EnableIT)(uint8_t);
-  void       (*DisableIT)(uint8_t);  
-  uint8_t    (*ITStatus)(uint16_t, uint16_t);   
-  void       (*ClearIT)(uint16_t, uint16_t); 
-  void       (*FilterConfig)(uint8_t);  
-  void       (*FilterCmd)(uint8_t);  
-  void       (*GetXYZ)(float *);
-}GYRO_DrvTypeDef;
-/**
-  * @}
-  */
-
-/** @defgroup GYRO_Config_structure  Gyroscope Configuration structure
-  * @{
-  */
-
-typedef struct
-{
-  uint8_t Power_Mode;                         /* Power-down/Sleep/Normal Mode */
-  uint8_t Output_DataRate;                    /* OUT data rate */
-  uint8_t Axes_Enable;                        /* Axes enable */
-  uint8_t Band_Width;                         /* Bandwidth selection */
-  uint8_t BlockData_Update;                   /* Block Data Update */
-  uint8_t Endianness;                         /* Endian Data selection */
-  uint8_t Full_Scale;                         /* Full Scale selection */
-}GYRO_InitTypeDef;
-
-/* GYRO High Pass Filter struct */
-typedef struct
-{
-  uint8_t HighPassFilter_Mode_Selection;      /* Internal filter mode */
-  uint8_t HighPassFilter_CutOff_Frequency;    /* High pass filter cut-off frequency */
-}GYRO_FilterConfigTypeDef;
-
-/*GYRO Interrupt struct */
-typedef struct
-{
-  uint8_t Latch_Request;                      /* Latch interrupt request into CLICK_SRC register */
-  uint8_t Interrupt_Axes;                     /* X, Y, Z Axes Interrupts */ 
-  uint8_t Interrupt_ActiveEdge;               /* Interrupt Active edge */
-}GYRO_InterruptConfigTypeDef;  
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __GYRO_H */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r 85dbcff443aa -r 1a18e061d0ec Drivers/BSP/Components/Common/idd.h
--- a/Drivers/BSP/Components/Common/idd.h	Wed Nov 27 08:29:42 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,168 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    idd.h
-  * @author  MCD Application Team
-  * @version V4.0.1
-  * @date    21-July-2015
-  * @brief   This file contains all the functions prototypes for the IDD driver.
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT(c) 2015 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.
-  *
-  ******************************************************************************
-  */ 
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __IDD_H
-#define __IDD_H
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include <stdint.h>
-
-/** @addtogroup BSP
-  * @{
-  */
-
-/** @addtogroup Components
-  * @{
-  */
-    
-/** @addtogroup IDD
-  * @{
-  */
-
-/** @defgroup IDD_Exported_Types IDD Exported Types
-  * @{
-  */
-
-/** @defgroup IDD_Config_structure  IDD Configuration structure
-  * @{
-  */
-typedef struct
-{
-  uint16_t AmpliGain;       /*!< Specifies ampli gain value
-                                 */
-  uint16_t VddMin;          /*!< Specifies minimum MCU VDD can reach to protect MCU from reset
-                                  */
-  uint16_t Shunt0Value;     /*!< Specifies value of Shunt 0 if existing
-                                 */
-  uint16_t Shunt1Value;     /*!< Specifies value of Shunt 1 if existing
-                                 */
-  uint16_t Shunt2Value;     /*!< Specifies value of Shunt 2 if existing
-                                 */
-  uint16_t Shunt3Value;     /*!< Specifies value of Shunt 3 if existing
-                                 */
-  uint16_t Shunt4Value;     /*!< Specifies value of Shunt 4 if existing
-                                  */
-  uint16_t Shunt0StabDelay; /*!< Specifies delay of Shunt 0 stabilization if existing
-                                  */
-  uint16_t Shunt1StabDelay; /*!< Specifies delay of Shunt 1 stabilization if existing
-                                  */
-  uint16_t Shunt2StabDelay; /*!< Specifies delay of Shunt 2 stabilization if existing
-                                  */
-  uint16_t Shunt3StabDelay; /*!< Specifies delay of Shunt 3 stabilization if existing
-                                  */
-  uint16_t Shunt4StabDelay; /*!< Specifies delay of Shunt 4 stabilization if existing
-                                  */
-  uint8_t ShuntNbOnBoard;   /*!< Specifies number of shunts that are present on board
-                                 This parameter can be a value of @ref IDD_shunt_number */
-  uint8_t ShuntNbUsed;      /*!< Specifies number of shunts used for measurement
-                                 This parameter can be a value of @ref IDD_shunt_number */
-  uint8_t VrefMeasurement;  /*!< Specifies if Vref is automatically measured before each Idd measurement
-                                 This parameter can be a value of @ref IDD_Vref_Measurement */
-  uint8_t Calibration;      /*!< Specifies if calibration is done before each Idd measurement
-                                  */
-  uint8_t PreDelayUnit;     /*!< Specifies Pre delay unit 
-                                 This parameter can be a value of @ref IDD_PreDelay */
-  uint8_t PreDelayValue;    /*!< Specifies Pre delay value in selected unit
-                                  */
-  uint8_t MeasureNb;        /*!< Specifies number of Measure to be performed 
-                                 This parameter can be a value between 1 and 256 */
-  uint8_t DeltaDelayUnit;   /*!< Specifies Delta delay unit
-                                  This parameter can be a value of @ref IDD_DeltaDelay */
-  uint8_t DeltaDelayValue;  /*!< Specifies Delta delay between 2 measures
-                                  value can be between 1 and 128 */
-}IDD_ConfigTypeDef;
-/**
-  * @}
-  */
-
-/** @defgroup IDD_Driver_structure  IDD Driver structure
-  * @{
-  */
-typedef struct
-{
-  void       (*Init)(uint16_t);
-  void       (*DeInit)(uint16_t);
-  uint16_t   (*ReadID)(uint16_t);
-  void       (*Reset)(uint16_t);
-  void       (*LowPower)(uint16_t);
-  void       (*WakeUp)(uint16_t);
-  void       (*Start)(uint16_t);
-  void       (*Config)(uint16_t,IDD_ConfigTypeDef);
-  void       (*GetValue)(uint16_t, uint32_t *);
-  void       (*EnableIT)(uint16_t);
-  void       (*ClearIT)(uint16_t);
-  uint8_t    (*GetITStatus)(uint16_t);
-  void       (*DisableIT)(uint16_t);
-  void       (*ErrorEnableIT)(uint16_t);
-  void       (*ErrorClearIT)(uint16_t);
-  uint8_t    (*ErrorGetITStatus)(uint16_t);
-  void       (*ErrorDisableIT)(uint16_t);
-  uint8_t    (*ErrorGetSrc)(uint16_t);
-  uint8_t    (*ErrorGetCode)(uint16_t);
-}IDD_DrvTypeDef;
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __IDD_H */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r 85dbcff443aa -r 1a18e061d0ec Drivers/BSP/Components/Common/io.h
--- a/Drivers/BSP/Components/Common/io.h	Wed Nov 27 08:29:42 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,150 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    io.h
-  * @author  MCD Application Team
-  * @version V4.0.1
-  * @date    21-July-2015
-  * @brief   This file contains all the functions prototypes for the IO driver.
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT(c) 2015 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.
-  *
-  ******************************************************************************
-  */ 
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __IO_H
-#define __IO_H
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include <stdint.h>
-
-/** @addtogroup BSP
-  * @{
-  */
-
-/** @addtogroup Components
-  * @{
-  */
-    
-/** @addtogroup IO
-  * @{
-  */
-
-/** @defgroup IO_Exported_Types
-  * @{
-  */
-
-/**
-  * @brief  IO Bit SET and Bit RESET enumeration
-  */
-typedef enum
-{
-  IO_PIN_RESET = 0,
-  IO_PIN_SET
-}IO_PinState;
-
-typedef enum
-{
-   IO_MODE_INPUT = 0,   /* input floating */
-   IO_MODE_OUTPUT,      /* output Push Pull */
-   IO_MODE_IT_RISING_EDGE,   /* float input - irq detect on rising edge */
-   IO_MODE_IT_FALLING_EDGE,  /* float input - irq detect on falling edge */
-   IO_MODE_IT_LOW_LEVEL,     /* float input - irq detect on low level */
-   IO_MODE_IT_HIGH_LEVEL,    /* float input - irq detect on high level */
-   /* following modes only available on MFX*/
-   IO_MODE_ANALOG,           /* analog mode */
-   IO_MODE_OFF,              /* when pin isn't used*/
-   IO_MODE_INPUT_PU,         /* input with internal pull up resistor */
-   IO_MODE_INPUT_PD,         /* input with internal pull down resistor */
-   IO_MODE_OUTPUT_OD,          /* Open Drain output without internal resistor */
-   IO_MODE_OUTPUT_OD_PU,       /* Open Drain output with  internal pullup resistor */
-   IO_MODE_OUTPUT_OD_PD,       /* Open Drain output with  internal pulldown resistor */
-   IO_MODE_OUTPUT_PP,          /* PushPull output without internal resistor */
-   IO_MODE_OUTPUT_PP_PU,       /* PushPull output with  internal pullup resistor */
-   IO_MODE_OUTPUT_PP_PD,       /* PushPull output with  internal pulldown resistor */
-   IO_MODE_IT_RISING_EDGE_PU,   /* push up resistor input - irq on rising edge  */
-   IO_MODE_IT_RISING_EDGE_PD,   /* push dw resistor input - irq on rising edge  */
-   IO_MODE_IT_FALLING_EDGE_PU,  /* push up resistor input - irq on falling edge */
-   IO_MODE_IT_FALLING_EDGE_PD,  /* push dw resistor input - irq on falling edge */
-   IO_MODE_IT_LOW_LEVEL_PU,     /* push up resistor input - irq detect on low level */
-   IO_MODE_IT_LOW_LEVEL_PD,     /* push dw resistor input - irq detect on low level */
-   IO_MODE_IT_HIGH_LEVEL_PU,    /* push up resistor input - irq detect on high level */
-   IO_MODE_IT_HIGH_LEVEL_PD,    /* push dw resistor input - irq detect on high level */
-
-}IO_ModeTypedef;
-
-/** @defgroup IO_Driver_structure  IO Driver structure
-  * @{
-  */
-typedef struct
-{  
-  void       (*Init)(uint16_t);
-  uint16_t   (*ReadID)(uint16_t);
-  void       (*Reset)(uint16_t);
-  
-  void       (*Start)(uint16_t, uint32_t);
-  uint8_t    (*Config)(uint16_t, uint32_t, IO_ModeTypedef);
-  void       (*WritePin)(uint16_t, uint32_t, uint8_t);
-  uint32_t   (*ReadPin)(uint16_t, uint32_t);
-  
-  void       (*EnableIT)(uint16_t);
-  void       (*DisableIT)(uint16_t);
-  uint32_t    (*ITStatus)(uint16_t, uint32_t);
-  void       (*ClearIT)(uint16_t, uint32_t);
-    
-}IO_DrvTypeDef;
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __IO_H */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r 85dbcff443aa -r 1a18e061d0ec Drivers/BSP/Components/Common/lcd.h
--- a/Drivers/BSP/Components/Common/lcd.h	Wed Nov 27 08:29:42 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,114 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    lcd.h
-  * @author  MCD Application Team
-  * @version V4.0.1
-  * @date    21-July-2015
-  * @brief   This file contains all the functions prototypes for the LCD driver.   
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT(c) 2015 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.
-  *
-  ******************************************************************************
-  */ 
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __LCD_H
-#define __LCD_H
-
-#ifdef __cplusplus
- extern "C" {
-#endif 
-
-/* Includes ------------------------------------------------------------------*/
-#include <stdint.h>
-   
-/** @addtogroup BSP
-  * @{
-  */
-
-/** @addtogroup Components
-  * @{
-  */
-
-/** @addtogroup LCD
-  * @{
-  */
- 
-/** @defgroup LCD_Exported_Types
-  * @{
-  */
-
-/** @defgroup LCD_Driver_structure  LCD Driver structure
-  * @{
-  */
-typedef struct
-{
-  void     (*Init)(void);
-  uint16_t (*ReadID)(void);
-  void     (*DisplayOn)(void);
-  void     (*DisplayOff)(void);
-  void     (*SetCursor)(uint16_t, uint16_t);
-  void     (*WritePixel)(uint16_t, uint16_t, uint16_t);
-  uint16_t (*ReadPixel)(uint16_t, uint16_t);
-  
-   /* Optimized operation */
-  void     (*SetDisplayWindow)(uint16_t, uint16_t, uint16_t, uint16_t);
-  void     (*DrawHLine)(uint16_t, uint16_t, uint16_t, uint16_t);
-  void     (*DrawVLine)(uint16_t, uint16_t, uint16_t, uint16_t);
-  
-  uint16_t (*GetLcdPixelWidth)(void);
-  uint16_t (*GetLcdPixelHeight)(void);
-  void     (*DrawBitmap)(uint16_t, uint16_t, uint8_t*);
-  void     (*DrawRGBImage)(uint16_t, uint16_t, uint16_t, uint16_t, uint8_t*);
-}LCD_DrvTypeDef;    
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __LCD_H */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r 85dbcff443aa -r 1a18e061d0ec Drivers/BSP/Components/Common/magneto.h
--- a/Drivers/BSP/Components/Common/magneto.h	Wed Nov 27 08:29:42 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,125 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    magneto.h
-  * @author  MCD Application Team
-  * @version V4.0.1
-  * @date    21-July-2015
-  * @brief   This header file contains the functions prototypes for the MAGNETO driver.
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT(c) 2015 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.
-  *
-  ******************************************************************************
-  */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __MAGNETO_H
-#define __MAGNETO_H
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include <stdint.h>
-
-/** @addtogroup BSP
-  * @{
-  */
-
-/** @addtogroup Components
-  * @{
-  */
-    
-/** @addtogroup MAGNETO
-  * @{
-  */
-
-/** @defgroup MAGNETO_Exported_Types
-  * @{
-  */ 
-
-/** @defgroup MAGNETO_Config_structure  Magnetometer Configuration structure
-  * @{
-  */
-typedef struct
-{
-  uint8_t Register1;
-  uint8_t Register2;
-  uint8_t Register3;
-  uint8_t Register4;
-  uint8_t Register5;
-}MAGNETO_InitTypeDef;
-/**
-  * @}
-  */
-
-/** @defgroup MAGNETO_Driver_structure  Magnetometer Driver structure
-  * @{
-  */
-typedef struct
-{  
-  void      (*Init)(MAGNETO_InitTypeDef);
-  void      (*DeInit)(void); 
-  uint8_t   (*ReadID)(void);
-  void      (*Reset)(void);
-  void      (*LowPower)(void);
-  void      (*ConfigIT)(void);
-  void      (*EnableIT)(uint8_t);
-  void      (*DisableIT)(uint8_t);
-  uint8_t   (*ITStatus)(uint16_t);
-  void      (*ClearIT)(void);
-  void      (*FilterConfig)(uint8_t);
-  void      (*FilterCmd)(uint8_t);
-  void      (*GetXYZ)(int16_t *);
-}MAGNETO_DrvTypeDef;
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __MAGNETO_H */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r 85dbcff443aa -r 1a18e061d0ec Drivers/BSP/Components/Common/ts.h
--- a/Drivers/BSP/Components/Common/ts.h	Wed Nov 27 08:29:42 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,107 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    ts.h
-  * @author  MCD Application Team
-  * @version V4.0.1
-  * @date    21-July-2015
-  * @brief   This file contains all the functions prototypes for the Touch Screen driver.
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT(c) 2015 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.
-  *
-  ******************************************************************************
-  */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __TS_H
-#define __TS_H
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include <stdint.h> 
-
-/** @addtogroup BSP
-  * @{
-  */
-
-/** @addtogroup Components
-  * @{
-  */
-    
-/** @addtogroup TS
-  * @{
-  */
-
-/** @defgroup TS_Exported_Types
-  * @{
-  */
-
-/** @defgroup TS_Driver_structure  Touch Sensor Driver structure
-  * @{
-  */
-typedef struct
-{  
-  void       (*Init)(uint16_t);
-  uint16_t   (*ReadID)(uint16_t);
-  void       (*Reset)(uint16_t);
-  void       (*Start)(uint16_t);
-  uint8_t    (*DetectTouch)(uint16_t);
-  void       (*GetXY)(uint16_t, uint16_t*, uint16_t*);
-  void       (*EnableIT)(uint16_t);
-  void       (*ClearIT)(uint16_t);
-  uint8_t    (*GetITStatus)(uint16_t);
-  void       (*DisableIT)(uint16_t);
-}TS_DrvTypeDef;
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __TS_H */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r 85dbcff443aa -r 1a18e061d0ec Drivers/BSP/Components/Common/tsensor.h
--- a/Drivers/BSP/Components/Common/tsensor.h	Wed Nov 27 08:29:42 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,118 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    tsensor.h
-  * @author  MCD Application Team
-  * @version V4.0.1
-  * @date    21-July-2015
-  * @brief   This header file contains the functions prototypes for the
-  *          Temperature Sensor driver. 
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT(c) 2015 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.
-  *
-  ******************************************************************************
-  */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __TSENSOR_H
-#define __TSENSOR_H
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include <stdint.h>
-
-/** @addtogroup BSP
-  * @{
-  */
-
-/** @addtogroup Components
-  * @{
-  */
-    
-/** @addtogroup TSENSOR
-  * @{
-  */
-
-/** @defgroup TSENSOR_Exported_Types
-  * @{
-  */ 
-
-/** @defgroup TSENSOR_Config_structure  Temperature Sensor Configuration structure
-  * @{
-  */
-typedef struct
-{
-  uint8_t AlertMode;            /* Alert Mode Temperature out of range*/
-  uint8_t ConversionMode;       /* Continuous/One Shot Mode */
-  uint8_t ConversionResolution; /* Temperature Resolution */
-  uint8_t ConversionRate;       /* Number of measure per second */
-  uint8_t TemperatureLimitHigh; /* High Temperature Limit Range */
-  uint8_t TemperatureLimitLow;  /* Low Temperature Limit Range */
-}TSENSOR_InitTypeDef;
-/**
-  * @}
-  */
-
-/** @defgroup TSENSOR_Driver_structure  Temperature Sensor Driver structure
-  * @{
-  */
-typedef struct
-{  
-  void       (*Init)(uint16_t, TSENSOR_InitTypeDef *);
-  uint8_t    (*IsReady)(uint16_t, uint32_t);
-  uint8_t    (*ReadStatus)(uint16_t);
-  uint16_t   (*ReadTemp)(uint16_t); 
-}TSENSOR_DrvTypeDef;
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __TSENSOR_H */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r 85dbcff443aa -r 1a18e061d0ec Drivers/BSP/Components/ft5336/ft5336.c
--- a/Drivers/BSP/Components/ft5336/ft5336.c	Wed Nov 27 08:29:42 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,623 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    ft5336.c
-  * @author  MCD Application Team
-  * @brief   This file provides a set of functions needed to manage the FT5336
-  *          touch screen devices.
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT(c) 2015 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 "ft5336.h"
-
-/** @addtogroup BSP
-  * @{
-  */
-
-/** @addtogroup Component
-  * @{
-  */
-
-/** @defgroup FT5336
-  * @{
-  */
-
-/* Private typedef -----------------------------------------------------------*/
-
-/** @defgroup FT5336_Private_Types_Definitions
-  * @{
-  */
-
-/* Private define ------------------------------------------------------------*/
-
-/** @defgroup FT5336_Private_Defines
-  * @{
-  */
-
-/* Private macro -------------------------------------------------------------*/
-
-/** @defgroup FT5336_Private_Macros
-  * @{
-  */
-
-/* Private variables ---------------------------------------------------------*/
-
-/** @defgroup FT5336_Private_Variables
-  * @{
-  */
-
-/* Touch screen driver structure initialization */
-TS_DrvTypeDef ft5336_ts_drv =
-{
-  ft5336_Init,
-  ft5336_ReadID,
-  ft5336_Reset,
-
-  ft5336_TS_Start,
-  ft5336_TS_DetectTouch,
-  ft5336_TS_GetXY,
-
-  ft5336_TS_EnableIT,
-  ft5336_TS_ClearIT,
-  ft5336_TS_ITStatus,
-  ft5336_TS_DisableIT
-
-};
-
-/* Global ft5336 handle */
-static ft5336_handle_TypeDef ft5336_handle = { FT5336_I2C_NOT_INITIALIZED, 0, 0};
-
-/**
-  * @}
-  */
-
-/** @defgroup ft5336_Private_Function_Prototypes
-  * @{
-  */
-
-/* Private functions prototypes-----------------------------------------------*/
-
-/**
-  * @brief  Return the status of I2C was initialized or not.
-  * @param  None.
-  * @retval : I2C initialization status.
-  */
-static uint8_t ft5336_Get_I2C_InitializedStatus(void);
-
-/**
-  * @brief  I2C initialize if needed.
-  * @param  None.
-  * @retval : None.
-  */
-static void ft5336_I2C_InitializeIfRequired(void);
-
-/**
-  * @brief  Basic static configuration of TouchScreen
-  * @param  DeviceAddr: FT5336 Device address for communication on I2C Bus.
-  * @retval Status FT5336_STATUS_OK or FT5336_STATUS_NOT_OK.
-  */
-static uint32_t ft5336_TS_Configure(uint16_t DeviceAddr);
-
-/** @defgroup ft5336_Private_Functions
-  * @{
-  */
-
-/** @defgroup ft5336_Public_Function_Body
-  * @{
-  */
-
-/* Public functions bodies-----------------------------------------------*/
-
-
-/**
-  * @brief  Initialize the ft5336 communication bus
-  *         from MCU to FT5336 : ie I2C channel initialization (if required).
-  * @param  DeviceAddr: Device address on communication Bus (I2C slave address of FT5336).
-  * @retval None
-  */
-void ft5336_Init(uint16_t DeviceAddr)
-{
-  /* Wait at least 200ms after power up before accessing registers
-   * Trsi timing (Time of starting to report point after resetting) from FT5336GQQ datasheet */
-  TS_IO_Delay(200);
-
-  /* Initialize I2C link if needed */
-  ft5336_I2C_InitializeIfRequired();
-}
-
-/**
-  * @brief  Software Reset the ft5336.
-  *         @note : Not applicable to FT5336.
-  * @param  DeviceAddr: Device address on communication Bus (I2C slave address of FT5336).
-  * @retval None
-  */
-void ft5336_Reset(uint16_t DeviceAddr)
-{
-  /* Do nothing */
-  /* No software reset sequence available in FT5336 IC */
-}
-
-/**
-  * @brief  Read the ft5336 device ID, pre initialize I2C in case of need to be
-  *         able to read the FT5336 device ID, and verify this is a FT5336.
-  * @param  DeviceAddr: I2C FT5336 Slave address.
-  * @retval The Device ID (two bytes).
-  */
-uint16_t ft5336_ReadID(uint16_t DeviceAddr)
-{
-  volatile uint8_t ucReadId = 0;
-  uint8_t nbReadAttempts = 0;
-  uint8_t bFoundDevice = 0; /* Device not found by default */
-
-  /* Initialize I2C link if needed */
-  ft5336_I2C_InitializeIfRequired();
-
-  /* At maximum 4 attempts to read ID : exit at first finding of the searched device ID */
-  for(nbReadAttempts = 0; ((nbReadAttempts < 3) && !(bFoundDevice)); nbReadAttempts++)
-  {
-    /* Read register FT5336_CHIP_ID_REG as DeviceID detection */
-    ucReadId = TS_IO_Read(DeviceAddr, FT5336_CHIP_ID_REG);
-
-    /* Found the searched device ID ? */
-    if(ucReadId == FT5336_ID_VALUE)
-    {
-      /* Set device as found */
-      bFoundDevice = 1;
-    }
-  }
-
-  /* Return the device ID value */
-  return (ucReadId);
-}
-
-/**
-  * @brief  Configures the touch Screen IC device to start detecting touches
-  * @param  DeviceAddr: Device address on communication Bus (I2C slave address).
-  * @retval None.
-  */
-void ft5336_TS_Start(uint16_t DeviceAddr)
-{
-  /* Minimum static configuration of FT5336 */
-  FT5336_ASSERT(ft5336_TS_Configure(DeviceAddr));
-
-  /* By default set FT5336 IC in Polling mode : no INT generation on FT5336 for new touch available */
-  /* Note TS_INT is active low                                                                      */
-  ft5336_TS_DisableIT(DeviceAddr);
-}
-
-/**
-  * @brief  Return if there is touches detected or not.
-  *         Try to detect new touches and forget the old ones (reset internal global
-  *         variables).
-  * @param  DeviceAddr: Device address on communication Bus.
-  * @retval : Number of active touches detected (can be 0, 1 or 2).
-  */
-uint8_t ft5336_TS_DetectTouch(uint16_t DeviceAddr)
-{
-  volatile uint8_t nbTouch = 0;
-
-  /* Read register FT5336_TD_STAT_REG to check number of touches detection */
-  nbTouch = TS_IO_Read(DeviceAddr, FT5336_TD_STAT_REG);
-  nbTouch &= FT5336_TD_STAT_MASK;
-
-  if(nbTouch > FT5336_MAX_DETECTABLE_TOUCH)
-  {
-    /* If invalid number of touch detected, set it to zero */
-    nbTouch = 0;
-  }
-
-  /* Update ft5336 driver internal global : current number of active touches */
-  ft5336_handle.currActiveTouchNb = nbTouch;
-
-  /* Reset current active touch index on which to work on */
-  ft5336_handle.currActiveTouchIdx = 0;
-
-  return(nbTouch);
-}
-
-/**
-  * @brief  Get the touch screen X and Y positions values
-  *         Manage multi touch thanks to touch Index global
-  *         variable 'ft5336_handle.currActiveTouchIdx'.
-  * @param  DeviceAddr: Device address on communication Bus.
-  * @param  X: Pointer to X position value
-  * @param  Y: Pointer to Y position value
-  * @retval None.
-  */
-void ft5336_TS_GetXY(uint16_t DeviceAddr, uint16_t *X, uint16_t *Y)
-{
-  volatile uint8_t ucReadData = 0;
-  static uint16_t coord;
-  uint8_t regAddressXLow = 0;
-  uint8_t regAddressXHigh = 0;
-  uint8_t regAddressYLow = 0;
-  uint8_t regAddressYHigh = 0;
-
-  if(ft5336_handle.currActiveTouchIdx < ft5336_handle.currActiveTouchNb)
-  {
-    switch(ft5336_handle.currActiveTouchIdx)
-    {
-    case 0 :
-      regAddressXLow  = FT5336_P1_XL_REG;
-      regAddressXHigh = FT5336_P1_XH_REG;
-      regAddressYLow  = FT5336_P1_YL_REG;
-      regAddressYHigh = FT5336_P1_YH_REG;
-      break;
-
-    case 1 :
-      regAddressXLow  = FT5336_P2_XL_REG;
-      regAddressXHigh = FT5336_P2_XH_REG;
-      regAddressYLow  = FT5336_P2_YL_REG;
-      regAddressYHigh = FT5336_P2_YH_REG;
-      break;
-
-    case 2 :
-      regAddressXLow  = FT5336_P3_XL_REG;
-      regAddressXHigh = FT5336_P3_XH_REG;
-      regAddressYLow  = FT5336_P3_YL_REG;
-      regAddressYHigh = FT5336_P3_YH_REG;
-      break;
-
-    case 3 :
-      regAddressXLow  = FT5336_P4_XL_REG;
-      regAddressXHigh = FT5336_P4_XH_REG;
-      regAddressYLow  = FT5336_P4_YL_REG;
-      regAddressYHigh = FT5336_P4_YH_REG;
-      break;
-
-    case 4 :
-      regAddressXLow  = FT5336_P5_XL_REG;
-      regAddressXHigh = FT5336_P5_XH_REG;
-      regAddressYLow  = FT5336_P5_YL_REG;
-      regAddressYHigh = FT5336_P5_YH_REG;
-      break;
-
-    case 5 :
-      regAddressXLow  = FT5336_P6_XL_REG;
-      regAddressXHigh = FT5336_P6_XH_REG;
-      regAddressYLow  = FT5336_P6_YL_REG;
-      regAddressYHigh = FT5336_P6_YH_REG;
-      break;
-
-    case 6 :
-      regAddressXLow  = FT5336_P7_XL_REG;
-      regAddressXHigh = FT5336_P7_XH_REG;
-      regAddressYLow  = FT5336_P7_YL_REG;
-      regAddressYHigh = FT5336_P7_YH_REG;
-      break;
-
-    case 7 :
-      regAddressXLow  = FT5336_P8_XL_REG;
-      regAddressXHigh = FT5336_P8_XH_REG;
-      regAddressYLow  = FT5336_P8_YL_REG;
-      regAddressYHigh = FT5336_P8_YH_REG;
-      break;
-
-    case 8 :
-      regAddressXLow  = FT5336_P9_XL_REG;
-      regAddressXHigh = FT5336_P9_XH_REG;
-      regAddressYLow  = FT5336_P9_YL_REG;
-      regAddressYHigh = FT5336_P9_YH_REG;
-      break;
-
-    case 9 :
-      regAddressXLow  = FT5336_P10_XL_REG;
-      regAddressXHigh = FT5336_P10_XH_REG;
-      regAddressYLow  = FT5336_P10_YL_REG;
-      regAddressYHigh = FT5336_P10_YH_REG;
-      break;
-
-    default :
-      break;
-
-    } /* end switch(ft5336_handle.currActiveTouchIdx) */
-
-    /* Read low part of X position */
-    ucReadData = TS_IO_Read(DeviceAddr, regAddressXLow);
-    coord = (ucReadData & FT5336_TOUCH_POS_LSB_MASK) >> FT5336_TOUCH_POS_LSB_SHIFT;
-
-    /* Read high part of X position */
-    ucReadData = TS_IO_Read(DeviceAddr, regAddressXHigh);
-    coord |= ((ucReadData & FT5336_TOUCH_POS_MSB_MASK) >> FT5336_TOUCH_POS_MSB_SHIFT) << 8;
-
-    /* Send back ready X position to caller */
-    *X = coord;
-
-    /* Read low part of Y position */
-    ucReadData = TS_IO_Read(DeviceAddr, regAddressYLow);
-    coord = (ucReadData & FT5336_TOUCH_POS_LSB_MASK) >> FT5336_TOUCH_POS_LSB_SHIFT;
-
-    /* Read high part of Y position */
-    ucReadData = TS_IO_Read(DeviceAddr, regAddressYHigh);
-    coord |= ((ucReadData & FT5336_TOUCH_POS_MSB_MASK) >> FT5336_TOUCH_POS_MSB_SHIFT) << 8;
-
-    /* Send back ready Y position to caller */
-    *Y = coord;
-
-    ft5336_handle.currActiveTouchIdx++; /* next call will work on next touch */
-
-  } /* of if(ft5336_handle.currActiveTouchIdx < ft5336_handle.currActiveTouchNb) */
-}
-
-/**
-  * @brief  Configure the FT5336 device to generate IT on given INT pin
-  *         connected to MCU as EXTI.
-  * @param  DeviceAddr: Device address on communication Bus (Slave I2C address of FT5336).
-  * @retval None
-  */
-void ft5336_TS_EnableIT(uint16_t DeviceAddr)
-{
-   uint8_t regValue = 0;
-   regValue = (FT5336_G_MODE_INTERRUPT_TRIGGER & (FT5336_G_MODE_INTERRUPT_MASK >> FT5336_G_MODE_INTERRUPT_SHIFT)) << FT5336_G_MODE_INTERRUPT_SHIFT;
-
-   /* Set interrupt trigger mode in FT5336_GMODE_REG */
-   TS_IO_Write(DeviceAddr, FT5336_GMODE_REG, regValue);
-}
-
-/**
-  * @brief  Configure the FT5336 device to stop generating IT on the given INT pin
-  *         connected to MCU as EXTI.
-  * @param  DeviceAddr: Device address on communication Bus (Slave I2C address of FT5336).
-  * @retval None
-  */
-void ft5336_TS_DisableIT(uint16_t DeviceAddr)
-{
-  uint8_t regValue = 0;
-  regValue = (FT5336_G_MODE_INTERRUPT_POLLING & (FT5336_G_MODE_INTERRUPT_MASK >> FT5336_G_MODE_INTERRUPT_SHIFT)) << FT5336_G_MODE_INTERRUPT_SHIFT;
-
-  /* Set interrupt polling mode in FT5336_GMODE_REG */
-  TS_IO_Write(DeviceAddr, FT5336_GMODE_REG, regValue);
-}
-
-/**
-  * @brief  Get IT status from FT5336 interrupt status registers
-  *         Should be called Following an EXTI coming to the MCU to know the detailed
-  *         reason of the interrupt.
-  *         @note : This feature is not applicable to FT5336.
-  * @param  DeviceAddr: Device address on communication Bus (I2C slave address of FT5336).
-  * @retval TS interrupts status : always return 0 here
-  */
-uint8_t ft5336_TS_ITStatus(uint16_t DeviceAddr)
-{
-  /* Always return 0 as feature not applicable to FT5336 */
-  return 0;
-}
-
-/**
-  * @brief  Clear IT status in FT5336 interrupt status clear registers
-  *         Should be called Following an EXTI coming to the MCU.
-  *         @note : This feature is not applicable to FT5336.
-  * @param  DeviceAddr: Device address on communication Bus (I2C slave address of FT5336).
-  * @retval None
-  */
-void ft5336_TS_ClearIT(uint16_t DeviceAddr)
-{
-  /* Nothing to be done here for FT5336 */
-}
-
-/**** NEW FEATURES enabled when Multi-touch support is enabled ****/
-
-#if (TS_MULTI_TOUCH_SUPPORTED == 1)
-
-/**
-  * @brief  Get the last touch gesture identification (zoom, move up/down...).
-  * @param  DeviceAddr: Device address on communication Bus (I2C slave address of FT5336).
-  * @param  pGestureId : Pointer to get last touch gesture Identification.
-  * @retval None.
-  */
-void ft5336_TS_GetGestureID(uint16_t DeviceAddr, uint32_t * pGestureId)
-{
-  volatile uint8_t ucReadData = 0;
-
-  ucReadData = TS_IO_Read(DeviceAddr, FT5336_GEST_ID_REG);
-
-  * pGestureId = ucReadData;
-}
-
-/**
-  * @brief  Get the touch detailed informations on touch number 'touchIdx' (0..1)
-  *         This touch detailed information contains :
-  *         - weight that was applied to this touch
-  *         - sub-area of the touch in the touch panel
-  *         - event of linked to the touch (press down, lift up, ...)
-  * @param  DeviceAddr: Device address on communication Bus (I2C slave address of FT5336).
-  * @param  touchIdx : Passed index of the touch (0..1) on which we want to get the
-  *                    detailed information.
-  * @param  pWeight : Pointer to to get the weight information of 'touchIdx'.
-  * @param  pArea   : Pointer to to get the sub-area information of 'touchIdx'.
-  * @param  pEvent  : Pointer to to get the event information of 'touchIdx'.
-
-  * @retval None.
-  */
-void ft5336_TS_GetTouchInfo(uint16_t   DeviceAddr,
-                            uint32_t   touchIdx,
-                            uint32_t * pWeight,
-                            uint32_t * pArea,
-                            uint32_t * pEvent)
-{
-  volatile uint8_t ucReadData = 0;
-  uint8_t regAddressXHigh = 0;
-  uint8_t regAddressPWeight = 0;
-  uint8_t regAddressPMisc = 0;
-
-  if(touchIdx < ft5336_handle.currActiveTouchNb)
-  {
-    switch(touchIdx)
-    {
-    case 0 :
-      regAddressXHigh   = FT5336_P1_XH_REG;
-      regAddressPWeight = FT5336_P1_WEIGHT_REG;
-      regAddressPMisc   = FT5336_P1_MISC_REG;
-      break;
-
-    case 1 :
-      regAddressXHigh   = FT5336_P2_XH_REG;
-      regAddressPWeight = FT5336_P2_WEIGHT_REG;
-      regAddressPMisc   = FT5336_P2_MISC_REG;
-      break;
-
-    case 2 :
-      regAddressXHigh   = FT5336_P3_XH_REG;
-      regAddressPWeight = FT5336_P3_WEIGHT_REG;
-      regAddressPMisc   = FT5336_P3_MISC_REG;
-      break;
-
-    case 3 :
-      regAddressXHigh   = FT5336_P4_XH_REG;
-      regAddressPWeight = FT5336_P4_WEIGHT_REG;
-      regAddressPMisc   = FT5336_P4_MISC_REG;
-      break;
-
-    case 4 :
-      regAddressXHigh   = FT5336_P5_XH_REG;
-      regAddressPWeight = FT5336_P5_WEIGHT_REG;
-      regAddressPMisc   = FT5336_P5_MISC_REG;
-      break;
-
-    case 5 :
-      regAddressXHigh   = FT5336_P6_XH_REG;
-      regAddressPWeight = FT5336_P6_WEIGHT_REG;
-      regAddressPMisc   = FT5336_P6_MISC_REG;
-      break;
-
-    case 6 :
-      regAddressXHigh   = FT5336_P7_XH_REG;
-      regAddressPWeight = FT5336_P7_WEIGHT_REG;
-      regAddressPMisc   = FT5336_P7_MISC_REG;
-      break;
-
-    case 7 :
-      regAddressXHigh   = FT5336_P8_XH_REG;
-      regAddressPWeight = FT5336_P8_WEIGHT_REG;
-      regAddressPMisc   = FT5336_P8_MISC_REG;
-      break;
-
-    case 8 :
-      regAddressXHigh   = FT5336_P9_XH_REG;
-      regAddressPWeight = FT5336_P9_WEIGHT_REG;
-      regAddressPMisc   = FT5336_P9_MISC_REG;
-      break;
-
-    case 9 :
-      regAddressXHigh   = FT5336_P10_XH_REG;
-      regAddressPWeight = FT5336_P10_WEIGHT_REG;
-      regAddressPMisc   = FT5336_P10_MISC_REG;
-      break;
-
-    default :
-      break;
-
-    } /* end switch(touchIdx) */
-
-    /* Read Event Id of touch index */
-    ucReadData = TS_IO_Read(DeviceAddr, regAddressXHigh);
-    * pEvent = (ucReadData & FT5336_TOUCH_EVT_FLAG_MASK) >> FT5336_TOUCH_EVT_FLAG_SHIFT;
-
-    /* Read weight of touch index */
-    ucReadData = TS_IO_Read(DeviceAddr, regAddressPWeight);
-    * pWeight = (ucReadData & FT5336_TOUCH_WEIGHT_MASK) >> FT5336_TOUCH_WEIGHT_SHIFT;
-
-    /* Read area of touch index */
-    ucReadData = TS_IO_Read(DeviceAddr, regAddressPMisc);
-    * pArea = (ucReadData & FT5336_TOUCH_AREA_MASK) >> FT5336_TOUCH_AREA_SHIFT;
-
-  } /* of if(touchIdx < ft5336_handle.currActiveTouchNb) */
-}
-
-#endif /* TS_MULTI_TOUCH_SUPPORTED == 1 */
-
-/** @defgroup ft5336_Static_Function_Body
-  * @{
-  */
-
-/* Static functions bodies-----------------------------------------------*/
-
-
-/**
-  * @brief  Return the status of I2C was initialized or not.
-  * @param  None.
-  * @retval : I2C initialization status.
-  */
-static uint8_t ft5336_Get_I2C_InitializedStatus(void)
-{
-  return(ft5336_handle.i2cInitialized);
-}
-
-/**
-  * @brief  I2C initialize if needed.
-  * @param  None.
-  * @retval : None.
-  */
-static void ft5336_I2C_InitializeIfRequired(void)
-{
-  if(ft5336_Get_I2C_InitializedStatus() == FT5336_I2C_NOT_INITIALIZED)
-  {
-    /* Initialize TS IO BUS layer (I2C) */
-    TS_IO_Init();
-
-    /* Set state to initialized */
-    ft5336_handle.i2cInitialized = FT5336_I2C_INITIALIZED;
-  }
-}
-
-/**
-  * @brief  Basic static configuration of TouchScreen
-  * @param  DeviceAddr: FT5336 Device address for communication on I2C Bus.
-  * @retval Status FT5336_STATUS_OK or FT5336_STATUS_NOT_OK.
-  */
-static uint32_t ft5336_TS_Configure(uint16_t DeviceAddr)
-{
-  uint32_t status = FT5336_STATUS_OK;
-
-  /* Nothing special to be done for FT5336 */
-
-  return(status);
-}
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r 85dbcff443aa -r 1a18e061d0ec Drivers/BSP/Components/ft5336/ft5336.h
--- a/Drivers/BSP/Components/ft5336/ft5336.h	Wed Nov 27 08:29:42 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,538 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    ft5336.h
-  * @author  MCD Application Team
-  * @brief   This file contains all the functions prototypes for the
-  *          ft5336.c Touch screen driver.
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT(c) 2015 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.
-  *
-  ******************************************************************************
-  */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __FT5336_H
-#define __FT5336_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Set Multi-touch as supported */
-#if !defined(TS_MONO_TOUCH_SUPPORTED)
-#define TS_MULTI_TOUCH_SUPPORTED        1
-#endif /* TS_MONO_TOUCH_SUPPORTED */
-
-/* Includes ------------------------------------------------------------------*/
-#include "../Common/ts.h"
-
-/* Macros --------------------------------------------------------------------*/
-
-#if defined(FT5336_ENABLE_ASSERT)
-/* Assert activated */
-#define FT5336_ASSERT(__condition__)      do { if(__condition__) \
-                                               {  \
-                                                 while(1);  \
-                                               } \
-                                          }while(0)
-#else
-/* Assert not activated : macro has no effect */
-#define FT5336_ASSERT(__condition__)    do { if(__condition__) \
-                                             {  \
-                                                ;  \
-                                             } \
-                                            }while(0)
-#endif /* FT5336_ENABLE_ASSERT == 1 */
-
-/** @typedef ft5336_handle_TypeDef
- *  ft5336 Handle definition.
- */
-typedef struct
-{
-  uint8_t i2cInitialized;
-
-  /* field holding the current number of simultaneous active touches */
-  uint8_t currActiveTouchNb;
-
-  /* field holding the touch index currently managed */
-  uint8_t currActiveTouchIdx;
-
-} ft5336_handle_TypeDef;
-
-  /** @addtogroup BSP
-   * @{
-   */
-
-  /** @addtogroup Component
-   * @{
-   */
-
-  /** @defgroup FT5336
-   * @{
-   */
-
-  /* Exported types ------------------------------------------------------------*/
-
-  /** @defgroup FT5336_Exported_Types
-   * @{
-   */
-
-  /* Exported constants --------------------------------------------------------*/
-
-  /** @defgroup FT5336_Exported_Constants
-   * @{
-   */
-
-  /* I2C Slave address of touchscreen FocalTech FT5336 */
-#define FT5336_I2C_SLAVE_ADDRESS            ((uint8_t)0x70)
-
-  /* Maximum border values of the touchscreen pad */
-#define FT5336_MAX_WIDTH                    ((uint16_t)480)     /* Touchscreen pad max width   */
-#define FT5336_MAX_HEIGHT                   ((uint16_t)272)     /* Touchscreen pad max height  */
-
-  /* Possible values of driver functions return status */
-#define FT5336_STATUS_OK                    ((uint8_t)0x00)
-#define FT5336_STATUS_NOT_OK                ((uint8_t)0x01)
-
-  /* Possible values of global variable 'TS_I2C_Initialized' */
-#define FT5336_I2C_NOT_INITIALIZED          ((uint8_t)0x00)
-#define FT5336_I2C_INITIALIZED              ((uint8_t)0x01)
-
-  /* Max detectable simultaneous touches */
-#define FT5336_MAX_DETECTABLE_TOUCH         ((uint8_t)0x05)
-
-  /**
-   * @brief : Definitions for FT5336 I2C register addresses on 8 bit
-   **/
-
-  /* Current mode register of the FT5336 (R/W) */
-#define FT5336_DEV_MODE_REG                 ((uint8_t)0x00)
-
-  /* Possible values of FT5336_DEV_MODE_REG */
-#define FT5336_DEV_MODE_WORKING             ((uint8_t)0x00)
-#define FT5336_DEV_MODE_FACTORY             ((uint8_t)0x04)
-
-#define FT5336_DEV_MODE_MASK                ((uint8_t)0x07)
-#define FT5336_DEV_MODE_SHIFT               ((uint8_t)0x04)
-
-  /* Gesture ID register */
-#define FT5336_GEST_ID_REG                  ((uint8_t)0x01)
-
-  /* Possible values of FT5336_GEST_ID_REG */
-#define FT5336_GEST_ID_NO_GESTURE           ((uint8_t)0x00)
-#define FT5336_GEST_ID_MOVE_UP              ((uint8_t)0x10)
-#define FT5336_GEST_ID_MOVE_RIGHT           ((uint8_t)0x14)
-#define FT5336_GEST_ID_MOVE_DOWN            ((uint8_t)0x18)
-#define FT5336_GEST_ID_MOVE_LEFT            ((uint8_t)0x1C)
-#define FT5336_GEST_ID_SINGLE_CLICK         ((uint8_t)0x20)
-#define FT5336_GEST_ID_DOUBLE_CLICK         ((uint8_t)0x22)
-#define FT5336_GEST_ID_ROTATE_CLOCKWISE     ((uint8_t)0x28)
-#define FT5336_GEST_ID_ROTATE_C_CLOCKWISE   ((uint8_t)0x29)
-#define FT5336_GEST_ID_ZOOM_IN              ((uint8_t)0x40)
-#define FT5336_GEST_ID_ZOOM_OUT             ((uint8_t)0x49)
-
-  /* Touch Data Status register : gives number of active touch points (0..5) */
-#define FT5336_TD_STAT_REG                  ((uint8_t)0x02)
-
-  /* Values related to FT5336_TD_STAT_REG */
-#define FT5336_TD_STAT_MASK                 ((uint8_t)0x0F)
-#define FT5336_TD_STAT_SHIFT                ((uint8_t)0x00)
-
-  /* Values Pn_XH and Pn_YH related */
-#define FT5336_TOUCH_EVT_FLAG_PRESS_DOWN    ((uint8_t)0x00)
-#define FT5336_TOUCH_EVT_FLAG_LIFT_UP       ((uint8_t)0x01)
-#define FT5336_TOUCH_EVT_FLAG_CONTACT       ((uint8_t)0x02)
-#define FT5336_TOUCH_EVT_FLAG_NO_EVENT      ((uint8_t)0x03)
-
-#define FT5336_TOUCH_EVT_FLAG_SHIFT         ((uint8_t)0x06)
-#define FT5336_TOUCH_EVT_FLAG_MASK          ((uint8_t)(3 << FT5336_TOUCH_EVT_FLAG_SHIFT))
-
-#define FT5336_TOUCH_POS_MSB_MASK           ((uint8_t)0x0F)
-#define FT5336_TOUCH_POS_MSB_SHIFT          ((uint8_t)0x00)
-
-  /* Values Pn_XL and Pn_YL related */
-#define FT5336_TOUCH_POS_LSB_MASK           ((uint8_t)0xFF)
-#define FT5336_TOUCH_POS_LSB_SHIFT          ((uint8_t)0x00)
-
-#define FT5336_P1_XH_REG                    ((uint8_t)0x03)
-#define FT5336_P1_XL_REG                    ((uint8_t)0x04)
-#define FT5336_P1_YH_REG                    ((uint8_t)0x05)
-#define FT5336_P1_YL_REG                    ((uint8_t)0x06)
-
-/* Touch Pressure register value (R) */
-#define FT5336_P1_WEIGHT_REG                ((uint8_t)0x07)
-
-/* Values Pn_WEIGHT related  */
-#define FT5336_TOUCH_WEIGHT_MASK            ((uint8_t)0xFF)
-#define FT5336_TOUCH_WEIGHT_SHIFT           ((uint8_t)0x00)
-
-/* Touch area register */
-#define FT5336_P1_MISC_REG                  ((uint8_t)0x08)
-
-/* Values related to FT5336_Pn_MISC_REG */
-#define FT5336_TOUCH_AREA_MASK              ((uint8_t)(0x04 << 4))
-#define FT5336_TOUCH_AREA_SHIFT             ((uint8_t)0x04)
-
-#define FT5336_P2_XH_REG                    ((uint8_t)0x09)
-#define FT5336_P2_XL_REG                    ((uint8_t)0x0A)
-#define FT5336_P2_YH_REG                    ((uint8_t)0x0B)
-#define FT5336_P2_YL_REG                    ((uint8_t)0x0C)
-#define FT5336_P2_WEIGHT_REG                ((uint8_t)0x0D)
-#define FT5336_P2_MISC_REG                  ((uint8_t)0x0E)
-
-#define FT5336_P3_XH_REG                    ((uint8_t)0x0F)
-#define FT5336_P3_XL_REG                    ((uint8_t)0x10)
-#define FT5336_P3_YH_REG                    ((uint8_t)0x11)
-#define FT5336_P3_YL_REG                    ((uint8_t)0x12)
-#define FT5336_P3_WEIGHT_REG                ((uint8_t)0x13)
-#define FT5336_P3_MISC_REG                  ((uint8_t)0x14)
-
-#define FT5336_P4_XH_REG                    ((uint8_t)0x15)
-#define FT5336_P4_XL_REG                    ((uint8_t)0x16)
-#define FT5336_P4_YH_REG                    ((uint8_t)0x17)
-#define FT5336_P4_YL_REG                    ((uint8_t)0x18)
-#define FT5336_P4_WEIGHT_REG                ((uint8_t)0x19)
-#define FT5336_P4_MISC_REG                  ((uint8_t)0x1A)
-
-#define FT5336_P5_XH_REG                    ((uint8_t)0x1B)
-#define FT5336_P5_XL_REG                    ((uint8_t)0x1C)
-#define FT5336_P5_YH_REG                    ((uint8_t)0x1D)
-#define FT5336_P5_YL_REG                    ((uint8_t)0x1E)
-#define FT5336_P5_WEIGHT_REG                ((uint8_t)0x1F)
-#define FT5336_P5_MISC_REG                  ((uint8_t)0x20)
-
-#define FT5336_P6_XH_REG                    ((uint8_t)0x21)
-#define FT5336_P6_XL_REG                    ((uint8_t)0x22)
-#define FT5336_P6_YH_REG                    ((uint8_t)0x23)
-#define FT5336_P6_YL_REG                    ((uint8_t)0x24)
-#define FT5336_P6_WEIGHT_REG                ((uint8_t)0x25)
-#define FT5336_P6_MISC_REG                  ((uint8_t)0x26)
-
-#define FT5336_P7_XH_REG                    ((uint8_t)0x27)
-#define FT5336_P7_XL_REG                    ((uint8_t)0x28)
-#define FT5336_P7_YH_REG                    ((uint8_t)0x29)
-#define FT5336_P7_YL_REG                    ((uint8_t)0x2A)
-#define FT5336_P7_WEIGHT_REG                ((uint8_t)0x2B)
-#define FT5336_P7_MISC_REG                  ((uint8_t)0x2C)
-
-#define FT5336_P8_XH_REG                    ((uint8_t)0x2D)
-#define FT5336_P8_XL_REG                    ((uint8_t)0x2E)
-#define FT5336_P8_YH_REG                    ((uint8_t)0x2F)
-#define FT5336_P8_YL_REG                    ((uint8_t)0x30)
-#define FT5336_P8_WEIGHT_REG                ((uint8_t)0x31)
-#define FT5336_P8_MISC_REG                  ((uint8_t)0x32)
-
-#define FT5336_P9_XH_REG                    ((uint8_t)0x33)
-#define FT5336_P9_XL_REG                    ((uint8_t)0x34)
-#define FT5336_P9_YH_REG                    ((uint8_t)0x35)
-#define FT5336_P9_YL_REG                    ((uint8_t)0x36)
-#define FT5336_P9_WEIGHT_REG                ((uint8_t)0x37)
-#define FT5336_P9_MISC_REG                  ((uint8_t)0x38)
-
-#define FT5336_P10_XH_REG                   ((uint8_t)0x39)
-#define FT5336_P10_XL_REG                   ((uint8_t)0x3A)
-#define FT5336_P10_YH_REG                   ((uint8_t)0x3B)
-#define FT5336_P10_YL_REG                   ((uint8_t)0x3C)
-#define FT5336_P10_WEIGHT_REG               ((uint8_t)0x3D)
-#define FT5336_P10_MISC_REG                 ((uint8_t)0x3E)
-
-  /* Threshold for touch detection */
-#define FT5336_TH_GROUP_REG                 ((uint8_t)0x80)
-
-  /* Values FT5336_TH_GROUP_REG : threshold related  */
-#define FT5336_THRESHOLD_MASK               ((uint8_t)0xFF)
-#define FT5336_THRESHOLD_SHIFT              ((uint8_t)0x00)
-
-  /* Filter function coefficients */
-#define FT5336_TH_DIFF_REG                  ((uint8_t)0x85)
-
-  /* Control register */
-#define FT5336_CTRL_REG                     ((uint8_t)0x86)
-
-  /* Values related to FT5336_CTRL_REG */
-
-  /* Will keep the Active mode when there is no touching */
-#define FT5336_CTRL_KEEP_ACTIVE_MODE        ((uint8_t)0x00)
-
-  /* Switching from Active mode to Monitor mode automatically when there is no touching */
-#define FT5336_CTRL_KEEP_AUTO_SWITCH_MONITOR_MODE  ((uint8_t)0x01
-
-  /* The time period of switching from Active mode to Monitor mode when there is no touching */
-#define FT5336_TIMEENTERMONITOR_REG         ((uint8_t)0x87)
-
-  /* Report rate in Active mode */
-#define FT5336_PERIODACTIVE_REG             ((uint8_t)0x88)
-
-  /* Report rate in Monitor mode */
-#define FT5336_PERIODMONITOR_REG            ((uint8_t)0x89)
-
-  /* The value of the minimum allowed angle while Rotating gesture mode */
-#define FT5336_RADIAN_VALUE_REG             ((uint8_t)0x91)
-
-  /* Maximum offset while Moving Left and Moving Right gesture */
-#define FT5336_OFFSET_LEFT_RIGHT_REG        ((uint8_t)0x92)
-
-  /* Maximum offset while Moving Up and Moving Down gesture */
-#define FT5336_OFFSET_UP_DOWN_REG           ((uint8_t)0x93)
-
-  /* Minimum distance while Moving Left and Moving Right gesture */
-#define FT5336_DISTANCE_LEFT_RIGHT_REG      ((uint8_t)0x94)
-
-  /* Minimum distance while Moving Up and Moving Down gesture */
-#define FT5336_DISTANCE_UP_DOWN_REG         ((uint8_t)0x95)
-
-  /* Maximum distance while Zoom In and Zoom Out gesture */
-#define FT5336_DISTANCE_ZOOM_REG            ((uint8_t)0x96)
-
-  /* High 8-bit of LIB Version info */
-#define FT5336_LIB_VER_H_REG                ((uint8_t)0xA1)
-
-  /* Low 8-bit of LIB Version info */
-#define FT5336_LIB_VER_L_REG                ((uint8_t)0xA2)
-
-  /* Chip Selecting */
-#define FT5336_CIPHER_REG                   ((uint8_t)0xA3)
-
-  /* Interrupt mode register (used when in interrupt mode) */
-#define FT5336_GMODE_REG                    ((uint8_t)0xA4)
-
-#define FT5336_G_MODE_INTERRUPT_MASK        ((uint8_t)0x03)
-#define FT5336_G_MODE_INTERRUPT_SHIFT       ((uint8_t)0x00)
-
-  /* Possible values of FT5336_GMODE_REG */
-#define FT5336_G_MODE_INTERRUPT_POLLING     ((uint8_t)0x00)
-#define FT5336_G_MODE_INTERRUPT_TRIGGER     ((uint8_t)0x01)
-
-  /* Current power mode the FT5336 system is in (R) */
-#define FT5336_PWR_MODE_REG                 ((uint8_t)0xA5)
-
-  /* FT5336 firmware version */
-#define FT5336_FIRMID_REG                   ((uint8_t)0xA6)
-
-  /* FT5336 Chip identification register */
-#define FT5336_CHIP_ID_REG                  ((uint8_t)0xA8)
-
-  /*  Possible values of FT5336_CHIP_ID_REG */
-#define FT5336_ID_VALUE                     ((uint8_t)0x51)
-
-  /* Release code version */
-#define FT5336_RELEASE_CODE_ID_REG          ((uint8_t)0xAF)
-
-  /* Current operating mode the FT5336 system is in (R) */
-#define FT5336_STATE_REG                    ((uint8_t)0xBC)
-
-  /**
-   * @}
-   */
-
-  /* Exported macro ------------------------------------------------------------*/
-
-  /** @defgroup ft5336_Exported_Macros
-   * @{
-   */
-
-  /* Exported functions --------------------------------------------------------*/
-
-  /** @defgroup ft5336_Exported_Functions
-   * @{
-   */
-
-  /**
-   * @brief ft5336 Control functions
-   */
-
-
-/**
- * @brief  Initialize the ft5336 communication bus
- *         from MCU to FT5336 : ie I2C channel initialization (if required).
- * @param  DeviceAddr: Device address on communication Bus (I2C slave address of FT5336).
- * @retval None
- */
-void ft5336_Init(uint16_t DeviceAddr);
-
-/**
- * @brief  Software Reset the ft5336.
- * @param  DeviceAddr: Device address on communication Bus (I2C slave address of FT5336).
- * @retval None
- */
-void ft5336_Reset(uint16_t DeviceAddr);
-
-/**
- * @brief  Read the ft5336 device ID, pre initialize I2C in case of need to be
- *         able to read the FT5336 device ID, and verify this is a FT5336.
- * @param  DeviceAddr: I2C FT5336 Slave address.
- * @retval The Device ID (two bytes).
- */
-uint16_t ft5336_ReadID(uint16_t DeviceAddr);
-
-/**
- * @brief  Configures the touch Screen IC device to start detecting touches
- * @param  DeviceAddr: Device address on communication Bus (I2C slave address).
- * @retval None.
- */
-void ft5336_TS_Start(uint16_t DeviceAddr);
-
-/**
- * @brief  Return if there is touches detected or not.
- *         Try to detect new touches and forget the old ones (reset internal global
- *         variables).
- * @param  DeviceAddr: Device address on communication Bus.
- * @retval : Number of active touches detected (can be 0, 1 or 2).
- */
-uint8_t ft5336_TS_DetectTouch(uint16_t DeviceAddr);
-
-/**
- * @brief  Get the touch screen X and Y positions values
- *         Manage multi touch thanks to touch Index global
- *         variable 'ft5336_handle.currActiveTouchIdx'.
- * @param  DeviceAddr: Device address on communication Bus.
- * @param  X: Pointer to X position value
- * @param  Y: Pointer to Y position value
- * @retval None.
- */
-void ft5336_TS_GetXY(uint16_t DeviceAddr, uint16_t *X, uint16_t *Y);
-
-/**
- * @brief  Configure the FT5336 device to generate IT on given INT pin
- *         connected to MCU as EXTI.
- * @param  DeviceAddr: Device address on communication Bus (Slave I2C address of FT5336).
- * @retval None
- */
-void ft5336_TS_EnableIT(uint16_t DeviceAddr);
-
-/**
- * @brief  Configure the FT5336 device to stop generating IT on the given INT pin
- *         connected to MCU as EXTI.
- * @param  DeviceAddr: Device address on communication Bus (Slave I2C address of FT5336).
- * @retval None
- */
-void ft5336_TS_DisableIT(uint16_t DeviceAddr);
-
-/**
- * @brief  Get IT status from FT5336 interrupt status registers
- *         Should be called Following an EXTI coming to the MCU to know the detailed
- *         reason of the interrupt.
- * @param  DeviceAddr: Device address on communication Bus (I2C slave address of FT5336).
- * @retval TS interrupts status
- */
-uint8_t ft5336_TS_ITStatus (uint16_t DeviceAddr);
-
-/**
- * @brief  Clear IT status in FT5336 interrupt status clear registers
- *         Should be called Following an EXTI coming to the MCU.
- * @param  DeviceAddr: Device address on communication Bus (I2C slave address of FT5336).
- * @retval TS interrupts status
- */
-void ft5336_TS_ClearIT (uint16_t DeviceAddr);
-
-/**** NEW FEATURES enabled when Multi-touch support is enabled ****/
-
-#if (TS_MULTI_TOUCH_SUPPORTED == 1)
-
-/**
- * @brief  Get the last touch gesture identification (zoom, move up/down...).
- * @param  DeviceAddr: Device address on communication Bus (I2C slave address of FT5336).
- * @param  pGestureId : Pointer to get last touch gesture Identification.
- * @retval None.
- */
-void ft5336_TS_GetGestureID(uint16_t DeviceAddr, uint32_t * pGestureId);
-
-/**
- * @brief  Get the touch detailed informations on touch number 'touchIdx' (0..1)
- *         This touch detailed information contains :
- *         - weight that was applied to this touch
- *         - sub-area of the touch in the touch panel
- *         - event of linked to the touch (press down, lift up, ...)
- * @param  DeviceAddr: Device address on communication Bus (I2C slave address of FT5336).
- * @param  touchIdx : Passed index of the touch (0..1) on which we want to get the
- *                    detailed information.
- * @param  pWeight : Pointer to to get the weight information of 'touchIdx'.
- * @param  pArea   : Pointer to to get the sub-area information of 'touchIdx'.
- * @param  pEvent  : Pointer to to get the event information of 'touchIdx'.
-
- * @retval None.
- */
-void ft5336_TS_GetTouchInfo(uint16_t   DeviceAddr,
-                            uint32_t   touchIdx,
-                            uint32_t * pWeight,
-                            uint32_t * pArea,
-                            uint32_t * pEvent);
-
-#endif /* TS_MULTI_TOUCH_SUPPORTED == 1 */
-
-/* Imported TS IO functions --------------------------------------------------------*/
-
-/** @defgroup ft5336_Imported_Functions
- * @{
- */
-
-/* TouchScreen (TS) external IO functions */
-extern void     TS_IO_Init(void);
-extern void    TS_IO_Write(uint8_t Addr, uint8_t Reg, uint8_t Value);
-extern uint8_t TS_IO_Read(uint8_t Addr, uint8_t Reg);
-extern void    TS_IO_Delay(uint32_t Delay);
-
-  /**
-   * @}
-   */
-
-  /* Imported global variables --------------------------------------------------------*/
-
-  /** @defgroup ft5336_Imported_Globals
-   * @{
-   */
-
-
-/* Touch screen driver structure */
-extern TS_DrvTypeDef ft5336_ts_drv;
-
-  /**
-   * @}
-   */
-
-#ifdef __cplusplus
-}
-#endif
-#endif /* __FT5336_H */
-
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r 85dbcff443aa -r 1a18e061d0ec Drivers/BSP/Components/n25q128a/n25q128a.h
--- a/Drivers/BSP/Components/n25q128a/n25q128a.h	Wed Nov 27 08:29:42 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,217 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    n25q128a.h
-  * @author  MCD Application Team
-  * @brief   This file contains all the description of the N25Q128A QSPI memory.
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT(c) 2015 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.
-  *
-  ******************************************************************************
-  */ 
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __N25Q128A_H
-#define __N25Q128A_H
-
-#ifdef __cplusplus
- extern "C" {
-#endif 
-
-/* Includes ------------------------------------------------------------------*/
-
-/** @addtogroup BSP
-  * @{
-  */ 
-
-/** @addtogroup Components
-  * @{
-  */ 
-  
-/** @addtogroup n25q128a
-  * @{
-  */
-
-/** @defgroup N25Q128A_Exported_Types
-  * @{
-  */
-   
-/**
-  * @}
-  */ 
-
-/** @defgroup N25Q128A_Exported_Constants
-  * @{
-  */
-   
-/** 
-  * @brief  N25Q128A Configuration  
-  */  
-#define N25Q128A_FLASH_SIZE                  0x1000000 /* 128 MBits => 16MBytes */
-#define N25Q128A_SECTOR_SIZE                 0x10000   /* 256 sectors of 64KBytes */
-#define N25Q128A_SUBSECTOR_SIZE              0x1000    /* 4096 subsectors of 4kBytes */
-#define N25Q128A_PAGE_SIZE                   0x100     /* 65536 pages of 256 bytes */
-
-#define N25Q128A_DUMMY_CYCLES_READ           8
-#define N25Q128A_DUMMY_CYCLES_READ_QUAD      10
-
-#define N25Q128A_BULK_ERASE_MAX_TIME         250000
-#define N25Q128A_SECTOR_ERASE_MAX_TIME       3000
-#define N25Q128A_SUBSECTOR_ERASE_MAX_TIME    800
-
-/** 
-  * @brief  N25Q128A Commands  
-  */  
-/* Reset Operations */
-#define RESET_ENABLE_CMD                     0x66
-#define RESET_MEMORY_CMD                     0x99
-
-/* Identification Operations */
-#define READ_ID_CMD                          0x9E
-#define READ_ID_CMD2                         0x9F
-#define MULTIPLE_IO_READ_ID_CMD              0xAF
-#define READ_SERIAL_FLASH_DISCO_PARAM_CMD    0x5A
-
-/* Read Operations */
-#define READ_CMD                             0x03
-#define FAST_READ_CMD                        0x0B
-#define DUAL_OUT_FAST_READ_CMD               0x3B
-#define DUAL_INOUT_FAST_READ_CMD             0xBB
-#define QUAD_OUT_FAST_READ_CMD               0x6B
-#define QUAD_INOUT_FAST_READ_CMD             0xEB
-
-/* Write Operations */
-#define WRITE_ENABLE_CMD                     0x06
-#define WRITE_DISABLE_CMD                    0x04
-
-/* Register Operations */
-#define READ_STATUS_REG_CMD                  0x05
-#define WRITE_STATUS_REG_CMD                 0x01
-
-#define READ_LOCK_REG_CMD                    0xE8
-#define WRITE_LOCK_REG_CMD                   0xE5
-
-#define READ_FLAG_STATUS_REG_CMD             0x70
-#define CLEAR_FLAG_STATUS_REG_CMD            0x50
-
-#define READ_NONVOL_CFG_REG_CMD              0xB5
-#define WRITE_NONVOL_CFG_REG_CMD             0xB1
-
-#define READ_VOL_CFG_REG_CMD                 0x85
-#define WRITE_VOL_CFG_REG_CMD                0x81
-
-#define READ_ENHANCED_VOL_CFG_REG_CMD        0x65
-#define WRITE_ENHANCED_VOL_CFG_REG_CMD       0x61
-
-/* Program Operations */
-#define PAGE_PROG_CMD                        0x02
-#define DUAL_IN_FAST_PROG_CMD                0xA2
-#define EXT_DUAL_IN_FAST_PROG_CMD            0xD2
-#define QUAD_IN_FAST_PROG_CMD                0x32
-#define EXT_QUAD_IN_FAST_PROG_CMD            0x12
-
-/* Erase Operations */
-#define SUBSECTOR_ERASE_CMD                  0x20
-#define SECTOR_ERASE_CMD                     0xD8
-#define BULK_ERASE_CMD                       0xC7
-
-#define PROG_ERASE_RESUME_CMD                0x7A
-#define PROG_ERASE_SUSPEND_CMD               0x75
-
-/* One-Time Programmable Operations */
-#define READ_OTP_ARRAY_CMD                   0x4B
-#define PROG_OTP_ARRAY_CMD                   0x42
-
-/** 
-  * @brief  N25Q128A Registers  
-  */ 
-/* Status Register */
-#define N25Q128A_SR_WIP                      ((uint8_t)0x01)    /*!< Write in progress */
-#define N25Q128A_SR_WREN                     ((uint8_t)0x02)    /*!< Write enable latch */
-#define N25Q128A_SR_BLOCKPR                  ((uint8_t)0x5C)    /*!< Block protected against program and erase operations */
-#define N25Q128A_SR_PRBOTTOM                 ((uint8_t)0x20)    /*!< Protected memory area defined by BLOCKPR starts from top or bottom */
-#define N25Q128A_SR_SRWREN                   ((uint8_t)0x80)    /*!< Status register write enable/disable */
-
-/* Nonvolatile Configuration Register */
-#define N25Q128A_NVCR_LOCK                   ((uint16_t)0x0001) /*!< Lock nonvolatile configuration register */
-#define N25Q128A_NVCR_DUAL                   ((uint16_t)0x0004) /*!< Dual I/O protocol */
-#define N25Q128A_NVCR_QUAB                   ((uint16_t)0x0008) /*!< Quad I/O protocol */
-#define N25Q128A_NVCR_RH                     ((uint16_t)0x0010) /*!< Reset/hold */
-#define N25Q128A_NVCR_ODS                    ((uint16_t)0x01C0) /*!< Output driver strength */
-#define N25Q128A_NVCR_XIP                    ((uint16_t)0x0E00) /*!< XIP mode at power-on reset */
-#define N25Q128A_NVCR_NB_DUMMY               ((uint16_t)0xF000) /*!< Number of dummy clock cycles */
-
-/* Volatile Configuration Register */
-#define N25Q128A_VCR_WRAP                    ((uint8_t)0x03)    /*!< Wrap */
-#define N25Q128A_VCR_XIP                     ((uint8_t)0x08)    /*!< XIP */
-#define N25Q128A_VCR_NB_DUMMY                ((uint8_t)0xF0)    /*!< Number of dummy clock cycles */
-
-/* Enhanced Volatile Configuration Register */
-#define N25Q128A_EVCR_ODS                    ((uint8_t)0x07)    /*!< Output driver strength */
-#define N25Q128A_EVCR_VPPA                   ((uint8_t)0x08)    /*!< Vpp accelerator */
-#define N25Q128A_EVCR_RH                     ((uint8_t)0x10)    /*!< Reset/hold */
-#define N25Q128A_EVCR_DUAL                   ((uint8_t)0x40)    /*!< Dual I/O protocol */
-#define N25Q128A_EVCR_QUAD                   ((uint8_t)0x80)    /*!< Quad I/O protocol */
-
-/* Flag Status Register */
-#define N25Q128A_FSR_PRERR                   ((uint8_t)0x02)    /*!< Protection error */
-#define N25Q128A_FSR_PGSUS                   ((uint8_t)0x04)    /*!< Program operation suspended */
-#define N25Q128A_FSR_VPPERR                  ((uint8_t)0x08)    /*!< Invalid voltage during program or erase */
-#define N25Q128A_FSR_PGERR                   ((uint8_t)0x10)    /*!< Program error */
-#define N25Q128A_FSR_ERERR                   ((uint8_t)0x20)    /*!< Erase error */
-#define N25Q128A_FSR_ERSUS                   ((uint8_t)0x40)    /*!< Erase operation suspended */
-#define N25Q128A_FSR_READY                   ((uint8_t)0x80)    /*!< Ready or command in progress */
-
-/**
-  * @}
-  */
-  
-/** @defgroup N25Q128A_Exported_Functions
-  * @{
-  */ 
-/**
-  * @}
-  */ 
-      
-/**
-  * @}
-  */ 
-
-/**
-  * @}
-  */ 
-
-/**
-  * @}
-  */
-  
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __N25Q128A_H */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r 85dbcff443aa -r 1a18e061d0ec Drivers/BSP/Components/ov9655/ov9655.c
--- a/Drivers/BSP/Components/ov9655/ov9655.c	Wed Nov 27 08:29:42 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,859 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    ov9655.c
-  * @author  MCD Application Team
-  * @brief   This file provides the OV9655 camera driver
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT(c) 2015 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 "ov9655.h"
-
-/** @addtogroup BSP
-  * @{
-  */ 
-
-/** @addtogroup Components
-  * @{
-  */ 
-  
-/** @addtogroup OV9655
-  * @brief     This file provides a set of functions needed to drive the 
-  *            OV9655 Camera module.
-  * @{
-  */
-
-/** @defgroup OV9655_Private_TypesDefinitions
-  * @{
-  */ 
-
-/**
-  * @}
-  */ 
-
-/** @defgroup OV9655_Private_Defines
-  * @{
-  */
-
-/**
-  * @}
-  */ 
-  
-/** @defgroup OV9655_Private_Macros
-  * @{
-  */
-     
-/**
-  * @}
-  */  
-  
-/** @defgroup OV9655_Private_FunctionPrototypes
-  * @{
-  */
-static uint64_t ov9655_ConvertValue(uint32_t feature, uint32_t value);
-/**
-  * @}
-  */ 
-  
-/** @defgroup OV9655_Private_Variables
-  * @{
-  */        
-
-CAMERA_DrvTypeDef   ov9655_drv = 
-{
-  ov9655_Init,
-  ov9655_ReadID,  
-  ov9655_Config,
-};
-
-/* Initialization sequence for VGA resolution (640x480)*/
-const unsigned char OV9655_VGA[][2]=
-{
-  {0x00, 0x00},
-  {0x01, 0x80},   
-  {0x02, 0x80},   
-  {0xb5, 0x00},   
-  {0x35, 0x00},   
-  {0xa8, 0xc1},   
-  {0x3a, 0xcc},   
-  {0x3d, 0x99},   
-  {0x77, 0x02},   
-  {0x13, 0xe7},   
-  {0x26, 0x72},   
-  {0x27, 0x08},   
-  {0x28, 0x08},   
-  {0x2c, 0x08},   
-  {0xab, 0x04},   
-  {0x6e, 0x00},   
-  {0x6d, 0x55},   
-  {0x00, 0x11},   
-  {0x10, 0x7b},   
-  {0xbb, 0xae},   
-  {0x11, 0x03},   
-  {0x72, 0x00},   
-  {0x3e, 0x0c},   
-  {0x74, 0x3a},   
-  {0x76, 0x01},   
-  {0x75, 0x35},   
-  {0x73, 0x00},   
-  {0xc7, 0x80},   
-  {0x62, 0x00},   
-  {0x63, 0x00},   
-  {0x64, 0x02},   
-  {0x65, 0x20},   
-  {0x66, 0x01},   
-  {0xc3, 0x4e},   
-  {0x33, 0x00},   
-  {0xa4, 0x50},   
-  {0xaa, 0x92},   
-  {0xc2, 0x01},   
-  {0xc1, 0xc8},   
-  {0x1e, 0x04},   
-  {0xa9, 0xef},   
-  {0x0e, 0x61},   
-  {0x39, 0x57},   
-  {0x0f, 0x48},
-  {0x24, 0x3c},   
-  {0x25, 0x36},   
-  {0x12, 0x63},   
-  {0x03, 0x12},   
-  {0x32, 0xff},   
-  {0x17, 0x16},   
-  {0x18, 0x02},   
-  {0x19, 0x01},   
-  {0x1a, 0x3d},   
-  {0x36, 0xfa},   
-  {0x69, 0x0a},   
-  {0x8c, 0x8d},   
-  {0xc0, 0xaa},   
-  {0x40, 0xd0},   
-  {0x43, 0x14},   
-  {0x44, 0xf0},   
-  {0x45, 0x46},   
-  {0x46, 0x62},   
-  {0x47, 0x2a},   
-  {0x48, 0x3c},   
-  {0x59, 0x85},   
-  {0x5a, 0xa9},   
-  {0x5b, 0x64},   
-  {0x5c, 0x84},   
-  {0x5d, 0x53},   
-  {0x5e, 0x0e},   
-  {0x6c, 0x0c},   
-  {0xc6, 0x85},   
-  {0xcb, 0xf0},   
-  {0xcc, 0xd8},   
-  {0x71, 0x78},   
-  {0xa5, 0x68},   
-  {0x6f, 0x9e},   
-  {0x42, 0xc0},   
-  {0x3f, 0x82},   
-  {0x8a, 0x23},   
-  {0x14, 0x3a},   
-  {0x3b, 0xcc},   
-  {0x34, 0x3d},   
-  {0x41, 0x40},   
-  {0xc9, 0xe0},   
-  {0xca, 0xe8},   
-  {0xcd, 0x93},   
-  {0x7a, 0x20},   
-  {0x7b, 0x1c},   
-  {0x7c, 0x28},   
-  {0x7d, 0x3c},   
-  {0x7e, 0x5a},   
-  {0x7f, 0x68},   
-  {0x80, 0x76},   
-  {0x81, 0x80},   
-  {0x82, 0x88},   
-  {0x83, 0x8f},   
-  {0x84, 0x96},   
-  {0x85, 0xa3},   
-  {0x86, 0xaf},   
-  {0x87, 0xc4},   
-  {0x88, 0xd7},   
-  {0x89, 0xe8},   
-  {0x4f, 0x98},   
-  {0x50, 0x98},   
-  {0x51, 0x00},   
-  {0x52, 0x28},   
-  {0x53, 0x70},   
-  {0x54, 0x98},   
-  {0x58, 0x1a},   
-  {0x6b, 0x5a},   
-  {0x90, 0x92},   
-  {0x91, 0x92},   
-  {0x9f, 0x90},   
-  {0xa0, 0x90},   
-  {0x16, 0x24},   
-  {0x2a, 0x00},   
-  {0x2b, 0x00},   
-  {0xac, 0x80},   
-  {0xad, 0x80},   
-  {0xae, 0x80},   
-  {0xaf, 0x80},   
-  {0xb2, 0xf2},   
-  {0xb3, 0x20},   
-  {0xb4, 0x20},   
-  {0xb6, 0xaf},   
-  {0x29, 0x15},   
-  {0x9d, 0x02},   
-  {0x9e, 0x02},   
-  {0x9e, 0x02},   
-  {0x04, 0x03},   
-  {0x05, 0x2e},   
-  {0x06, 0x2e},   
-  {0x07, 0x2e},   
-  {0x08, 0x2e},   
-  {0x2f, 0x2e},   
-  {0x4a, 0xe9},   
-  {0x4b, 0xdd},   
-  {0x4c, 0xdd},   
-  {0x4d, 0xdd},   
-  {0x4e, 0xdd},   
-  {0x70, 0x06},   
-  {0xa6, 0x40},   
-  {0xbc, 0x02},   
-  {0xbd, 0x01},   
-  {0xbe, 0x02},   
-  {0xbf, 0x01},
-};
-
-/* Initialization sequence for QVGA resolution (320x240) */
-const unsigned char OV9655_QVGA[][2]=
-{
-  {0x00, 0x00},
-  {0x01, 0x80},
-  {0x02, 0x80},
-  {0x03, 0x02},
-  {0x04, 0x03},
-  {0x09, 0x01},
-  {0x0b, 0x57},
-  {0x0e, 0x61},
-  {0x0f, 0x40},
-  {0x11, 0x01},
-  {0x12, 0x62},
-  {0x13, 0xc7},
-  {0x14, 0x3a},
-  {0x16, 0x24},
-  {0x17, 0x18},
-  {0x18, 0x04},
-  {0x19, 0x01},
-  {0x1a, 0x81},
-  {0x1e, 0x00},
-  {0x24, 0x3c},
-  {0x25, 0x36},
-  {0x26, 0x72},
-  {0x27, 0x08},
-  {0x28, 0x08},
-  {0x29, 0x15},
-  {0x2a, 0x00},
-  {0x2b, 0x00},
-  {0x2c, 0x08},
-  {0x32, 0x12},
-  {0x33, 0x00},
-  {0x34, 0x3f},
-  {0x35, 0x00},
-  {0x36, 0x3a},
-  {0x38, 0x72},
-  {0x39, 0x57},
-  {0x3a, 0xcc},
-  {0x3b, 0x04},
-  {0x3d, 0x99},
-  {0x3e, 0x02},
-  {0x3f, 0xc1},
-  {0x40, 0xc0},
-  {0x41, 0x41},
-  {0x42, 0xc0},
-  {0x43, 0x0a},
-  {0x44, 0xf0},
-  {0x45, 0x46},
-  {0x46, 0x62},
-  {0x47, 0x2a},
-  {0x48, 0x3c},
-  {0x4a, 0xfc},
-  {0x4b, 0xfc},
-  {0x4c, 0x7f},
-  {0x4d, 0x7f},
-  {0x4e, 0x7f},
-  {0x4f, 0x98},
-  {0x50, 0x98},
-  {0x51, 0x00},
-  {0x52, 0x28},
-  {0x53, 0x70},
-  {0x54, 0x98},
-  {0x58, 0x1a},
-  {0x59, 0x85},
-  {0x5a, 0xa9},
-  {0x5b, 0x64},
-  {0x5c, 0x84},
-  {0x5d, 0x53},
-  {0x5e, 0x0e},
-  {0x5f, 0xf0},
-  {0x60, 0xf0},
-  {0x61, 0xf0},
-  {0x62, 0x00},
-  {0x63, 0x00},
-  {0x64, 0x02},
-  {0x65, 0x20},
-  {0x66, 0x00},
-  {0x69, 0x0a},
-  {0x6b, 0x5a},
-  {0x6c, 0x04},
-  {0x6d, 0x55},
-  {0x6e, 0x00},
-  {0x6f, 0x9d},
-  {0x70, 0x21},
-  {0x71, 0x78},
-  {0x72, 0x11},
-  {0x73, 0x01},
-  {0x74, 0x10},
-  {0x75, 0x10},
-  {0x76, 0x01},
-  {0x77, 0x02},
-  {0x7A, 0x12},
-  {0x7B, 0x08},
-  {0x7C, 0x16},
-  {0x7D, 0x30},
-  {0x7E, 0x5e},
-  {0x7F, 0x72},
-  {0x80, 0x82},
-  {0x81, 0x8e},
-  {0x82, 0x9a},
-  {0x83, 0xa4},
-  {0x84, 0xac},
-  {0x85, 0xb8},
-  {0x86, 0xc3},
-  {0x87, 0xd6},
-  {0x88, 0xe6},
-  {0x89, 0xf2},
-  {0x8a, 0x24},
-  {0x8c, 0x80},
-  {0x90, 0x7d},
-  {0x91, 0x7b},
-  {0x9d, 0x02},
-  {0x9e, 0x02},
-  {0x9f, 0x7a},
-  {0xa0, 0x79},
-  {0xa1, 0x40},
-  {0xa4, 0x50},
-  {0xa5, 0x68},
-  {0xa6, 0x4a},
-  {0xa8, 0xc1},
-  {0xa9, 0xef},
-  {0xaa, 0x92},
-  {0xab, 0x04},
-  {0xac, 0x80},
-  {0xad, 0x80},
-  {0xae, 0x80},
-  {0xaf, 0x80},
-  {0xb2, 0xf2},
-  {0xb3, 0x20},
-  {0xb4, 0x20},
-  {0xb5, 0x00},
-  {0xb6, 0xaf},
-  {0xb6, 0xaf},
-  {0xbb, 0xae},
-  {0xbc, 0x7f},
-  {0xbd, 0x7f},
-  {0xbe, 0x7f},
-  {0xbf, 0x7f},
-  {0xbf, 0x7f},
-  {0xc0, 0xaa},
-  {0xc1, 0xc0},
-  {0xc2, 0x01},
-  {0xc3, 0x4e},
-  {0xc6, 0x05},
-  {0xc7, 0x81},
-  {0xc9, 0xe0},
-  {0xca, 0xe8},
-  {0xcb, 0xf0},
-  {0xcc, 0xd8},
-  {0xcd, 0x93},
-  {0x12, 0x63},
-  {0x40, 0x10},
-};
-
-/* Initialization sequence for QQVGA resolution (160x120) */
-const char OV9655_QQVGA[][2]=
-{
-  {0x00, 0x00},
-  {0x01, 0x80},
-  {0x02, 0x80},
-  {0x03, 0x02},
-  {0x04, 0x03},
-  {0x09, 0x01},
-  {0x0b, 0x57},
-  {0x0e, 0x61},
-  {0x0f, 0x40},
-  {0x11, 0x01},
-  {0x12, 0x62},
-  {0x13, 0xc7},
-  {0x14, 0x3a},
-  {0x16, 0x24},
-  {0x17, 0x18},
-  {0x18, 0x04},
-  {0x19, 0x01},
-  {0x1a, 0x81},
-  {0x1e, 0x00},
-  {0x24, 0x3c},
-  {0x25, 0x36},
-  {0x26, 0x72},
-  {0x27, 0x08},
-  {0x28, 0x08},
-  {0x29, 0x15},
-  {0x2a, 0x00},
-  {0x2b, 0x00},
-  {0x2c, 0x08},
-  {0x32, 0xa4},
-  {0x33, 0x00},
-  {0x34, 0x3f},
-  {0x35, 0x00},
-  {0x36, 0x3a},
-  {0x38, 0x72},
-  {0x39, 0x57},
-  {0x3a, 0xcc},
-  {0x3b, 0x04},
-  {0x3d, 0x99},
-  {0x3e, 0x0e},
-  {0x3f, 0xc1},
-  {0x40, 0xc0},
-  {0x41, 0x41},
-  {0x42, 0xc0},
-  {0x43, 0x0a},
-  {0x44, 0xf0},
-  {0x45, 0x46},
-  {0x46, 0x62},
-  {0x47, 0x2a},
-  {0x48, 0x3c},
-  {0x4a, 0xfc},
-  {0x4b, 0xfc},
-  {0x4c, 0x7f},
-  {0x4d, 0x7f},
-  {0x4e, 0x7f},
-  {0x4f, 0x98},
-  {0x50, 0x98},
-  {0x51, 0x00},
-  {0x52, 0x28},
-  {0x53, 0x70},
-  {0x54, 0x98},
-  {0x58, 0x1a},
-  {0x59, 0x85},
-  {0x5a, 0xa9},
-  {0x5b, 0x64},
-  {0x5c, 0x84},
-  {0x5d, 0x53},
-  {0x5e, 0x0e},
-  {0x5f, 0xf0},
-  {0x60, 0xf0},
-  {0x61, 0xf0},
-  {0x62, 0x00},
-  {0x63, 0x00},
-  {0x64, 0x02},
-  {0x65, 0x20},
-  {0x66, 0x00},
-  {0x69, 0x0a},
-  {0x6b, 0x5a},
-  {0x6c, 0x04},
-  {0x6d, 0x55},
-  {0x6e, 0x00},
-  {0x6f, 0x9d},
-  {0x70, 0x21},
-  {0x71, 0x78},
-  {0x72, 0x22},
-  {0x73, 0x02},
-  {0x74, 0x10},
-  {0x75, 0x10},
-  {0x76, 0x01},
-  {0x77, 0x02},
-  {0x7A, 0x12},
-  {0x7B, 0x08},
-  {0x7C, 0x16},
-  {0x7D, 0x30},
-  {0x7E, 0x5e},
-  {0x7F, 0x72},
-  {0x80, 0x82},
-  {0x81, 0x8e},
-  {0x82, 0x9a},
-  {0x83, 0xa4},
-  {0x84, 0xac},
-  {0x85, 0xb8},
-  {0x86, 0xc3},
-  {0x87, 0xd6},
-  {0x88, 0xe6},
-  {0x89, 0xf2},
-  {0x8a, 0x24},
-  {0x8c, 0x80},
-  {0x90, 0x7d},
-  {0x91, 0x7b},
-  {0x9d, 0x02},
-  {0x9e, 0x02},
-  {0x9f, 0x7a},
-  {0xa0, 0x79},
-  {0xa1, 0x40},
-  {0xa4, 0x50},
-  {0xa5, 0x68},
-  {0xa6, 0x4a},
-  {0xa8, 0xc1},
-  {0xa9, 0xef},
-  {0xaa, 0x92},
-  {0xab, 0x04},
-  {0xac, 0x80},
-  {0xad, 0x80},
-  {0xae, 0x80},
-  {0xaf, 0x80},
-  {0xb2, 0xf2},
-  {0xb3, 0x20},
-  {0xb4, 0x20},
-  {0xb5, 0x00},
-  {0xb6, 0xaf},
-  {0xb6, 0xaf},
-  {0xbb, 0xae},
-  {0xbc, 0x7f},
-  {0xbd, 0x7f},
-  {0xbe, 0x7f},
-  {0xbf, 0x7f},
-  {0xbf, 0x7f},
-  {0xc0, 0xaa},
-  {0xc1, 0xc0},
-  {0xc2, 0x01},
-  {0xc3, 0x4e},
-  {0xc6, 0x05},
-  {0xc7, 0x82},
-  {0xc9, 0xe0},
-  {0xca, 0xe8},
-  {0xcb, 0xf0},
-  {0xcc, 0xd8},
-  {0xcd, 0x93},
-  {0x12, 0x63},
-  {0x40, 0x10},
-};
-
-/**
-  * @}
-  */
-  
-/** @defgroup OV9655_Private_Functions
-  * @{
-  */ 
-  
-/**
-  * @brief  Initializes the OV9655 CAMERA component.
-  * @param  DeviceAddr: Device address on communication Bus.
-  * @param  resolution: Camera resolution
-  * @retval None
-  */
-void ov9655_Init(uint16_t DeviceAddr, uint32_t resolution)
-{
-  uint32_t index;
-  
-  /* Initialize I2C */
-  CAMERA_IO_Init();    
-  
-  /* Prepare the camera to be configured by resetting all its registers */
-  CAMERA_IO_Write(DeviceAddr, OV9655_SENSOR_COM7, 0x80);
-  CAMERA_Delay(200);
-  
-  /* Initialize OV9655 */
-  switch (resolution)
-  {
-  case CAMERA_R160x120:
-    {
-      for(index=0; index<(sizeof(OV9655_QQVGA)/2); index++)
-      {
-        CAMERA_IO_Write(DeviceAddr, OV9655_QQVGA[index][0], OV9655_QQVGA[index][1]);
-        CAMERA_Delay(2);
-      } 
-      break;
-    }    
-  case CAMERA_R320x240:
-    {
-      for(index=0; index<(sizeof(OV9655_QVGA)/2); index++)
-      {
-        CAMERA_IO_Write(DeviceAddr, OV9655_QVGA[index][0], OV9655_QVGA[index][1]);
-        CAMERA_Delay(2);
-      } 
-      break;
-    }
-  case CAMERA_R480x272:
-    {
-      /* Not supported resolution */
-      break;
-    }
-  case CAMERA_R640x480:
-    {
-      for(index=0; index<(sizeof(OV9655_VGA)/2); index++)
-      {
-        CAMERA_IO_Write(DeviceAddr, OV9655_VGA[index][0], OV9655_VGA[index][1]);
-        CAMERA_Delay(2);
-      }
-      break;
-    }    
-  default:
-    {
-      break;
-    }
-  }
-}
-
-/**
-  * @brief  Configures the OV9655 camera feature.
-  * @param  DeviceAddr: Device address on communication Bus.
-  * @param  feature: Camera feature to be configured
-  * @param  value: Value to be configured
-  * @param  brightness_value: Brightness value to be configured
-  * @retval None
-  */
-void ov9655_Config(uint16_t DeviceAddr, uint32_t feature, uint32_t value, uint32_t brightness_value)
-{
-  uint8_t tslb, mtx1, mtx2, mtx3, mtx4, mtx5, mtx6;
-  uint64_t value_tmp;
-  uint32_t br_value;
-  
-  /* Convert the input value into ov9655 parameters */
-  value_tmp = ov9655_ConvertValue(feature, value); 
-  br_value = (uint32_t)ov9655_ConvertValue(CAMERA_CONTRAST_BRIGHTNESS, brightness_value);
-    
-  switch(feature)
-  {
-  case CAMERA_CONTRAST_BRIGHTNESS:
-    {
-      CAMERA_IO_Write(DeviceAddr, OV9655_SENSOR_BRTN, br_value);
-      CAMERA_IO_Write(DeviceAddr, OV9655_SENSOR_CNST1, value_tmp);
-      break;
-    }
-  case CAMERA_BLACK_WHITE:
-  case CAMERA_COLOR_EFFECT:
-    {     
-      tslb = (uint8_t)(value_tmp >> 48);
-      mtx1 = (uint8_t)(value_tmp >> 40);
-      mtx2 = (uint8_t)(value_tmp >> 32);
-      mtx3 = (uint8_t)(value_tmp >> 24);
-      mtx4 = (uint8_t)(value_tmp >> 16);
-      mtx5 = (uint8_t)(value_tmp >> 8);
-      mtx6 = (uint8_t)(value_tmp);
-      CAMERA_IO_Write(DeviceAddr, OV9655_SENSOR_TSLB, tslb);
-      CAMERA_IO_Write(DeviceAddr, OV9655_SENSOR_MTX1, mtx1);
-      CAMERA_IO_Write(DeviceAddr, OV9655_SENSOR_MTX2, mtx2);
-      CAMERA_IO_Write(DeviceAddr, OV9655_SENSOR_MTX3, mtx3);
-      CAMERA_IO_Write(DeviceAddr, OV9655_SENSOR_MTX4, mtx4);
-      CAMERA_IO_Write(DeviceAddr, OV9655_SENSOR_MTX5, mtx5);
-      CAMERA_IO_Write(DeviceAddr, OV9655_SENSOR_MTX6, mtx6);
-      break;
-    }     
-  default:
-    {
-      break;
-    }
-  }
-}
-
-/**
-  * @brief  Read the OV9655 Camera identity.
-  * @param  DeviceAddr: Device address on communication Bus.
-  * @retval the OV9655 ID
-  */
-uint16_t ov9655_ReadID(uint16_t DeviceAddr)
-{
-  /* Initialize I2C */
-  CAMERA_IO_Init();
-  
-  /* Get the camera ID */
-  return (CAMERA_IO_Read(DeviceAddr, OV9655_SENSOR_PIDH));
-}
-
-/******************************************************************************
-                            Static Functions
-*******************************************************************************/
-/**
-  * @brief  Convert input values into ov9655 parameters.
-  * @param  feature: Camera feature to be configured
-  * @param  value: Value to be configured
-  * @retval The converted value
-  */
-static uint64_t ov9655_ConvertValue(uint32_t feature, uint32_t value)
-{
-  uint64_t ret = 0;
-  
-  switch(feature)
-  {
-  case CAMERA_BLACK_WHITE:
-    {
-      switch(value)
-      {
-      case CAMERA_BLACK_WHITE_BW:
-        {
-          ret =  OV9655_BLACK_WHITE_BW;
-          break;
-        }
-      case CAMERA_BLACK_WHITE_NEGATIVE:
-        {
-          ret =  OV9655_BLACK_WHITE_NEGATIVE;
-          break;
-        }
-      case CAMERA_BLACK_WHITE_BW_NEGATIVE:
-        {
-          ret =  OV9655_BLACK_WHITE_BW_NEGATIVE;
-          break;
-        }
-      case CAMERA_BLACK_WHITE_NORMAL:
-        {
-          ret =  OV9655_BLACK_WHITE_NORMAL;
-          break;
-        }
-      default:
-        {
-          ret =  OV9655_BLACK_WHITE_NORMAL;
-          break;
-        }
-      }
-      break;
-    }
-  case CAMERA_CONTRAST_BRIGHTNESS:
-    {
-      switch(value)
-      {
-      case CAMERA_BRIGHTNESS_LEVEL0:
-        {
-          ret =  OV9655_BRIGHTNESS_LEVEL0;
-          break;
-        }
-      case CAMERA_BRIGHTNESS_LEVEL1:
-        {
-          ret =  OV9655_BRIGHTNESS_LEVEL1;
-          break;
-        }
-      case CAMERA_BRIGHTNESS_LEVEL2:
-        {
-          ret =  OV9655_BRIGHTNESS_LEVEL2;
-          break;
-        }
-      case CAMERA_BRIGHTNESS_LEVEL3:
-        {
-          ret =  OV9655_BRIGHTNESS_LEVEL3;
-          break;
-        }
-      case CAMERA_BRIGHTNESS_LEVEL4:
-        {
-          ret =  OV9655_BRIGHTNESS_LEVEL4;
-          break;
-        }        
-      case CAMERA_CONTRAST_LEVEL0:
-        {
-          ret =  OV9655_CONTRAST_LEVEL0;
-          break;
-        }
-      case CAMERA_CONTRAST_LEVEL1:
-        {
-          ret =  OV9655_CONTRAST_LEVEL1;
-          break;
-        }
-      case CAMERA_CONTRAST_LEVEL2:
-        {
-          ret =  OV9655_CONTRAST_LEVEL2;
-          break;
-        }
-      case CAMERA_CONTRAST_LEVEL3:
-        {
-          ret =  OV9655_CONTRAST_LEVEL3;
-          break;
-        }
-      case CAMERA_CONTRAST_LEVEL4:
-        {
-          ret =  OV9655_CONTRAST_LEVEL4;
-          break;
-        }
-      default:
-        {
-          ret =  OV9655_CONTRAST_LEVEL0;
-          break;
-        }
-      }
-      break;
-    }
-  case CAMERA_COLOR_EFFECT:
-    {
-      switch(value)
-      {
-      case CAMERA_COLOR_EFFECT_ANTIQUE:
-        {
-          ret =  OV9655_COLOR_EFFECT_ANTIQUE;
-          break;
-        }
-      case CAMERA_COLOR_EFFECT_BLUE:
-        {
-          ret =  OV9655_COLOR_EFFECT_BLUE;
-          break;
-        }
-      case CAMERA_COLOR_EFFECT_GREEN:
-        {
-          ret =  OV9655_COLOR_EFFECT_GREEN;
-          break;
-        }
-      case CAMERA_COLOR_EFFECT_RED:
-        {
-          ret =  OV9655_COLOR_EFFECT_RED;
-          break;
-        }
-      case CAMERA_COLOR_EFFECT_NONE:
-      default:
-        {
-          ret =  OV9655_COLOR_EFFECT_NONE;
-          break;
-        }
-      }
-      break;
-    default:
-      {
-        ret = 0;
-        break;
-      }    
-    }
-  }
-  
-  return ret;
-}
-         
-/**
-  * @}
-  */ 
-  
-/**
-  * @}
-  */ 
-
-/**
-  * @}
-  */ 
-  
-/**
-  * @}
-  */  
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r 85dbcff443aa -r 1a18e061d0ec Drivers/BSP/Components/ov9655/ov9655.h
--- a/Drivers/BSP/Components/ov9655/ov9655.h	Wed Nov 27 08:29:42 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,157 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    ov9655.h
-  * @author  MCD Application Team
-  * @brief   This file contains all the functions prototypes for the ov9655.c
-  *          driver.
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT(c) 2015 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.
-  *
-  ******************************************************************************
-  */ 
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __OV9655_H
-#define __OV9655_H
-
-#ifdef __cplusplus
- extern "C" {
-#endif 
-
-/* Includes ------------------------------------------------------------------*/
-#include "../Common/camera.h"
-   
-/** @addtogroup BSP
-  * @{
-  */ 
-
-/** @addtogroup Components
-  * @{
-  */ 
-  
-/** @addtogroup ov9655
-  * @{
-  */
-
-/** @defgroup OV9655_Exported_Types
-  * @{
-  */
-     
-/**
-  * @}
-  */ 
-
-/** @defgroup OV9655_Exported_Constants
-  * @{
-  */
-/** 
-  * @brief  OV9655 ID  
-  */  
-#define  OV9655_ID    0x96
-/** 
-  * @brief  OV9655 Registers  
-  */
-
-/* OV9655 Registers definition */
-#define OV9655_SENSOR_PIDH              0x0A
-#define OV9655_SENSOR_PIDL              0x0B
-#define OV9655_SENSOR_COM7              0x12
-#define OV9655_SENSOR_TSLB              0x3A
-#define OV9655_SENSOR_MTX1              0x4F
-#define OV9655_SENSOR_MTX2              0x50
-#define OV9655_SENSOR_MTX3              0x51
-#define OV9655_SENSOR_MTX4              0x52
-#define OV9655_SENSOR_MTX5              0x53
-#define OV9655_SENSOR_MTX6              0x54
-#define OV9655_SENSOR_BRTN              0x55
-#define OV9655_SENSOR_CNST1             0x56
-#define OV9655_SENSOR_CNST2             0x57
-
-/** 
- * @brief  OV9655 Features Parameters  
- */
-#define OV9655_BRIGHTNESS_LEVEL0        0xB0     /* Brightness level -2         */
-#define OV9655_BRIGHTNESS_LEVEL1        0x98     /* Brightness level -1         */
-#define OV9655_BRIGHTNESS_LEVEL2        0x00     /* Brightness level 0          */
-#define OV9655_BRIGHTNESS_LEVEL3        0x18     /* Brightness level +1         */
-#define OV9655_BRIGHTNESS_LEVEL4        0x30     /* Brightness level +2         */
-
-#define OV9655_BLACK_WHITE_BW           0xCC000000000000  /* Black and white effect      */
-#define OV9655_BLACK_WHITE_NEGATIVE     0xEC808000008080  /* Negative effect             */
-#define OV9655_BLACK_WHITE_BW_NEGATIVE  0xEC000000000000  /* BW and Negative effect      */
-#define OV9655_BLACK_WHITE_NORMAL       0xCC808000008080  /* Normal effect               */
-
-#define OV9655_CONTRAST_LEVEL0          0x30     /* Contrast level -2           */
-#define OV9655_CONTRAST_LEVEL1          0x38     /* Contrast level -1           */
-#define OV9655_CONTRAST_LEVEL2          0x40     /* Contrast level 0            */
-#define OV9655_CONTRAST_LEVEL3          0x50     /* Contrast level +1           */
-#define OV9655_CONTRAST_LEVEL4          0x60     /* Contrast level +2           */
-
-#define OV9655_COLOR_EFFECT_NONE        0xCC808000008080  /* No color effect             */
-#define OV9655_COLOR_EFFECT_ANTIQUE     0xCC000020F00000  /* Antique effect              */
-#define OV9655_COLOR_EFFECT_BLUE        0xCC000000000060  /* Blue effect                 */
-#define OV9655_COLOR_EFFECT_GREEN       0xCC000000008000  /* Green effect                */
-#define OV9655_COLOR_EFFECT_RED         0xCC600000000000  /* Red effect                  */
-/**
-  * @}
-  */
-  
-/** @defgroup OV9655_Exported_Functions
-  * @{
-  */ 
-void     ov9655_Init(uint16_t DeviceAddr, uint32_t resolution);
-void     ov9655_Config(uint16_t DeviceAddr, uint32_t feature, uint32_t value, uint32_t BR_value);
-uint16_t ov9655_ReadID(uint16_t DeviceAddr);
-
-void     CAMERA_IO_Init(void);
-void     CAMERA_IO_Write(uint8_t addr, uint8_t reg, uint8_t value);
-uint8_t  CAMERA_IO_Read(uint8_t addr, uint8_t reg);
-void     CAMERA_Delay(uint32_t delay);
-
-/* CAMERA driver structure */
-extern CAMERA_DrvTypeDef   ov9655_drv;
-/**
-  * @}
-  */    
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __OV9655_H */
-/**
-  * @}
-  */ 
-
-/**
-  * @}
-  */ 
-
-/**
-  * @}
-  */ 
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r 85dbcff443aa -r 1a18e061d0ec Drivers/BSP/Components/rk043fn48h/rk043fn48h.h
--- a/Drivers/BSP/Components/rk043fn48h/rk043fn48h.h	Wed Nov 27 08:29:42 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,119 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    rk043fn48h.h
-  * @author  MCD Application Team
-  * @brief   This file contains all the constants parameters for the RK043FN48H-CT672B
-  *          LCD component.
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT(c) 2015 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.
-  *
-  ******************************************************************************
-  */ 
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __RK043FN48H_H
-#define __RK043FN48H_H
-
-#ifdef __cplusplus
- extern "C" {
-#endif 
-
-/* Includes ------------------------------------------------------------------*/  
-
-/** @addtogroup BSP
-  * @{
-  */ 
-
-/** @addtogroup Components
-  * @{
-  */ 
-  
-/** @addtogroup rk043fn48h
-  * @{
-  */
-
-/** @defgroup RK043FN48H_Exported_Types
-  * @{
-  */
-   
-/**
-  * @}
-  */ 
-
-/** @defgroup RK043FN48H_Exported_Constants
-  * @{
-  */
-
-/** 
-  * @brief  RK043FN48H Size  
-  */     
-#define  RK043FN48H_WIDTH    ((uint16_t)480)          /* LCD PIXEL WIDTH            */
-#define  RK043FN48H_HEIGHT   ((uint16_t)272)          /* LCD PIXEL HEIGHT           */
-
-/** 
-  * @brief  RK043FN48H Timing  
-  */     
-#define  RK043FN48H_HSYNC            ((uint16_t)41)   /* Horizontal synchronization */
-#define  RK043FN48H_HBP              ((uint16_t)13)   /* Horizontal back porch      */
-#define  RK043FN48H_HFP              ((uint16_t)32)   /* Horizontal front porch     */
-#define  RK043FN48H_VSYNC            ((uint16_t)10)   /* Vertical synchronization   */
-#define  RK043FN48H_VBP              ((uint16_t)2)    /* Vertical back porch        */
-#define  RK043FN48H_VFP              ((uint16_t)2)    /* Vertical front porch       */
-
-/** 
-  * @brief  RK043FN48H frequency divider  
-  */    
-#define  RK043FN48H_FREQUENCY_DIVIDER    5            /* LCD Frequency divider      */
-/**
-  * @}
-  */
-  
-/** @defgroup RK043FN48H_Exported_Functions
-  * @{
-  */
-
-/**
-  * @}
-  */    
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __RK043FN48H_H */
-/**
-  * @}
-  */ 
-
-/**
-  * @}
-  */ 
-
-/**
-  * @}
-  */ 
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r 85dbcff443aa -r 1a18e061d0ec Drivers/BSP/Components/wm8994/wm8994.c
--- a/Drivers/BSP/Components/wm8994/wm8994.c	Wed Nov 27 08:29:42 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1075 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    wm8994.c
-  * @author  MCD Application Team
-  * @brief   This file provides the WM8994 Audio Codec driver.
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT(c) 2016 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 "wm8994.h"
-
-/** @addtogroup BSP
-  * @{
-  */
-  
-/** @addtogroup Components
-  * @{
-  */ 
-
-/** @addtogroup wm8994
-  * @brief     This file provides a set of functions needed to drive the 
-  *            WM8994 audio codec.
-  * @{
-  */
-
-/** @defgroup WM8994_Private_Types
-  * @{
-  */
-
-/**
-  * @}
-  */ 
-  
-/** @defgroup WM8994_Private_Defines
-  * @{
-  */
-/* Uncomment this line to enable verifying data sent to codec after each write 
-   operation (for debug purpose) */
-#if !defined (VERIFY_WRITTENDATA)  
-/*#define VERIFY_WRITTENDATA*/
-#endif /* VERIFY_WRITTENDATA */
-/**
-  * @}
-  */ 
-
-/** @defgroup WM8994_Private_Macros
-  * @{
-  */
-
-/**
-  * @}
-  */ 
-  
-/** @defgroup WM8994_Private_Variables
-  * @{
-  */
-
-/* Audio codec driver structure initialization */  
-AUDIO_DrvTypeDef wm8994_drv = 
-{
-  wm8994_Init,
-  wm8994_DeInit,
-  wm8994_ReadID,
-
-  wm8994_Play,
-  wm8994_Pause,
-  wm8994_Resume,
-  wm8994_Stop,  
-
-  wm8994_SetFrequency,
-  wm8994_SetVolume,
-  wm8994_SetMute,  
-  wm8994_SetOutputMode,
-
-  wm8994_Reset
-};
-
-static uint32_t outputEnabled = 0;
-static uint32_t inputEnabled = 0;
-static uint8_t ColdStartup = 1;
-
-/**
-  * @}
-  */ 
-
-/** @defgroup WM8994_Function_Prototypes
-  * @{
-  */
-static uint8_t CODEC_IO_Write(uint8_t Addr, uint16_t Reg, uint16_t Value);
-/**
-  * @}
-  */ 
-
-
-/** @defgroup WM8994_Private_Functions
-  * @{
-  */ 
-
-/**
-  * @brief Initializes the audio codec and the control interface.
-  * @param DeviceAddr: Device address on communication Bus.   
-  * @param OutputInputDevice: can be OUTPUT_DEVICE_SPEAKER, OUTPUT_DEVICE_HEADPHONE,
-  *  OUTPUT_DEVICE_BOTH, OUTPUT_DEVICE_AUTO, INPUT_DEVICE_DIGITAL_MICROPHONE_1,
-  *  INPUT_DEVICE_DIGITAL_MICROPHONE_2, INPUT_DEVICE_DIGITAL_MIC1_MIC2, 
-  *  INPUT_DEVICE_INPUT_LINE_1 or INPUT_DEVICE_INPUT_LINE_2.
-  * @param Volume: Initial volume level (from 0 (Mute) to 100 (Max))
-  * @param AudioFreq: Audio Frequency 
-  * @retval 0 if correct communication, else wrong communication
-  */
-uint32_t wm8994_Init(uint16_t DeviceAddr, uint16_t OutputInputDevice, uint8_t Volume, uint32_t AudioFreq)
-{
-  uint32_t counter = 0;
-  uint16_t output_device = OutputInputDevice & 0xFF;
-  uint16_t input_device = OutputInputDevice & 0xFF00;
-  uint16_t power_mgnt_reg_1 = 0;
-  
-  /* Initialize the Control interface of the Audio Codec */
-  AUDIO_IO_Init();
-  /* wm8994 Errata Work-Arounds */
-  counter += CODEC_IO_Write(DeviceAddr, 0x102, 0x0003);
-  counter += CODEC_IO_Write(DeviceAddr, 0x817, 0x0000);
-  counter += CODEC_IO_Write(DeviceAddr, 0x102, 0x0000);
-
-  /* Enable VMID soft start (fast), Start-up Bias Current Enabled */
-  counter += CODEC_IO_Write(DeviceAddr, 0x39, 0x006C);
-
-    /* Enable bias generator, Enable VMID */
-  if (input_device > 0)
-  {
-    counter += CODEC_IO_Write(DeviceAddr, 0x01, 0x0013);
-  }
-  else
-  {
-    counter += CODEC_IO_Write(DeviceAddr, 0x01, 0x0003);
-  }
-
-  /* Add Delay */
-  AUDIO_IO_Delay(50);
-
-  /* Path Configurations for output */
-  if (output_device > 0)
-  {
-    outputEnabled = 1;
-
-    switch (output_device)
-    {
-    case OUTPUT_DEVICE_SPEAKER:
-      /* Enable DAC1 (Left), Enable DAC1 (Right),
-      Disable DAC2 (Left), Disable DAC2 (Right)*/
-      counter += CODEC_IO_Write(DeviceAddr, 0x05, 0x0C0C);
-
-      /* Enable the AIF1 Timeslot 0 (Left) to DAC 1 (Left) mixer path */
-      counter += CODEC_IO_Write(DeviceAddr, 0x601, 0x0000);
-
-      /* Enable the AIF1 Timeslot 0 (Right) to DAC 1 (Right) mixer path */
-      counter += CODEC_IO_Write(DeviceAddr, 0x602, 0x0000);
-
-      /* Disable the AIF1 Timeslot 1 (Left) to DAC 2 (Left) mixer path */
-      counter += CODEC_IO_Write(DeviceAddr, 0x604, 0x0002);
-
-      /* Disable the AIF1 Timeslot 1 (Right) to DAC 2 (Right) mixer path */
-      counter += CODEC_IO_Write(DeviceAddr, 0x605, 0x0002);
-      break;
-
-    case OUTPUT_DEVICE_HEADPHONE:
-      /* Disable DAC1 (Left), Disable DAC1 (Right),
-      Enable DAC2 (Left), Enable DAC2 (Right)*/
-      counter += CODEC_IO_Write(DeviceAddr, 0x05, 0x0303);
-
-      /* Enable the AIF1 Timeslot 0 (Left) to DAC 1 (Left) mixer path */
-      counter += CODEC_IO_Write(DeviceAddr, 0x601, 0x0001);
-
-      /* Enable the AIF1 Timeslot 0 (Right) to DAC 1 (Right) mixer path */
-      counter += CODEC_IO_Write(DeviceAddr, 0x602, 0x0001);
-
-      /* Disable the AIF1 Timeslot 1 (Left) to DAC 2 (Left) mixer path */
-      counter += CODEC_IO_Write(DeviceAddr, 0x604, 0x0000);
-
-      /* Disable the AIF1 Timeslot 1 (Right) to DAC 2 (Right) mixer path */
-      counter += CODEC_IO_Write(DeviceAddr, 0x605, 0x0000);
-      break;
-
-    case OUTPUT_DEVICE_BOTH:
-      if (input_device == INPUT_DEVICE_DIGITAL_MIC1_MIC2)
-      {
-        /* Enable DAC1 (Left), Enable DAC1 (Right),
-        also Enable DAC2 (Left), Enable DAC2 (Right)*/
-        counter += CODEC_IO_Write(DeviceAddr, 0x05, 0x0303 | 0x0C0C);
-        
-        /* Enable the AIF1 Timeslot 0 (Left) to DAC 1 (Left) mixer path
-        Enable the AIF1 Timeslot 1 (Left) to DAC 1 (Left) mixer path */
-        counter += CODEC_IO_Write(DeviceAddr, 0x601, 0x0003);
-        
-        /* Enable the AIF1 Timeslot 0 (Right) to DAC 1 (Right) mixer path
-        Enable the AIF1 Timeslot 1 (Right) to DAC 1 (Right) mixer path */
-        counter += CODEC_IO_Write(DeviceAddr, 0x602, 0x0003);
-        
-        /* Enable the AIF1 Timeslot 0 (Left) to DAC 2 (Left) mixer path
-        Enable the AIF1 Timeslot 1 (Left) to DAC 2 (Left) mixer path  */
-        counter += CODEC_IO_Write(DeviceAddr, 0x604, 0x0003);
-        
-        /* Enable the AIF1 Timeslot 0 (Right) to DAC 2 (Right) mixer path
-        Enable the AIF1 Timeslot 1 (Right) to DAC 2 (Right) mixer path */
-        counter += CODEC_IO_Write(DeviceAddr, 0x605, 0x0003);
-      }
-      else
-      {
-        /* Enable DAC1 (Left), Enable DAC1 (Right),
-        also Enable DAC2 (Left), Enable DAC2 (Right)*/
-        counter += CODEC_IO_Write(DeviceAddr, 0x05, 0x0303 | 0x0C0C);
-        
-        /* Enable the AIF1 Timeslot 0 (Left) to DAC 1 (Left) mixer path */
-        counter += CODEC_IO_Write(DeviceAddr, 0x601, 0x0001);
-        
-        /* Enable the AIF1 Timeslot 0 (Right) to DAC 1 (Right) mixer path */
-        counter += CODEC_IO_Write(DeviceAddr, 0x602, 0x0001);
-        
-        /* Enable the AIF1 Timeslot 1 (Left) to DAC 2 (Left) mixer path */
-        counter += CODEC_IO_Write(DeviceAddr, 0x604, 0x0002);
-        
-        /* Enable the AIF1 Timeslot 1 (Right) to DAC 2 (Right) mixer path */
-        counter += CODEC_IO_Write(DeviceAddr, 0x605, 0x0002);      
-      }
-      break;
-
-    case OUTPUT_DEVICE_AUTO :
-    default:
-      /* Disable DAC1 (Left), Disable DAC1 (Right),
-      Enable DAC2 (Left), Enable DAC2 (Right)*/
-      counter += CODEC_IO_Write(DeviceAddr, 0x05, 0x0303);
-
-      /* Enable the AIF1 Timeslot 0 (Left) to DAC 1 (Left) mixer path */
-      counter += CODEC_IO_Write(DeviceAddr, 0x601, 0x0001);
-
-      /* Enable the AIF1 Timeslot 0 (Right) to DAC 1 (Right) mixer path */
-      counter += CODEC_IO_Write(DeviceAddr, 0x602, 0x0001);
-
-      /* Disable the AIF1 Timeslot 1 (Left) to DAC 2 (Left) mixer path */
-      counter += CODEC_IO_Write(DeviceAddr, 0x604, 0x0000);
-
-      /* Disable the AIF1 Timeslot 1 (Right) to DAC 2 (Right) mixer path */
-      counter += CODEC_IO_Write(DeviceAddr, 0x605, 0x0000);
-      break;
-    }
-  }
-  else
-  {
-    outputEnabled = 0;
-  }
-
-  /* Path Configurations for input */
-  if (input_device > 0)
-  {
-    inputEnabled = 1;
-    switch (input_device)
-    {
-    case INPUT_DEVICE_DIGITAL_MICROPHONE_2 :
-      /* Enable AIF1ADC2 (Left), Enable AIF1ADC2 (Right)
-       * Enable DMICDAT2 (Left), Enable DMICDAT2 (Right)
-       * Enable Left ADC, Enable Right ADC */
-      counter += CODEC_IO_Write(DeviceAddr, 0x04, 0x0C30);
-
-      /* Enable AIF1 DRC2 Signal Detect & DRC in AIF1ADC2 Left/Right Timeslot 1 */
-      counter += CODEC_IO_Write(DeviceAddr, 0x450, 0x00DB);
-
-      /* Disable IN1L, IN1R, IN2L, IN2R, Enable Thermal sensor & shutdown */
-      counter += CODEC_IO_Write(DeviceAddr, 0x02, 0x6000);
-
-      /* Enable the DMIC2(Left) to AIF1 Timeslot 1 (Left) mixer path */
-      counter += CODEC_IO_Write(DeviceAddr, 0x608, 0x0002);
-
-      /* Enable the DMIC2(Right) to AIF1 Timeslot 1 (Right) mixer path */
-      counter += CODEC_IO_Write(DeviceAddr, 0x609, 0x0002);
-
-      /* GPIO1 pin configuration GP1_DIR = output, GP1_FN = AIF1 DRC2 signal detect */
-      counter += CODEC_IO_Write(DeviceAddr, 0x700, 0x000E);
-      break;
-
-    case INPUT_DEVICE_INPUT_LINE_1 :
-      /* IN1LN_TO_IN1L, IN1LP_TO_VMID, IN1RN_TO_IN1R, IN1RP_TO_VMID */
-      counter += CODEC_IO_Write(DeviceAddr, 0x28, 0x0011);
-
-      /* Disable mute on IN1L_TO_MIXINL and +30dB on IN1L PGA output */
-      counter += CODEC_IO_Write(DeviceAddr, 0x29, 0x0035);
-
-      /* Disable mute on IN1R_TO_MIXINL, Gain = +30dB */
-      counter += CODEC_IO_Write(DeviceAddr, 0x2A, 0x0035);
-
-      /* Enable AIF1ADC1 (Left), Enable AIF1ADC1 (Right)
-       * Enable Left ADC, Enable Right ADC */
-      counter += CODEC_IO_Write(DeviceAddr, 0x04, 0x0303);
-
-      /* Enable AIF1 DRC1 Signal Detect & DRC in AIF1ADC1 Left/Right Timeslot 0 */
-      counter += CODEC_IO_Write(DeviceAddr, 0x440, 0x00DB);
-
-      /* Enable IN1L and IN1R, Disable IN2L and IN2R, Enable Thermal sensor & shutdown */
-      counter += CODEC_IO_Write(DeviceAddr, 0x02, 0x6350);
-
-      /* Enable the ADCL(Left) to AIF1 Timeslot 0 (Left) mixer path */
-      counter += CODEC_IO_Write(DeviceAddr, 0x606, 0x0002);
-
-      /* Enable the ADCR(Right) to AIF1 Timeslot 0 (Right) mixer path */
-      counter += CODEC_IO_Write(DeviceAddr, 0x607, 0x0002);
-
-      /* GPIO1 pin configuration GP1_DIR = output, GP1_FN = AIF1 DRC1 signal detect */
-      counter += CODEC_IO_Write(DeviceAddr, 0x700, 0x000D);
-      break;
-
-    case INPUT_DEVICE_DIGITAL_MICROPHONE_1 :
-      /* Enable AIF1ADC1 (Left), Enable AIF1ADC1 (Right)
-       * Enable DMICDAT1 (Left), Enable DMICDAT1 (Right)
-       * Enable Left ADC, Enable Right ADC */
-      counter += CODEC_IO_Write(DeviceAddr, 0x04, 0x030C);
-
-      /* Enable AIF1 DRC2 Signal Detect & DRC in AIF1ADC1 Left/Right Timeslot 0 */
-      counter += CODEC_IO_Write(DeviceAddr, 0x440, 0x00DB);
-
-      /* Disable IN1L, IN1R, IN2L, IN2R, Enable Thermal sensor & shutdown */
-      counter += CODEC_IO_Write(DeviceAddr, 0x02, 0x6350);
-
-      /* Enable the DMIC2(Left) to AIF1 Timeslot 0 (Left) mixer path */
-      counter += CODEC_IO_Write(DeviceAddr, 0x606, 0x0002);
-
-      /* Enable the DMIC2(Right) to AIF1 Timeslot 0 (Right) mixer path */
-      counter += CODEC_IO_Write(DeviceAddr, 0x607, 0x0002);
-
-      /* GPIO1 pin configuration GP1_DIR = output, GP1_FN = AIF1 DRC1 signal detect */
-      counter += CODEC_IO_Write(DeviceAddr, 0x700, 0x000D);
-      break; 
-    case INPUT_DEVICE_DIGITAL_MIC1_MIC2 :
-      /* Enable AIF1ADC1 (Left), Enable AIF1ADC1 (Right)
-       * Enable DMICDAT1 (Left), Enable DMICDAT1 (Right)
-       * Enable Left ADC, Enable Right ADC */
-      counter += CODEC_IO_Write(DeviceAddr, 0x04, 0x0F3C);
-
-      /* Enable AIF1 DRC2 Signal Detect & DRC in AIF1ADC2 Left/Right Timeslot 1 */
-      counter += CODEC_IO_Write(DeviceAddr, 0x450, 0x00DB);
-      
-      /* Enable AIF1 DRC2 Signal Detect & DRC in AIF1ADC1 Left/Right Timeslot 0 */
-      counter += CODEC_IO_Write(DeviceAddr, 0x440, 0x00DB);
-
-      /* Disable IN1L, IN1R, Enable IN2L, IN2R, Thermal sensor & shutdown */
-      counter += CODEC_IO_Write(DeviceAddr, 0x02, 0x63A0);
-
-      /* Enable the DMIC2(Left) to AIF1 Timeslot 0 (Left) mixer path */
-      counter += CODEC_IO_Write(DeviceAddr, 0x606, 0x0002);
-
-      /* Enable the DMIC2(Right) to AIF1 Timeslot 0 (Right) mixer path */
-      counter += CODEC_IO_Write(DeviceAddr, 0x607, 0x0002);
-
-      /* Enable the DMIC2(Left) to AIF1 Timeslot 1 (Left) mixer path */
-      counter += CODEC_IO_Write(DeviceAddr, 0x608, 0x0002);
-
-      /* Enable the DMIC2(Right) to AIF1 Timeslot 1 (Right) mixer path */
-      counter += CODEC_IO_Write(DeviceAddr, 0x609, 0x0002);
-      
-      /* GPIO1 pin configuration GP1_DIR = output, GP1_FN = AIF1 DRC1 signal detect */
-      counter += CODEC_IO_Write(DeviceAddr, 0x700, 0x000D);
-      break;    
-    case INPUT_DEVICE_INPUT_LINE_2 :
-    default:
-      /* Actually, no other input devices supported */
-      counter++;
-      break;
-    }
-  }
-  else
-  {
-    inputEnabled = 0;
-  }
-  
-  /*  Clock Configurations */
-  switch (AudioFreq)
-  {
-  case  AUDIO_FREQUENCY_8K:
-    /* AIF1 Sample Rate = 8 (KHz), ratio=256 */ 
-    counter += CODEC_IO_Write(DeviceAddr, 0x210, 0x0003);
-    break;
-    
-  case  AUDIO_FREQUENCY_16K:
-    /* AIF1 Sample Rate = 16 (KHz), ratio=256 */ 
-    counter += CODEC_IO_Write(DeviceAddr, 0x210, 0x0033);
-    break;
-
-  case  AUDIO_FREQUENCY_32K:
-    /* AIF1 Sample Rate = 32 (KHz), ratio=256 */ 
-    counter += CODEC_IO_Write(DeviceAddr, 0x210, 0x0063);
-    break;
-    
-  case  AUDIO_FREQUENCY_48K:
-    /* AIF1 Sample Rate = 48 (KHz), ratio=256 */ 
-    counter += CODEC_IO_Write(DeviceAddr, 0x210, 0x0083);
-    break;
-    
-  case  AUDIO_FREQUENCY_96K:
-    /* AIF1 Sample Rate = 96 (KHz), ratio=256 */ 
-    counter += CODEC_IO_Write(DeviceAddr, 0x210, 0x00A3);
-    break;
-    
-  case  AUDIO_FREQUENCY_11K:
-    /* AIF1 Sample Rate = 11.025 (KHz), ratio=256 */ 
-    counter += CODEC_IO_Write(DeviceAddr, 0x210, 0x0013);
-    break;
-    
-  case  AUDIO_FREQUENCY_22K:
-    /* AIF1 Sample Rate = 22.050 (KHz), ratio=256 */ 
-    counter += CODEC_IO_Write(DeviceAddr, 0x210, 0x0043);
-    break;
-    
-  case  AUDIO_FREQUENCY_44K:
-    /* AIF1 Sample Rate = 44.1 (KHz), ratio=256 */ 
-    counter += CODEC_IO_Write(DeviceAddr, 0x210, 0x0073);
-    break; 
-    
-  default:
-    /* AIF1 Sample Rate = 48 (KHz), ratio=256 */ 
-    counter += CODEC_IO_Write(DeviceAddr, 0x210, 0x0083);
-    break; 
-  }
-
-  if(input_device == INPUT_DEVICE_DIGITAL_MIC1_MIC2)
-  {
-  /* AIF1 Word Length = 16-bits, AIF1 Format = DSP mode */
-  counter += CODEC_IO_Write(DeviceAddr, 0x300, 0x4018);    
-  }
-  else
-  {
-  /* AIF1 Word Length = 16-bits, AIF1 Format = I2S (Default Register Value) */
-  counter += CODEC_IO_Write(DeviceAddr, 0x300, 0x4010);
-  }
-  
-  /* slave mode */
-  counter += CODEC_IO_Write(DeviceAddr, 0x302, 0x0000);
-  
-  /* Enable the DSP processing clock for AIF1, Enable the core clock */
-  counter += CODEC_IO_Write(DeviceAddr, 0x208, 0x000A);
-  
-  /* Enable AIF1 Clock, AIF1 Clock Source = MCLK1 pin */
-  counter += CODEC_IO_Write(DeviceAddr, 0x200, 0x0001);
-
-  if (output_device > 0)  /* Audio output selected */
-  {
-    if (output_device == OUTPUT_DEVICE_HEADPHONE)
-    {      
-      /* Select DAC1 (Left) to Left Headphone Output PGA (HPOUT1LVOL) path */
-      counter += CODEC_IO_Write(DeviceAddr, 0x2D, 0x0100);
-      
-      /* Select DAC1 (Right) to Right Headphone Output PGA (HPOUT1RVOL) path */
-      counter += CODEC_IO_Write(DeviceAddr, 0x2E, 0x0100);    
-            
-      /* Startup sequence for Headphone */
-      if(ColdStartup)
-      {
-        counter += CODEC_IO_Write(DeviceAddr,0x110,0x8100);
-        
-        ColdStartup=0;
-        /* Add Delay */
-        AUDIO_IO_Delay(300);
-      }
-      else /* Headphone Warm Start-Up */
-      { 
-        counter += CODEC_IO_Write(DeviceAddr,0x110,0x8108);
-        /* Add Delay */
-        AUDIO_IO_Delay(50);
-      }
-
-      /* Soft un-Mute the AIF1 Timeslot 0 DAC1 path L&R */
-      counter += CODEC_IO_Write(DeviceAddr, 0x420, 0x0000);
-    }
-    /* Analog Output Configuration */
-
-    /* Enable SPKRVOL PGA, Enable SPKMIXR, Enable SPKLVOL PGA, Enable SPKMIXL */
-    counter += CODEC_IO_Write(DeviceAddr, 0x03, 0x0300);
-
-    /* Left Speaker Mixer Volume = 0dB */
-    counter += CODEC_IO_Write(DeviceAddr, 0x22, 0x0000);
-
-    /* Speaker output mode = Class D, Right Speaker Mixer Volume = 0dB ((0x23, 0x0100) = class AB)*/
-    counter += CODEC_IO_Write(DeviceAddr, 0x23, 0x0000);
-
-    /* Unmute DAC2 (Left) to Left Speaker Mixer (SPKMIXL) path,
-    Unmute DAC2 (Right) to Right Speaker Mixer (SPKMIXR) path */
-    counter += CODEC_IO_Write(DeviceAddr, 0x36, 0x0300);
-
-    /* Enable bias generator, Enable VMID, Enable SPKOUTL, Enable SPKOUTR */
-    counter += CODEC_IO_Write(DeviceAddr, 0x01, 0x3003);
-
-    /* Headphone/Speaker Enable */
-
-    if (input_device == INPUT_DEVICE_DIGITAL_MIC1_MIC2)
-    {
-    /* Enable Class W, Class W Envelope Tracking = AIF1 Timeslots 0 and 1 */
-    counter += CODEC_IO_Write(DeviceAddr, 0x51, 0x0205);
-    }
-    else
-    {
-    /* Enable Class W, Class W Envelope Tracking = AIF1 Timeslot 0 */
-    counter += CODEC_IO_Write(DeviceAddr, 0x51, 0x0005);      
-    }
-
-    /* Enable bias generator, Enable VMID, Enable HPOUT1 (Left) and Enable HPOUT1 (Right) input stages */
-    /* idem for Speaker */
-    power_mgnt_reg_1 |= 0x0303 | 0x3003;
-    counter += CODEC_IO_Write(DeviceAddr, 0x01, power_mgnt_reg_1);
-
-    /* Enable HPOUT1 (Left) and HPOUT1 (Right) intermediate stages */
-    counter += CODEC_IO_Write(DeviceAddr, 0x60, 0x0022);
-
-    /* Enable Charge Pump */
-    counter += CODEC_IO_Write(DeviceAddr, 0x4C, 0x9F25);
-
-    /* Add Delay */
-    AUDIO_IO_Delay(15);
-
-    /* Select DAC1 (Left) to Left Headphone Output PGA (HPOUT1LVOL) path */
-    counter += CODEC_IO_Write(DeviceAddr, 0x2D, 0x0001);
-
-    /* Select DAC1 (Right) to Right Headphone Output PGA (HPOUT1RVOL) path */
-    counter += CODEC_IO_Write(DeviceAddr, 0x2E, 0x0001);
-
-    /* Enable Left Output Mixer (MIXOUTL), Enable Right Output Mixer (MIXOUTR) */
-    /* idem for SPKOUTL and SPKOUTR */
-    counter += CODEC_IO_Write(DeviceAddr, 0x03, 0x0030 | 0x0300);
-
-    /* Enable DC Servo and trigger start-up mode on left and right channels */
-    counter += CODEC_IO_Write(DeviceAddr, 0x54, 0x0033);
-
-    /* Add Delay */
-    AUDIO_IO_Delay(257);
-
-    /* Enable HPOUT1 (Left) and HPOUT1 (Right) intermediate and output stages. Remove clamps */
-    counter += CODEC_IO_Write(DeviceAddr, 0x60, 0x00EE);
-
-    /* Unmutes */
-
-    /* Unmute DAC 1 (Left) */
-    counter += CODEC_IO_Write(DeviceAddr, 0x610, 0x00C0);
-
-    /* Unmute DAC 1 (Right) */
-    counter += CODEC_IO_Write(DeviceAddr, 0x611, 0x00C0);
-
-    /* Unmute the AIF1 Timeslot 0 DAC path */
-    counter += CODEC_IO_Write(DeviceAddr, 0x420, 0x0010);
-
-    /* Unmute DAC 2 (Left) */
-    counter += CODEC_IO_Write(DeviceAddr, 0x612, 0x00C0);
-
-    /* Unmute DAC 2 (Right) */
-    counter += CODEC_IO_Write(DeviceAddr, 0x613, 0x00C0);
-
-    /* Unmute the AIF1 Timeslot 1 DAC2 path */
-    counter += CODEC_IO_Write(DeviceAddr, 0x422, 0x0010);
-    
-    /* Volume Control */
-    wm8994_SetVolume(DeviceAddr, Volume);
-  }
-
-  if (input_device > 0) /* Audio input selected */
-  {
-    if ((input_device == INPUT_DEVICE_DIGITAL_MICROPHONE_1) || (input_device == INPUT_DEVICE_DIGITAL_MICROPHONE_2))
-    {
-      /* Enable Microphone bias 1 generator, Enable VMID */
-      power_mgnt_reg_1 |= 0x0013;
-      counter += CODEC_IO_Write(DeviceAddr, 0x01, power_mgnt_reg_1);
-
-      /* ADC oversample enable */
-      counter += CODEC_IO_Write(DeviceAddr, 0x620, 0x0002);
-
-      /* AIF ADC2 HPF enable, HPF cut = voice mode 1 fc=127Hz at fs=8kHz */
-      counter += CODEC_IO_Write(DeviceAddr, 0x411, 0x3800);
-    }
-    else if(input_device == INPUT_DEVICE_DIGITAL_MIC1_MIC2)
-    {
-      /* Enable Microphone bias 1 generator, Enable VMID */
-      power_mgnt_reg_1 |= 0x0013;
-      counter += CODEC_IO_Write(DeviceAddr, 0x01, power_mgnt_reg_1);
-
-      /* ADC oversample enable */
-      counter += CODEC_IO_Write(DeviceAddr, 0x620, 0x0002);
-    
-      /* AIF ADC1 HPF enable, HPF cut = voice mode 1 fc=127Hz at fs=8kHz */
-      counter += CODEC_IO_Write(DeviceAddr, 0x410, 0x1800);
-      
-      /* AIF ADC2 HPF enable, HPF cut = voice mode 1 fc=127Hz at fs=8kHz */
-      counter += CODEC_IO_Write(DeviceAddr, 0x411, 0x1800);      
-    }    
-    else if ((input_device == INPUT_DEVICE_INPUT_LINE_1) || (input_device == INPUT_DEVICE_INPUT_LINE_2))
-    {
-
-      /* Disable mute on IN1L, IN1L Volume = +0dB */
-      counter += CODEC_IO_Write(DeviceAddr, 0x18, 0x000B);
-
-      /* Disable mute on IN1R, IN1R Volume = +0dB */
-      counter += CODEC_IO_Write(DeviceAddr, 0x1A, 0x000B);
-
-      /* AIF ADC1 HPF enable, HPF cut = hifi mode fc=4Hz at fs=48kHz */
-      counter += CODEC_IO_Write(DeviceAddr, 0x410, 0x1800);
-    }
-    /* Volume Control */
-    wm8994_SetVolume(DeviceAddr, Volume);
-  }
-  /* Return communication control value */
-  return counter;  
-}
-
-/**
-  * @brief  Deinitializes the audio codec.
-  * @param  None
-  * @retval  None
-  */
-void wm8994_DeInit(void)
-{
-  /* Deinitialize Audio Codec interface */
-  AUDIO_IO_DeInit();
-}
-
-/**
-  * @brief  Get the WM8994 ID.
-  * @param DeviceAddr: Device address on communication Bus.
-  * @retval The WM8994 ID 
-  */
-uint32_t wm8994_ReadID(uint16_t DeviceAddr)
-{
-  /* Initialize the Control interface of the Audio Codec */
-  AUDIO_IO_Init();
-
-  return ((uint32_t)AUDIO_IO_Read(DeviceAddr, WM8994_CHIPID_ADDR));
-}
-
-/**
-  * @brief Start the audio Codec play feature.
-  * @note For this codec no Play options are required.
-  * @param DeviceAddr: Device address on communication Bus.   
-  * @retval 0 if correct communication, else wrong communication
-  */
-uint32_t wm8994_Play(uint16_t DeviceAddr, uint16_t* pBuffer, uint16_t Size)
-{
-  uint32_t counter = 0;
- 
-  /* Resumes the audio file playing */  
-  /* Unmute the output first */
-  counter += wm8994_SetMute(DeviceAddr, AUDIO_MUTE_OFF);
-  
-  return counter;
-}
-
-/**
-  * @brief Pauses playing on the audio codec.
-  * @param DeviceAddr: Device address on communication Bus. 
-  * @retval 0 if correct communication, else wrong communication
-  */
-uint32_t wm8994_Pause(uint16_t DeviceAddr)
-{  
-  uint32_t counter = 0;
- 
-  /* Pause the audio file playing */
-  /* Mute the output first */
-  counter += wm8994_SetMute(DeviceAddr, AUDIO_MUTE_ON);
-  
-  /* Put the Codec in Power save mode */
-  counter += CODEC_IO_Write(DeviceAddr, 0x02, 0x01);
- 
-  return counter;
-}
-
-/**
-  * @brief Resumes playing on the audio codec.
-  * @param DeviceAddr: Device address on communication Bus. 
-  * @retval 0 if correct communication, else wrong communication
-  */
-uint32_t wm8994_Resume(uint16_t DeviceAddr)
-{
-  uint32_t counter = 0;
- 
-  /* Resumes the audio file playing */  
-  /* Unmute the output first */
-  counter += wm8994_SetMute(DeviceAddr, AUDIO_MUTE_OFF);
-  
-  return counter;
-}
-
-/**
-  * @brief Stops audio Codec playing. It powers down the codec.
-  * @param DeviceAddr: Device address on communication Bus. 
-  * @param CodecPdwnMode: selects the  power down mode.
-  *          - CODEC_PDWN_SW: only mutes the audio codec. When resuming from this 
-  *                           mode the codec keeps the previous initialization
-  *                           (no need to re-Initialize the codec registers).
-  *          - CODEC_PDWN_HW: Physically power down the codec. When resuming from this
-  *                           mode, the codec is set to default configuration 
-  *                           (user should re-Initialize the codec in order to 
-  *                            play again the audio stream).
-  * @retval 0 if correct communication, else wrong communication
-  */
-uint32_t wm8994_Stop(uint16_t DeviceAddr, uint32_t CodecPdwnMode)
-{
-  uint32_t counter = 0;
-
-  if (outputEnabled != 0)
-  {
-    /* Mute the output first */
-    counter += wm8994_SetMute(DeviceAddr, AUDIO_MUTE_ON);
-
-    if (CodecPdwnMode == CODEC_PDWN_SW)
-    {
-      /* Only output mute required*/
-    }
-    else /* CODEC_PDWN_HW */
-    {
-      /* Mute the AIF1 Timeslot 0 DAC1 path */
-      counter += CODEC_IO_Write(DeviceAddr, 0x420, 0x0200);
-
-      /* Mute the AIF1 Timeslot 1 DAC2 path */
-      counter += CODEC_IO_Write(DeviceAddr, 0x422, 0x0200);
-
-      /* Disable DAC1L_TO_HPOUT1L */
-      counter += CODEC_IO_Write(DeviceAddr, 0x2D, 0x0000);
-
-      /* Disable DAC1R_TO_HPOUT1R */
-      counter += CODEC_IO_Write(DeviceAddr, 0x2E, 0x0000);
-
-      /* Disable DAC1 and DAC2 */
-      counter += CODEC_IO_Write(DeviceAddr, 0x05, 0x0000);
-
-      /* Reset Codec by writing in 0x0000 address register */
-      counter += CODEC_IO_Write(DeviceAddr, 0x0000, 0x0000);
-
-      outputEnabled = 0;
-    }
-  }
-  return counter;
-}
-
-/**
-  * @brief Sets higher or lower the codec volume level.
-  * @param DeviceAddr: Device address on communication Bus.
-  * @param Volume: a byte value from 0 to 255 (refer to codec registers 
-  *         description for more details).
-  * @retval 0 if correct communication, else wrong communication
-  */
-uint32_t wm8994_SetVolume(uint16_t DeviceAddr, uint8_t Volume)
-{
-  uint32_t counter = 0;
-  uint8_t convertedvol = VOLUME_CONVERT(Volume);
-
-  /* Output volume */
-  if (outputEnabled != 0)
-  {
-    if(convertedvol > 0x3E)
-    {
-      /* Unmute audio codec */
-      counter += wm8994_SetMute(DeviceAddr, AUDIO_MUTE_OFF);
-
-      /* Left Headphone Volume */
-      counter += CODEC_IO_Write(DeviceAddr, 0x1C, 0x3F | 0x140);
-
-      /* Right Headphone Volume */
-      counter += CODEC_IO_Write(DeviceAddr, 0x1D, 0x3F | 0x140);
-
-      /* Left Speaker Volume */
-      counter += CODEC_IO_Write(DeviceAddr, 0x26, 0x3F | 0x140);
-
-      /* Right Speaker Volume */
-      counter += CODEC_IO_Write(DeviceAddr, 0x27, 0x3F | 0x140);
-    }
-    else if (Volume == 0)
-    {
-      /* Mute audio codec */
-      counter += wm8994_SetMute(DeviceAddr, AUDIO_MUTE_ON);
-    }
-    else
-    {
-      /* Unmute audio codec */
-      counter += wm8994_SetMute(DeviceAddr, AUDIO_MUTE_OFF);
-
-      /* Left Headphone Volume */
-      counter += CODEC_IO_Write(DeviceAddr, 0x1C, convertedvol | 0x140);
-
-      /* Right Headphone Volume */
-      counter += CODEC_IO_Write(DeviceAddr, 0x1D, convertedvol | 0x140);
-
-      /* Left Speaker Volume */
-      counter += CODEC_IO_Write(DeviceAddr, 0x26, convertedvol | 0x140);
-
-      /* Right Speaker Volume */
-      counter += CODEC_IO_Write(DeviceAddr, 0x27, convertedvol | 0x140);
-    }
-  }
-
-  /* Input volume */
-  if (inputEnabled != 0)
-  {
-    convertedvol = VOLUME_IN_CONVERT(Volume);
-
-    /* Left AIF1 ADC1 volume */
-    counter += CODEC_IO_Write(DeviceAddr, 0x400, convertedvol | 0x100);
-
-    /* Right AIF1 ADC1 volume */
-    counter += CODEC_IO_Write(DeviceAddr, 0x401, convertedvol | 0x100);
-
-    /* Left AIF1 ADC2 volume */
-    counter += CODEC_IO_Write(DeviceAddr, 0x404, convertedvol | 0x100);
-
-    /* Right AIF1 ADC2 volume */
-    counter += CODEC_IO_Write(DeviceAddr, 0x405, convertedvol | 0x100);
-  }
-  return counter;
-}
-
-/**
-  * @brief Enables or disables the mute feature on the audio codec.
-  * @param DeviceAddr: Device address on communication Bus.   
-  * @param Cmd: AUDIO_MUTE_ON to enable the mute or AUDIO_MUTE_OFF to disable the
-  *             mute mode.
-  * @retval 0 if correct communication, else wrong communication
-  */
-uint32_t wm8994_SetMute(uint16_t DeviceAddr, uint32_t Cmd)
-{
-  uint32_t counter = 0;
-  
-  if (outputEnabled != 0)
-  {
-    /* Set the Mute mode */
-    if(Cmd == AUDIO_MUTE_ON)
-    {
-      /* Soft Mute the AIF1 Timeslot 0 DAC1 path L&R */
-      counter += CODEC_IO_Write(DeviceAddr, 0x420, 0x0200);
-
-      /* Soft Mute the AIF1 Timeslot 1 DAC2 path L&R */
-      counter += CODEC_IO_Write(DeviceAddr, 0x422, 0x0200);
-    }
-    else /* AUDIO_MUTE_OFF Disable the Mute */
-    {
-      /* Unmute the AIF1 Timeslot 0 DAC1 path L&R */
-      counter += CODEC_IO_Write(DeviceAddr, 0x420, 0x0010);
-
-      /* Unmute the AIF1 Timeslot 1 DAC2 path L&R */
-      counter += CODEC_IO_Write(DeviceAddr, 0x422, 0x0010);
-    }
-  }
-  return counter;
-}
-
-/**
-  * @brief Switch dynamically (while audio file is played) the output target 
-  *         (speaker or headphone).
-  * @param DeviceAddr: Device address on communication Bus.
-  * @param Output: specifies the audio output target: OUTPUT_DEVICE_SPEAKER,
-  *         OUTPUT_DEVICE_HEADPHONE, OUTPUT_DEVICE_BOTH or OUTPUT_DEVICE_AUTO 
-  * @retval 0 if correct communication, else wrong communication
-  */
-uint32_t wm8994_SetOutputMode(uint16_t DeviceAddr, uint8_t Output)
-{
-  uint32_t counter = 0; 
-  
-  switch (Output) 
-  {
-  case OUTPUT_DEVICE_SPEAKER:
-    /* Enable DAC1 (Left), Enable DAC1 (Right), 
-    Disable DAC2 (Left), Disable DAC2 (Right)*/
-    counter += CODEC_IO_Write(DeviceAddr, 0x05, 0x0C0C);
-    
-    /* Enable the AIF1 Timeslot 0 (Left) to DAC 1 (Left) mixer path */
-    counter += CODEC_IO_Write(DeviceAddr, 0x601, 0x0000);
-    
-    /* Enable the AIF1 Timeslot 0 (Right) to DAC 1 (Right) mixer path */
-    counter += CODEC_IO_Write(DeviceAddr, 0x602, 0x0000);
-    
-    /* Disable the AIF1 Timeslot 1 (Left) to DAC 2 (Left) mixer path */
-    counter += CODEC_IO_Write(DeviceAddr, 0x604, 0x0002);
-    
-    /* Disable the AIF1 Timeslot 1 (Right) to DAC 2 (Right) mixer path */
-    counter += CODEC_IO_Write(DeviceAddr, 0x605, 0x0002);
-    break;
-    
-  case OUTPUT_DEVICE_HEADPHONE:
-    /* Disable DAC1 (Left), Disable DAC1 (Right), 
-    Enable DAC2 (Left), Enable DAC2 (Right)*/
-    counter += CODEC_IO_Write(DeviceAddr, 0x05, 0x0303);
-    
-    /* Enable the AIF1 Timeslot 0 (Left) to DAC 1 (Left) mixer path */
-    counter += CODEC_IO_Write(DeviceAddr, 0x601, 0x0001);
-    
-    /* Enable the AIF1 Timeslot 0 (Right) to DAC 1 (Right) mixer path */
-    counter += CODEC_IO_Write(DeviceAddr, 0x602, 0x0001);
-    
-    /* Disable the AIF1 Timeslot 1 (Left) to DAC 2 (Left) mixer path */
-    counter += CODEC_IO_Write(DeviceAddr, 0x604, 0x0000);
-    
-    /* Disable the AIF1 Timeslot 1 (Right) to DAC 2 (Right) mixer path */
-    counter += CODEC_IO_Write(DeviceAddr, 0x605, 0x0000);
-    break;
-    
-  case OUTPUT_DEVICE_BOTH:
-    /* Enable DAC1 (Left), Enable DAC1 (Right), 
-    also Enable DAC2 (Left), Enable DAC2 (Right)*/
-    counter += CODEC_IO_Write(DeviceAddr, 0x05, 0x0303 | 0x0C0C);
-    
-    /* Enable the AIF1 Timeslot 0 (Left) to DAC 1 (Left) mixer path */
-    counter += CODEC_IO_Write(DeviceAddr, 0x601, 0x0001);
-    
-    /* Enable the AIF1 Timeslot 0 (Right) to DAC 1 (Right) mixer path */
-    counter += CODEC_IO_Write(DeviceAddr, 0x602, 0x0001);
-    
-    /* Enable the AIF1 Timeslot 1 (Left) to DAC 2 (Left) mixer path */
-    counter += CODEC_IO_Write(DeviceAddr, 0x604, 0x0002);
-    
-    /* Enable the AIF1 Timeslot 1 (Right) to DAC 2 (Right) mixer path */
-    counter += CODEC_IO_Write(DeviceAddr, 0x605, 0x0002);
-    break;
-    
-  default:
-    /* Disable DAC1 (Left), Disable DAC1 (Right), 
-    Enable DAC2 (Left), Enable DAC2 (Right)*/
-    counter += CODEC_IO_Write(DeviceAddr, 0x05, 0x0303);
-    
-    /* Enable the AIF1 Timeslot 0 (Left) to DAC 1 (Left) mixer path */
-    counter += CODEC_IO_Write(DeviceAddr, 0x601, 0x0001);
-    
-    /* Enable the AIF1 Timeslot 0 (Right) to DAC 1 (Right) mixer path */
-    counter += CODEC_IO_Write(DeviceAddr, 0x602, 0x0001);
-    
-    /* Disable the AIF1 Timeslot 1 (Left) to DAC 2 (Left) mixer path */
-    counter += CODEC_IO_Write(DeviceAddr, 0x604, 0x0000);
-    
-    /* Disable the AIF1 Timeslot 1 (Right) to DAC 2 (Right) mixer path */
-    counter += CODEC_IO_Write(DeviceAddr, 0x605, 0x0000);
-    break;    
-  }  
-  return counter;
-}
-
-/**
-  * @brief Sets new frequency.
-  * @param DeviceAddr: Device address on communication Bus.
-  * @param AudioFreq: Audio frequency used to play the audio stream.
-  * @retval 0 if correct communication, else wrong communication
-  */
-uint32_t wm8994_SetFrequency(uint16_t DeviceAddr, uint32_t AudioFreq)
-{
-  uint32_t counter = 0;
- 
-  /*  Clock Configurations */
-  switch (AudioFreq)
-  {
-  case  AUDIO_FREQUENCY_8K:
-    /* AIF1 Sample Rate = 8 (KHz), ratio=256 */ 
-    counter += CODEC_IO_Write(DeviceAddr, 0x210, 0x0003);
-    break;
-    
-  case  AUDIO_FREQUENCY_16K:
-    /* AIF1 Sample Rate = 16 (KHz), ratio=256 */ 
-    counter += CODEC_IO_Write(DeviceAddr, 0x210, 0x0033);
-    break;
-
-  case  AUDIO_FREQUENCY_32K:
-    /* AIF1 Sample Rate = 32 (KHz), ratio=256 */ 
-    counter += CODEC_IO_Write(DeviceAddr, 0x210, 0x0063);
-    break;
-    
-  case  AUDIO_FREQUENCY_48K:
-    /* AIF1 Sample Rate = 48 (KHz), ratio=256 */ 
-    counter += CODEC_IO_Write(DeviceAddr, 0x210, 0x0083);
-    break;
-    
-  case  AUDIO_FREQUENCY_96K:
-    /* AIF1 Sample Rate = 96 (KHz), ratio=256 */ 
-    counter += CODEC_IO_Write(DeviceAddr, 0x210, 0x00A3);
-    break;
-    
-  case  AUDIO_FREQUENCY_11K:
-    /* AIF1 Sample Rate = 11.025 (KHz), ratio=256 */ 
-    counter += CODEC_IO_Write(DeviceAddr, 0x210, 0x0013);
-    break;
-    
-  case  AUDIO_FREQUENCY_22K:
-    /* AIF1 Sample Rate = 22.050 (KHz), ratio=256 */ 
-    counter += CODEC_IO_Write(DeviceAddr, 0x210, 0x0043);
-    break;
-    
-  case  AUDIO_FREQUENCY_44K:
-    /* AIF1 Sample Rate = 44.1 (KHz), ratio=256 */ 
-    counter += CODEC_IO_Write(DeviceAddr, 0x210, 0x0073);
-    break; 
-    
-  default:
-    /* AIF1 Sample Rate = 48 (KHz), ratio=256 */ 
-    counter += CODEC_IO_Write(DeviceAddr, 0x210, 0x0083);
-    break; 
-  }
-  return counter;
-}
-
-/**
-  * @brief Resets wm8994 registers.
-  * @param DeviceAddr: Device address on communication Bus. 
-  * @retval 0 if correct communication, else wrong communication
-  */
-uint32_t wm8994_Reset(uint16_t DeviceAddr)
-{
-  uint32_t counter = 0;
-  
-  /* Reset Codec by writing in 0x0000 address register */
-  counter = CODEC_IO_Write(DeviceAddr, 0x0000, 0x0000);
-  outputEnabled = 0;
-  inputEnabled=0;
-
-  return counter;
-}
-
-/**
-  * @brief  Writes/Read a single data.
-  * @param  Addr: I2C address
-  * @param  Reg: Reg address 
-  * @param  Value: Data to be written
-  * @retval None
-  */
-static uint8_t CODEC_IO_Write(uint8_t Addr, uint16_t Reg, uint16_t Value)
-{
-  uint32_t result = 0;
-  
- AUDIO_IO_Write(Addr, Reg, Value);
-  
-#ifdef VERIFY_WRITTENDATA
-  /* Verify that the data has been correctly written */
-  result = (AUDIO_IO_Read(Addr, Reg) == Value)? 0:1;
-#endif /* VERIFY_WRITTENDATA */
-  
-  return result;
-}
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r 85dbcff443aa -r 1a18e061d0ec Drivers/BSP/Components/wm8994/wm8994.h
--- a/Drivers/BSP/Components/wm8994/wm8994.h	Wed Nov 27 08:29:42 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,186 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    wm8994.h
-  * @author  MCD Application Team
-  * @brief   This file contains all the functions prototypes for the 
-  *          wm8994.c driver.
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT(c) 2016 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.
-  *
-  ******************************************************************************
-  */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __WM8994_H
-#define __WM8994_H
-
-/* Includes ------------------------------------------------------------------*/
-#include "../Common/audio.h"
-
-/** @addtogroup BSP
-  * @{
-  */ 
-
-/** @addtogroup Component
-  * @{
-  */ 
-  
-/** @addtogroup WM8994
-  * @{
-  */
-
-/** @defgroup WM8994_Exported_Types
-  * @{
-  */
-
-/**
-  * @}
-  */
-
-/** @defgroup WM8994_Exported_Constants
-  * @{
-  */ 
-
-/******************************************************************************/
-/***************************  Codec User defines ******************************/
-/******************************************************************************/
-/* Codec output DEVICE */
-#define OUTPUT_DEVICE_SPEAKER                 ((uint16_t)0x0001)
-#define OUTPUT_DEVICE_HEADPHONE               ((uint16_t)0x0002)
-#define OUTPUT_DEVICE_BOTH                    ((uint16_t)0x0003)
-#define OUTPUT_DEVICE_AUTO                    ((uint16_t)0x0004)
-#define INPUT_DEVICE_DIGITAL_MICROPHONE_1     ((uint16_t)0x0100)
-#define INPUT_DEVICE_DIGITAL_MICROPHONE_2     ((uint16_t)0x0200)
-#define INPUT_DEVICE_INPUT_LINE_1             ((uint16_t)0x0300)
-#define INPUT_DEVICE_INPUT_LINE_2             ((uint16_t)0x0400)
-#define INPUT_DEVICE_DIGITAL_MIC1_MIC2        ((uint16_t)0x0800)
-
-/* Volume Levels values */
-#define DEFAULT_VOLMIN                0x00
-#define DEFAULT_VOLMAX                0xFF
-#define DEFAULT_VOLSTEP               0x04
-
-#define AUDIO_PAUSE                   0
-#define AUDIO_RESUME                  1
-
-/* Codec POWER DOWN modes */
-#define CODEC_PDWN_HW                 1
-#define CODEC_PDWN_SW                 2
-
-/* MUTE commands */
-#define AUDIO_MUTE_ON                 1
-#define AUDIO_MUTE_OFF                0
-
-/* AUDIO FREQUENCY */
-#define AUDIO_FREQUENCY_192K          ((uint32_t)192000)
-#define AUDIO_FREQUENCY_96K           ((uint32_t)96000)
-#define AUDIO_FREQUENCY_48K           ((uint32_t)48000)
-#define AUDIO_FREQUENCY_44K           ((uint32_t)44100)
-#define AUDIO_FREQUENCY_32K           ((uint32_t)32000)
-#define AUDIO_FREQUENCY_22K           ((uint32_t)22050)
-#define AUDIO_FREQUENCY_16K           ((uint32_t)16000)
-#define AUDIO_FREQUENCY_11K           ((uint32_t)11025)
-#define AUDIO_FREQUENCY_8K            ((uint32_t)8000)  
-
-#define VOLUME_CONVERT(Volume)        (((Volume) > 100)? 100:((uint8_t)(((Volume) * 63) / 100)))
-#define VOLUME_IN_CONVERT(Volume)     (((Volume) >= 100)? 239:((uint8_t)(((Volume) * 240) / 100)))
-
-/******************************************************************************/
-/****************************** REGISTER MAPPING ******************************/
-/******************************************************************************/
-/** 
-  * @brief  WM8994 ID  
-  */  
-#define  WM8994_ID    0x8994
-
-/**
-  * @brief Device ID Register: Reading from this register will indicate device 
-  *                            family ID 8994h
-  */
-#define WM8994_CHIPID_ADDR                  0x00
-
-/**
-  * @}
-  */ 
-
-/** @defgroup WM8994_Exported_Macros
-  * @{
-  */ 
-/**
-  * @}
-  */ 
-
-/** @defgroup WM8994_Exported_Functions
-  * @{
-  */
-    
-/*------------------------------------------------------------------------------
-                           Audio Codec functions 
-------------------------------------------------------------------------------*/
-/* High Layer codec functions */
-uint32_t wm8994_Init(uint16_t DeviceAddr, uint16_t OutputInputDevice, uint8_t Volume, uint32_t AudioFreq);
-void     wm8994_DeInit(void);
-uint32_t wm8994_ReadID(uint16_t DeviceAddr);
-uint32_t wm8994_Play(uint16_t DeviceAddr, uint16_t* pBuffer, uint16_t Size);
-uint32_t wm8994_Pause(uint16_t DeviceAddr);
-uint32_t wm8994_Resume(uint16_t DeviceAddr);
-uint32_t wm8994_Stop(uint16_t DeviceAddr, uint32_t Cmd);
-uint32_t wm8994_SetVolume(uint16_t DeviceAddr, uint8_t Volume);
-uint32_t wm8994_SetMute(uint16_t DeviceAddr, uint32_t Cmd);
-uint32_t wm8994_SetOutputMode(uint16_t DeviceAddr, uint8_t Output);
-uint32_t wm8994_SetFrequency(uint16_t DeviceAddr, uint32_t AudioFreq);
-uint32_t wm8994_Reset(uint16_t DeviceAddr);
-
-/* AUDIO IO functions */
-void    AUDIO_IO_Init(void);
-void    AUDIO_IO_DeInit(void);
-void    AUDIO_IO_Write(uint8_t Addr, uint16_t Reg, uint16_t Value);
-uint8_t AUDIO_IO_Read(uint8_t Addr, uint16_t Reg);
-void    AUDIO_IO_Delay(uint32_t Delay);
-
-/* Audio driver structure */
-extern AUDIO_DrvTypeDef   wm8994_drv;
-
-#endif /* __WM8994_H */
-
-/**
-  * @}
-  */ 
-
-/**
-  * @}
-  */ 
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */ 
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r 85dbcff443aa -r 1a18e061d0ec Drivers/BSP/STM32746G-Discovery/stm32746g_discovery.c
--- a/Drivers/BSP/STM32746G-Discovery/stm32746g_discovery.c	Wed Nov 27 08:29:42 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,902 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    stm32746g_discovery.c
-  * @author  MCD Application Team
-  * @brief   This file provides a set of firmware functions to manage LEDs, 
-  *          push-buttons and COM ports available on STM32746G-Discovery
-  *          board(MB1191) from STMicroelectronics.
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT(c) 2016 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.
-  *
-  ******************************************************************************
-  */ 
-
-/* Dependencies
-- stm32f7xx_hal_cortex.c
-- stm32f7xx_hal_gpio.c
-- stm32f7xx_hal_uart.c
-- stm32f7xx_hal_i2c.c
-EndDependencies */
-
-/* Includes ------------------------------------------------------------------*/
-#include "stm32746g_discovery.h"
-
-/** @addtogroup BSP
-  * @{
-  */ 
-
-/** @addtogroup STM32746G_DISCOVERY
-  * @{
-  */
-
-/** @defgroup STM32746G_DISCOVERY_LOW_LEVEL STM32746G_DISCOVERY_LOW_LEVEL
-  * @{
-  */
-
-/** @defgroup STM32746G_DISCOVERY_LOW_LEVEL_Private_TypesDefinitions STM32746G_DISCOVERY_LOW_LEVEL Private Types Definitions
-  * @{
-  */
-/**
-  * @}
-  */
-
-/** @defgroup STM32746G_DISCOVERY_LOW_LEVEL_Private_Defines STM32746G_DISCOVERY_LOW_LEVEL Private Defines
-  * @{
-  */
-/**
- * @brief STM32746G DISCOVERY BSP Driver version number V2.0.2
-   */
-#define __STM32746G_DISCO_BSP_VERSION_MAIN   (0x02) /*!< [31:24] main version */
-#define __STM32746G_DISCO_BSP_VERSION_SUB1   (0x00) /*!< [23:16] sub1 version */
-#define __STM32746G_DISCO_BSP_VERSION_SUB2   (0x02) /*!< [15:8]  sub2 version */
-#define __STM32746G_DISCO_BSP_VERSION_RC     (0x00) /*!< [7:0]  release candidate */
-#define __STM32746G_DISCO_BSP_VERSION         ((__STM32746G_DISCO_BSP_VERSION_MAIN << 24)\
-                                             |(__STM32746G_DISCO_BSP_VERSION_SUB1 << 16)\
-                                             |(__STM32746G_DISCO_BSP_VERSION_SUB2 << 8 )\
-                                             |(__STM32746G_DISCO_BSP_VERSION_RC))
-/**
-  * @}
-  */
-
-/** @defgroup STM32746G_DISCOVERY_LOW_LEVEL_Private_Macros STM32746G_DISCOVERY_LOW_LEVEL Private Macros
-  * @{
-  */
-/**
-  * @}
-  */
-
-/** @defgroup STM32746G_DISCOVERY_LOW_LEVEL_Private_Variables STM32746G_DISCOVERY_LOW_LEVEL Private Variables
-  * @{
-  */
-
-const uint32_t GPIO_PIN[LEDn] = {LED1_PIN};
-
-GPIO_TypeDef* BUTTON_PORT[BUTTONn] = {WAKEUP_BUTTON_GPIO_PORT,
-                                      TAMPER_BUTTON_GPIO_PORT,
-                                      KEY_BUTTON_GPIO_PORT};
-
-const uint16_t BUTTON_PIN[BUTTONn] = {WAKEUP_BUTTON_PIN,
-                                      TAMPER_BUTTON_PIN,
-                                      KEY_BUTTON_PIN};
-
-const uint16_t BUTTON_IRQn[BUTTONn] = {WAKEUP_BUTTON_EXTI_IRQn,
-                                       TAMPER_BUTTON_EXTI_IRQn,
-                                       KEY_BUTTON_EXTI_IRQn};
-
-USART_TypeDef* COM_USART[COMn] = {DISCOVERY_COM1};
-
-GPIO_TypeDef* COM_TX_PORT[COMn] = {DISCOVERY_COM1_TX_GPIO_PORT};
-
-GPIO_TypeDef* COM_RX_PORT[COMn] = {DISCOVERY_COM1_RX_GPIO_PORT};
-
-const uint16_t COM_TX_PIN[COMn] = {DISCOVERY_COM1_TX_PIN};
-
-const uint16_t COM_RX_PIN[COMn] = {DISCOVERY_COM1_RX_PIN};
-
-const uint16_t COM_TX_AF[COMn] = {DISCOVERY_COM1_TX_AF};
-
-const uint16_t COM_RX_AF[COMn] = {DISCOVERY_COM1_RX_AF};
-
-static I2C_HandleTypeDef hI2cAudioHandler = {0};
-static I2C_HandleTypeDef hI2cExtHandler = {0};
-
-/**
-  * @}
-  */
-
-/** @defgroup STM32746G_DISCOVERY_LOW_LEVEL_Private_FunctionPrototypes STM32746G_DISCOVERY_LOW_LEVEL Private Function Prototypes
-  * @{
-  */
-static void     I2Cx_MspInit(I2C_HandleTypeDef *i2c_handler);
-static void     I2Cx_Init(I2C_HandleTypeDef *i2c_handler);
-
-static HAL_StatusTypeDef I2Cx_ReadMultiple(I2C_HandleTypeDef *i2c_handler, uint8_t Addr, uint16_t Reg, uint16_t MemAddSize, uint8_t *Buffer, uint16_t Length);
-static HAL_StatusTypeDef I2Cx_WriteMultiple(I2C_HandleTypeDef *i2c_handler, uint8_t Addr, uint16_t Reg, uint16_t MemAddSize, uint8_t *Buffer, uint16_t Length);
-static HAL_StatusTypeDef I2Cx_IsDeviceReady(I2C_HandleTypeDef *i2c_handler, uint16_t DevAddress, uint32_t Trials);
-static void              I2Cx_Error(I2C_HandleTypeDef *i2c_handler, uint8_t Addr);
-
-/* AUDIO IO functions */
-void            AUDIO_IO_Init(void);
-void            AUDIO_IO_DeInit(void);
-void            AUDIO_IO_Write(uint8_t Addr, uint16_t Reg, uint16_t Value);
-uint16_t        AUDIO_IO_Read(uint8_t Addr, uint16_t Reg);
-void            AUDIO_IO_Delay(uint32_t Delay);
-
-/* TOUCHSCREEN IO functions */
-void            TS_IO_Init(void);
-void            TS_IO_Write(uint8_t Addr, uint8_t Reg, uint8_t Value);
-uint8_t         TS_IO_Read(uint8_t Addr, uint8_t Reg);
-void            TS_IO_Delay(uint32_t Delay);
-
-/* CAMERA IO functions */
-void            CAMERA_IO_Init(void);
-void            CAMERA_Delay(uint32_t Delay);
-void            CAMERA_IO_Write(uint8_t Addr, uint8_t Reg, uint8_t Value);
-uint8_t         CAMERA_IO_Read(uint8_t Addr, uint8_t Reg);
-
-/* I2C EEPROM IO function */
-void                EEPROM_IO_Init(void);
-HAL_StatusTypeDef   EEPROM_IO_WriteData(uint16_t DevAddress, uint16_t MemAddress, uint8_t* pBuffer, uint32_t BufferSize);
-HAL_StatusTypeDef   EEPROM_IO_ReadData(uint16_t DevAddress, uint16_t MemAddress, uint8_t* pBuffer, uint32_t BufferSize);
-HAL_StatusTypeDef   EEPROM_IO_IsDeviceReady(uint16_t DevAddress, uint32_t Trials);
-/**
-  * @}
-  */
-
-/** @defgroup STM32746G_DISCOVERY_LOW_LEVEL_Exported_Functions STM32746G_DISCOVERY_LOW_LEVELSTM32746G_DISCOVERY_LOW_LEVEL Exported Functions
-  * @{
-  */ 
-
-  /**
-  * @brief  This method returns the STM32746G DISCOVERY BSP Driver revision
-  * @retval version: 0xXYZR (8bits for each decimal, R for RC)
-  */
-uint32_t BSP_GetVersion(void)
-{
-  return __STM32746G_DISCO_BSP_VERSION;
-}
-
-/**
-  * @brief  Configures LED on GPIO.
-  * @param  Led: LED to be configured. 
-  *          This parameter can be one of the following values:
-  *            @arg  DISCO_LED1
-  * @retval None
-  */
-void BSP_LED_Init(Led_TypeDef Led)
-{
-  GPIO_InitTypeDef  gpio_init_structure;
-  GPIO_TypeDef*     gpio_led;
-
-  if (Led == DISCO_LED1) // MBED
-  {
-    gpio_led = LED1_GPIO_PORT;
-    /* Enable the GPIO_LED clock */
-    LED1_GPIO_CLK_ENABLE();
-
-    /* Configure the GPIO_LED pin */
-    gpio_init_structure.Pin = GPIO_PIN[Led];
-    gpio_init_structure.Mode = GPIO_MODE_OUTPUT_PP;
-    gpio_init_structure.Pull = GPIO_PULLUP;
-    gpio_init_structure.Speed = GPIO_SPEED_HIGH;
-  
-    HAL_GPIO_Init(gpio_led, &gpio_init_structure);
-    
-    /* By default, turn off LED */
-    HAL_GPIO_WritePin(gpio_led, GPIO_PIN[Led], GPIO_PIN_RESET);
-  }
-}
-
-/**
-  * @brief  DeInit LEDs.
-  * @param  Led: LED to be configured. 
-  *          This parameter can be one of the following values:
-  *            @arg  DISCO_LED1
-  * @note Led DeInit does not disable the GPIO clock
-  * @retval None
-  */
-void BSP_LED_DeInit(Led_TypeDef Led)
-{
-  GPIO_InitTypeDef  gpio_init_structure;
-  GPIO_TypeDef*     gpio_led;
-
-  if (Led == DISCO_LED1) // MBED
-  {
-    gpio_led = LED1_GPIO_PORT;
-    /* Turn off LED */
-    HAL_GPIO_WritePin(gpio_led, GPIO_PIN[Led], GPIO_PIN_RESET);
-    /* Configure the GPIO_LED pin */
-    gpio_init_structure.Pin = GPIO_PIN[Led];
-    HAL_GPIO_DeInit(gpio_led, gpio_init_structure.Pin);
-  }
-}
-
-/**
-  * @brief  Turns selected LED On.
-  * @param  Led: LED to be set on 
-  *          This parameter can be one of the following values:
-  *            @arg  DISCO_LED1
-  * @retval None
-  */
-void BSP_LED_On(Led_TypeDef Led)
-{
-  GPIO_TypeDef*     gpio_led;
-
-  if (Led == DISCO_LED1)	/* Switch On LED connected to GPIO */ // MBED
-  {
-    gpio_led = LED1_GPIO_PORT;
-    HAL_GPIO_WritePin(gpio_led, GPIO_PIN[Led], GPIO_PIN_SET);
-  }
-}
-
-/**
-  * @brief  Turns selected LED Off. 
-  * @param  Led: LED to be set off
-  *          This parameter can be one of the following values:
-  *            @arg  DISCO_LED1
-  * @retval None
-  */
-void BSP_LED_Off(Led_TypeDef Led)
-{
-  GPIO_TypeDef*     gpio_led;
-
-  if (Led == DISCO_LED1) /* Switch Off LED connected to GPIO */ // MBED
-  {
-    gpio_led = LED1_GPIO_PORT;
-    HAL_GPIO_WritePin(gpio_led, GPIO_PIN[Led], GPIO_PIN_RESET);
-  }
-}
-
-/**
-  * @brief  Toggles the selected LED.
-  * @param  Led: LED to be toggled
-  *          This parameter can be one of the following values:
-  *            @arg  DISCO_LED1
-  * @retval None
-  */
-void BSP_LED_Toggle(Led_TypeDef Led)
-{
-  GPIO_TypeDef*     gpio_led;
-
-  if (Led == DISCO_LED1)	/* Toggle LED connected to GPIO */ // MBED
-  {
-    gpio_led = LED1_GPIO_PORT;
-    HAL_GPIO_TogglePin(gpio_led, GPIO_PIN[Led]);
-  }
-}
-
-/**
-  * @brief  Configures button GPIO and EXTI Line.
-  * @param  Button: Button to be configured
-  *          This parameter can be one of the following values:
-  *            @arg  BUTTON_WAKEUP: Wakeup Push Button 
-  *            @arg  BUTTON_TAMPER: Tamper Push Button  
-  *            @arg  BUTTON_KEY: Key Push Button
-  * @param  ButtonMode: Button mode
-  *          This parameter can be one of the following values:
-  *            @arg  BUTTON_MODE_GPIO: Button will be used as simple IO
-  *            @arg  BUTTON_MODE_EXTI: Button will be connected to EXTI line 
-  *                                    with interrupt generation capability
-  * @note On STM32746G-Discovery board, the three buttons (Wakeup, Tamper and key buttons)
-  *       are mapped on the same push button named "User"
-  *       on the board serigraphy.
-  * @retval None
-  */
-void BSP_PB_Init(Button_TypeDef Button, ButtonMode_TypeDef ButtonMode)
-{
-  GPIO_InitTypeDef gpio_init_structure;
-  
-  /* Enable the BUTTON clock */
-  BUTTONx_GPIO_CLK_ENABLE(Button);
-  
-  if(ButtonMode == BUTTON_MODE_GPIO)
-  {
-    /* Configure Button pin as input */
-    gpio_init_structure.Pin = BUTTON_PIN[Button];
-    gpio_init_structure.Mode = GPIO_MODE_INPUT;
-    gpio_init_structure.Pull = GPIO_NOPULL;
-    gpio_init_structure.Speed = GPIO_SPEED_FAST;
-    HAL_GPIO_Init(BUTTON_PORT[Button], &gpio_init_structure);
-  }
-  
-  if(ButtonMode == BUTTON_MODE_EXTI)
-  {
-    /* Configure Button pin as input with External interrupt */
-    gpio_init_structure.Pin = BUTTON_PIN[Button];
-    gpio_init_structure.Pull = GPIO_NOPULL;
-    gpio_init_structure.Speed = GPIO_SPEED_FAST;
-    
-    if(Button != BUTTON_WAKEUP)
-    {
-      gpio_init_structure.Mode = GPIO_MODE_IT_FALLING; 
-    }
-    else
-    {
-      gpio_init_structure.Mode = GPIO_MODE_IT_RISING;
-    }
-    
-    HAL_GPIO_Init(BUTTON_PORT[Button], &gpio_init_structure);
-    
-    /* Enable and set Button EXTI Interrupt to the lowest priority */
-    HAL_NVIC_SetPriority((IRQn_Type)(BUTTON_IRQn[Button]), 0x0F, 0x00);
-    HAL_NVIC_EnableIRQ((IRQn_Type)(BUTTON_IRQn[Button]));
-  }
-}
-
-/**
-  * @brief  Push Button DeInit.
-  * @param  Button: Button to be configured
-  *          This parameter can be one of the following values:
-  *            @arg  BUTTON_WAKEUP: Wakeup Push Button 
-  *            @arg  BUTTON_TAMPER: Tamper Push Button  
-  *            @arg  BUTTON_KEY: Key Push Button
-  * @note On STM32746G-Discovery board, the three buttons (Wakeup, Tamper and key buttons) 
-  *       are mapped on the same push button named "User"
-  *       on the board serigraphy.
-  * @note PB DeInit does not disable the GPIO clock
-  * @retval None
-  */
-void BSP_PB_DeInit(Button_TypeDef Button)
-{
-    GPIO_InitTypeDef gpio_init_structure;
-
-    gpio_init_structure.Pin = BUTTON_PIN[Button];
-    HAL_NVIC_DisableIRQ((IRQn_Type)(BUTTON_IRQn[Button]));
-    HAL_GPIO_DeInit(BUTTON_PORT[Button], gpio_init_structure.Pin);
-}
-
-
-/**
-  * @brief  Returns the selected button state.
-  * @param  Button: Button to be checked
-  *          This parameter can be one of the following values:
-  *            @arg  BUTTON_WAKEUP: Wakeup Push Button 
-  *            @arg  BUTTON_TAMPER: Tamper Push Button 
-  *            @arg  BUTTON_KEY: Key Push Button
-  * @note On STM32746G-Discovery board, the three buttons (Wakeup, Tamper and key buttons) 
-  *       are mapped on the same push button named "User"
-  *       on the board serigraphy.
-  * @retval The Button GPIO pin value
-  */
-uint32_t BSP_PB_GetState(Button_TypeDef Button)
-{
-  return HAL_GPIO_ReadPin(BUTTON_PORT[Button], BUTTON_PIN[Button]);
-}
-
-/**
-  * @brief  Configures COM port.
-  * @param  COM: COM port to be configured.
-  *          This parameter can be one of the following values:
-  *            @arg  COM1 
-  *            @arg  COM2 
-  * @param  huart: Pointer to a UART_HandleTypeDef structure that contains the
-  *                configuration information for the specified USART peripheral.
-  * @retval None
-  */
-void BSP_COM_Init(COM_TypeDef COM, UART_HandleTypeDef *huart)
-{
-  GPIO_InitTypeDef gpio_init_structure;
-
-  /* Enable GPIO clock */
-  DISCOVERY_COMx_TX_GPIO_CLK_ENABLE(COM);
-  DISCOVERY_COMx_RX_GPIO_CLK_ENABLE(COM);
-
-  /* Enable USART clock */
-  DISCOVERY_COMx_CLK_ENABLE(COM);
-
-  /* Configure USART Tx as alternate function */
-  gpio_init_structure.Pin = COM_TX_PIN[COM];
-  gpio_init_structure.Mode = GPIO_MODE_AF_PP;
-  gpio_init_structure.Speed = GPIO_SPEED_FAST;
-  gpio_init_structure.Pull = GPIO_PULLUP;
-  gpio_init_structure.Alternate = COM_TX_AF[COM];
-  HAL_GPIO_Init(COM_TX_PORT[COM], &gpio_init_structure);
-
-  /* Configure USART Rx as alternate function */
-  gpio_init_structure.Pin = COM_RX_PIN[COM];
-  gpio_init_structure.Mode = GPIO_MODE_AF_PP;
-  gpio_init_structure.Alternate = COM_RX_AF[COM];
-  HAL_GPIO_Init(COM_RX_PORT[COM], &gpio_init_structure);
-
-  /* USART configuration */
-  huart->Instance = COM_USART[COM];
-  HAL_UART_Init(huart);
-}
-
-/**
-  * @brief  DeInit COM port.
-  * @param  COM: COM port to be configured.
-  *          This parameter can be one of the following values:
-  *            @arg  COM1 
-  *            @arg  COM2 
-  * @param  huart: Pointer to a UART_HandleTypeDef structure that contains the
-  *                configuration information for the specified USART peripheral.
-  * @retval None
-  */
-void BSP_COM_DeInit(COM_TypeDef COM, UART_HandleTypeDef *huart)
-{
-  /* USART configuration */
-  huart->Instance = COM_USART[COM];
-  HAL_UART_DeInit(huart);
-
-  /* Enable USART clock */
-  DISCOVERY_COMx_CLK_DISABLE(COM);
-
-  /* DeInit GPIO pins can be done in the application 
-     (by surcharging this __weak function) */
-
-  /* GPIO pins clock, DMA clock can be shut down in the application 
-     by surcharging this __weak function */
-}
-
-/*******************************************************************************
-                            BUS OPERATIONS
-*******************************************************************************/
-
-/******************************* I2C Routines *********************************/
-/**
-  * @brief  Initializes I2C MSP.
-  * @param  i2c_handler : I2C handler
-  * @retval None
-  */
-static void I2Cx_MspInit(I2C_HandleTypeDef *i2c_handler)
-{
-  GPIO_InitTypeDef  gpio_init_structure;
-  
-  if (i2c_handler == (I2C_HandleTypeDef*)(&hI2cAudioHandler))
-  {
-    /* AUDIO and LCD I2C MSP init */
-
-    /*** Configure the GPIOs ***/
-    /* Enable GPIO clock */
-    DISCOVERY_AUDIO_I2Cx_SCL_SDA_GPIO_CLK_ENABLE();
-
-    /* Configure I2C Tx as alternate function */
-    gpio_init_structure.Pin = DISCOVERY_AUDIO_I2Cx_SCL_PIN;
-    gpio_init_structure.Mode = GPIO_MODE_AF_OD;
-    gpio_init_structure.Pull = GPIO_NOPULL;
-    gpio_init_structure.Speed = GPIO_SPEED_FAST;
-    gpio_init_structure.Alternate = DISCOVERY_AUDIO_I2Cx_SCL_SDA_AF;
-    HAL_GPIO_Init(DISCOVERY_AUDIO_I2Cx_SCL_SDA_GPIO_PORT, &gpio_init_structure);
-
-    /* Configure I2C Rx as alternate function */
-    gpio_init_structure.Pin = DISCOVERY_AUDIO_I2Cx_SDA_PIN;
-    HAL_GPIO_Init(DISCOVERY_AUDIO_I2Cx_SCL_SDA_GPIO_PORT, &gpio_init_structure);
-
-    /*** Configure the I2C peripheral ***/
-    /* Enable I2C clock */
-    DISCOVERY_AUDIO_I2Cx_CLK_ENABLE();
-
-    /* Force the I2C peripheral clock reset */
-    DISCOVERY_AUDIO_I2Cx_FORCE_RESET();
-
-    /* Release the I2C peripheral clock reset */
-    DISCOVERY_AUDIO_I2Cx_RELEASE_RESET();
-
-    /* Enable and set I2Cx Interrupt to a lower priority */
-    HAL_NVIC_SetPriority(DISCOVERY_AUDIO_I2Cx_EV_IRQn, 0x0F, 0);
-    HAL_NVIC_EnableIRQ(DISCOVERY_AUDIO_I2Cx_EV_IRQn);
-
-    /* Enable and set I2Cx Interrupt to a lower priority */
-    HAL_NVIC_SetPriority(DISCOVERY_AUDIO_I2Cx_ER_IRQn, 0x0F, 0);
-    HAL_NVIC_EnableIRQ(DISCOVERY_AUDIO_I2Cx_ER_IRQn);
-  }
-  else
-  {
-    /* External, camera and Arduino connector I2C MSP init */
-
-    /*** Configure the GPIOs ***/
-    /* Enable GPIO clock */
-    DISCOVERY_EXT_I2Cx_SCL_SDA_GPIO_CLK_ENABLE();
-
-    /* Configure I2C Tx as alternate function */
-    gpio_init_structure.Pin = DISCOVERY_EXT_I2Cx_SCL_PIN;
-    gpio_init_structure.Mode = GPIO_MODE_AF_OD;
-    gpio_init_structure.Pull = GPIO_NOPULL;
-    gpio_init_structure.Speed = GPIO_SPEED_FAST;
-    gpio_init_structure.Alternate = DISCOVERY_EXT_I2Cx_SCL_SDA_AF;
-    HAL_GPIO_Init(DISCOVERY_EXT_I2Cx_SCL_SDA_GPIO_PORT, &gpio_init_structure);
-
-    /* Configure I2C Rx as alternate function */
-    gpio_init_structure.Pin = DISCOVERY_EXT_I2Cx_SDA_PIN;
-    HAL_GPIO_Init(DISCOVERY_EXT_I2Cx_SCL_SDA_GPIO_PORT, &gpio_init_structure);
-
-    /*** Configure the I2C peripheral ***/
-    /* Enable I2C clock */
-    DISCOVERY_EXT_I2Cx_CLK_ENABLE();
-
-    /* Force the I2C peripheral clock reset */
-    DISCOVERY_EXT_I2Cx_FORCE_RESET();
-
-    /* Release the I2C peripheral clock reset */
-    DISCOVERY_EXT_I2Cx_RELEASE_RESET();
-
-    /* Enable and set I2Cx Interrupt to a lower priority */
-    HAL_NVIC_SetPriority(DISCOVERY_EXT_I2Cx_EV_IRQn, 0x0F, 0);
-    HAL_NVIC_EnableIRQ(DISCOVERY_EXT_I2Cx_EV_IRQn);
-
-    /* Enable and set I2Cx Interrupt to a lower priority */
-    HAL_NVIC_SetPriority(DISCOVERY_EXT_I2Cx_ER_IRQn, 0x0F, 0);
-    HAL_NVIC_EnableIRQ(DISCOVERY_EXT_I2Cx_ER_IRQn);
-  }
-}
-
-/**
-  * @brief  Initializes I2C HAL.
-  * @param  i2c_handler : I2C handler
-  * @retval None
-  */
-static void I2Cx_Init(I2C_HandleTypeDef *i2c_handler)
-{
-  if(HAL_I2C_GetState(i2c_handler) == HAL_I2C_STATE_RESET)
-  {
-    if (i2c_handler == (I2C_HandleTypeDef*)(&hI2cAudioHandler))
-    {
-      /* Audio and LCD I2C configuration */
-      i2c_handler->Instance = DISCOVERY_AUDIO_I2Cx;
-    }
-    else
-    {
-      /* External, camera and Arduino connector  I2C configuration */
-      i2c_handler->Instance = DISCOVERY_EXT_I2Cx;
-    }
-    i2c_handler->Init.Timing           = DISCOVERY_I2Cx_TIMING;
-    i2c_handler->Init.OwnAddress1      = 0;
-    i2c_handler->Init.AddressingMode   = I2C_ADDRESSINGMODE_7BIT;
-    i2c_handler->Init.DualAddressMode  = I2C_DUALADDRESS_DISABLE;
-    i2c_handler->Init.OwnAddress2      = 0;
-    i2c_handler->Init.GeneralCallMode  = I2C_GENERALCALL_DISABLE;
-    i2c_handler->Init.NoStretchMode    = I2C_NOSTRETCH_DISABLE;
-
-    /* Init the I2C */
-    I2Cx_MspInit(i2c_handler);
-    HAL_I2C_Init(i2c_handler);
-  }
-}
-
-/**
-  * @brief  Reads multiple data.
-  * @param  i2c_handler : I2C handler
-  * @param  Addr: I2C address
-  * @param  Reg: Reg address 
-  * @param  MemAddress: Memory address 
-  * @param  Buffer: Pointer to data buffer
-  * @param  Length: Length of the data
-  * @retval Number of read data
-  */
-static HAL_StatusTypeDef I2Cx_ReadMultiple(I2C_HandleTypeDef *i2c_handler,
-                                           uint8_t Addr,
-                                           uint16_t Reg,
-                                           uint16_t MemAddress,
-                                           uint8_t *Buffer,
-                                           uint16_t Length)
-{
-  HAL_StatusTypeDef status = HAL_OK;
-
-  status = HAL_I2C_Mem_Read(i2c_handler, Addr, (uint16_t)Reg, MemAddress, Buffer, Length, 1000);
-
-  /* Check the communication status */
-  if(status != HAL_OK)
-  {
-    /* I2C error occurred */
-    I2Cx_Error(i2c_handler, Addr);
-  }
-  return status;    
-}
-
-/**
-  * @brief  Writes a value in a register of the device through BUS in using DMA mode.
-  * @param  i2c_handler : I2C handler
-  * @param  Addr: Device address on BUS Bus.  
-  * @param  Reg: The target register address to write
-  * @param  MemAddress: Memory address 
-  * @param  Buffer: The target register value to be written 
-  * @param  Length: buffer size to be written
-  * @retval HAL status
-  */
-static HAL_StatusTypeDef I2Cx_WriteMultiple(I2C_HandleTypeDef *i2c_handler,
-                                            uint8_t Addr,
-                                            uint16_t Reg,
-                                            uint16_t MemAddress,
-                                            uint8_t *Buffer,
-                                            uint16_t Length)
-{
-  HAL_StatusTypeDef status = HAL_OK;
-  
-  status = HAL_I2C_Mem_Write(i2c_handler, Addr, (uint16_t)Reg, MemAddress, Buffer, Length, 1000);
-  
-  /* Check the communication status */
-  if(status != HAL_OK)
-  {
-    /* Re-Initiaize the I2C Bus */
-    I2Cx_Error(i2c_handler, Addr);
-  }
-  return status;
-}
-
-/**
-  * @brief  Checks if target device is ready for communication. 
-  * @note   This function is used with Memory devices
-  * @param  i2c_handler : I2C handler
-  * @param  DevAddress: Target device address
-  * @param  Trials: Number of trials
-  * @retval HAL status
-  */
-static HAL_StatusTypeDef I2Cx_IsDeviceReady(I2C_HandleTypeDef *i2c_handler, uint16_t DevAddress, uint32_t Trials)
-{ 
-  return (HAL_I2C_IsDeviceReady(i2c_handler, DevAddress, Trials, 1000));
-}
-
-/**
-  * @brief  Manages error callback by re-initializing I2C.
-  * @param  i2c_handler : I2C handler
-  * @param  Addr: I2C Address
-  * @retval None
-  */
-static void I2Cx_Error(I2C_HandleTypeDef *i2c_handler, uint8_t Addr)
-{
-  /* De-initialize the I2C communication bus */
-  HAL_I2C_DeInit(i2c_handler);
-  
-  /* Re-Initialize the I2C communication bus */
-  I2Cx_Init(i2c_handler);
-}
-
-/*******************************************************************************
-                            LINK OPERATIONS
-*******************************************************************************/
-
-/********************************* LINK AUDIO *********************************/
-
-/**
-  * @brief  Initializes Audio low level.
-  * @retval None
-  */
-void AUDIO_IO_Init(void) 
-{
-  I2Cx_Init(&hI2cAudioHandler);
-}
-
-/**
-  * @brief  Deinitializes Audio low level.
-  * @retval None
-  */
-void AUDIO_IO_DeInit(void)
-{
-}
-
-/**
-  * @brief  Writes a single data.
-  * @param  Addr: I2C address
-  * @param  Reg: Reg address 
-  * @param  Value: Data to be written
-  * @retval None
-  */
-void AUDIO_IO_Write(uint8_t Addr, uint16_t Reg, uint16_t Value)
-{
-  uint16_t tmp = Value;
-  
-  Value = ((uint16_t)(tmp >> 8) & 0x00FF);
-  
-  Value |= ((uint16_t)(tmp << 8)& 0xFF00);
-  
-  I2Cx_WriteMultiple(&hI2cAudioHandler, Addr, Reg, I2C_MEMADD_SIZE_16BIT,(uint8_t*)&Value, 2);
-}
-
-/**
-  * @brief  Reads a single data.
-  * @param  Addr: I2C address
-  * @param  Reg: Reg address 
-  * @retval Data to be read
-  */
-uint16_t AUDIO_IO_Read(uint8_t Addr, uint16_t Reg)
-{
-  uint16_t read_value = 0, tmp = 0;
-  
-  I2Cx_ReadMultiple(&hI2cAudioHandler, Addr, Reg, I2C_MEMADD_SIZE_16BIT, (uint8_t*)&read_value, 2);
-  
-  tmp = ((uint16_t)(read_value >> 8) & 0x00FF);
-  
-  tmp |= ((uint16_t)(read_value << 8)& 0xFF00);
-  
-  read_value = tmp;
-  
-  return read_value;
-}
-
-/**
-  * @brief  AUDIO Codec delay 
-  * @param  Delay: Delay in ms
-  * @retval None
-  */
-void AUDIO_IO_Delay(uint32_t Delay)
-{
-  HAL_Delay(Delay);
-}
-
-/********************************* LINK CAMERA ********************************/
-
-/**
-  * @brief  Initializes Camera low level.
-  * @retval None
-  */
-void CAMERA_IO_Init(void) 
-{
-  I2Cx_Init(&hI2cExtHandler);
-}
-
-/**
-  * @brief  Camera writes single data.
-  * @param  Addr: I2C address
-  * @param  Reg: Register address 
-  * @param  Value: Data to be written
-  * @retval None
-  */
-void CAMERA_IO_Write(uint8_t Addr, uint8_t Reg, uint8_t Value)
-{
-  I2Cx_WriteMultiple(&hI2cExtHandler, Addr, (uint16_t)Reg, I2C_MEMADD_SIZE_8BIT,(uint8_t*)&Value, 1);
-}
-
-/**
-  * @brief  Camera reads single data.
-  * @param  Addr: I2C address
-  * @param  Reg: Register address 
-  * @retval Read data
-  */
-uint8_t CAMERA_IO_Read(uint8_t Addr, uint8_t Reg)
-{
-  uint8_t read_value = 0;
-
-  I2Cx_ReadMultiple(&hI2cExtHandler, Addr, Reg, I2C_MEMADD_SIZE_8BIT, (uint8_t*)&read_value, 1);
-
-  return read_value;
-}
-
-/**
-  * @brief  Camera delay 
-  * @param  Delay: Delay in ms
-  * @retval None
-  */
-void CAMERA_Delay(uint32_t Delay)
-{
-  HAL_Delay(Delay);
-}
-
-/******************************** LINK I2C EEPROM *****************************/
-
-/**
-  * @brief  Initializes peripherals used by the I2C EEPROM driver.
-  * @retval None
-  */
-void EEPROM_IO_Init(void)
-{
-  I2Cx_Init(&hI2cExtHandler);
-}
-
-/**
-  * @brief  Write data to I2C EEPROM driver in using DMA channel.
-  * @param  DevAddress: Target device address
-  * @param  MemAddress: Internal memory address
-  * @param  pBuffer: Pointer to data buffer
-  * @param  BufferSize: Amount of data to be sent
-  * @retval HAL status
-  */
-HAL_StatusTypeDef EEPROM_IO_WriteData(uint16_t DevAddress, uint16_t MemAddress, uint8_t* pBuffer, uint32_t BufferSize)
-{
-  return (I2Cx_WriteMultiple(&hI2cExtHandler, DevAddress, MemAddress, I2C_MEMADD_SIZE_16BIT, pBuffer, BufferSize));
-}
-
-/**
-  * @brief  Read data from I2C EEPROM driver in using DMA channel.
-  * @param  DevAddress: Target device address
-  * @param  MemAddress: Internal memory address
-  * @param  pBuffer: Pointer to data buffer
-  * @param  BufferSize: Amount of data to be read
-  * @retval HAL status
-  */
-HAL_StatusTypeDef EEPROM_IO_ReadData(uint16_t DevAddress, uint16_t MemAddress, uint8_t* pBuffer, uint32_t BufferSize)
-{
-  return (I2Cx_ReadMultiple(&hI2cExtHandler, DevAddress, MemAddress, I2C_MEMADD_SIZE_16BIT, pBuffer, BufferSize));
-}
-
-/**
-  * @brief  Checks if target device is ready for communication. 
-  * @note   This function is used with Memory devices
-  * @param  DevAddress: Target device address
-  * @param  Trials: Number of trials
-  * @retval HAL status
-  */
-HAL_StatusTypeDef EEPROM_IO_IsDeviceReady(uint16_t DevAddress, uint32_t Trials)
-{ 
-  return (I2Cx_IsDeviceReady(&hI2cExtHandler, DevAddress, Trials));
-}
-
-/********************************* LINK TOUCHSCREEN *********************************/
-
-/**
-  * @brief  Initializes Touchscreen low level.
-  * @retval None
-  */
-void TS_IO_Init(void)
-{
-  I2Cx_Init(&hI2cAudioHandler);
-}
-
-/**
-  * @brief  Writes a single data.
-  * @param  Addr: I2C address
-  * @param  Reg: Reg address
-  * @param  Value: Data to be written
-  * @retval None
-  */
-void TS_IO_Write(uint8_t Addr, uint8_t Reg, uint8_t Value)
-{
-  I2Cx_WriteMultiple(&hI2cAudioHandler, Addr, (uint16_t)Reg, I2C_MEMADD_SIZE_8BIT,(uint8_t*)&Value, 1);
-}
-
-/**
-  * @brief  Reads a single data.
-  * @param  Addr: I2C address
-  * @param  Reg: Reg address
-  * @retval Data to be read
-  */
-uint8_t TS_IO_Read(uint8_t Addr, uint8_t Reg)
-{
-  uint8_t read_value = 0;
-
-  I2Cx_ReadMultiple(&hI2cAudioHandler, Addr, Reg, I2C_MEMADD_SIZE_8BIT, (uint8_t*)&read_value, 1);
-
-  return read_value;
-}
-
-/**
-  * @brief  TS delay
-  * @param  Delay: Delay in ms
-  * @retval None
-  */
-void TS_IO_Delay(uint32_t Delay)
-{
-  HAL_Delay(Delay);
-}
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */ 
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */    
-    
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r 85dbcff443aa -r 1a18e061d0ec Drivers/BSP/STM32746G-Discovery/stm32746g_discovery.h
--- a/Drivers/BSP/STM32746G-Discovery/stm32746g_discovery.h	Wed Nov 27 08:29:42 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,339 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    stm32746g_discovery.h
-  * @author  MCD Application Team
-  * @brief   This file contains definitions for STM32746G_DISCOVERY's LEDs,
-  *          push-buttons and COM ports hardware resources.
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT(c) 2016 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.
-  *
-  ******************************************************************************
-  */ 
-  
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __STM32746G_DISCOVERY_H
-#define __STM32746G_DISCOVERY_H
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include "stm32f7xx_hal.h"
-   
-/** @addtogroup BSP
-  * @{
-  */
-
-/** @addtogroup STM32746G_DISCOVERY
-  * @{
-  */
-      
-/** @addtogroup STM32746G_DISCOVERY_LOW_LEVEL
-  * @{
-  */ 
-
-/** @defgroup STM32746G_DISCOVERY_LOW_LEVEL_Exported_Types STM32746G_DISCOVERY_LOW_LEVEL Exported Types
-  * @{
-  */
-typedef enum 
-{
-  DISCO_LED1 = 0, // MBED
-  LED_GREEN = DISCO_LED1, // MBED
-}Led_TypeDef;
-
-typedef enum 
-{  
-  BUTTON_WAKEUP = 0,
-  BUTTON_TAMPER = 1,
-  BUTTON_KEY = 2
-}Button_TypeDef;
-
-typedef enum 
-{  
-  BUTTON_MODE_GPIO = 0,
-  BUTTON_MODE_EXTI = 1
-}ButtonMode_TypeDef;
-
-typedef enum 
-{
-  COM1 = 0,
-  COM2 = 1
-}COM_TypeDef;
-/**
-  * @}
-  */ 
-
-/** @defgroup STM32746G_DISCOVERY_LOW_LEVEL_Exported_Constants STM32746G_DISCOVERY_LOW_LEVEL Exported Constants
-  * @{
-  */ 
-
-/** 
-  * @brief  Define for STM32746G_DISCOVERY board
-  */ 
-#if !defined (USE_STM32746G_DISCO)
- #define USE_STM32746G_DISCO
-#endif
-
-/** @addtogroup STM32746G_DISCOVERY_LOW_LEVEL_LED
-  * @{
-  */
-
-#define LEDn                             ((uint8_t)1)
-
-#define LED1_GPIO_PORT                   GPIOI
-#define LED1_GPIO_CLK_ENABLE()           __HAL_RCC_GPIOI_CLK_ENABLE()
-#define LED1_GPIO_CLK_DISABLE()          __HAL_RCC_GPIOI_CLK_DISABLE()
-#define LED1_PIN                         GPIO_PIN_1
-
-/**
-  * @}
-  */
-
-/** @addtogroup STM32746G_DISCOVERY_LOW_LEVEL_BUTTON
-  * @{
-  */ 
-#define BUTTONn                             ((uint8_t)3) 
-
-/**
-  * @brief Wakeup push-button
-  */
-#define WAKEUP_BUTTON_PIN                   GPIO_PIN_11
-#define WAKEUP_BUTTON_GPIO_PORT             GPIOI
-#define WAKEUP_BUTTON_GPIO_CLK_ENABLE()     __HAL_RCC_GPIOI_CLK_ENABLE()
-#define WAKEUP_BUTTON_GPIO_CLK_DISABLE()    __HAL_RCC_GPIOI_CLK_DISABLE()
-#define WAKEUP_BUTTON_EXTI_IRQn             EXTI15_10_IRQn 
-
-/**
-  * @brief Tamper push-button
-  */
-#define TAMPER_BUTTON_PIN                    GPIO_PIN_11
-#define TAMPER_BUTTON_GPIO_PORT              GPIOI
-#define TAMPER_BUTTON_GPIO_CLK_ENABLE()      __HAL_RCC_GPIOI_CLK_ENABLE()
-#define TAMPER_BUTTON_GPIO_CLK_DISABLE()     __HAL_RCC_GPIOI_CLK_DISABLE()
-#define TAMPER_BUTTON_EXTI_IRQn              EXTI15_10_IRQn
-
-/**
-  * @brief Key push-button
-  */
-#define KEY_BUTTON_PIN                       GPIO_PIN_11
-#define KEY_BUTTON_GPIO_PORT                 GPIOI
-#define KEY_BUTTON_GPIO_CLK_ENABLE()         __HAL_RCC_GPIOI_CLK_ENABLE()
-#define KEY_BUTTON_GPIO_CLK_DISABLE()        __HAL_RCC_GPIOI_CLK_DISABLE()
-#define KEY_BUTTON_EXTI_IRQn                 EXTI15_10_IRQn
-
-#define BUTTONx_GPIO_CLK_ENABLE(__INDEX__)    do { if((__INDEX__) == 0) WAKEUP_BUTTON_GPIO_CLK_ENABLE(); else\
-                                                   if((__INDEX__) == 1) TAMPER_BUTTON_GPIO_CLK_ENABLE(); else\
-												                        KEY_BUTTON_GPIO_CLK_ENABLE(); } while(0)											   
-
-#define BUTTONx_GPIO_CLK_DISABLE(__INDEX__)    (((__INDEX__) == 0) ? WAKEUP_BUTTON_GPIO_CLK_DISABLE() :\
-                                                ((__INDEX__) == 1) ? TAMPER_BUTTON_GPIO_CLK_DISABLE() : KEY_BUTTON_GPIO_CLK_DISABLE())
-
-/**
-  * @}
-  */
-
-/** @addtogroup STM32746G_DISCOVERY_LOW_LEVEL_SIGNAL
-  * @{
-  */
-#define SIGNALn                             ((uint8_t)1)
-
-/**
-  * @brief SD-detect signal
-  */
-#define SD_DETECT_PIN                        GPIO_PIN_13
-#define SD_DETECT_GPIO_PORT                  GPIOC
-#define SD_DETECT_GPIO_CLK_ENABLE()          __HAL_RCC_GPIOC_CLK_ENABLE()
-#define SD_DETECT_GPIO_CLK_DISABLE()         __HAL_RCC_GPIOC_CLK_DISABLE()
-#define SD_DETECT_EXTI_IRQn                  EXTI15_10_IRQn
-
-/**
-  * @brief Touch screen interrupt signal
-  */
-#define TS_INT_PIN                           GPIO_PIN_13
-#define TS_INT_GPIO_PORT                     GPIOI
-#define TS_INT_GPIO_CLK_ENABLE()             __HAL_RCC_GPIOI_CLK_ENABLE()
-#define TS_INT_GPIO_CLK_DISABLE()            __HAL_RCC_GPIOI_CLK_DISABLE()
-#define TS_INT_EXTI_IRQn                     EXTI15_10_IRQn
-
-/**
-  * @}
-  */ 
-
-/** @addtogroup STM32746G_DISCOVERY_LOW_LEVEL_COM
-  * @{
-  */
-#define COMn                             ((uint8_t)1)
-
-/**
- * @brief Definition for COM port1, connected to USART1
- */ 
-#define DISCOVERY_COM1                          USART1
-#define DISCOVERY_COM1_CLK_ENABLE()             __HAL_RCC_USART1_CLK_ENABLE()
-#define DISCOVERY_COM1_CLK_DISABLE()            __HAL_RCC_USART1_CLK_DISABLE()
-
-#define DISCOVERY_COM1_TX_PIN                   GPIO_PIN_9
-#define DISCOVERY_COM1_TX_GPIO_PORT             GPIOA
-#define DISCOVERY_COM1_TX_GPIO_CLK_ENABLE()     __HAL_RCC_GPIOA_CLK_ENABLE()
-#define DISCOVERY_COM1_TX_GPIO_CLK_DISABLE()    __HAL_RCC_GPIOA_CLK_DISABLE()
-#define DISCOVERY_COM1_TX_AF                    GPIO_AF7_USART1
-
-#define DISCOVERY_COM1_RX_PIN                   GPIO_PIN_7
-#define DISCOVERY_COM1_RX_GPIO_PORT             GPIOB
-#define DISCOVERY_COM1_RX_GPIO_CLK_ENABLE()     __HAL_RCC_GPIOB_CLK_ENABLE()
-#define DISCOVERY_COM1_RX_GPIO_CLK_DISABLE()    __HAL_RCC_GPIOB_CLK_DISABLE()
-#define DISCOVERY_COM1_RX_AF                    GPIO_AF7_USART1
-
-#define DISCOVERY_COM1_IRQn                     USART1_IRQn
-
-#define DISCOVERY_COMx_CLK_ENABLE(__INDEX__)            do { if((__INDEX__) == COM1) DISCOVERY_COM1_CLK_ENABLE(); } while(0)
-#define DISCOVERY_COMx_CLK_DISABLE(__INDEX__)           (((__INDEX__) == 0) ? DISCOVERY_COM1_CLK_DISABLE() : 0)
-
-#define DISCOVERY_COMx_TX_GPIO_CLK_ENABLE(__INDEX__)    do { if((__INDEX__) == COM1) DISCOVERY_COM1_TX_GPIO_CLK_ENABLE(); } while(0)
-#define DISCOVERY_COMx_TX_GPIO_CLK_DISABLE(__INDEX__)   (((__INDEX__) == 0) ? DISCOVERY_COM1_TX_GPIO_CLK_DISABLE() : 0)
-
-#define DISCOVERY_COMx_RX_GPIO_CLK_ENABLE(__INDEX__)    do { if((__INDEX__) == COM1) DISCOVERY_COM1_RX_GPIO_CLK_ENABLE(); } while(0)
-#define DISCOVERY_COMx_RX_GPIO_CLK_DISABLE(__INDEX__)   (((__INDEX__) == 0) ? DISCOVERY_COM1_RX_GPIO_CLK_DISABLE() : 0)
-
-/* Exported constant IO ------------------------------------------------------*/
-
-#define LCD_I2C_ADDRESS                  ((uint16_t)0x70)
-#define CAMERA_I2C_ADDRESS               ((uint16_t)0x60)
-#define AUDIO_I2C_ADDRESS                ((uint16_t)0x34)
-#define EEPROM_I2C_ADDRESS_A01           ((uint16_t)0xA0)
-#define EEPROM_I2C_ADDRESS_A02           ((uint16_t)0xA6)
-#define TS_I2C_ADDRESS                   ((uint16_t)0x70)
-
-/* I2C clock speed configuration (in Hz) 
-   WARNING: 
-   Make sure that this define is not already declared in other files (ie. 
-   stm32746g_discovery.h file). It can be used in parallel by other modules. */
-#ifndef I2C_SPEED
- #define I2C_SPEED                       ((uint32_t)100000)
-#endif /* I2C_SPEED */
-
-/* User can use this section to tailor I2Cx/I2Cx instance used and associated 
-   resources */
-/* Definition for AUDIO and LCD I2Cx resources */
-#define DISCOVERY_AUDIO_I2Cx                             I2C3
-#define DISCOVERY_AUDIO_I2Cx_CLK_ENABLE()                __HAL_RCC_I2C3_CLK_ENABLE()
-#define DISCOVERY_AUDIO_DMAx_CLK_ENABLE()                __HAL_RCC_DMA1_CLK_ENABLE()
-#define DISCOVERY_AUDIO_I2Cx_SCL_SDA_GPIO_CLK_ENABLE()   __HAL_RCC_GPIOH_CLK_ENABLE()
-
-#define DISCOVERY_AUDIO_I2Cx_FORCE_RESET()               __HAL_RCC_I2C3_FORCE_RESET()
-#define DISCOVERY_AUDIO_I2Cx_RELEASE_RESET()             __HAL_RCC_I2C3_RELEASE_RESET()
-
-/* Definition for I2Cx Pins */
-#define DISCOVERY_AUDIO_I2Cx_SCL_PIN                     GPIO_PIN_7
-#define DISCOVERY_AUDIO_I2Cx_SCL_SDA_GPIO_PORT           GPIOH
-#define DISCOVERY_AUDIO_I2Cx_SCL_SDA_AF                  GPIO_AF4_I2C3
-#define DISCOVERY_AUDIO_I2Cx_SDA_PIN                     GPIO_PIN_8
-
-/* I2C interrupt requests */
-#define DISCOVERY_AUDIO_I2Cx_EV_IRQn                     I2C3_EV_IRQn
-#define DISCOVERY_AUDIO_I2Cx_ER_IRQn                     I2C3_ER_IRQn
-
-/* Definition for external, camera and Arduino connector I2Cx resources */
-#define DISCOVERY_EXT_I2Cx                               I2C1
-#define DISCOVERY_EXT_I2Cx_CLK_ENABLE()                  __HAL_RCC_I2C1_CLK_ENABLE()
-#define DISCOVERY_EXT_DMAx_CLK_ENABLE()                  __HAL_RCC_DMA1_CLK_ENABLE()
-#define DISCOVERY_EXT_I2Cx_SCL_SDA_GPIO_CLK_ENABLE()     __HAL_RCC_GPIOB_CLK_ENABLE()
-
-#define DISCOVERY_EXT_I2Cx_FORCE_RESET()                 __HAL_RCC_I2C1_FORCE_RESET()
-#define DISCOVERY_EXT_I2Cx_RELEASE_RESET()               __HAL_RCC_I2C1_RELEASE_RESET()
-
-/* Definition for I2Cx Pins */
-#define DISCOVERY_EXT_I2Cx_SCL_PIN                       GPIO_PIN_8
-#define DISCOVERY_EXT_I2Cx_SCL_SDA_GPIO_PORT             GPIOB
-#define DISCOVERY_EXT_I2Cx_SCL_SDA_AF                    GPIO_AF4_I2C1
-#define DISCOVERY_EXT_I2Cx_SDA_PIN                       GPIO_PIN_9
-
-/* I2C interrupt requests */
-#define DISCOVERY_EXT_I2Cx_EV_IRQn                       I2C1_EV_IRQn
-#define DISCOVERY_EXT_I2Cx_ER_IRQn                       I2C1_ER_IRQn
-
-/* I2C TIMING Register define when I2C clock source is SYSCLK */
-/* I2C TIMING is calculated from APB1 source clock = 50 MHz */
-/* Due to the big MOFSET capacity for adapting the camera level the rising time is very large (>1us) */
-/* 0x40912732 takes in account the big rising and aims a clock of 100khz */
-#ifndef DISCOVERY_I2Cx_TIMING  
-#define DISCOVERY_I2Cx_TIMING                      ((uint32_t)0x40912732)  
-#endif /* DISCOVERY_I2Cx_TIMING */
-
-/**
-  * @}
-  */ 
-
-/**
-  * @}
-  */ 
-  
-/** @defgroup STM32746G_DISCOVERY_LOW_LEVEL_Exported_Macros STM32746G_DISCOVERY_LOW_LEVEL Exported Macros
-  * @{
-  */  
-/**
-  * @}
-  */ 
-
-/** @addtogroup STM32746G_DISCOVERY_LOW_LEVEL_Exported_Functions
-  * @{
-  */
-uint32_t  BSP_GetVersion(void);
-void      BSP_LED_Init(Led_TypeDef Led);
-void      BSP_LED_DeInit(Led_TypeDef Led);
-void      BSP_LED_On(Led_TypeDef Led);
-void      BSP_LED_Off(Led_TypeDef Led);
-void      BSP_LED_Toggle(Led_TypeDef Led);
-void      BSP_PB_Init(Button_TypeDef Button, ButtonMode_TypeDef ButtonMode);
-void      BSP_PB_DeInit(Button_TypeDef Button);
-uint32_t  BSP_PB_GetState(Button_TypeDef Button);
-void      BSP_COM_Init(COM_TypeDef COM, UART_HandleTypeDef *husart);
-void      BSP_COM_DeInit(COM_TypeDef COM, UART_HandleTypeDef *huart);
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */ 
-
-/**
-  * @}
-  */ 
-
-/**
-  * @}
-  */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __STM32746G_DISCOVERY_H */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r 85dbcff443aa -r 1a18e061d0ec Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_audio.c
--- a/Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_audio.c	Wed Nov 27 08:29:42 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1401 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    stm32746g_discovery_audio.c
-  * @author  MCD Application Team
-  * @brief   This file provides the Audio driver for the STM32746G-Discovery board.
-  @verbatim
-    How To use this driver:
-    -----------------------
-       + This driver supports STM32F7xx devices on STM32746G-Discovery (MB1191) board.
-       + Call the function BSP_AUDIO_OUT_Init(
-                                        OutputDevice: physical output mode (OUTPUT_DEVICE_SPEAKER, 
-                                                      OUTPUT_DEVICE_HEADPHONE or OUTPUT_DEVICE_BOTH)
-                                        Volume      : Initial volume to be set (0 is min (mute), 100 is max (100%)
-                                        AudioFreq   : Audio frequency in Hz (8000, 16000, 22500, 32000...)
-                                                      this parameter is relative to the audio file/stream type.
-                                       )
-          This function configures all the hardware required for the audio application (codec, I2C, SAI, 
-          GPIOs, DMA and interrupt if needed). This function returns AUDIO_OK if configuration is OK.
-          If the returned value is different from AUDIO_OK or the function is stuck then the communication with
-          the codec or the MFX has failed (try to un-plug the power or reset device in this case).
-          - OUTPUT_DEVICE_SPEAKER  : only speaker will be set as output for the audio stream.
-          - OUTPUT_DEVICE_HEADPHONE: only headphones will be set as output for the audio stream.
-          - OUTPUT_DEVICE_BOTH     : both Speaker and Headphone are used as outputs for the audio stream
-                                     at the same time.
-          Note. On STM32746G-Discovery SAI_DMA is configured in CIRCULAR mode. Due to this the application
-            does NOT need to call BSP_AUDIO_OUT_ChangeBuffer() to assure streaming.
-       + Call the function BSP_DISCOVERY_AUDIO_OUT_Play(
-                                      pBuffer: pointer to the audio data file address
-                                      Size   : size of the buffer to be sent in Bytes
-                                     )
-          to start playing (for the first time) from the audio file/stream.
-       + Call the function BSP_AUDIO_OUT_Pause() to pause playing   
-       + Call the function BSP_AUDIO_OUT_Resume() to resume playing.
-           Note. After calling BSP_AUDIO_OUT_Pause() function for pause, only BSP_AUDIO_OUT_Resume() should be called
-              for resume (it is not allowed to call BSP_AUDIO_OUT_Play() in this case).
-           Note. This function should be called only when the audio file is played or paused (not stopped).
-       + For each mode, you may need to implement the relative callback functions into your code.
-          The Callback functions are named AUDIO_OUT_XXX_CallBack() and only their prototypes are declared in 
-          the stm32746g_discovery_audio.h file. (refer to the example for more details on the callbacks implementations)
-       + To Stop playing, to modify the volume level, the frequency, the audio frame slot, 
-          the device output mode the mute or the stop, use the functions: BSP_AUDIO_OUT_SetVolume(), 
-          AUDIO_OUT_SetFrequency(), BSP_AUDIO_OUT_SetAudioFrameSlot(), BSP_AUDIO_OUT_SetOutputMode(),
-          BSP_AUDIO_OUT_SetMute() and BSP_AUDIO_OUT_Stop().
-       + The driver API and the callback functions are at the end of the stm32746g_discovery_audio.h file.
-     
-    Driver architecture:
-    --------------------
-       + This driver provides the High Audio Layer: consists of the function API exported in the stm32746g_discovery_audio.h file
-         (BSP_AUDIO_OUT_Init(), BSP_AUDIO_OUT_Play() ...)
-       + This driver provide also the Media Access Layer (MAL): which consists of functions allowing to access the media containing/
-         providing the audio file/stream. These functions are also included as local functions into
-         the stm32746g_discovery_audio_codec.c file (SAIx_Out_Init() and SAIx_Out_DeInit(), SAIx_In_Init() and SAIx_In_DeInit())
-    
-    Known Limitations:
-    ------------------
-       1- If the TDM Format used to play in parallel 2 audio Stream (the first Stream is configured in codec SLOT0 and second 
-          Stream in SLOT1) the Pause/Resume, volume and mute feature will control the both streams.
-       2- Parsing of audio file is not implemented (in order to determine audio file properties: Mono/Stereo, Data size, 
-          File size, Audio Frequency, Audio Data header size ...). The configuration is fixed for the given audio file.
-       3- Supports only Stereo audio streaming.
-       4- Supports only 16-bits audio data size.
-  @endverbatim  
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT(c) 2016 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.
-  *
-  ******************************************************************************
-  */
-
-/* Dependencies
-- stm32746g_discovery.c
-- stm32f7xx_hal_sai.c
-- stm32f7xx_hal_dma.c
-- stm32f7xx_hal_gpio.c
-- stm32f7xx_hal_cortex.c
-- stm32f7xx_hal_rcc_ex.h
-- wm8994.c
-EndDependencies */
-
-/* Includes ------------------------------------------------------------------*/
-#include "stm32746g_discovery_audio.h"
-
-/** @addtogroup BSP
-  * @{
-  */
-
-/** @addtogroup STM32746G_DISCOVERY
-  * @{
-  */ 
-  
-/** @defgroup STM32746G_DISCOVERY_AUDIO STM32746G_DISCOVERY AUDIO
-  * @brief This file includes the low layer driver for wm8994 Audio Codec
-  *        available on STM32746G-Discovery board(MB1191).
-  * @{
-  */ 
-
-/** @defgroup STM32746G_DISCOVERY_AUDIO_Private_Types STM32746G_DISCOVERY AUDIO Private Types
-  * @{
-  */ 
-/**
-  * @}
-  */ 
-  
-/** @defgroup STM32746G_DISCOVERY_AUDIO_Private_Defines STM32746G_DISCOVERY AUDIO Private Defines
-  * @{
-  */
-/**
-  * @}
-  */ 
-
-/** @defgroup STM32746G_DISCOVERY_AUDIO_Private_Macros STM32746G_DISCOVERY AUDIO Private Macros
-  * @{
-  */
-/**
-  * @}
-  */ 
-  
-/** @defgroup STM32746G_DISCOVERY_AUDIO_Private_Variables STM32746G_DISCOVERY AUDIO Private Variables
-  * @{
-  */
-AUDIO_DrvTypeDef          *audio_drv;
-SAI_HandleTypeDef         haudio_out_sai={0};
-SAI_HandleTypeDef         haudio_in_sai={0};
-TIM_HandleTypeDef         haudio_tim;
-
-uint16_t __IO AudioInVolume = DEFAULT_AUDIO_IN_VOLUME;
-    
-/**
-  * @}
-  */ 
-
-/** @defgroup STM32746G_DISCOVERY_AUDIO_Private_Function_Prototypes STM32746G_DISCOVERY AUDIO Private Function Prototypes
-  * @{
-  */
-static void SAIx_Out_Init(uint32_t AudioFreq);
-static void SAIx_Out_DeInit(void);
-static void SAIx_In_Init(uint32_t SaiOutMode, uint32_t SlotActive, uint32_t AudioFreq);
-static void SAIx_In_DeInit(void);
-/**
-  * @}
-  */ 
-
-/** @defgroup STM32746G_DISCOVERY_AUDIO_OUT_Exported_Functions STM32746G_DISCOVERY AUDIO Out Exported Functions
-  * @{
-  */ 
-
-/**
-  * @brief  Configures the audio peripherals.
-  * @param  OutputDevice: OUTPUT_DEVICE_SPEAKER, OUTPUT_DEVICE_HEADPHONE,
-  *                       or OUTPUT_DEVICE_BOTH.
-  * @param  Volume: Initial volume level (from 0 (Mute) to 100 (Max))
-  * @param  AudioFreq: Audio frequency used to play the audio stream.
-  * @note   The I2S PLL input clock must be done in the user application.  
-  * @retval AUDIO_OK if correct communication, else wrong communication
-  */
-uint8_t BSP_AUDIO_OUT_Init(uint16_t OutputDevice, uint8_t Volume, uint32_t AudioFreq)
-{ 
-  uint8_t ret = AUDIO_ERROR;
-  uint32_t deviceid = 0x00;
-
-  /* Disable SAI */
-  SAIx_Out_DeInit();
-
-  /* PLL clock is set depending on the AudioFreq (44.1khz vs 48khz groups) */
-  BSP_AUDIO_OUT_ClockConfig(&haudio_out_sai, AudioFreq, NULL);
- 
-  /* SAI data transfer preparation:
-  Prepare the Media to be used for the audio transfer from memory to SAI peripheral */
-  haudio_out_sai.Instance = AUDIO_OUT_SAIx;
-  if(HAL_SAI_GetState(&haudio_out_sai) == HAL_SAI_STATE_RESET)
-  {
-    /* Init the SAI MSP: this __weak function can be redefined by the application*/
-    BSP_AUDIO_OUT_MspInit(&haudio_out_sai, NULL);
-  }
-  SAIx_Out_Init(AudioFreq);
-
-  /* wm8994 codec initialization */
-  deviceid = wm8994_drv.ReadID(AUDIO_I2C_ADDRESS);
-  
-  if((deviceid) == WM8994_ID)
-  {  
-    /* Reset the Codec Registers */
-    wm8994_drv.Reset(AUDIO_I2C_ADDRESS);
-    /* Initialize the audio driver structure */
-    audio_drv = &wm8994_drv; 
-    ret = AUDIO_OK;
-  }
-  else
-  {
-    ret = AUDIO_ERROR;
-  }
-
-  if(ret == AUDIO_OK)
-  {
-    /* Initialize the codec internal registers */
-    audio_drv->Init(AUDIO_I2C_ADDRESS, OutputDevice, Volume, AudioFreq);
-  }
- 
-  return ret;
-}
-
-/**
-  * @brief  Starts playing audio stream from a data buffer for a determined size. 
-  * @param  pBuffer: Pointer to the buffer 
-  * @param  Size: Number of audio data in BYTES unit.
-  *         In memory, first element is for left channel, second element is for right channel
-  * @retval AUDIO_OK if correct communication, else wrong communication
-  */
-uint8_t BSP_AUDIO_OUT_Play(uint16_t* pBuffer, uint32_t Size)
-{
-  /* Call the audio Codec Play function */
-  if(audio_drv->Play(AUDIO_I2C_ADDRESS, pBuffer, Size) != 0)
-  {  
-    return AUDIO_ERROR;
-  }
-  else
-  {
-    /* Update the Media layer and enable it for play */  
-    HAL_SAI_Transmit_DMA(&haudio_out_sai, (uint8_t*) pBuffer, DMA_MAX(Size / AUDIODATA_SIZE));
-    
-    return AUDIO_OK;
-  }
-}
-
-/**
-  * @brief  Sends n-Bytes on the SAI interface.
-  * @param  pData: pointer on data address 
-  * @param  Size: number of data to be written
-  * @retval None
-  */
-void BSP_AUDIO_OUT_ChangeBuffer(uint16_t *pData, uint16_t Size)
-{
-   HAL_SAI_Transmit_DMA(&haudio_out_sai, (uint8_t*) pData, Size);
-}
-
-/**
-  * @brief  This function Pauses the audio file stream. In case
-  *         of using DMA, the DMA Pause feature is used.
-  * @note When calling BSP_AUDIO_OUT_Pause() function for pause, only
-  *          BSP_AUDIO_OUT_Resume() function should be called for resume (use of BSP_AUDIO_OUT_Play() 
-  *          function for resume could lead to unexpected behaviour).
-  * @retval AUDIO_OK if correct communication, else wrong communication
-  */
-uint8_t BSP_AUDIO_OUT_Pause(void)
-{    
-  /* Call the Audio Codec Pause/Resume function */
-  if(audio_drv->Pause(AUDIO_I2C_ADDRESS) != 0)
-  {
-    return AUDIO_ERROR;
-  }
-  else
-  {
-    /* Call the Media layer pause function */
-    HAL_SAI_DMAPause(&haudio_out_sai);
-    
-    /* Return AUDIO_OK when all operations are correctly done */
-    return AUDIO_OK;
-  }
-}
-
-/**
-  * @brief  This function  Resumes the audio file stream.  
-  * @note When calling BSP_AUDIO_OUT_Pause() function for pause, only
-  *          BSP_AUDIO_OUT_Resume() function should be called for resume (use of BSP_AUDIO_OUT_Play() 
-  *          function for resume could lead to unexpected behaviour).
-  * @retval AUDIO_OK if correct communication, else wrong communication
-  */
-uint8_t BSP_AUDIO_OUT_Resume(void)
-{    
-  /* Call the Audio Codec Pause/Resume function */
-  if(audio_drv->Resume(AUDIO_I2C_ADDRESS) != 0)
-  {
-    return AUDIO_ERROR;
-  }
-  else
-  {
-    /* Call the Media layer pause/resume function */
-    HAL_SAI_DMAResume(&haudio_out_sai);
-    
-    /* Return AUDIO_OK when all operations are correctly done */
-    return AUDIO_OK;
-  }
-}
-
-/**
-  * @brief  Stops audio playing and Power down the Audio Codec. 
-  * @param  Option: could be one of the following parameters 
-  *           - CODEC_PDWN_SW: for software power off (by writing registers). 
-  *                            Then no need to reconfigure the Codec after power on.
-  *           - CODEC_PDWN_HW: completely shut down the codec (physically). 
-  *                            Then need to reconfigure the Codec after power on.  
-  * @retval AUDIO_OK if correct communication, else wrong communication
-  */
-uint8_t BSP_AUDIO_OUT_Stop(uint32_t Option)
-{
-  /* Call the Media layer stop function */
-  HAL_SAI_DMAStop(&haudio_out_sai);
-  
-  /* Call Audio Codec Stop function */
-  if(audio_drv->Stop(AUDIO_I2C_ADDRESS, Option) != 0)
-  {
-    return AUDIO_ERROR;
-  }
-  else
-  {
-    if(Option == CODEC_PDWN_HW)
-    { 
-      /* Wait at least 100us */
-      HAL_Delay(1);
-    }
-    /* Return AUDIO_OK when all operations are correctly done */
-    return AUDIO_OK;
-  }
-}
-
-/**
-  * @brief  Controls the current audio volume level. 
-  * @param  Volume: Volume level to be set in percentage from 0% to 100% (0 for 
-  *         Mute and 100 for Max volume level).
-  * @retval AUDIO_OK if correct communication, else wrong communication
-  */
-uint8_t BSP_AUDIO_OUT_SetVolume(uint8_t Volume)
-{
-  /* Call the codec volume control function with converted volume value */
-  if(audio_drv->SetVolume(AUDIO_I2C_ADDRESS, Volume) != 0)
-  {
-    return AUDIO_ERROR;
-  }
-  else
-  {
-    /* Return AUDIO_OK when all operations are correctly done */
-    return AUDIO_OK;
-  }
-}
-
-/**
-  * @brief  Enables or disables the MUTE mode by software 
-  * @param  Cmd: Could be AUDIO_MUTE_ON to mute sound or AUDIO_MUTE_OFF to 
-  *         unmute the codec and restore previous volume level.
-  * @retval AUDIO_OK if correct communication, else wrong communication
-  */
-uint8_t BSP_AUDIO_OUT_SetMute(uint32_t Cmd)
-{ 
-  /* Call the Codec Mute function */
-  if(audio_drv->SetMute(AUDIO_I2C_ADDRESS, Cmd) != 0)
-  {
-    return AUDIO_ERROR;
-  }
-  else
-  {
-    /* Return AUDIO_OK when all operations are correctly done */
-    return AUDIO_OK;
-  }
-}
-
-/**
-  * @brief  Switch dynamically (while audio file is played) the output target 
-  *         (speaker or headphone).
-  * @param  Output: The audio output target: OUTPUT_DEVICE_SPEAKER,
-  *         OUTPUT_DEVICE_HEADPHONE or OUTPUT_DEVICE_BOTH
-  * @retval AUDIO_OK if correct communication, else wrong communication
-  */
-uint8_t BSP_AUDIO_OUT_SetOutputMode(uint8_t Output)
-{
-  /* Call the Codec output device function */
-  if(audio_drv->SetOutputMode(AUDIO_I2C_ADDRESS, Output) != 0)
-  {
-    return AUDIO_ERROR;
-  }
-  else
-  {
-    /* Return AUDIO_OK when all operations are correctly done */
-    return AUDIO_OK;
-  }
-}
-
-/**
-  * @brief  Updates the audio frequency.
-  * @param  AudioFreq: Audio frequency used to play the audio stream.
-  * @note   This API should be called after the BSP_AUDIO_OUT_Init() to adjust the
-  *         audio frequency.
-  * @retval None
-  */
-void BSP_AUDIO_OUT_SetFrequency(uint32_t AudioFreq)
-{ 
-  /* PLL clock is set depending by the AudioFreq (44.1khz vs 48khz groups) */ 
-  BSP_AUDIO_OUT_ClockConfig(&haudio_out_sai, AudioFreq, NULL);
-
-  /* Disable SAI peripheral to allow access to SAI internal registers */
-  __HAL_SAI_DISABLE(&haudio_out_sai);
-  
-  /* Update the SAI audio frequency configuration */
-  haudio_out_sai.Init.AudioFrequency = AudioFreq;
-  HAL_SAI_Init(&haudio_out_sai);
-  
-  /* Enable SAI peripheral to generate MCLK */
-  __HAL_SAI_ENABLE(&haudio_out_sai);
-}
-
-/**
-  * @brief  Updates the Audio frame slot configuration.
-  * @param  AudioFrameSlot: specifies the audio Frame slot
-  *         This parameter can be one of the following values
-  *            @arg CODEC_AUDIOFRAME_SLOT_0123
-  *            @arg CODEC_AUDIOFRAME_SLOT_02
-  *            @arg CODEC_AUDIOFRAME_SLOT_13
-  * @note   This API should be called after the BSP_AUDIO_OUT_Init() to adjust the
-  *         audio frame slot.
-  * @retval None
-  */
-void BSP_AUDIO_OUT_SetAudioFrameSlot(uint32_t AudioFrameSlot)
-{ 
-  /* Disable SAI peripheral to allow access to SAI internal registers */
-  __HAL_SAI_DISABLE(&haudio_out_sai);
-  
-  /* Update the SAI audio frame slot configuration */
-  haudio_out_sai.SlotInit.SlotActive = AudioFrameSlot;
-  HAL_SAI_Init(&haudio_out_sai);
-  
-  /* Enable SAI peripheral to generate MCLK */
-  __HAL_SAI_ENABLE(&haudio_out_sai);
-}
-
-/**
-  * @brief  Deinit the audio peripherals.
-  * @retval None
-  */
-void BSP_AUDIO_OUT_DeInit(void)
-{
-  SAIx_Out_DeInit();
-  /* DeInit the SAI MSP : this __weak function can be rewritten by the application */
-  BSP_AUDIO_OUT_MspDeInit(&haudio_out_sai, NULL);
-}
-
-/**
-  * @brief  Tx Transfer completed callbacks.
-  * @param  hsai: SAI handle
-  * @retval None
-  */
-void HAL_SAI_TxCpltCallback(SAI_HandleTypeDef *hsai)
-{
-  /* Manage the remaining file size and new address offset: This function 
-     should be coded by user (its prototype is already declared in stm32746g_discovery_audio.h) */
-  BSP_AUDIO_OUT_TransferComplete_CallBack();
-}
-
-/**
-  * @brief  Tx Half Transfer completed callbacks.
-  * @param  hsai: SAI handle
-  * @retval None
-  */
-void HAL_SAI_TxHalfCpltCallback(SAI_HandleTypeDef *hsai)
-{
-  /* Manage the remaining file size and new address offset: This function 
-     should be coded by user (its prototype is already declared in stm32746g_discovery_audio.h) */
-  BSP_AUDIO_OUT_HalfTransfer_CallBack();
-}
-
-/**
-  * @brief  SAI error callbacks.
-  * @param  hsai: SAI handle
-  * @retval None
-  */
-void HAL_SAI_ErrorCallback(SAI_HandleTypeDef *hsai)
-{
-  HAL_SAI_StateTypeDef audio_out_state;
-  HAL_SAI_StateTypeDef audio_in_state;
-
-  audio_out_state = HAL_SAI_GetState(&haudio_out_sai);
-  audio_in_state = HAL_SAI_GetState(&haudio_in_sai);
-
-  /* Determines if it is an audio out or audio in error */
-  if ((audio_out_state == HAL_SAI_STATE_BUSY) || (audio_out_state == HAL_SAI_STATE_BUSY_TX))
-  {
-    BSP_AUDIO_OUT_Error_CallBack();
-  }
-
-  if ((audio_in_state == HAL_SAI_STATE_BUSY) || (audio_in_state == HAL_SAI_STATE_BUSY_RX))
-  {
-    BSP_AUDIO_IN_Error_CallBack();
-  }
-}
-
-/**
-  * @brief  Manages the DMA full Transfer complete event.
-  * @retval None
-  */
-__weak void BSP_AUDIO_OUT_TransferComplete_CallBack(void)
-{
-}
-
-/**
-  * @brief  Manages the DMA Half Transfer complete event.
-  * @retval None
-  */
-__weak void BSP_AUDIO_OUT_HalfTransfer_CallBack(void)
-{ 
-}
-
-/**
-  * @brief  Manages the DMA FIFO error event.
-  * @retval None
-  */
-__weak void BSP_AUDIO_OUT_Error_CallBack(void)
-{
-}
-
-/**
-  * @brief  Initializes BSP_AUDIO_OUT MSP.
-  * @param  hsai: SAI handle
-  * @param  Params
-  * @retval None
-  */
-__weak void BSP_AUDIO_OUT_MspInit(SAI_HandleTypeDef *hsai, void *Params)
-{ 
-  static DMA_HandleTypeDef hdma_sai_tx;
-  GPIO_InitTypeDef  gpio_init_structure;  
-
-  /* Enable SAI clock */
-  AUDIO_OUT_SAIx_CLK_ENABLE();
-  
-  /* Enable GPIO clock */
-  AUDIO_OUT_SAIx_MCLK_ENABLE();
-  AUDIO_OUT_SAIx_SCK_SD_ENABLE();
-  AUDIO_OUT_SAIx_FS_ENABLE();
-  /* CODEC_SAI pins configuration: FS, SCK, MCK and SD pins ------------------*/
-  gpio_init_structure.Pin = AUDIO_OUT_SAIx_FS_PIN;
-  gpio_init_structure.Mode = GPIO_MODE_AF_PP;
-  gpio_init_structure.Pull = GPIO_NOPULL;
-  gpio_init_structure.Speed = GPIO_SPEED_HIGH;
-  gpio_init_structure.Alternate = AUDIO_OUT_SAIx_FS_SD_MCLK_AF;
-  HAL_GPIO_Init(AUDIO_OUT_SAIx_FS_GPIO_PORT, &gpio_init_structure);
-
-  gpio_init_structure.Pin = AUDIO_OUT_SAIx_SCK_PIN;
-  gpio_init_structure.Mode = GPIO_MODE_AF_PP;
-  gpio_init_structure.Pull = GPIO_NOPULL;
-  gpio_init_structure.Speed = GPIO_SPEED_HIGH;
-  gpio_init_structure.Alternate = AUDIO_OUT_SAIx_SCK_AF;
-  HAL_GPIO_Init(AUDIO_OUT_SAIx_SCK_SD_GPIO_PORT, &gpio_init_structure);
-
-  gpio_init_structure.Pin =  AUDIO_OUT_SAIx_SD_PIN;
-  gpio_init_structure.Mode = GPIO_MODE_AF_PP;
-  gpio_init_structure.Pull = GPIO_NOPULL;
-  gpio_init_structure.Speed = GPIO_SPEED_HIGH;
-  gpio_init_structure.Alternate = AUDIO_OUT_SAIx_FS_SD_MCLK_AF;
-  HAL_GPIO_Init(AUDIO_OUT_SAIx_SCK_SD_GPIO_PORT, &gpio_init_structure);
-
-  gpio_init_structure.Pin = AUDIO_OUT_SAIx_MCLK_PIN;
-  gpio_init_structure.Mode = GPIO_MODE_AF_PP;
-  gpio_init_structure.Pull = GPIO_NOPULL;
-  gpio_init_structure.Speed = GPIO_SPEED_HIGH;
-  gpio_init_structure.Alternate = AUDIO_OUT_SAIx_FS_SD_MCLK_AF;
-  HAL_GPIO_Init(AUDIO_OUT_SAIx_MCLK_GPIO_PORT, &gpio_init_structure);
-
-  /* Enable the DMA clock */
-  AUDIO_OUT_SAIx_DMAx_CLK_ENABLE();
-    
-  if(hsai->Instance == AUDIO_OUT_SAIx)
-  {
-    /* Configure the hdma_saiTx handle parameters */   
-    hdma_sai_tx.Init.Channel             = AUDIO_OUT_SAIx_DMAx_CHANNEL;
-    hdma_sai_tx.Init.Direction           = DMA_MEMORY_TO_PERIPH;
-    hdma_sai_tx.Init.PeriphInc           = DMA_PINC_DISABLE;
-    hdma_sai_tx.Init.MemInc              = DMA_MINC_ENABLE;
-    hdma_sai_tx.Init.PeriphDataAlignment = AUDIO_OUT_SAIx_DMAx_PERIPH_DATA_SIZE;
-    hdma_sai_tx.Init.MemDataAlignment    = AUDIO_OUT_SAIx_DMAx_MEM_DATA_SIZE;
-    hdma_sai_tx.Init.Mode                = DMA_CIRCULAR;
-    hdma_sai_tx.Init.Priority            = DMA_PRIORITY_HIGH;
-    hdma_sai_tx.Init.FIFOMode            = DMA_FIFOMODE_ENABLE;         
-    hdma_sai_tx.Init.FIFOThreshold       = DMA_FIFO_THRESHOLD_FULL;
-    hdma_sai_tx.Init.MemBurst            = DMA_MBURST_SINGLE;
-    hdma_sai_tx.Init.PeriphBurst         = DMA_PBURST_SINGLE; 
-    
-    hdma_sai_tx.Instance = AUDIO_OUT_SAIx_DMAx_STREAM;
-    
-    /* Associate the DMA handle */
-    __HAL_LINKDMA(hsai, hdmatx, hdma_sai_tx);
-    
-    /* Deinitialize the Stream for new transfer */
-    HAL_DMA_DeInit(&hdma_sai_tx);
-    
-    /* Configure the DMA Stream */
-    HAL_DMA_Init(&hdma_sai_tx);      
-  }
-  
-  /* SAI DMA IRQ Channel configuration */
-  HAL_NVIC_SetPriority(AUDIO_OUT_SAIx_DMAx_IRQ, AUDIO_OUT_IRQ_PREPRIO, 0);
-  HAL_NVIC_EnableIRQ(AUDIO_OUT_SAIx_DMAx_IRQ); 
-}
-
-/**
-  * @brief  Deinitializes SAI MSP.
-  * @param  hsai: SAI handle
-  * @param  Params
-  * @retval None
-  */
-__weak void BSP_AUDIO_OUT_MspDeInit(SAI_HandleTypeDef *hsai, void *Params)
-{
-    GPIO_InitTypeDef  gpio_init_structure;
-
-    /* SAI DMA IRQ Channel deactivation */
-    HAL_NVIC_DisableIRQ(AUDIO_OUT_SAIx_DMAx_IRQ);
-
-    if(hsai->Instance == AUDIO_OUT_SAIx)
-    {
-      /* Deinitialize the DMA stream */
-      HAL_DMA_DeInit(hsai->hdmatx);
-    }
-
-    /* Disable SAI peripheral */
-    __HAL_SAI_DISABLE(hsai);  
-
-    /* Deactives CODEC_SAI pins FS, SCK, MCK and SD by putting them in input mode */
-    gpio_init_structure.Pin = AUDIO_OUT_SAIx_FS_PIN;
-    HAL_GPIO_DeInit(AUDIO_OUT_SAIx_FS_GPIO_PORT, gpio_init_structure.Pin);
-
-    gpio_init_structure.Pin = AUDIO_OUT_SAIx_SCK_PIN;
-    HAL_GPIO_DeInit(AUDIO_OUT_SAIx_SCK_SD_GPIO_PORT, gpio_init_structure.Pin);
-
-    gpio_init_structure.Pin =  AUDIO_OUT_SAIx_SD_PIN;
-    HAL_GPIO_DeInit(AUDIO_OUT_SAIx_SCK_SD_GPIO_PORT, gpio_init_structure.Pin);
-
-    gpio_init_structure.Pin = AUDIO_OUT_SAIx_MCLK_PIN;
-    HAL_GPIO_DeInit(AUDIO_OUT_SAIx_MCLK_GPIO_PORT, gpio_init_structure.Pin);
-  
-    /* Disable SAI clock */
-    AUDIO_OUT_SAIx_CLK_DISABLE();
-
-    /* GPIO pins clock and DMA clock can be shut down in the application
-       by surcharging this __weak function */
-}
-
-/**
-  * @brief  Clock Config.
-  * @param  hsai: might be required to set audio peripheral predivider if any.
-  * @param  AudioFreq: Audio frequency used to play the audio stream.
-  * @param  Params  
-  * @note   This API is called by BSP_AUDIO_OUT_Init() and BSP_AUDIO_OUT_SetFrequency()
-  *         Being __weak it can be overwritten by the application     
-  * @retval None
-  */
-__weak void BSP_AUDIO_OUT_ClockConfig(SAI_HandleTypeDef *hsai, uint32_t AudioFreq, void *Params)
-{ 
-  RCC_PeriphCLKInitTypeDef rcc_ex_clk_init_struct;
-
-  HAL_RCCEx_GetPeriphCLKConfig(&rcc_ex_clk_init_struct);
-  
-  /* Set the PLL configuration according to the audio frequency */
-  if((AudioFreq == AUDIO_FREQUENCY_11K) || (AudioFreq == AUDIO_FREQUENCY_22K) || (AudioFreq == AUDIO_FREQUENCY_44K))
-  {
-    /* Configure PLLI2S prescalers */
-    /* PLLI2S_VCO: VCO_429M
-    I2S_CLK(first level) = PLLI2S_VCO/PLLI2SQ = 429/2 = 214.5 Mhz
-    I2S_CLK_x = I2S_CLK(first level)/PLLI2SDIVQ = 214.5/19 = 11.289 Mhz */
-    rcc_ex_clk_init_struct.PeriphClockSelection = RCC_PERIPHCLK_SAI2;
-    rcc_ex_clk_init_struct.Sai2ClockSelection = RCC_SAI2CLKSOURCE_PLLI2S;
-    rcc_ex_clk_init_struct.PLLI2S.PLLI2SN = 429;
-    rcc_ex_clk_init_struct.PLLI2S.PLLI2SQ = 2;
-    rcc_ex_clk_init_struct.PLLI2SDivQ = 19;
-    
-    HAL_RCCEx_PeriphCLKConfig(&rcc_ex_clk_init_struct);
-    
-  }
-  else /* AUDIO_FREQUENCY_8K, AUDIO_FREQUENCY_16K, AUDIO_FREQUENCY_48K), AUDIO_FREQUENCY_96K */
-  {
-    /* I2S clock config
-    PLLI2S_VCO: VCO_344M
-    I2S_CLK(first level) = PLLI2S_VCO/PLLI2SQ = 344/7 = 49.142 Mhz
-    I2S_CLK_x = I2S_CLK(first level)/PLLI2SDIVQ = 49.142/1 = 49.142 Mhz */
-    rcc_ex_clk_init_struct.PeriphClockSelection = RCC_PERIPHCLK_SAI2;
-    rcc_ex_clk_init_struct.Sai2ClockSelection = RCC_SAI2CLKSOURCE_PLLI2S;
-    rcc_ex_clk_init_struct.PLLI2S.PLLI2SN = 344;
-    rcc_ex_clk_init_struct.PLLI2S.PLLI2SQ = 7;
-    rcc_ex_clk_init_struct.PLLI2SDivQ = 1;
-    
-    HAL_RCCEx_PeriphCLKConfig(&rcc_ex_clk_init_struct);
-  }
-}
-
-/*******************************************************************************
-                            Static Functions
-*******************************************************************************/
-
-/**
-  * @brief  Initializes the output Audio Codec audio interface (SAI).
-  * @param  AudioFreq: Audio frequency to be configured for the SAI peripheral.
-  * @note   The default SlotActive configuration is set to CODEC_AUDIOFRAME_SLOT_0123 
-  *         and user can update this configuration using 
-  * @retval None
-  */
-static void SAIx_Out_Init(uint32_t AudioFreq)
-{
-  /* Initialize the haudio_out_sai Instance parameter */
-  haudio_out_sai.Instance = AUDIO_OUT_SAIx;
-  
-  /* Disable SAI peripheral to allow access to SAI internal registers */
-  __HAL_SAI_DISABLE(&haudio_out_sai);
-  
-  /* Configure SAI_Block_x 
-  LSBFirst: Disabled 
-  DataSize: 16 */
-  haudio_out_sai.Init.AudioFrequency = AudioFreq;
-  haudio_out_sai.Init.AudioMode = SAI_MODEMASTER_TX;
-  haudio_out_sai.Init.NoDivider = SAI_MASTERDIVIDER_ENABLED;
-  haudio_out_sai.Init.Protocol = SAI_FREE_PROTOCOL;
-  haudio_out_sai.Init.DataSize = SAI_DATASIZE_16;
-  haudio_out_sai.Init.FirstBit = SAI_FIRSTBIT_MSB;
-  haudio_out_sai.Init.ClockStrobing = SAI_CLOCKSTROBING_RISINGEDGE;
-  haudio_out_sai.Init.Synchro = SAI_ASYNCHRONOUS;
-  haudio_out_sai.Init.OutputDrive = SAI_OUTPUTDRIVE_ENABLED;
-  haudio_out_sai.Init.FIFOThreshold = SAI_FIFOTHRESHOLD_1QF;
-  
-  /* Configure SAI_Block_x Frame 
-  Frame Length: 64
-  Frame active Length: 32
-  FS Definition: Start frame + Channel Side identification
-  FS Polarity: FS active Low
-  FS Offset: FS asserted one bit before the first bit of slot 0 */ 
-  haudio_out_sai.FrameInit.FrameLength = 64; 
-  haudio_out_sai.FrameInit.ActiveFrameLength = 32;
-  haudio_out_sai.FrameInit.FSDefinition = SAI_FS_CHANNEL_IDENTIFICATION;
-  haudio_out_sai.FrameInit.FSPolarity = SAI_FS_ACTIVE_LOW;
-  haudio_out_sai.FrameInit.FSOffset = SAI_FS_BEFOREFIRSTBIT;
-  
-  /* Configure SAI Block_x Slot 
-  Slot First Bit Offset: 0
-  Slot Size  : 16
-  Slot Number: 4
-  Slot Active: All slot actives */
-  haudio_out_sai.SlotInit.FirstBitOffset = 0;
-  haudio_out_sai.SlotInit.SlotSize = SAI_SLOTSIZE_DATASIZE;
-  haudio_out_sai.SlotInit.SlotNumber = 4; 
-  haudio_out_sai.SlotInit.SlotActive = CODEC_AUDIOFRAME_SLOT_0123;
-
-  HAL_SAI_Init(&haudio_out_sai);
-  
-  /* Enable SAI peripheral to generate MCLK */
-  __HAL_SAI_ENABLE(&haudio_out_sai);
-}
-
-
-
-/**
-  * @brief  Deinitializes the output Audio Codec audio interface (SAI).
-  * @retval None
-  */
-static void SAIx_Out_DeInit(void)
-{
-  /* Initialize the haudio_out_sai Instance parameter */
-  haudio_out_sai.Instance = AUDIO_OUT_SAIx;
-
-  /* Disable SAI peripheral */
-  __HAL_SAI_DISABLE(&haudio_out_sai);
-
-  HAL_SAI_DeInit(&haudio_out_sai);
-}
-
-/**
-  * @}
-  */
-
-/** @defgroup STM32746G_DISCOVERY_AUDIO_Out_Private_Functions STM32746G_DISCOVERY_AUDIO Out Private Functions
-  * @{
-  */ 
-
-/**
-  * @brief  Initializes wave recording.
-  * @param  AudioFreq: Audio frequency to be configured for the SAI peripheral.
-  * @param  BitRes: Audio frequency to be configured.
-  * @param  ChnlNbr: Channel number.
-  * @retval AUDIO_OK if correct communication, else wrong communication
-  */
-uint8_t BSP_AUDIO_IN_Init(uint32_t AudioFreq, uint32_t BitRes, uint32_t ChnlNbr)
-{
-  return BSP_AUDIO_IN_InitEx(INPUT_DEVICE_DIGITAL_MICROPHONE_2, AudioFreq, BitRes, ChnlNbr); 
-}
-
-/**
-  * @brief  Initializes wave recording.
-  * @param  InputDevice: INPUT_DEVICE_DIGITAL_MICROPHONE_2 or INPUT_DEVICE_INPUT_LINE_1
-  * @param  AudioFreq: Audio frequency to be configured for the SAI peripheral.
-  * @param  BitRes: Audio frequency to be configured.
-  * @param  ChnlNbr: Channel number.
-  * @retval AUDIO_OK if correct communication, else wrong communication
-  */
-uint8_t BSP_AUDIO_IN_InitEx(uint16_t InputDevice, uint32_t AudioFreq, uint32_t BitRes, uint32_t ChnlNbr)
-{
-  uint8_t ret = AUDIO_ERROR;
-  uint32_t deviceid = 0x00;
-  uint32_t slot_active;
-
-  if ((InputDevice != INPUT_DEVICE_INPUT_LINE_1) &&       /* Only INPUT_LINE_1 and MICROPHONE_2 inputs supported */
-      (InputDevice != INPUT_DEVICE_DIGITAL_MICROPHONE_2))
-  {
-    ret = AUDIO_ERROR;
-  }
-  else
-  {
-    /* Disable SAI */
-    SAIx_In_DeInit();
-
-    /* PLL clock is set depending on the AudioFreq (44.1khz vs 48khz groups) */
-    BSP_AUDIO_OUT_ClockConfig(&haudio_in_sai, AudioFreq, NULL); /* Clock config is shared between AUDIO IN and OUT */
-
-    /* SAI data transfer preparation:
-    Prepare the Media to be used for the audio transfer from SAI peripheral to memory */
-    haudio_in_sai.Instance = AUDIO_IN_SAIx;
-    if(HAL_SAI_GetState(&haudio_in_sai) == HAL_SAI_STATE_RESET)
-    {
-      /* Init the SAI MSP: this __weak function can be redefined by the application*/
-      BSP_AUDIO_OUT_MspInit(&haudio_in_sai, NULL);  /* Initialize GPIOs for SAI2 block A Master signals */
-      BSP_AUDIO_IN_MspInit(&haudio_in_sai, NULL);
-    }
-
-    /* Configure SAI in master RX mode :
-     *   - SAI2_block_A in master RX mode
-     *   - SAI2_block_B in slave RX mode synchronous from SAI2_block_A
-     */
-    if (InputDevice == INPUT_DEVICE_DIGITAL_MICROPHONE_2)
-    {
-      slot_active = CODEC_AUDIOFRAME_SLOT_13;
-    }
-    else
-    {
-      slot_active = CODEC_AUDIOFRAME_SLOT_02;
-    }
-    SAIx_In_Init(SAI_MODEMASTER_RX, slot_active, AudioFreq);
-
-    /* wm8994 codec initialization */
-    deviceid = wm8994_drv.ReadID(AUDIO_I2C_ADDRESS);
-
-    if((deviceid) == WM8994_ID)
-    {
-      /* Reset the Codec Registers */
-      wm8994_drv.Reset(AUDIO_I2C_ADDRESS);
-      /* Initialize the audio driver structure */
-      audio_drv = &wm8994_drv;
-      ret = AUDIO_OK;
-    }
-    else
-    {
-      ret = AUDIO_ERROR;
-    }
-
-    if(ret == AUDIO_OK)
-    {
-      /* Initialize the codec internal registers */
-      audio_drv->Init(AUDIO_I2C_ADDRESS, InputDevice, 100, AudioFreq);
-    }
-  }
-  return ret;
-}
-
-/**
-  * @brief  Initializes wave recording and playback in parallel.
-  * @param  InputDevice: INPUT_DEVICE_DIGITAL_MICROPHONE_2
-  * @param  OutputDevice: OUTPUT_DEVICE_SPEAKER, OUTPUT_DEVICE_HEADPHONE,
-  *                       or OUTPUT_DEVICE_BOTH.
-  * @param  AudioFreq: Audio frequency to be configured for the SAI peripheral.
-  * @param  BitRes: Audio frequency to be configured.
-  * @param  ChnlNbr: Channel number.
-  * @retval AUDIO_OK if correct communication, else wrong communication
-  */
-uint8_t BSP_AUDIO_IN_OUT_Init(uint16_t InputDevice, uint16_t OutputDevice, uint32_t AudioFreq, uint32_t BitRes, uint32_t ChnlNbr)
-{
-  uint8_t ret = AUDIO_ERROR;
-  uint32_t deviceid = 0x00;
-  uint32_t slot_active;
-
-  if (InputDevice != INPUT_DEVICE_DIGITAL_MICROPHONE_2)  /* Only MICROPHONE_2 input supported */
-  {
-    ret = AUDIO_ERROR;
-  }
-  else
-  {
-    /* Disable SAI */
-    SAIx_In_DeInit();
-    SAIx_Out_DeInit();
-
-    /* PLL clock is set depending on the AudioFreq (44.1khz vs 48khz groups) */
-    BSP_AUDIO_OUT_ClockConfig(&haudio_in_sai, AudioFreq, NULL); /* Clock config is shared between AUDIO IN and OUT */
-
-    /* SAI data transfer preparation:
-    Prepare the Media to be used for the audio transfer from SAI peripheral to memory */
-    haudio_in_sai.Instance = AUDIO_IN_SAIx;
-    if(HAL_SAI_GetState(&haudio_in_sai) == HAL_SAI_STATE_RESET)
-    {
-      /* Init the SAI MSP: this __weak function can be redefined by the application*/
-      BSP_AUDIO_IN_MspInit(&haudio_in_sai, NULL);
-    }
-
-    /* SAI data transfer preparation:
-    Prepare the Media to be used for the audio transfer from memory to SAI peripheral */
-    haudio_out_sai.Instance = AUDIO_OUT_SAIx;
-    if(HAL_SAI_GetState(&haudio_out_sai) == HAL_SAI_STATE_RESET)
-    {
-      /* Init the SAI MSP: this __weak function can be redefined by the application*/
-      BSP_AUDIO_OUT_MspInit(&haudio_out_sai, NULL);
-    }
-
-    /* Configure SAI in master mode :
-     *   - SAI2_block_A in master TX mode
-     *   - SAI2_block_B in slave RX mode synchronous from SAI2_block_A
-     */
-    if (InputDevice == INPUT_DEVICE_DIGITAL_MICROPHONE_2)
-    {
-      slot_active = CODEC_AUDIOFRAME_SLOT_13;
-    }
-    else
-    {
-      slot_active = CODEC_AUDIOFRAME_SLOT_02;
-    }
-    SAIx_In_Init(SAI_MODEMASTER_TX, slot_active, AudioFreq);
-
-    /* wm8994 codec initialization */
-    deviceid = wm8994_drv.ReadID(AUDIO_I2C_ADDRESS);
-
-    if((deviceid) == WM8994_ID)
-    {
-      /* Reset the Codec Registers */
-      wm8994_drv.Reset(AUDIO_I2C_ADDRESS);
-      /* Initialize the audio driver structure */
-      audio_drv = &wm8994_drv;
-      ret = AUDIO_OK;
-    }
-    else
-    {
-      ret = AUDIO_ERROR;
-    }
-
-    if(ret == AUDIO_OK)
-    {
-      /* Initialize the codec internal registers */
-      audio_drv->Init(AUDIO_I2C_ADDRESS, InputDevice | OutputDevice, 100, AudioFreq);
-    }
-  }
-  return ret;
-}
-
-
-/**
-  * @brief  Starts audio recording.
-  * @param  pbuf: Main buffer pointer for the recorded data storing  
-  * @param  size: size of the recorded buffer in number of elements (typically number of half-words)
-  *               Be careful that it is not the same unit than BSP_AUDIO_OUT_Play function
-  * @retval AUDIO_OK if correct communication, else wrong communication
-  */
-uint8_t  BSP_AUDIO_IN_Record(uint16_t* pbuf, uint32_t size)
-{
-  uint32_t ret = AUDIO_ERROR;
-  
-  /* Start the process receive DMA */
-  HAL_SAI_Receive_DMA(&haudio_in_sai, (uint8_t*)pbuf, size);
-  
-  /* Return AUDIO_OK when all operations are correctly done */
-  ret = AUDIO_OK;
-  
-  return ret;
-}
-
-/**
-  * @brief  Stops audio recording.
-  * @param  Option: could be one of the following parameters
-  *           - CODEC_PDWN_SW: for software power off (by writing registers).
-  *                            Then no need to reconfigure the Codec after power on.
-  *           - CODEC_PDWN_HW: completely shut down the codec (physically).
-  *                            Then need to reconfigure the Codec after power on.
-  * @retval AUDIO_OK if correct communication, else wrong communication
-  */
-uint8_t BSP_AUDIO_IN_Stop(uint32_t Option)
-{
-  /* Call the Media layer stop function */
-  HAL_SAI_DMAStop(&haudio_in_sai);
-  
-  /* Call Audio Codec Stop function */
-  if(audio_drv->Stop(AUDIO_I2C_ADDRESS, Option) != 0)
-  {
-    return AUDIO_ERROR;
-  }
-  else
-  {
-    if(Option == CODEC_PDWN_HW)
-    {
-      /* Wait at least 100us */
-      HAL_Delay(1);
-    }
-    /* Return AUDIO_OK when all operations are correctly done */
-    return AUDIO_OK;
-  }
-}
-
-/**
-  * @brief  Pauses the audio file stream.
-  * @retval AUDIO_OK if correct communication, else wrong communication
-  */
-uint8_t BSP_AUDIO_IN_Pause(void)
-{    
-  /* Call the Media layer pause function */
-  HAL_SAI_DMAPause(&haudio_in_sai);
-  /* Return AUDIO_OK when all operations are correctly done */
-  return AUDIO_OK;
-}
-
-/**
-  * @brief  Resumes the audio file stream.
-  * @retval AUDIO_OK if correct communication, else wrong communication
-  */
-uint8_t BSP_AUDIO_IN_Resume(void)
-{    
-  /* Call the Media layer pause/resume function */
-  HAL_SAI_DMAResume(&haudio_in_sai);
-  /* Return AUDIO_OK when all operations are correctly done */
-  return AUDIO_OK;
-}
-
-/**
-  * @brief  Controls the audio in volume level. 
-  * @param  Volume: Volume level in range 0(Mute)..80(+0dB)..100(+17.625dB)
-  * @retval AUDIO_OK if correct communication, else wrong communication
-  */
-uint8_t BSP_AUDIO_IN_SetVolume(uint8_t Volume)
-{
-  /* Call the codec volume control function with converted volume value */
-  if(audio_drv->SetVolume(AUDIO_I2C_ADDRESS, Volume) != 0)
-  {
-    return AUDIO_ERROR;
-  }
-  else
-  {
-    /* Set the Global variable AudioInVolume  */
-    AudioInVolume = Volume;
-    /* Return AUDIO_OK when all operations are correctly done */
-    return AUDIO_OK;
-  }
-}
-
-/**
-  * @brief  Deinit the audio IN peripherals.
-  * @retval None
-  */
-void BSP_AUDIO_IN_DeInit(void)
-{
-  SAIx_In_DeInit();
-  /* DeInit the SAI MSP : this __weak function can be rewritten by the application */
-  BSP_AUDIO_IN_MspDeInit(&haudio_in_sai, NULL);
-}
-
- /**
-  * @brief  Rx Transfer completed callbacks.
-  * @param  hsai: SAI handle
-  * @retval None
-  */
-void HAL_SAI_RxCpltCallback(SAI_HandleTypeDef *hsai)
-{
-  /* Call the record update function to get the next buffer to fill and its size (size is ignored) */
-  BSP_AUDIO_IN_TransferComplete_CallBack();
-}
-
-/**
-  * @brief  Rx Half Transfer completed callbacks.
-  * @param  hsai: SAI handle
-  * @retval None
-  */
-void HAL_SAI_RxHalfCpltCallback(SAI_HandleTypeDef *hsai)
-{
-  /* Manage the remaining file size and new address offset: This function 
-     should be coded by user (its prototype is already declared in stm32746g_discovery_audio.h) */
-  BSP_AUDIO_IN_HalfTransfer_CallBack();
-}
-
-/**
-  * @brief  User callback when record buffer is filled.
-  * @retval None
-  */
-__weak void BSP_AUDIO_IN_TransferComplete_CallBack(void)
-{
-  /* This function should be implemented by the user application.
-     It is called into this driver when the current buffer is filled
-     to prepare the next buffer pointer and its size. */
-}
-
-/**
-  * @brief  Manages the DMA Half Transfer complete event.
-  * @retval None
-  */
-__weak void BSP_AUDIO_IN_HalfTransfer_CallBack(void)
-{ 
-  /* This function should be implemented by the user application.
-     It is called into this driver when the current buffer is filled
-     to prepare the next buffer pointer and its size. */
-}
-
-/**
-  * @brief  Audio IN Error callback function.
-  * @retval None
-  */
-__weak void BSP_AUDIO_IN_Error_CallBack(void)
-{   
-  /* This function is called when an Interrupt due to transfer error on or peripheral
-     error occurs. */
-}
-
-/**
-  * @brief  Initializes BSP_AUDIO_IN MSP.
-  * @param  hsai: SAI handle
-  * @param  Params
-  * @retval None
-  */
-__weak void BSP_AUDIO_IN_MspInit(SAI_HandleTypeDef *hsai, void *Params)
-{
-  static DMA_HandleTypeDef hdma_sai_rx;
-  GPIO_InitTypeDef  gpio_init_structure;  
-
-  /* Enable SAI clock */
-  AUDIO_IN_SAIx_CLK_ENABLE();
-  
-  /* Enable SD GPIO clock */
-  AUDIO_IN_SAIx_SD_ENABLE();
-  /* CODEC_SAI pin configuration: SD pin */
-  gpio_init_structure.Pin = AUDIO_IN_SAIx_SD_PIN;
-  gpio_init_structure.Mode = GPIO_MODE_AF_PP;
-  gpio_init_structure.Pull = GPIO_NOPULL;
-  gpio_init_structure.Speed = GPIO_SPEED_FAST;
-  gpio_init_structure.Alternate = AUDIO_IN_SAIx_SD_AF;
-  HAL_GPIO_Init(AUDIO_IN_SAIx_SD_GPIO_PORT, &gpio_init_structure);
-
-  /* Enable Audio INT GPIO clock */
-  AUDIO_IN_INT_GPIO_ENABLE();
-  /* Audio INT pin configuration: input */
-  gpio_init_structure.Pin = AUDIO_IN_INT_GPIO_PIN;
-  gpio_init_structure.Mode = GPIO_MODE_INPUT;
-  gpio_init_structure.Pull = GPIO_NOPULL;
-  gpio_init_structure.Speed = GPIO_SPEED_FAST;
-  HAL_GPIO_Init(AUDIO_IN_INT_GPIO_PORT, &gpio_init_structure);
-
-  /* Enable the DMA clock */
-  AUDIO_IN_SAIx_DMAx_CLK_ENABLE();
-    
-  if(hsai->Instance == AUDIO_IN_SAIx)
-  {
-    /* Configure the hdma_sai_rx handle parameters */
-    hdma_sai_rx.Init.Channel             = AUDIO_IN_SAIx_DMAx_CHANNEL;
-    hdma_sai_rx.Init.Direction           = DMA_PERIPH_TO_MEMORY;
-    hdma_sai_rx.Init.PeriphInc           = DMA_PINC_DISABLE;
-    hdma_sai_rx.Init.MemInc              = DMA_MINC_ENABLE;
-    hdma_sai_rx.Init.PeriphDataAlignment = AUDIO_IN_SAIx_DMAx_PERIPH_DATA_SIZE;
-    hdma_sai_rx.Init.MemDataAlignment    = AUDIO_IN_SAIx_DMAx_MEM_DATA_SIZE;
-    hdma_sai_rx.Init.Mode                = DMA_CIRCULAR;
-    hdma_sai_rx.Init.Priority            = DMA_PRIORITY_HIGH;
-    hdma_sai_rx.Init.FIFOMode            = DMA_FIFOMODE_DISABLE;
-    hdma_sai_rx.Init.FIFOThreshold       = DMA_FIFO_THRESHOLD_FULL;
-    hdma_sai_rx.Init.MemBurst            = DMA_MBURST_SINGLE;
-    hdma_sai_rx.Init.PeriphBurst         = DMA_MBURST_SINGLE;
-    
-    hdma_sai_rx.Instance = AUDIO_IN_SAIx_DMAx_STREAM;
-    
-    /* Associate the DMA handle */
-    __HAL_LINKDMA(hsai, hdmarx, hdma_sai_rx);
-    
-    /* Deinitialize the Stream for new transfer */
-    HAL_DMA_DeInit(&hdma_sai_rx);
-    
-    /* Configure the DMA Stream */
-    HAL_DMA_Init(&hdma_sai_rx);
-  }
-  
-  /* SAI DMA IRQ Channel configuration */
-  HAL_NVIC_SetPriority(AUDIO_IN_SAIx_DMAx_IRQ, AUDIO_IN_IRQ_PREPRIO, 0);
-  HAL_NVIC_EnableIRQ(AUDIO_IN_SAIx_DMAx_IRQ);
-
-  /* Audio INT IRQ Channel configuration */
-  HAL_NVIC_SetPriority(AUDIO_IN_INT_IRQ, AUDIO_IN_IRQ_PREPRIO, 0);
-  HAL_NVIC_EnableIRQ(AUDIO_IN_INT_IRQ);
-}
-
-/**
-  * @brief  DeInitializes BSP_AUDIO_IN MSP.
-  * @param  hsai: SAI handle
-  * @param  Params
-  * @retval None
-  */
-__weak void BSP_AUDIO_IN_MspDeInit(SAI_HandleTypeDef *hsai, void *Params)
-{
-  GPIO_InitTypeDef  gpio_init_structure;
-
-  static DMA_HandleTypeDef hdma_sai_rx;
-
-  /* SAI IN DMA IRQ Channel deactivation */
-  HAL_NVIC_DisableIRQ(AUDIO_IN_SAIx_DMAx_IRQ);
-
-  if(hsai->Instance == AUDIO_IN_SAIx)
-  {
-    /* Deinitialize the Stream for new transfer */
-    HAL_DMA_DeInit(&hdma_sai_rx);
-  }
-
- /* Disable SAI block */
-  __HAL_SAI_DISABLE(hsai);
-
-  /* Disable pin: SD pin */
-  gpio_init_structure.Pin = AUDIO_IN_SAIx_SD_PIN;
-  HAL_GPIO_DeInit(AUDIO_IN_SAIx_SD_GPIO_PORT, gpio_init_structure.Pin);
-
-  /* Disable SAI clock */
-  AUDIO_IN_SAIx_CLK_DISABLE();
-
-  /* GPIO pins clock and DMA clock can be shut down in the application
-     by surcharging this __weak function */
-}
-
-
-/*******************************************************************************
-                            Static Functions
-*******************************************************************************/
-
-/**
-  * @brief  Initializes the input Audio Codec audio interface (SAI).
-  * @param  SaiOutMode: SAI_MODEMASTER_TX (for record and playback in parallel)
-  *                     or SAI_MODEMASTER_RX (for record only).
-  * @param  SlotActive: CODEC_AUDIOFRAME_SLOT_02 or CODEC_AUDIOFRAME_SLOT_13
-  * @param  AudioFreq: Audio frequency to be configured for the SAI peripheral.
-  * @retval None
-  */
-static void SAIx_In_Init(uint32_t SaiOutMode, uint32_t SlotActive, uint32_t AudioFreq)
-{
-  /* Initialize SAI2 block A in MASTER RX */
-  /* Initialize the haudio_out_sai Instance parameter */
-  haudio_out_sai.Instance = AUDIO_OUT_SAIx;
-
-  /* Disable SAI peripheral to allow access to SAI internal registers */
-  __HAL_SAI_DISABLE(&haudio_out_sai);
-
-  /* Configure SAI_Block_x
-  LSBFirst: Disabled
-  DataSize: 16 */
-  haudio_out_sai.Init.AudioFrequency = AudioFreq;
-  haudio_out_sai.Init.AudioMode = SaiOutMode;
-  haudio_out_sai.Init.NoDivider = SAI_MASTERDIVIDER_ENABLED;
-  haudio_out_sai.Init.Protocol = SAI_FREE_PROTOCOL;
-  haudio_out_sai.Init.DataSize = SAI_DATASIZE_16;
-  haudio_out_sai.Init.FirstBit = SAI_FIRSTBIT_MSB;
-  haudio_out_sai.Init.ClockStrobing = SAI_CLOCKSTROBING_RISINGEDGE;
-  haudio_out_sai.Init.Synchro = SAI_ASYNCHRONOUS;
-  haudio_out_sai.Init.OutputDrive = SAI_OUTPUTDRIVE_ENABLED;
-  haudio_out_sai.Init.FIFOThreshold = SAI_FIFOTHRESHOLD_1QF;
-
-  /* Configure SAI_Block_x Frame
-  Frame Length: 64
-  Frame active Length: 32
-  FS Definition: Start frame + Channel Side identification
-  FS Polarity: FS active Low
-  FS Offset: FS asserted one bit before the first bit of slot 0 */
-  haudio_out_sai.FrameInit.FrameLength = 64;
-  haudio_out_sai.FrameInit.ActiveFrameLength = 32;
-  haudio_out_sai.FrameInit.FSDefinition = SAI_FS_CHANNEL_IDENTIFICATION;
-  haudio_out_sai.FrameInit.FSPolarity = SAI_FS_ACTIVE_LOW;
-  haudio_out_sai.FrameInit.FSOffset = SAI_FS_BEFOREFIRSTBIT;
-
-  /* Configure SAI Block_x Slot
-  Slot First Bit Offset: 0
-  Slot Size  : 16
-  Slot Number: 4
-  Slot Active: All slot actives */
-  haudio_out_sai.SlotInit.FirstBitOffset = 0;
-  haudio_out_sai.SlotInit.SlotSize = SAI_SLOTSIZE_DATASIZE;
-  haudio_out_sai.SlotInit.SlotNumber = 4;
-  haudio_out_sai.SlotInit.SlotActive = SlotActive;
-
-  HAL_SAI_Init(&haudio_out_sai);
-
-  /* Initialize SAI2 block B in SLAVE RX synchronous from SAI2 block A */
-  /* Initialize the haudio_in_sai Instance parameter */
-  haudio_in_sai.Instance = AUDIO_IN_SAIx;
-  
-  /* Disable SAI peripheral to allow access to SAI internal registers */
-  __HAL_SAI_DISABLE(&haudio_in_sai);
-  
-  /* Configure SAI_Block_x
-  LSBFirst: Disabled
-  DataSize: 16 */
-  haudio_in_sai.Init.AudioFrequency = AudioFreq;
-  haudio_in_sai.Init.AudioMode = SAI_MODESLAVE_RX;
-  haudio_in_sai.Init.NoDivider = SAI_MASTERDIVIDER_ENABLED;
-  haudio_in_sai.Init.Protocol = SAI_FREE_PROTOCOL;
-  haudio_in_sai.Init.DataSize = SAI_DATASIZE_16;
-  haudio_in_sai.Init.FirstBit = SAI_FIRSTBIT_MSB;
-  haudio_in_sai.Init.ClockStrobing = SAI_CLOCKSTROBING_RISINGEDGE;
-  haudio_in_sai.Init.Synchro = SAI_SYNCHRONOUS;
-  haudio_in_sai.Init.OutputDrive = SAI_OUTPUTDRIVE_DISABLED;
-  haudio_in_sai.Init.FIFOThreshold = SAI_FIFOTHRESHOLD_1QF;
-  
-  /* Configure SAI_Block_x Frame
-  Frame Length: 64
-  Frame active Length: 32
-  FS Definition: Start frame + Channel Side identification
-  FS Polarity: FS active Low
-  FS Offset: FS asserted one bit before the first bit of slot 0 */
-  haudio_in_sai.FrameInit.FrameLength = 64;
-  haudio_in_sai.FrameInit.ActiveFrameLength = 32;
-  haudio_in_sai.FrameInit.FSDefinition = SAI_FS_CHANNEL_IDENTIFICATION;
-  haudio_in_sai.FrameInit.FSPolarity = SAI_FS_ACTIVE_LOW;
-  haudio_in_sai.FrameInit.FSOffset = SAI_FS_BEFOREFIRSTBIT;
-  
-  /* Configure SAI Block_x Slot
-  Slot First Bit Offset: 0
-  Slot Size  : 16
-  Slot Number: 4
-  Slot Active: All slot active */
-  haudio_in_sai.SlotInit.FirstBitOffset = 0;
-  haudio_in_sai.SlotInit.SlotSize = SAI_SLOTSIZE_DATASIZE;
-  haudio_in_sai.SlotInit.SlotNumber = 4;
-  haudio_in_sai.SlotInit.SlotActive = SlotActive;
-
-  HAL_SAI_Init(&haudio_in_sai);
-
-  /* Enable SAI peripheral to generate MCLK */
-  __HAL_SAI_ENABLE(&haudio_out_sai);
-
-  /* Enable SAI peripheral */
-  __HAL_SAI_ENABLE(&haudio_in_sai);
-}
-
-
-
-/**
-  * @brief  Deinitializes the output Audio Codec audio interface (SAI).
-  * @retval None
-  */
-static void SAIx_In_DeInit(void)
-{
-  /* Initialize the haudio_in_sai Instance parameter */
-  haudio_in_sai.Instance = AUDIO_IN_SAIx;
-
-  /* Disable SAI peripheral */
-  __HAL_SAI_DISABLE(&haudio_in_sai);
-
-  HAL_SAI_DeInit(&haudio_in_sai);
-}
-
-
-/**
-  * @brief This function handles DMA2 Stream 7 interrupt request.
-  * @param None
-  * @retval None
-  */
-void AUDIO_IN_SAIx_DMAx_IRQHandler(void) // MBED
-{
-  HAL_DMA_IRQHandler(haudio_in_sai.hdmarx);
-}
-
-/**
-  * @brief  This function handles DMA2 Stream 6 interrupt request.
-  * @param  None
-  * @retval None
-  */
-void AUDIO_OUT_SAIx_DMAx_IRQHandler(void) // MBED
-{
-  HAL_DMA_IRQHandler(haudio_out_sai.hdmatx);
-}
-
-
-/**
-  * @}
-  */ 
-  
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */ 
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r 85dbcff443aa -r 1a18e061d0ec Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_audio.h
--- a/Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_audio.h	Wed Nov 27 08:29:42 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,293 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    stm32746g_discovery_audio.h
-  * @author  MCD Application Team
-  * @brief   This file contains the common defines and functions prototypes for
-  *          the stm32746g_discovery_audio.c driver.
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT(c) 2016 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.
-  *
-  ******************************************************************************
-  */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __STM32746G_DISCOVERY_AUDIO_H
-#define __STM32746G_DISCOVERY_AUDIO_H
-
-#ifdef __cplusplus
- extern "C" {
-#endif 
-
-/* Includes ------------------------------------------------------------------*/
-/* Include audio component Driver */
-#include "../Components/wm8994/wm8994.h"
-#include "stm32746g_discovery.h"
-
-/** @addtogroup BSP
-  * @{
-  */ 
-
-/** @addtogroup STM32746G_DISCOVERY
-  * @{
-  */
-    
-/** @defgroup STM32746G_DISCOVERY_AUDIO STM32746G_DISCOVERY_AUDIO
-  * @{
-  */
-
-/** @defgroup STM32746G_DISCOVERY_AUDIO_Exported_Types STM32746G_DISCOVERY_AUDIO Exported Types
-  * @{
-  */
-/**
-  * @}
-  */ 
-
-/** @defgroup STM32746G_DISCOVERY_AUDIO_Exported_Constants STM32746G_DISCOVERY_AUDIO Exported Constants
-  * @{
-  */
- 
-/*------------------------------------------------------------------------------
-                          USER SAI defines parameters
- -----------------------------------------------------------------------------*/
-/*  CODEC_AudioFrame_SLOT_TDMMode 
-   In W8994 codec the Audio frame contains 4 slots : TDM Mode
-   TDM format :
-   +------------------|------------------|--------------------|-------------------+ 
-   | CODEC_SLOT0 Left | CODEC_SLOT1 Left | CODEC_SLOT0 Right  | CODEC_SLOT1 Right |
-   +------------------------------------------------------------------------------+
-  */
-/* To have 2 separate audio stream in Both headphone and speaker the 4 slot must be activated */
-#define CODEC_AUDIOFRAME_SLOT_0123           SAI_SLOTACTIVE_0 | SAI_SLOTACTIVE_1 | SAI_SLOTACTIVE_2 | SAI_SLOTACTIVE_3
-/* To have an audio stream in headphone only SAI Slot 0 and Slot 2 must be activated */ 
-#define CODEC_AUDIOFRAME_SLOT_02             SAI_SLOTACTIVE_0 | SAI_SLOTACTIVE_2
-/* To have an audio stream in speaker only SAI Slot 1 and Slot 3 must be activated */ 
-#define CODEC_AUDIOFRAME_SLOT_13             SAI_SLOTACTIVE_1 | SAI_SLOTACTIVE_3
-
-/* SAI OUT peripheral configuration defines */
-#define AUDIO_OUT_SAIx                           SAI2_Block_A
-#define AUDIO_OUT_SAIx_CLK_ENABLE()              __HAL_RCC_SAI2_CLK_ENABLE()
-#define AUDIO_OUT_SAIx_CLK_DISABLE()             __HAL_RCC_SAI2_CLK_DISABLE()
-#define AUDIO_OUT_SAIx_SCK_AF                    GPIO_AF10_SAI2
-#define AUDIO_OUT_SAIx_FS_SD_MCLK_AF             GPIO_AF10_SAI2
-
-#define AUDIO_OUT_SAIx_MCLK_ENABLE()             __HAL_RCC_GPIOI_CLK_ENABLE()
-#define AUDIO_OUT_SAIx_MCLK_GPIO_PORT            GPIOI
-#define AUDIO_OUT_SAIx_MCLK_PIN                  GPIO_PIN_4
-#define AUDIO_OUT_SAIx_SCK_SD_ENABLE()           __HAL_RCC_GPIOI_CLK_ENABLE()
-#define AUDIO_OUT_SAIx_SCK_SD_GPIO_PORT          GPIOI
-#define AUDIO_OUT_SAIx_SCK_PIN                   GPIO_PIN_5
-#define AUDIO_OUT_SAIx_SD_PIN                    GPIO_PIN_6
-#define AUDIO_OUT_SAIx_FS_ENABLE()               __HAL_RCC_GPIOI_CLK_ENABLE()
-#define AUDIO_OUT_SAIx_FS_GPIO_PORT              GPIOI
-#define AUDIO_OUT_SAIx_FS_PIN                    GPIO_PIN_7
-
-/* SAI DMA Stream definitions */
-#define AUDIO_OUT_SAIx_DMAx_CLK_ENABLE()         __HAL_RCC_DMA2_CLK_ENABLE()
-#define AUDIO_OUT_SAIx_DMAx_STREAM               DMA2_Stream4
-#define AUDIO_OUT_SAIx_DMAx_CHANNEL              DMA_CHANNEL_3
-#define AUDIO_OUT_SAIx_DMAx_IRQ                  DMA2_Stream4_IRQn
-#define AUDIO_OUT_SAIx_DMAx_PERIPH_DATA_SIZE     DMA_PDATAALIGN_HALFWORD
-#define AUDIO_OUT_SAIx_DMAx_MEM_DATA_SIZE        DMA_MDATAALIGN_HALFWORD
-#define DMA_MAX_SZE                              ((uint16_t)0xFFFF)
-   
-#define AUDIO_OUT_SAIx_DMAx_IRQHandler           DMA2_Stream4_IRQHandler
-
-/* Select the interrupt preemption priority for the DMA interrupt */
-#define AUDIO_OUT_IRQ_PREPRIO                    ((uint32_t)0x0E)   /* Select the preemption priority level(0 is the highest) */
-
-/*------------------------------------------------------------------------------
-                        AUDIO IN CONFIGURATION
-------------------------------------------------------------------------------*/
-/* SAI IN peripheral configuration defines */
-#define AUDIO_IN_SAIx                            SAI2_Block_B
-#define AUDIO_IN_SAIx_CLK_ENABLE()               __HAL_RCC_SAI2_CLK_ENABLE()
-#define AUDIO_IN_SAIx_CLK_DISABLE()              __HAL_RCC_SAI2_CLK_DISABLE()
-#define AUDIO_IN_SAIx_SD_AF                      GPIO_AF10_SAI2
-
-#define AUDIO_IN_SAIx_SD_ENABLE()                __HAL_RCC_GPIOG_CLK_ENABLE()
-#define AUDIO_IN_SAIx_SD_GPIO_PORT               GPIOG
-#define AUDIO_IN_SAIx_SD_PIN                     GPIO_PIN_10
-
-#define AUDIO_IN_INT_GPIO_ENABLE()               __HAL_RCC_GPIOH_CLK_ENABLE()
-#define AUDIO_IN_INT_GPIO_PORT                   GPIOH
-#define AUDIO_IN_INT_GPIO_PIN                    GPIO_PIN_15
-#define AUDIO_IN_INT_IRQ                         EXTI15_10_IRQn
-
-/* SAI DMA Stream definitions */
-#define AUDIO_IN_SAIx_DMAx_CLK_ENABLE()          __HAL_RCC_DMA2_CLK_ENABLE()
-#define AUDIO_IN_SAIx_DMAx_STREAM                DMA2_Stream7
-#define AUDIO_IN_SAIx_DMAx_CHANNEL               DMA_CHANNEL_0
-#define AUDIO_IN_SAIx_DMAx_IRQ                   DMA2_Stream7_IRQn
-#define AUDIO_IN_SAIx_DMAx_PERIPH_DATA_SIZE      DMA_PDATAALIGN_HALFWORD
-#define AUDIO_IN_SAIx_DMAx_MEM_DATA_SIZE         DMA_MDATAALIGN_HALFWORD
-
-#define AUDIO_IN_SAIx_DMAx_IRQHandler            DMA2_Stream7_IRQHandler
-#define AUDIO_IN_INT_IRQHandler                  EXTI15_10_IRQHandler
-
-/* Select the interrupt preemption priority and subpriority for the IT/DMA interrupt */
-#define AUDIO_IN_IRQ_PREPRIO                     ((uint32_t)0x0F)   /* Select the preemption priority level(0 is the highest) */
-
-/*------------------------------------------------------------------------------
-             CONFIGURATION: Audio Driver Configuration parameters
-------------------------------------------------------------------------------*/
-
-#define AUDIODATA_SIZE                      ((uint16_t)2)   /* 16-bits audio data size */
-
-/* Audio status definition */     
-#define AUDIO_OK                            ((uint8_t)0)
-#define AUDIO_ERROR                         ((uint8_t)1)
-#define AUDIO_TIMEOUT                       ((uint8_t)2)
-
-/* AudioFreq * DataSize (2 bytes) * NumChannels (Stereo: 2) */
-#define DEFAULT_AUDIO_IN_FREQ               I2S_AUDIOFREQ_16K
-#define DEFAULT_AUDIO_IN_BIT_RESOLUTION     ((uint8_t)16)
-#define DEFAULT_AUDIO_IN_CHANNEL_NBR        ((uint8_t)2) /* Mono = 1, Stereo = 2 */
-#define DEFAULT_AUDIO_IN_VOLUME             ((uint16_t)64)
-
-/*------------------------------------------------------------------------------
-                    OPTIONAL Configuration defines parameters
-------------------------------------------------------------------------------*/
-
-/* Delay for the Codec to be correctly reset */
-#define CODEC_RESET_DELAY                   ((uint8_t)5)
-   
-
-/*------------------------------------------------------------------------------
-                            OUTPUT DEVICES definition
-------------------------------------------------------------------------------*/
-/* Alias on existing output devices to adapt for 2 headphones output */
-#define OUTPUT_DEVICE_HEADPHONE1 OUTPUT_DEVICE_HEADPHONE
-#define OUTPUT_DEVICE_HEADPHONE2 OUTPUT_DEVICE_SPEAKER /* Headphone2 is connected to Speaker output of the wm8994 */
-   
-/**
-  * @}
-  */
- 
-/** @defgroup STM32746G_DISCOVERY_AUDIO_Exported_Variables STM32746G_DISCOVERY_AUDIO Exported Variables
-  * @{
-  */
-extern __IO uint16_t AudioInVolume;
- /**
-  * @}
-  */
-   
-/** @defgroup STM32746G_DISCOVERY_AUDIO_Exported_Macros STM32746G_DISCOVERY_AUDIO Exported Macros
-  * @{
-  */
-#define DMA_MAX(x)           (((x) <= DMA_MAX_SZE)? (x):DMA_MAX_SZE)
-/**
-  * @}
-  */ 
-
-/** @addtogroup STM32746G_DISCOVERY_AUDIO_OUT_Exported_Functions
-  * @{
-  */
-uint8_t BSP_AUDIO_OUT_Init(uint16_t OutputDevice, uint8_t Volume, uint32_t AudioFreq);
-uint8_t BSP_AUDIO_OUT_Play(uint16_t* pBuffer, uint32_t Size);
-void    BSP_AUDIO_OUT_ChangeBuffer(uint16_t *pData, uint16_t Size);
-uint8_t BSP_AUDIO_OUT_Pause(void);
-uint8_t BSP_AUDIO_OUT_Resume(void);
-uint8_t BSP_AUDIO_OUT_Stop(uint32_t Option);
-uint8_t BSP_AUDIO_OUT_SetVolume(uint8_t Volume);
-void    BSP_AUDIO_OUT_SetFrequency(uint32_t AudioFreq);
-void    BSP_AUDIO_OUT_SetAudioFrameSlot(uint32_t AudioFrameSlot);
-uint8_t BSP_AUDIO_OUT_SetMute(uint32_t Cmd);
-uint8_t BSP_AUDIO_OUT_SetOutputMode(uint8_t Output);
-void    BSP_AUDIO_OUT_DeInit(void);
-
-/* User Callbacks: user has to implement these functions in his code if they are needed. */
-/* This function is called when the requested data has been completely transferred.*/
-void    BSP_AUDIO_OUT_TransferComplete_CallBack(void);
-
-/* This function is called when half of the requested buffer has been transferred. */
-void    BSP_AUDIO_OUT_HalfTransfer_CallBack(void);
-
-/* This function is called when an Interrupt due to transfer error on or peripheral
-   error occurs. */
-void    BSP_AUDIO_OUT_Error_CallBack(void);
-
-/* These function can be modified in case the current settings (e.g. DMA stream)
-   need to be changed for specific application needs */
-void  BSP_AUDIO_OUT_ClockConfig(SAI_HandleTypeDef *hsai, uint32_t AudioFreq, void *Params);
-void  BSP_AUDIO_OUT_MspInit(SAI_HandleTypeDef *hsai, void *Params);
-void  BSP_AUDIO_OUT_MspDeInit(SAI_HandleTypeDef *hsai, void *Params);
-
-/**
-  * @}
-  */ 
-
-/** @defgroup STM32746G_DISCOVERY_AUDIO_IN_Exported_Functions STM32746G_DISCOVERY_AUDIO_IN Exported Functions
-  * @{
-  */
-uint8_t BSP_AUDIO_IN_Init(uint32_t AudioFreq, uint32_t BitRes, uint32_t ChnlNbr);
-uint8_t BSP_AUDIO_IN_InitEx(uint16_t InputDevice, uint32_t AudioFreq, uint32_t BitRes, uint32_t ChnlNbr);
-uint8_t BSP_AUDIO_IN_OUT_Init(uint16_t InputDevice, uint16_t OutputDevice, uint32_t AudioFreq, uint32_t BitRes, uint32_t ChnlNbr);
-uint8_t BSP_AUDIO_IN_Record(uint16_t *pData, uint32_t Size);
-uint8_t BSP_AUDIO_IN_Stop(uint32_t Option);
-uint8_t BSP_AUDIO_IN_Pause(void);
-uint8_t BSP_AUDIO_IN_Resume(void);
-uint8_t BSP_AUDIO_IN_SetVolume(uint8_t Volume);
-void    BSP_AUDIO_IN_DeInit(void);
-/* User Callbacks: user has to implement these functions in his code if they are needed. */
-/* This function should be implemented by the user application.
-   It is called into this driver when the current buffer is filled to prepare the next
-   buffer pointer and its size. */
-void    BSP_AUDIO_IN_TransferComplete_CallBack(void);
-void    BSP_AUDIO_IN_HalfTransfer_CallBack(void);
-
-/* This function is called when an Interrupt due to transfer error on or peripheral
-   error occurs. */
-void    BSP_AUDIO_IN_Error_CallBack(void);
-
-/* These function can be modified in case the current settings (e.g. DMA stream)
-   need to be changed for specific application needs */
-void  BSP_AUDIO_IN_MspInit(SAI_HandleTypeDef *hsai, void *Params);
-void  BSP_AUDIO_IN_MspDeInit(SAI_HandleTypeDef *hsai, void *Params);
-
-/**
-  * @}
-  */ 
-
-/**
-  * @}
-  */ 
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __STM32746G_DISCOVERY_AUDIO_H */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r 85dbcff443aa -r 1a18e061d0ec Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_camera.c
--- a/Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_camera.c	Wed Nov 27 08:29:42 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,678 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    stm32746g_discovery_camera.c
-  * @author  MCD Application Team
-  * @brief   This file includes the driver for Camera modules mounted on
-  *          STM32746G-Discovery board.
-  @verbatim
-    How to use this driver:
-    ------------------------
-     - This driver is used to drive the camera.
-     - The OV9655 component driver MUST be included with this driver.
-    
-    Driver description:
-    -------------------
-    + Initialization steps:
-       o Initialize the camera using the BSP_CAMERA_Init() function.
-       o Start the camera capture/snapshot using the CAMERA_Start() function.
-       o Suspend, resume or stop the camera capture using the following functions:
-        - BSP_CAMERA_Suspend()
-        - BSP_CAMERA_Resume()
-        - BSP_CAMERA_Stop()
-        
-    + Options
-       o Increase or decrease on the fly the brightness and/or contrast
-         using the following function:
-         - BSP_CAMERA_ContrastBrightnessConfig 
-       o Add a special effect on the fly using the following functions:
-         - BSP_CAMERA_BlackWhiteConfig()
-         - BSP_CAMERA_ColorEffectConfig()
-  @endverbatim
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT(c) 2016 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.
-  *
-  ******************************************************************************
-  */ 
-
-/* Dependencies
-- stm32746g_discovery.c
-- stm32f7xx_hal_dcmi.c
-- stm32f7xx_hal_dma.c
-- stm32f7xx_hal_gpio.c
-- stm32f7xx_hal_cortex.c
-- stm32f7xx_hal_rcc_ex.h
-- ov9655.c
-EndDependencies */
-
-/* Includes ------------------------------------------------------------------*/
-#include "stm32746g_discovery_camera.h"
-#include "stm32746g_discovery.h"
-
-/** @addtogroup BSP
-  * @{
-  */
-
-/** @addtogroup STM32746G_DISCOVERY
-  * @{
-  */
-    
-/** @addtogroup STM32746G_DISCOVERY_CAMERA
-  * @{
-  */ 
-
-/** @defgroup STM32746G_DISCOVERY_CAMERA_Private_TypesDefinitions STM32746G_DISCOVERY_CAMERA Private Types Definitions
-  * @{
-  */ 
-/**
-  * @}
-  */ 
-
-/** @defgroup STM32746G_DISCOVERY_CAMERA_Private_Defines STM32746G_DISCOVERY_CAMERA Private Defines
-  * @{
-  */
-#define CAMERA_VGA_RES_X          640
-#define CAMERA_VGA_RES_Y          480
-#define CAMERA_480x272_RES_X      480
-#define CAMERA_480x272_RES_Y      272
-#define CAMERA_QVGA_RES_X         320
-#define CAMERA_QVGA_RES_Y         240
-#define CAMERA_QQVGA_RES_X        160
-#define CAMERA_QQVGA_RES_Y        120
-/**
-  * @}
-  */ 
-  
-/** @defgroup STM32746G_DISCOVERY_CAMERA_Private_Macros STM32746G_DISCOVERY_CAMERA Private Macros
-  * @{
-  */
-/**
-  * @}
-  */  
-
-/** @defgroup STM32746G_DISCOVERY_CAMERA_Private_Variables STM32746G_DISCOVERY_CAMERA Private Variables
-  * @{
-  */ 
-DCMI_HandleTypeDef  hDcmiHandler;
-CAMERA_DrvTypeDef   *camera_drv;
-/* Camera current resolution naming (QQVGA, VGA, ...) */
-static uint32_t CameraCurrentResolution;
-
-/* Camera module I2C HW address */
-static uint32_t CameraHwAddress;
-/**
-  * @}
-  */ 
-  
-/** @defgroup STM32746G_DISCOVERY_CAMERA_Private_FunctionPrototypes STM32746G_DISCOVERY_CAMERA Private Function Prototypes
-  * @{
-  */
-static uint32_t GetSize(uint32_t resolution);
-/**
-  * @}
-  */ 
-  
-/** @defgroup STM32746G_DISCOVERY_CAMERA_Exported_Functions STM32746G_DISCOVERY_CAMERA Exported Functions
-  * @{
-  */
-
-/**
-  * @brief  Initializes the camera.
-  * @param  Resolution : camera sensor requested resolution (x, y) : standard resolution
-  *         naming QQVGA, QVGA, VGA ...
-  * @retval Camera status
-  */
-uint8_t BSP_CAMERA_Init(uint32_t Resolution)
-{ 
-  DCMI_HandleTypeDef *phdcmi;
-  uint8_t status = CAMERA_ERROR;
-
-  /* Get the DCMI handle structure */
-  phdcmi = &hDcmiHandler;
-
-  /*** Configures the DCMI to interface with the camera module ***/
-  /* DCMI configuration */
-  phdcmi->Init.CaptureRate      = DCMI_CR_ALL_FRAME;
-  phdcmi->Init.HSPolarity       = DCMI_HSPOLARITY_LOW;
-  phdcmi->Init.SynchroMode      = DCMI_SYNCHRO_HARDWARE;
-  phdcmi->Init.VSPolarity       = DCMI_VSPOLARITY_HIGH;
-  phdcmi->Init.ExtendedDataMode = DCMI_EXTEND_DATA_8B;
-  phdcmi->Init.PCKPolarity      = DCMI_PCKPOLARITY_RISING;
-  phdcmi->Instance              = DCMI;
-
-  /* Power up camera */
-  BSP_CAMERA_PwrUp();
-
-  /* Read ID of Camera module via I2C */
-  if(ov9655_ReadID(CAMERA_I2C_ADDRESS) == OV9655_ID)
-  {
-    /* Initialize the camera driver structure */
-    camera_drv = &ov9655_drv;
-    CameraHwAddress = CAMERA_I2C_ADDRESS;
-
-    /* DCMI Initialization */
-    BSP_CAMERA_MspInit(&hDcmiHandler, NULL);
-    HAL_DCMI_Init(phdcmi);
-
-    /* Camera Module Initialization via I2C to the wanted 'Resolution' */
-    if (Resolution == CAMERA_R480x272)
-    {     /* For 480x272 resolution, the OV9655 sensor is set to VGA resolution
-           * as OV9655 doesn't supports 480x272 resolution,
-           * then DCMI is configured to output a 480x272 cropped window */
-      camera_drv->Init(CameraHwAddress, CAMERA_R640x480);
-      HAL_DCMI_ConfigCROP(phdcmi,           /* Crop in the middle of the VGA picture */
-                         (CAMERA_VGA_RES_X - CAMERA_480x272_RES_X)/2,
-                         (CAMERA_VGA_RES_Y - CAMERA_480x272_RES_Y)/2,
-                         (CAMERA_480x272_RES_X * 2) - 1,
-                          CAMERA_480x272_RES_Y - 1);
-      HAL_DCMI_EnableCROP(phdcmi);
-    }
-    else
-    {
-      camera_drv->Init(CameraHwAddress, Resolution);
-      HAL_DCMI_DisableCROP(phdcmi);
-    }
-
-    CameraCurrentResolution = Resolution;
-
-    /* Return CAMERA_OK status */
-    status = CAMERA_OK;
-  }
-  else
-  {
-    /* Return CAMERA_NOT_SUPPORTED status */
-    status = CAMERA_NOT_SUPPORTED;
-  }
-
-  return status;
-}
-
-/**
-  * @brief  DeInitializes the camera.
-  * @retval Camera status
-  */
-uint8_t BSP_CAMERA_DeInit(void)
-{ 
-  hDcmiHandler.Instance              = DCMI;
-
-  HAL_DCMI_DeInit(&hDcmiHandler);
-  BSP_CAMERA_MspDeInit(&hDcmiHandler, NULL);
-  return CAMERA_OK;
-}
-
-/**
-  * @brief  Starts the camera capture in continuous mode.
-  * @param  buff: pointer to the camera output buffer
-  * @retval None
-  */
-void BSP_CAMERA_ContinuousStart(uint8_t *buff)
-{ 
-  /* Start the camera capture */
-  HAL_DCMI_Start_DMA(&hDcmiHandler, DCMI_MODE_CONTINUOUS, (uint32_t)buff, GetSize(CameraCurrentResolution));
-}
-
-/**
-  * @brief  Starts the camera capture in snapshot mode.
-  * @param  buff: pointer to the camera output buffer
-  * @retval None
-  */
-void BSP_CAMERA_SnapshotStart(uint8_t *buff)
-{ 
-  /* Start the camera capture */
-  HAL_DCMI_Start_DMA(&hDcmiHandler, DCMI_MODE_SNAPSHOT, (uint32_t)buff, GetSize(CameraCurrentResolution));
-}
-
-/**
-  * @brief Suspend the CAMERA capture 
-  * @retval None
-  */
-void BSP_CAMERA_Suspend(void) 
-{
-  /* Suspend the Camera Capture */
-  HAL_DCMI_Suspend(&hDcmiHandler);  
-}
-
-/**
-  * @brief Resume the CAMERA capture 
-  * @retval None
-  */
-void BSP_CAMERA_Resume(void) 
-{
-  /* Start the Camera Capture */
-  HAL_DCMI_Resume(&hDcmiHandler);
-}
-
-/**
-  * @brief  Stop the CAMERA capture 
-  * @retval Camera status
-  */
-uint8_t BSP_CAMERA_Stop(void) 
-{
-  uint8_t status = CAMERA_ERROR;
-
-  if(HAL_DCMI_Stop(&hDcmiHandler) == HAL_OK)
-  {
-     status = CAMERA_OK;
-  }
-  
-  /* Set Camera in Power Down */
-  BSP_CAMERA_PwrDown();
-
-  return status;
-}
-
-/**
-  * @brief  CANERA power up
-  * @retval None
-  */
-void BSP_CAMERA_PwrUp(void)
-{
-  GPIO_InitTypeDef gpio_init_structure;
-
-  /* Enable GPIO clock */
-  __HAL_RCC_GPIOH_CLK_ENABLE();
-
-  /*** Configure the GPIO ***/
-  /* Configure DCMI GPIO as alternate function */
-  gpio_init_structure.Pin       = GPIO_PIN_13;
-  gpio_init_structure.Mode      = GPIO_MODE_OUTPUT_PP;
-  gpio_init_structure.Pull      = GPIO_NOPULL;
-  gpio_init_structure.Speed     = GPIO_SPEED_HIGH;
-  HAL_GPIO_Init(GPIOH, &gpio_init_structure);
-
-  /* De-assert the camera POWER_DOWN pin (active high) */
-  HAL_GPIO_WritePin(GPIOH, GPIO_PIN_13, GPIO_PIN_RESET);
-
-  HAL_Delay(3);     /* POWER_DOWN de-asserted during 3ms */
-}
-
-/**
-  * @brief  CAMERA power down
-  * @retval None
-  */
-void BSP_CAMERA_PwrDown(void)
-{
-  GPIO_InitTypeDef gpio_init_structure;
-
-  /* Enable GPIO clock */
-  __HAL_RCC_GPIOH_CLK_ENABLE();
-
-  /*** Configure the GPIO ***/
-  /* Configure DCMI GPIO as alternate function */
-  gpio_init_structure.Pin       = GPIO_PIN_13;
-  gpio_init_structure.Mode      = GPIO_MODE_OUTPUT_PP;
-  gpio_init_structure.Pull      = GPIO_NOPULL;
-  gpio_init_structure.Speed     = GPIO_SPEED_HIGH;
-  HAL_GPIO_Init(GPIOH, &gpio_init_structure);
-
-  /* Assert the camera POWER_DOWN pin (active high) */
-  HAL_GPIO_WritePin(GPIOH, GPIO_PIN_13, GPIO_PIN_SET);
-}
-
-/**
-  * @brief  Configures the camera contrast and brightness.
-  * @param  contrast_level: Contrast level
-  *          This parameter can be one of the following values:
-  *            @arg  CAMERA_CONTRAST_LEVEL4: for contrast +2
-  *            @arg  CAMERA_CONTRAST_LEVEL3: for contrast +1
-  *            @arg  CAMERA_CONTRAST_LEVEL2: for contrast  0
-  *            @arg  CAMERA_CONTRAST_LEVEL1: for contrast -1
-  *            @arg  CAMERA_CONTRAST_LEVEL0: for contrast -2
-  * @param  brightness_level: Contrast level
-  *          This parameter can be one of the following values:
-  *            @arg  CAMERA_BRIGHTNESS_LEVEL4: for brightness +2
-  *            @arg  CAMERA_BRIGHTNESS_LEVEL3: for brightness +1
-  *            @arg  CAMERA_BRIGHTNESS_LEVEL2: for brightness  0
-  *            @arg  CAMERA_BRIGHTNESS_LEVEL1: for brightness -1
-  *            @arg  CAMERA_BRIGHTNESS_LEVEL0: for brightness -2    
-  * @retval None
-  */
-void BSP_CAMERA_ContrastBrightnessConfig(uint32_t contrast_level, uint32_t brightness_level)
-{
-  if(camera_drv->Config != NULL)
-  {
-    camera_drv->Config(CameraHwAddress, CAMERA_CONTRAST_BRIGHTNESS, contrast_level, brightness_level);
-  }  
-}
-
-/**
-  * @brief  Configures the camera white balance.
-  * @param  Mode: black_white mode
-  *          This parameter can be one of the following values:
-  *            @arg  CAMERA_BLACK_WHITE_BW
-  *            @arg  CAMERA_BLACK_WHITE_NEGATIVE
-  *            @arg  CAMERA_BLACK_WHITE_BW_NEGATIVE
-  *            @arg  CAMERA_BLACK_WHITE_NORMAL       
-  * @retval None
-  */
-void BSP_CAMERA_BlackWhiteConfig(uint32_t Mode)
-{
-  if(camera_drv->Config != NULL)
-  {
-    camera_drv->Config(CameraHwAddress, CAMERA_BLACK_WHITE, Mode, 0);
-  }  
-}
-
-/**
-  * @brief  Configures the camera color effect.
-  * @param  Effect: Color effect
-  *          This parameter can be one of the following values:
-  *            @arg  CAMERA_COLOR_EFFECT_ANTIQUE               
-  *            @arg  CAMERA_COLOR_EFFECT_BLUE        
-  *            @arg  CAMERA_COLOR_EFFECT_GREEN    
-  *            @arg  CAMERA_COLOR_EFFECT_RED        
-  * @retval None
-  */
-void BSP_CAMERA_ColorEffectConfig(uint32_t Effect)
-{
-  if(camera_drv->Config != NULL)
-  {
-    camera_drv->Config(CameraHwAddress, CAMERA_COLOR_EFFECT, Effect, 0);
-  }  
-}
-
-
-/**
-  * @brief  Handles DCMI interrupt request.
-  * @retval None
-  */
-void BSP_CAMERA_IRQHandler(void) 
-{
-  HAL_DCMI_IRQHandler(&hDcmiHandler);
-}
-
-/**
-  * @brief  Handles DMA interrupt request.
-  * @retval None
-  */
-void BSP_CAMERA_DMA_IRQHandler(void) 
-{
-  HAL_DMA_IRQHandler(hDcmiHandler.DMA_Handle);
-}
-
-/**
-  * @brief  Get the capture size in pixels unit.
-  * @param  resolution: the current resolution.
-  * @retval capture size in pixels unit.
-  */
-static uint32_t GetSize(uint32_t resolution)
-{ 
-  uint32_t size = 0;
-  
-  /* Get capture size */
-  switch (resolution)
-  {
-  case CAMERA_R160x120:
-    {
-      size =  0x2580;
-    }
-    break;    
-  case CAMERA_R320x240:
-    {
-      size =  0x9600;
-    }
-    break;
-  case CAMERA_R480x272:
-    {
-      size =  0xFF00;
-    }
-    break;
-  case CAMERA_R640x480:
-    {
-      size =  0x25800;
-    }    
-    break;
-  default:
-    {
-      break;
-    }
-  }
-  
-  return size;
-}
-
-/**
-  * @brief  Initializes the DCMI MSP.
-  * @param  hdcmi: HDMI handle 
-  * @param  Params
-  * @retval None
-  */
-__weak void BSP_CAMERA_MspInit(DCMI_HandleTypeDef *hdcmi, void *Params)
-{
-  static DMA_HandleTypeDef hdma_handler;
-  GPIO_InitTypeDef gpio_init_structure;
-  
-  /*** Enable peripherals and GPIO clocks ***/
-  /* Enable DCMI clock */
-  __HAL_RCC_DCMI_CLK_ENABLE();
-
-  /* Enable DMA2 clock */
-  __HAL_RCC_DMA2_CLK_ENABLE();
-  
-  /* Enable GPIO clocks */
-  __HAL_RCC_GPIOA_CLK_ENABLE();
-  __HAL_RCC_GPIOD_CLK_ENABLE();
-  __HAL_RCC_GPIOE_CLK_ENABLE();
-  __HAL_RCC_GPIOG_CLK_ENABLE();
-  __HAL_RCC_GPIOH_CLK_ENABLE();
-
-  /*** Configure the GPIO ***/
-  /* Configure DCMI GPIO as alternate function */
-  gpio_init_structure.Pin       = GPIO_PIN_4 | GPIO_PIN_6;
-  gpio_init_structure.Mode      = GPIO_MODE_AF_PP;
-  gpio_init_structure.Pull      = GPIO_PULLUP;
-  gpio_init_structure.Speed     = GPIO_SPEED_HIGH;
-  gpio_init_structure.Alternate = GPIO_AF13_DCMI;
-  HAL_GPIO_Init(GPIOA, &gpio_init_structure);
-
-  gpio_init_structure.Pin       = GPIO_PIN_3;
-  gpio_init_structure.Mode      = GPIO_MODE_AF_PP;
-  gpio_init_structure.Pull      = GPIO_PULLUP;
-  gpio_init_structure.Speed     = GPIO_SPEED_HIGH;
-  gpio_init_structure.Alternate = GPIO_AF13_DCMI;
-  HAL_GPIO_Init(GPIOD, &gpio_init_structure);
-
-  gpio_init_structure.Pin       = GPIO_PIN_5 | GPIO_PIN_6;
-  gpio_init_structure.Mode      = GPIO_MODE_AF_PP;
-  gpio_init_structure.Pull      = GPIO_PULLUP;
-  gpio_init_structure.Speed     = GPIO_SPEED_HIGH;
-  gpio_init_structure.Alternate = GPIO_AF13_DCMI;
-  HAL_GPIO_Init(GPIOE, &gpio_init_structure);
-
-  gpio_init_structure.Pin       = GPIO_PIN_9;
-  gpio_init_structure.Mode      = GPIO_MODE_AF_PP;
-  gpio_init_structure.Pull      = GPIO_PULLUP;
-  gpio_init_structure.Speed     = GPIO_SPEED_HIGH;
-  gpio_init_structure.Alternate = GPIO_AF13_DCMI;
-  HAL_GPIO_Init(GPIOG, &gpio_init_structure);
-
-  gpio_init_structure.Pin       = GPIO_PIN_9 | GPIO_PIN_10  | GPIO_PIN_11  |\
-                                  GPIO_PIN_12 | GPIO_PIN_14;
-  gpio_init_structure.Mode      = GPIO_MODE_AF_PP;
-  gpio_init_structure.Pull      = GPIO_PULLUP;
-  gpio_init_structure.Speed     = GPIO_SPEED_HIGH;
-  gpio_init_structure.Alternate = GPIO_AF13_DCMI;
-  HAL_GPIO_Init(GPIOH, &gpio_init_structure);
-
-  /*** Configure the DMA ***/
-  /* Set the parameters to be configured */
-  hdma_handler.Init.Channel             = DMA_CHANNEL_1;
-  hdma_handler.Init.Direction           = DMA_PERIPH_TO_MEMORY;
-  hdma_handler.Init.PeriphInc           = DMA_PINC_DISABLE;
-  hdma_handler.Init.MemInc              = DMA_MINC_ENABLE;
-  hdma_handler.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD;
-  hdma_handler.Init.MemDataAlignment    = DMA_MDATAALIGN_WORD;
-  hdma_handler.Init.Mode                = DMA_CIRCULAR;
-  hdma_handler.Init.Priority            = DMA_PRIORITY_HIGH;
-  hdma_handler.Init.FIFOMode            = DMA_FIFOMODE_DISABLE;
-  hdma_handler.Init.FIFOThreshold       = DMA_FIFO_THRESHOLD_FULL;
-  hdma_handler.Init.MemBurst            = DMA_MBURST_SINGLE;
-  hdma_handler.Init.PeriphBurst         = DMA_PBURST_SINGLE; 
-
-  hdma_handler.Instance = DMA2_Stream1;
-
-  /* Associate the initialized DMA handle to the DCMI handle */
-  __HAL_LINKDMA(hdcmi, DMA_Handle, hdma_handler);
-  
-  /*** Configure the NVIC for DCMI and DMA ***/
-  /* NVIC configuration for DCMI transfer complete interrupt */
-  HAL_NVIC_SetPriority(DCMI_IRQn, 0x0F, 0);
-  HAL_NVIC_EnableIRQ(DCMI_IRQn);  
-  
-  /* NVIC configuration for DMA2D transfer complete interrupt */
-  HAL_NVIC_SetPriority(DMA2_Stream1_IRQn, 0x0F, 0);
-  HAL_NVIC_EnableIRQ(DMA2_Stream1_IRQn);
-  
-  /* Configure the DMA stream */
-  HAL_DMA_Init(hdcmi->DMA_Handle);  
-}
-
-
-/**
-  * @brief  DeInitializes the DCMI MSP.
-  * @param  hdcmi: HDMI handle 
-  * @param  Params
-  * @retval None
-  */
-__weak void BSP_CAMERA_MspDeInit(DCMI_HandleTypeDef *hdcmi, void *Params)
-{
-  /* Disable NVIC  for DCMI transfer complete interrupt */
-  HAL_NVIC_DisableIRQ(DCMI_IRQn);  
-  
-  /* Disable NVIC for DMA2 transfer complete interrupt */
-  HAL_NVIC_DisableIRQ(DMA2_Stream1_IRQn);
-  
-  /* Configure the DMA stream */
-  HAL_DMA_DeInit(hdcmi->DMA_Handle);  
-
-  /* Disable DCMI clock */
-  __HAL_RCC_DCMI_CLK_DISABLE();
-
-  /* GPIO pins clock and DMA clock can be shut down in the application 
-     by surcharging this __weak function */ 
-}
-
-/**
-  * @brief  Line event callback
-  * @param  hdcmi: pointer to the DCMI handle  
-  * @retval None
-  */
-void HAL_DCMI_LineEventCallback(DCMI_HandleTypeDef *hdcmi)
-{        
-  BSP_CAMERA_LineEventCallback();
-}
-
-/**
-  * @brief  Line Event callback.
-  * @retval None
-  */
-__weak void BSP_CAMERA_LineEventCallback(void)
-{
-  /* NOTE : This function Should not be modified, when the callback is needed,
-            the HAL_DCMI_LineEventCallback could be implemented in the user file
-   */
-}
-
-/**
-  * @brief  VSYNC event callback
-  * @param  hdcmi: pointer to the DCMI handle  
-  * @retval None
-  */
-void HAL_DCMI_VsyncEventCallback(DCMI_HandleTypeDef *hdcmi)
-{        
-  BSP_CAMERA_VsyncEventCallback();
-}
-
-/**
-  * @brief  VSYNC Event callback.
-  * @retval None
-  */
-__weak void BSP_CAMERA_VsyncEventCallback(void)
-{
-  /* NOTE : This function Should not be modified, when the callback is needed,
-            the HAL_DCMI_VsyncEventCallback could be implemented in the user file
-   */
-}
-
-/**
-  * @brief  Frame event callback
-  * @param  hdcmi: pointer to the DCMI handle  
-  * @retval None
-  */
-void HAL_DCMI_FrameEventCallback(DCMI_HandleTypeDef *hdcmi)
-{        
-  BSP_CAMERA_FrameEventCallback();
-}
-
-/**
-  * @brief  Frame Event callback.
-  * @retval None
-  */
-__weak void BSP_CAMERA_FrameEventCallback(void)
-{
-  /* NOTE : This function Should not be modified, when the callback is needed,
-            the HAL_DCMI_FrameEventCallback could be implemented in the user file
-   */
-}
-
-/**
-  * @brief  Error callback
-  * @param  hdcmi: pointer to the DCMI handle  
-  * @retval None
-  */
-void HAL_DCMI_ErrorCallback(DCMI_HandleTypeDef *hdcmi)
-{        
-  BSP_CAMERA_ErrorCallback();
-}
-
-/**
-  * @brief  Error callback.
-  * @retval None
-  */
-__weak void BSP_CAMERA_ErrorCallback(void)
-{
-  /* NOTE : This function Should not be modified, when the callback is needed,
-            the HAL_DCMI_ErrorCallback could be implemented in the user file
-   */
-}
-
-/**
-  * @}
-  */  
-  
-/**
-  * @}
-  */
-  
-/**
-  * @}
-  */
-  
-/**
-  * @}
-  */      
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r 85dbcff443aa -r 1a18e061d0ec Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_camera.h
--- a/Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_camera.h	Wed Nov 27 08:29:42 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,147 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    stm32746g_discovery_camera.h
-  * @author  MCD Application Team
-  * @brief   This file contains the common defines and functions prototypes for
-  *          the stm32746g_discovery_camera.c driver.
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT(c) 2016 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.
-  *
-  ******************************************************************************
-  */ 
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __STM32746G_DISCOVERY_CAMERA_H
-#define __STM32746G_DISCOVERY_CAMERA_H
-
-#ifdef __cplusplus
- extern "C" {
-#endif 
-
-/* Includes ------------------------------------------------------------------*/
-/* Include Camera component Driver */
-#include "../Components/ov9655/ov9655.h"
-#include "stm32746g_discovery.h"
-
-/** @addtogroup BSP
-  * @{
-  */
-
-/** @addtogroup STM32746G_DISCOVERY
-  * @{
-  */
-    
-/** @addtogroup STM32746G_DISCOVERY_CAMERA
-  * @{
-  */ 
-   
-/** @defgroup STM32746G_DISCOVERY_CAMERA_Exported_Types STM32746G_DISCOVERY_CAMERA Exported Types
-  * @{
-  */
-  
-/** 
-  * @brief  Camera State structures definition  
-  */  
-typedef enum 
-{
-  CAMERA_OK            = 0x00,
-  CAMERA_ERROR         = 0x01,
-  CAMERA_TIMEOUT       = 0x02,
-  CAMERA_NOT_DETECTED  = 0x03,
-  CAMERA_NOT_SUPPORTED = 0x04
-
-} Camera_StatusTypeDef;
-
-#define RESOLUTION_R160x120      CAMERA_R160x120      /* QQVGA Resolution     */
-#define RESOLUTION_R320x240      CAMERA_R320x240      /* QVGA Resolution      */
-#define RESOLUTION_R480x272      CAMERA_R480x272      /* 480x272 Resolution   */
-#define RESOLUTION_R640x480      CAMERA_R640x480      /* VGA Resolution       */  
-/**
-  * @}
-  */ 
- 
-/** @defgroup STM32746G_DISCOVERY_CAMERA_Exported_Constants STM32746G_DISCOVERY_CAMERA Exported Constants
-  * @{
-  */
-#define BSP_CAMERA_IRQHandler      DCMI_IRQHandler
-#define BSP_CAMERA_DMA_IRQHandler  DMA2_Stream1_IRQHandler  
-
-/**
-  * @}
-  */
-
-/** @addtogroup STM32746G_DISCOVERY_CAMERA_Exported_Functions
-  * @{
-  */    
-uint8_t BSP_CAMERA_Init(uint32_t Resolution);  
-uint8_t BSP_CAMERA_DeInit(void);
-void    BSP_CAMERA_ContinuousStart(uint8_t *buff);
-void    BSP_CAMERA_SnapshotStart(uint8_t *buff);
-void    BSP_CAMERA_Suspend(void);
-void    BSP_CAMERA_Resume(void);
-uint8_t BSP_CAMERA_Stop(void); 
-void    BSP_CAMERA_PwrUp(void);
-void    BSP_CAMERA_PwrDown(void);
-void    BSP_CAMERA_LineEventCallback(void);
-void    BSP_CAMERA_VsyncEventCallback(void);
-void    BSP_CAMERA_FrameEventCallback(void);
-void    BSP_CAMERA_ErrorCallback(void);
-
-/* Camera features functions prototype */
-void    BSP_CAMERA_ContrastBrightnessConfig(uint32_t contrast_level, uint32_t brightness_level);
-void    BSP_CAMERA_BlackWhiteConfig(uint32_t Mode);
-void    BSP_CAMERA_ColorEffectConfig(uint32_t Effect);
-   
-/* These functions can be modified in case the current settings (e.g. DMA stream)
-   need to be changed for specific application needs */
-void BSP_CAMERA_MspInit(DCMI_HandleTypeDef *hdcmi, void *Params);
-void BSP_CAMERA_MspDeInit(DCMI_HandleTypeDef *hdcmi, void *Params);
-
-
-/**
-  * @}
-  */ 
-
-/**
-  * @}
-  */ 
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __STM32746G_DISCOVERY_CAMERA_H */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r 85dbcff443aa -r 1a18e061d0ec Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_eeprom.c
--- a/Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_eeprom.c	Wed Nov 27 08:29:42 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,477 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    stm32746g_discovery_eeprom.c
-  * @author  MCD Application Team
-  * @brief   This file provides a set of functions needed to manage an I2C M24LR64 
-  *          EEPROM memory.
-  @verbatim
-             To be able to use this driver, the switch EE_M24LR64 must be defined
-             in your toolchain compiler preprocessor
-             
-             =================================================================== 
-             Notes:
-              - The I2C EEPROM memory (M24LR64) is available on separate daughter 
-                board ANT7-M24LR-A, which is not provided with the STM32746G_DISCOVERY
-                board.
-                To use this driver you have to connect the ANT7-M24LR-A to CN3 
-                connector of STM32746G_DISCOVERY board.
-             ===================================================================
-                 
-             It implements a high level communication layer for read and write 
-             from/to this memory. The needed STM32F7xx hardware resources (I2C and
-             GPIO) are defined in stm32746g_discovery.h file, and the initialization is
-             performed in EEPROM_IO_Init() function declared in stm32746g_discovery.c
-             file.
-             You can easily tailor this driver to any other development board, 
-             by just adapting the defines for hardware resources and 
-             EEPROM_IO_Init() function. 
-           
-             @note In this driver, basic read and write functions (BSP_EEPROM_ReadBuffer() 
-                   and BSP_EEPROM_WritePage()) use DMA mode to perform the data 
-                   transfer to/from EEPROM memory.
-   
-            @note   Regarding BSP_EEPROM_WritePage(), it is an optimized function to perform
-                   small write (less than 1 page) BUT the number of bytes (combined to write start address) must not
-                   cross the EEPROM page boundary. This function can only writes into
-                   the boundaries of an EEPROM page.
-                   This function doesn't check on boundaries condition (in this driver 
-                   the function BSP_EEPROM_WriteBuffer() which calls BSP_EEPROM_WritePage() is 
-                   responsible of checking on Page boundaries).
-    
-                
-        +-----------------------------------------------------------------+
-        |               Pin assignment for M24LR64 EEPROM                 |
-        +---------------------------------------+-----------+-------------+
-        |  STM32F7xx I2C Pins                   |   EEPROM  |   Pin       |
-        +---------------------------------------+-----------+-------------+
-        | .                                     |   E0(GND) |    1  (0V)  |
-        | .                                     |   AC0     |    2        |
-        | .                                     |   AC1     |    3        |
-        | .                                     |   VSS     |    4  (0V)  |
-        | SDA                                   |   SDA     |    5        |
-        | SCL                                   |   SCL     |    6        |
-        | .                                     |   E1(GND) |    7  (0V)  |
-        | .                                     |   VDD     |    8 (3.3V) |
-        +---------------------------------------+-----------+-------------+
-  @endverbatim   
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT(c) 2016 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.
-  *
-  ******************************************************************************
-  */
-
-/* Dependencies 
-- stm32746g_discovery.c
-EndDependencies */
-
-/* Includes ------------------------------------------------------------------*/
-#include "stm32746g_discovery_eeprom.h"
-
-/** @addtogroup BSP
-  * @{
-  */
-  
-/** @addtogroup STM32746G_DISCOVERY
-  * @{
-  */ 
-  
-/** @addtogroup STM32746G_DISCOVERY_EEPROM
-  * @brief This file includes the I2C EEPROM driver of STM32746G-Discovery board.
-  * @{
-  */ 
-
-/** @defgroup STM32746G_DISCOVERY_EEPROM_Private_Types STM32746G_DISCOVERY_EEPROM Private Types
-  * @{
-  */ 
-/**
-  * @}
-  */ 
-
-/** @defgroup STM32746G_DISCOVERY_EEPROM_Private_Defines STM32746G_DISCOVERY_EEPROM Private Defines
-  * @{
-  */  
-/**
-  * @}
-  */ 
-
-/** @defgroup STM32746G_DISCOVERY_EEPROM_Private_Macros STM32746G_DISCOVERY_EEPROM Private Macros
-  * @{
-  */
-/**
-  * @}
-  */ 
-  
-/** @defgroup STM32746G_DISCOVERY_EEPROM_Private_Variables STM32746G_DISCOVERY_EEPROM Private Variables
-  * @{
-  */
-__IO uint16_t EEPROMAddress = 0;
-__IO uint16_t EEPROMDataRead;
-__IO uint8_t  EEPROMDataWrite;
-/**
-  * @}
-  */ 
-
-/** @defgroup STM32746G_DISCOVERY_EEPROM_Private_Function_Prototypes STM32746G_DISCOVERY_EEPROM Private Function Prototypes
-  * @{
-  */ 
-/**
-  * @}
-  */ 
-
-/** @defgroup STM32746G_DISCOVERY_EEPROM_Exported_Functions STM32746G_DISCOVERY_EEPROM Exported Functions
-  * @{
-  */ 
-
-/**
-  * @brief  Initializes peripherals used by the I2C EEPROM driver.
-  * 
-  * @note   There are 2 different versions of M24LR64 (A01 & A02).
-  *             Then try to connect on 1st one (EEPROM_I2C_ADDRESS_A01) 
-  *             and if problem, check the 2nd one (EEPROM_I2C_ADDRESS_A02)
-  * @retval EEPROM_OK (0) if operation is correctly performed, else return value 
-  *         different from EEPROM_OK (0)
-  */
-uint32_t BSP_EEPROM_Init(void)
-{ 
-  /* I2C Initialization */
-  EEPROM_IO_Init();
-  
-  /* Select the EEPROM address for A01 and check if OK */
-  EEPROMAddress = EEPROM_I2C_ADDRESS_A01;
-  if(EEPROM_IO_IsDeviceReady(EEPROMAddress, EEPROM_MAX_TRIALS) != HAL_OK) 
-  {
-    /* Select the EEPROM address for A02 and check if OK */
-    EEPROMAddress = EEPROM_I2C_ADDRESS_A02;
-    if(EEPROM_IO_IsDeviceReady(EEPROMAddress, EEPROM_MAX_TRIALS) != HAL_OK)
-    {
-      return EEPROM_FAIL;
-    }
-  }
-  return EEPROM_OK;
-}
-
-/**
-  * @brief  DeInitializes the EEPROM.
-  * @retval EEPROM state
-  */
-uint8_t BSP_EEPROM_DeInit(void)
-{ 
-  /* I2C won't be disabled because common to other functionalities */
-  return EEPROM_OK;
-}
-
-/**
-  * @brief  Reads a block of data from the EEPROM.
-  * @param  pBuffer: pointer to the buffer that receives the data read from 
-  *         the EEPROM.
-  * @param  ReadAddr: EEPROM's internal address to start reading from.
-  * @param  NumByteToRead: pointer to the variable holding number of bytes to 
-  *         be read from the EEPROM.
-  * 
-  *        @note The variable pointed by NumByteToRead is reset to 0 when all the 
-  *              data are read from the EEPROM. Application should monitor this 
-  *              variable in order know when the transfer is complete.
-  * 
-  * @retval EEPROM_OK (0) if operation is correctly performed, else return value 
-  *         different from EEPROM_OK (0) or the timeout user callback.
-  */
-uint32_t BSP_EEPROM_ReadBuffer(uint8_t* pBuffer, uint16_t ReadAddr, uint16_t* NumByteToRead)
-{  
-  uint32_t buffersize = *NumByteToRead;
-  
-  /* Set the pointer to the Number of data to be read. This pointer will be used 
-     by the DMA Transfer Completer interrupt Handler in order to reset the 
-     variable to 0. User should check on this variable in order to know if the 
-     DMA transfer has been complete or not. */
-  EEPROMDataRead = *NumByteToRead;
-  
-  if(EEPROM_IO_ReadData(EEPROMAddress, ReadAddr, pBuffer, buffersize) != HAL_OK)
-  {
-    BSP_EEPROM_TIMEOUT_UserCallback();
-    return EEPROM_FAIL;
-  }
-
-  /* If all operations OK, return EEPROM_OK (0) */
-  return EEPROM_OK;
-}
-
-/**
-  * @brief  Writes more than one byte to the EEPROM with a single WRITE cycle.
-  *
-  * @note   The number of bytes (combined to write start address) must not 
-  *         cross the EEPROM page boundary. This function can only write into
-  *         the boundaries of an EEPROM page.
-  *         This function doesn't check on boundaries condition (in this driver 
-  *         the function BSP_EEPROM_WriteBuffer() which calls BSP_EEPROM_WritePage() is 
-  *         responsible of checking on Page boundaries).
-  * 
-  * @param  pBuffer: pointer to the buffer containing the data to be written to 
-  *         the EEPROM.
-  * @param  WriteAddr: EEPROM's internal address to write to.
-  * @param  NumByteToWrite: pointer to the variable holding number of bytes to 
-  *         be written into the EEPROM. 
-  * 
-  *        @note The variable pointed by NumByteToWrite is reset to 0 when all the 
-  *              data are written to the EEPROM. Application should monitor this 
-  *              variable in order know when the transfer is complete.
-  * 
-  *        @note This function just configure the communication and enable the DMA 
-  *              channel to transfer data. Meanwhile, the user application may perform 
-  *              other tasks in parallel.
-  * 
-  * @retval EEPROM_OK (0) if operation is correctly performed, else return value 
-  *         different from EEPROM_OK (0) or the timeout user callback.
-  */
-uint32_t BSP_EEPROM_WritePage(uint8_t* pBuffer, uint16_t WriteAddr, uint8_t* NumByteToWrite)
-{ 
-  uint32_t buffersize = *NumByteToWrite;
-  uint32_t status = EEPROM_OK;
-  
-  /* Set the pointer to the Number of data to be written. This pointer will be used 
-      by the DMA Transfer Completer interrupt Handler in order to reset the 
-      variable to 0. User should check on this variable in order to know if the 
-      DMA transfer has been complete or not. */
-  EEPROMDataWrite = *NumByteToWrite;  
-  
-  if(EEPROM_IO_WriteData(EEPROMAddress, WriteAddr, pBuffer, buffersize) != HAL_OK)
-  {
-    BSP_EEPROM_TIMEOUT_UserCallback();
-    status = EEPROM_FAIL;
-  }
-  
-  if(BSP_EEPROM_WaitEepromStandbyState() != EEPROM_OK) 
-  {
-    return EEPROM_FAIL;
-  }
-  
-  /* If all operations OK, return EEPROM_OK (0) */
-  return status;
-}
-
-/**
-  * @brief  Writes buffer of data to the I2C EEPROM.
-  * @param  pBuffer: pointer to the buffer  containing the data to be written 
-  *         to the EEPROM.
-  * @param  WriteAddr: EEPROM's internal address to write to.
-  * @param  NumByteToWrite: number of bytes to write to the EEPROM.
-  * @retval EEPROM_OK (0) if operation is correctly performed, else return value 
-  *         different from EEPROM_OK (0) or the timeout user callback.
-  */
-uint32_t BSP_EEPROM_WriteBuffer(uint8_t *pBuffer, uint16_t WriteAddr, uint16_t NumByteToWrite)
-{
-  uint16_t numofpage = 0, numofsingle = 0, count = 0;
-  uint16_t addr = 0;
-  uint8_t  dataindex = 0;
-  uint32_t status = EEPROM_OK;
-
-  addr = WriteAddr % EEPROM_PAGESIZE;
-  count = EEPROM_PAGESIZE - addr;
-  numofpage =  NumByteToWrite / EEPROM_PAGESIZE;
-  numofsingle = NumByteToWrite % EEPROM_PAGESIZE;
- 
-  /* If WriteAddr is EEPROM_PAGESIZE aligned */
-  if(addr == 0) 
-  {
-    /* If NumByteToWrite < EEPROM_PAGESIZE */
-    if(numofpage == 0) 
-    {
-      /* Store the number of data to be written */
-      dataindex = numofsingle;
-      /* Start writing data */
-      status = BSP_EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex));
-      if(status != EEPROM_OK)
-      {
-        return status;
-      }
-    }
-    /* If NumByteToWrite > EEPROM_PAGESIZE */
-    else  
-    {
-      while(numofpage--)
-      {
-        /* Store the number of data to be written */
-        dataindex = EEPROM_PAGESIZE;        
-        status = BSP_EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex));
-        if(status != EEPROM_OK)
-        {
-          return status;
-        }
-        
-        WriteAddr +=  EEPROM_PAGESIZE;
-        pBuffer += EEPROM_PAGESIZE;
-      }
-      
-      if(numofsingle!=0)
-      {
-        /* Store the number of data to be written */
-        dataindex = numofsingle;          
-        status = BSP_EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex));
-        if(status != EEPROM_OK)
-        {
-          return status;
-        }
-      }
-    }
-  }
-  /* If WriteAddr is not EEPROM_PAGESIZE aligned */
-  else 
-  {
-    /* If NumByteToWrite < EEPROM_PAGESIZE */
-    if(numofpage== 0) 
-    {
-      /* If the number of data to be written is more than the remaining space 
-      in the current page: */
-      if(NumByteToWrite > count)
-      {
-        /* Store the number of data to be written */
-        dataindex = count;        
-        /* Write the data contained in same page */
-        status = BSP_EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex));
-        if(status != EEPROM_OK)
-        {
-          return status;
-        }
-        
-        /* Store the number of data to be written */
-        dataindex = (NumByteToWrite - count);          
-        /* Write the remaining data in the following page */
-        status = BSP_EEPROM_WritePage((uint8_t*)(pBuffer + count), (WriteAddr + count), (uint8_t*)(&dataindex));
-        if(status != EEPROM_OK)
-        {
-          return status;
-        }
-      }      
-      else      
-      {
-        /* Store the number of data to be written */
-        dataindex = numofsingle;         
-        status = BSP_EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex));
-        if(status != EEPROM_OK)
-        {
-          return status;
-        }
-      }     
-    }
-    /* If NumByteToWrite > EEPROM_PAGESIZE */
-    else
-    {
-      NumByteToWrite -= count;
-      numofpage =  NumByteToWrite / EEPROM_PAGESIZE;
-      numofsingle = NumByteToWrite % EEPROM_PAGESIZE;
-      
-      if(count != 0)
-      {  
-        /* Store the number of data to be written */
-        dataindex = count;         
-        status = BSP_EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex));
-        if(status != EEPROM_OK)
-        {
-          return status;
-        }
-        WriteAddr += count;
-        pBuffer += count;
-      } 
-      
-      while(numofpage--)
-      {
-        /* Store the number of data to be written */
-        dataindex = EEPROM_PAGESIZE;          
-        status = BSP_EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex));
-        if(status != EEPROM_OK)
-        {
-          return status;
-        }
-        WriteAddr +=  EEPROM_PAGESIZE;
-        pBuffer += EEPROM_PAGESIZE;  
-      }
-      if(numofsingle != 0)
-      {
-        /* Store the number of data to be written */
-        dataindex = numofsingle;           
-        status = BSP_EEPROM_WritePage(pBuffer, WriteAddr, (uint8_t*)(&dataindex));
-        if(status != EEPROM_OK)
-        {
-          return status;
-        }
-      }
-    }
-  }  
-                                   
-  /* If all operations OK, return EEPROM_OK (0) */
-  return EEPROM_OK;
-}
-
-/**
-  * @brief  Wait for EEPROM Standby state.
-  * 
-  * @note  This function allows to wait and check that EEPROM has finished the 
-  *        last operation. It is mostly used after Write operation: after receiving
-  *        the buffer to be written, the EEPROM may need additional time to actually
-  *        perform the write operation. During this time, it doesn't answer to
-  *        I2C packets addressed to it. Once the write operation is complete
-  *        the EEPROM responds to its address.
-  * 
-  * @retval EEPROM_OK (0) if operation is correctly performed, else return value 
-  *         different from EEPROM_OK (0) or the timeout user callback.
-  */
-uint32_t BSP_EEPROM_WaitEepromStandbyState(void)      
-{
-  /* Check if the maximum allowed number of trials has bee reached */
-  if(EEPROM_IO_IsDeviceReady(EEPROMAddress, EEPROM_MAX_TRIALS) != HAL_OK)
-  {
-    /* If the maximum number of trials has been reached, exit the function */
-    BSP_EEPROM_TIMEOUT_UserCallback();
-    return EEPROM_TIMEOUT;
-  }
-  return EEPROM_OK;
-}
-
-/**
-  * @brief  Basic management of the timeout situation.
-  * @retval None
-  */
-__weak void BSP_EEPROM_TIMEOUT_UserCallback(void)
-{
-}
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r 85dbcff443aa -r 1a18e061d0ec Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_eeprom.h
--- a/Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_eeprom.h	Wed Nov 27 08:29:42 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,138 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    stm32746g_discovery_eeprom.h
-  * @author  MCD Application Team
-  * @brief   This file contains all the functions prototypes for 
-  *          the stm32746g_discovery_eeprom.c firmware driver.
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT(c) 2016 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.
-  *
-  ******************************************************************************
-  */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __STM32746G_DISCOVERY_EEPROM_H
-#define __STM32746G_DISCOVERY_EEPROM_H
-
-#ifdef __cplusplus
- extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include "stm32746g_discovery.h"
-
-/** @addtogroup BSP
-  * @{
-  */
-  
-/** @addtogroup STM32746G_DISCOVERY
-  * @{
-  */ 
-  
-/** @addtogroup STM32746G_DISCOVERY_EEPROM
-  * @brief This file includes the I2C EEPROM driver of STM32746G-Discovery board.
-  * @{
-  */
-
-/** @defgroup STM32746G_DISCOVERY_EEPROM_Exported_Types STM32746G_DISCOVERY_EEPROM Exported Types
-  * @{
-  */ 
-/**
-  * @}
-  */
-  
-/** @defgroup STM32746G_DISCOVERY_EEPROM_Exported_Constants STM32746G_DISCOVERY_EEPROM Exported Constants
-  * @{
-  */
-/* EEPROM hardware address and page size */ 
-#define EEPROM_PAGESIZE             ((uint8_t)4)
-#define EEPROM_MAX_SIZE             ((uint16_t)0x2000) /* 64Kbit */
-                                
-
-/* Maximum number of trials for EEPROM_WaitEepromStandbyState() function */
-#define EEPROM_MAX_TRIALS           ((uint32_t)3000)
-      
-#define EEPROM_OK                   ((uint32_t)0)
-#define EEPROM_FAIL                 ((uint32_t)1)
-#define EEPROM_TIMEOUT              ((uint32_t)2)
-/**
-  * @}
-  */ 
-  
-/** @defgroup STM32746G_DISCOVERY_EEPROM_Exported_Macros STM32746G_DISCOVERY_EEPROM Exported Macros
-  * @{
-  */    
-/**
-  * @}
-  */ 
-
-/** @addtogroup STM32746G_DISCOVERY_EEPROM_Exported_Functions
-  * @{
-  */ 
-uint32_t BSP_EEPROM_Init(void);
-uint8_t BSP_EEPROM_DeInit(void);
-uint32_t BSP_EEPROM_ReadBuffer(uint8_t* pBuffer, uint16_t ReadAddr, uint16_t* NumByteToRead);
-uint32_t BSP_EEPROM_WritePage(uint8_t* pBuffer, uint16_t WriteAddr, uint8_t* NumByteToWrite);
-uint32_t BSP_EEPROM_WriteBuffer(uint8_t* pBuffer, uint16_t WriteAddr, uint16_t NumByteToWrite);
-uint32_t BSP_EEPROM_WaitEepromStandbyState(void);
-
-/* USER Callbacks: This function is declared as __weak in EEPROM driver and 
-   should be implemented into user application.  
-   BSP_EEPROM_TIMEOUT_UserCallback() function is called whenever a timeout condition 
-   occurs during communication (waiting on an event that doesn't occur, bus
-   errors, busy devices ...). */
-void     BSP_EEPROM_TIMEOUT_UserCallback(void);
-
-/* Link function for I2C EEPROM peripheral */
-void              EEPROM_IO_Init(void);
-HAL_StatusTypeDef EEPROM_IO_WriteData(uint16_t DevAddress, uint16_t MemAddress, uint8_t *pBuffer, uint32_t BufferSize);
-HAL_StatusTypeDef EEPROM_IO_ReadData(uint16_t DevAddress, uint16_t MemAddress, uint8_t *pBuffer, uint32_t BufferSize);
-HAL_StatusTypeDef EEPROM_IO_IsDeviceReady(uint16_t DevAddress, uint32_t Trials);
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */ 
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __STM32746G_DISCOVERY_EEPROM_H */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r 85dbcff443aa -r 1a18e061d0ec Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_lcd.c
--- a/Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_lcd.c	Wed Nov 27 08:29:42 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1663 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    stm32746g_discovery_lcd.c
-  * @author  MCD Application Team
-  * @brief   This file includes the driver for Liquid Crystal Display (LCD) module
-  *          mounted on STM32746G-Discovery board.
-  @verbatim
-  1. How To use this driver:
-  --------------------------
-     - This driver is used to drive directly an LCD TFT using the LTDC controller.
-     - This driver uses timing and setting for RK043FN48H LCD.
-  
-  2. Driver description:
-  ---------------------
-    + Initialization steps:
-       o Initialize the LCD using the BSP_LCD_Init() function.
-       o Apply the Layer configuration using the BSP_LCD_LayerDefaultInit() function.    
-       o Select the LCD layer to be used using the BSP_LCD_SelectLayer() function.
-       o Enable the LCD display using the BSP_LCD_DisplayOn() function.
-  
-    + Options
-       o Configure and enable the color keying functionality using the 
-         BSP_LCD_SetColorKeying() function.
-       o Modify in the fly the transparency and/or the frame buffer address
-         using the following functions:
-         - BSP_LCD_SetTransparency()
-         - BSP_LCD_SetLayerAddress() 
-    
-    + Display on LCD
-       o Clear the hole LCD using BSP_LCD_Clear() function or only one specified string
-         line using the BSP_LCD_ClearStringLine() function.
-       o Display a character on the specified line and column using the BSP_LCD_DisplayChar()
-         function or a complete string line using the BSP_LCD_DisplayStringAtLine() function.
-       o Display a string line on the specified position (x,y in pixel) and align mode
-         using the BSP_LCD_DisplayStringAtLine() function.          
-       o Draw and fill a basic shapes (dot, line, rectangle, circle, ellipse, .. bitmap) 
-         on LCD using the available set of functions.       
-  @endverbatim
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT(c) 2016 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.
-  *
-  ******************************************************************************
-  */ 
-
-/* Dependencies
-- stm32746g_discovery.c
-- stm32746g_discovery_sdram.c
-- stm32f7xx_hal_ltdc.c
-- stm32f7xx_hal_ltdc_ex.c
-- stm32f7xx_hal_dma2d.c
-- stm32f7xx_hal_rcc_ex.c
-- stm32f7xx_hal_gpio.c
-- stm32f7xx_hal_cortex.c
-- rk043fn48h.h
-- fonts.h
-- font24.c
-- font20.c
-- font16.c
-- font12.c
-- font8.c"
-EndDependencies */
-
-/* Includes ------------------------------------------------------------------*/
-#include "stm32746g_discovery_lcd.h"
-#include "../../../Utilities/Fonts/fonts.h"
-// MBED #include "../../../Utilities/Fonts/font24.c"
-// MBED #include "../../../Utilities/Fonts/font20.c"
-// MBED #include "../../../Utilities/Fonts/font16.c"
-// MBED #include "../../../Utilities/Fonts/font12.c"
-// MBED #include "../../../Utilities/Fonts/font8.c"
-
-/** @addtogroup BSP
-  * @{
-  */
-
-/** @addtogroup STM32746G_DISCOVERY
-  * @{
-  */
-    
-/** @addtogroup STM32746G_DISCOVERY_LCD
-  * @{
-  */ 
-
-/** @defgroup STM32746G_DISCOVERY_LCD_Private_TypesDefinitions STM32746G_DISCOVERY_LCD Private Types Definitions
-  * @{
-  */ 
-/**
-  * @}
-  */ 
-
-/** @defgroup STM32746G_DISCOVERY_LCD_Private_Defines STM32746G_DISCOVERY LCD Private Defines
-  * @{
-  */
-#define POLY_X(Z)              ((int32_t)((Points + Z)->X))
-#define POLY_Y(Z)              ((int32_t)((Points + Z)->Y))      
-/**
-  * @}
-  */ 
-
-/** @defgroup STM32746G_DISCOVERY_LCD_Private_Macros STM32746G_DISCOVERY_LCD Private Macros
-  * @{
-  */
-#define ABS(X)  ((X) > 0 ? (X) : -(X))      
-/**
-  * @}
-  */ 
-    
-/** @defgroup STM32746G_DISCOVERY_LCD_Private_Variables STM32746G_DISCOVERY_LCD Private Variables
-  * @{
-  */ 
-LTDC_HandleTypeDef  hLtdcHandler;
-static DMA2D_HandleTypeDef hDma2dHandler;
-
-/* Default LCD configuration with LCD Layer 1 */
-static uint32_t            ActiveLayer = 0;
-static LCD_DrawPropTypeDef DrawProp[MAX_LAYER_NUMBER];
-/**
-  * @}
-  */ 
-
-/** @defgroup STM32746G_DISCOVERY_LCD_Private_FunctionPrototypes STM32746G_DISCOVERY_LCD Private Function Prototypes
-  * @{
-  */ 
-static void DrawChar(uint16_t Xpos, uint16_t Ypos, const uint8_t *c);
-static void FillTriangle(uint16_t x1, uint16_t x2, uint16_t x3, uint16_t y1, uint16_t y2, uint16_t y3);
-static void LL_FillBuffer(uint32_t LayerIndex, void *pDst, uint32_t xSize, uint32_t ySize, uint32_t OffLine, uint32_t ColorIndex);
-static void LL_ConvertLineToARGB8888(void * pSrc, void *pDst, uint32_t xSize, uint32_t ColorMode);
-/**
-  * @}
-  */ 
-
-/** @defgroup STM32746G_DISCOVERY_LCD_Exported_Functions STM32746G_DISCOVERY_LCD Exported Functions
-  * @{
-  */
-
-/**
-  * @brief  Initializes the LCD.
-  * @retval LCD state
-  */
-uint8_t BSP_LCD_Init(void)
-{    
-  /* Select the used LCD */
-
-  /* The RK043FN48H LCD 480x272 is selected */
-  /* Timing Configuration */
-  hLtdcHandler.Init.HorizontalSync = (RK043FN48H_HSYNC - 1);
-  hLtdcHandler.Init.VerticalSync = (RK043FN48H_VSYNC - 1);
-  hLtdcHandler.Init.AccumulatedHBP = (RK043FN48H_HSYNC + RK043FN48H_HBP - 1);
-  hLtdcHandler.Init.AccumulatedVBP = (RK043FN48H_VSYNC + RK043FN48H_VBP - 1);
-  hLtdcHandler.Init.AccumulatedActiveH = (RK043FN48H_HEIGHT + RK043FN48H_VSYNC + RK043FN48H_VBP - 1);
-  hLtdcHandler.Init.AccumulatedActiveW = (RK043FN48H_WIDTH + RK043FN48H_HSYNC + RK043FN48H_HBP - 1);
-  hLtdcHandler.Init.TotalHeigh = (RK043FN48H_HEIGHT + RK043FN48H_VSYNC + RK043FN48H_VBP + RK043FN48H_VFP - 1);
-  hLtdcHandler.Init.TotalWidth = (RK043FN48H_WIDTH + RK043FN48H_HSYNC + RK043FN48H_HBP + RK043FN48H_HFP - 1);
-  
-  /* LCD clock configuration */
-  BSP_LCD_ClockConfig(&hLtdcHandler, NULL);
-
-  /* Initialize the LCD pixel width and pixel height */
-  hLtdcHandler.LayerCfg->ImageWidth  = RK043FN48H_WIDTH;
-  hLtdcHandler.LayerCfg->ImageHeight = RK043FN48H_HEIGHT;
-
-  /* Background value */
-  hLtdcHandler.Init.Backcolor.Blue = 0;
-  hLtdcHandler.Init.Backcolor.Green = 0;
-  hLtdcHandler.Init.Backcolor.Red = 0;
-  
-  /* Polarity */
-  hLtdcHandler.Init.HSPolarity = LTDC_HSPOLARITY_AL;
-  hLtdcHandler.Init.VSPolarity = LTDC_VSPOLARITY_AL; 
-  hLtdcHandler.Init.DEPolarity = LTDC_DEPOLARITY_AL;  
-  hLtdcHandler.Init.PCPolarity = LTDC_PCPOLARITY_IPC;
-  hLtdcHandler.Instance = LTDC;
-
-  if(HAL_LTDC_GetState(&hLtdcHandler) == HAL_LTDC_STATE_RESET)
-  {
-    /* Initialize the LCD Msp: this __weak function can be rewritten by the application */
-    BSP_LCD_MspInit(&hLtdcHandler, NULL);
-  }
-  HAL_LTDC_Init(&hLtdcHandler);
-
-  /* Assert display enable LCD_DISP pin */
-  HAL_GPIO_WritePin(LCD_DISP_GPIO_PORT, LCD_DISP_PIN, GPIO_PIN_SET);
-
-  /* Assert backlight LCD_BL_CTRL pin */
-  HAL_GPIO_WritePin(LCD_BL_CTRL_GPIO_PORT, LCD_BL_CTRL_PIN, GPIO_PIN_SET);
-
-#if !defined(DATA_IN_ExtSDRAM)
-  /* Initialize the SDRAM */
-  BSP_SDRAM_Init();
-#endif
-    
-  /* Initialize the font */
-  BSP_LCD_SetFont(&LCD_DEFAULT_FONT);
-  
-  return LCD_OK;
-}
-
-/**
-  * @brief  DeInitializes the LCD.
-  * @retval LCD state
-  */
-uint8_t BSP_LCD_DeInit(void)
-{ 
-  /* Initialize the hLtdcHandler Instance parameter */
-  hLtdcHandler.Instance = LTDC;
-
- /* Disable LTDC block */
-  __HAL_LTDC_DISABLE(&hLtdcHandler);
-
-  /* DeInit the LTDC */
-  HAL_LTDC_DeInit(&hLtdcHandler);
-
-  /* DeInit the LTDC MSP : this __weak function can be rewritten by the application */
-  BSP_LCD_MspDeInit(&hLtdcHandler, NULL);
-
-  return LCD_OK;
-}
-
-/**
-  * @brief  Gets the LCD X size.
-  * @retval Used LCD X size
-  */
-uint32_t BSP_LCD_GetXSize(void)
-{
-  return hLtdcHandler.LayerCfg[ActiveLayer].ImageWidth;
-}
-
-/**
-  * @brief  Gets the LCD Y size.
-  * @retval Used LCD Y size
-  */
-uint32_t BSP_LCD_GetYSize(void)
-{
-  return hLtdcHandler.LayerCfg[ActiveLayer].ImageHeight;
-}
-
-/**
-  * @brief  Set the LCD X size.
-  * @param  imageWidthPixels : image width in pixels unit
-  * @retval None
-  */
-void BSP_LCD_SetXSize(uint32_t imageWidthPixels)
-{
-  hLtdcHandler.LayerCfg[ActiveLayer].ImageWidth = imageWidthPixels;
-}
-
-/**
-  * @brief  Set the LCD Y size.
-  * @param  imageHeightPixels : image height in lines unit
-  * @retval None
-  */
-void BSP_LCD_SetYSize(uint32_t imageHeightPixels)
-{
-  hLtdcHandler.LayerCfg[ActiveLayer].ImageHeight = imageHeightPixels;
-}
-
-/**
-  * @brief  Initializes the LCD layer in ARGB8888 format (32 bits per pixel).
-  * @param  LayerIndex: Layer foreground or background
-  * @param  FB_Address: Layer frame buffer
-  * @retval None
-  */
-void BSP_LCD_LayerDefaultInit(uint16_t LayerIndex, uint32_t FB_Address)
-{     
-  LCD_LayerCfgTypeDef  layer_cfg;
-
-  /* Layer Init */
-  layer_cfg.WindowX0 = 0;
-  layer_cfg.WindowX1 = BSP_LCD_GetXSize();
-  layer_cfg.WindowY0 = 0;
-  layer_cfg.WindowY1 = BSP_LCD_GetYSize(); 
-  layer_cfg.PixelFormat = LTDC_PIXEL_FORMAT_ARGB8888;
-  layer_cfg.FBStartAdress = FB_Address;
-  layer_cfg.Alpha = 255;
-  layer_cfg.Alpha0 = 0;
-  layer_cfg.Backcolor.Blue = 0;
-  layer_cfg.Backcolor.Green = 0;
-  layer_cfg.Backcolor.Red = 0;
-  layer_cfg.BlendingFactor1 = LTDC_BLENDING_FACTOR1_PAxCA;
-  layer_cfg.BlendingFactor2 = LTDC_BLENDING_FACTOR2_PAxCA;
-  layer_cfg.ImageWidth = BSP_LCD_GetXSize();
-  layer_cfg.ImageHeight = BSP_LCD_GetYSize();
-  
-  HAL_LTDC_ConfigLayer(&hLtdcHandler, &layer_cfg, LayerIndex); 
-
-  DrawProp[LayerIndex].BackColor = LCD_COLOR_WHITE;
-  DrawProp[LayerIndex].pFont     = &Font24;
-  DrawProp[LayerIndex].TextColor = LCD_COLOR_BLACK; 
-}
-
-/**
-  * @brief  Initializes the LCD layer in RGB565 format (16 bits per pixel).
-  * @param  LayerIndex: Layer foreground or background
-  * @param  FB_Address: Layer frame buffer
-  * @retval None
-  */
-void BSP_LCD_LayerRgb565Init(uint16_t LayerIndex, uint32_t FB_Address)
-{     
-  LCD_LayerCfgTypeDef  layer_cfg;
-
-  /* Layer Init */
-  layer_cfg.WindowX0 = 0;
-  layer_cfg.WindowX1 = BSP_LCD_GetXSize();
-  layer_cfg.WindowY0 = 0;
-  layer_cfg.WindowY1 = BSP_LCD_GetYSize(); 
-  layer_cfg.PixelFormat = LTDC_PIXEL_FORMAT_RGB565;
-  layer_cfg.FBStartAdress = FB_Address;
-  layer_cfg.Alpha = 255;
-  layer_cfg.Alpha0 = 0;
-  layer_cfg.Backcolor.Blue = 0;
-  layer_cfg.Backcolor.Green = 0;
-  layer_cfg.Backcolor.Red = 0;
-  layer_cfg.BlendingFactor1 = LTDC_BLENDING_FACTOR1_PAxCA;
-  layer_cfg.BlendingFactor2 = LTDC_BLENDING_FACTOR2_PAxCA;
-  layer_cfg.ImageWidth = BSP_LCD_GetXSize();
-  layer_cfg.ImageHeight = BSP_LCD_GetYSize();
-  
-  HAL_LTDC_ConfigLayer(&hLtdcHandler, &layer_cfg, LayerIndex); 
-
-  DrawProp[LayerIndex].BackColor = LCD_COLOR_WHITE;
-  DrawProp[LayerIndex].pFont     = &Font24;
-  DrawProp[LayerIndex].TextColor = LCD_COLOR_BLACK; 
-}
-
-/**
-  * @brief  Selects the LCD Layer.
-  * @param  LayerIndex: Layer foreground or background
-  * @retval None
-  */
-void BSP_LCD_SelectLayer(uint32_t LayerIndex)
-{
-  ActiveLayer = LayerIndex;
-} 
-
-/**
-  * @brief  Sets an LCD Layer visible
-  * @param  LayerIndex: Visible Layer
-  * @param  State: New state of the specified layer
-  *          This parameter can be one of the following values:
-  *            @arg  ENABLE
-  *            @arg  DISABLE 
-  * @retval None
-  */
-void BSP_LCD_SetLayerVisible(uint32_t LayerIndex, FunctionalState State)
-{
-  if(State == ENABLE)
-  {
-    __HAL_LTDC_LAYER_ENABLE(&hLtdcHandler, LayerIndex);
-  }
-  else
-  {
-    __HAL_LTDC_LAYER_DISABLE(&hLtdcHandler, LayerIndex);
-  }
-  __HAL_LTDC_RELOAD_CONFIG(&hLtdcHandler);
-} 
-
-/**
-  * @brief  Sets an LCD Layer visible without reloading.
-  * @param  LayerIndex: Visible Layer
-  * @param  State: New state of the specified layer
-  *          This parameter can be one of the following values:
-  *            @arg  ENABLE
-  *            @arg  DISABLE 
-  * @retval None
-  */
-void BSP_LCD_SetLayerVisible_NoReload(uint32_t LayerIndex, FunctionalState State)
-{
-  if(State == ENABLE)
-  {
-    __HAL_LTDC_LAYER_ENABLE(&hLtdcHandler, LayerIndex);
-  }
-  else
-  {
-    __HAL_LTDC_LAYER_DISABLE(&hLtdcHandler, LayerIndex);
-  }
-  /* Do not Sets the Reload  */
-} 
-
-/**
-  * @brief  Configures the transparency.
-  * @param  LayerIndex: Layer foreground or background.
-  * @param  Transparency: Transparency
-  *           This parameter must be a number between Min_Data = 0x00 and Max_Data = 0xFF 
-  * @retval None
-  */
-void BSP_LCD_SetTransparency(uint32_t LayerIndex, uint8_t Transparency)
-{    
-  HAL_LTDC_SetAlpha(&hLtdcHandler, Transparency, LayerIndex);
-}
-
-/**
-  * @brief  Configures the transparency without reloading.
-  * @param  LayerIndex: Layer foreground or background.
-  * @param  Transparency: Transparency
-  *           This parameter must be a number between Min_Data = 0x00 and Max_Data = 0xFF 
-  * @retval None
-  */
-void BSP_LCD_SetTransparency_NoReload(uint32_t LayerIndex, uint8_t Transparency)
-{    
-  HAL_LTDC_SetAlpha_NoReload(&hLtdcHandler, Transparency, LayerIndex);
-}
-
-/**
-  * @brief  Sets an LCD layer frame buffer address.
-  * @param  LayerIndex: Layer foreground or background
-  * @param  Address: New LCD frame buffer value      
-  * @retval None
-  */
-void BSP_LCD_SetLayerAddress(uint32_t LayerIndex, uint32_t Address)
-{
-  HAL_LTDC_SetAddress(&hLtdcHandler, Address, LayerIndex);
-}
-
-/**
-  * @brief  Sets an LCD layer frame buffer address without reloading.
-  * @param  LayerIndex: Layer foreground or background
-  * @param  Address: New LCD frame buffer value      
-  * @retval None
-  */
-void BSP_LCD_SetLayerAddress_NoReload(uint32_t LayerIndex, uint32_t Address)
-{
-  HAL_LTDC_SetAddress_NoReload(&hLtdcHandler, Address, LayerIndex);
-}
-
-/**
-  * @brief  Sets display window.
-  * @param  LayerIndex: Layer index
-  * @param  Xpos: LCD X position
-  * @param  Ypos: LCD Y position
-  * @param  Width: LCD window width
-  * @param  Height: LCD window height  
-  * @retval None
-  */
-void BSP_LCD_SetLayerWindow(uint16_t LayerIndex, uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height)
-{
-  /* Reconfigure the layer size */
-  HAL_LTDC_SetWindowSize(&hLtdcHandler, Width, Height, LayerIndex);
-  
-  /* Reconfigure the layer position */
-  HAL_LTDC_SetWindowPosition(&hLtdcHandler, Xpos, Ypos, LayerIndex); 
-}
-
-/**
-  * @brief  Sets display window without reloading.
-  * @param  LayerIndex: Layer index
-  * @param  Xpos: LCD X position
-  * @param  Ypos: LCD Y position
-  * @param  Width: LCD window width
-  * @param  Height: LCD window height  
-  * @retval None
-  */
-void BSP_LCD_SetLayerWindow_NoReload(uint16_t LayerIndex, uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height)
-{
-  /* Reconfigure the layer size */
-  HAL_LTDC_SetWindowSize_NoReload(&hLtdcHandler, Width, Height, LayerIndex);
-  
-  /* Reconfigure the layer position */
-  HAL_LTDC_SetWindowPosition_NoReload(&hLtdcHandler, Xpos, Ypos, LayerIndex); 
-}
-
-/**
-  * @brief  Configures and sets the color keying.
-  * @param  LayerIndex: Layer foreground or background
-  * @param  RGBValue: Color reference
-  * @retval None
-  */
-void BSP_LCD_SetColorKeying(uint32_t LayerIndex, uint32_t RGBValue)
-{  
-  /* Configure and Enable the color Keying for LCD Layer */
-  HAL_LTDC_ConfigColorKeying(&hLtdcHandler, RGBValue, LayerIndex);
-  HAL_LTDC_EnableColorKeying(&hLtdcHandler, LayerIndex);
-}
-
-/**
-  * @brief  Configures and sets the color keying without reloading.
-  * @param  LayerIndex: Layer foreground or background
-  * @param  RGBValue: Color reference
-  * @retval None
-  */
-void BSP_LCD_SetColorKeying_NoReload(uint32_t LayerIndex, uint32_t RGBValue)
-{  
-  /* Configure and Enable the color Keying for LCD Layer */
-  HAL_LTDC_ConfigColorKeying_NoReload(&hLtdcHandler, RGBValue, LayerIndex);
-  HAL_LTDC_EnableColorKeying_NoReload(&hLtdcHandler, LayerIndex);
-}
-
-/**
-  * @brief  Disables the color keying.
-  * @param  LayerIndex: Layer foreground or background
-  * @retval None
-  */
-void BSP_LCD_ResetColorKeying(uint32_t LayerIndex)
-{   
-  /* Disable the color Keying for LCD Layer */
-  HAL_LTDC_DisableColorKeying(&hLtdcHandler, LayerIndex);
-}
-
-/**
-  * @brief  Disables the color keying without reloading.
-  * @param  LayerIndex: Layer foreground or background
-  * @retval None
-  */
-void BSP_LCD_ResetColorKeying_NoReload(uint32_t LayerIndex)
-{   
-  /* Disable the color Keying for LCD Layer */
-  HAL_LTDC_DisableColorKeying_NoReload(&hLtdcHandler, LayerIndex);
-}
-
-/**
-  * @brief  Disables the color keying without reloading.
-  * @param  ReloadType: can be one of the following values 
-  *         - LCD_RELOAD_IMMEDIATE 
-  *         - LCD_RELOAD_VERTICAL_BLANKING
-  * @retval None
-  */
-void BSP_LCD_Reload(uint32_t ReloadType)
-{
-  HAL_LTDC_Reload (&hLtdcHandler, ReloadType);
-}
-
-/**
-  * @brief  Sets the LCD text color.
-  * @param  Color: Text color code ARGB(8-8-8-8)
-  * @retval None
-  */
-void BSP_LCD_SetTextColor(uint32_t Color)
-{
-  DrawProp[ActiveLayer].TextColor = Color;
-}
-
-/**
-  * @brief  Gets the LCD text color.
-  * @retval Used text color.
-  */
-uint32_t BSP_LCD_GetTextColor(void)
-{
-  return DrawProp[ActiveLayer].TextColor;
-}
-
-/**
-  * @brief  Sets the LCD background color.
-  * @param  Color: Layer background color code ARGB(8-8-8-8)
-  * @retval None
-  */
-void BSP_LCD_SetBackColor(uint32_t Color)
-{
-  DrawProp[ActiveLayer].BackColor = Color;
-}
-
-/**
-  * @brief  Gets the LCD background color.
-  * @retval Used background colour
-  */
-uint32_t BSP_LCD_GetBackColor(void)
-{
-  return DrawProp[ActiveLayer].BackColor;
-}
-
-/**
-  * @brief  Sets the LCD text font.
-  * @param  fonts: Layer font to be used
-  * @retval None
-  */
-void BSP_LCD_SetFont(sFONT *fonts)
-{
-  DrawProp[ActiveLayer].pFont = fonts;
-}
-
-/**
-  * @brief  Gets the LCD text font.
-  * @retval Used layer font
-  */
-sFONT *BSP_LCD_GetFont(void)
-{
-  return DrawProp[ActiveLayer].pFont;
-}
-
-/**
-  * @brief  Reads an LCD pixel.
-  * @param  Xpos: X position 
-  * @param  Ypos: Y position 
-  * @retval RGB pixel color
-  */
-uint32_t BSP_LCD_ReadPixel(uint16_t Xpos, uint16_t Ypos)
-{
-  uint32_t ret = 0;
-  
-  if(hLtdcHandler.LayerCfg[ActiveLayer].PixelFormat == LTDC_PIXEL_FORMAT_ARGB8888)
-  {
-    /* Read data value from SDRAM memory */
-    ret = *(__IO uint32_t*) (hLtdcHandler.LayerCfg[ActiveLayer].FBStartAdress + (4*(Ypos*BSP_LCD_GetXSize() + Xpos)));
-  }
-  else if(hLtdcHandler.LayerCfg[ActiveLayer].PixelFormat == LTDC_PIXEL_FORMAT_RGB888)
-  {
-    /* Read data value from SDRAM memory */
-    ret = (*(__IO uint32_t*) (hLtdcHandler.LayerCfg[ActiveLayer].FBStartAdress + (4*(Ypos*BSP_LCD_GetXSize() + Xpos))) & 0x00FFFFFF);
-  }
-  else if((hLtdcHandler.LayerCfg[ActiveLayer].PixelFormat == LTDC_PIXEL_FORMAT_RGB565) || \
-          (hLtdcHandler.LayerCfg[ActiveLayer].PixelFormat == LTDC_PIXEL_FORMAT_ARGB4444) || \
-          (hLtdcHandler.LayerCfg[ActiveLayer].PixelFormat == LTDC_PIXEL_FORMAT_AL88))  
-  {
-    /* Read data value from SDRAM memory */
-    ret = *(__IO uint16_t*) (hLtdcHandler.LayerCfg[ActiveLayer].FBStartAdress + (2*(Ypos*BSP_LCD_GetXSize() + Xpos)));    
-  }
-  else
-  {
-    /* Read data value from SDRAM memory */
-    ret = *(__IO uint8_t*) (hLtdcHandler.LayerCfg[ActiveLayer].FBStartAdress + (2*(Ypos*BSP_LCD_GetXSize() + Xpos)));    
-  }
-  
-  return ret;
-}
-
-/**
-  * @brief  Clears the hole LCD.
-  * @param  Color: Color of the background
-  * @retval None
-  */
-void BSP_LCD_Clear(uint32_t Color)
-{ 
-  /* Clear the LCD */ 
-  LL_FillBuffer(ActiveLayer, (uint32_t *)(hLtdcHandler.LayerCfg[ActiveLayer].FBStartAdress), BSP_LCD_GetXSize(), BSP_LCD_GetYSize(), 0, Color);
-}
-
-/**
-  * @brief  Clears the selected line.
-  * @param  Line: Line to be cleared
-  * @retval None
-  */
-void BSP_LCD_ClearStringLine(uint32_t Line)
-{
-  uint32_t color_backup = DrawProp[ActiveLayer].TextColor;
-  DrawProp[ActiveLayer].TextColor = DrawProp[ActiveLayer].BackColor;
-  
-  /* Draw rectangle with background color */
-  BSP_LCD_FillRect(0, (Line * DrawProp[ActiveLayer].pFont->Height), BSP_LCD_GetXSize(), DrawProp[ActiveLayer].pFont->Height);
-  
-  DrawProp[ActiveLayer].TextColor = color_backup;
-  BSP_LCD_SetTextColor(DrawProp[ActiveLayer].TextColor);  
-}
-
-/**
-  * @brief  Displays one character.
-  * @param  Xpos: Start column address
-  * @param  Ypos: Line where to display the character shape.
-  * @param  Ascii: Character ascii code
-  *           This parameter must be a number between Min_Data = 0x20 and Max_Data = 0x7E 
-  * @retval None
-  */
-void BSP_LCD_DisplayChar(uint16_t Xpos, uint16_t Ypos, uint8_t Ascii)
-{
-  DrawChar(Xpos, Ypos, &DrawProp[ActiveLayer].pFont->table[(Ascii-' ') *\
-    DrawProp[ActiveLayer].pFont->Height * ((DrawProp[ActiveLayer].pFont->Width + 7) / 8)]);
-}
-
-/**
-  * @brief  Displays characters on the LCD.
-  * @param  Xpos: X position (in pixel)
-  * @param  Ypos: Y position (in pixel)   
-  * @param  Text: Pointer to string to display on LCD
-  * @param  Mode: Display mode
-  *          This parameter can be one of the following values:
-  *            @arg  CENTER_MODE
-  *            @arg  RIGHT_MODE
-  *            @arg  LEFT_MODE   
-  * @retval None
-  */
-void BSP_LCD_DisplayStringAt(uint16_t Xpos, uint16_t Ypos, uint8_t *Text, Text_AlignModeTypdef Mode)
-{
-  uint16_t ref_column = 1, i = 0;
-  uint32_t size = 0, xsize = 0; 
-  uint8_t  *ptr = Text;
-  
-  /* Get the text size */
-  while (*ptr++) size ++ ;
-  
-  /* Characters number per line */
-  xsize = (BSP_LCD_GetXSize()/DrawProp[ActiveLayer].pFont->Width);
-  
-  switch (Mode)
-  {
-  case CENTER_MODE:
-    {
-      ref_column = Xpos + ((xsize - size)* DrawProp[ActiveLayer].pFont->Width) / 2;
-      break;
-    }
-  case LEFT_MODE:
-    {
-      ref_column = Xpos;
-      break;
-    }
-  case RIGHT_MODE:
-    {
-      ref_column = - Xpos + ((xsize - size)*DrawProp[ActiveLayer].pFont->Width);
-      break;
-    }    
-  default:
-    {
-      ref_column = Xpos;
-      break;
-    }
-  }
-  
-  /* Check that the Start column is located in the screen */
-  if ((ref_column < 1) || (ref_column >= 0x8000))
-  {
-    ref_column = 1;
-  }
-
-  /* Send the string character by character on LCD */
-  while ((*Text != 0) & (((BSP_LCD_GetXSize() - (i*DrawProp[ActiveLayer].pFont->Width)) & 0xFFFF) >= DrawProp[ActiveLayer].pFont->Width))
-  {
-    /* Display one character on LCD */
-    BSP_LCD_DisplayChar(ref_column, Ypos, *Text);
-    /* Decrement the column position by 16 */
-    ref_column += DrawProp[ActiveLayer].pFont->Width;
-    /* Point on the next character */
-    Text++;
-    i++;
-  }  
-}
-
-/**
-  * @brief  Displays a maximum of 60 characters on the LCD.
-  * @param  Line: Line where to display the character shape
-  * @param  ptr: Pointer to string to display on LCD
-  * @retval None
-  */
-void BSP_LCD_DisplayStringAtLine(uint16_t Line, uint8_t *ptr)
-{  
-  BSP_LCD_DisplayStringAt(0, LINE(Line), ptr, LEFT_MODE);
-}
-
-/**
-  * @brief  Draws an horizontal line.
-  * @param  Xpos: X position
-  * @param  Ypos: Y position
-  * @param  Length: Line length
-  * @retval None
-  */
-void BSP_LCD_DrawHLine(uint16_t Xpos, uint16_t Ypos, uint16_t Length)
-{
-  uint32_t  Xaddress = 0;
-  
-  /* Get the line address */
-  if(hLtdcHandler.LayerCfg[ActiveLayer].PixelFormat == LTDC_PIXEL_FORMAT_RGB565)
-  { /* RGB565 format */
-    Xaddress = (hLtdcHandler.LayerCfg[ActiveLayer].FBStartAdress) + 2*(BSP_LCD_GetXSize()*Ypos + Xpos);
-  }
-  else
-  { /* ARGB8888 format */
-    Xaddress = (hLtdcHandler.LayerCfg[ActiveLayer].FBStartAdress) + 4*(BSP_LCD_GetXSize()*Ypos + Xpos);
-  }
-  
-  /* Write line */
-  LL_FillBuffer(ActiveLayer, (uint32_t *)Xaddress, Length, 1, 0, DrawProp[ActiveLayer].TextColor);
-}
-
-/**
-  * @brief  Draws a vertical line.
-  * @param  Xpos: X position
-  * @param  Ypos: Y position
-  * @param  Length: Line length
-  * @retval None
-  */
-void BSP_LCD_DrawVLine(uint16_t Xpos, uint16_t Ypos, uint16_t Length)
-{
-  uint32_t  Xaddress = 0;
-  
-  /* Get the line address */
-  if(hLtdcHandler.LayerCfg[ActiveLayer].PixelFormat == LTDC_PIXEL_FORMAT_RGB565)
-  { /* RGB565 format */
-    Xaddress = (hLtdcHandler.LayerCfg[ActiveLayer].FBStartAdress) + 2*(BSP_LCD_GetXSize()*Ypos + Xpos);
-  }
-  else
-  { /* ARGB8888 format */
-    Xaddress = (hLtdcHandler.LayerCfg[ActiveLayer].FBStartAdress) + 4*(BSP_LCD_GetXSize()*Ypos + Xpos);
-  }
-  
-  /* Write line */
-  LL_FillBuffer(ActiveLayer, (uint32_t *)Xaddress, 1, Length, (BSP_LCD_GetXSize() - 1), DrawProp[ActiveLayer].TextColor);
-}
-
-/**
-  * @brief  Draws an uni-line (between two points).
-  * @param  x1: Point 1 X position
-  * @param  y1: Point 1 Y position
-  * @param  x2: Point 2 X position
-  * @param  y2: Point 2 Y position
-  * @retval None
-  */
-void BSP_LCD_DrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2)
-{
-  int16_t deltax = 0, deltay = 0, x = 0, y = 0, xinc1 = 0, xinc2 = 0, 
-  yinc1 = 0, yinc2 = 0, den = 0, num = 0, num_add = 0, num_pixels = 0, 
-  curpixel = 0;
-  
-  deltax = ABS(x2 - x1);        /* The difference between the x's */
-  deltay = ABS(y2 - y1);        /* The difference between the y's */
-  x = x1;                       /* Start x off at the first pixel */
-  y = y1;                       /* Start y off at the first pixel */
-  
-  if (x2 >= x1)                 /* The x-values are increasing */
-  {
-    xinc1 = 1;
-    xinc2 = 1;
-  }
-  else                          /* The x-values are decreasing */
-  {
-    xinc1 = -1;
-    xinc2 = -1;
-  }
-  
-  if (y2 >= y1)                 /* The y-values are increasing */
-  {
-    yinc1 = 1;
-    yinc2 = 1;
-  }
-  else                          /* The y-values are decreasing */
-  {
-    yinc1 = -1;
-    yinc2 = -1;
-  }
-  
-  if (deltax >= deltay)         /* There is at least one x-value for every y-value */
-  {
-    xinc1 = 0;                  /* Don't change the x when numerator >= denominator */
-    yinc2 = 0;                  /* Don't change the y for every iteration */
-    den = deltax;
-    num = deltax / 2;
-    num_add = deltay;
-    num_pixels = deltax;         /* There are more x-values than y-values */
-  }
-  else                          /* There is at least one y-value for every x-value */
-  {
-    xinc2 = 0;                  /* Don't change the x for every iteration */
-    yinc1 = 0;                  /* Don't change the y when numerator >= denominator */
-    den = deltay;
-    num = deltay / 2;
-    num_add = deltax;
-    num_pixels = deltay;         /* There are more y-values than x-values */
-  }
-  
-  for (curpixel = 0; curpixel <= num_pixels; curpixel++)
-  {
-    BSP_LCD_DrawPixel(x, y, DrawProp[ActiveLayer].TextColor);   /* Draw the current pixel */
-    num += num_add;                            /* Increase the numerator by the top of the fraction */
-    if (num >= den)                           /* Check if numerator >= denominator */
-    {
-      num -= den;                             /* Calculate the new numerator value */
-      x += xinc1;                             /* Change the x as appropriate */
-      y += yinc1;                             /* Change the y as appropriate */
-    }
-    x += xinc2;                               /* Change the x as appropriate */
-    y += yinc2;                               /* Change the y as appropriate */
-  }
-}
-
-/**
-  * @brief  Draws a rectangle.
-  * @param  Xpos: X position
-  * @param  Ypos: Y position
-  * @param  Width: Rectangle width  
-  * @param  Height: Rectangle height
-  * @retval None
-  */
-void BSP_LCD_DrawRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height)
-{
-  /* Draw horizontal lines */
-  BSP_LCD_DrawHLine(Xpos, Ypos, Width);
-  BSP_LCD_DrawHLine(Xpos, (Ypos+ Height), Width);
-  
-  /* Draw vertical lines */
-  BSP_LCD_DrawVLine(Xpos, Ypos, Height);
-  BSP_LCD_DrawVLine((Xpos + Width), Ypos, Height);
-}
-
-/**
-  * @brief  Draws a circle.
-  * @param  Xpos: X position
-  * @param  Ypos: Y position
-  * @param  Radius: Circle radius
-  * @retval None
-  */
-void BSP_LCD_DrawCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius)
-{
-  int32_t   decision;    /* Decision Variable */ 
-  uint32_t  current_x;   /* Current X Value */
-  uint32_t  current_y;   /* Current Y Value */
-  
-  decision = 3 - (Radius << 1);
-  current_x = 0;
-  current_y = Radius;
-  
-  while (current_x <= current_y)
-  {
-    BSP_LCD_DrawPixel((Xpos + current_x), (Ypos - current_y), DrawProp[ActiveLayer].TextColor);
-    
-    BSP_LCD_DrawPixel((Xpos - current_x), (Ypos - current_y), DrawProp[ActiveLayer].TextColor);
-    
-    BSP_LCD_DrawPixel((Xpos + current_y), (Ypos - current_x), DrawProp[ActiveLayer].TextColor);
-    
-    BSP_LCD_DrawPixel((Xpos - current_y), (Ypos - current_x), DrawProp[ActiveLayer].TextColor);
-    
-    BSP_LCD_DrawPixel((Xpos + current_x), (Ypos + current_y), DrawProp[ActiveLayer].TextColor);
-    
-    BSP_LCD_DrawPixel((Xpos - current_x), (Ypos + current_y), DrawProp[ActiveLayer].TextColor);
-    
-    BSP_LCD_DrawPixel((Xpos + current_y), (Ypos + current_x), DrawProp[ActiveLayer].TextColor);
-    
-    BSP_LCD_DrawPixel((Xpos - current_y), (Ypos + current_x), DrawProp[ActiveLayer].TextColor);
-    
-    if (decision < 0)
-    { 
-      decision += (current_x << 2) + 6;
-    }
-    else
-    {
-      decision += ((current_x - current_y) << 2) + 10;
-      current_y--;
-    }
-    current_x++;
-  } 
-}
-
-/**
-  * @brief  Draws an poly-line (between many points).
-  * @param  Points: Pointer to the points array
-  * @param  PointCount: Number of points
-  * @retval None
-  */
-void BSP_LCD_DrawPolygon(pPoint Points, uint16_t PointCount)
-{
-  int16_t x = 0, y = 0;
-  
-  if(PointCount < 2)
-  {
-    return;
-  }
-  
-  BSP_LCD_DrawLine(Points->X, Points->Y, (Points+PointCount-1)->X, (Points+PointCount-1)->Y);
-  
-  while(--PointCount)
-  {
-    x = Points->X;
-    y = Points->Y;
-    Points++;
-    BSP_LCD_DrawLine(x, y, Points->X, Points->Y);
-  }
-}
-
-/**
-  * @brief  Draws an ellipse on LCD.
-  * @param  Xpos: X position
-  * @param  Ypos: Y position
-  * @param  XRadius: Ellipse X radius
-  * @param  YRadius: Ellipse Y radius
-  * @retval None
-  */
-void BSP_LCD_DrawEllipse(int Xpos, int Ypos, int XRadius, int YRadius)
-{
-  int x = 0, y = -YRadius, err = 2-2*XRadius, e2;
-  float k = 0, rad1 = 0, rad2 = 0;
-  
-  rad1 = XRadius;
-  rad2 = YRadius;
-  
-  k = (float)(rad2/rad1);  
-  
-  do { 
-    BSP_LCD_DrawPixel((Xpos-(uint16_t)(x/k)), (Ypos+y), DrawProp[ActiveLayer].TextColor);
-    BSP_LCD_DrawPixel((Xpos+(uint16_t)(x/k)), (Ypos+y), DrawProp[ActiveLayer].TextColor);
-    BSP_LCD_DrawPixel((Xpos+(uint16_t)(x/k)), (Ypos-y), DrawProp[ActiveLayer].TextColor);
-    BSP_LCD_DrawPixel((Xpos-(uint16_t)(x/k)), (Ypos-y), DrawProp[ActiveLayer].TextColor);      
-    
-    e2 = err;
-    if (e2 <= x) {
-      err += ++x*2+1;
-      if (-y == x && e2 <= y) e2 = 0;
-    }
-    if (e2 > y) err += ++y*2+1;     
-  }
-  while (y <= 0);
-}
-
-/**
-  * @brief  Draws a pixel on LCD.
-  * @param  Xpos: X position
-  * @param  Ypos: Y position
-  * @param  RGB_Code: Pixel color in ARGB mode (8-8-8-8)
-  * @retval None
-  */
-void BSP_LCD_DrawPixel(uint16_t Xpos, uint16_t Ypos, uint32_t RGB_Code)
-{
-  /* Write data value to all SDRAM memory */
-  if(hLtdcHandler.LayerCfg[ActiveLayer].PixelFormat == LTDC_PIXEL_FORMAT_RGB565)
-  { /* RGB565 format */
-    *(__IO uint16_t*) (hLtdcHandler.LayerCfg[ActiveLayer].FBStartAdress + (2*(Ypos*BSP_LCD_GetXSize() + Xpos))) = (uint16_t)RGB_Code;
-  }
-  else
-  { /* ARGB8888 format */
-    *(__IO uint32_t*) (hLtdcHandler.LayerCfg[ActiveLayer].FBStartAdress + (4*(Ypos*BSP_LCD_GetXSize() + Xpos))) = RGB_Code;
-  }
-}
-
-/**
-  * @brief  Draws a bitmap picture loaded in the internal Flash in ARGB888 format (32 bits per pixel).
-  * @param  Xpos: Bmp X position in the LCD
-  * @param  Ypos: Bmp Y position in the LCD
-  * @param  pbmp: Pointer to Bmp picture address in the internal Flash
-  * @retval None
-  */
-void BSP_LCD_DrawBitmap(uint32_t Xpos, uint32_t Ypos, uint8_t *pbmp)
-{
-  uint32_t index = 0, width = 0, height = 0, bit_pixel = 0;
-  uint32_t address;
-  uint32_t input_color_mode = 0;
-  
-  /* Get bitmap data address offset */
-  index = pbmp[10] + (pbmp[11] << 8) + (pbmp[12] << 16)  + (pbmp[13] << 24);
-
-  /* Read bitmap width */
-  width = pbmp[18] + (pbmp[19] << 8) + (pbmp[20] << 16)  + (pbmp[21] << 24);
-
-  /* Read bitmap height */
-  height = pbmp[22] + (pbmp[23] << 8) + (pbmp[24] << 16)  + (pbmp[25] << 24);
-
-  /* Read bit/pixel */
-  bit_pixel = pbmp[28] + (pbmp[29] << 8);  
-  
-  /* Set the address */
-  address = hLtdcHandler.LayerCfg[ActiveLayer].FBStartAdress + (((BSP_LCD_GetXSize()*Ypos) + Xpos)*(4));
-  
-  /* Get the layer pixel format */    
-  if ((bit_pixel/8) == 4)
-  {
-    input_color_mode = CM_ARGB8888;
-  }
-  else if ((bit_pixel/8) == 2)
-  {
-    input_color_mode = CM_RGB565;   
-  }
-  else 
-  {
-    input_color_mode = CM_RGB888;
-  }
-  
-  /* Bypass the bitmap header */
-  pbmp += (index + (width * (height - 1) * (bit_pixel/8)));  
-  
-  /* Convert picture to ARGB8888 pixel format */
-  for(index=0; index < height; index++)
-  {
-    /* Pixel format conversion */
-    LL_ConvertLineToARGB8888((uint32_t *)pbmp, (uint32_t *)address, width, input_color_mode);
-    
-    /* Increment the source and destination buffers */
-    address+=  (BSP_LCD_GetXSize()*4);
-    pbmp -= width*(bit_pixel/8);
-  } 
-}
-
-/**
-  * @brief  Draws a full rectangle.
-  * @param  Xpos: X position
-  * @param  Ypos: Y position
-  * @param  Width: Rectangle width  
-  * @param  Height: Rectangle height
-  * @retval None
-  */
-void BSP_LCD_FillRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height)
-{
-  uint32_t  x_address = 0;
-  
-  /* Set the text color */
-  BSP_LCD_SetTextColor(DrawProp[ActiveLayer].TextColor);
-  
-  /* Get the rectangle start address */
-  if(hLtdcHandler.LayerCfg[ActiveLayer].PixelFormat == LTDC_PIXEL_FORMAT_RGB565)
-  { /* RGB565 format */
-    x_address = (hLtdcHandler.LayerCfg[ActiveLayer].FBStartAdress) + 2*(BSP_LCD_GetXSize()*Ypos + Xpos);
-  }
-  else
-  { /* ARGB8888 format */
-    x_address = (hLtdcHandler.LayerCfg[ActiveLayer].FBStartAdress) + 4*(BSP_LCD_GetXSize()*Ypos + Xpos);
-  }
-  /* Fill the rectangle */
-  LL_FillBuffer(ActiveLayer, (uint32_t *)x_address, Width, Height, (BSP_LCD_GetXSize() - Width), DrawProp[ActiveLayer].TextColor);
-}
-
-/**
-  * @brief  Draws a full circle.
-  * @param  Xpos: X position
-  * @param  Ypos: Y position
-  * @param  Radius: Circle radius
-  * @retval None
-  */
-void BSP_LCD_FillCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius)
-{
-  int32_t  decision;     /* Decision Variable */ 
-  uint32_t  current_x;   /* Current X Value */
-  uint32_t  current_y;   /* Current Y Value */
-  
-  decision = 3 - (Radius << 1);
-  
-  current_x = 0;
-  current_y = Radius;
-  
-  BSP_LCD_SetTextColor(DrawProp[ActiveLayer].TextColor);
-  
-  while (current_x <= current_y)
-  {
-    if(current_y > 0) 
-    {
-      BSP_LCD_DrawHLine(Xpos - current_y, Ypos + current_x, 2*current_y);
-      BSP_LCD_DrawHLine(Xpos - current_y, Ypos - current_x, 2*current_y);
-    }
-    
-    if(current_x > 0) 
-    {
-      BSP_LCD_DrawHLine(Xpos - current_x, Ypos - current_y, 2*current_x);
-      BSP_LCD_DrawHLine(Xpos - current_x, Ypos + current_y, 2*current_x);
-    }
-    if (decision < 0)
-    { 
-      decision += (current_x << 2) + 6;
-    }
-    else
-    {
-      decision += ((current_x - current_y) << 2) + 10;
-      current_y--;
-    }
-    current_x++;
-  }
-  
-  BSP_LCD_SetTextColor(DrawProp[ActiveLayer].TextColor);
-  BSP_LCD_DrawCircle(Xpos, Ypos, Radius);
-}
-
-/**
-  * @brief  Draws a full poly-line (between many points).
-  * @param  Points: Pointer to the points array
-  * @param  PointCount: Number of points
-  * @retval None
-  */
-void BSP_LCD_FillPolygon(pPoint Points, uint16_t PointCount)
-{
-  int16_t X = 0, Y = 0, X2 = 0, Y2 = 0, X_center = 0, Y_center = 0, X_first = 0, Y_first = 0, pixelX = 0, pixelY = 0, counter = 0;
-  uint16_t  image_left = 0, image_right = 0, image_top = 0, image_bottom = 0;
-  
-  image_left = image_right = Points->X;
-  image_top= image_bottom = Points->Y;
-  
-  for(counter = 1; counter < PointCount; counter++)
-  {
-    pixelX = POLY_X(counter);
-    if(pixelX < image_left)
-    {
-      image_left = pixelX;
-    }
-    if(pixelX > image_right)
-    {
-      image_right = pixelX;
-    }
-    
-    pixelY = POLY_Y(counter);
-    if(pixelY < image_top)
-    { 
-      image_top = pixelY;
-    }
-    if(pixelY > image_bottom)
-    {
-      image_bottom = pixelY;
-    }
-  }  
-  
-  if(PointCount < 2)
-  {
-    return;
-  }
-  
-  X_center = (image_left + image_right)/2;
-  Y_center = (image_bottom + image_top)/2;
-  
-  X_first = Points->X;
-  Y_first = Points->Y;
-  
-  while(--PointCount)
-  {
-    X = Points->X;
-    Y = Points->Y;
-    Points++;
-    X2 = Points->X;
-    Y2 = Points->Y;    
-    
-    FillTriangle(X, X2, X_center, Y, Y2, Y_center);
-    FillTriangle(X, X_center, X2, Y, Y_center, Y2);
-    FillTriangle(X_center, X2, X, Y_center, Y2, Y);   
-  }
-  
-  FillTriangle(X_first, X2, X_center, Y_first, Y2, Y_center);
-  FillTriangle(X_first, X_center, X2, Y_first, Y_center, Y2);
-  FillTriangle(X_center, X2, X_first, Y_center, Y2, Y_first);   
-}
-
-/**
-  * @brief  Draws a full ellipse.
-  * @param  Xpos: X position
-  * @param  Ypos: Y position
-  * @param  XRadius: Ellipse X radius
-  * @param  YRadius: Ellipse Y radius  
-  * @retval None
-  */
-void BSP_LCD_FillEllipse(int Xpos, int Ypos, int XRadius, int YRadius)
-{
-  int x = 0, y = -YRadius, err = 2-2*XRadius, e2;
-  float k = 0, rad1 = 0, rad2 = 0;
-  
-  rad1 = XRadius;
-  rad2 = YRadius;
-  
-  k = (float)(rad2/rad1);
-  
-  do 
-  {       
-    BSP_LCD_DrawHLine((Xpos-(uint16_t)(x/k)), (Ypos+y), (2*(uint16_t)(x/k) + 1));
-    BSP_LCD_DrawHLine((Xpos-(uint16_t)(x/k)), (Ypos-y), (2*(uint16_t)(x/k) + 1));
-    
-    e2 = err;
-    if (e2 <= x) 
-    {
-      err += ++x*2+1;
-      if (-y == x && e2 <= y) e2 = 0;
-    }
-    if (e2 > y) err += ++y*2+1;
-  }
-  while (y <= 0);
-}
-
-/**
-  * @brief  Enables the display.
-  * @retval None
-  */
-void BSP_LCD_DisplayOn(void)
-{
-  /* Display On */
-  __HAL_LTDC_ENABLE(&hLtdcHandler);
-  HAL_GPIO_WritePin(LCD_DISP_GPIO_PORT, LCD_DISP_PIN, GPIO_PIN_SET);        /* Assert LCD_DISP pin */
-  HAL_GPIO_WritePin(LCD_BL_CTRL_GPIO_PORT, LCD_BL_CTRL_PIN, GPIO_PIN_SET);  /* Assert LCD_BL_CTRL pin */
-}
-
-/**
-  * @brief  Disables the display.
-  * @retval None
-  */
-void BSP_LCD_DisplayOff(void)
-{
-  /* Display Off */
-  __HAL_LTDC_DISABLE(&hLtdcHandler);
-  HAL_GPIO_WritePin(LCD_DISP_GPIO_PORT, LCD_DISP_PIN, GPIO_PIN_RESET);      /* De-assert LCD_DISP pin */
-  HAL_GPIO_WritePin(LCD_BL_CTRL_GPIO_PORT, LCD_BL_CTRL_PIN, GPIO_PIN_RESET);/* De-assert LCD_BL_CTRL pin */
-}
-
-/**
-  * @brief  Initializes the LTDC MSP.
-  * @param  hltdc: LTDC handle
-  * @param  Params
-  * @retval None
-  */
-__weak void BSP_LCD_MspInit(LTDC_HandleTypeDef *hltdc, void *Params)
-{
-  GPIO_InitTypeDef gpio_init_structure;
-  
-  /* Enable the LTDC and DMA2D clocks */
-  __HAL_RCC_LTDC_CLK_ENABLE();
-  __HAL_RCC_DMA2D_CLK_ENABLE();
-  
-  /* Enable GPIOs clock */
-  __HAL_RCC_GPIOE_CLK_ENABLE();
-  __HAL_RCC_GPIOG_CLK_ENABLE();
-  __HAL_RCC_GPIOI_CLK_ENABLE();
-  __HAL_RCC_GPIOJ_CLK_ENABLE();
-  __HAL_RCC_GPIOK_CLK_ENABLE();
-  LCD_DISP_GPIO_CLK_ENABLE();
-  LCD_BL_CTRL_GPIO_CLK_ENABLE();
-
-  /*** LTDC Pins configuration ***/
-  /* GPIOE configuration */
-  gpio_init_structure.Pin       = GPIO_PIN_4;
-  gpio_init_structure.Mode      = GPIO_MODE_AF_PP;
-  gpio_init_structure.Pull      = GPIO_NOPULL;
-  gpio_init_structure.Speed     = GPIO_SPEED_FAST;
-  gpio_init_structure.Alternate = GPIO_AF14_LTDC;  
-  HAL_GPIO_Init(GPIOE, &gpio_init_structure);
-
-  /* GPIOG configuration */
-  gpio_init_structure.Pin       = GPIO_PIN_12;
-  gpio_init_structure.Mode      = GPIO_MODE_AF_PP;
-  gpio_init_structure.Alternate = GPIO_AF9_LTDC;
-  HAL_GPIO_Init(GPIOG, &gpio_init_structure);
-
-  /* GPIOI LTDC alternate configuration */
-  gpio_init_structure.Pin       = GPIO_PIN_9 | GPIO_PIN_10 | \
-                                  GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15;
-  gpio_init_structure.Mode      = GPIO_MODE_AF_PP;
-  gpio_init_structure.Alternate = GPIO_AF14_LTDC;
-  HAL_GPIO_Init(GPIOI, &gpio_init_structure);
-
-  /* GPIOJ configuration */  
-  gpio_init_structure.Pin       = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | \
-                                  GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7 | \
-                                  GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 | \
-                                  GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15;
-  gpio_init_structure.Mode      = GPIO_MODE_AF_PP;
-  gpio_init_structure.Alternate = GPIO_AF14_LTDC;
-  HAL_GPIO_Init(GPIOJ, &gpio_init_structure);  
-
-  /* GPIOK configuration */  
-  gpio_init_structure.Pin       = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_4 | \
-                                  GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7;
-  gpio_init_structure.Mode      = GPIO_MODE_AF_PP;
-  gpio_init_structure.Alternate = GPIO_AF14_LTDC;
-  HAL_GPIO_Init(GPIOK, &gpio_init_structure);
-
-  /* LCD_DISP GPIO configuration */
-  gpio_init_structure.Pin       = LCD_DISP_PIN;     /* LCD_DISP pin has to be manually controlled */
-  gpio_init_structure.Mode      = GPIO_MODE_OUTPUT_PP;
-  HAL_GPIO_Init(LCD_DISP_GPIO_PORT, &gpio_init_structure);
-
-  /* LCD_BL_CTRL GPIO configuration */
-  gpio_init_structure.Pin       = LCD_BL_CTRL_PIN;  /* LCD_BL_CTRL pin has to be manually controlled */
-  gpio_init_structure.Mode      = GPIO_MODE_OUTPUT_PP;
-  HAL_GPIO_Init(LCD_BL_CTRL_GPIO_PORT, &gpio_init_structure);
-}
-
-/**
-  * @brief  DeInitializes BSP_LCD MSP.
-  * @param  hltdc: LTDC handle
-  * @param  Params
-  * @retval None
-  */
-__weak void BSP_LCD_MspDeInit(LTDC_HandleTypeDef *hltdc, void *Params)
-{
-  GPIO_InitTypeDef  gpio_init_structure;
-
-  /* Disable LTDC block */
-  __HAL_LTDC_DISABLE(hltdc);
-
-  /* LTDC Pins deactivation */
-
-  /* GPIOE deactivation */
-  gpio_init_structure.Pin       = GPIO_PIN_4;
-  HAL_GPIO_DeInit(GPIOE, gpio_init_structure.Pin);
-
-  /* GPIOG deactivation */
-  gpio_init_structure.Pin       = GPIO_PIN_12;
-  HAL_GPIO_DeInit(GPIOG, gpio_init_structure.Pin);
-
-  /* GPIOI deactivation */
-  gpio_init_structure.Pin       = GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_12 | \
-                                  GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15;
-  HAL_GPIO_DeInit(GPIOI, gpio_init_structure.Pin);
-
-  /* GPIOJ deactivation */
-  gpio_init_structure.Pin       = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | \
-                                  GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7 | \
-                                  GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 | \
-                                  GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15;
-  HAL_GPIO_DeInit(GPIOJ, gpio_init_structure.Pin);
-
-  /* GPIOK deactivation */
-  gpio_init_structure.Pin       = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_4 | \
-                                  GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7;
-  HAL_GPIO_DeInit(GPIOK, gpio_init_structure.Pin);
-
-  /* Disable LTDC clock */
-  __HAL_RCC_LTDC_CLK_DISABLE();
-
-  /* GPIO pins clock can be shut down in the application
-     by surcharging this __weak function */
-}
-
-/**
-  * @brief  Clock Config.
-  * @param  hltdc: LTDC handle
-  * @param  Params
-  * @note   This API is called by BSP_LCD_Init()
-  *         Being __weak it can be overwritten by the application
-  * @retval None
-  */
-__weak void BSP_LCD_ClockConfig(LTDC_HandleTypeDef *hltdc, void *Params)
-{
-  static RCC_PeriphCLKInitTypeDef  periph_clk_init_struct;
-
-  /* RK043FN48H LCD clock configuration */
-  /* PLLSAI_VCO Input = HSE_VALUE/PLL_M = 1 Mhz */
-  /* PLLSAI_VCO Output = PLLSAI_VCO Input * PLLSAIN = 192 Mhz */
-  /* PLLLCDCLK = PLLSAI_VCO Output/PLLSAIR = 192/5 = 38.4 Mhz */
-  /* LTDC clock frequency = PLLLCDCLK / LTDC_PLLSAI_DIVR_4 = 38.4/4 = 9.6Mhz */
-  periph_clk_init_struct.PeriphClockSelection = RCC_PERIPHCLK_LTDC;
-  periph_clk_init_struct.PLLSAI.PLLSAIN = 192;
-  periph_clk_init_struct.PLLSAI.PLLSAIR = RK043FN48H_FREQUENCY_DIVIDER;
-  periph_clk_init_struct.PLLSAIDivR = RCC_PLLSAIDIVR_4;
-  HAL_RCCEx_PeriphCLKConfig(&periph_clk_init_struct);
-}
-
-
-/*******************************************************************************
-                            Static Functions
-*******************************************************************************/
-
-/**
-  * @brief  Draws a character on LCD.
-  * @param  Xpos: Line where to display the character shape
-  * @param  Ypos: Start column address
-  * @param  c: Pointer to the character data
-  * @retval None
-  */
-static void DrawChar(uint16_t Xpos, uint16_t Ypos, const uint8_t *c)
-{
-  uint32_t i = 0, j = 0;
-  uint16_t height, width;
-  uint8_t  offset;
-  uint8_t  *pchar;
-  uint32_t line;
-  
-  height = DrawProp[ActiveLayer].pFont->Height;
-  width  = DrawProp[ActiveLayer].pFont->Width;
-  
-  offset =  8 *((width + 7)/8) -  width ;
-  
-  for(i = 0; i < height; i++)
-  {
-    pchar = ((uint8_t *)c + (width + 7)/8 * i);
-    
-    switch(((width + 7)/8))
-    {
-      
-    case 1:
-      line =  pchar[0];      
-      break;
-      
-    case 2:
-      line =  (pchar[0]<< 8) | pchar[1];      
-      break;
-      
-    case 3:
-    default:
-      line =  (pchar[0]<< 16) | (pchar[1]<< 8) | pchar[2];      
-      break;
-    } 
-    
-    for (j = 0; j < width; j++)
-    {
-      if(line & (1 << (width- j + offset- 1))) 
-      {
-        BSP_LCD_DrawPixel((Xpos + j), Ypos, DrawProp[ActiveLayer].TextColor);
-      }
-      else
-      {
-        BSP_LCD_DrawPixel((Xpos + j), Ypos, DrawProp[ActiveLayer].BackColor);
-      } 
-    }
-    Ypos++;
-  }
-}
-
-/**
-  * @brief  Fills a triangle (between 3 points).
-  * @param  x1: Point 1 X position
-  * @param  y1: Point 1 Y position
-  * @param  x2: Point 2 X position
-  * @param  y2: Point 2 Y position
-  * @param  x3: Point 3 X position
-  * @param  y3: Point 3 Y position
-  * @retval None
-  */
-static void FillTriangle(uint16_t x1, uint16_t x2, uint16_t x3, uint16_t y1, uint16_t y2, uint16_t y3)
-{ 
-  int16_t deltax = 0, deltay = 0, x = 0, y = 0, xinc1 = 0, xinc2 = 0, 
-  yinc1 = 0, yinc2 = 0, den = 0, num = 0, num_add = 0, num_pixels = 0,
-  curpixel = 0;
-  
-  deltax = ABS(x2 - x1);        /* The difference between the x's */
-  deltay = ABS(y2 - y1);        /* The difference between the y's */
-  x = x1;                       /* Start x off at the first pixel */
-  y = y1;                       /* Start y off at the first pixel */
-  
-  if (x2 >= x1)                 /* The x-values are increasing */
-  {
-    xinc1 = 1;
-    xinc2 = 1;
-  }
-  else                          /* The x-values are decreasing */
-  {
-    xinc1 = -1;
-    xinc2 = -1;
-  }
-  
-  if (y2 >= y1)                 /* The y-values are increasing */
-  {
-    yinc1 = 1;
-    yinc2 = 1;
-  }
-  else                          /* The y-values are decreasing */
-  {
-    yinc1 = -1;
-    yinc2 = -1;
-  }
-  
-  if (deltax >= deltay)         /* There is at least one x-value for every y-value */
-  {
-    xinc1 = 0;                  /* Don't change the x when numerator >= denominator */
-    yinc2 = 0;                  /* Don't change the y for every iteration */
-    den = deltax;
-    num = deltax / 2;
-    num_add = deltay;
-    num_pixels = deltax;         /* There are more x-values than y-values */
-  }
-  else                          /* There is at least one y-value for every x-value */
-  {
-    xinc2 = 0;                  /* Don't change the x for every iteration */
-    yinc1 = 0;                  /* Don't change the y when numerator >= denominator */
-    den = deltay;
-    num = deltay / 2;
-    num_add = deltax;
-    num_pixels = deltay;         /* There are more y-values than x-values */
-  }
-  
-  for (curpixel = 0; curpixel <= num_pixels; curpixel++)
-  {
-    BSP_LCD_DrawLine(x, y, x3, y3);
-    
-    num += num_add;              /* Increase the numerator by the top of the fraction */
-    if (num >= den)             /* Check if numerator >= denominator */
-    {
-      num -= den;               /* Calculate the new numerator value */
-      x += xinc1;               /* Change the x as appropriate */
-      y += yinc1;               /* Change the y as appropriate */
-    }
-    x += xinc2;                 /* Change the x as appropriate */
-    y += yinc2;                 /* Change the y as appropriate */
-  } 
-}
-
-/**
-  * @brief  Fills a buffer.
-  * @param  LayerIndex: Layer index
-  * @param  pDst: Pointer to destination buffer
-  * @param  xSize: Buffer width
-  * @param  ySize: Buffer height
-  * @param  OffLine: Offset
-  * @param  ColorIndex: Color index
-  * @retval None
-  */
-static void LL_FillBuffer(uint32_t LayerIndex, void *pDst, uint32_t xSize, uint32_t ySize, uint32_t OffLine, uint32_t ColorIndex) 
-{
-  /* Register to memory mode with ARGB8888 as color Mode */ 
-  hDma2dHandler.Init.Mode         = DMA2D_R2M;
-  if(hLtdcHandler.LayerCfg[ActiveLayer].PixelFormat == LTDC_PIXEL_FORMAT_RGB565)
-  { /* RGB565 format */ 
-    hDma2dHandler.Init.ColorMode    = DMA2D_RGB565;
-  }
-  else
-  { /* ARGB8888 format */
-    hDma2dHandler.Init.ColorMode    = DMA2D_ARGB8888;
-  }
-  hDma2dHandler.Init.OutputOffset = OffLine;      
-  
-  hDma2dHandler.Instance = DMA2D;
-  
-  /* DMA2D Initialization */
-  if(HAL_DMA2D_Init(&hDma2dHandler) == HAL_OK) 
-  {
-    if(HAL_DMA2D_ConfigLayer(&hDma2dHandler, LayerIndex) == HAL_OK) 
-    {
-      if (HAL_DMA2D_Start(&hDma2dHandler, ColorIndex, (uint32_t)pDst, xSize, ySize) == HAL_OK)
-      {
-        /* Polling For DMA transfer */  
-        HAL_DMA2D_PollForTransfer(&hDma2dHandler, 10);
-      }
-    }
-  } 
-}
-
-/**
-  * @brief  Converts a line to an ARGB8888 pixel format.
-  * @param  pSrc: Pointer to source buffer
-  * @param  pDst: Output color
-  * @param  xSize: Buffer width
-  * @param  ColorMode: Input color mode   
-  * @retval None
-  */
-static void LL_ConvertLineToARGB8888(void *pSrc, void *pDst, uint32_t xSize, uint32_t ColorMode)
-{    
-  /* Configure the DMA2D Mode, Color Mode and output offset */
-  hDma2dHandler.Init.Mode         = DMA2D_M2M_PFC;
-  hDma2dHandler.Init.ColorMode    = DMA2D_ARGB8888;
-  hDma2dHandler.Init.OutputOffset = 0;     
-  
-  /* Foreground Configuration */
-  hDma2dHandler.LayerCfg[1].AlphaMode = DMA2D_NO_MODIF_ALPHA;
-  hDma2dHandler.LayerCfg[1].InputAlpha = 0xFF;
-  hDma2dHandler.LayerCfg[1].InputColorMode = ColorMode;
-  hDma2dHandler.LayerCfg[1].InputOffset = 0;
-  
-  hDma2dHandler.Instance = DMA2D; 
-  
-  /* DMA2D Initialization */
-  if(HAL_DMA2D_Init(&hDma2dHandler) == HAL_OK) 
-  {
-    if(HAL_DMA2D_ConfigLayer(&hDma2dHandler, 1) == HAL_OK) 
-    {
-      if (HAL_DMA2D_Start(&hDma2dHandler, (uint32_t)pSrc, (uint32_t)pDst, xSize, 1) == HAL_OK)
-      {
-        /* Polling For DMA transfer */  
-        HAL_DMA2D_PollForTransfer(&hDma2dHandler, 10);
-      }
-    }
-  } 
-}
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */
-  
-/**
-  * @}
-  */
-  
-/**
-  * @}
-  */        
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r 85dbcff443aa -r 1a18e061d0ec Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_lcd.h
--- a/Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_lcd.h	Wed Nov 27 08:29:42 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,267 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    stm32746g_discovery_lcd.h
-  * @author  MCD Application Team
-  * @brief   This file contains the common defines and functions prototypes for
-  *          the stm32746g_discovery_lcd.c driver.
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT(c) 2016 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.
-  *
-  ******************************************************************************
-  */  
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __STM32746G_DISCOVERY_LCD_H
-#define __STM32746G_DISCOVERY_LCD_H
-
-#ifdef __cplusplus
- extern "C" {
-#endif 
-
-/* Includes ------------------------------------------------------------------*/
-/* Include LCD component Driver */
-/* LCD RK043FN48H-CT672B 4,3" 480x272 pixels */
-#include "../Components/rk043fn48h/rk043fn48h.h"
-
-/* Include SDRAM Driver */
-#include "stm32746g_discovery_sdram.h"
- 
-#include "stm32746g_discovery.h"
-#include "../../../Utilities/Fonts/fonts.h"
-  
-/** @addtogroup BSP
-  * @{
-  */
-
-/** @addtogroup STM32746G_DISCOVERY
-  * @{
-  */
-    
-/** @addtogroup STM32746G_DISCOVERY_LCD
-  * @{
-  */ 
-
-/** @defgroup STM32746G_DISCOVERY_LCD_Exported_Types STM32746G_DISCOVERY_LCD Exported Types
-  * @{
-  */  
-typedef struct 
-{ 
-  uint32_t TextColor; 
-  uint32_t BackColor;  
-  sFONT    *pFont;
-}LCD_DrawPropTypeDef;   
-   
-typedef struct 
-{
-  int16_t X;
-  int16_t Y;
-}Point, * pPoint; 
-   
-/** 
-  * @brief  Line mode structures definition  
-  */ 
-typedef enum
-{
-  CENTER_MODE             = 0x01,    /* Center mode */
-  RIGHT_MODE              = 0x02,    /* Right mode  */
-  LEFT_MODE               = 0x03     /* Left mode   */
-}Text_AlignModeTypdef;
-
-/**
-  * @}
-  */ 
-
-/** @defgroup STM32746G_DISCOVERY_LCD_Exported_Constants STM32746G_DISCOVERY_LCD Exported Constants
-  * @{
-  */ 
-#define MAX_LAYER_NUMBER       ((uint32_t)2)
-
-#define LCD_LayerCfgTypeDef    LTDC_LayerCfgTypeDef
-
-#define LTDC_ACTIVE_LAYER	     ((uint32_t)1) /* Layer 1 */
-/** 
-  * @brief  LCD status structure definition  
-  */     
-#define LCD_OK                 ((uint8_t)0x00)
-#define LCD_ERROR              ((uint8_t)0x01)
-#define LCD_TIMEOUT            ((uint8_t)0x02)
-
-/** 
-  * @brief  LCD FB_StartAddress  
-  */
-#define LCD_FB_START_ADDRESS       ((uint32_t)0xC0000000)
-
-/** 
-  * @brief  LCD color  
-  */ 
-#define LCD_COLOR_BLUE          ((uint32_t)0xFF0000FF)
-#define LCD_COLOR_GREEN         ((uint32_t)0xFF00FF00)
-#define LCD_COLOR_RED           ((uint32_t)0xFFFF0000)
-#define LCD_COLOR_CYAN          ((uint32_t)0xFF00FFFF)
-#define LCD_COLOR_MAGENTA       ((uint32_t)0xFFFF00FF)
-#define LCD_COLOR_YELLOW        ((uint32_t)0xFFFFFF00)
-#define LCD_COLOR_LIGHTBLUE     ((uint32_t)0xFF8080FF)
-#define LCD_COLOR_LIGHTGREEN    ((uint32_t)0xFF80FF80)
-#define LCD_COLOR_LIGHTRED      ((uint32_t)0xFFFF8080)
-#define LCD_COLOR_LIGHTCYAN     ((uint32_t)0xFF80FFFF)
-#define LCD_COLOR_LIGHTMAGENTA  ((uint32_t)0xFFFF80FF)
-#define LCD_COLOR_LIGHTYELLOW   ((uint32_t)0xFFFFFF80)
-#define LCD_COLOR_DARKBLUE      ((uint32_t)0xFF000080)
-#define LCD_COLOR_DARKGREEN     ((uint32_t)0xFF008000)
-#define LCD_COLOR_DARKRED       ((uint32_t)0xFF800000)
-#define LCD_COLOR_DARKCYAN      ((uint32_t)0xFF008080)
-#define LCD_COLOR_DARKMAGENTA   ((uint32_t)0xFF800080)
-#define LCD_COLOR_DARKYELLOW    ((uint32_t)0xFF808000)
-#define LCD_COLOR_WHITE         ((uint32_t)0xFFFFFFFF)
-#define LCD_COLOR_LIGHTGRAY     ((uint32_t)0xFFD3D3D3)
-#define LCD_COLOR_GRAY          ((uint32_t)0xFF808080)
-#define LCD_COLOR_DARKGRAY      ((uint32_t)0xFF404040)
-#define LCD_COLOR_BLACK         ((uint32_t)0xFF000000)
-#define LCD_COLOR_BROWN         ((uint32_t)0xFFA52A2A)
-#define LCD_COLOR_ORANGE        ((uint32_t)0xFFFFA500)
-#define LCD_COLOR_TRANSPARENT   ((uint32_t)0xFF000000)
-
-/** 
-  * @brief LCD default font 
-  */ 
-#define LCD_DEFAULT_FONT        Font24     
-
-/** 
-  * @brief  LCD Reload Types  
-  */
-#define LCD_RELOAD_IMMEDIATE               ((uint32_t)LTDC_SRCR_IMR)
-#define LCD_RELOAD_VERTICAL_BLANKING       ((uint32_t)LTDC_SRCR_VBR) 
-
-
-/**
-  * @brief LCD special pins
-  */
-/* Display enable pin */
-#define LCD_DISP_PIN                    GPIO_PIN_12
-#define LCD_DISP_GPIO_PORT              GPIOI
-#define LCD_DISP_GPIO_CLK_ENABLE()      __HAL_RCC_GPIOI_CLK_ENABLE()
-#define LCD_DISP_GPIO_CLK_DISABLE()     __HAL_RCC_GPIOI_CLK_DISABLE()
-
-/* Backlight control pin */
-#define LCD_BL_CTRL_PIN                  GPIO_PIN_3
-#define LCD_BL_CTRL_GPIO_PORT            GPIOK
-#define LCD_BL_CTRL_GPIO_CLK_ENABLE()    __HAL_RCC_GPIOK_CLK_ENABLE()
-#define LCD_BL_CTRL_GPIO_CLK_DISABLE()   __HAL_RCC_GPIOK_CLK_DISABLE()
-
-/**
-  * @}
-  */ 
-
-/** @addtogroup STM32746G_DISCOVERY_LCD_Exported_Functions
-  * @{
-  */
-uint8_t  BSP_LCD_Init(void);
-uint8_t  BSP_LCD_DeInit(void);
-uint32_t BSP_LCD_GetXSize(void);
-uint32_t BSP_LCD_GetYSize(void);
-void     BSP_LCD_SetXSize(uint32_t imageWidthPixels);
-void     BSP_LCD_SetYSize(uint32_t imageHeightPixels);
-
-/* Functions using the LTDC controller */
-void     BSP_LCD_LayerDefaultInit(uint16_t LayerIndex, uint32_t FrameBuffer);
-void     BSP_LCD_LayerRgb565Init(uint16_t LayerIndex, uint32_t FB_Address);
-void     BSP_LCD_SetTransparency(uint32_t LayerIndex, uint8_t Transparency);
-void     BSP_LCD_SetTransparency_NoReload(uint32_t LayerIndex, uint8_t Transparency);
-void     BSP_LCD_SetLayerAddress(uint32_t LayerIndex, uint32_t Address);
-void     BSP_LCD_SetLayerAddress_NoReload(uint32_t LayerIndex, uint32_t Address);
-void     BSP_LCD_SetColorKeying(uint32_t LayerIndex, uint32_t RGBValue);
-void     BSP_LCD_SetColorKeying_NoReload(uint32_t LayerIndex, uint32_t RGBValue);
-void     BSP_LCD_ResetColorKeying(uint32_t LayerIndex);
-void     BSP_LCD_ResetColorKeying_NoReload(uint32_t LayerIndex);
-void     BSP_LCD_SetLayerWindow(uint16_t LayerIndex, uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height);
-void     BSP_LCD_SetLayerWindow_NoReload(uint16_t LayerIndex, uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height);
-void     BSP_LCD_SelectLayer(uint32_t LayerIndex);
-void     BSP_LCD_SetLayerVisible(uint32_t LayerIndex, FunctionalState State);
-void     BSP_LCD_SetLayerVisible_NoReload(uint32_t LayerIndex, FunctionalState State);
-void     BSP_LCD_Reload(uint32_t ReloadType);
-
-void     BSP_LCD_SetTextColor(uint32_t Color);
-uint32_t BSP_LCD_GetTextColor(void);
-void     BSP_LCD_SetBackColor(uint32_t Color);
-uint32_t BSP_LCD_GetBackColor(void);
-void     BSP_LCD_SetFont(sFONT *fonts);
-sFONT    *BSP_LCD_GetFont(void);
-
-uint32_t BSP_LCD_ReadPixel(uint16_t Xpos, uint16_t Ypos);
-void     BSP_LCD_DrawPixel(uint16_t Xpos, uint16_t Ypos, uint32_t pixel);
-void     BSP_LCD_Clear(uint32_t Color);
-void     BSP_LCD_ClearStringLine(uint32_t Line);
-void     BSP_LCD_DisplayStringAtLine(uint16_t Line, uint8_t *ptr);
-void     BSP_LCD_DisplayStringAt(uint16_t Xpos, uint16_t Ypos, uint8_t *Text, Text_AlignModeTypdef Mode);
-void     BSP_LCD_DisplayChar(uint16_t Xpos, uint16_t Ypos, uint8_t Ascii);
-
-void     BSP_LCD_DrawHLine(uint16_t Xpos, uint16_t Ypos, uint16_t Length);
-void     BSP_LCD_DrawVLine(uint16_t Xpos, uint16_t Ypos, uint16_t Length);
-void     BSP_LCD_DrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2);
-void     BSP_LCD_DrawRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height);
-void     BSP_LCD_DrawCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius);
-void     BSP_LCD_DrawPolygon(pPoint Points, uint16_t PointCount);
-void     BSP_LCD_DrawEllipse(int Xpos, int Ypos, int XRadius, int YRadius);
-void     BSP_LCD_DrawBitmap(uint32_t Xpos, uint32_t Ypos, uint8_t *pbmp);
-
-void     BSP_LCD_FillRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height);
-void     BSP_LCD_FillCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius);
-void     BSP_LCD_FillPolygon(pPoint Points, uint16_t PointCount);
-void     BSP_LCD_FillEllipse(int Xpos, int Ypos, int XRadius, int YRadius);
-
-void     BSP_LCD_DisplayOff(void);
-void     BSP_LCD_DisplayOn(void);
-
-/* These functions can be modified in case the current settings
-   need to be changed for specific application needs */
-void     BSP_LCD_MspInit(LTDC_HandleTypeDef *hltdc, void *Params);
-void     BSP_LCD_MspDeInit(LTDC_HandleTypeDef *hltdc, void *Params);
-void     BSP_LCD_ClockConfig(LTDC_HandleTypeDef *hltdc, void *Params);
-
-/**
-  * @}
-  */ 
-
-/**
-  * @}
-  */ 
-  
-/**
-  * @}
-  */
- 
-/**
-  * @}
-  */ 
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __STM32746G_DISCOVERY_LCD_H */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r 85dbcff443aa -r 1a18e061d0ec Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_qspi.c
--- a/Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_qspi.c	Wed Nov 27 08:29:42 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,798 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    stm32746g_discovery_qspi.c
-  * @author  MCD Application Team
-  * @brief   This file includes a standard driver for the N25Q128A QSPI
-  *          memory mounted on STM32746G-Discovery board.
-  @verbatim
-  ==============================================================================
-                     ##### How to use this driver #####
-  ==============================================================================  
-  [..] 
-   (#) This driver is used to drive the N25Q128A QSPI external
-       memory mounted on STM32746G-Discovery board.
-       
-   (#) This driver need a specific component driver (N25Q128A) to be included with.
-
-   (#) Initialization steps:
-       (++) Initialize the QPSI external memory using the BSP_QSPI_Init() function. This 
-            function includes the MSP layer hardware resources initialization and the
-            QSPI interface with the external memory.
-  
-   (#) QSPI memory operations
-       (++) QSPI memory can be accessed with read/write operations once it is
-            initialized.
-            Read/write operation can be performed with AHB access using the functions
-            BSP_QSPI_Read()/BSP_QSPI_Write(). 
-       (++) The function BSP_QSPI_GetInfo() returns the configuration of the QSPI memory. 
-            (see the QSPI memory data sheet)
-       (++) Perform erase block operation using the function BSP_QSPI_Erase_Block() and by
-            specifying the block address. You can perform an erase operation of the whole 
-            chip by calling the function BSP_QSPI_Erase_Chip(). 
-       (++) The function BSP_QSPI_GetStatus() returns the current status of the QSPI memory. 
-            (see the QSPI memory data sheet)
-  @endverbatim
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT(c) 2016 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.
-  *
-  ******************************************************************************
-  */ 
-
-/* Dependencies
-- stm32f7xx_hal_qspi.c
-- stm32f7xx_hal_gpio.c
-- stm32f7xx_hal_cortex.c
-- stm32f7xx_hal_rcc_ex.h
-- n25q128a.h
-EndDependencies */
-
-/* Includes ------------------------------------------------------------------*/
-#include "stm32746g_discovery_qspi.h"
-
-/** @addtogroup BSP
-  * @{
-  */
-
-/** @addtogroup STM32746G_DISCOVERY
-  * @{
-  */ 
-  
-/** @defgroup STM32746G_DISCOVERY_QSPI STM32746G-Discovery QSPI
-  * @{
-  */ 
-
-
-/* Private variables ---------------------------------------------------------*/
-
-/** @defgroup STM32746G_DISCOVERY_QSPI_Private_Variables STM32746G_DISCOVERY QSPI Private Variables
-  * @{
-  */       
-QSPI_HandleTypeDef QSPIHandle;
-
-/**
-  * @}
-  */ 
-
-
-
-/* Private functions ---------------------------------------------------------*/
-    
-/** @defgroup STM32746G_DISCOVERY_QSPI_Private_Functions STM32746G_DISCOVERY QSPI Private Functions
-  * @{
-  */ 
-static uint8_t QSPI_ResetMemory          (QSPI_HandleTypeDef *hqspi);
-static uint8_t QSPI_DummyCyclesCfg       (QSPI_HandleTypeDef *hqspi);
-static uint8_t QSPI_WriteEnable          (QSPI_HandleTypeDef *hqspi);
-static uint8_t QSPI_AutoPollingMemReady  (QSPI_HandleTypeDef *hqspi, uint32_t Timeout);
-
-/**
-  * @}
-  */
-    
-/** @defgroup STM32746G_DISCOVERY_QSPI_Exported_Functions STM32746G_DISCOVERY QSPI Exported Functions
-  * @{
-  */ 
-
-/**
-  * @brief  Initializes the QSPI interface.
-  * @retval QSPI memory status
-  */
-uint8_t BSP_QSPI_Init(void)
-{ 
-  QSPIHandle.Instance = QUADSPI;
-
-  /* Call the DeInit function to reset the driver */
-  if (HAL_QSPI_DeInit(&QSPIHandle) != HAL_OK)
-  {
-    return QSPI_ERROR;
-  }
-        
-  /* System level initialization */
-  BSP_QSPI_MspInit(&QSPIHandle, NULL);
-  
-  /* QSPI initialization */
-  QSPIHandle.Init.ClockPrescaler     = 1; /* QSPI freq = 216 MHz/(1+1) = 108 Mhz */
-  QSPIHandle.Init.FifoThreshold      = 4;
-  QSPIHandle.Init.SampleShifting     = QSPI_SAMPLE_SHIFTING_HALFCYCLE;
-  QSPIHandle.Init.FlashSize          = POSITION_VAL(N25Q128A_FLASH_SIZE) - 1;
-  QSPIHandle.Init.ChipSelectHighTime = QSPI_CS_HIGH_TIME_6_CYCLE; /* Min 50ns for nonRead */
-  QSPIHandle.Init.ClockMode          = QSPI_CLOCK_MODE_0;
-  QSPIHandle.Init.FlashID            = QSPI_FLASH_ID_1;
-  QSPIHandle.Init.DualFlash          = QSPI_DUALFLASH_DISABLE;
-
-  if (HAL_QSPI_Init(&QSPIHandle) != HAL_OK)
-  {
-    return QSPI_ERROR;
-  }
-
-  /* QSPI memory reset */
-  if (QSPI_ResetMemory(&QSPIHandle) != QSPI_OK)
-  {
-    return QSPI_NOT_SUPPORTED;
-  }
- 
-  /* Configuration of the dummy cycles on QSPI memory side */
-  if (QSPI_DummyCyclesCfg(&QSPIHandle) != QSPI_OK)
-  {
-    return QSPI_NOT_SUPPORTED;
-  }
-  
-  return QSPI_OK;
-}
-
-/**
-  * @brief  De-Initializes the QSPI interface.
-  * @retval QSPI memory status
-  */
-uint8_t BSP_QSPI_DeInit(void)
-{ 
-  QSPIHandle.Instance = QUADSPI;
-
-  /* Call the DeInit function to reset the driver */
-  if (HAL_QSPI_DeInit(&QSPIHandle) != HAL_OK)
-  {
-    return QSPI_ERROR;
-  }
-        
-  /* System level De-initialization */
-  BSP_QSPI_MspDeInit(&QSPIHandle, NULL);
-  
-  return QSPI_OK;
-}
-
-/**
-  * @brief  Reads an amount of data from the QSPI memory.
-  * @param  pData: Pointer to data to be read
-  * @param  ReadAddr: Read start address
-  * @param  Size: Size of data to read    
-  * @retval QSPI memory status
-  */
-uint8_t BSP_QSPI_Read(uint8_t* pData, uint32_t ReadAddr, uint32_t Size)
-{
-  QSPI_CommandTypeDef s_command;
-
-  /* Initialize the read command */
-  s_command.InstructionMode   = QSPI_INSTRUCTION_1_LINE;
-  s_command.Instruction       = QUAD_INOUT_FAST_READ_CMD;
-  s_command.AddressMode       = QSPI_ADDRESS_4_LINES;
-  s_command.AddressSize       = QSPI_ADDRESS_24_BITS;
-  s_command.Address           = ReadAddr;
-  s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE;
-  s_command.DataMode          = QSPI_DATA_4_LINES;
-  s_command.DummyCycles       = N25Q128A_DUMMY_CYCLES_READ_QUAD;
-  s_command.NbData            = Size;
-  s_command.DdrMode           = QSPI_DDR_MODE_DISABLE;
-  s_command.DdrHoldHalfCycle  = QSPI_DDR_HHC_ANALOG_DELAY;
-  s_command.SIOOMode          = QSPI_SIOO_INST_EVERY_CMD;
-  
-  /* Configure the command */
-  if (HAL_QSPI_Command(&QSPIHandle, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK)
-  {
-    return QSPI_ERROR;
-  }
-  
-  /* Set S# timing for Read command */
-  MODIFY_REG(QSPIHandle.Instance->DCR, QUADSPI_DCR_CSHT, QSPI_CS_HIGH_TIME_3_CYCLE);
-  
-  /* Reception of the data */
-  if (HAL_QSPI_Receive(&QSPIHandle, pData, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK)
-  {
-    return QSPI_ERROR;
-  }
-  
-  /* Restore S# timing for nonRead commands */
-  MODIFY_REG(QSPIHandle.Instance->DCR, QUADSPI_DCR_CSHT, QSPI_CS_HIGH_TIME_6_CYCLE);
-
-  return QSPI_OK;
-}
-
-/**
-  * @brief  Writes an amount of data to the QSPI memory.
-  * @param  pData: Pointer to data to be written
-  * @param  WriteAddr: Write start address
-  * @param  Size: Size of data to write    
-  * @retval QSPI memory status
-  */
-uint8_t BSP_QSPI_Write(uint8_t* pData, uint32_t WriteAddr, uint32_t Size)
-{
-  QSPI_CommandTypeDef s_command;
-  uint32_t end_addr, current_size, current_addr;
-
-  /* Calculation of the size between the write address and the end of the page */
-  current_size = N25Q128A_PAGE_SIZE - (WriteAddr % N25Q128A_PAGE_SIZE);
-
-  /* Check if the size of the data is less than the remaining place in the page */
-  if (current_size > Size)
-  {
-    current_size = Size;
-  }
-
-  /* Initialize the adress variables */
-  current_addr = WriteAddr;
-  end_addr = WriteAddr + Size;
-
-  /* Initialize the program command */
-  s_command.InstructionMode   = QSPI_INSTRUCTION_1_LINE;
-  s_command.Instruction       = EXT_QUAD_IN_FAST_PROG_CMD;
-  s_command.AddressMode       = QSPI_ADDRESS_4_LINES;
-  s_command.AddressSize       = QSPI_ADDRESS_24_BITS;
-  s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE;
-  s_command.DataMode          = QSPI_DATA_4_LINES;
-  s_command.DummyCycles       = 0;
-  s_command.DdrMode           = QSPI_DDR_MODE_DISABLE;
-  s_command.DdrHoldHalfCycle  = QSPI_DDR_HHC_ANALOG_DELAY;
-  s_command.SIOOMode          = QSPI_SIOO_INST_EVERY_CMD;
-  
-  /* Perform the write page by page */
-  do
-  {
-    s_command.Address = current_addr;
-    s_command.NbData  = current_size;
-
-    /* Enable write operations */
-    if (QSPI_WriteEnable(&QSPIHandle) != QSPI_OK)
-    {
-      return QSPI_ERROR;
-    }
-    
-    /* Configure the command */
-    if (HAL_QSPI_Command(&QSPIHandle, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK)
-    {
-      return QSPI_ERROR;
-    }
-    
-    /* Transmission of the data */
-    if (HAL_QSPI_Transmit(&QSPIHandle, pData, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK)
-    {
-      return QSPI_ERROR;
-    }
-    
-    /* Configure automatic polling mode to wait for end of program */  
-    if (QSPI_AutoPollingMemReady(&QSPIHandle, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != QSPI_OK)
-    {
-      return QSPI_ERROR;
-    }
-    
-    /* Update the address and size variables for next page programming */
-    current_addr += current_size;
-    pData += current_size;
-    current_size = ((current_addr + N25Q128A_PAGE_SIZE) > end_addr) ? (end_addr - current_addr) : N25Q128A_PAGE_SIZE;
-  } while (current_addr < end_addr);
-  
-  return QSPI_OK;
-}
-
-/**
-  * @brief  Erases the specified block of the QSPI memory. 
-  * @param  BlockAddress: Block address to erase  
-  * @retval QSPI memory status
-  */
-uint8_t BSP_QSPI_Erase_Block(uint32_t BlockAddress)
-{
-  QSPI_CommandTypeDef s_command;
-
-  /* Initialize the erase command */
-  s_command.InstructionMode   = QSPI_INSTRUCTION_1_LINE;
-  s_command.Instruction       = SUBSECTOR_ERASE_CMD;
-  s_command.AddressMode       = QSPI_ADDRESS_1_LINE;
-  s_command.AddressSize       = QSPI_ADDRESS_24_BITS;
-  s_command.Address           = BlockAddress;
-  s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE;
-  s_command.DataMode          = QSPI_DATA_NONE;
-  s_command.DummyCycles       = 0;
-  s_command.DdrMode           = QSPI_DDR_MODE_DISABLE;
-  s_command.DdrHoldHalfCycle  = QSPI_DDR_HHC_ANALOG_DELAY;
-  s_command.SIOOMode          = QSPI_SIOO_INST_EVERY_CMD;
-
-  /* Enable write operations */
-  if (QSPI_WriteEnable(&QSPIHandle) != QSPI_OK)
-  {
-    return QSPI_ERROR;
-  }
-
-  /* Send the command */
-  if (HAL_QSPI_Command(&QSPIHandle, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK)
-  {
-    return QSPI_ERROR;
-  }
-  
-  /* Configure automatic polling mode to wait for end of erase */  
-  if (QSPI_AutoPollingMemReady(&QSPIHandle, N25Q128A_SUBSECTOR_ERASE_MAX_TIME) != QSPI_OK)
-  {
-    return QSPI_ERROR;
-  }
-
-  return QSPI_OK;
-}
-
-/**
-  * @brief  Erases the entire QSPI memory.
-  * @retval QSPI memory status
-  */
-uint8_t BSP_QSPI_Erase_Chip(void)
-{
-  QSPI_CommandTypeDef s_command;
-
-  /* Initialize the erase command */
-  s_command.InstructionMode   = QSPI_INSTRUCTION_1_LINE;
-  s_command.Instruction       = BULK_ERASE_CMD;
-  s_command.AddressMode       = QSPI_ADDRESS_NONE;
-  s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE;
-  s_command.DataMode          = QSPI_DATA_NONE;
-  s_command.DummyCycles       = 0;
-  s_command.DdrMode           = QSPI_DDR_MODE_DISABLE;
-  s_command.DdrHoldHalfCycle  = QSPI_DDR_HHC_ANALOG_DELAY;
-  s_command.SIOOMode          = QSPI_SIOO_INST_EVERY_CMD;
-
-  /* Enable write operations */
-  if (QSPI_WriteEnable(&QSPIHandle) != QSPI_OK)
-  {
-    return QSPI_ERROR;
-  }
-
-  /* Send the command */
-  if (HAL_QSPI_Command(&QSPIHandle, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK)
-  {
-    return QSPI_ERROR;
-  }
-  
-  /* Configure automatic polling mode to wait for end of erase */  
-  if (QSPI_AutoPollingMemReady(&QSPIHandle, N25Q128A_BULK_ERASE_MAX_TIME) != QSPI_OK)
-  {
-    return QSPI_ERROR;
-  }
-
-  return QSPI_OK;
-}
-
-/**
-  * @brief  Reads current status of the QSPI memory.
-  * @retval QSPI memory status
-  */
-uint8_t BSP_QSPI_GetStatus(void)
-{
-  QSPI_CommandTypeDef s_command;
-  uint8_t reg;
-
-  /* Initialize the read flag status register command */
-  s_command.InstructionMode   = QSPI_INSTRUCTION_1_LINE;
-  s_command.Instruction       = READ_FLAG_STATUS_REG_CMD;
-  s_command.AddressMode       = QSPI_ADDRESS_NONE;
-  s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE;
-  s_command.DataMode          = QSPI_DATA_1_LINE;
-  s_command.DummyCycles       = 0;
-  s_command.NbData            = 1;
-  s_command.DdrMode           = QSPI_DDR_MODE_DISABLE;
-  s_command.DdrHoldHalfCycle  = QSPI_DDR_HHC_ANALOG_DELAY;
-  s_command.SIOOMode          = QSPI_SIOO_INST_EVERY_CMD;
-
-  /* Configure the command */
-  if (HAL_QSPI_Command(&QSPIHandle, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK)
-  {
-    return QSPI_ERROR;
-  }
-
-  /* Reception of the data */
-  if (HAL_QSPI_Receive(&QSPIHandle, &reg, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK)
-  {
-    return QSPI_ERROR;
-  }
-  
-  /* Check the value of the register */
-  if ((reg & (N25Q128A_FSR_PRERR | N25Q128A_FSR_VPPERR | N25Q128A_FSR_PGERR | N25Q128A_FSR_ERERR)) != 0)
-  {
-    return QSPI_ERROR;
-  }
-  else if ((reg & (N25Q128A_FSR_PGSUS | N25Q128A_FSR_ERSUS)) != 0)
-  {
-    return QSPI_SUSPENDED;
-  }
-  else if ((reg & N25Q128A_FSR_READY) != 0)
-  {
-    return QSPI_OK;
-  }
-  else
-  {
-    return QSPI_BUSY;
-  }
-}
-
-/**
-  * @brief  Return the configuration of the QSPI memory.
-  * @param  pInfo: pointer on the configuration structure  
-  * @retval QSPI memory status
-  */
-uint8_t BSP_QSPI_GetInfo(QSPI_Info* pInfo)
-{
-  /* Configure the structure with the memory configuration */
-  pInfo->FlashSize          = N25Q128A_FLASH_SIZE;
-  pInfo->EraseSectorSize    = N25Q128A_SUBSECTOR_SIZE;
-  pInfo->EraseSectorsNumber = (N25Q128A_FLASH_SIZE/N25Q128A_SUBSECTOR_SIZE);
-  pInfo->ProgPageSize       = N25Q128A_PAGE_SIZE;
-  pInfo->ProgPagesNumber    = (N25Q128A_FLASH_SIZE/N25Q128A_PAGE_SIZE);
-  
-  return QSPI_OK;
-}
-
-/**
-  * @brief  Configure the QSPI in memory-mapped mode
-  * @retval QSPI memory status
-  */
-uint8_t BSP_QSPI_EnableMemoryMappedMode(void)
-{
-  QSPI_CommandTypeDef      s_command;
-  QSPI_MemoryMappedTypeDef s_mem_mapped_cfg;
-
-  /* Configure the command for the read instruction */
-  s_command.InstructionMode   = QSPI_INSTRUCTION_1_LINE;
-  s_command.Instruction       = QUAD_INOUT_FAST_READ_CMD;
-  s_command.AddressMode       = QSPI_ADDRESS_4_LINES;
-  s_command.AddressSize       = QSPI_ADDRESS_24_BITS;
-  s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE;
-  s_command.DataMode          = QSPI_DATA_4_LINES;
-  s_command.DummyCycles       = N25Q128A_DUMMY_CYCLES_READ_QUAD;
-  s_command.DdrMode           = QSPI_DDR_MODE_DISABLE;
-  s_command.DdrHoldHalfCycle  = QSPI_DDR_HHC_ANALOG_DELAY;
-  s_command.SIOOMode          = QSPI_SIOO_INST_EVERY_CMD;
-  
-  /* Configure the memory mapped mode */
-  s_mem_mapped_cfg.TimeOutActivation = QSPI_TIMEOUT_COUNTER_DISABLE;
-  s_mem_mapped_cfg.TimeOutPeriod     = 0;
-  
-  if (HAL_QSPI_MemoryMapped(&QSPIHandle, &s_command, &s_mem_mapped_cfg) != HAL_OK)
-  {
-    return QSPI_ERROR;
-  }
-
-  return QSPI_OK;
-}
-
-/**
-  * @}
-  */
-
-/** @addtogroup STM32746G_DISCOVERY_QSPI_Private_Functions
-  * @{
-  */ 
-
-/**
-  * @brief QSPI MSP Initialization
-  *        This function configures the hardware resources used in this example:
-  *           - Peripheral's clock enable
-  *           - Peripheral's GPIO Configuration
-  *           - NVIC configuration for QSPI interrupt
-  * @retval None
-  */
-__weak void BSP_QSPI_MspInit(QSPI_HandleTypeDef *hqspi, void *Params)
-{
-  GPIO_InitTypeDef gpio_init_structure;
-
-  /*##-1- Enable peripherals and GPIO Clocks #################################*/
-  /* Enable the QuadSPI memory interface clock */
-  QSPI_CLK_ENABLE();
-  /* Reset the QuadSPI memory interface */
-  QSPI_FORCE_RESET();
-  QSPI_RELEASE_RESET();
-  /* Enable GPIO clocks */
-  QSPI_CS_GPIO_CLK_ENABLE();
-  QSPI_CLK_GPIO_CLK_ENABLE();
-  QSPI_D0_GPIO_CLK_ENABLE();
-  QSPI_D1_GPIO_CLK_ENABLE();
-  QSPI_D2_GPIO_CLK_ENABLE();
-  QSPI_D3_GPIO_CLK_ENABLE();
-
-  /*##-2- Configure peripheral GPIO ##########################################*/
-  /* QSPI CS GPIO pin configuration  */
-  gpio_init_structure.Pin       = QSPI_CS_PIN;
-  gpio_init_structure.Mode      = GPIO_MODE_AF_PP;
-  gpio_init_structure.Pull      = GPIO_PULLUP;
-  gpio_init_structure.Speed     = GPIO_SPEED_HIGH;
-  gpio_init_structure.Alternate = GPIO_AF10_QUADSPI;
-  HAL_GPIO_Init(QSPI_CS_GPIO_PORT, &gpio_init_structure);
-
-  /* QSPI CLK GPIO pin configuration  */
-  gpio_init_structure.Pin       = QSPI_CLK_PIN;
-  gpio_init_structure.Pull      = GPIO_NOPULL;
-  gpio_init_structure.Alternate = GPIO_AF9_QUADSPI;
-  HAL_GPIO_Init(QSPI_CLK_GPIO_PORT, &gpio_init_structure);
-
-  /* QSPI D0 GPIO pin configuration  */
-  gpio_init_structure.Pin       = QSPI_D0_PIN;
-  gpio_init_structure.Alternate = GPIO_AF9_QUADSPI;
-  HAL_GPIO_Init(QSPI_D0_GPIO_PORT, &gpio_init_structure);
-
-  /* QSPI D1 GPIO pin configuration  */
-  gpio_init_structure.Pin       = QSPI_D1_PIN;
-  gpio_init_structure.Alternate = GPIO_AF9_QUADSPI;
-  HAL_GPIO_Init(QSPI_D1_GPIO_PORT, &gpio_init_structure);
-
-  /* QSPI D2 GPIO pin configuration  */
-  gpio_init_structure.Pin       = QSPI_D2_PIN;
-  gpio_init_structure.Alternate = GPIO_AF9_QUADSPI;
-  HAL_GPIO_Init(QSPI_D2_GPIO_PORT, &gpio_init_structure);
-
-  /* QSPI D3 GPIO pin configuration  */
-  gpio_init_structure.Pin       = QSPI_D3_PIN;
-  gpio_init_structure.Alternate = GPIO_AF9_QUADSPI;
-  HAL_GPIO_Init(QSPI_D3_GPIO_PORT, &gpio_init_structure);
-
-  /*##-3- Configure the NVIC for QSPI #########################################*/
-  /* NVIC configuration for QSPI interrupt */
-  HAL_NVIC_SetPriority(QUADSPI_IRQn, 0x0F, 0);
-  HAL_NVIC_EnableIRQ(QUADSPI_IRQn);
-}
-
-/**
-  * @brief QSPI MSP De-Initialization
-  *        This function frees the hardware resources used in this example:
-  *          - Disable the Peripheral's clock
-  *          - Revert GPIO and NVIC configuration to their default state
-  * @retval None
-  */
-__weak void BSP_QSPI_MspDeInit(QSPI_HandleTypeDef *hqspi, void *Params)
-{
-  /*##-1- Disable the NVIC for QSPI ###########################################*/
-  HAL_NVIC_DisableIRQ(QUADSPI_IRQn);
-
-  /*##-2- Disable peripherals and GPIO Clocks ################################*/
-  /* De-Configure QSPI pins */
-  HAL_GPIO_DeInit(QSPI_CS_GPIO_PORT, QSPI_CS_PIN);
-  HAL_GPIO_DeInit(QSPI_CLK_GPIO_PORT, QSPI_CLK_PIN);
-  HAL_GPIO_DeInit(QSPI_D0_GPIO_PORT, QSPI_D0_PIN);
-  HAL_GPIO_DeInit(QSPI_D1_GPIO_PORT, QSPI_D1_PIN);
-  HAL_GPIO_DeInit(QSPI_D2_GPIO_PORT, QSPI_D2_PIN);
-  HAL_GPIO_DeInit(QSPI_D3_GPIO_PORT, QSPI_D3_PIN);
-
-  /*##-3- Reset peripherals ##################################################*/
-  /* Reset the QuadSPI memory interface */
-  QSPI_FORCE_RESET();
-  QSPI_RELEASE_RESET();
-
-  /* Disable the QuadSPI memory interface clock */
-  QSPI_CLK_DISABLE();
-}
-
-/**
-  * @brief  This function reset the QSPI memory.
-  * @param  hqspi: QSPI handle
-  * @retval None
-  */
-static uint8_t QSPI_ResetMemory(QSPI_HandleTypeDef *hqspi)
-{
-  QSPI_CommandTypeDef s_command;
-
-  /* Initialize the reset enable command */
-  s_command.InstructionMode   = QSPI_INSTRUCTION_1_LINE;
-  s_command.Instruction       = RESET_ENABLE_CMD;
-  s_command.AddressMode       = QSPI_ADDRESS_NONE;
-  s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE;
-  s_command.DataMode          = QSPI_DATA_NONE;
-  s_command.DummyCycles       = 0;
-  s_command.DdrMode           = QSPI_DDR_MODE_DISABLE;
-  s_command.DdrHoldHalfCycle  = QSPI_DDR_HHC_ANALOG_DELAY;
-  s_command.SIOOMode          = QSPI_SIOO_INST_EVERY_CMD;
-
-  /* Send the command */
-  if (HAL_QSPI_Command(hqspi, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK)
-  {
-    return QSPI_ERROR;
-  }
-
-  /* Send the reset memory command */
-  s_command.Instruction = RESET_MEMORY_CMD;
-  if (HAL_QSPI_Command(hqspi, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK)
-  {
-    return QSPI_ERROR;
-  }
-
-  /* Configure automatic polling mode to wait the memory is ready */  
-  if (QSPI_AutoPollingMemReady(hqspi, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != QSPI_OK)
-  {
-    return QSPI_ERROR;
-  }
-
-  return QSPI_OK;
-}
-
-/**
-  * @brief  This function configure the dummy cycles on memory side.
-  * @param  hqspi: QSPI handle
-  * @retval None
-  */
-static uint8_t QSPI_DummyCyclesCfg(QSPI_HandleTypeDef *hqspi)
-{
-  QSPI_CommandTypeDef s_command;
-  uint8_t reg;
-
-  /* Initialize the read volatile configuration register command */
-  s_command.InstructionMode   = QSPI_INSTRUCTION_1_LINE;
-  s_command.Instruction       = READ_VOL_CFG_REG_CMD;
-  s_command.AddressMode       = QSPI_ADDRESS_NONE;
-  s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE;
-  s_command.DataMode          = QSPI_DATA_1_LINE;
-  s_command.DummyCycles       = 0;
-  s_command.NbData            = 1;
-  s_command.DdrMode           = QSPI_DDR_MODE_DISABLE;
-  s_command.DdrHoldHalfCycle  = QSPI_DDR_HHC_ANALOG_DELAY;
-  s_command.SIOOMode          = QSPI_SIOO_INST_EVERY_CMD;
-
-  /* Configure the command */
-  if (HAL_QSPI_Command(hqspi, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK)
-  {
-    return QSPI_ERROR;
-  }
-
-  /* Reception of the data */
-  if (HAL_QSPI_Receive(hqspi, &reg, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK)
-  {
-    return QSPI_ERROR;
-  }
-
-  /* Enable write operations */
-  if (QSPI_WriteEnable(hqspi) != QSPI_OK)
-  {
-    return QSPI_ERROR;
-  }
-
-  /* Update volatile configuration register (with new dummy cycles) */  
-  s_command.Instruction = WRITE_VOL_CFG_REG_CMD;
-  MODIFY_REG(reg, N25Q128A_VCR_NB_DUMMY, (N25Q128A_DUMMY_CYCLES_READ_QUAD << POSITION_VAL(N25Q128A_VCR_NB_DUMMY)));
-      
-  /* Configure the write volatile configuration register command */
-  if (HAL_QSPI_Command(hqspi, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK)
-  {
-    return QSPI_ERROR;
-  }
-
-  /* Transmission of the data */
-  if (HAL_QSPI_Transmit(hqspi, &reg, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK)
-  {
-    return QSPI_ERROR;
-  }
-  
-  return QSPI_OK;
-}
-
-/**
-  * @brief  This function send a Write Enable and wait it is effective.
-  * @param  hqspi: QSPI handle
-  * @retval None
-  */
-static uint8_t QSPI_WriteEnable(QSPI_HandleTypeDef *hqspi)
-{
-  QSPI_CommandTypeDef     s_command;
-  QSPI_AutoPollingTypeDef s_config;
-
-  /* Enable write operations */
-  s_command.InstructionMode   = QSPI_INSTRUCTION_1_LINE;
-  s_command.Instruction       = WRITE_ENABLE_CMD;
-  s_command.AddressMode       = QSPI_ADDRESS_NONE;
-  s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE;
-  s_command.DataMode          = QSPI_DATA_NONE;
-  s_command.DummyCycles       = 0;
-  s_command.DdrMode           = QSPI_DDR_MODE_DISABLE;
-  s_command.DdrHoldHalfCycle  = QSPI_DDR_HHC_ANALOG_DELAY;
-  s_command.SIOOMode          = QSPI_SIOO_INST_EVERY_CMD;
-
-  if (HAL_QSPI_Command(hqspi, &s_command, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK)
-  {
-    return QSPI_ERROR;
-  }
-  
-  /* Configure automatic polling mode to wait for write enabling */  
-  s_config.Match           = N25Q128A_SR_WREN;
-  s_config.Mask            = N25Q128A_SR_WREN;
-  s_config.MatchMode       = QSPI_MATCH_MODE_AND;
-  s_config.StatusBytesSize = 1;
-  s_config.Interval        = 0x10;
-  s_config.AutomaticStop   = QSPI_AUTOMATIC_STOP_ENABLE;
-
-  s_command.Instruction    = READ_STATUS_REG_CMD;
-  s_command.DataMode       = QSPI_DATA_1_LINE;
-
-  if (HAL_QSPI_AutoPolling(hqspi, &s_command, &s_config, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK)
-  {
-    return QSPI_ERROR;
-  }
-
-  return QSPI_OK;
-}
-
-/**
-  * @brief  This function read the SR of the memory and wait the EOP.
-  * @param  hqspi: QSPI handle
-  * @param  Timeout
-  * @retval None
-  */
-static uint8_t QSPI_AutoPollingMemReady(QSPI_HandleTypeDef *hqspi, uint32_t Timeout)
-{
-  QSPI_CommandTypeDef     s_command;
-  QSPI_AutoPollingTypeDef s_config;
-
-  /* Configure automatic polling mode to wait for memory ready */  
-  s_command.InstructionMode   = QSPI_INSTRUCTION_1_LINE;
-  s_command.Instruction       = READ_STATUS_REG_CMD;
-  s_command.AddressMode       = QSPI_ADDRESS_NONE;
-  s_command.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE;
-  s_command.DataMode          = QSPI_DATA_1_LINE;
-  s_command.DummyCycles       = 0;
-  s_command.DdrMode           = QSPI_DDR_MODE_DISABLE;
-  s_command.DdrHoldHalfCycle  = QSPI_DDR_HHC_ANALOG_DELAY;
-  s_command.SIOOMode          = QSPI_SIOO_INST_EVERY_CMD;
-
-  s_config.Match           = 0;
-  s_config.Mask            = N25Q128A_SR_WIP;
-  s_config.MatchMode       = QSPI_MATCH_MODE_AND;
-  s_config.StatusBytesSize = 1;
-  s_config.Interval        = 0x10;
-  s_config.AutomaticStop   = QSPI_AUTOMATIC_STOP_ENABLE;
-
-  if (HAL_QSPI_AutoPolling(hqspi, &s_command, &s_config, Timeout) != HAL_OK)
-  {
-    return QSPI_ERROR;
-  }
-
-  return QSPI_OK;
-}
-/**
-  * @}
-  */  
-  
-/**
-  * @}
-  */ 
-  
-/**
-  * @}
-  */ 
-  
-/**
-  * @}
-  */ 
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
-
diff -r 85dbcff443aa -r 1a18e061d0ec Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_qspi.h
--- a/Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_qspi.h	Wed Nov 27 08:29:42 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,170 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    stm32746g_discovery_qspi.h
-  * @author  MCD Application Team
-  * @brief   This file contains the common defines and functions prototypes for
-  *          the stm32746g_discovery_qspi.c driver.
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT(c) 2016 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.
-  *
-  ******************************************************************************
-  */ 
-
-/** @addtogroup BSP
-  * @{
-  */ 
-
-/** @addtogroup STM32746G_DISCOVERY
-  * @{
-  */
-    
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __STM32746G_DISCOVERY_QSPI_H
-#define __STM32746G_DISCOVERY_QSPI_H
-
-#ifdef __cplusplus
- extern "C" {
-#endif 
-
-/* Includes ------------------------------------------------------------------*/
-#include "stm32f7xx_hal.h"
-#include "../Components/n25q128a/n25q128a.h"
-
-/** @addtogroup STM32746G_DISCOVERY_QSPI
-  * @{
-  */    
-
-  
-/* Exported constants --------------------------------------------------------*/ 
-/** @defgroup STM32746G_DISCOVERY_QSPI_Exported_Constants STM32746G_DISCOVERY_QSPI Exported Constants
-  * @{
-  */
-/* QSPI Error codes */
-#define QSPI_OK            ((uint8_t)0x00)
-#define QSPI_ERROR         ((uint8_t)0x01)
-#define QSPI_BUSY          ((uint8_t)0x02)
-#define QSPI_NOT_SUPPORTED ((uint8_t)0x04)
-#define QSPI_SUSPENDED     ((uint8_t)0x08)
-
-
-/* Definition for QSPI clock resources */
-#define QSPI_CLK_ENABLE()          __HAL_RCC_QSPI_CLK_ENABLE()
-#define QSPI_CLK_DISABLE()         __HAL_RCC_QSPI_CLK_DISABLE()
-#define QSPI_CS_GPIO_CLK_ENABLE()  __HAL_RCC_GPIOB_CLK_ENABLE()
-#define QSPI_CLK_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()
-#define QSPI_D0_GPIO_CLK_ENABLE()  __HAL_RCC_GPIOD_CLK_ENABLE()
-#define QSPI_D1_GPIO_CLK_ENABLE()  __HAL_RCC_GPIOD_CLK_ENABLE()
-#define QSPI_D2_GPIO_CLK_ENABLE()  __HAL_RCC_GPIOE_CLK_ENABLE()
-#define QSPI_D3_GPIO_CLK_ENABLE()  __HAL_RCC_GPIOD_CLK_ENABLE()
-
-#define QSPI_FORCE_RESET()         __HAL_RCC_QSPI_FORCE_RESET()
-#define QSPI_RELEASE_RESET()       __HAL_RCC_QSPI_RELEASE_RESET()
-
-/* Definition for QSPI Pins */
-#define QSPI_CS_PIN                GPIO_PIN_6
-#define QSPI_CS_GPIO_PORT          GPIOB
-#define QSPI_CLK_PIN               GPIO_PIN_2
-#define QSPI_CLK_GPIO_PORT         GPIOB
-#define QSPI_D0_PIN                GPIO_PIN_11
-#define QSPI_D0_GPIO_PORT          GPIOD
-#define QSPI_D1_PIN                GPIO_PIN_12
-#define QSPI_D1_GPIO_PORT          GPIOD
-#define QSPI_D2_PIN                GPIO_PIN_2
-#define QSPI_D2_GPIO_PORT          GPIOE
-#define QSPI_D3_PIN                GPIO_PIN_13
-#define QSPI_D3_GPIO_PORT          GPIOD
-
-/* N25Q128A13EF840E Micron memory */
-/* Size of the flash */
-#define QSPI_FLASH_SIZE            23     /* Address bus width to access whole memory space */
-#define QSPI_PAGE_SIZE             256
-
-/* This alias is added as the name of Memory mapped fucntion changed */   
-#define BSP_QSPI_MemoryMappedMode  BSP_QSPI_EnableMemoryMappedMode   
-/**
-  * @}
-  */
-
-/* Exported types ------------------------------------------------------------*/
-/** @defgroup STM32746G_DISCOVERY_QSPI_Exported_Types STM32746G_DISCOVERY_QSPI Exported Types
-  * @{
-  */
-/* QSPI Info */
-typedef struct {
-  uint32_t FlashSize;          /*!< Size of the flash */
-  uint32_t EraseSectorSize;    /*!< Size of sectors for the erase operation */
-  uint32_t EraseSectorsNumber; /*!< Number of sectors for the erase operation */
-  uint32_t ProgPageSize;       /*!< Size of pages for the program operation */
-  uint32_t ProgPagesNumber;    /*!< Number of pages for the program operation */
-} QSPI_Info;
-
-/**
-  * @}
-  */
-
-  
-/* Exported functions --------------------------------------------------------*/
-/** @addtogroup STM32746G_DISCOVERY_QSPI_Exported_Functions
-  * @{
-  */  
-uint8_t BSP_QSPI_Init       (void);
-uint8_t BSP_QSPI_DeInit     (void);
-uint8_t BSP_QSPI_Read       (uint8_t* pData, uint32_t ReadAddr, uint32_t Size);
-uint8_t BSP_QSPI_Write      (uint8_t* pData, uint32_t WriteAddr, uint32_t Size);
-uint8_t BSP_QSPI_Erase_Block(uint32_t BlockAddress);
-uint8_t BSP_QSPI_Erase_Chip (void);
-uint8_t BSP_QSPI_GetStatus  (void);
-uint8_t BSP_QSPI_GetInfo    (QSPI_Info* pInfo);
-uint8_t BSP_QSPI_EnableMemoryMappedMode(void);
-
-/* These functions can be modified in case the current settings
-   need to be changed for specific application needs */
-void BSP_QSPI_MspInit(QSPI_HandleTypeDef *hqspi, void *Params);
-void BSP_QSPI_MspDeInit(QSPI_HandleTypeDef *hqspi, void *Params);
-
-/**
-  * @}
-  */ 
-
-/**
-  * @}
-  */ 
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __STM32746G_DISCOVERY_QSPI_H */
-/**
-  * @}
-  */ 
-
-/**
-  * @}
-  */ 
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r 85dbcff443aa -r 1a18e061d0ec Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_sd.c
--- a/Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_sd.c	Wed Nov 27 08:29:42 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,606 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    stm32746g_discovery_sd.c
-  * @author  MCD Application Team
-  * @brief   This file includes the uSD card driver mounted on STM32746G-Discovery
-  *          board.
-  @verbatim
-   1. How To use this driver:
-   --------------------------
-      - This driver is used to drive the micro SD external card mounted on STM32746G-Discovery
-        board.
-      - This driver does not need a specific component driver for the micro SD device
-        to be included with.
-   
-   2. Driver description:
-   ---------------------
-     + Initialization steps:
-        o Initialize the micro SD card using the BSP_SD_Init() function. This 
-          function includes the MSP layer hardware resources initialization and the
-          SDIO interface configuration to interface with the external micro SD. It 
-          also includes the micro SD initialization sequence.
-        o To check the SD card presence you can use the function BSP_SD_IsDetected() which 
-          returns the detection status 
-        o If SD presence detection interrupt mode is desired, you must configure the 
-          SD detection interrupt mode by calling the function BSP_SD_ITConfig(). The interrupt 
-          is generated as an external interrupt whenever the micro SD card is 
-          plugged/unplugged in/from the board.
-        o The function BSP_SD_GetCardInfo() is used to get the micro SD card information 
-          which is stored in the structure "HAL_SD_CardInfoTypedef".
-     
-     + Micro SD card operations
-        o The micro SD card can be accessed with read/write block(s) operations once 
-          it is ready for access. The access can be performed whether using the polling
-          mode by calling the functions BSP_SD_ReadBlocks()/BSP_SD_WriteBlocks(), or by DMA 
-          transfer using the functions BSP_SD_ReadBlocks_DMA()/BSP_SD_WriteBlocks_DMA()
-        o The DMA transfer complete is used with interrupt mode. Once the SD transfer
-          is complete, the SD interrupt is handled using the function BSP_SD_IRQHandler(),
-          the DMA Tx/Rx transfer complete are handled using the functions
-          BSP_SD_DMA_Tx_IRQHandler()/BSP_SD_DMA_Rx_IRQHandler(). The corresponding user callbacks 
-          are implemented by the user at application level. 
-        o The SD erase block(s) is performed using the function BSP_SD_Erase() with specifying
-          the number of blocks to erase.
-        o The SD runtime status is returned when calling the function BSP_SD_GetCardState().
-
-  @endverbatim
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT(c) 2016 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.
-  *
-  ******************************************************************************
-  */ 
-
-/* Dependencies
-- stm32746g_discovery.c
-- stm32f7xx_hal_sd.c
-- stm32f7xx_ll_sdmmc.c
-- stm32f7xx_hal_dma.c  
-- stm32f7xx_hal_gpio.c
-- stm32f7xx_hal_cortex.c
-- stm32f7xx_hal_rcc_ex.h
-EndDependencies */
-
-/* Includes ------------------------------------------------------------------*/
-#include "stm32746g_discovery_sd.h"
-
-/** @addtogroup BSP
-  * @{
-  */
-
-/** @addtogroup STM32746G_DISCOVERY
-  * @{
-  */ 
-  
-/** @defgroup STM32746G_DISCOVERY_SD STM32746G_DISCOVERY_SD
-  * @{
-  */ 
-
-
-/** @defgroup STM32746G_DISCOVERY_SD_Private_TypesDefinitions STM32746G_DISCOVERY_SD Private Types Definitions
-  * @{
-  */
-/**
-  * @}
-  */ 
-
-/** @defgroup STM32746G_DISCOVERY_SD_Private_Defines STM32746G_DISCOVERY_SD Private Defines
-  * @{
-  */
-/**
-  * @}
-  */ 
-  
-/** @defgroup STM32746G_DISCOVERY_SD_Private_Macros STM32746G_DISCOVERY_SD Private Macros
-  * @{
-  */    
-/**
-  * @}
-  */  
-
-/** @defgroup STM32746G_DISCOVERY_SD_Private_Variables STM32746G_DISCOVERY_SD Private Variables
-  * @{
-  */
-SD_HandleTypeDef uSdHandle;
-
-/**
-  * @}
-  */ 
-  
-/** @defgroup STM32746G_DISCOVERY_SD_Private_FunctionPrototypes STM32746G_DISCOVERY_SD Private Function Prototypes
-  * @{
-  */
-/**
-  * @}
-  */ 
-  
-/** @defgroup STM32746G_DISCOVERY_SD_Exported_Functions STM32746G_DISCOVERY_SD Exported Functions
-  * @{
-  */
-
-/**
-  * @brief  Initializes the SD card device.
-  * @retval SD status
-  */
-uint8_t BSP_SD_Init(void)
-{ 
-  uint8_t sd_state = MSD_OK;
-  
-  /* uSD device interface configuration */
-  uSdHandle.Instance = SDMMC1;
-
-  uSdHandle.Init.ClockEdge           = SDMMC_CLOCK_EDGE_RISING;
-  uSdHandle.Init.ClockBypass         = SDMMC_CLOCK_BYPASS_DISABLE;
-  uSdHandle.Init.ClockPowerSave      = SDMMC_CLOCK_POWER_SAVE_DISABLE;
-  uSdHandle.Init.BusWide             = SDMMC_BUS_WIDE_1B;
-  uSdHandle.Init.HardwareFlowControl = SDMMC_HARDWARE_FLOW_CONTROL_DISABLE;
-  uSdHandle.Init.ClockDiv            = SDMMC_TRANSFER_CLK_DIV;
-  
-  /* Msp SD Detect pin initialization */
-  BSP_SD_Detect_MspInit(&uSdHandle, NULL);
-  if(BSP_SD_IsDetected() != SD_PRESENT)   /* Check if SD card is present */
-  {
-    return MSD_ERROR_SD_NOT_PRESENT;
-  }
-  
-  /* Msp SD initialization */
-  BSP_SD_MspInit(&uSdHandle, NULL);
-
-  /* HAL SD initialization */
-  if(HAL_SD_Init(&uSdHandle) != HAL_OK)
-  {
-    sd_state = MSD_ERROR;
-  }
-  
-  /* Configure SD Bus width */
-  if(sd_state == MSD_OK)
-  {
-    /* Enable wide operation */ 
-    if(HAL_SD_ConfigWideBusOperation(&uSdHandle, SDMMC_BUS_WIDE_4B) != HAL_OK)
-    {
-      sd_state = MSD_ERROR;
-    }
-    else
-    {
-      sd_state = MSD_OK;
-    }
-  }
-  
-  return  sd_state;
-}
-
-/**
-  * @brief  DeInitializes the SD card device.
-  * @retval SD status
-  */
-uint8_t BSP_SD_DeInit(void)
-{ 
-  uint8_t sd_state = MSD_OK;
- 
-  uSdHandle.Instance = SDMMC1;
-  
-  /* HAL SD deinitialization */
-  if(HAL_SD_DeInit(&uSdHandle) != HAL_OK)
-  {
-    sd_state = MSD_ERROR;
-  }
-
-  /* Msp SD deinitialization */
-  uSdHandle.Instance = SDMMC1;
-  BSP_SD_MspDeInit(&uSdHandle, NULL);
-  
-  return  sd_state;
-}
-
-/**
-  * @brief  Configures Interrupt mode for SD detection pin.
-  * @retval Returns MSD_OK
-  */
-uint8_t BSP_SD_ITConfig(void)
-{  
-  GPIO_InitTypeDef gpio_init_structure;
-
-  /* Configure Interrupt mode for SD detection pin */  
-  gpio_init_structure.Pin = SD_DETECT_PIN;
-  gpio_init_structure.Pull = GPIO_PULLUP;
-  gpio_init_structure.Speed = GPIO_SPEED_FAST;
-  gpio_init_structure.Mode = GPIO_MODE_IT_RISING_FALLING;
-  HAL_GPIO_Init(SD_DETECT_GPIO_PORT, &gpio_init_structure);
-
-  /* Enable and set SD detect EXTI Interrupt to the lowest priority */
-  HAL_NVIC_SetPriority((IRQn_Type)(SD_DETECT_EXTI_IRQn), 0x0F, 0x00);
-  HAL_NVIC_EnableIRQ((IRQn_Type)(SD_DETECT_EXTI_IRQn));
-
-  return MSD_OK;
-}
-
-/**
-  * @brief  Detects if SD card is correctly plugged in the memory slot or not.
-  * @retval Returns if SD is detected or not
-  */
-uint8_t BSP_SD_IsDetected(void)
-{
-  __IO uint8_t      status = SD_PRESENT;
-  
-  /* Check SD card detect pin */
-  if (HAL_GPIO_ReadPin(SD_DETECT_GPIO_PORT, SD_DETECT_PIN) == GPIO_PIN_SET)
-  {
-    status = SD_NOT_PRESENT;
-  }
-
-  return status;
-}
-
-/**
-  * @brief  Reads block(s) from a specified address in an SD card, in polling mode.
-  * @param  pData: Pointer to the buffer that will contain the data to transmit
-  * @param  ReadAddr: Address from where data is to be read
-  * @param  NumOfBlocks: Number of SD blocks to read
-  * @param  Timeout: Timeout for read operation
-  * @retval SD status
-  */
-uint8_t BSP_SD_ReadBlocks(uint32_t *pData, uint32_t ReadAddr, uint32_t NumOfBlocks, uint32_t Timeout)
-{
-  if(HAL_SD_ReadBlocks(&uSdHandle, (uint8_t *)pData, ReadAddr, NumOfBlocks, Timeout) != HAL_OK)
-  {
-    return MSD_ERROR;
-  }
-  else
-  {
-    return MSD_OK;
-  }
-}
-
-/**
-  * @brief  Writes block(s) to a specified address in an SD card, in polling mode. 
-  * @param  pData: Pointer to the buffer that will contain the data to transmit
-  * @param  WriteAddr: Address from where data is to be written
-  * @param  NumOfBlocks: Number of SD blocks to write
-  * @param  Timeout: Timeout for write operation
-  * @retval SD status
-  */
-uint8_t BSP_SD_WriteBlocks(uint32_t *pData, uint32_t WriteAddr, uint32_t NumOfBlocks, uint32_t Timeout)
-{
-  if(HAL_SD_WriteBlocks(&uSdHandle, (uint8_t *)pData, WriteAddr, NumOfBlocks, Timeout) != HAL_OK)
-  {
-    return MSD_ERROR;
-  }
-  else
-  {
-    return MSD_OK;
-  }
-}
-
-/**
-  * @brief  Reads block(s) from a specified address in an SD card, in DMA mode.
-  * @param  pData: Pointer to the buffer that will contain the data to transmit
-  * @param  ReadAddr: Address from where data is to be read
-  * @param  NumOfBlocks: Number of SD blocks to read 
-  * @retval SD status
-  */
-uint8_t BSP_SD_ReadBlocks_DMA(uint32_t *pData, uint32_t ReadAddr, uint32_t NumOfBlocks)
-{  
-  /* Read block(s) in DMA transfer mode */
-  if(HAL_SD_ReadBlocks_DMA(&uSdHandle, (uint8_t *)pData, ReadAddr, NumOfBlocks) != HAL_OK)
-  {
-    return MSD_ERROR;
-  }
-  else
-  {
-    return MSD_OK;
-  }
-}
-
-/**
-  * @brief  Writes block(s) to a specified address in an SD card, in DMA mode.
-  * @param  pData: Pointer to the buffer that will contain the data to transmit
-  * @param  WriteAddr: Address from where data is to be written
-  * @param  NumOfBlocks: Number of SD blocks to write 
-  * @retval SD status
-  */
-uint8_t BSP_SD_WriteBlocks_DMA(uint32_t *pData, uint32_t WriteAddr, uint32_t NumOfBlocks)
-{ 
-  /* Write block(s) in DMA transfer mode */
-  if(HAL_SD_WriteBlocks_DMA(&uSdHandle, (uint8_t *)pData, WriteAddr, NumOfBlocks) != HAL_OK)
-  {
-    return MSD_ERROR;
-  }
-  else
-  {
-    return MSD_OK;
-  }
-}
-
-/**
-  * @brief  Erases the specified memory area of the given SD card. 
-  * @param  StartAddr: Start byte address
-  * @param  EndAddr: End byte address
-  * @retval SD status
-  */
-uint8_t BSP_SD_Erase(uint32_t StartAddr, uint32_t EndAddr)
-{
-  if(HAL_SD_Erase(&uSdHandle, StartAddr, EndAddr) != HAL_OK)
-  {
-    return MSD_ERROR;
-  }
-  else
-  {
-    return MSD_OK;
-  }
-}
-
-/**
-  * @brief  Initializes the SD MSP.
-  * @param  hsd: SD handle
-  * @param  Params
-  * @retval None
-  */
-__weak void BSP_SD_MspInit(SD_HandleTypeDef *hsd, void *Params)
-{
-  static DMA_HandleTypeDef dma_rx_handle;
-  static DMA_HandleTypeDef dma_tx_handle;
-  GPIO_InitTypeDef gpio_init_structure;
-
-  /* Enable SDIO clock */
-  __HAL_RCC_SDMMC1_CLK_ENABLE();
-  
-  /* Enable DMA2 clocks */
-  __DMAx_TxRx_CLK_ENABLE();
-
-  /* Enable GPIOs clock */
-  __HAL_RCC_GPIOC_CLK_ENABLE();
-  __HAL_RCC_GPIOD_CLK_ENABLE();
-  
-  /* Common GPIO configuration */
-  gpio_init_structure.Mode      = GPIO_MODE_AF_PP;
-  gpio_init_structure.Pull      = GPIO_PULLUP;
-  gpio_init_structure.Speed     = GPIO_SPEED_HIGH;
-  gpio_init_structure.Alternate = GPIO_AF12_SDMMC1;
-  
-  /* GPIOC configuration */
-  gpio_init_structure.Pin = GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12;
-  HAL_GPIO_Init(GPIOC, &gpio_init_structure);
-
-  /* GPIOD configuration */
-  gpio_init_structure.Pin = GPIO_PIN_2;
-  HAL_GPIO_Init(GPIOD, &gpio_init_structure);
-
-  /* NVIC configuration for SDIO interrupts */
-  HAL_NVIC_SetPriority(SDMMC1_IRQn, 0x0E, 0);
-  HAL_NVIC_EnableIRQ(SDMMC1_IRQn);
-    
-  /* Configure DMA Rx parameters */
-  dma_rx_handle.Init.Channel             = SD_DMAx_Rx_CHANNEL;
-  dma_rx_handle.Init.Direction           = DMA_PERIPH_TO_MEMORY;
-  dma_rx_handle.Init.PeriphInc           = DMA_PINC_DISABLE;
-  dma_rx_handle.Init.MemInc              = DMA_MINC_ENABLE;
-  dma_rx_handle.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD;
-  dma_rx_handle.Init.MemDataAlignment    = DMA_MDATAALIGN_WORD;
-  dma_rx_handle.Init.Mode                = DMA_PFCTRL;
-  dma_rx_handle.Init.Priority            = DMA_PRIORITY_VERY_HIGH;
-  dma_rx_handle.Init.FIFOMode            = DMA_FIFOMODE_ENABLE;
-  dma_rx_handle.Init.FIFOThreshold       = DMA_FIFO_THRESHOLD_FULL;
-  dma_rx_handle.Init.MemBurst            = DMA_MBURST_INC4;
-  dma_rx_handle.Init.PeriphBurst         = DMA_PBURST_INC4;
-  
-  dma_rx_handle.Instance = SD_DMAx_Rx_STREAM;
-  
-  /* Associate the DMA handle */
-  __HAL_LINKDMA(hsd, hdmarx, dma_rx_handle);
-  
-  /* Deinitialize the stream for new transfer */
-  HAL_DMA_DeInit(&dma_rx_handle);
-  
-  /* Configure the DMA stream */
-  HAL_DMA_Init(&dma_rx_handle);
-  
-  /* Configure DMA Tx parameters */
-  dma_tx_handle.Init.Channel             = SD_DMAx_Tx_CHANNEL;
-  dma_tx_handle.Init.Direction           = DMA_MEMORY_TO_PERIPH;
-  dma_tx_handle.Init.PeriphInc           = DMA_PINC_DISABLE;
-  dma_tx_handle.Init.MemInc              = DMA_MINC_ENABLE;
-  dma_tx_handle.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD;
-  dma_tx_handle.Init.MemDataAlignment    = DMA_MDATAALIGN_WORD;
-  dma_tx_handle.Init.Mode                = DMA_PFCTRL;
-  dma_tx_handle.Init.Priority            = DMA_PRIORITY_VERY_HIGH;
-  dma_tx_handle.Init.FIFOMode            = DMA_FIFOMODE_ENABLE;
-  dma_tx_handle.Init.FIFOThreshold       = DMA_FIFO_THRESHOLD_FULL;
-  dma_tx_handle.Init.MemBurst            = DMA_MBURST_INC4;
-  dma_tx_handle.Init.PeriphBurst         = DMA_PBURST_INC4;
-  
-  dma_tx_handle.Instance = SD_DMAx_Tx_STREAM;
-  
-  /* Associate the DMA handle */
-  __HAL_LINKDMA(hsd, hdmatx, dma_tx_handle);
-  
-  /* Deinitialize the stream for new transfer */
-  HAL_DMA_DeInit(&dma_tx_handle);
-  
-  /* Configure the DMA stream */
-  HAL_DMA_Init(&dma_tx_handle); 
-  
-  /* NVIC configuration for DMA transfer complete interrupt */
-  HAL_NVIC_SetPriority(SD_DMAx_Rx_IRQn, 0x0F, 0);
-  HAL_NVIC_EnableIRQ(SD_DMAx_Rx_IRQn);
-  
-  /* NVIC configuration for DMA transfer complete interrupt */
-  HAL_NVIC_SetPriority(SD_DMAx_Tx_IRQn, 0x0F, 0);
-  HAL_NVIC_EnableIRQ(SD_DMAx_Tx_IRQn);
-}
-
-/**
-  * @brief  Initializes the SD Detect pin MSP.
-  * @param  hsd: SD handle
-  * @param  Params
-  * @retval None
-  */
-__weak void BSP_SD_Detect_MspInit(SD_HandleTypeDef *hsd, void *Params)
-{
-  GPIO_InitTypeDef  gpio_init_structure;
-
-  SD_DETECT_GPIO_CLK_ENABLE();
-
-  /* GPIO configuration in input for uSD_Detect signal */
-  gpio_init_structure.Pin       = SD_DETECT_PIN;
-  gpio_init_structure.Mode      = GPIO_MODE_INPUT;
-  gpio_init_structure.Pull      = GPIO_PULLUP;
-  gpio_init_structure.Speed     = GPIO_SPEED_HIGH;
-  HAL_GPIO_Init(SD_DETECT_GPIO_PORT, &gpio_init_structure);
-}
-
-/**
-  * @brief  DeInitializes the SD MSP.
-  * @param  hsd: SD handle
-  * @param  Params
-  * @retval None
-  */
-__weak void BSP_SD_MspDeInit(SD_HandleTypeDef *hsd, void *Params)
-{
-  static DMA_HandleTypeDef dma_rx_handle;
-  static DMA_HandleTypeDef dma_tx_handle;
-
-  /* Disable NVIC for DMA transfer complete interrupts */
-  HAL_NVIC_DisableIRQ(SD_DMAx_Rx_IRQn);
-  HAL_NVIC_DisableIRQ(SD_DMAx_Tx_IRQn);
-
-  /* Deinitialize the stream for new transfer */
-  dma_rx_handle.Instance = SD_DMAx_Rx_STREAM;
-  HAL_DMA_DeInit(&dma_rx_handle);
-
-  /* Deinitialize the stream for new transfer */
-  dma_tx_handle.Instance = SD_DMAx_Tx_STREAM;
-  HAL_DMA_DeInit(&dma_tx_handle);
-
-  /* Disable NVIC for SDIO interrupts */
-  HAL_NVIC_DisableIRQ(SDMMC1_IRQn);
-
-  /* DeInit GPIO pins can be done in the application
-     (by surcharging this __weak function) */
-
-  /* Disable SDMMC1 clock */
-  __HAL_RCC_SDMMC1_CLK_DISABLE();
-
-  /* GPIO pins clock and DMA clocks can be shut down in the application
-     by surcharging this __weak function */
-}
-
-/**
-  * @brief  Gets the current SD card data status.
-  * @retval Data transfer state.
-  *          This value can be one of the following values:
-  *            @arg  SD_TRANSFER_OK: No data transfer is acting
-  *            @arg  SD_TRANSFER_BUSY: Data transfer is acting
-  */
-uint8_t BSP_SD_GetCardState(void)
-{
-  return((HAL_SD_GetCardState(&uSdHandle) == HAL_SD_CARD_TRANSFER ) ? SD_TRANSFER_OK : SD_TRANSFER_BUSY);
-}
-  
-
-/**
-  * @brief  Get SD information about specific SD card.
-  * @param  CardInfo: Pointer to HAL_SD_CardInfoTypedef structure
-  * @retval None 
-  */
-void BSP_SD_GetCardInfo(HAL_SD_CardInfoTypeDef *CardInfo)
-{
-  /* Get SD card Information */
-  HAL_SD_GetCardInfo(&uSdHandle, CardInfo);
-}
-
-/**
-  * @brief SD Abort callbacks
-  * @param hsd: SD handle
-  * @retval None
-  */
-void HAL_SD_AbortCallback(SD_HandleTypeDef *hsd)
-{
-  BSP_SD_AbortCallback();
-}
-
-/**
-  * @brief Tx Transfer completed callbacks
-  * @param hsd: SD handle
-  * @retval None
-  */
-void HAL_SD_TxCpltCallback(SD_HandleTypeDef *hsd)
-{
-  BSP_SD_WriteCpltCallback();
-}
-
-/**
-  * @brief Rx Transfer completed callbacks
-  * @param hsd: SD handle
-  * @retval None
-  */
-void HAL_SD_RxCpltCallback(SD_HandleTypeDef *hsd)
-{
-  BSP_SD_ReadCpltCallback();
-}
-
-/**
-  * @brief BSP SD Abort callbacks
-  * @retval None
-  */
-__weak void BSP_SD_AbortCallback(void)
-{
-
-}
-
-/**
-  * @brief BSP Tx Transfer completed callbacks
-  * @retval None
-  */
-__weak void BSP_SD_WriteCpltCallback(void)
-{
-
-}
-
-/**
-  * @brief BSP Rx Transfer completed callbacks
-  * @retval None
-  */
-__weak void BSP_SD_ReadCpltCallback(void)
-{
-
-}
-
-/**
-  * @}
-  */ 
-
-/**
-  * @}
-  */ 
-
-/**
-  * @}
-  */ 
-
-/**
-  * @}
-  */
- 
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r 85dbcff443aa -r 1a18e061d0ec Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_sd.h
--- a/Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_sd.h	Wed Nov 27 08:29:42 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,161 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    stm32746g_discovery_sd.h
-  * @author  MCD Application Team
-  * @brief   This file contains the common defines and functions prototypes for
-  *          the stm32746g_discovery_sd.c driver.
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT(c) 2016 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.
-  *
-  ******************************************************************************
-  */ 
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __STM32746G_DISCOVERY_SD_H
-#define __STM32746G_DISCOVERY_SD_H
-
-#ifdef __cplusplus
- extern "C" {
-#endif 
-
-/* Includes ------------------------------------------------------------------*/
-#include "stm32746g_discovery.h"
-
-/** @addtogroup BSP
-  * @{
-  */ 
-
-/** @addtogroup STM32746G_DISCOVERY
-  * @{
-  */
-    
-/** @addtogroup STM32746G_DISCOVERY_SD
-  * @{
-  */    
-
-/** @defgroup STM32746G_DISCOVERY_SD_Exported_Types STM32746G_DISCOVERY_SD Exported Types
-  * @{
-  */
-
-/** 
-  * @brief SD Card information structure 
-  */
-#define BSP_SD_CardInfo HAL_SD_CardInfoTypeDef
-/**
-  * @}
-  */
-   
-/** 
-  * @brief  SD status structure definition  
-  */     
-#define MSD_OK                        ((uint8_t)0x00)
-#define MSD_ERROR                     ((uint8_t)0x01)
-#define MSD_ERROR_SD_NOT_PRESENT      ((uint8_t)0x02)
-
-/** 
-  * @brief  SD transfer state definition  
-  */     
-#define   SD_TRANSFER_OK                ((uint8_t)0x00)
-#define   SD_TRANSFER_BUSY              ((uint8_t)0x01)
-   
-/** @defgroup STM32746G_DISCOVERY_SD_Exported_Constants STM32746G_DISCOVERY_SD Exported Constants
-  * @{
-  */ 
-#define SD_PRESENT               ((uint8_t)0x01)
-#define SD_NOT_PRESENT           ((uint8_t)0x00)
-
-#define SD_DATATIMEOUT           ((uint32_t)100000000)
-    
-/* DMA definitions for SD DMA transfer */
-#define __DMAx_TxRx_CLK_ENABLE            __HAL_RCC_DMA2_CLK_ENABLE
-#define SD_DMAx_Tx_CHANNEL                DMA_CHANNEL_4
-#define SD_DMAx_Rx_CHANNEL                DMA_CHANNEL_4
-#define SD_DMAx_Tx_STREAM                 DMA2_Stream6  
-#define SD_DMAx_Rx_STREAM                 DMA2_Stream3  
-#define SD_DMAx_Tx_IRQn                   DMA2_Stream6_IRQn
-#define SD_DMAx_Rx_IRQn                   DMA2_Stream3_IRQn
-#define BSP_SDMMC_IRQHandler              SDMMC1_IRQHandler   
-#define BSP_SDMMC_DMA_Tx_IRQHandler       DMA2_Stream6_IRQHandler
-#define BSP_SDMMC_DMA_Rx_IRQHandler       DMA2_Stream3_IRQHandler   
-#define SD_DetectIRQHandler()             HAL_GPIO_EXTI_IRQHandler(SD_DETECT_PIN)
-/**
-  * @}
-  */
-  
-/** @defgroup STM32746G_DISCOVERY_SD_Exported_Macro STM32746G_DISCOVERY_SD Exported Macro
-  * @{
-  */ 
-/**
-  * @}
-  */
-   
-/** @addtogroup STM32746G_DISCOVERY_SD_Exported_Functions
-  * @{
-  */   
-uint8_t BSP_SD_Init(void);
-uint8_t BSP_SD_DeInit(void);
-uint8_t BSP_SD_ITConfig(void);
-uint8_t BSP_SD_ReadBlocks(uint32_t *pData, uint32_t ReadAddr, uint32_t NumOfBlocks, uint32_t Timeout);
-uint8_t BSP_SD_WriteBlocks(uint32_t *pData, uint32_t WriteAddr, uint32_t NumOfBlocks, uint32_t Timeout);
-uint8_t BSP_SD_ReadBlocks_DMA(uint32_t *pData, uint32_t ReadAddr, uint32_t NumOfBlocks);
-uint8_t BSP_SD_WriteBlocks_DMA(uint32_t *pData, uint32_t WriteAddr, uint32_t NumOfBlocks);
-uint8_t BSP_SD_Erase(uint32_t StartAddr, uint32_t EndAddr);
-uint8_t BSP_SD_GetCardState(void);
-void    BSP_SD_GetCardInfo(HAL_SD_CardInfoTypeDef *CardInfo);
-uint8_t BSP_SD_IsDetected(void);
-
-/* These functions can be modified in case the current settings (e.g. DMA stream)
-   need to be changed for specific application needs */
-void    BSP_SD_MspInit(SD_HandleTypeDef *hsd, void *Params);
-void    BSP_SD_Detect_MspInit(SD_HandleTypeDef *hsd, void *Params);
-void    BSP_SD_MspDeInit(SD_HandleTypeDef *hsd, void *Params);
-void    BSP_SD_AbortCallback(void);
-void    BSP_SD_WriteCpltCallback(void);
-void    BSP_SD_ReadCpltCallback(void);
-/**
-  * @}
-  */ 
-
-/**
-  * @}
-  */ 
-
-/**
-  * @}
-  */ 
-
-/**
-  * @}
-  */ 
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __STM32746G_DISCOVERY_SD_H */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r 85dbcff443aa -r 1a18e061d0ec Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_sdram.c
--- a/Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_sdram.c	Wed Nov 27 08:29:42 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,497 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    stm32746g_discovery_sdram.c
-  * @author  MCD Application Team
-  * @brief   This file includes the SDRAM driver for the MT48LC4M32B2B5-7 memory 
-  *          device mounted on STM32746G-Discovery board.
-  @verbatim
-   1. How To use this driver:
-   --------------------------
-      - This driver is used to drive the MT48LC4M32B2B5-7 SDRAM external memory mounted
-        on STM32746G-Discovery board.
-      - This driver does not need a specific component driver for the SDRAM device
-        to be included with.
-   
-   2. Driver description:
-   ---------------------
-     + Initialization steps:
-        o Initialize the SDRAM external memory using the BSP_SDRAM_Init() function. This 
-          function includes the MSP layer hardware resources initialization and the
-          FMC controller configuration to interface with the external SDRAM memory.
-        o It contains the SDRAM initialization sequence to program the SDRAM external 
-          device using the function BSP_SDRAM_Initialization_sequence(). Note that this 
-          sequence is standard for all SDRAM devices, but can include some differences
-          from a device to another. If it is the case, the right sequence should be 
-          implemented separately.
-     
-     + SDRAM read/write operations
-        o SDRAM external memory can be accessed with read/write operations once it is
-          initialized.
-          Read/write operation can be performed with AHB access using the functions
-          BSP_SDRAM_ReadData()/BSP_SDRAM_WriteData(), or by DMA transfer using the functions
-          BSP_SDRAM_ReadData_DMA()/BSP_SDRAM_WriteData_DMA().
-        o The AHB access is performed with 32-bit width transaction, the DMA transfer
-          configuration is fixed at single (no burst) word transfer (see the 
-          SDRAM_MspInit() static function).
-        o User can implement his own functions for read/write access with his desired 
-          configurations.
-        o If interrupt mode is used for DMA transfer, the function BSP_SDRAM_DMA_IRQHandler()
-          is called in IRQ handler file, to serve the generated interrupt once the DMA 
-          transfer is complete.
-        o You can send a command to the SDRAM device in runtime using the function 
-          BSP_SDRAM_Sendcmd(), and giving the desired command as parameter chosen between 
-          the predefined commands of the "FMC_SDRAM_CommandTypeDef" structure. 
- 
-  @endverbatim
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT(c) 2016 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.
-  *
-  ******************************************************************************
-  */
-
-/* Dependencies
-- stm32f7xx_hal_sdram.c
-- stm32f7xx_ll_fmc.c
-- stm32f7xx_hal_dma.c  
-- stm32f7xx_hal_gpio.c
-- stm32f7xx_hal_cortex.c
-- stm32f7xx_hal_rcc_ex.h
-EndDependencies */
-
-/* Includes ------------------------------------------------------------------*/
-#include "stm32746g_discovery_sdram.h"
-
-/** @addtogroup BSP
-  * @{
-  */
-
-/** @addtogroup STM32746G_DISCOVERY
-  * @{
-  */ 
-  
-/** @defgroup STM32746G_DISCOVERY_SDRAM STM32746G_DISCOVERY_SDRAM
-  * @{
-  */ 
-
-/** @defgroup STM32746G_DISCOVERY_SDRAM_Private_Types_Definitions STM32746G_DISCOVERY_SDRAM Private Types Definitions
-  * @{
-  */ 
-/**
-  * @}
-  */
-
-/** @defgroup STM32746G_DISCOVERY_SDRAM_Private_Defines STM32746G_DISCOVERY_SDRAM Private Defines
-  * @{
-  */
-/**
-  * @}
-  */
-
-/** @defgroup STM32746G_DISCOVERY_SDRAM_Private_Macros STM32746G_DISCOVERY_SDRAM Private Macros
-  * @{
-  */  
-/**
-  * @}
-  */
-
-/** @defgroup STM32746G_DISCOVERY_SDRAM_Private_Variables STM32746G_DISCOVERY_SDRAM Private Variables
-  * @{
-  */       
-SDRAM_HandleTypeDef sdramHandle;
-static FMC_SDRAM_TimingTypeDef Timing;
-static FMC_SDRAM_CommandTypeDef Command;
-/**
-  * @}
-  */ 
-
-/** @defgroup STM32746G_DISCOVERY_SDRAM_Private_Function_Prototypes STM32746G_DISCOVERY_SDRAM Private Function Prototypes
-  * @{
-  */ 
-/**
-  * @}
-  */
-    
-/** @defgroup STM32746G_DISCOVERY_SDRAM_Exported_Functions STM32746G_DISCOVERY_SDRAM Exported Functions
-  * @{
-  */ 
-
-/**
-  * @brief  Initializes the SDRAM device.
-  * @retval SDRAM status
-  */
-uint8_t BSP_SDRAM_Init(void)
-{ 
-  static uint8_t sdramstatus = SDRAM_ERROR;
-  /* SDRAM device configuration */
-  sdramHandle.Instance = FMC_SDRAM_DEVICE;
-    
-  /* Timing configuration for 100Mhz as SD clock frequency (System clock is up to 200Mhz) */
-  Timing.LoadToActiveDelay    = 2;
-  Timing.ExitSelfRefreshDelay = 7;
-  Timing.SelfRefreshTime      = 4;
-  Timing.RowCycleDelay        = 7;
-  Timing.WriteRecoveryTime    = 2;
-  Timing.RPDelay              = 2;
-  Timing.RCDDelay             = 2;
-  
-  sdramHandle.Init.SDBank             = FMC_SDRAM_BANK1;
-  sdramHandle.Init.ColumnBitsNumber   = FMC_SDRAM_COLUMN_BITS_NUM_8;
-  sdramHandle.Init.RowBitsNumber      = FMC_SDRAM_ROW_BITS_NUM_12;
-  sdramHandle.Init.MemoryDataWidth    = SDRAM_MEMORY_WIDTH;
-  sdramHandle.Init.InternalBankNumber = FMC_SDRAM_INTERN_BANKS_NUM_4;
-  sdramHandle.Init.CASLatency         = FMC_SDRAM_CAS_LATENCY_2;
-  sdramHandle.Init.WriteProtection    = FMC_SDRAM_WRITE_PROTECTION_DISABLE;
-  sdramHandle.Init.SDClockPeriod      = SDCLOCK_PERIOD;
-  sdramHandle.Init.ReadBurst          = FMC_SDRAM_RBURST_ENABLE;
-  sdramHandle.Init.ReadPipeDelay      = FMC_SDRAM_RPIPE_DELAY_0;
-  
-  /* SDRAM controller initialization */
-
-  BSP_SDRAM_MspInit(&sdramHandle, NULL); /* __weak function can be rewritten by the application */
-
-  if(HAL_SDRAM_Init(&sdramHandle, &Timing) != HAL_OK)
-  {
-    sdramstatus = SDRAM_ERROR;
-  }
-  else
-  {
-    sdramstatus = SDRAM_OK;
-  }
-  
-  /* SDRAM initialization sequence */
-  BSP_SDRAM_Initialization_sequence(REFRESH_COUNT);
-  
-  return sdramstatus;
-}
-
-/**
-  * @brief  DeInitializes the SDRAM device.
-  * @retval SDRAM status
-  */
-uint8_t BSP_SDRAM_DeInit(void)
-{ 
-  static uint8_t sdramstatus = SDRAM_ERROR;
-  /* SDRAM device de-initialization */
-  sdramHandle.Instance = FMC_SDRAM_DEVICE;
-
-  if(HAL_SDRAM_DeInit(&sdramHandle) != HAL_OK)
-  {
-    sdramstatus = SDRAM_ERROR;
-  }
-  else
-  {
-    sdramstatus = SDRAM_OK;
-  }
-  
-  /* SDRAM controller de-initialization */
-  BSP_SDRAM_MspDeInit(&sdramHandle, NULL);
-  
-  return sdramstatus;
-}
-
-/**
-  * @brief  Programs the SDRAM device.
-  * @param  RefreshCount: SDRAM refresh counter value 
-  * @retval None
-  */
-void BSP_SDRAM_Initialization_sequence(uint32_t RefreshCount)
-{
-  __IO uint32_t tmpmrd = 0;
-  
-  /* Step 1: Configure a clock configuration enable command */
-  Command.CommandMode            = FMC_SDRAM_CMD_CLK_ENABLE;
-  Command.CommandTarget          = FMC_SDRAM_CMD_TARGET_BANK1;
-  Command.AutoRefreshNumber      = 1;
-  Command.ModeRegisterDefinition = 0;
-
-  /* Send the command */
-  HAL_SDRAM_SendCommand(&sdramHandle, &Command, SDRAM_TIMEOUT);
-
-  /* Step 2: Insert 100 us minimum delay */ 
-  /* Inserted delay is equal to 1 ms due to systick time base unit (ms) */
-  HAL_Delay(1);
-    
-  /* Step 3: Configure a PALL (precharge all) command */ 
-  Command.CommandMode            = FMC_SDRAM_CMD_PALL;
-  Command.CommandTarget          = FMC_SDRAM_CMD_TARGET_BANK1;
-  Command.AutoRefreshNumber      = 1;
-  Command.ModeRegisterDefinition = 0;
-
-  /* Send the command */
-  HAL_SDRAM_SendCommand(&sdramHandle, &Command, SDRAM_TIMEOUT);  
-  
-  /* Step 4: Configure an Auto Refresh command */ 
-  Command.CommandMode            = FMC_SDRAM_CMD_AUTOREFRESH_MODE;
-  Command.CommandTarget          = FMC_SDRAM_CMD_TARGET_BANK1;
-  Command.AutoRefreshNumber      = 8;
-  Command.ModeRegisterDefinition = 0;
-
-  /* Send the command */
-  HAL_SDRAM_SendCommand(&sdramHandle, &Command, SDRAM_TIMEOUT);
-  
-  /* Step 5: Program the external memory mode register */
-  tmpmrd = (uint32_t)SDRAM_MODEREG_BURST_LENGTH_1          |\
-                     SDRAM_MODEREG_BURST_TYPE_SEQUENTIAL   |\
-                     SDRAM_MODEREG_CAS_LATENCY_2           |\
-                     SDRAM_MODEREG_OPERATING_MODE_STANDARD |\
-                     SDRAM_MODEREG_WRITEBURST_MODE_SINGLE;
-  
-  Command.CommandMode            = FMC_SDRAM_CMD_LOAD_MODE;
-  Command.CommandTarget          = FMC_SDRAM_CMD_TARGET_BANK1;
-  Command.AutoRefreshNumber      = 1;
-  Command.ModeRegisterDefinition = tmpmrd;
-
-  /* Send the command */
-  HAL_SDRAM_SendCommand(&sdramHandle, &Command, SDRAM_TIMEOUT);
-  
-  /* Step 6: Set the refresh rate counter */
-  /* Set the device refresh rate */
-  HAL_SDRAM_ProgramRefreshRate(&sdramHandle, RefreshCount); 
-}
-
-/**
-  * @brief  Reads an amount of data from the SDRAM memory in polling mode.
-  * @param  uwStartAddress: Read start address
-  * @param  pData: Pointer to data to be read  
-  * @param  uwDataSize: Size of read data from the memory
-  * @retval SDRAM status
-  */
-uint8_t BSP_SDRAM_ReadData(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize)
-{
-  if(HAL_SDRAM_Read_32b(&sdramHandle, (uint32_t *)uwStartAddress, pData, uwDataSize) != HAL_OK)
-  {
-    return SDRAM_ERROR;
-  }
-  else
-  {
-    return SDRAM_OK;
-  } 
-}
-
-/**
-  * @brief  Reads an amount of data from the SDRAM memory in DMA mode.
-  * @param  uwStartAddress: Read start address
-  * @param  pData: Pointer to data to be read  
-  * @param  uwDataSize: Size of read data from the memory
-  * @retval SDRAM status
-  */
-uint8_t BSP_SDRAM_ReadData_DMA(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize)
-{
-  if(HAL_SDRAM_Read_DMA(&sdramHandle, (uint32_t *)uwStartAddress, pData, uwDataSize) != HAL_OK)
-  {
-    return SDRAM_ERROR;
-  }
-  else
-  {
-    return SDRAM_OK;
-  }     
-}
-
-/**
-  * @brief  Writes an amount of data to the SDRAM memory in polling mode.
-  * @param  uwStartAddress: Write start address
-  * @param  pData: Pointer to data to be written  
-  * @param  uwDataSize: Size of written data from the memory
-  * @retval SDRAM status
-  */
-uint8_t BSP_SDRAM_WriteData(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize) 
-{
-  if(HAL_SDRAM_Write_32b(&sdramHandle, (uint32_t *)uwStartAddress, pData, uwDataSize) != HAL_OK)
-  {
-    return SDRAM_ERROR;
-  }
-  else
-  {
-    return SDRAM_OK;
-  }
-}
-
-/**
-  * @brief  Writes an amount of data to the SDRAM memory in DMA mode.
-  * @param  uwStartAddress: Write start address
-  * @param  pData: Pointer to data to be written  
-  * @param  uwDataSize: Size of written data from the memory
-  * @retval SDRAM status
-  */
-uint8_t BSP_SDRAM_WriteData_DMA(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize) 
-{
-  if(HAL_SDRAM_Write_DMA(&sdramHandle, (uint32_t *)uwStartAddress, pData, uwDataSize) != HAL_OK)
-  {
-    return SDRAM_ERROR;
-  }
-  else
-  {
-    return SDRAM_OK;
-  } 
-}
-
-/**
-  * @brief  Sends command to the SDRAM bank.
-  * @param  SdramCmd: Pointer to SDRAM command structure 
-  * @retval SDRAM status
-  */  
-uint8_t BSP_SDRAM_Sendcmd(FMC_SDRAM_CommandTypeDef *SdramCmd)
-{
-  if(HAL_SDRAM_SendCommand(&sdramHandle, SdramCmd, SDRAM_TIMEOUT) != HAL_OK)
-  {
-    return SDRAM_ERROR;
-  }
-  else
-  {
-    return SDRAM_OK;
-  }
-}
-
-/**
-  * @brief  Initializes SDRAM MSP.
-  * @param  hsdram: SDRAM handle
-  * @param  Params
-  * @retval None
-  */
-__weak void BSP_SDRAM_MspInit(SDRAM_HandleTypeDef  *hsdram, void *Params)
-{  
-  static DMA_HandleTypeDef dma_handle;
-  GPIO_InitTypeDef gpio_init_structure;
-  
-  /* Enable FMC clock */
-  __HAL_RCC_FMC_CLK_ENABLE();
-  
-  /* Enable chosen DMAx clock */
-  __DMAx_CLK_ENABLE();
-
-  /* Enable GPIOs clock */
-  __HAL_RCC_GPIOC_CLK_ENABLE();
-  __HAL_RCC_GPIOD_CLK_ENABLE();
-  __HAL_RCC_GPIOE_CLK_ENABLE();
-  __HAL_RCC_GPIOF_CLK_ENABLE();
-  __HAL_RCC_GPIOG_CLK_ENABLE();
-  __HAL_RCC_GPIOH_CLK_ENABLE();
-  
-  /* Common GPIO configuration */
-  gpio_init_structure.Mode      = GPIO_MODE_AF_PP;
-  gpio_init_structure.Pull      = GPIO_PULLUP;
-  gpio_init_structure.Speed     = GPIO_SPEED_FAST;
-  gpio_init_structure.Alternate = GPIO_AF12_FMC;
-  
-  /* GPIOC configuration */
-  gpio_init_structure.Pin   = GPIO_PIN_3;
-  HAL_GPIO_Init(GPIOC, &gpio_init_structure);
-
-  /* GPIOD configuration */
-  gpio_init_structure.Pin   = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_8 | GPIO_PIN_9 |
-                              GPIO_PIN_10 | GPIO_PIN_14 | GPIO_PIN_15;
-  HAL_GPIO_Init(GPIOD, &gpio_init_structure);
-
-  /* GPIOE configuration */  
-  gpio_init_structure.Pin   = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_7| GPIO_PIN_8 | GPIO_PIN_9 |\
-                              GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 |\
-                              GPIO_PIN_15;
-  HAL_GPIO_Init(GPIOE, &gpio_init_structure);
-  
-  /* GPIOF configuration */  
-  gpio_init_structure.Pin   = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2| GPIO_PIN_3 | GPIO_PIN_4 |\
-                              GPIO_PIN_5 | GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 |\
-                              GPIO_PIN_15;
-  HAL_GPIO_Init(GPIOF, &gpio_init_structure);
-  
-  /* GPIOG configuration */  
-  gpio_init_structure.Pin   = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_4| GPIO_PIN_5 | GPIO_PIN_8 |\
-                              GPIO_PIN_15;
-  HAL_GPIO_Init(GPIOG, &gpio_init_structure);
-
-  /* GPIOH configuration */  
-  gpio_init_structure.Pin   = GPIO_PIN_3 | GPIO_PIN_5;
-  HAL_GPIO_Init(GPIOH, &gpio_init_structure); 
-  
-  /* Configure common DMA parameters */
-  dma_handle.Init.Channel             = SDRAM_DMAx_CHANNEL;
-  dma_handle.Init.Direction           = DMA_MEMORY_TO_MEMORY;
-  dma_handle.Init.PeriphInc           = DMA_PINC_ENABLE;
-  dma_handle.Init.MemInc              = DMA_MINC_ENABLE;
-  dma_handle.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD;
-  dma_handle.Init.MemDataAlignment    = DMA_MDATAALIGN_WORD;
-  dma_handle.Init.Mode                = DMA_NORMAL;
-  dma_handle.Init.Priority            = DMA_PRIORITY_HIGH;
-  dma_handle.Init.FIFOMode            = DMA_FIFOMODE_DISABLE;         
-  dma_handle.Init.FIFOThreshold       = DMA_FIFO_THRESHOLD_FULL;
-  dma_handle.Init.MemBurst            = DMA_MBURST_SINGLE;
-  dma_handle.Init.PeriphBurst         = DMA_PBURST_SINGLE; 
-  
-  dma_handle.Instance = SDRAM_DMAx_STREAM;
-  
-   /* Associate the DMA handle */
-  __HAL_LINKDMA(hsdram, hdma, dma_handle);
-  
-  /* Deinitialize the stream for new transfer */
-  HAL_DMA_DeInit(&dma_handle);
-  
-  /* Configure the DMA stream */
-  HAL_DMA_Init(&dma_handle); 
-  
-  /* NVIC configuration for DMA transfer complete interrupt */
-  HAL_NVIC_SetPriority(SDRAM_DMAx_IRQn, 0x0F, 0);
-  HAL_NVIC_EnableIRQ(SDRAM_DMAx_IRQn);
-}
-
-/**
-  * @brief  DeInitializes SDRAM MSP.
-  * @param  hsdram: SDRAM handle
-  * @param  Params
-  * @retval None
-  */
-__weak void BSP_SDRAM_MspDeInit(SDRAM_HandleTypeDef  *hsdram, void *Params)
-{  
-    static DMA_HandleTypeDef dma_handle;
-  
-    /* Disable NVIC configuration for DMA interrupt */
-    HAL_NVIC_DisableIRQ(SDRAM_DMAx_IRQn);
-
-    /* Deinitialize the stream for new transfer */
-    dma_handle.Instance = SDRAM_DMAx_STREAM;
-    HAL_DMA_DeInit(&dma_handle);
-
-    /* GPIO pins clock, FMC clock and DMA clock can be shut down in the applications
-       by surcharging this __weak function */ 
-}
-
-/**
-  * @}
-  */  
-  
-/**
-  * @}
-  */ 
-  
-/**
-  * @}
-  */ 
-  
-/**
-  * @}
-  */ 
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r 85dbcff443aa -r 1a18e061d0ec Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_sdram.h
--- a/Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_sdram.h	Wed Nov 27 08:29:42 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,162 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    stm32746g_discovery_sdram.h
-  * @author  MCD Application Team
-  * @brief   This file contains the common defines and functions prototypes for
-  *          the stm32746g_discovery_sdram.c driver.
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT(c) 2016 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.
-  *
-  ******************************************************************************
-  */ 
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __STM32746G_DISCOVERY_SDRAM_H
-#define __STM32746G_DISCOVERY_SDRAM_H
-
-#ifdef __cplusplus
- extern "C" {
-#endif 
-
-/* Includes ------------------------------------------------------------------*/
-#include "stm32f7xx_hal.h"
-
-/** @addtogroup BSP
-  * @{
-  */ 
-
-/** @addtogroup STM32746G_DISCOVERY
-  * @{
-  */
-    
-/** @addtogroup STM32746G_DISCOVERY_SDRAM
-  * @{
-  */    
-
-/** @defgroup STM32746G_DISCOVERY_SDRAM_Exported_Types STM32746G_DISCOVERY_SDRAM Exported Types
-  * @{
-  */
-
-/** 
-  * @brief  SDRAM status structure definition  
-  */     
-#define   SDRAM_OK         ((uint8_t)0x00)
-#define   SDRAM_ERROR      ((uint8_t)0x01)
-
-/** @defgroup STM32746G_DISCOVERY_SDRAM_Exported_Constants STM32746G_DISCOVERY_SDRAM Exported Constants
-  * @{
-  */ 
-#define SDRAM_DEVICE_ADDR  ((uint32_t)0xC0000000)
-#define SDRAM_DEVICE_SIZE  ((uint32_t)0x800000)  /* SDRAM device size in MBytes */
-
-/* #define SDRAM_MEMORY_WIDTH            FMC_SDRAM_MEM_BUS_WIDTH_8  */
-#define SDRAM_MEMORY_WIDTH               FMC_SDRAM_MEM_BUS_WIDTH_16
-
-#define SDCLOCK_PERIOD                   FMC_SDRAM_CLOCK_PERIOD_2
-/* #define SDCLOCK_PERIOD                FMC_SDRAM_CLOCK_PERIOD_3 */   
-
-#define REFRESH_COUNT                    ((uint32_t)0x0603)   /* SDRAM refresh counter (100Mhz SD clock) */
-   
-#define SDRAM_TIMEOUT                    ((uint32_t)0xFFFF)
-
-/* DMA definitions for SDRAM DMA transfer */
-#define __DMAx_CLK_ENABLE                 __HAL_RCC_DMA2_CLK_ENABLE
-#define __DMAx_CLK_DISABLE                __HAL_RCC_DMA2_CLK_DISABLE
-#define SDRAM_DMAx_CHANNEL                DMA_CHANNEL_0
-#define SDRAM_DMAx_STREAM                 DMA2_Stream0  
-#define SDRAM_DMAx_IRQn                   DMA2_Stream0_IRQn
-#define BSP_SDRAM_DMA_IRQHandler          DMA2_Stream0_IRQHandler  
-/**
-  * @}
-  */ 
-  
-/**
-  * @brief  FMC SDRAM Mode definition register defines
-  */
-#define SDRAM_MODEREG_BURST_LENGTH_1             ((uint16_t)0x0000)
-#define SDRAM_MODEREG_BURST_LENGTH_2             ((uint16_t)0x0001)
-#define SDRAM_MODEREG_BURST_LENGTH_4             ((uint16_t)0x0002)
-#define SDRAM_MODEREG_BURST_LENGTH_8             ((uint16_t)0x0004)
-#define SDRAM_MODEREG_BURST_TYPE_SEQUENTIAL      ((uint16_t)0x0000)
-#define SDRAM_MODEREG_BURST_TYPE_INTERLEAVED     ((uint16_t)0x0008)
-#define SDRAM_MODEREG_CAS_LATENCY_2              ((uint16_t)0x0020)
-#define SDRAM_MODEREG_CAS_LATENCY_3              ((uint16_t)0x0030)
-#define SDRAM_MODEREG_OPERATING_MODE_STANDARD    ((uint16_t)0x0000)
-#define SDRAM_MODEREG_WRITEBURST_MODE_PROGRAMMED ((uint16_t)0x0000) 
-#define SDRAM_MODEREG_WRITEBURST_MODE_SINGLE     ((uint16_t)0x0200) 
-/**
-  * @}
-  */ 
-  
-/** @defgroup STM32746G_DISCOVERY_SDRAM_Exported_Macro STM32746G_DISCOVERY_SDRAM Exported Macro
-  * @{
-  */  
-/**
-  * @}
-  */ 
-   
-/** @addtogroup STM32746G_DISCOVERY_SDRAM_Exported_Functions
-  * @{
-  */  
-uint8_t BSP_SDRAM_Init(void);
-uint8_t BSP_SDRAM_DeInit(void);
-void    BSP_SDRAM_Initialization_sequence(uint32_t RefreshCount);
-uint8_t BSP_SDRAM_ReadData(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize);
-uint8_t BSP_SDRAM_ReadData_DMA(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize);
-uint8_t BSP_SDRAM_WriteData(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize);
-uint8_t BSP_SDRAM_WriteData_DMA(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize);
-uint8_t BSP_SDRAM_Sendcmd(FMC_SDRAM_CommandTypeDef *SdramCmd);
-   
-/* These functions can be modified in case the current settings (e.g. DMA stream)
-   need to be changed for specific application needs */
-void    BSP_SDRAM_MspInit(SDRAM_HandleTypeDef  *hsdram, void *Params);
-void    BSP_SDRAM_MspDeInit(SDRAM_HandleTypeDef  *hsdram, void *Params);
-
-
-/**
-  * @}
-  */ 
-
-/**
-  * @}
-  */ 
-
-/**
-  * @}
-  */ 
-
-/**
-  * @}
-  */ 
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __STM32746G_DISCOVERY_SDRAM_H */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r 85dbcff443aa -r 1a18e061d0ec Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_ts.c
--- a/Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_ts.c	Wed Nov 27 08:29:42 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,450 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    stm32746g_discovery_ts.c
-  * @author  MCD Application Team
-  * @brief   This file provides a set of functions needed to manage the Touch 
-  *          Screen on STM32746G-Discovery board.
-  @verbatim
-   1. How To use this driver:
-   --------------------------
-      - This driver is used to drive the touch screen module of the STM32746G-Discovery
-        board on the RK043FN48H-CT672B 480x272 LCD screen with capacitive touch screen.
-      - The FT5336 component driver must be included in project files according to
-        the touch screen driver present on this board.
-   
-   2. Driver description:
-   ---------------------
-     + Initialization steps:
-        o Initialize the TS module using the BSP_TS_Init() function. This 
-          function includes the MSP layer hardware resources initialization and the
-          communication layer configuration to start the TS use. The LCD size properties
-          (x and y) are passed as parameters.
-        o If TS interrupt mode is desired, you must configure the TS interrupt mode
-          by calling the function BSP_TS_ITConfig(). The TS interrupt mode is generated
-          as an external interrupt whenever a touch is detected. 
-          The interrupt mode internally uses the IO functionalities driver driven by
-          the IO expander, to configure the IT line.
-     
-     + Touch screen use
-        o The touch screen state is captured whenever the function BSP_TS_GetState() is 
-          used. This function returns information about the last LCD touch occurred
-          in the TS_StateTypeDef structure.
-        o If TS interrupt mode is used, the function BSP_TS_ITGetStatus() is needed to get
-          the interrupt status. To clear the IT pending bits, you should call the 
-          function BSP_TS_ITClear().
-        o The IT is handled using the corresponding external interrupt IRQ handler,
-          the user IT callback treatment is implemented on the same external interrupt
-          callback.
-  @endverbatim
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT(c) 2016 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.
-  *
-  ******************************************************************************
-  */ 
-
-/* Dependencies
-- stm32746g_discovery_lcd.c
-- ft5336.c
-EndDependencies */
-
-/* Includes ------------------------------------------------------------------*/
-#include "stm32746g_discovery_ts.h"
-
-/** @addtogroup BSP
-  * @{
-  */
-
-/** @addtogroup STM32746G_DISCOVERY
-  * @{
-  */ 
-  
-/** @defgroup STM32746G_DISCOVERY_TS STM32746G_DISCOVERY_TS
-  * @{
-  */   
-
-/** @defgroup STM32746G_DISCOVERY_TS_Private_Types_Definitions STM32746G_DISCOVERY_TS Types Definitions
-  * @{
-  */ 
-/**
-  * @}
-  */ 
-
-/** @defgroup STM32746G_DISCOVERY_TS_Private_Defines STM32746G_DISCOVERY_TS Types Defines
-  * @{
-  */ 
-/**
-  * @}
-  */ 
-
-/** @defgroup STM32746G_DISCOVERY_TS_Private_Macros STM32746G_DISCOVERY_TS Private Macros
-  * @{
-  */ 
-/**
-  * @}
-  */
-
-/** @defgroup STM32746G_DISCOVERY_TS_Imported_Variables STM32746G_DISCOVERY_TS Imported Variables
-  * @{
-  */
-  /**
-    * @}
-    */
-
-/** @defgroup STM32746G_DISCOVERY_TS_Private_Variables STM32746G_DISCOVERY_TS Private Variables
-  * @{
-  */ 
-static TS_DrvTypeDef *tsDriver;
-static uint16_t tsXBoundary, tsYBoundary; 
-static uint8_t  tsOrientation;
-static uint8_t  I2cAddress;
-/**
-  * @}
-  */ 
-
-/** @defgroup STM32746G_DISCOVERY_TS_Private_Function_Prototypes STM32746G_DISCOVERY_TS Private Function Prototypes
-  * @{
-  */ 
-/**
-  * @}
-  */ 
-
-/** @defgroup STM32746G_DISCOVERY_TS_Exported_Functions STM32746G_DISCOVERY_TS Exported Functions
-  * @{
-  */ 
-
-/**
-  * @brief  Initializes and configures the touch screen functionalities and 
-  *         configures all necessary hardware resources (GPIOs, I2C, clocks..).
-  * @param  ts_SizeX: Maximum X size of the TS area on LCD
-  * @param  ts_SizeY: Maximum Y size of the TS area on LCD
-  * @retval TS_OK if all initializations are OK. Other value if error.
-  */
-uint8_t BSP_TS_Init(uint16_t ts_SizeX, uint16_t ts_SizeY)
-{
-  uint8_t status = TS_OK;
-  tsXBoundary = ts_SizeX;
-  tsYBoundary = ts_SizeY;
-  
-  /* Read ID and verify if the touch screen driver is ready */
-  ft5336_ts_drv.Init(TS_I2C_ADDRESS);
-  if(ft5336_ts_drv.ReadID(TS_I2C_ADDRESS) == FT5336_ID_VALUE)
-  { 
-    /* Initialize the TS driver structure */
-    tsDriver = &ft5336_ts_drv;
-    I2cAddress = TS_I2C_ADDRESS;
-    tsOrientation = TS_SWAP_XY;
-
-    /* Initialize the TS driver */
-    tsDriver->Start(I2cAddress);
-  }
-  else
-  {
-    status = TS_DEVICE_NOT_FOUND;
-  }
-
-  return status;
-}
-
-/**
-  * @brief  DeInitializes the TouchScreen.
-  * @retval TS state
-  */
-uint8_t BSP_TS_DeInit(void)
-{ 
-  /* Actually ts_driver does not provide a DeInit function */
-  return TS_OK;
-}
-
-/**
-  * @brief  Configures and enables the touch screen interrupts.
-  * @retval TS_OK if all initializations are OK. Other value if error.
-  */
-uint8_t BSP_TS_ITConfig(void)
-{
-  GPIO_InitTypeDef gpio_init_structure;
-
-  /* Configure Interrupt mode for SD detection pin */
-  gpio_init_structure.Pin = TS_INT_PIN;
-  gpio_init_structure.Pull = GPIO_NOPULL;
-  gpio_init_structure.Speed = GPIO_SPEED_FAST;
-  gpio_init_structure.Mode = GPIO_MODE_IT_RISING;
-  HAL_GPIO_Init(TS_INT_GPIO_PORT, &gpio_init_structure);
-
-  /* Enable and set Touch screen EXTI Interrupt to the lowest priority */
-  HAL_NVIC_SetPriority((IRQn_Type)(TS_INT_EXTI_IRQn), 0x0F, 0x00);
-  HAL_NVIC_EnableIRQ((IRQn_Type)(TS_INT_EXTI_IRQn));
-
-  /* Enable the TS ITs */
-  tsDriver->EnableIT(I2cAddress);
-
-  return TS_OK;  
-}
-
-/**
-  * @brief  Gets the touch screen interrupt status.
-  * @retval TS_OK if all initializations are OK. Other value if error.
-  */
-uint8_t BSP_TS_ITGetStatus(void)
-{
-  /* Return the TS IT status */
-  return (tsDriver->GetITStatus(I2cAddress));
-}
-
-/**
-  * @brief  Returns status and positions of the touch screen.
-  * @param  TS_State: Pointer to touch screen current state structure
-  * @retval TS_OK if all initializations are OK. Other value if error.
-  */
-uint8_t BSP_TS_GetState(TS_StateTypeDef *TS_State)
-{
-  static uint32_t _x[TS_MAX_NB_TOUCH] = {0, 0};
-  static uint32_t _y[TS_MAX_NB_TOUCH] = {0, 0};
-  uint8_t ts_status = TS_OK;
-  uint16_t x[TS_MAX_NB_TOUCH];
-  uint16_t y[TS_MAX_NB_TOUCH];
-  uint16_t brute_x[TS_MAX_NB_TOUCH];
-  uint16_t brute_y[TS_MAX_NB_TOUCH];
-  uint16_t x_diff;
-  uint16_t y_diff;
-  uint32_t index;
-#if (TS_MULTI_TOUCH_SUPPORTED == 1)
-  uint32_t weight = 0;
-  uint32_t area = 0;
-  uint32_t event = 0;
-#endif /* TS_MULTI_TOUCH_SUPPORTED == 1 */
-
-  /* Check and update the number of touches active detected */
-  TS_State->touchDetected = tsDriver->DetectTouch(I2cAddress);
-  
-  if(TS_State->touchDetected)
-  {
-    for(index=0; index < TS_State->touchDetected; index++)
-    {
-      /* Get each touch coordinates */
-      tsDriver->GetXY(I2cAddress, &(brute_x[index]), &(brute_y[index]));
-
-      if(tsOrientation == TS_SWAP_NONE)
-      {
-        x[index] = brute_x[index];
-        y[index] = brute_y[index];
-      }
-
-      if(tsOrientation & TS_SWAP_X)
-      {
-        x[index] = 4096 - brute_x[index];
-      }
-
-      if(tsOrientation & TS_SWAP_Y)
-      {
-        y[index] = 4096 - brute_y[index];
-      }
-
-      if(tsOrientation & TS_SWAP_XY)
-      {
-        y[index] = brute_x[index];
-        x[index] = brute_y[index];
-      }
-
-      x_diff = x[index] > _x[index]? (x[index] - _x[index]): (_x[index] - x[index]);
-      y_diff = y[index] > _y[index]? (y[index] - _y[index]): (_y[index] - y[index]);
-
-      if ((x_diff + y_diff) > 5)
-      {
-        _x[index] = x[index];
-        _y[index] = y[index];
-      }
-
-      if(I2cAddress == FT5336_I2C_SLAVE_ADDRESS)
-      {
-        TS_State->touchX[index] = x[index];
-        TS_State->touchY[index] = y[index];
-      }
-      else
-      {
-        /* 2^12 = 4096 : indexes are expressed on a dynamic of 4096 */
-        TS_State->touchX[index] = (tsXBoundary * _x[index]) >> 12;
-        TS_State->touchY[index] = (tsYBoundary * _y[index]) >> 12;
-      }
-
-#if (TS_MULTI_TOUCH_SUPPORTED == 1)
-
-      /* Get touch info related to the current touch */
-      ft5336_TS_GetTouchInfo(I2cAddress, index, &weight, &area, &event);
-
-      /* Update TS_State structure */
-      TS_State->touchWeight[index] = weight;
-      TS_State->touchArea[index]   = area;
-
-      /* Remap touch event */
-      switch(event)
-      {
-        case FT5336_TOUCH_EVT_FLAG_PRESS_DOWN	:
-          TS_State->touchEventId[index] = TOUCH_EVENT_PRESS_DOWN;
-          break;
-        case FT5336_TOUCH_EVT_FLAG_LIFT_UP :
-          TS_State->touchEventId[index] = TOUCH_EVENT_LIFT_UP;
-          break;
-        case FT5336_TOUCH_EVT_FLAG_CONTACT :
-          TS_State->touchEventId[index] = TOUCH_EVENT_CONTACT;
-          break;
-        case FT5336_TOUCH_EVT_FLAG_NO_EVENT :
-          TS_State->touchEventId[index] = TOUCH_EVENT_NO_EVT;
-          break;
-        default :
-          ts_status = TS_ERROR;
-          break;
-      } /* of switch(event) */
-
-#endif /* TS_MULTI_TOUCH_SUPPORTED == 1 */
-
-    } /* of for(index=0; index < TS_State->touchDetected; index++) */
-
-#if (TS_MULTI_TOUCH_SUPPORTED == 1)
-    /* Get gesture Id */
-    ts_status = BSP_TS_Get_GestureId(TS_State);
-#endif /* TS_MULTI_TOUCH_SUPPORTED == 1 */
-
-  } /* end of if(TS_State->touchDetected != 0) */
-
-  return (ts_status);
-}
-
-#if (TS_MULTI_TOUCH_SUPPORTED == 1)
-/**
-  * @brief  Update gesture Id following a touch detected.
-  * @param  TS_State: Pointer to touch screen current state structure
-  * @retval TS_OK if all initializations are OK. Other value if error.
-  */
-uint8_t BSP_TS_Get_GestureId(TS_StateTypeDef *TS_State)
-{
-  uint32_t gestureId = 0;
-  uint8_t  ts_status = TS_OK;
-
-  /* Get gesture Id */
-  ft5336_TS_GetGestureID(I2cAddress, &gestureId);
-
-  /* Remap gesture Id to a TS_GestureIdTypeDef value */
-  switch(gestureId)
-  {
-    case FT5336_GEST_ID_NO_GESTURE :
-      TS_State->gestureId = GEST_ID_NO_GESTURE;
-      break;
-    case FT5336_GEST_ID_MOVE_UP :
-      TS_State->gestureId = GEST_ID_MOVE_UP;
-      break;
-    case FT5336_GEST_ID_MOVE_RIGHT :
-      TS_State->gestureId = GEST_ID_MOVE_RIGHT;
-      break;
-    case FT5336_GEST_ID_MOVE_DOWN :
-      TS_State->gestureId = GEST_ID_MOVE_DOWN;
-      break;
-    case FT5336_GEST_ID_MOVE_LEFT :
-      TS_State->gestureId = GEST_ID_MOVE_LEFT;
-      break;
-    case FT5336_GEST_ID_ZOOM_IN :
-      TS_State->gestureId = GEST_ID_ZOOM_IN;
-      break;
-    case FT5336_GEST_ID_ZOOM_OUT :
-      TS_State->gestureId = GEST_ID_ZOOM_OUT;
-      break;
-    default :
-      ts_status = TS_ERROR;
-      break;
-  } /* of switch(gestureId) */
-
-  return(ts_status);
-}
-#endif /* TS_MULTI_TOUCH_SUPPORTED == 1 */
-
-/**
-  * @brief  Clears all touch screen interrupts.
-  */
-void BSP_TS_ITClear(void)
-{
-  /* Clear TS IT pending bits */
-  tsDriver->ClearIT(I2cAddress); 
-}
-
-
-/** @defgroup STM32756G_DISCOVERY_TS_Private_Functions TS Private Functions
-  * @{
-  */
-
-
-/**
-  * @brief  Function used to reset all touch data before a new acquisition
-  *         of touch information.
-  * @param  TS_State: Pointer to touch screen current state structure
-  * @retval TS_OK if OK, TE_ERROR if problem found.
-  */
-uint8_t BSP_TS_ResetTouchData(TS_StateTypeDef *TS_State)
-{
-  uint8_t ts_status = TS_ERROR;
-  uint32_t index;
-
-  if (TS_State != (TS_StateTypeDef *)NULL)
-  {
-    TS_State->gestureId = GEST_ID_NO_GESTURE;
-    TS_State->touchDetected = 0;
-
-    for(index = 0; index < TS_MAX_NB_TOUCH; index++)
-    {
-      TS_State->touchX[index]       = 0;
-      TS_State->touchY[index]       = 0;
-      TS_State->touchArea[index]    = 0;
-      TS_State->touchEventId[index] = TOUCH_EVENT_NO_EVT;
-      TS_State->touchWeight[index]  = 0;
-    }
-
-    ts_status = TS_OK;
-
-  } /* of if (TS_State != (TS_StateTypeDef *)NULL) */
-
-  return (ts_status);
-}
-
-/**
-  * @}
-  */ 
-
-/**
-  * @}
-  */ 
-
-/**
-  * @}
-  */ 
-
-/**
-  * @}
-  */  
-
-/**
-  * @}
-  */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r 85dbcff443aa -r 1a18e061d0ec Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_ts.h
--- a/Drivers/BSP/STM32746G-Discovery/stm32746g_discovery_ts.h	Wed Nov 27 08:29:42 2019 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,212 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    stm32746g_discovery_ts.h
-  * @author  MCD Application Team
-  * @brief   This file contains the common defines and functions prototypes for
-  *          the stm32746g_discovery_ts.c driver.
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT(c) 2016 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.
-  *
-  ******************************************************************************
-  */ 
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __STM32746G_DISCOVERY_TS_H
-#define __STM32746G_DISCOVERY_TS_H
-
-#ifdef __cplusplus
- extern "C" {
-#endif   
-   
-/* Includes ------------------------------------------------------------------*/
-#include "stm32746g_discovery.h"
-/* Include touch screen FT5336 component Driver */
-#include "../Components/ft5336/ft5336.h"
-   
-/** @addtogroup BSP
-  * @{
-  */ 
-
-/** @addtogroup STM32746G_DISCOVERY
-  * @{
-  */
-    
-/** @addtogroup STM32746G_DISCOVERY_TS
-  * @{
-  */
-
- /** @defgroup STM32746G_DISCOVERY_TS_Exported_Constants STM32746G_DISCOVERY_TS Exported Constants
-   * @{
-   */
-
-/** @brief With FT5336 : maximum 5 touches detected simultaneously
-  */
-#define TS_MAX_NB_TOUCH                 ((uint32_t) FT5336_MAX_DETECTABLE_TOUCH)
-
-#define TS_NO_IRQ_PENDING               ((uint8_t) 0)
-#define TS_IRQ_PENDING                  ((uint8_t) 1)
-
-#define TS_SWAP_NONE                    ((uint8_t) 0x01)
-#define TS_SWAP_X                       ((uint8_t) 0x02)
-#define TS_SWAP_Y                       ((uint8_t) 0x04)
-#define TS_SWAP_XY                      ((uint8_t) 0x08)
-
-/**
-  * @}
-  */
-
-/** @defgroup STM32746G_DISCOVERY_TS_Exported_Types  STM32746G_DISCOVERY_TS Exported Types
-  * @{
-  */
-/**
-*  @brief TS_StateTypeDef
-*  Define TS State structure
-*/
-typedef struct
-{
-  uint8_t  touchDetected;                /*!< Total number of active touches detected at last scan */
-  uint16_t touchX[TS_MAX_NB_TOUCH];      /*!< Touch X[0], X[1] coordinates on 12 bits */
-  uint16_t touchY[TS_MAX_NB_TOUCH];      /*!< Touch Y[0], Y[1] coordinates on 12 bits */
-
-#if (TS_MULTI_TOUCH_SUPPORTED == 1)
-  uint8_t  touchWeight[TS_MAX_NB_TOUCH]; /*!< Touch_Weight[0], Touch_Weight[1] : weight property of touches */
-  uint8_t  touchEventId[TS_MAX_NB_TOUCH];     /*!< Touch_EventId[0], Touch_EventId[1] : take value of type @ref TS_TouchEventTypeDef */
-  uint8_t  touchArea[TS_MAX_NB_TOUCH];   /*!< Touch_Area[0], Touch_Area[1] : touch area of each touch */
-  uint32_t gestureId; /*!< type of gesture detected : take value of type @ref TS_GestureIdTypeDef */
-#endif  /* TS_MULTI_TOUCH_SUPPORTED == 1 */
-
-} TS_StateTypeDef;
-
-/**
-  * @}
-  */ 
-
-/** @defgroup STM32746G_DISCOVERY_TS_Exported_Constants STM32746G_DISCOVERY_TS Exported Constants
-  * @{
-  */
-
-typedef enum 
-{
-  TS_OK                = 0x00, /*!< Touch Ok */
-  TS_ERROR             = 0x01, /*!< Touch Error */
-  TS_TIMEOUT           = 0x02, /*!< Touch Timeout */
-  TS_DEVICE_NOT_FOUND  = 0x03  /*!< Touchscreen device not found */
-}TS_StatusTypeDef;
-
-/**
- *  @brief TS_GestureIdTypeDef
- *  Define Possible managed gesture identification values returned by touch screen
- *  driver.
- */
-typedef enum
-{
-  GEST_ID_NO_GESTURE = 0x00, /*!< Gesture not defined / recognized */
-  GEST_ID_MOVE_UP    = 0x01, /*!< Gesture Move Up */
-  GEST_ID_MOVE_RIGHT = 0x02, /*!< Gesture Move Right */
-  GEST_ID_MOVE_DOWN  = 0x03, /*!< Gesture Move Down */
-  GEST_ID_MOVE_LEFT  = 0x04, /*!< Gesture Move Left */
-  GEST_ID_ZOOM_IN    = 0x05, /*!< Gesture Zoom In */
-  GEST_ID_ZOOM_OUT   = 0x06, /*!< Gesture Zoom Out */
-  GEST_ID_NB_MAX     = 0x07  /*!< max number of gesture id */
-
-} TS_GestureIdTypeDef;
-
-/**
- *  @brief TS_TouchEventTypeDef
- *  Define Possible touch events kind as returned values
- *  by touch screen IC Driver.
- */
-typedef enum
-{
-  TOUCH_EVENT_NO_EVT        = 0x00, /*!< Touch Event : undetermined */
-  TOUCH_EVENT_PRESS_DOWN    = 0x01, /*!< Touch Event Press Down */
-  TOUCH_EVENT_LIFT_UP       = 0x02, /*!< Touch Event Lift Up */
-  TOUCH_EVENT_CONTACT       = 0x03, /*!< Touch Event Contact */
-  TOUCH_EVENT_NB_MAX        = 0x04  /*!< max number of touch events kind */
-
-} TS_TouchEventTypeDef;
-/**
-  * @}
-  */ 
-
-/** @defgroup STM32746G_DISCOVERY_TS_Imported_Variables STM32746G_DISCOVERY_TS Imported Variables
-  * @{
-  */ 
-/**
- *  @brief Table for touchscreen event information display on LCD :
- *  table indexed on enum @ref TS_TouchEventTypeDef information
- */
-extern char * ts_event_string_tab[TOUCH_EVENT_NB_MAX];
-
-/**
- *  @brief Table for touchscreen gesture Id information display on LCD : table indexed
- *  on enum @ref TS_GestureIdTypeDef information
- */
-extern char * ts_gesture_id_string_tab[GEST_ID_NB_MAX];
-/**
-  * @}
-  */ 
-
-/** @addtogroup STM32746G_DISCOVERY_TS_Exported_Functions
-  * @{
-  */
-uint8_t BSP_TS_Init(uint16_t ts_SizeX, uint16_t ts_SizeY);
-uint8_t BSP_TS_DeInit(void);
-uint8_t BSP_TS_GetState(TS_StateTypeDef *TS_State);
-
-#if (TS_MULTI_TOUCH_SUPPORTED == 1)
-uint8_t BSP_TS_Get_GestureId(TS_StateTypeDef *TS_State);
-#endif /* TS_MULTI_TOUCH_SUPPORTED == 1 */
-
-uint8_t BSP_TS_ITConfig(void);
-uint8_t BSP_TS_ITGetStatus(void);
-void    BSP_TS_ITClear(void);
-uint8_t BSP_TS_ResetTouchData(TS_StateTypeDef *TS_State);
-/**
-  * @}
-  */ 
-
-/**
-  * @}
-  */
-
-/**
-  * @}
-  */ 
-
-/**
-  * @}
-  */
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __STM32746G_DISCOVERY_TS_H */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/