From b384bcc5de2c20d1d985e2768729578373bd73c1 Mon Sep 17 00:00:00 2001
From: Damien George <damien.p.george@gmail.com>
Date: Tue, 3 Feb 2015 10:33:12 +0000
Subject: [PATCH] stmhal: Remove unused usbdev files, and move used ones up a
 dir.

The unused files are from the ST demos for different USB classes and are
not needed for the stmhal port.
---
 stmhal/Makefile                               |   26 +-
 stmhal/usbdev/class/AUDIO/Inc/usbd_audio.h    |  201 ---
 .../class/AUDIO/Inc/usbd_audio_if_template.h  |   44 -
 stmhal/usbdev/class/AUDIO/Src/usbd_audio.c    |  781 ------------
 .../class/AUDIO/Src/usbd_audio_if_template.c  |  190 ---
 .../class/CustomHID/Inc/usbd_customhid.h      |  140 ---
 .../class/CustomHID/Src/usbd_customhid.c      |  638 ----------
 stmhal/usbdev/class/DFU/Inc/usbd_dfu.h        |  231 ----
 .../class/DFU/Inc/usbd_dfu_media_template.h   |   98 --
 stmhal/usbdev/class/DFU/Src/usbd_dfu.c        | 1095 -----------------
 .../class/DFU/Src/usbd_dfu_media_template.c   |  139 ---
 stmhal/usbdev/class/HID/Inc/usbd_hid.h        |  136 --
 stmhal/usbdev/class/HID/Src/usbd_hid.c        |  509 --------
 .../usbdev/class/Template/Inc/usbd_template.h |  101 --
 .../usbdev/class/Template/Src/usbd_template.c |  398 ------
 stmhal/usbdev/class/cdc/inc/usbd_cdc.h        |  171 ---
 .../class/cdc/inc/usbd_cdc_if_template.h      |   44 -
 stmhal/usbdev/class/cdc/src/usbd_cdc.c        |  907 --------------
 .../class/cdc/src/usbd_cdc_if_template.c      |  225 ----
 .../usbdev/class/cdc_hid/inc/usbd_cdc_hid.h   |   83 --
 .../usbdev/class/cdc_hid/src/usbd_cdc_hid.c   |  654 ----------
 .../usbdev/class/cdc_msc/inc/usbd_cdc_msc.h   |  132 --
 .../usbdev/class/cdc_msc/src/usbd_cdc_msc.c   |  578 ---------
 .../usbdev/class/cdc_msc/src/usbd_msc_bot.c   |  407 ------
 .../usbdev/class/cdc_msc/src/usbd_msc_scsi.c  |  770 ------------
 .../class/cdc_msc_hid/inc/usbd_msc_bot.h      |  151 ---
 .../class/cdc_msc_hid/inc/usbd_msc_data.h     |  104 --
 .../class/cdc_msc_hid/inc/usbd_msc_scsi.h     |  193 ---
 .../usbdev/class/cdc_msc_hid/src/usbd_msc.c   |  609 ---------
 .../class/cdc_msc_hid/src/usbd_msc_data.c     |  134 --
 .../{cdc_msc_hid => }/inc/usbd_cdc_msc_hid.h  |    0
 stmhal/usbdev/class/inc/usbd_cdc_msc_hid0.h   |   51 +
 .../class/{cdc_msc => }/inc/usbd_msc_bot.h    |    0
 .../class/{cdc_msc => }/inc/usbd_msc_data.h   |    0
 .../class/{cdc_msc => }/inc/usbd_msc_scsi.h   |    0
 stmhal/usbdev/class/msc/inc/usbd_msc.h        |  121 --
 stmhal/usbdev/class/msc/inc/usbd_msc_bot.h    |  151 ---
 stmhal/usbdev/class/msc/inc/usbd_msc_data.h   |  104 --
 stmhal/usbdev/class/msc/inc/usbd_msc_scsi.h   |  193 ---
 .../class/msc/inc/usbd_msc_storage_template.h |   98 --
 stmhal/usbdev/class/msc/src/usbd_msc.c        |  609 ---------
 stmhal/usbdev/class/msc/src/usbd_msc_bot.c    |  407 ------
 stmhal/usbdev/class/msc/src/usbd_msc_data.c   |  134 --
 stmhal/usbdev/class/msc/src/usbd_msc_scsi.c   |  770 ------------
 .../class/msc/src/usbd_msc_storage_template.c |  188 ---
 .../{cdc_msc_hid => }/src/usbd_cdc_msc_hid.c  |    0
 .../usbdev/class/{cdc_msc => }/src/usbd_msc.c |    0
 .../{cdc_msc_hid => }/src/usbd_msc_bot.c      |    0
 .../class/{cdc_msc => }/src/usbd_msc_data.c   |    0
 .../{cdc_msc_hid => }/src/usbd_msc_scsi.c     |    0
 50 files changed, 56 insertions(+), 12659 deletions(-)
 delete mode 100644 stmhal/usbdev/class/AUDIO/Inc/usbd_audio.h
 delete mode 100644 stmhal/usbdev/class/AUDIO/Inc/usbd_audio_if_template.h
 delete mode 100644 stmhal/usbdev/class/AUDIO/Src/usbd_audio.c
 delete mode 100644 stmhal/usbdev/class/AUDIO/Src/usbd_audio_if_template.c
 delete mode 100644 stmhal/usbdev/class/CustomHID/Inc/usbd_customhid.h
 delete mode 100644 stmhal/usbdev/class/CustomHID/Src/usbd_customhid.c
 delete mode 100644 stmhal/usbdev/class/DFU/Inc/usbd_dfu.h
 delete mode 100644 stmhal/usbdev/class/DFU/Inc/usbd_dfu_media_template.h
 delete mode 100644 stmhal/usbdev/class/DFU/Src/usbd_dfu.c
 delete mode 100644 stmhal/usbdev/class/DFU/Src/usbd_dfu_media_template.c
 delete mode 100644 stmhal/usbdev/class/HID/Inc/usbd_hid.h
 delete mode 100644 stmhal/usbdev/class/HID/Src/usbd_hid.c
 delete mode 100644 stmhal/usbdev/class/Template/Inc/usbd_template.h
 delete mode 100644 stmhal/usbdev/class/Template/Src/usbd_template.c
 delete mode 100644 stmhal/usbdev/class/cdc/inc/usbd_cdc.h
 delete mode 100644 stmhal/usbdev/class/cdc/inc/usbd_cdc_if_template.h
 delete mode 100644 stmhal/usbdev/class/cdc/src/usbd_cdc.c
 delete mode 100644 stmhal/usbdev/class/cdc/src/usbd_cdc_if_template.c
 delete mode 100644 stmhal/usbdev/class/cdc_hid/inc/usbd_cdc_hid.h
 delete mode 100644 stmhal/usbdev/class/cdc_hid/src/usbd_cdc_hid.c
 delete mode 100644 stmhal/usbdev/class/cdc_msc/inc/usbd_cdc_msc.h
 delete mode 100644 stmhal/usbdev/class/cdc_msc/src/usbd_cdc_msc.c
 delete mode 100644 stmhal/usbdev/class/cdc_msc/src/usbd_msc_bot.c
 delete mode 100644 stmhal/usbdev/class/cdc_msc/src/usbd_msc_scsi.c
 delete mode 100644 stmhal/usbdev/class/cdc_msc_hid/inc/usbd_msc_bot.h
 delete mode 100644 stmhal/usbdev/class/cdc_msc_hid/inc/usbd_msc_data.h
 delete mode 100644 stmhal/usbdev/class/cdc_msc_hid/inc/usbd_msc_scsi.h
 delete mode 100644 stmhal/usbdev/class/cdc_msc_hid/src/usbd_msc.c
 delete mode 100644 stmhal/usbdev/class/cdc_msc_hid/src/usbd_msc_data.c
 rename stmhal/usbdev/class/{cdc_msc_hid => }/inc/usbd_cdc_msc_hid.h (100%)
 create mode 100644 stmhal/usbdev/class/inc/usbd_cdc_msc_hid0.h
 rename stmhal/usbdev/class/{cdc_msc => }/inc/usbd_msc_bot.h (100%)
 rename stmhal/usbdev/class/{cdc_msc => }/inc/usbd_msc_data.h (100%)
 rename stmhal/usbdev/class/{cdc_msc => }/inc/usbd_msc_scsi.h (100%)
 delete mode 100644 stmhal/usbdev/class/msc/inc/usbd_msc.h
 delete mode 100644 stmhal/usbdev/class/msc/inc/usbd_msc_bot.h
 delete mode 100644 stmhal/usbdev/class/msc/inc/usbd_msc_data.h
 delete mode 100644 stmhal/usbdev/class/msc/inc/usbd_msc_scsi.h
 delete mode 100644 stmhal/usbdev/class/msc/inc/usbd_msc_storage_template.h
 delete mode 100644 stmhal/usbdev/class/msc/src/usbd_msc.c
 delete mode 100644 stmhal/usbdev/class/msc/src/usbd_msc_bot.c
 delete mode 100644 stmhal/usbdev/class/msc/src/usbd_msc_data.c
 delete mode 100644 stmhal/usbdev/class/msc/src/usbd_msc_scsi.c
 delete mode 100644 stmhal/usbdev/class/msc/src/usbd_msc_storage_template.c
 rename stmhal/usbdev/class/{cdc_msc_hid => }/src/usbd_cdc_msc_hid.c (100%)
 rename stmhal/usbdev/class/{cdc_msc => }/src/usbd_msc.c (100%)
 rename stmhal/usbdev/class/{cdc_msc_hid => }/src/usbd_msc_bot.c (100%)
 rename stmhal/usbdev/class/{cdc_msc => }/src/usbd_msc_data.c (100%)
 rename stmhal/usbdev/class/{cdc_msc_hid => }/src/usbd_msc_scsi.c (100%)

diff --git a/stmhal/Makefile b/stmhal/Makefile
index 9fa7b2acf..e1231f143 100644
--- a/stmhal/Makefile
+++ b/stmhal/Makefile
@@ -37,7 +37,7 @@ INC += -I$(BUILD)
 INC += -I$(CMSIS_DIR)/inc
 INC += -I$(CMSIS_DIR)/devinc
 INC += -I$(HAL_DIR)/inc
-INC += -I$(USBDEV_DIR)/core/inc -I$(USBDEV_DIR)/class/cdc_msc_hid/inc
+INC += -I$(USBDEV_DIR)/core/inc -I$(USBDEV_DIR)/class/inc
 #INC += -I$(USBHOST_DIR)
 INC += -I../$(FATFS_DIR)
 INC += -I../lib/mp-readline
@@ -182,26 +182,10 @@ SRC_USBDEV = $(addprefix $(USBDEV_DIR)/,\
 	core/src/usbd_core.c \
 	core/src/usbd_ctlreq.c \
 	core/src/usbd_ioreq.c \
-	class/cdc_msc_hid/src/usbd_cdc_msc_hid.c \
-	class/cdc_msc_hid/src/usbd_msc_bot.c \
-	class/cdc_msc_hid/src/usbd_msc_scsi.c \
-	class/cdc_msc_hid/src/usbd_msc_data.c \
-	)
-
-#	class/cdc/src/usbd_cdc.c \
-	class/msc/src/usbd_msc.c \
-#	usbd_core.c \
-	usbd_ioreq.c \
-	usbd_req.c \
-	usbd_usr.c \
-	usbd_desc.c \
-	usbd_pyb_core.c \
-	usbd_pyb_core2.c \
-	usbd_cdc_vcp.c \
-	usbd_msc_bot.c  \
-	usbd_msc_data.c \
-	usbd_msc_scsi.c \
-	usbd_storage_msd.c \
+	class/src/usbd_cdc_msc_hid.c \
+	class/src/usbd_msc_bot.c \
+	class/src/usbd_msc_scsi.c \
+	class/src/usbd_msc_data.c \
 	)
 
 ifeq ($(MICROPY_PY_WIZNET5K),1)
diff --git a/stmhal/usbdev/class/AUDIO/Inc/usbd_audio.h b/stmhal/usbdev/class/AUDIO/Inc/usbd_audio.h
deleted file mode 100644
index b9a225f20..000000000
--- a/stmhal/usbdev/class/AUDIO/Inc/usbd_audio.h
+++ /dev/null
@@ -1,201 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    usbd_audio_core.h
-  * @author  MCD Application Team
-  * @version V2.0.0
-  * @date    18-February-2014
-  * @brief   header file for the usbd_audio_core.c file.
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT 2014 STMicroelectronics</center></h2>
-  *
-  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
-  * You may not use this file except in compliance with the License.
-  * You may obtain a copy of the License at:
-  *
-  *        http://www.st.com/software_license_agreement_liberty_v2
-  *
-  * Unless required by applicable law or agreed to in writing, software 
-  * distributed under the License is distributed on an "AS IS" BASIS, 
-  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  * See the License for the specific language governing permissions and
-  * limitations under the License.
-  *
-  ******************************************************************************
-  */ 
-
-/* Includes ------------------------------------------------------------------*/
-
-#ifndef __USB_AUDIO_CORE_H_
-#define __USB_AUDIO_CORE_H_
-
-#include  "usbd_ioreq.h"
-
-/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
-  * @{
-  */
-  
-/** @defgroup USBD_AUDIO
-  * @brief This file is the Header file for USBD_msc.c
-  * @{
-  */ 
-
-
-/** @defgroup USBD_AUDIO_Exported_Defines
-  * @{
-  */ 
-#define AUDIO_OUT_EP                                  0x01
-#define USB_AUDIO_CONFIG_DESC_SIZ                     109
-#define AUDIO_INTERFACE_DESC_SIZE                     9
-#define USB_AUDIO_DESC_SIZ                            0x09
-#define AUDIO_STANDARD_ENDPOINT_DESC_SIZE             0x09
-#define AUDIO_STREAMING_ENDPOINT_DESC_SIZE            0x07
-
-#define AUDIO_DESCRIPTOR_TYPE                         0x21
-#define USB_DEVICE_CLASS_AUDIO                        0x01
-#define AUDIO_SUBCLASS_AUDIOCONTROL                   0x01
-#define AUDIO_SUBCLASS_AUDIOSTREAMING                 0x02
-#define AUDIO_PROTOCOL_UNDEFINED                      0x00
-#define AUDIO_STREAMING_GENERAL                       0x01
-#define AUDIO_STREAMING_FORMAT_TYPE                   0x02
-
-/* Audio Descriptor Types */
-#define AUDIO_INTERFACE_DESCRIPTOR_TYPE               0x24
-#define AUDIO_ENDPOINT_DESCRIPTOR_TYPE                0x25
-
-/* Audio Control Interface Descriptor Subtypes */
-#define AUDIO_CONTROL_HEADER                          0x01
-#define AUDIO_CONTROL_INPUT_TERMINAL                  0x02
-#define AUDIO_CONTROL_OUTPUT_TERMINAL                 0x03
-#define AUDIO_CONTROL_FEATURE_UNIT                    0x06
-
-#define AUDIO_INPUT_TERMINAL_DESC_SIZE                0x0C
-#define AUDIO_OUTPUT_TERMINAL_DESC_SIZE               0x09
-#define AUDIO_STREAMING_INTERFACE_DESC_SIZE           0x07
-
-#define AUDIO_CONTROL_MUTE                            0x0001
-
-#define AUDIO_FORMAT_TYPE_I                           0x01
-#define AUDIO_FORMAT_TYPE_III                         0x03
-
-#define AUDIO_ENDPOINT_GENERAL                        0x01
-
-#define AUDIO_REQ_GET_CUR                             0x81
-#define AUDIO_REQ_SET_CUR                             0x01
-
-#define AUDIO_OUT_STREAMING_CTRL                      0x02
-
-
-#define AUDIO_OUT_PACKET                              (uint32_t)(((USBD_AUDIO_FREQ * 2 * 2) /1000)) 
-#define AUDIO_DEFAULT_VOLUME                          70
-    
-/* Number of sub-packets in the audio transfer buffer. You can modify this value but always make sure
-  that it is an even number and higher than 3 */
-#define AUDIO_OUT_PACKET_NUM                            80
-/* Total size of the audio transfer buffer */
-#define AUDIO_TOTAL_BUF_SIZE                           ((uint32_t)(AUDIO_OUT_PACKET * AUDIO_OUT_PACKET_NUM))
-    
-    /* Audio Commands enmueration */
-typedef enum
-{
-  AUDIO_CMD_START = 1,
-  AUDIO_CMD_PLAY,
-  AUDIO_CMD_STOP,
-}AUDIO_CMD_TypeDef;
-
-
-typedef enum
-{
-  AUDIO_OFFSET_NONE = 0,
-  AUDIO_OFFSET_HALF,
-  AUDIO_OFFSET_FULL,  
-  AUDIO_OFFSET_UNKNOWN,    
-}
-AUDIO_OffsetTypeDef;
-/**
-  * @}
-  */ 
-
-
-/** @defgroup USBD_CORE_Exported_TypesDefinitions
-  * @{
-  */
- typedef struct
-{
-   uint8_t cmd;   
-   uint8_t data[USB_MAX_EP0_SIZE];  
-   uint8_t len;  
-   uint8_t unit;    
-}
-USBD_AUDIO_ControlTypeDef; 
-
-
-
-typedef struct
-{
-  __IO uint32_t             alt_setting; 
-  uint8_t                   buffer[AUDIO_TOTAL_BUF_SIZE];
-  AUDIO_OffsetTypeDef       offset;
-  uint8_t                    rd_enable;  
-  uint16_t                   rd_ptr;  
-  uint16_t                   wr_ptr;  
-  USBD_AUDIO_ControlTypeDef control;   
-}
-USBD_AUDIO_HandleTypeDef; 
-
-
-typedef struct
-{
-    int8_t  (*Init)         (uint32_t  AudioFreq, uint32_t Volume, uint32_t options);
-    int8_t  (*DeInit)       (uint32_t options);
-    int8_t  (*AudioCmd)     (uint8_t* pbuf, uint32_t size, uint8_t cmd);
-    int8_t  (*VolumeCtl)    (uint8_t vol);
-    int8_t  (*MuteCtl)      (uint8_t cmd);
-    int8_t  (*PeriodicTC)   (uint8_t cmd);
-    int8_t  (*GetState)     (void);
-}USBD_AUDIO_ItfTypeDef;
-/**
-  * @}
-  */ 
-
-
-
-/** @defgroup USBD_CORE_Exported_Macros
-  * @{
-  */ 
-
-/**
-  * @}
-  */ 
-
-/** @defgroup USBD_CORE_Exported_Variables
-  * @{
-  */ 
-
-extern USBD_ClassTypeDef  USBD_AUDIO;
-/**
-  * @}
-  */ 
-
-/** @defgroup USB_CORE_Exported_Functions
-  * @{
-  */ 
-uint8_t  USBD_AUDIO_RegisterInterface  (USBD_HandleTypeDef   *pdev, 
-                                        USBD_AUDIO_ItfTypeDef *fops);
-
-void  USBD_AUDIO_Sync (USBD_HandleTypeDef *pdev, AUDIO_OffsetTypeDef offset);
-/**
-  * @}
-  */ 
-
-#endif  // __USB_AUDIO_CORE_H_
-/**
-  * @}
-  */ 
-
-/**
-  * @}
-  */ 
-  
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/stmhal/usbdev/class/AUDIO/Inc/usbd_audio_if_template.h b/stmhal/usbdev/class/AUDIO/Inc/usbd_audio_if_template.h
deleted file mode 100644
index cf407a484..000000000
--- a/stmhal/usbdev/class/AUDIO/Inc/usbd_audio_if_template.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    usbd_audio_if_template.h
-  * @author  MCD Application Team
-  * @version V2.0.0
-  * @date    18-February-2014
-  * @brief   Header for dfu_mal.c file.
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT 2014 STMicroelectronics</center></h2>
-  *
-  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
-  * You may not use this file except in compliance with the License.
-  * You may obtain a copy of the License at:
-  *
-  *        http://www.st.com/software_license_agreement_liberty_v2
-  *
-  * Unless required by applicable law or agreed to in writing, software 
-  * distributed under the License is distributed on an "AS IS" BASIS, 
-  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  * See the License for the specific language governing permissions and
-  * limitations under the License.
-  *
-  ******************************************************************************
-  */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __USBD_AUDIO_IF_TEMPLATE_H
-#define __USBD_AUDIO_IF_TEMPLATE_H
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_audio.h"
-
-/* Exported types ------------------------------------------------------------*/
-/* Exported constants --------------------------------------------------------*/
-
-extern USBD_AUDIO_ItfTypeDef  USBD_AUDIO_Template_fops;
-
-/* Exported macro ------------------------------------------------------------*/
-/* Exported functions ------------------------------------------------------- */
-#endif /* __USBD_AUDIO_IF_TEMPLATE_H */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/stmhal/usbdev/class/AUDIO/Src/usbd_audio.c b/stmhal/usbdev/class/AUDIO/Src/usbd_audio.c
deleted file mode 100644
index 32565320a..000000000
--- a/stmhal/usbdev/class/AUDIO/Src/usbd_audio.c
+++ /dev/null
@@ -1,781 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    usbd_audio.c
-  * @author  MCD Application Team
-  * @version V2.0.0
-  * @date    18-February-2014
-  * @brief   This file provides the HID core functions.
-  *
-  * @verbatim
-  *      
-  *          ===================================================================      
-  *                                AUDIO Class  Description
-  *          ===================================================================
-  *          
-  *
-  *
-  *
-  *           
-  *      
-  * @note     In HS mode and when the DMA is used, all variables and data structures
-  *           dealing with the DMA during the transaction process should be 32-bit aligned.
-  *           
-  *      
-  *  @endverbatim
-  *
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT 2014 STMicroelectronics</center></h2>
-  *
-  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
-  * You may not use this file except in compliance with the License.
-  * You may obtain a copy of the License at:
-  *
-  *        http://www.st.com/software_license_agreement_liberty_v2
-  *
-  * Unless required by applicable law or agreed to in writing, software 
-  * distributed under the License is distributed on an "AS IS" BASIS, 
-  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  * See the License for the specific language governing permissions and
-  * limitations under the License.
-  *
-  ******************************************************************************
-  */ 
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_audio.h"
-#include "usbd_desc.h"
-#include "usbd_ctlreq.h"
-
-
-/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
-  * @{
-  */
-
-
-/** @defgroup USBD_AUDIO 
-  * @brief usbd core module
-  * @{
-  */ 
-
-/** @defgroup USBD_AUDIO_Private_TypesDefinitions
-  * @{
-  */ 
-/**
-  * @}
-  */ 
-
-
-/** @defgroup USBD_AUDIO_Private_Defines
-  * @{
-  */ 
-
-/**
-  * @}
-  */ 
-
-
-/** @defgroup USBD_AUDIO_Private_Macros
-  * @{
-  */ 
-#define AUDIO_SAMPLE_FREQ(frq)      (uint8_t)(frq), (uint8_t)((frq >> 8)), (uint8_t)((frq >> 16))
-
-#define AUDIO_PACKET_SZE(frq)          (uint8_t)(((frq * 2 * 2)/1000) & 0xFF), \
-                                       (uint8_t)((((frq * 2 * 2)/1000) >> 8) & 0xFF)
-                                         
-/**
-  * @}
-  */ 
-
-
-
-
-/** @defgroup USBD_AUDIO_Private_FunctionPrototypes
-  * @{
-  */
-
-
-static uint8_t  USBD_AUDIO_Init (USBD_HandleTypeDef *pdev, 
-                               uint8_t cfgidx);
-
-static uint8_t  USBD_AUDIO_DeInit (USBD_HandleTypeDef *pdev, 
-                                 uint8_t cfgidx);
-
-static uint8_t  USBD_AUDIO_Setup (USBD_HandleTypeDef *pdev, 
-                                USBD_SetupReqTypedef *req);
-
-static uint8_t  *USBD_AUDIO_GetCfgDesc (uint16_t *length);
-
-static uint8_t  *USBD_AUDIO_GetDeviceQualifierDesc (uint16_t *length);
-
-static uint8_t  USBD_AUDIO_DataIn (USBD_HandleTypeDef *pdev, uint8_t epnum);
-
-static uint8_t  USBD_AUDIO_DataOut (USBD_HandleTypeDef *pdev, uint8_t epnum);
-
-static uint8_t  USBD_AUDIO_EP0_RxReady (USBD_HandleTypeDef *pdev);
-
-static uint8_t  USBD_AUDIO_EP0_TxReady (USBD_HandleTypeDef *pdev);
-
-static uint8_t  USBD_AUDIO_SOF (USBD_HandleTypeDef *pdev);
-
-static uint8_t  USBD_AUDIO_IsoINIncomplete (USBD_HandleTypeDef *pdev, uint8_t epnum);
-
-static uint8_t  USBD_AUDIO_IsoOutIncomplete (USBD_HandleTypeDef *pdev, uint8_t epnum);
-
-static void AUDIO_REQ_GetCurrent(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
-
-static void AUDIO_REQ_SetCurrent(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
-
-/**
-  * @}
-  */ 
-
-/** @defgroup USBD_AUDIO_Private_Variables
-  * @{
-  */ 
-
-USBD_ClassTypeDef  USBD_AUDIO = 
-{
-  USBD_AUDIO_Init,
-  USBD_AUDIO_DeInit,
-  USBD_AUDIO_Setup,
-  USBD_AUDIO_EP0_TxReady,  
-  USBD_AUDIO_EP0_RxReady,
-  USBD_AUDIO_DataIn,
-  USBD_AUDIO_DataOut,
-  USBD_AUDIO_SOF,
-  USBD_AUDIO_IsoINIncomplete,
-  USBD_AUDIO_IsoOutIncomplete,      
-  USBD_AUDIO_GetCfgDesc,
-  USBD_AUDIO_GetCfgDesc, 
-  USBD_AUDIO_GetCfgDesc,
-  USBD_AUDIO_GetDeviceQualifierDesc,
-};
-
-/* USB AUDIO device Configuration Descriptor */
-__ALIGN_BEGIN static uint8_t USBD_AUDIO_CfgDesc[USB_AUDIO_CONFIG_DESC_SIZ] __ALIGN_END =
-{
-  /* Configuration 1 */
-  0x09,                                 /* bLength */
-  USB_DESC_TYPE_CONFIGURATION,          /* bDescriptorType */
-  LOBYTE(USB_AUDIO_CONFIG_DESC_SIZ),    /* wTotalLength  109 bytes*/
-  HIBYTE(USB_AUDIO_CONFIG_DESC_SIZ),      
-  0x02,                                 /* bNumInterfaces */
-  0x01,                                 /* bConfigurationValue */
-  0x00,                                 /* iConfiguration */
-  0xC0,                                 /* bmAttributes  BUS Powred*/
-  0x32,                                 /* bMaxPower = 100 mA*/
-  /* 09 byte*/
-  
-  /* USB Speaker Standard interface descriptor */
-  AUDIO_INTERFACE_DESC_SIZE,            /* bLength */
-  USB_DESC_TYPE_INTERFACE,              /* bDescriptorType */
-  0x00,                                 /* bInterfaceNumber */
-  0x00,                                 /* bAlternateSetting */
-  0x00,                                 /* bNumEndpoints */
-  USB_DEVICE_CLASS_AUDIO,               /* bInterfaceClass */
-  AUDIO_SUBCLASS_AUDIOCONTROL,          /* bInterfaceSubClass */
-  AUDIO_PROTOCOL_UNDEFINED,             /* bInterfaceProtocol */
-  0x00,                                 /* iInterface */
-  /* 09 byte*/
-  
-  /* USB Speaker Class-specific AC Interface Descriptor */
-  AUDIO_INTERFACE_DESC_SIZE,            /* bLength */
-  AUDIO_INTERFACE_DESCRIPTOR_TYPE,      /* bDescriptorType */
-  AUDIO_CONTROL_HEADER,                 /* bDescriptorSubtype */
-  0x00,          /* 1.00 */             /* bcdADC */
-  0x01,
-  0x27,                                 /* wTotalLength = 39*/
-  0x00,
-  0x01,                                 /* bInCollection */
-  0x01,                                 /* baInterfaceNr */
-  /* 09 byte*/
-  
-  /* USB Speaker Input Terminal Descriptor */
-  AUDIO_INPUT_TERMINAL_DESC_SIZE,       /* bLength */
-  AUDIO_INTERFACE_DESCRIPTOR_TYPE,      /* bDescriptorType */
-  AUDIO_CONTROL_INPUT_TERMINAL,         /* bDescriptorSubtype */
-  0x01,                                 /* bTerminalID */
-  0x01,                                 /* wTerminalType AUDIO_TERMINAL_USB_STREAMING   0x0101 */
-  0x01,
-  0x00,                                 /* bAssocTerminal */
-  0x01,                                 /* bNrChannels */
-  0x00,                                 /* wChannelConfig 0x0000  Mono */
-  0x00,
-  0x00,                                 /* iChannelNames */
-  0x00,                                 /* iTerminal */
-  /* 12 byte*/
-  
-  /* USB Speaker Audio Feature Unit Descriptor */
-  0x09,                                 /* bLength */
-  AUDIO_INTERFACE_DESCRIPTOR_TYPE,      /* bDescriptorType */
-  AUDIO_CONTROL_FEATURE_UNIT,           /* bDescriptorSubtype */
-  AUDIO_OUT_STREAMING_CTRL,             /* bUnitID */
-  0x01,                                 /* bSourceID */
-  0x01,                                 /* bControlSize */
-  AUDIO_CONTROL_MUTE,// |AUDIO_CONTROL_VOLUME, /* bmaControls(0) */
-  0,                                    /* bmaControls(1) */
-  0x00,                                 /* iTerminal */
-  /* 09 byte*/
-  
-  /*USB Speaker Output Terminal Descriptor */
-  0x09,      /* bLength */
-  AUDIO_INTERFACE_DESCRIPTOR_TYPE,      /* bDescriptorType */
-  AUDIO_CONTROL_OUTPUT_TERMINAL,        /* bDescriptorSubtype */
-  0x03,                                 /* bTerminalID */
-  0x01,                                 /* wTerminalType  0x0301*/
-  0x03,
-  0x00,                                 /* bAssocTerminal */
-  0x02,                                 /* bSourceID */
-  0x00,                                 /* iTerminal */
-  /* 09 byte*/
-  
-  /* USB Speaker Standard AS Interface Descriptor - Audio Streaming Zero Bandwith */
-  /* Interface 1, Alternate Setting 0                                             */
-  AUDIO_INTERFACE_DESC_SIZE,  /* bLength */
-  USB_DESC_TYPE_INTERFACE,        /* bDescriptorType */
-  0x01,                                 /* bInterfaceNumber */
-  0x00,                                 /* bAlternateSetting */
-  0x00,                                 /* bNumEndpoints */
-  USB_DEVICE_CLASS_AUDIO,               /* bInterfaceClass */
-  AUDIO_SUBCLASS_AUDIOSTREAMING,        /* bInterfaceSubClass */
-  AUDIO_PROTOCOL_UNDEFINED,             /* bInterfaceProtocol */
-  0x00,                                 /* iInterface */
-  /* 09 byte*/
-  
-  /* USB Speaker Standard AS Interface Descriptor - Audio Streaming Operational */
-  /* Interface 1, Alternate Setting 1                                           */
-  AUDIO_INTERFACE_DESC_SIZE,  /* bLength */
-  USB_DESC_TYPE_INTERFACE,        /* bDescriptorType */
-  0x01,                                 /* bInterfaceNumber */
-  0x01,                                 /* bAlternateSetting */
-  0x01,                                 /* bNumEndpoints */
-  USB_DEVICE_CLASS_AUDIO,               /* bInterfaceClass */
-  AUDIO_SUBCLASS_AUDIOSTREAMING,        /* bInterfaceSubClass */
-  AUDIO_PROTOCOL_UNDEFINED,             /* bInterfaceProtocol */
-  0x00,                                 /* iInterface */
-  /* 09 byte*/
-  
-  /* USB Speaker Audio Streaming Interface Descriptor */
-  AUDIO_STREAMING_INTERFACE_DESC_SIZE,  /* bLength */
-  AUDIO_INTERFACE_DESCRIPTOR_TYPE,      /* bDescriptorType */
-  AUDIO_STREAMING_GENERAL,              /* bDescriptorSubtype */
-  0x01,                                 /* bTerminalLink */
-  0x01,                                 /* bDelay */
-  0x01,                                 /* wFormatTag AUDIO_FORMAT_PCM  0x0001*/
-  0x00,
-  /* 07 byte*/
-  
-  /* USB Speaker Audio Type III Format Interface Descriptor */
-  0x0B,                                 /* bLength */
-  AUDIO_INTERFACE_DESCRIPTOR_TYPE,      /* bDescriptorType */
-  AUDIO_STREAMING_FORMAT_TYPE,          /* bDescriptorSubtype */
-  AUDIO_FORMAT_TYPE_III,                /* bFormatType */ 
-  0x02,                                 /* bNrChannels */
-  0x02,                                 /* bSubFrameSize :  2 Bytes per frame (16bits) */
-  16,                                   /* bBitResolution (16-bits per sample) */ 
-  0x01,                                 /* bSamFreqType only one frequency supported */ 
-  AUDIO_SAMPLE_FREQ(USBD_AUDIO_FREQ),         /* Audio sampling frequency coded on 3 bytes */
-  /* 11 byte*/
-  
-  /* Endpoint 1 - Standard Descriptor */
-  AUDIO_STANDARD_ENDPOINT_DESC_SIZE,    /* bLength */
-  USB_DESC_TYPE_ENDPOINT,               /* bDescriptorType */
-  AUDIO_OUT_EP,                         /* bEndpointAddress 1 out endpoint*/
-  USBD_EP_TYPE_ISOC,                    /* bmAttributes */
-  AUDIO_PACKET_SZE(USBD_AUDIO_FREQ),    /* wMaxPacketSize in Bytes (Freq(Samples)*2(Stereo)*2(HalfWord)) */
-  0x01,                                 /* bInterval */
-  0x00,                                 /* bRefresh */
-  0x00,                                 /* bSynchAddress */
-  /* 09 byte*/
-  
-  /* Endpoint - Audio Streaming Descriptor*/
-  AUDIO_STREAMING_ENDPOINT_DESC_SIZE,   /* bLength */
-  AUDIO_ENDPOINT_DESCRIPTOR_TYPE,       /* bDescriptorType */
-  AUDIO_ENDPOINT_GENERAL,               /* bDescriptor */
-  0x00,                                 /* bmAttributes */
-  0x00,                                 /* bLockDelayUnits */
-  0x00,                                 /* wLockDelay */
-  0x00,
-  /* 07 byte*/
-} ;
-
-/* USB Standard Device Descriptor */
-__ALIGN_BEGIN static uint8_t USBD_AUDIO_DeviceQualifierDesc[USB_LEN_DEV_QUALIFIER_DESC] __ALIGN_END=
-{
-  USB_LEN_DEV_QUALIFIER_DESC,
-  USB_DESC_TYPE_DEVICE_QUALIFIER,
-  0x00,
-  0x02,
-  0x00,
-  0x00,
-  0x00,
-  0x40,
-  0x01,
-  0x00,
-};
-
-/**
-  * @}
-  */ 
-
-/** @defgroup USBD_AUDIO_Private_Functions
-  * @{
-  */ 
-
-/**
-  * @brief  USBD_AUDIO_Init
-  *         Initialize the AUDIO interface
-  * @param  pdev: device instance
-  * @param  cfgidx: Configuration index
-  * @retval status
-  */
-static uint8_t  USBD_AUDIO_Init (USBD_HandleTypeDef *pdev, 
-                               uint8_t cfgidx)
-{
-  USBD_AUDIO_HandleTypeDef   *haudio;
-  
-  /* Open EP OUT */
-  USBD_LL_OpenEP(pdev,
-                 AUDIO_OUT_EP,
-                 USBD_EP_TYPE_ISOC,
-                 AUDIO_OUT_PACKET);
-  
-  /* Allocate Audio structure */
-  pdev->pClassData = USBD_malloc(sizeof (USBD_AUDIO_HandleTypeDef));
-  
-  if(pdev->pClassData == NULL)
-  {
-    return USBD_FAIL; 
-  }
-  else
-  {
-    haudio = pdev->pClassData;
-    haudio->alt_setting = 0;
-    haudio->offset = AUDIO_OFFSET_UNKNOWN;
-    haudio->wr_ptr = 0; 
-    haudio->rd_ptr = 0;  
-    haudio->rd_enable = 0;
-    
-    /* Initialize the Audio output Hardware layer */
-    if (((USBD_AUDIO_ItfTypeDef *)pdev->pUserData)->Init(USBD_AUDIO_FREQ, AUDIO_DEFAULT_VOLUME, 0) != USBD_OK)
-    {
-      return USBD_FAIL;
-    }
-    
-    /* Prepare Out endpoint to receive 1st packet */ 
-    USBD_LL_PrepareReceive(pdev,
-                           AUDIO_OUT_EP,
-                           haudio->buffer,                        
-                           AUDIO_OUT_PACKET);      
-  }
-  return USBD_OK;
-}
-
-/**
-  * @brief  USBD_AUDIO_Init
-  *         DeInitialize the AUDIO layer
-  * @param  pdev: device instance
-  * @param  cfgidx: Configuration index
-  * @retval status
-  */
-static uint8_t  USBD_AUDIO_DeInit (USBD_HandleTypeDef *pdev, 
-                                 uint8_t cfgidx)
-{
-  
-  /* Open EP OUT */
-  USBD_LL_CloseEP(pdev,
-              AUDIO_OUT_EP);
-
-  /* DeInit  physical Interface components */
-  if(pdev->pClassData != NULL)
-  {
-   ((USBD_AUDIO_ItfTypeDef *)pdev->pUserData)->DeInit(0);
-    USBD_free(pdev->pClassData);
-    pdev->pClassData = NULL;
-  }
-  
-  return USBD_OK;
-}
-
-/**
-  * @brief  USBD_AUDIO_Setup
-  *         Handle the AUDIO specific requests
-  * @param  pdev: instance
-  * @param  req: usb requests
-  * @retval status
-  */
-static uint8_t  USBD_AUDIO_Setup (USBD_HandleTypeDef *pdev, 
-                                USBD_SetupReqTypedef *req)
-{
-  USBD_AUDIO_HandleTypeDef   *haudio;
-  uint16_t len;
-  uint8_t *pbuf;
-  uint8_t ret = USBD_OK;
-  haudio = pdev->pClassData;
-  
-  switch (req->bmRequest & USB_REQ_TYPE_MASK)
-  {
-  case USB_REQ_TYPE_CLASS :  
-    switch (req->bRequest)
-    {
-    case AUDIO_REQ_GET_CUR:
-      AUDIO_REQ_GetCurrent(pdev, req);
-      break;
-      
-    case AUDIO_REQ_SET_CUR:
-      AUDIO_REQ_SetCurrent(pdev, req);   
-      break;
-      
-    default:
-      USBD_CtlError (pdev, req);
-      ret = USBD_FAIL; 
-    }
-    break;
-    
-  case USB_REQ_TYPE_STANDARD:
-    switch (req->bRequest)
-    {
-    case USB_REQ_GET_DESCRIPTOR:      
-      if( (req->wValue >> 8) == AUDIO_DESCRIPTOR_TYPE)
-      {
-        pbuf = USBD_AUDIO_CfgDesc + 18;
-        len = MIN(USB_AUDIO_DESC_SIZ , req->wLength);
-        
-        
-        USBD_CtlSendData (pdev, 
-                          pbuf,
-                          len);
-      }
-      break;
-      
-    case USB_REQ_GET_INTERFACE :
-      USBD_CtlSendData (pdev,
-                        (uint8_t *)haudio->alt_setting,
-                        1);
-      break;
-      
-    case USB_REQ_SET_INTERFACE :
-      if ((uint8_t)(req->wValue) <= USBD_MAX_NUM_INTERFACES)
-      {
-        haudio->alt_setting = (uint8_t)(req->wValue);
-      }
-      else
-      {
-        /* Call the error management function (command will be nacked */
-        USBD_CtlError (pdev, req);
-      }
-      break;      
-      
-    default:
-      USBD_CtlError (pdev, req);
-      ret = USBD_FAIL;     
-    }
-  }
-  return ret;
-}
-
-
-/**
-  * @brief  USBD_AUDIO_GetCfgDesc 
-  *         return configuration descriptor
-  * @param  speed : current device speed
-  * @param  length : pointer data length
-  * @retval pointer to descriptor buffer
-  */
-static uint8_t  *USBD_AUDIO_GetCfgDesc (uint16_t *length)
-{
-  *length = sizeof (USBD_AUDIO_CfgDesc);
-  return USBD_AUDIO_CfgDesc;
-}
-
-/**
-  * @brief  USBD_AUDIO_DataIn
-  *         handle data IN Stage
-  * @param  pdev: device instance
-  * @param  epnum: endpoint index
-  * @retval status
-  */
-static uint8_t  USBD_AUDIO_DataIn (USBD_HandleTypeDef *pdev, 
-                              uint8_t epnum)
-{
-
-  /* Only OUT data are processed */
-  return USBD_OK;
-}
-
-/**
-  * @brief  USBD_AUDIO_EP0_RxReady
-  *         handle EP0 Rx Ready event
-  * @param  pdev: device instance
-  * @retval status
-  */
-static uint8_t  USBD_AUDIO_EP0_RxReady (USBD_HandleTypeDef *pdev)
-{
-  USBD_AUDIO_HandleTypeDef   *haudio;
-  haudio = pdev->pClassData;
-  
-  if (haudio->control.cmd == AUDIO_REQ_SET_CUR)
-  {/* In this driver, to simplify code, only SET_CUR request is managed */
-
-    if (haudio->control.unit == AUDIO_OUT_STREAMING_CTRL)
-    {
-     ((USBD_AUDIO_ItfTypeDef *)pdev->pUserData)->MuteCtl(haudio->control.data[0]);     
-      haudio->control.cmd = 0;
-      haudio->control.len = 0;
-    }
-  } 
-
-  return USBD_OK;
-}
-/**
-  * @brief  USBD_AUDIO_EP0_TxReady
-  *         handle EP0 TRx Ready event
-  * @param  pdev: device instance
-  * @retval status
-  */
-static uint8_t  USBD_AUDIO_EP0_TxReady (USBD_HandleTypeDef *pdev)
-{
-  /* Only OUT control data are processed */
-  return USBD_OK;
-}
-/**
-  * @brief  USBD_AUDIO_SOF
-  *         handle SOF event
-  * @param  pdev: device instance
-  * @retval status
-  */
-static uint8_t  USBD_AUDIO_SOF (USBD_HandleTypeDef *pdev)
-{
-  return USBD_OK;
-}
-
-/**
-  * @brief  USBD_AUDIO_SOF
-  *         handle SOF event
-  * @param  pdev: device instance
-  * @retval status
-  */
-void  USBD_AUDIO_Sync (USBD_HandleTypeDef *pdev, AUDIO_OffsetTypeDef offset)
-{
-  int8_t shift = 0;
-  USBD_AUDIO_HandleTypeDef   *haudio;
-  haudio = pdev->pClassData;
-  
-  haudio->offset =  offset; 
-  
-  
-  if(haudio->rd_enable == 1)
-  {
-    haudio->rd_ptr += AUDIO_TOTAL_BUF_SIZE/2;
-    
-    if (haudio->rd_ptr == AUDIO_TOTAL_BUF_SIZE)
-    {
-      /* roll back */
-      haudio->rd_ptr = 0;
-    }
-  }
-  
-  if(haudio->rd_ptr > haudio->wr_ptr)
-  {
-    if((haudio->rd_ptr - haudio->wr_ptr) < AUDIO_OUT_PACKET)
-    {
-      shift = -4;
-    }
-    else if((haudio->rd_ptr - haudio->wr_ptr) > (AUDIO_TOTAL_BUF_SIZE - AUDIO_OUT_PACKET))
-    {
-      shift = 4;
-    }    
-
-  }
-  else
-  {
-    if((haudio->wr_ptr - haudio->rd_ptr) < AUDIO_OUT_PACKET)
-    {
-      shift = 4;
-    }
-    else if((haudio->wr_ptr - haudio->rd_ptr) > (AUDIO_TOTAL_BUF_SIZE - AUDIO_OUT_PACKET))
-    {
-      shift = -4;
-    }  
-  }
-
-  if(haudio->offset == AUDIO_OFFSET_FULL)
-  {
-    ((USBD_AUDIO_ItfTypeDef *)pdev->pUserData)->AudioCmd(&haudio->buffer[0],
-                                                         AUDIO_TOTAL_BUF_SIZE/2 - shift,
-                                                         AUDIO_CMD_PLAY); 
-      haudio->offset = AUDIO_OFFSET_NONE;           
-  }
-  else if (haudio->offset == AUDIO_OFFSET_HALF)
-  {
-    
-    ((USBD_AUDIO_ItfTypeDef *)pdev->pUserData)->AudioCmd(&haudio->buffer[AUDIO_TOTAL_BUF_SIZE/2],
-                                                         AUDIO_TOTAL_BUF_SIZE/2 - shift,
-                                                         AUDIO_CMD_PLAY); 
-      haudio->offset = AUDIO_OFFSET_NONE;  
-      
-  }  
-}
-/**
-  * @brief  USBD_AUDIO_IsoINIncomplete
-  *         handle data ISO IN Incomplete event
-  * @param  pdev: device instance
-  * @param  epnum: endpoint index
-  * @retval status
-  */
-static uint8_t  USBD_AUDIO_IsoINIncomplete (USBD_HandleTypeDef *pdev, uint8_t epnum)
-{
-
-  return USBD_OK;
-}
-/**
-  * @brief  USBD_AUDIO_IsoOutIncomplete
-  *         handle data ISO OUT Incomplete event
-  * @param  pdev: device instance
-  * @param  epnum: endpoint index
-  * @retval status
-  */
-static uint8_t  USBD_AUDIO_IsoOutIncomplete (USBD_HandleTypeDef *pdev, uint8_t epnum)
-{
-
-  return USBD_OK;
-}
-/**
-  * @brief  USBD_AUDIO_DataOut
-  *         handle data OUT Stage
-  * @param  pdev: device instance
-  * @param  epnum: endpoint index
-  * @retval status
-  */
-static uint8_t  USBD_AUDIO_DataOut (USBD_HandleTypeDef *pdev, 
-                              uint8_t epnum)
-{
-  USBD_AUDIO_HandleTypeDef   *haudio;
-  haudio = pdev->pClassData;
-  
-  if (epnum == AUDIO_OUT_EP)
-  {
-    /* Increment the Buffer pointer or roll it back when all buffers are full */
-    
-    haudio->wr_ptr += AUDIO_OUT_PACKET;
-    
-    if (haudio->wr_ptr == AUDIO_TOTAL_BUF_SIZE)
-    {/* All buffers are full: roll back */
-      haudio->wr_ptr = 0;
-      
-      if(haudio->offset == AUDIO_OFFSET_UNKNOWN)
-      {
-        ((USBD_AUDIO_ItfTypeDef *)pdev->pUserData)->AudioCmd(&haudio->buffer[0],
-                                                             AUDIO_TOTAL_BUF_SIZE/2,
-                                                             AUDIO_CMD_START);
-          haudio->offset = AUDIO_OFFSET_NONE;
-      }
-    }
-    
-    if(haudio->rd_enable == 0)
-    {
-      if (haudio->wr_ptr == (AUDIO_TOTAL_BUF_SIZE / 2))
-      {
-        haudio->rd_enable = 1; 
-      }
-    }
-    
-    /* Prepare Out endpoint to receive next audio packet */
-    USBD_LL_PrepareReceive(pdev,
-                           AUDIO_OUT_EP,
-                           &haudio->buffer[haudio->wr_ptr], 
-                           AUDIO_OUT_PACKET);  
-      
-  }
-  
-  return USBD_OK;
-}
-
-/**
-  * @brief  AUDIO_Req_GetCurrent
-  *         Handles the GET_CUR Audio control request.
-  * @param  pdev: instance
-  * @param  req: setup class request
-  * @retval status
-  */
-static void AUDIO_REQ_GetCurrent(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
-{  
-  USBD_AUDIO_HandleTypeDef   *haudio;
-  haudio = pdev->pClassData;
-  
-  memset(haudio->control.data, 0, 64);
-  /* Send the current mute state */
-  USBD_CtlSendData (pdev, 
-                    haudio->control.data,
-                    req->wLength);
-}
-
-/**
-  * @brief  AUDIO_Req_SetCurrent
-  *         Handles the SET_CUR Audio control request.
-  * @param  pdev: instance
-  * @param  req: setup class request
-  * @retval status
-  */
-static void AUDIO_REQ_SetCurrent(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
-{ 
-  USBD_AUDIO_HandleTypeDef   *haudio;
-  haudio = pdev->pClassData;
-  
-  if (req->wLength)
-  {
-    /* Prepare the reception of the buffer over EP0 */
-    USBD_CtlPrepareRx (pdev,
-                       haudio->control.data,                                  
-                       req->wLength);    
-    
-    haudio->control.cmd = AUDIO_REQ_SET_CUR;     /* Set the request value */
-    haudio->control.len = req->wLength;          /* Set the request data length */
-    haudio->control.unit = HIBYTE(req->wIndex);  /* Set the request target unit */
-  }
-}
-
-
-/**
-* @brief  DeviceQualifierDescriptor 
-*         return Device Qualifier descriptor
-* @param  length : pointer data length
-* @retval pointer to descriptor buffer
-*/
-static uint8_t  *USBD_AUDIO_GetDeviceQualifierDesc (uint16_t *length)
-{
-  *length = sizeof (USBD_AUDIO_DeviceQualifierDesc);
-  return USBD_AUDIO_DeviceQualifierDesc;
-}
-
-/**
-* @brief  USBD_AUDIO_RegisterInterface
-* @param  fops: Audio interface callback
-* @retval status
-*/
-uint8_t  USBD_AUDIO_RegisterInterface  (USBD_HandleTypeDef   *pdev, 
-                                        USBD_AUDIO_ItfTypeDef *fops)
-{
-  if(fops != NULL)
-  {
-    pdev->pUserData= fops;
-  }
-  return 0;
-}
-/**
-  * @}
-  */ 
-
-
-/**
-  * @}
-  */ 
-
-
-/**
-  * @}
-  */ 
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/stmhal/usbdev/class/AUDIO/Src/usbd_audio_if_template.c b/stmhal/usbdev/class/AUDIO/Src/usbd_audio_if_template.c
deleted file mode 100644
index 63ac8fed0..000000000
--- a/stmhal/usbdev/class/AUDIO/Src/usbd_audio_if_template.c
+++ /dev/null
@@ -1,190 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    usbd_cdc_if_template.c
-  * @author  MCD Application Team
-  * @version V2.0.0
-  * @date    18-February-2014
-  * @brief   Generic media access Layer.
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT 2014 STMicroelectronics</center></h2>
-  *
-  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
-  * You may not use this file except in compliance with the License.
-  * You may obtain a copy of the License at:
-  *
-  *        http://www.st.com/software_license_agreement_liberty_v2
-  *
-  * Unless required by applicable law or agreed to in writing, software 
-  * distributed under the License is distributed on an "AS IS" BASIS, 
-  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  * See the License for the specific language governing permissions and
-  * limitations under the License.
-  *
-  ******************************************************************************
-  */ 
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_audio_if_template.h"
-
-/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
-  * @{
-  */
-
-
-/** @defgroup USBD_AUDIO 
-  * @brief usbd core module
-  * @{
-  */ 
-
-/** @defgroup USBD_AUDIO_Private_TypesDefinitions
-  * @{
-  */ 
-/**
-  * @}
-  */ 
-
-
-/** @defgroup USBD_AUDIO_Private_Defines
-  * @{
-  */ 
-/**
-  * @}
-  */ 
-
-
-/** @defgroup USBD_AUDIO_Private_Macros
-  * @{
-  */ 
-
-/**
-  * @}
-  */ 
-
-
-/** @defgroup USBD_AUDIO_Private_FunctionPrototypes
-  * @{
-  */
-
-static int8_t  TEMPLATE_Init         (uint32_t  AudioFreq, uint32_t Volume, uint32_t options);
-static int8_t  TEMPLATE_DeInit       (uint32_t options);
-static int8_t  TEMPLATE_AudioCmd     (uint8_t* pbuf, uint32_t size, uint8_t cmd);
-static int8_t  TEMPLATE_VolumeCtl    (uint8_t vol);
-static int8_t  TEMPLATE_MuteCtl      (uint8_t cmd);
-static int8_t  TEMPLATE_PeriodicTC   (uint8_t cmd);
-static int8_t  TEMPLATE_GetState     (void);
-
-USBD_AUDIO_ItfTypeDef USBD_AUDIO_Template_fops = 
-{
-  TEMPLATE_Init,
-  TEMPLATE_DeInit,
-  TEMPLATE_AudioCmd,
-  TEMPLATE_VolumeCtl,
-  TEMPLATE_MuteCtl,
-  TEMPLATE_PeriodicTC,
-  TEMPLATE_GetState,
-};
-
-/* Private functions ---------------------------------------------------------*/
-
-/**
-  * @brief  TEMPLATE_Init
-  *         Initializes the AUDIO media low layer
-  * @param  None
-  * @retval Result of the opeartion: USBD_OK if all operations are OK else USBD_FAIL
-  */
-static int8_t TEMPLATE_Init(uint32_t  AudioFreq, uint32_t Volume, uint32_t options)
-{
-  /*
-     Add your initialization code here 
-  */  
-  return (0);
-}
-
-/**
-  * @brief  TEMPLATE_DeInit
-  *         DeInitializes the AUDIO media low layer
-  * @param  None
-  * @retval Result of the opeartion: USBD_OK if all operations are OK else USBD_FAIL
-  */
-static int8_t TEMPLATE_DeInit(uint32_t options)
-{
-  /*
-     Add your deinitialization code here 
-  */  
-  return (0);
-}
-
-
-/**
-  * @brief  TEMPLATE_AudioCmd
-  *         AUDIO command handler 
-  * @param  Buf: Buffer of data to be sent
-  * @param  size: Number of data to be sent (in bytes)
-  * @param  cmd: command opcode
-  * @retval Result of the opeartion: USBD_OK if all operations are OK else USBD_FAIL
-  */
-static int8_t TEMPLATE_AudioCmd (uint8_t* pbuf, uint32_t size, uint8_t cmd)
-{
-
-  return (0);
-}
-
-/**
-  * @brief  TEMPLATE_VolumeCtl              
-  * @param  vol: volume level (0..100)
-  * @retval Result of the opeartion: USBD_OK if all operations are OK else USBD_FAIL
-  */
-static int8_t TEMPLATE_VolumeCtl (uint8_t vol)
-{
- 
-  return (0);
-}
-
-/**
-  * @brief  TEMPLATE_MuteCtl              
-  * @param  cmd: vmute command
-  * @retval Result of the opeartion: USBD_OK if all operations are OK else USBD_FAIL
-  */
-static int8_t TEMPLATE_MuteCtl (uint8_t cmd)
-{
- 
-  return (0);
-}
-
-/**
-  * @brief  TEMPLATE_PeriodicTC              
-  * @param  cmd
-  * @retval Result of the opeartion: USBD_OK if all operations are OK else USBD_FAIL
-  */
-static int8_t TEMPLATE_PeriodicTC (uint8_t cmd)
-{
- 
-  return (0);
-}
-
-/**
-  * @brief  TEMPLATE_GetState              
-  * @param  None
-  * @retval Result of the opeartion: USBD_OK if all operations are OK else USBD_FAIL
-  */
-static int8_t TEMPLATE_GetState (void)
-{
- 
-  return (0);
-}
-/**
-  * @}
-  */ 
-
-/**
-  * @}
-  */ 
-
-/**
-  * @}
-  */ 
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
-
diff --git a/stmhal/usbdev/class/CustomHID/Inc/usbd_customhid.h b/stmhal/usbdev/class/CustomHID/Inc/usbd_customhid.h
deleted file mode 100644
index 91ff70630..000000000
--- a/stmhal/usbdev/class/CustomHID/Inc/usbd_customhid.h
+++ /dev/null
@@ -1,140 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    usbd_hid_core.h
-  * @author  MCD Application Team
-  * @version V2.0.0
-  * @date    18-February-2014
-  * @brief   header file for the usbd_hid_core.c file.
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT 2014 STMicroelectronics</center></h2>
-  *
-  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
-  * You may not use this file except in compliance with the License.
-  * You may obtain a copy of the License at:
-  *
-  *        http://www.st.com/software_license_agreement_liberty_v2
-  *
-  * Unless required by applicable law or agreed to in writing, software 
-  * distributed under the License is distributed on an "AS IS" BASIS, 
-  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  * See the License for the specific language governing permissions and
-  * limitations under the License.
-  *
-  ******************************************************************************
-  */ 
-
-/* Includes ------------------------------------------------------------------*/
-
-#ifndef __USB_CUSTOM_HID_CORE_H_
-#define __USB_CUSTOM_HID_CORE_H_
-
-#include  "usbd_ioreq.h"
-
-/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
-  * @{
-  */
-  
-/** @defgroup USBD_CUSTOM_HID
-  * @brief This file is the Header file for USBD_msc.c
-  * @{
-  */ 
-
-
-/** @defgroup USBD_CUSTOM_HID_Exported_Defines
-  * @{
-  */ 
-#define CUSTOM_HID_EPIN_ADDR                 0x81
-#define CUSTOM_HID_EPIN_SIZE                 0x02
-
-#define CUSTOM_HID_EPOUT_ADDR                0x01
-#define CUSTOM_HID_EPOUT_SIZE                0x02
-
-
-
-#define USB_CUSTOM_HID_CONFIG_DESC_SIZ       41
-#define USB_CUSTOM_HID_DESC_SIZ              9
-#define CUSTOM_HID_REPORT_DESC_SIZE          163
-
-#define CUSTOM_HID_DESCRIPTOR_TYPE           0x21
-#define CUSTOM_HID_REPORT_DESC               0x22
-
-
-#define CUSTOM_HID_REQ_SET_PROTOCOL          0x0B
-#define CUSTOM_HID_REQ_GET_PROTOCOL          0x03
-
-#define CUSTOM_HID_REQ_SET_IDLE              0x0A
-#define CUSTOM_HID_REQ_GET_IDLE              0x02
-
-#define CUSTOM_HID_REQ_SET_REPORT            0x09
-#define CUSTOM_HID_REQ_GET_REPORT            0x01
-/**
-  * @}
-  */ 
-
-
-/** @defgroup USBD_CORE_Exported_TypesDefinitions
-  * @{
-  */
-typedef enum
-{
-  CUSTOM_HID_IDLE = 0,
-  CUSTOM_HID_BUSY,
-}
-CUSTOM_HID_StateTypeDef; 
-
-
-typedef struct
-{
-  uint32_t             Protocol;   
-  uint32_t             IdleState;  
-  uint32_t             AltSetting;
-  CUSTOM_HID_StateTypeDef     state;  
-}
-USBD_CUSTOM_HID_HandleTypeDef; 
-/**
-  * @}
-  */ 
-
-
-
-/** @defgroup USBD_CORE_Exported_Macros
-  * @{
-  */ 
-
-/**
-  * @}
-  */ 
-
-/** @defgroup USBD_CORE_Exported_Variables
-  * @{
-  */ 
-
-extern USBD_ClassTypeDef  USBD_CUSTOM_HID;
-/**
-  * @}
-  */ 
-
-/** @defgroup USB_CORE_Exported_Functions
-  * @{
-  */ 
-uint8_t USBD_CUSTOM_HID_SendReport (USBD_HandleTypeDef *pdev, 
-                                 uint8_t *report,
-                                 uint16_t len);
-void USBD_HID_DataOutCallback(USBD_HandleTypeDef *pdev, uint8_t epnum);
-void USBD_HID_EP0_DataOutCallback(USBD_HandleTypeDef *pdev);
-/**
-  * @}
-  */ 
-
-#endif  // __USB_CUSTOM_HID_CORE_H_
-/**
-  * @}
-  */ 
-
-/**
-  * @}
-  */ 
-  
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/stmhal/usbdev/class/CustomHID/Src/usbd_customhid.c b/stmhal/usbdev/class/CustomHID/Src/usbd_customhid.c
deleted file mode 100644
index 358f2b7d2..000000000
--- a/stmhal/usbdev/class/CustomHID/Src/usbd_customhid.c
+++ /dev/null
@@ -1,638 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    usbd_hid.c
-  * @author  MCD Application Team
-  * @version V2.0.0
-  * @date    18-February-2014
-  * @brief   This file provides the CUSTOM_HID core functions.
-  *
-  * @verbatim
-  *      
-  *          ===================================================================      
-  *                                CUSTOM_HID Class  Description
-  *          =================================================================== 
-  *           This module manages the CUSTOM_HID class V1.11 following the "Device Class Definition
-  *           for Human Interface Devices (CUSTOM_HID) Version 1.11 Jun 27, 2001".
-  *           This driver implements the following aspects of the specification:
-  *             - The Boot Interface Subclass
-  *             - The Mouse protocol
-  *             - Usage Page : Generic Desktop
-  *             - Usage : Joystick)
-  *             - Collection : Application 
-  *      
-  * @note     In HS mode and when the DMA is used, all variables and data structures
-  *           dealing with the DMA during the transaction process should be 32-bit aligned.
-  *           
-  *      
-  *  @endverbatim
-  *
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT 2014 STMicroelectronics</center></h2>
-  *
-  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
-  * You may not use this file except in compliance with the License.
-  * You may obtain a copy of the License at:
-  *
-  *        http://www.st.com/software_license_agreement_liberty_v2
-  *
-  * Unless required by applicable law or agreed to in writing, software 
-  * distributed under the License is distributed on an "AS IS" BASIS, 
-  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  * See the License for the specific language governing permissions and
-  * limitations under the License.
-  *
-  ******************************************************************************
-  */ 
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_customhid.h"
-#include "usbd_desc.h"
-#include "usbd_ctlreq.h"
-
-
-/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
-  * @{
-  */
-
-
-/** @defgroup USBD_CUSTOM_HID 
-  * @brief usbd core module
-  * @{
-  */ 
-
-/** @defgroup USBD_CUSTOM_HID_Private_TypesDefinitions
-  * @{
-  */ 
-/**
-  * @}
-  */ 
-
-
-/** @defgroup USBD_CUSTOM_HID_Private_Defines
-  * @{
-  */ 
-
-/**
-  * @}
-  */ 
-
-
-/** @defgroup USBD_CUSTOM_HID_Private_Macros
-  * @{
-  */ 
-/**
-  * @}
-  */ 
-uint8_t Report_buf[2];
-extern uint8_t PrevXferDone;
-uint32_t flag = 0;
-uint8_t USBD_CUSTOM_HID_Report_ID=0;
-/** @defgroup USBD_CUSTOM_HID_Private_FunctionPrototypes
-  * @{
-  */
-
-
-static uint8_t  USBD_CUSTOM_HID_Init (USBD_HandleTypeDef *pdev, 
-                               uint8_t cfgidx);
-
-static uint8_t  USBD_CUSTOM_HID_DeInit (USBD_HandleTypeDef *pdev, 
-                                 uint8_t cfgidx);
-
-static uint8_t  USBD_CUSTOM_HID_Setup (USBD_HandleTypeDef *pdev, 
-                                USBD_SetupReqTypedef *req);
-
-static uint8_t  *USBD_CUSTOM_HID_GetCfgDesc (uint16_t *length);
-
-static uint8_t  *USBD_CUSTOM_HID_GetDeviceQualifierDesc (uint16_t *length);
-
-static uint8_t  USBD_CUSTOM_HID_DataIn (USBD_HandleTypeDef *pdev, uint8_t epnum);
-
-static uint8_t  USBD_CUSTOM_HID_DataOut (USBD_HandleTypeDef *pdev, uint8_t epnum);
-static uint8_t  USBD_CUSTOM_HID_EP0_RxReady (USBD_HandleTypeDef  *pdev);
-/**
-  * @}
-  */ 
-
-/** @defgroup USBD_CUSTOM_HID_Private_Variables
-  * @{
-  */ 
-
-USBD_ClassTypeDef  USBD_CUSTOM_HID = 
-{
-  USBD_CUSTOM_HID_Init,
-  USBD_CUSTOM_HID_DeInit,
-  USBD_CUSTOM_HID_Setup,
-  NULL, /*EP0_TxSent*/  
-  USBD_CUSTOM_HID_EP0_RxReady, /*EP0_RxReady*/ /* STATUS STAGE IN */
-  USBD_CUSTOM_HID_DataIn, /*DataIn*/
-  USBD_CUSTOM_HID_DataOut,
-  NULL, /*SOF */
-  NULL,
-  NULL,      
-  USBD_CUSTOM_HID_GetCfgDesc,
-  USBD_CUSTOM_HID_GetCfgDesc, 
-  USBD_CUSTOM_HID_GetCfgDesc,
-  USBD_CUSTOM_HID_GetDeviceQualifierDesc,
-};
-
-/* USB CUSTOM_HID device Configuration Descriptor */
-__ALIGN_BEGIN static uint8_t USBD_CUSTOM_HID_CfgDesc[USB_CUSTOM_HID_CONFIG_DESC_SIZ] __ALIGN_END =
-{
-  0x09, /* bLength: Configuration Descriptor size */
-  USB_DESC_TYPE_CONFIGURATION, /* bDescriptorType: Configuration */
-  USB_CUSTOM_HID_CONFIG_DESC_SIZ,
-  /* wTotalLength: Bytes returned */
-  0x00,
-  0x01,         /*bNumInterfaces: 1 interface*/
-  0x01,         /*bConfigurationValue: Configuration value*/
-  0x00,         /*iConfiguration: Index of string descriptor describing
-  the configuration*/
-  0xC0,         /*bmAttributes: bus powered */
-  0x32,         /*MaxPower 100 mA: this current is used for detecting Vbus*/
-  
-  /************** Descriptor of CUSTOM HID interface ****************/
-  /* 09 */
-  0x09,         /*bLength: Interface Descriptor size*/
-  USB_DESC_TYPE_INTERFACE,/*bDescriptorType: Interface descriptor type*/
-  0x00,         /*bInterfaceNumber: Number of Interface*/
-  0x00,         /*bAlternateSetting: Alternate setting*/
-  0x02,         /*bNumEndpoints*/
-  0x03,         /*bInterfaceClass: CUSTOM_HID*/
-  0x00,         /*bInterfaceSubClass : 1=BOOT, 0=no boot*/
-  0x00,         /*nInterfaceProtocol : 0=none, 1=keyboard, 2=mouse*/
-  0,            /*iInterface: Index of string descriptor*/
-  /******************** Descriptor of CUSTOM_HID *************************/
-  /* 18 */
-  0x09,         /*bLength: CUSTOM_HID Descriptor size*/
-  CUSTOM_HID_DESCRIPTOR_TYPE, /*bDescriptorType: CUSTOM_HID*/
-  0x11,         /*bcdCUSTOM_HID: CUSTOM_HID Class Spec release number*/
-  0x01,
-  0x00,         /*bCountryCode: Hardware target country*/
-  0x01,         /*bNumDescriptors: Number of CUSTOM_HID class descriptors to follow*/
-  0x22,         /*bDescriptorType*/
-  CUSTOM_HID_REPORT_DESC_SIZE,/*wItemLength: Total length of Report descriptor*/
-  0x00,
-  /******************** Descriptor of Custom HID endpoints ********************/
-  /* 27 */
-  0x07,          /*bLength: Endpoint Descriptor size*/
-  USB_DESC_TYPE_ENDPOINT, /*bDescriptorType:*/
-  
-  CUSTOM_HID_EPIN_ADDR,     /*bEndpointAddress: Endpoint Address (IN)*/
-  0x03,          /*bmAttributes: Interrupt endpoint*/
-  CUSTOM_HID_EPIN_SIZE, /*wMaxPacketSize: 2 Byte max */
-  0x00,
-  0x20,          /*bInterval: Polling Interval (20 ms)*/
-  /* 34 */
-  
-  0x07,	         /* bLength: Endpoint Descriptor size */
-  USB_DESC_TYPE_ENDPOINT,	/* bDescriptorType: */
-  CUSTOM_HID_EPOUT_ADDR,  /*bEndpointAddress: Endpoint Address (OUT)*/
-  0x03,	/* bmAttributes: Interrupt endpoint */
-  CUSTOM_HID_EPOUT_SIZE,	/* wMaxPacketSize: 2 Bytes max  */
-  0x00,
-  0x20,	/* bInterval: Polling Interval (20 ms) */
-  /* 41 */
-} ;
-
-/* USB CUSTOM_HID device Configuration Descriptor */
-__ALIGN_BEGIN static uint8_t USBD_CUSTOM_HID_Desc[USB_CUSTOM_HID_DESC_SIZ] __ALIGN_END =
-{
-  /* 18 */
-  0x09,         /*bLength: CUSTOM_HID Descriptor size*/
-  CUSTOM_HID_DESCRIPTOR_TYPE, /*bDescriptorType: CUSTOM_HID*/
-  0x11,         /*bcdCUSTOM_HID: CUSTOM_HID Class Spec release number*/
-  0x01,
-  0x00,         /*bCountryCode: Hardware target country*/
-  0x01,         /*bNumDescriptors: Number of CUSTOM_HID class descriptors to follow*/
-  0x22,         /*bDescriptorType*/
-  CUSTOM_HID_REPORT_DESC_SIZE,/*wItemLength: Total length of Report descriptor*/
-  0x00,
-};
-
-/* USB Standard Device Descriptor */
-__ALIGN_BEGIN static uint8_t USBD_CUSTOM_HID_DeviceQualifierDesc[USB_LEN_DEV_QUALIFIER_DESC] __ALIGN_END =
-{
-  USB_LEN_DEV_QUALIFIER_DESC,
-  USB_DESC_TYPE_DEVICE_QUALIFIER,
-  0x00,
-  0x02,
-  0x00,
-  0x00,
-  0x00,
-  0x40,
-  0x01,
-  0x00,
-};
-
-
-__ALIGN_BEGIN static uint8_t CUSTOM_HID_ReportDesc[CUSTOM_HID_REPORT_DESC_SIZE] __ALIGN_END =
-{
-  0x06, 0xFF, 0x00,      /* USAGE_PAGE (Vendor Page: 0xFF00) */                       
-  0x09, 0x01,            /* USAGE (Demo Kit)               */    
-  0xa1, 0x01,            /* COLLECTION (Application)       */            
-  /* 6 */
-  
-  /* Led 1 */        
-  0x85, 0x01,            /*     REPORT_ID (1)		     */
-  0x09, 0x01,            /*     USAGE (LED 1)	             */
-  0x15, 0x00,            /*     LOGICAL_MINIMUM (0)        */          
-  0x25, 0x01,            /*     LOGICAL_MAXIMUM (1)        */           
-  0x75, 0x08,            /*     REPORT_SIZE (8)            */        
-  0x95, 0x01,            /*     REPORT_COUNT (1)           */       
-  0xB1, 0x82,             /*    FEATURE (Data,Var,Abs,Vol) */     
-  
-  0x85, 0x01,            /*     REPORT_ID (1)              */
-  0x09, 0x01,            /*     USAGE (LED 1)              */
-  0x91, 0x82,            /*     OUTPUT (Data,Var,Abs,Vol)  */
-  /* 26 */
-  
-  /* Led 2 */
-  0x85, 0x02,            /*     REPORT_ID 2		     */
-  0x09, 0x02,            /*     USAGE (LED 2)	             */
-  0x15, 0x00,            /*     LOGICAL_MINIMUM (0)        */          
-  0x25, 0x01,            /*     LOGICAL_MAXIMUM (1)        */           
-  0x75, 0x08,            /*     REPORT_SIZE (8)            */        
-  0x95, 0x01,            /*     REPORT_COUNT (1)           */       
-  0xB1, 0x82,             /*    FEATURE (Data,Var,Abs,Vol) */     
-  
-  0x85, 0x02,            /*     REPORT_ID (2)              */
-  0x09, 0x02,            /*     USAGE (LED 2)              */
-  0x91, 0x82,            /*     OUTPUT (Data,Var,Abs,Vol)  */
-  /* 46 */
-  
-  /* Led 3 */        
-  0x85, 0x03,            /*     REPORT_ID (3)		     */
-  0x09, 0x03,            /*     USAGE (LED 3)	             */
-  0x15, 0x00,            /*     LOGICAL_MINIMUM (0)        */          
-  0x25, 0x01,            /*     LOGICAL_MAXIMUM (1)        */           
-  0x75, 0x08,            /*     REPORT_SIZE (8)            */        
-  0x95, 0x01,            /*     REPORT_COUNT (1)           */       
-  0xB1, 0x82,             /*    FEATURE (Data,Var,Abs,Vol) */     
-  
-  0x85, 0x03,            /*     REPORT_ID (3)              */
-  0x09, 0x03,            /*     USAGE (LED 3)              */
-  0x91, 0x82,            /*     OUTPUT (Data,Var,Abs,Vol)  */
-  /* 66 */
-  
-  /* Led 4 */
-  0x85, 0x04,            /*     REPORT_ID 4)		     */
-  0x09, 0x04,            /*     USAGE (LED 4)	             */
-  0x15, 0x00,            /*     LOGICAL_MINIMUM (0)        */          
-  0x25, 0x01,            /*     LOGICAL_MAXIMUM (1)        */           
-  0x75, 0x08,            /*     REPORT_SIZE (8)            */        
-  0x95, 0x01,            /*     REPORT_COUNT (1)           */       
-  0xB1, 0x82,            /*     FEATURE (Data,Var,Abs,Vol) */     
-  
-  0x85, 0x04,            /*     REPORT_ID (4)              */
-  0x09, 0x04,            /*     USAGE (LED 4)              */
-  0x91, 0x82,            /*     OUTPUT (Data,Var,Abs,Vol)  */
-  /* 86 */
-  
-  /* key Push Button */  
-  0x85, 0x05,            /*     REPORT_ID (5)              */
-  0x09, 0x05,            /*     USAGE (Push Button)        */      
-  0x15, 0x00,            /*     LOGICAL_MINIMUM (0)        */      
-  0x25, 0x01,            /*     LOGICAL_MAXIMUM (1)        */      
-  0x75, 0x01,            /*     REPORT_SIZE (1)            */  
-  0x81, 0x82,            /*     INPUT (Data,Var,Abs,Vol)   */   
-  
-  0x09, 0x05,            /*     USAGE (Push Button)        */               
-  0x75, 0x01,            /*     REPORT_SIZE (1)            */           
-  0xb1, 0x82,            /*     FEATURE (Data,Var,Abs,Vol) */  
-  
-  0x75, 0x07,            /*     REPORT_SIZE (7)            */           
-  0x81, 0x83,            /*     INPUT (Cnst,Var,Abs,Vol)   */                    
-  0x85, 0x05,            /*     REPORT_ID (2)              */         
-  
-  0x75, 0x07,            /*     REPORT_SIZE (7)            */           
-  0xb1, 0x83,            /*     FEATURE (Cnst,Var,Abs,Vol) */                      
-  /* 114 */
-  
-  /* Tamper Push Button */  
-  0x85, 0x06,            /*     REPORT_ID (6)              */
-  0x09, 0x06,            /*     USAGE (Tamper Push Button) */      
-  0x15, 0x00,            /*     LOGICAL_MINIMUM (0)        */      
-  0x25, 0x01,            /*     LOGICAL_MAXIMUM (1)        */      
-  0x75, 0x01,            /*     REPORT_SIZE (1)            */  
-  0x81, 0x82,            /*     INPUT (Data,Var,Abs,Vol)   */   
-  
-  0x09, 0x06,            /*     USAGE (Tamper Push Button) */               
-  0x75, 0x01,            /*     REPORT_SIZE (1)            */           
-  0xb1, 0x82,            /*     FEATURE (Data,Var,Abs,Vol) */  
-  
-  0x75, 0x07,            /*     REPORT_SIZE (7)            */           
-  0x81, 0x83,            /*     INPUT (Cnst,Var,Abs,Vol)   */                    
-  0x85, 0x06,            /*     REPORT_ID (6)              */         
-  
-  0x75, 0x07,            /*     REPORT_SIZE (7)            */           
-  0xb1, 0x83,            /*     FEATURE (Cnst,Var,Abs,Vol) */  
-  /* 142 */
-  
-  /* ADC IN */
-  0x85, 0x07,            /*     REPORT_ID (7)              */         
-  0x09, 0x07,            /*     USAGE (ADC IN)             */          
-  0x15, 0x00,            /*     LOGICAL_MINIMUM (0)        */               
-  0x26, 0xff, 0x00,      /*     LOGICAL_MAXIMUM (255)      */                 
-  0x75, 0x08,            /*     REPORT_SIZE (8)            */           
-  0x81, 0x82,            /*     INPUT (Data,Var,Abs,Vol)   */                    
-  0x85, 0x07,            /*     REPORT_ID (7)              */                 
-  0x09, 0x07,            /*     USAGE (ADC in)             */                     
-  0xb1, 0x82,            /*     FEATURE (Data,Var,Abs,Vol) */                                 
-  /* 161 */
-  
-  0xc0 	          /*     END_COLLECTION	             */
-}; 
-
-/**
-  * @}
-  */ 
-
-/** @defgroup USBD_CUSTOM_HID_Private_Functions
-  * @{
-  */ 
-
-/**
-  * @brief  USBD_CUSTOM_HID_Init
-  *         Initialize the CUSTOM_HID interface
-  * @param  pdev: device instance
-  * @param  cfgidx: Configuration index
-  * @retval status
-  */
-static uint8_t  USBD_CUSTOM_HID_Init (USBD_HandleTypeDef *pdev, 
-                               uint8_t cfgidx)
-{
-  uint8_t ret = 0;
-  
-  /* Open EP IN */
-  USBD_LL_OpenEP(pdev,
-                 CUSTOM_HID_EPIN_ADDR,
-                 USBD_EP_TYPE_INTR,
-                 CUSTOM_HID_EPIN_SIZE);  
-  
-  /* Open EP OUT */
-  USBD_LL_OpenEP(pdev,
-                 CUSTOM_HID_EPOUT_ADDR,
-                 USBD_EP_TYPE_INTR,
-                 CUSTOM_HID_EPOUT_SIZE);
-  
-  pdev->pClassData = USBD_malloc(sizeof (USBD_CUSTOM_HID_HandleTypeDef));
-  
-  if(pdev->pClassData == NULL)
-  {
-    ret = 1; 
-  }
-  else
-  {
-    ((USBD_CUSTOM_HID_HandleTypeDef *)pdev->pClassData)->state = CUSTOM_HID_IDLE;
-          /* Prepare Out endpoint to receive 1st packet */ 
-    USBD_LL_PrepareReceive(pdev, CUSTOM_HID_EPOUT_ADDR , Report_buf , 2);
-  }
-    
-  return ret;
-}
-
-/**
-  * @brief  USBD_CUSTOM_HID_Init
-  *         DeInitialize the CUSTOM_HID layer
-  * @param  pdev: device instance
-  * @param  cfgidx: Configuration index
-  * @retval status
-  */
-static uint8_t  USBD_CUSTOM_HID_DeInit (USBD_HandleTypeDef *pdev, 
-                                 uint8_t cfgidx)
-{
-  /* Close CUSTOM_HID EP IN */
-  USBD_LL_CloseEP(pdev,
-                  CUSTOM_HID_EPIN_SIZE);
-  
-  /* Close CUSTOM_HID EP OUT */
-  USBD_LL_CloseEP(pdev,
-                  CUSTOM_HID_EPOUT_SIZE);
-  
-  /* FRee allocated memory */
-  if(pdev->pClassData != NULL)
-  {
-    USBD_free(pdev->pClassData);
-    pdev->pClassData = NULL;
-  }
-  return USBD_OK;
-}
-
-/**
-  * @brief  USBD_CUSTOM_HID_Setup
-  *         Handle the CUSTOM_HID specific requests
-  * @param  pdev: instance
-  * @param  req: usb requests
-  * @retval status
-  */
-static uint8_t  USBD_CUSTOM_HID_Setup (USBD_HandleTypeDef *pdev, 
-                                USBD_SetupReqTypedef *req)
-{
-  uint8_t USBD_CUSTOM_HID_Report_LENGTH=0;
-  uint16_t len = 0;
-  uint8_t  *pbuf = NULL;
-  USBD_CUSTOM_HID_HandleTypeDef     *hhid = pdev->pClassData;
-
-  switch (req->bmRequest & USB_REQ_TYPE_MASK)
-  {
-  case USB_REQ_TYPE_CLASS :  
-    switch (req->bRequest)
-    {
-      
-      
-    case CUSTOM_HID_REQ_SET_PROTOCOL:
-      hhid->Protocol = (uint8_t)(req->wValue);
-      break;
-      
-    case CUSTOM_HID_REQ_GET_PROTOCOL:
-      USBD_CtlSendData (pdev, 
-                        (uint8_t *)&hhid->Protocol,
-                        1);    
-      break;
-      
-    case CUSTOM_HID_REQ_SET_IDLE:
-      hhid->IdleState = (uint8_t)(req->wValue >> 8);
-      break;
-      
-    case CUSTOM_HID_REQ_GET_IDLE:
-      USBD_CtlSendData (pdev, 
-                        (uint8_t *)&hhid->IdleState,
-                        1);        
-      break;      
-    
-    case CUSTOM_HID_REQ_SET_REPORT:
-      flag = 1;
-      USBD_CUSTOM_HID_Report_ID = (uint8_t)(req->wValue);
-      USBD_CUSTOM_HID_Report_LENGTH = (uint8_t)(req->wLength);
-      USBD_CtlPrepareRx (pdev, Report_buf, USBD_CUSTOM_HID_Report_LENGTH);
-      
-      break;
-    default:
-      USBD_CtlError (pdev, req);
-      return USBD_FAIL; 
-    }
-    break;
-    
-  case USB_REQ_TYPE_STANDARD:
-    switch (req->bRequest)
-    {
-    case USB_REQ_GET_DESCRIPTOR: 
-      if( req->wValue >> 8 == CUSTOM_HID_REPORT_DESC)
-      {
-        len = MIN(CUSTOM_HID_REPORT_DESC_SIZE , req->wLength);
-        pbuf = CUSTOM_HID_ReportDesc;
-      }
-      else if( req->wValue >> 8 == CUSTOM_HID_DESCRIPTOR_TYPE)
-      {
-        pbuf = USBD_CUSTOM_HID_Desc;   
-        len = MIN(USB_CUSTOM_HID_DESC_SIZ , req->wLength);
-      }
-      
-      USBD_CtlSendData (pdev, 
-                        pbuf,
-                        len);
-      
-      break;
-      
-    case USB_REQ_GET_INTERFACE :
-      USBD_CtlSendData (pdev,
-                        (uint8_t *)&hhid->AltSetting,
-                        1);
-      break;
-      
-    case USB_REQ_SET_INTERFACE :
-      hhid->AltSetting = (uint8_t)(req->wValue);
-      break;
-    }
-  }
-  return USBD_OK;
-}
-
-/**
-  * @brief  USBD_CUSTOM_HID_SendReport 
-  *         Send CUSTOM_HID Report
-  * @param  pdev: device instance
-  * @param  buff: pointer to report
-  * @retval status
-  */
-uint8_t USBD_CUSTOM_HID_SendReport     (USBD_HandleTypeDef  *pdev, 
-                                 uint8_t *report,
-                                 uint16_t len)
-{
-  USBD_CUSTOM_HID_HandleTypeDef     *hhid = pdev->pClassData;
-  
-  if (pdev->dev_state == USBD_STATE_CONFIGURED )
-  {
-    if(hhid->state == CUSTOM_HID_IDLE)
-    {
-      hhid->state = CUSTOM_HID_BUSY;
-      USBD_LL_Transmit (pdev, 
-                        CUSTOM_HID_EPIN_ADDR,                                      
-                        report,
-                        len);
-    }
-  }
-  return USBD_OK;
-}
-
-/**
-  * @brief  USBD_CUSTOM_HID_GetCfgDesc 
-  *         return configuration descriptor
-  * @param  speed : current device speed
-  * @param  length : pointer data length
-  * @retval pointer to descriptor buffer
-  */
-static uint8_t  *USBD_CUSTOM_HID_GetCfgDesc (uint16_t *length)
-{
-  *length = sizeof (USBD_CUSTOM_HID_CfgDesc);
-  return USBD_CUSTOM_HID_CfgDesc;
-}
-
-/**
-  * @brief  USBD_CUSTOM_HID_DataIn
-  *         handle data IN Stage
-  * @param  pdev: device instance
-  * @param  epnum: endpoint index
-  * @retval status
-  */
-static uint8_t  USBD_CUSTOM_HID_DataIn (USBD_HandleTypeDef *pdev, 
-                              uint8_t epnum)
-{
-  
-  /* Ensure that the FIFO is empty before a new transfer, this condition could 
-  be caused by  a new transfer before the end of the previous transfer */
-  ((USBD_CUSTOM_HID_HandleTypeDef *)pdev->pClassData)->state = CUSTOM_HID_IDLE;
-  
-  if (epnum == 1) PrevXferDone = 1;
-  return USBD_OK;
-}
-
-/**
-  * @brief  USBD_CUSTOM_HID_DataOut
-  *         handle data OUT Stage
-  * @param  pdev: device instance
-  * @param  epnum: endpoint index
-  * @retval status
-  */
-static uint8_t  USBD_CUSTOM_HID_DataOut (USBD_HandleTypeDef *pdev, 
-                              uint8_t epnum)
-{
-  USBD_HID_DataOutCallback(pdev, epnum);
-  return USBD_OK;
-}
-
-/**
-  * @brief  USBD_CUSTOM_HID_EP0_RxReady
-  *         Handles control request data.
-  * @param  pdev: device instance
-  * @retval status
-  */
-uint8_t USBD_CUSTOM_HID_EP0_RxReady(USBD_HandleTypeDef *pdev)
-{
-  USBD_HID_EP0_DataOutCallback(pdev);
-  return USBD_OK;
-}
-
-/**
-* @brief  DeviceQualifierDescriptor 
-*         return Device Qualifier descriptor
-* @param  length : pointer data length
-* @retval pointer to descriptor buffer
-*/
-static uint8_t  *USBD_CUSTOM_HID_GetDeviceQualifierDesc (uint16_t *length)
-{
-  *length = sizeof (USBD_CUSTOM_HID_DeviceQualifierDesc);
-  return USBD_CUSTOM_HID_DeviceQualifierDesc;
-}
-
-/**
-  * @brief  The function is a callback about HID OUT Data events
-  * @param  pdev: device instance
-  * @param  epnum: endpoint index
-  */
-__weak void USBD_HID_DataOutCallback(USBD_HandleTypeDef *pdev, uint8_t epnum)
-{
-  
-}
-
-__weak void USBD_HID_EP0_DataOutCallback(USBD_HandleTypeDef *pdev)
-{
-  
-}
-/**
-  * @}
-  */ 
-
-
-/**
-  * @}
-  */ 
-
-
-/**
-  * @}
-  */ 
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/stmhal/usbdev/class/DFU/Inc/usbd_dfu.h b/stmhal/usbdev/class/DFU/Inc/usbd_dfu.h
deleted file mode 100644
index 21d73a8dc..000000000
--- a/stmhal/usbdev/class/DFU/Inc/usbd_dfu.h
+++ /dev/null
@@ -1,231 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    usbd_dfu_core.h
-  * @author  MCD Application Team
-  * @version V2.0.0
-  * @date    18-February-2014
-  * @brief   header file for the usbd_dfu_core.c file.
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT 2014 STMicroelectronics</center></h2>
-  *
-  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
-  * You may not use this file except in compliance with the License.
-  * You may obtain a copy of the License at:
-  *
-  *        http://www.st.com/software_license_agreement_liberty_v2
-  *
-  * Unless required by applicable law or agreed to in writing, software 
-  * distributed under the License is distributed on an "AS IS" BASIS, 
-  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  * See the License for the specific language governing permissions and
-  * limitations under the License.
-  *
-  ******************************************************************************
-  */ 
-
-/* Includes ------------------------------------------------------------------*/
-
-#ifndef __USB_DFU_CORE_H_
-#define __USB_DFU_CORE_H_
-
-#include  "usbd_ioreq.h"
-
-/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
-  * @{
-  */
-  
-/** @defgroup USBD_DFU
-  * @brief This file is the Header file for USBD_msc.c
-  * @{
-  */ 
-
-
-/** @defgroup USBD_DFU_Exported_Defines
-  * @{
-  */ 
-    
-#define USB_DFU_CONFIG_DESC_SIZ       (18 + (9 * USBD_DFU_MAX_ITF_NUM))
-#define USB_DFU_DESC_SIZ              9
-    
-#define DFU_DESCRIPTOR_TYPE           0x21
-    
-
-/**************************************************/
-/* DFU Requests  DFU states                       */
-/**************************************************/
-#define APP_STATE_IDLE                 0
-#define APP_STATE_DETACH               1
-#define DFU_STATE_IDLE                 2
-#define DFU_STATE_DNLOAD_SYNC          3
-#define DFU_STATE_DNLOAD_BUSY          4
-#define DFU_STATE_DNLOAD_IDLE          5
-#define DFU_STATE_MANIFEST_SYNC        6
-#define DFU_STATE_MANIFEST             7
-#define DFU_STATE_MANIFEST_WAIT_RESET  8
-#define DFU_STATE_UPLOAD_IDLE          9
-#define DFU_STATE_ERROR                10
-
-/**************************************************/
-/* DFU errors                                     */
-/**************************************************/
-
-#define DFU_ERROR_NONE              0x00
-#define DFU_ERROR_TARGET            0x01
-#define DFU_ERROR_FILE              0x02
-#define DFU_ERROR_WRITE             0x03
-#define DFU_ERROR_ERASE             0x04
-#define DFU_ERROR_CHECK_ERASED      0x05
-#define DFU_ERROR_PROG              0x06
-#define DFU_ERROR_VERIFY            0x07
-#define DFU_ERROR_ADDRESS           0x08
-#define DFU_ERROR_NOTDONE           0x09
-#define DFU_ERROR_FIRMWARE          0x0A
-#define DFU_ERROR_VENDOR            0x0B
-#define DFU_ERROR_USB               0x0C
-#define DFU_ERROR_POR               0x0D
-#define DFU_ERROR_UNKNOWN           0x0E
-#define DFU_ERROR_STALLEDPKT        0x0F
-
-/**************************************************/
-/* DFU Manifestation State                        */
-/**************************************************/
-
-#define DFU_MANIFEST_COMPLETE       0x00
-#define DFU_MANIFEST_IN_PROGRESS    0x01
-
-
-/**************************************************/
-/* Special Commands  with Download Request        */
-/**************************************************/
-
-#define DFU_CMD_GETCOMMANDS         0x00
-#define DFU_CMD_SETADDRESSPOINTER   0x21
-#define DFU_CMD_ERASE               0x41
-    
-#define DFU_MEDIA_ERASE             0x00
-#define DFU_MEDIA_PROGRAM           0x01
-/**************************************************/
-/* Other defines                                  */
-/**************************************************/
-/* Bit Detach capable = bit 3 in bmAttributes field */
-#define DFU_DETACH_MASK              (uint8_t)(1 << 4) 
-#define DFU_STATUS_DEPTH             (6) 
-    
-typedef enum 
-{
-  DFU_DETACH = 0,
-  DFU_DNLOAD ,
-  DFU_UPLOAD,
-  DFU_GETSTATUS,
-  DFU_CLRSTATUS,
-  DFU_GETSTATE,
-  DFU_ABORT
-} DFU_RequestTypeDef;
-  
-typedef  void (*pFunction)(void);
-
-
-/**********  Descriptor of DFU interface 0 Alternate setting n ****************/  
-#define USBD_DFU_IF_DESC(n)   0x09,   /* bLength: Interface Descriptor size */ \
-                              USB_DESC_TYPE_INTERFACE,   /* bDescriptorType */ \
-                              0x00,   /* bInterfaceNumber: Number of Interface */ \
-                              (n),      /* bAlternateSetting: Alternate setting */ \
-                              0x00,   /* bNumEndpoints*/ \
-                              0xFE,   /* bInterfaceClass: Application Specific Class Code */ \
-                              0x01,   /* bInterfaceSubClass : Device Firmware Upgrade Code */ \
-                              0x02,   /* nInterfaceProtocol: DFU mode protocol */ \
-                              USBD_IDX_INTERFACE_STR + (n) + 1 /* iInterface: Index of string descriptor */ \
- 
-                             /* 18 */
-                                
-#define TRANSFER_SIZE_BYTES(size)          ((uint8_t)(size)), /* XFERSIZEB0 */\
-                                           ((uint8_t)(size >> 8)) /* XFERSIZEB1 */
-                                             
-
-#define IS_PROTECTED_AREA(add)    (uint8_t)(((add >= 0x08000000) && (add < (APP_DEFAULT_ADD)))? 1:0)                                             
-                                            
-/**
-  * @}
-  */ 
-
-
-/** @defgroup USBD_CORE_Exported_TypesDefinitions
-  * @{
-  */
-
-typedef struct
-{
-  union
-  {
-    uint32_t d32[USBD_DFU_XFER_SIZE/4];
-    uint8_t  d8[USBD_DFU_XFER_SIZE];
-  }buffer;
-  
-  uint8_t              dev_state; 
-  uint8_t              dev_status[DFU_STATUS_DEPTH];
-  uint8_t              manif_state;    
-  
-  uint32_t             wblock_num;
-  uint32_t             wlength;
-  uint32_t             data_ptr; 
-  __IO uint32_t        alt_setting;
-  
-}
-USBD_DFU_HandleTypeDef; 
-
-
-typedef struct
-{
-  const uint8_t* pStrDesc;
-  uint16_t (* Init)     (void);   
-  uint16_t (* DeInit)   (void);   
-  uint16_t (* Erase)    (uint32_t Add);
-  uint16_t (* Write)    (uint8_t *src, uint8_t *dest, uint32_t Len);
-  uint8_t* (* Read)     (uint8_t *src, uint8_t *dest, uint32_t Len);
-  uint16_t (* GetStatus)(uint32_t Add, uint8_t cmd, uint8_t *buff);  
-}
-USBD_DFU_MediaTypeDef;
-/**
-  * @}
-  */ 
-
-
-
-/** @defgroup USBD_CORE_Exported_Macros
-  * @{
-  */ 
-
-/**
-  * @}
-  */ 
-
-/** @defgroup USBD_CORE_Exported_Variables
-  * @{
-  */ 
-
-extern USBD_ClassTypeDef  USBD_DFU;
-/**
-  * @}
-  */ 
-
-/** @defgroup USB_CORE_Exported_Functions
-  * @{
-  */ 
-uint8_t  USBD_DFU_RegisterMedia    (USBD_HandleTypeDef   *pdev, 
-                                    USBD_DFU_MediaTypeDef *fops);
-/**
-  * @}
-  */ 
-
-#endif  // __USB_DFU_CORE_H_
-/**
-  * @}
-  */ 
-
-/**
-  * @}
-  */ 
-  
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/stmhal/usbdev/class/DFU/Inc/usbd_dfu_media_template.h b/stmhal/usbdev/class/DFU/Inc/usbd_dfu_media_template.h
deleted file mode 100644
index a2bf65968..000000000
--- a/stmhal/usbdev/class/DFU/Inc/usbd_dfu_media_template.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    usbd_dfu_media_template.h
-  * @author  MCD Application Team
-  * @version V2.0.0
-  * @date    18-February-2014
-  * @brief   header file for the usbd_dfu_media_template.c file
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT 2014 STMicroelectronics</center></h2>
-  *
-  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
-  * You may not use this file except in compliance with the License.
-  * You may obtain a copy of the License at:
-  *
-  *        http://www.st.com/software_license_agreement_liberty_v2
-  *
-  * Unless required by applicable law or agreed to in writing, software 
-  * distributed under the License is distributed on an "AS IS" BASIS, 
-  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  * See the License for the specific language governing permissions and
-  * limitations under the License.
-  *
-  ******************************************************************************
-  */ 
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-
-#ifndef __USBD_DFU_MEDIA_H_
-#define __USBD_DFU_MEDIA_H_
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_dfu.h"
-
-/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
-  * @{
-  */
-  
-/** @defgroup USBD_MEDIA
-  * @brief header file for the USBD_MEDIA.c file
-  * @{
-  */ 
-
-/** @defgroup USBD_MEDIA_Exported_Defines
-  * @{
-  */ 
-/**
-  * @}
-  */ 
-
-
-/** @defgroup USBD_MEDIA_Exported_Types
-  * @{
-  */
-
-
-/**
-  * @}
-  */ 
-
-
-
-/** @defgroup USBD_MEDIA_Exported_Macros
-  * @{
-  */ 
-
-/**
-  * @}
-  */ 
-
-/** @defgroup USBD_MEDIA_Exported_Variables
-  * @{
-  */ 
-extern USBD_DFU_MediaTypeDef  USBD_DFU_MEDIA_Template_fops;
-/**
-  * @}
-  */ 
-
-/** @defgroup USBD_MEDIA_Exported_FunctionsPrototype
-  * @{
-  */ 
-
-
-/**
-  * @}
-  */ 
-
-#endif /* __USBD_DFU_MEDIA_H_ */
-
-/**
-  * @}
-  */ 
-
-/**
-* @}
-*/ 
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/stmhal/usbdev/class/DFU/Src/usbd_dfu.c b/stmhal/usbdev/class/DFU/Src/usbd_dfu.c
deleted file mode 100644
index 14de9dff8..000000000
--- a/stmhal/usbdev/class/DFU/Src/usbd_dfu.c
+++ /dev/null
@@ -1,1095 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    usbd_dfu.c
-  * @author  MCD Application Team
-  * @version V2.0.0
-  * @date    18-February-2014
-  * @brief   This file provides the HID core functions.
-  *
-  * @verbatim
-  *      
-  *          ===================================================================      
-  *                                DFU Class  Description
-  *          ===================================================================
-  *          
-  *
-  *
-  *
-  *           
-  *      
-  * @note     In HS mode and when the DMA is used, all variables and data structures
-  *           dealing with the DMA during the transaction process should be 32-bit aligned.
-  *           
-  *      
-  *  @endverbatim
-  *
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT 2014 STMicroelectronics</center></h2>
-  *
-  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
-  * You may not use this file except in compliance with the License.
-  * You may obtain a copy of the License at:
-  *
-  *        http://www.st.com/software_license_agreement_liberty_v2
-  *
-  * Unless required by applicable law or agreed to in writing, software 
-  * distributed under the License is distributed on an "AS IS" BASIS, 
-  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  * See the License for the specific language governing permissions and
-  * limitations under the License.
-  *
-  ******************************************************************************
-  */ 
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_dfu.h"
-#include "usbd_desc.h"
-#include "usbd_ctlreq.h"
-
-
-/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
-  * @{
-  */
-
-
-/** @defgroup USBD_DFU 
-  * @brief usbd core module
-  * @{
-  */ 
-
-/** @defgroup USBD_DFU_Private_TypesDefinitions
-  * @{
-  */ 
-/**
-  * @}
-  */ 
-
-
-/** @defgroup USBD_DFU_Private_Defines
-  * @{
-  */ 
-
-/**
-  * @}
-  */ 
-
-
-/** @defgroup USBD_DFU_Private_Macros
-  * @{
-  */ 
-#define DFU_SAMPLE_FREQ(frq)      (uint8_t)(frq), (uint8_t)((frq >> 8)), (uint8_t)((frq >> 16))
-
-#define DFU_PACKET_SZE(frq)          (uint8_t)(((frq * 2 * 2)/1000) & 0xFF), \
-                                       (uint8_t)((((frq * 2 * 2)/1000) >> 8) & 0xFF)
-                                         
-/**
-  * @}
-  */ 
-
-
-
-
-/** @defgroup USBD_DFU_Private_FunctionPrototypes
-  * @{
-  */
-
-
-static uint8_t  USBD_DFU_Init (USBD_HandleTypeDef *pdev, 
-                               uint8_t cfgidx);
-
-static uint8_t  USBD_DFU_DeInit (USBD_HandleTypeDef *pdev, 
-                                 uint8_t cfgidx);
-
-static uint8_t  USBD_DFU_Setup (USBD_HandleTypeDef *pdev, 
-                                USBD_SetupReqTypedef *req);
-
-static uint8_t  *USBD_DFU_GetCfgDesc (uint16_t *length);
-
-static uint8_t  *USBD_DFU_GetDeviceQualifierDesc (uint16_t *length);
-
-static uint8_t  USBD_DFU_DataIn (USBD_HandleTypeDef *pdev, uint8_t epnum);
-
-static uint8_t  USBD_DFU_DataOut (USBD_HandleTypeDef *pdev, uint8_t epnum);
-
-static uint8_t  USBD_DFU_EP0_RxReady (USBD_HandleTypeDef *pdev);
-
-static uint8_t  USBD_DFU_EP0_TxReady (USBD_HandleTypeDef *pdev);
-
-static uint8_t  USBD_DFU_SOF (USBD_HandleTypeDef *pdev);
-
-static uint8_t  USBD_DFU_IsoINIncomplete (USBD_HandleTypeDef *pdev, uint8_t epnum);
-
-static uint8_t  USBD_DFU_IsoOutIncomplete (USBD_HandleTypeDef *pdev, uint8_t epnum);
-
-#if (USBD_SUPPORT_USER_STRING == 1)  
-static uint8_t* USBD_DFU_GetUsrStringDesc ( USBD_HandleTypeDef *pdev, uint8_t index , uint16_t *length);
-#endif
-
-static void DFU_Detach    (USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
-
-static void DFU_Download  (USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
-
-static void DFU_Upload    (USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
-
-static void DFU_GetStatus (USBD_HandleTypeDef *pdev);
-
-static void DFU_ClearStatus (USBD_HandleTypeDef *pdev);
-
-static void DFU_GetState  (USBD_HandleTypeDef *pdev);
-
-static void DFU_Abort     (USBD_HandleTypeDef *pdev);
-
-static void DFU_Leave  (USBD_HandleTypeDef *pdev); 
-
-
-/**
-  * @}
-  */ 
-
-/** @defgroup USBD_DFU_Private_Variables
-  * @{
-  */ 
-
-USBD_ClassTypeDef  USBD_DFU = 
-{
-  USBD_DFU_Init,
-  USBD_DFU_DeInit,
-  USBD_DFU_Setup,
-  USBD_DFU_EP0_TxReady,  
-  USBD_DFU_EP0_RxReady,
-  USBD_DFU_DataIn,
-  USBD_DFU_DataOut,
-  USBD_DFU_SOF,
-  USBD_DFU_IsoINIncomplete,
-  USBD_DFU_IsoOutIncomplete,      
-  USBD_DFU_GetCfgDesc,
-  USBD_DFU_GetCfgDesc, 
-  USBD_DFU_GetCfgDesc,
-  USBD_DFU_GetDeviceQualifierDesc,
-#if (USBD_SUPPORT_USER_STRING == 1)  
-  USBD_DFU_GetUsrStringDesc
-#endif
-};
-
-/* USB DFU device Configuration Descriptor */
-__ALIGN_BEGIN static uint8_t USBD_DFU_CfgDesc[USB_DFU_CONFIG_DESC_SIZ] __ALIGN_END =
-{
-  0x09, /* bLength: Configuation Descriptor size */
-  USB_DESC_TYPE_CONFIGURATION, /* bDescriptorType: Configuration */
-  USB_DFU_CONFIG_DESC_SIZ,
-  /* wTotalLength: Bytes returned */
-  0x00,
-  0x01,         /*bNumInterfaces: 1 interface*/
-  0x01,         /*bConfigurationValue: Configuration value*/
-  0x02,         /*iConfiguration: Index of string descriptor describing the configuration*/
-  0xC0,         /*bmAttributes: bus powered and Supprts Remote Wakeup */
-  0x32,         /*MaxPower 100 mA: this current is used for detecting Vbus*/
-  /* 09 */
-  
-  /**********  Descriptor of DFU interface 0 Alternate setting 0 **************/  
-  USBD_DFU_IF_DESC(0), /* This interface is mandatory for all devices */
-  
-#if (USBD_DFU_MAX_ITF_NUM > 1)
-  /**********  Descriptor of DFU interface 0 Alternate setting 1 **************/ 
-  USBD_DFU_IF_DESC(1),
-#endif /* (USBD_DFU_MAX_ITF_NUM > 1) */
-
-#if (USBD_DFU_MAX_ITF_NUM > 2)
-  /**********  Descriptor of DFU interface 0 Alternate setting 2 **************/ 
-  USBD_DFU_IF_DESC(2),
-#endif /* (USBD_DFU_MAX_ITF_NUM > 2) */
-
-#if (USBD_DFU_MAX_ITF_NUM > 3)
-  /**********  Descriptor of DFU interface 0 Alternate setting 3 **************/ 
-  USBD_DFU_IF_DESC(3),
-#endif /* (USBD_DFU_MAX_ITF_NUM > 3) */
-
-#if (USBD_DFU_MAX_ITF_NUM > 4)
-  /**********  Descriptor of DFU interface 0 Alternate setting 4 **************/ 
-  USBD_DFU_IF_DESC(4),
-#endif /* (USBD_DFU_MAX_ITF_NUM > 4) */
-
-#if (USBD_DFU_MAX_ITF_NUM > 5)
-  /**********  Descriptor of DFU interface 0 Alternate setting 5 **************/ 
-  USBD_DFU_IF_DESC(5),
-#endif /* (USBD_DFU_MAX_ITF_NUM > 5) */
-
-#if (USBD_DFU_MAX_ITF_NUM > 6)
-#error "ERROR: usbd_dfu_core.c: Modify the file to support more descriptors!"
-#endif /* (USBD_DFU_MAX_ITF_NUM > 6) */
-
-  /******************** DFU Functional Descriptor********************/
-  0x09,   /*blength = 9 Bytes*/
-  DFU_DESCRIPTOR_TYPE,   /* DFU Functional Descriptor*/
-  0x0B,   /*bmAttribute
-                bitCanDnload             = 1      (bit 0)
-                bitCanUpload             = 1      (bit 1)
-                bitManifestationTolerant = 0      (bit 2)
-                bitWillDetach            = 1      (bit 3)
-                Reserved                          (bit4-6)
-                bitAcceleratedST         = 0      (bit 7)*/
-  0xFF,   /*DetachTimeOut= 255 ms*/
-  0x00,
-  /*WARNING: In DMA mode the multiple MPS packets feature is still not supported
-   ==> In this case, when using DMA USBD_DFU_XFER_SIZE should be set to 64 in usbd_conf.h */
-  TRANSFER_SIZE_BYTES(USBD_DFU_XFER_SIZE),       /* TransferSize = 1024 Byte*/         
-  0x1A,                                /* bcdDFUVersion*/
-  0x01
-  /***********************************************************/
-  /* 9*/
-};
-  
-/* USB Standard Device Descriptor */
-__ALIGN_BEGIN static uint8_t USBD_DFU_DeviceQualifierDesc[USB_LEN_DEV_QUALIFIER_DESC] __ALIGN_END =
-{
-  USB_LEN_DEV_QUALIFIER_DESC,
-  USB_DESC_TYPE_DEVICE_QUALIFIER,
-  0x00,
-  0x02,
-  0x00,
-  0x00,
-  0x00,
-  0x40,
-  0x01,
-  0x00,
-};
-
-/**
-  * @}
-  */ 
-
-/** @defgroup USBD_DFU_Private_Functions
-  * @{
-  */ 
-
-/**
-  * @brief  USBD_DFU_Init
-  *         Initialize the DFU interface
-  * @param  pdev: device instance
-  * @param  cfgidx: Configuration index
-  * @retval status
-  */
-static uint8_t  USBD_DFU_Init (USBD_HandleTypeDef *pdev, 
-                               uint8_t cfgidx)
-{
-  USBD_DFU_HandleTypeDef   *hdfu;
-  
- /* Allocate Audio structure */
-  pdev->pClassData = USBD_malloc(sizeof (USBD_DFU_HandleTypeDef));
-  
-  if(pdev->pClassData == NULL)
-  {
-    return USBD_FAIL; 
-  }
-  else
-  {
-    hdfu = pdev->pClassData;
-    
-    hdfu->alt_setting = 0;
-    hdfu->data_ptr = USBD_DFU_APP_DEFAULT_ADD;
-    hdfu->wblock_num = 0;
-    hdfu->wlength = 0;
-    
-    hdfu->manif_state = DFU_MANIFEST_COMPLETE;
-    hdfu->dev_state = DFU_STATE_IDLE;
-    
-    hdfu->dev_status[0] = DFU_ERROR_NONE;
-    hdfu->dev_status[1] = 0;
-    hdfu->dev_status[2] = 0;   
-    hdfu->dev_status[3] = 0;
-    hdfu->dev_status[4] = DFU_STATE_IDLE;    
-    hdfu->dev_status[5] = 0;    
-    
-    /* Initialize Hardware layer */
-    if (((USBD_DFU_MediaTypeDef *)pdev->pUserData)->Init() != USBD_OK)
-    {
-      return USBD_FAIL;
-    }   
-  }
-  return USBD_OK;
-}
-
-/**
-  * @brief  USBD_DFU_Init
-  *         DeInitialize the DFU layer
-  * @param  pdev: device instance
-  * @param  cfgidx: Configuration index
-  * @retval status
-  */
-static uint8_t  USBD_DFU_DeInit (USBD_HandleTypeDef *pdev, 
-                                 uint8_t cfgidx)
-{
-  USBD_DFU_HandleTypeDef   *hdfu;
-  hdfu = pdev->pClassData;
-  
-  hdfu->wblock_num = 0;
-  hdfu->wlength = 0;
-
-  hdfu->dev_state = DFU_STATE_IDLE;
-  hdfu->dev_status[0] = DFU_ERROR_NONE;
-  hdfu->dev_status[4] = DFU_STATE_IDLE;
- 
-  /* DeInit  physical Interface components */
-  if(pdev->pClassData != NULL)
-  {
-    /* De-Initialize Hardware layer */
-    ((USBD_DFU_MediaTypeDef *)pdev->pUserData)->DeInit(); 
-    USBD_free(pdev->pClassData);
-    pdev->pClassData = NULL;
-  } 
-
-  return USBD_OK;
-}
-
-/**
-  * @brief  USBD_DFU_Setup
-  *         Handle the DFU specific requests
-  * @param  pdev: instance
-  * @param  req: usb requests
-  * @retval status
-  */
-static uint8_t  USBD_DFU_Setup (USBD_HandleTypeDef *pdev, 
-                                USBD_SetupReqTypedef *req)
-{
-  uint8_t *pbuf = 0;
-  uint16_t len = 0;
-  uint8_t ret = USBD_OK;
-  USBD_DFU_HandleTypeDef   *hdfu;
-  
-  hdfu = pdev->pClassData;
-  
-  switch (req->bmRequest & USB_REQ_TYPE_MASK)
-  {
-  case USB_REQ_TYPE_CLASS :  
-    switch (req->bRequest)
-    {
-    case DFU_DNLOAD:
-      DFU_Download(pdev, req);
-      break;
-      
-    case DFU_UPLOAD:
-      DFU_Upload(pdev, req);   
-      break;
-      
-    case DFU_GETSTATUS:
-      DFU_GetStatus(pdev);
-      break;
-      
-    case DFU_CLRSTATUS:
-      DFU_ClearStatus(pdev);
-      break;      
-      
-    case DFU_GETSTATE:
-      DFU_GetState(pdev);
-      break;  
-      
-    case DFU_ABORT:
-      DFU_Abort(pdev);
-      break;
-      
-    case DFU_DETACH:
-      DFU_Detach(pdev, req);
-      break;
-      
-      
-    default:
-      USBD_CtlError (pdev, req);
-      ret = USBD_FAIL; 
-    }
-    break;
-    
-  case USB_REQ_TYPE_STANDARD:
-    switch (req->bRequest)
-    {
-    case USB_REQ_GET_DESCRIPTOR: 
-      if( (req->wValue >> 8) == DFU_DESCRIPTOR_TYPE)
-      {
-        pbuf = USBD_DFU_CfgDesc + (9 * (USBD_DFU_MAX_ITF_NUM + 1));
-        len = MIN(USB_DFU_DESC_SIZ , req->wLength);
-      }
-      
-      USBD_CtlSendData (pdev, 
-                        pbuf,
-                        len);
-      break;
-      
-    case USB_REQ_GET_INTERFACE :
-      USBD_CtlSendData (pdev,
-                        (uint8_t *)&hdfu->alt_setting,
-                        1);
-      break;
-      
-    case USB_REQ_SET_INTERFACE :
-      if ((uint8_t)(req->wValue) < USBD_DFU_MAX_ITF_NUM)
-      {
-        hdfu->alt_setting = (uint8_t)(req->wValue);
-      }
-      else
-      {
-        /* Call the error management function (command will be nacked */
-        USBD_CtlError (pdev, req);
-        ret = USBD_FAIL;  
-      }
-      break;
-      
-    default:
-      USBD_CtlError (pdev, req);
-      ret = USBD_FAIL;     
-    }
-  }
-  return ret;
-}
-
-
-/**
-  * @brief  USBD_DFU_GetCfgDesc 
-  *         return configuration descriptor
-  * @param  speed : current device speed
-  * @param  length : pointer data length
-  * @retval pointer to descriptor buffer
-  */
-static uint8_t  *USBD_DFU_GetCfgDesc (uint16_t *length)
-{
-  *length = sizeof (USBD_DFU_CfgDesc);
-  return USBD_DFU_CfgDesc;
-}
-
-/**
-  * @brief  USBD_DFU_DataIn
-  *         handle data IN Stage
-  * @param  pdev: device instance
-  * @param  epnum: endpoint index
-  * @retval status
-  */
-static uint8_t  USBD_DFU_DataIn (USBD_HandleTypeDef *pdev, 
-                              uint8_t epnum)
-{
-
-  return USBD_OK;
-}
-
-/**
-  * @brief  USBD_DFU_EP0_RxReady
-  *         handle EP0 Rx Ready event
-  * @param  pdev: device instance
-  * @retval status
-  */
-static uint8_t  USBD_DFU_EP0_RxReady (USBD_HandleTypeDef *pdev)
-{
-
-  return USBD_OK;
-}
-/**
-  * @brief  USBD_DFU_EP0_TxReady
-  *         handle EP0 TRx Ready event
-  * @param  pdev: device instance
-  * @retval status
-  */
-static uint8_t  USBD_DFU_EP0_TxReady (USBD_HandleTypeDef *pdev)
-{
- uint32_t addr;
- USBD_SetupReqTypedef     req; 
- USBD_DFU_HandleTypeDef   *hdfu;
- 
- hdfu = pdev->pClassData;
-  
-  if (hdfu->dev_state == DFU_STATE_DNLOAD_BUSY)
-  {
-    /* Decode the Special Command*/
-    if (hdfu->wblock_num == 0)   
-    {
-      if ((hdfu->buffer.d8[0] ==  DFU_CMD_GETCOMMANDS) && (hdfu->wlength == 1))
-      {
-       
-      }
-      else if  (( hdfu->buffer.d8[0] ==  DFU_CMD_SETADDRESSPOINTER ) && (hdfu->wlength == 5))
-      {
-        hdfu->data_ptr  = hdfu->buffer.d8[1];
-        hdfu->data_ptr += hdfu->buffer.d8[2] << 8;
-        hdfu->data_ptr += hdfu->buffer.d8[3] << 16;
-        hdfu->data_ptr += hdfu->buffer.d8[4] << 24;
-      }
-      else if (( hdfu->buffer.d8[0] ==  DFU_CMD_ERASE ) && (hdfu->wlength == 5))
-      {
-        hdfu->data_ptr  = hdfu->buffer.d8[1];
-        hdfu->data_ptr += hdfu->buffer.d8[2] << 8;
-        hdfu->data_ptr += hdfu->buffer.d8[3] << 16;
-        hdfu->data_ptr += hdfu->buffer.d8[4] << 24;
-       
-        if (((USBD_DFU_MediaTypeDef *)pdev->pUserData)->Erase(hdfu->data_ptr) != USBD_OK)
-        {
-          return USBD_FAIL;
-        }
-      }
-      else
-      {
-        /* Reset the global length and block number */
-        hdfu->wlength = 0;
-        hdfu->wblock_num = 0;     
-        /* Call the error management function (command will be nacked) */
-        req.bmRequest = 0;
-        req.wLength = 1;
-        USBD_CtlError (pdev, &req);
-      }
-    }
-    /* Regular Download Command */
-    else if (hdfu->wblock_num > 1)  
-    {
-      /* Decode the required address */
-      addr = ((hdfu->wblock_num - 2) * USBD_DFU_XFER_SIZE) + hdfu->data_ptr;
-      
-      /* Preform the write operation */
-      if (((USBD_DFU_MediaTypeDef *)pdev->pUserData)->Write(hdfu->buffer.d8, (uint8_t *)addr, hdfu->wlength) != USBD_OK)
-      {
-        return USBD_FAIL;
-      }      
-    }
-    /* Reset the global lenght and block number */
-    hdfu->wlength = 0;
-    hdfu->wblock_num = 0;
-    
-    /* Update the state machine */
-    hdfu->dev_state =  DFU_STATE_DNLOAD_SYNC;
-
-    hdfu->dev_status[1] = 0;
-    hdfu->dev_status[2] = 0;
-    hdfu->dev_status[3] = 0;
-    hdfu->dev_status[4] = hdfu->dev_state;    
-    return USBD_OK;
-  }
-  else if (hdfu->dev_state == DFU_STATE_MANIFEST)/* Manifestation in progress*/
-  {
-    /* Start leaving DFU mode */
-    DFU_Leave(pdev);
-  }
-  
-  return USBD_OK;
-}
-/**
-  * @brief  USBD_DFU_SOF
-  *         handle SOF event
-  * @param  pdev: device instance
-  * @retval status
-  */
-static uint8_t  USBD_DFU_SOF (USBD_HandleTypeDef *pdev)
-{
-
-  return USBD_OK;
-}
-/**
-  * @brief  USBD_DFU_IsoINIncomplete
-  *         handle data ISO IN Incomplete event
-  * @param  pdev: device instance
-  * @param  epnum: endpoint index
-  * @retval status
-  */
-static uint8_t  USBD_DFU_IsoINIncomplete (USBD_HandleTypeDef *pdev, uint8_t epnum)
-{
-
-  return USBD_OK;
-}
-/**
-  * @brief  USBD_DFU_IsoOutIncomplete
-  *         handle data ISO OUT Incomplete event
-  * @param  pdev: device instance
-  * @param  epnum: endpoint index
-  * @retval status
-  */
-static uint8_t  USBD_DFU_IsoOutIncomplete (USBD_HandleTypeDef *pdev, uint8_t epnum)
-{
-
-  return USBD_OK;
-}
-/**
-  * @brief  USBD_DFU_DataOut
-  *         handle data OUT Stage
-  * @param  pdev: device instance
-  * @param  epnum: endpoint index
-  * @retval status
-  */
-static uint8_t  USBD_DFU_DataOut (USBD_HandleTypeDef *pdev, 
-                              uint8_t epnum)
-{
-
-  return USBD_OK;
-}
-
-/**
-* @brief  DeviceQualifierDescriptor 
-*         return Device Qualifier descriptor
-* @param  length : pointer data length
-* @retval pointer to descriptor buffer
-*/
-static uint8_t  *USBD_DFU_GetDeviceQualifierDesc (uint16_t *length)
-{
-  *length = sizeof (USBD_DFU_DeviceQualifierDesc);
-  return USBD_DFU_DeviceQualifierDesc;
-}
-
-/**
-  * @brief  USBD_DFU_GetUsrStringDesc
-  *         Manages the transfer of memory interfaces string descriptors.
-  * @param  speed : current device speed
-  * @param  index: desciptor index
-  * @param  length : pointer data length
-  * @retval pointer to the descriptor table or NULL if the descriptor is not supported.
-  */
-#if (USBD_SUPPORT_USER_STRING == 1)  
-static uint8_t* USBD_DFU_GetUsrStringDesc (USBD_HandleTypeDef *pdev, uint8_t index , uint16_t *length)
-{
-  static uint8_t USBD_StrDesc[255];
-  /* Check if the requested string interface is supported */
-  if (index <= (USBD_IDX_INTERFACE_STR + USBD_DFU_MAX_ITF_NUM))
-  {
-    USBD_GetString ((uint8_t *)((USBD_DFU_MediaTypeDef *)pdev->pUserData)->pStrDesc, USBD_StrDesc, length);
-    return USBD_StrDesc;  
-  }
-  /* Not supported Interface Descriptor index */
-  else
-  {
-    return NULL;
-  }
-}
-#endif
-
-/**
-* @brief  USBD_MSC_RegisterStorage
-* @param  fops: storage callback
-* @retval status
-*/
-uint8_t  USBD_DFU_RegisterMedia    (USBD_HandleTypeDef   *pdev, 
-                                    USBD_DFU_MediaTypeDef *fops)
-{
-  if(fops != NULL)
-  {
-    pdev->pUserData= fops;
-  }
-  return 0;
-}
-
-/******************************************************************************
-     DFU Class requests management
-******************************************************************************/
-/**
-  * @brief  DFU_Detach
-  *         Handles the DFU DETACH request.
-  * @param  pdev: device instance
-  * @param  req: pointer to the request structure.
-  * @retval None.
-  */
-static void DFU_Detach(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
-{
- USBD_DFU_HandleTypeDef   *hdfu;
- 
- hdfu = pdev->pClassData;
- 
-  if (hdfu->dev_state == DFU_STATE_IDLE || hdfu->dev_state == DFU_STATE_DNLOAD_SYNC
-      || hdfu->dev_state == DFU_STATE_DNLOAD_IDLE || hdfu->dev_state == DFU_STATE_MANIFEST_SYNC
-        || hdfu->dev_state == DFU_STATE_UPLOAD_IDLE )
-  {
-    /* Update the state machine */
-    hdfu->dev_state = DFU_STATE_IDLE;
-    hdfu->dev_status[0] = DFU_ERROR_NONE;
-    hdfu->dev_status[1] = 0;
-    hdfu->dev_status[2] = 0;
-    hdfu->dev_status[3] = 0; /*bwPollTimeout=0ms*/
-    hdfu->dev_status[4] = hdfu->dev_state;
-    hdfu->dev_status[5] = 0; /*iString*/
-    hdfu->wblock_num = 0;
-    hdfu->wlength = 0;
-  } 
-  
-  /* Check the detach capability in the DFU functional descriptor */
-  if ((USBD_DFU_CfgDesc[12 + (9 * USBD_DFU_MAX_ITF_NUM)]) & DFU_DETACH_MASK)
-  {
-    /* Perform an Attach-Detach operation on USB bus */
-    USBD_Stop (pdev);
-    USBD_Start (pdev);  
-  }
-  else
-  {
-    /* Wait for the period of time specified in Detach request */
-    USBD_Delay (req->wValue);  
-  }
-}
-
-/**
-  * @brief  DFU_Download
-  *         Handles the DFU DNLOAD request.
-  * @param  pdev: device instance
-  * @param  req: pointer to the request structure
-  * @retval None
-  */
-static void DFU_Download(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
-{
- USBD_DFU_HandleTypeDef   *hdfu;
- 
- hdfu = pdev->pClassData;
- 
-  /* Data setup request */
-  if (req->wLength > 0)
-  {
-    if ((hdfu->dev_state == DFU_STATE_IDLE) || (hdfu->dev_state == DFU_STATE_DNLOAD_IDLE))
-    {
-      /* Update the global length and block number */
-      hdfu->wblock_num = req->wValue;
-      hdfu->wlength = req->wLength;
-      
-      /* Update the state machine */
-      hdfu->dev_state = DFU_STATE_DNLOAD_SYNC;
-      hdfu->dev_status[4] = hdfu->dev_state;
-      
-      /* Prepare the reception of the buffer over EP0 */
-      USBD_CtlPrepareRx (pdev,
-                         (uint8_t*)hdfu->buffer.d8,                                  
-                         hdfu->wlength);
-    }
-    /* Unsupported state */
-    else
-    {
-      /* Call the error management function (command will be nacked */
-      USBD_CtlError (pdev, req);
-    }
-  }
-  /* 0 Data DNLOAD request */
-  else
-  {
-    /* End of DNLOAD operation*/
-    if (hdfu->dev_state == DFU_STATE_DNLOAD_IDLE || hdfu->dev_state == DFU_STATE_IDLE )
-    {
-      hdfu->manif_state = DFU_MANIFEST_IN_PROGRESS;
-      hdfu->dev_state = DFU_STATE_MANIFEST_SYNC;
-      hdfu->dev_status[1] = 0;
-      hdfu->dev_status[2] = 0;
-      hdfu->dev_status[3] = 0;
-      hdfu->dev_status[4] = hdfu->dev_state;        
-    }
-    else
-    {
-      /* Call the error management function (command will be nacked */
-      USBD_CtlError (pdev, req);
-    }
-  }  
-}
-
-/**
-  * @brief  DFU_Upload
-  *         Handles the DFU UPLOAD request.
-  * @param  pdev: instance
-  * @param  req: pointer to the request structure
-  * @retval status
-  */
-static void DFU_Upload(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
-{
- USBD_DFU_HandleTypeDef   *hdfu;
- 
- hdfu = pdev->pClassData;
- 
-  uint8_t *phaddr = NULL;
-  uint32_t addr = 0;
-  
-  /* Data setup request */
-  if (req->wLength > 0)
-  {
-    if ((hdfu->dev_state == DFU_STATE_IDLE) || (hdfu->dev_state == DFU_STATE_UPLOAD_IDLE))
-    {
-      /* Update the global langth and block number */
-      hdfu->wblock_num = req->wValue;
-      hdfu->wlength = req->wLength;
-      
-      /* DFU Get Command */
-      if (hdfu->wblock_num == 0)  
-      {
-        /* Update the state machine */
-        hdfu->dev_state = (hdfu->wlength > 3)? DFU_STATE_IDLE:DFU_STATE_UPLOAD_IDLE;        
-    
-        hdfu->dev_status[1] = 0;
-        hdfu->dev_status[2] = 0;
-        hdfu->dev_status[3] = 0;
-        hdfu->dev_status[4] = hdfu->dev_state;       
-        
-        /* Store the values of all supported commands */
-        hdfu->buffer.d8[0] = DFU_CMD_GETCOMMANDS;
-        hdfu->buffer.d8[1] = DFU_CMD_SETADDRESSPOINTER;
-        hdfu->buffer.d8[2] = DFU_CMD_ERASE;
-        
-        /* Send the status data over EP0 */
-        USBD_CtlSendData (pdev,
-                          (uint8_t *)(&(hdfu->buffer.d8[0])),
-                          3);
-      }
-      else if (hdfu->wblock_num > 1)
-      {
-        hdfu->dev_state = DFU_STATE_UPLOAD_IDLE ;
-        
-        hdfu->dev_status[1] = 0;
-        hdfu->dev_status[2] = 0;
-        hdfu->dev_status[3] = 0;
-        hdfu->dev_status[4] = hdfu->dev_state;
-        
-        addr = ((hdfu->wblock_num - 2) * USBD_DFU_XFER_SIZE) + hdfu->data_ptr;  /* Change is Accelerated*/
-        
-        /* Return the physical address where data are stored */
-        phaddr =  ((USBD_DFU_MediaTypeDef *)pdev->pUserData)->Read((uint8_t *)addr, hdfu->buffer.d8, hdfu->wlength);  
-        
-        /* Send the status data over EP0 */
-        USBD_CtlSendData (pdev,
-                          phaddr,
-                          hdfu->wlength);
-      }
-      else  /* unsupported hdfu->wblock_num */
-      {
-        hdfu->dev_state = DFU_ERROR_STALLEDPKT;
-        
-        hdfu->dev_status[1] = 0;
-        hdfu->dev_status[2] = 0;
-        hdfu->dev_status[3] = 0;
-        hdfu->dev_status[4] = hdfu->dev_state;        
-        
-        /* Call the error management function (command will be nacked */
-        USBD_CtlError (pdev, req); 
-      }
-    }
-    /* Unsupported state */
-    else
-    {
-      hdfu->wlength = 0;
-      hdfu->wblock_num = 0;   
-      /* Call the error management function (command will be nacked */
-      USBD_CtlError (pdev, req);
-    }
-  }
-  /* No Data setup request */
-  else
-  {
-    hdfu->dev_state = DFU_STATE_IDLE;
-     
-    hdfu->dev_status[1] = 0;
-    hdfu->dev_status[2] = 0;
-    hdfu->dev_status[3] = 0;
-    hdfu->dev_status[4] = hdfu->dev_state;
-  }
-}
-
-/**
-  * @brief  DFU_GetStatus
-  *         Handles the DFU GETSTATUS request.
-  * @param  pdev: instance
-  * @retval status
-  */
-static void DFU_GetStatus(USBD_HandleTypeDef *pdev)
-{
- USBD_DFU_HandleTypeDef   *hdfu;
- 
- hdfu = pdev->pClassData;
- 
-  switch (hdfu->dev_state)
-  {
-  case   DFU_STATE_DNLOAD_SYNC:
-    if (hdfu->wlength != 0)
-    {
-      hdfu->dev_state = DFU_STATE_DNLOAD_BUSY;
-       
-      hdfu->dev_status[1] = 0;
-      hdfu->dev_status[2] = 0;
-      hdfu->dev_status[3] = 0;
-      hdfu->dev_status[4] = hdfu->dev_state;
-      
-      if ((hdfu->wblock_num == 0) && (hdfu->buffer.d8[0] == DFU_CMD_ERASE))
-      {
-        ((USBD_DFU_MediaTypeDef *)pdev->pUserData)->GetStatus(hdfu->data_ptr, DFU_MEDIA_ERASE, hdfu->dev_status);
-      }
-      else
-      {
-        ((USBD_DFU_MediaTypeDef *)pdev->pUserData)->GetStatus(hdfu->data_ptr, DFU_MEDIA_PROGRAM, hdfu->dev_status);
-      }
-    }
-    else  /* (hdfu->wlength==0)*/
-    {
-      hdfu->dev_state = DFU_STATE_DNLOAD_IDLE;
-
-      hdfu->dev_status[1] = 0;
-      hdfu->dev_status[2] = 0;
-      hdfu->dev_status[3] = 0;
-      hdfu->dev_status[4] = hdfu->dev_state;     
-    }
-    break;
-    
-  case   DFU_STATE_MANIFEST_SYNC :
-    if (hdfu->manif_state == DFU_MANIFEST_IN_PROGRESS)
-    {
-      hdfu->dev_state = DFU_STATE_MANIFEST;
-      
-      hdfu->dev_status[1] = 1;             /*bwPollTimeout = 1ms*/
-      hdfu->dev_status[2] = 0;
-      hdfu->dev_status[3] = 0;
-      hdfu->dev_status[4] = hdfu->dev_state;   
-    }
-    else if ((hdfu->manif_state == DFU_MANIFEST_COMPLETE) && \
-      ((USBD_DFU_CfgDesc[(11 + (9 * USBD_DFU_MAX_ITF_NUM))]) & 0x04))
-    {
-      hdfu->dev_state = DFU_STATE_IDLE;
-      
-      hdfu->dev_status[1] = 0;
-      hdfu->dev_status[2] = 0;
-      hdfu->dev_status[3] = 0;
-      hdfu->dev_status[4] = hdfu->dev_state;      
-    }
-    break;
-    
-  default :
-    break;
-  }
-  
-  /* Send the status data over EP0 */
-  USBD_CtlSendData (pdev,
-                    (uint8_t *)(&(hdfu->dev_status[0])),
-                    6);
-}
-
-/**
-  * @brief  DFU_ClearStatus 
-  *         Handles the DFU CLRSTATUS request.
-  * @param  pdev: device instance
-  * @retval status
-  */
-static void DFU_ClearStatus(USBD_HandleTypeDef *pdev)
-{
- USBD_DFU_HandleTypeDef   *hdfu;
- 
- hdfu = pdev->pClassData;
- 
-  if (hdfu->dev_state == DFU_STATE_ERROR)
-  {
-    hdfu->dev_state = DFU_STATE_IDLE;
-    hdfu->dev_status[0] = DFU_ERROR_NONE;/*bStatus*/
-    hdfu->dev_status[1] = 0;
-    hdfu->dev_status[2] = 0;
-    hdfu->dev_status[3] = 0; /*bwPollTimeout=0ms*/
-    hdfu->dev_status[4] = hdfu->dev_state;/*bState*/
-    hdfu->dev_status[5] = 0;/*iString*/
-  }
-  else
-  {   /*State Error*/
-    hdfu->dev_state = DFU_STATE_ERROR;
-    hdfu->dev_status[0] = DFU_ERROR_UNKNOWN;/*bStatus*/
-    hdfu->dev_status[1] = 0;
-    hdfu->dev_status[2] = 0;
-    hdfu->dev_status[3] = 0; /*bwPollTimeout=0ms*/
-    hdfu->dev_status[4] = hdfu->dev_state;/*bState*/
-    hdfu->dev_status[5] = 0;/*iString*/
-  }
-}
-
-/**
-  * @brief  DFU_GetState
-  *         Handles the DFU GETSTATE request.
-  * @param  pdev: device instance
-  * @retval None
-  */
-static void DFU_GetState(USBD_HandleTypeDef *pdev)
-{
- USBD_DFU_HandleTypeDef   *hdfu;
- 
- hdfu = pdev->pClassData;
- 
-  /* Return the current state of the DFU interface */
-  USBD_CtlSendData (pdev, 
-                    &hdfu->dev_state,
-                    1);  
-}
-
-/**
-  * @brief  DFU_Abort
-  *         Handles the DFU ABORT request.
-  * @param  pdev: device instance
-  * @retval None
-  */
-static void DFU_Abort(USBD_HandleTypeDef *pdev)
-{
- USBD_DFU_HandleTypeDef   *hdfu;
- 
- hdfu = pdev->pClassData;
- 
-  if (hdfu->dev_state == DFU_STATE_IDLE || hdfu->dev_state == DFU_STATE_DNLOAD_SYNC
-      || hdfu->dev_state == DFU_STATE_DNLOAD_IDLE || hdfu->dev_state == DFU_STATE_MANIFEST_SYNC
-        || hdfu->dev_state == DFU_STATE_UPLOAD_IDLE )
-  {
-    hdfu->dev_state = DFU_STATE_IDLE;
-    hdfu->dev_status[0] = DFU_ERROR_NONE;
-    hdfu->dev_status[1] = 0;
-    hdfu->dev_status[2] = 0;
-    hdfu->dev_status[3] = 0; /*bwPollTimeout=0ms*/
-    hdfu->dev_status[4] = hdfu->dev_state;
-    hdfu->dev_status[5] = 0; /*iString*/
-    hdfu->wblock_num = 0;
-    hdfu->wlength = 0;
-  }  
-}
-
-/**
-  * @brief  DFU_Leave
-  *         Handles the sub-protocol DFU leave DFU mode request (leaves DFU mode
-  *         and resets device to jump to user loaded code).
-  * @param  pdev: device instance
-  * @retval None
-  */
-void DFU_Leave(USBD_HandleTypeDef *pdev)
-{
- USBD_DFU_HandleTypeDef   *hdfu;
- 
- hdfu = pdev->pClassData;
- 
- hdfu->manif_state = DFU_MANIFEST_COMPLETE;
-
-  if ((USBD_DFU_CfgDesc[(11 + (9 * USBD_DFU_MAX_ITF_NUM))]) & 0x04)
-  {
-    hdfu->dev_state = DFU_STATE_MANIFEST_SYNC;
-
-    hdfu->dev_status[1] = 0;
-    hdfu->dev_status[2] = 0;
-    hdfu->dev_status[3] = 0;
-    hdfu->dev_status[4] = hdfu->dev_state;       
-    return;
-  }
-  else
-  {
-    
-    hdfu->dev_state = DFU_STATE_MANIFEST_WAIT_RESET;
-    
-    hdfu->dev_status[1] = 0;
-    hdfu->dev_status[2] = 0;
-    hdfu->dev_status[3] = 0;
-    hdfu->dev_status[4] = hdfu->dev_state;     
-    
-    /* Disconnect the USB device */
-    USBD_Stop (pdev);
-
-    /* DeInitilialize the MAL(Media Access Layer) */
-    ((USBD_DFU_MediaTypeDef *)pdev->pUserData)->DeInit();
-    
-    /* Generate system reset to allow jumping to the user code */
-    NVIC_SystemReset();
-   
-    /* This instruction will not be reached (system reset) */
-    for(;;);
-  }  
-}
-
-/**
-  * @}
-  */ 
-
-
-/**
-  * @}
-  */ 
-
-
-/**
-  * @}
-  */ 
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/stmhal/usbdev/class/DFU/Src/usbd_dfu_media_template.c b/stmhal/usbdev/class/DFU/Src/usbd_dfu_media_template.c
deleted file mode 100644
index 25606fdb4..000000000
--- a/stmhal/usbdev/class/DFU/Src/usbd_dfu_media_template.c
+++ /dev/null
@@ -1,139 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    usbd_dfu_media_template.c
-  * @author  MCD Application Team
-  * @version V2.0.0
-  * @date    18-February-2014
-  * @brief   Memory management layer
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT 2014 STMicroelectronics</center></h2>
-  *
-  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
-  * You may not use this file except in compliance with the License.
-  * You may obtain a copy of the License at:
-  *
-  *        http://www.st.com/software_license_agreement_liberty_v2
-  *
-  * Unless required by applicable law or agreed to in writing, software 
-  * distributed under the License is distributed on an "AS IS" BASIS, 
-  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  * See the License for the specific language governing permissions and
-  * limitations under the License.
-  *
-  ******************************************************************************
-  */ 
-
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_dfu_media_template.h"
-
-
-/* Private typedef -----------------------------------------------------------*/
-/* Private define ------------------------------------------------------------*/
-/* Private macro -------------------------------------------------------------*/
-/* Private variables ---------------------------------------------------------*/
-/* Private function prototypes -----------------------------------------------*/
-/* Extern function prototypes ------------------------------------------------*/
-/* Private functions ---------------------------------------------------------*/
-uint16_t MEM_If_Init(void);
-uint16_t MEM_If_Erase (uint32_t Add);
-uint16_t MEM_If_Write (uint8_t *src, uint8_t *dest, uint32_t Len);
-uint8_t *MEM_If_Read  (uint8_t *src, uint8_t *dest, uint32_t Len);
-uint16_t MEM_If_DeInit(void);
-uint16_t MEM_If_GetStatus (uint32_t Add, uint8_t Cmd, uint8_t *buffer);
-
-USBD_DFU_MediaTypeDef USBD_DFU_MEDIA_Template_fops =
-{
-    (uint8_t *)"DFU MEDIA",
-    MEM_If_Init,
-    MEM_If_DeInit,
-    MEM_If_Erase,
-    MEM_If_Write,
-    MEM_If_Read,
-    MEM_If_GetStatus,
-  
-};
-/**
-  * @brief  MEM_If_Init
-  *         Memory initialization routine.
-  * @param  None
-  * @retval 0 if operation is successeful, MAL_FAIL else.
-  */
-uint16_t MEM_If_Init(void)
-{ 
-  return 0;
-}
-
-/**
-  * @brief  MEM_If_DeInit
-  *         Memory deinitialization routine.
-  * @param  None
-  * @retval 0 if operation is successeful, MAL_FAIL else.
-  */
-uint16_t MEM_If_DeInit(void)
-{ 
-  return 0;
-}
-
-/**
-  * @brief  MEM_If_Erase
-  *         Erase sector.
-  * @param  Add: Address of sector to be erased.
-  * @retval 0 if operation is successeful, MAL_FAIL else.
-  */
-uint16_t MEM_If_Erase(uint32_t Add)
-{
-  return 0;
-}
-
-/**
-  * @brief  MEM_If_Write
-  *         Memory write routine.
-  * @param  Add: Address to be written to.
-  * @param  Len: Number of data to be written (in bytes).
-  * @retval 0 if operation is successeful, MAL_FAIL else.
-  */
-uint16_t MEM_If_Write(uint8_t *src, uint8_t *dest, uint32_t Len)
-{
-  return 0;
-}
-
-/**
-  * @brief  MEM_If_Read
-  *         Memory read routine.
-  * @param  Add: Address to be read from.
-  * @param  Len: Number of data to be read (in bytes).
-  * @retval Pointer to the phyisical address where data should be read.
-  */
-uint8_t *MEM_If_Read (uint8_t *src, uint8_t *dest, uint32_t Len)
-{
-  /* Return a valid address to avoid HardFault */
-  return  (uint8_t*)(0); 
-}
-
-/**
-  * @brief  Flash_If_GetStatus
-  *         Memory read routine.
-  * @param  Add: Address to be read from.
-  * @param  cmd: Number of data to be read (in bytes).
-  * @retval Pointer to the phyisical address where data should be read.
-  */
-uint16_t MEM_If_GetStatus (uint32_t Add, uint8_t Cmd, uint8_t *buffer)
-{
-  switch (Cmd)
-  {
-  case DFU_MEDIA_PROGRAM:
-
-    break;
-    
-  case DFU_MEDIA_ERASE:
-  default:
-
-    break;
-  }                             
-  return  (0); 
-}
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
-
diff --git a/stmhal/usbdev/class/HID/Inc/usbd_hid.h b/stmhal/usbdev/class/HID/Inc/usbd_hid.h
deleted file mode 100644
index 811de0b5a..000000000
--- a/stmhal/usbdev/class/HID/Inc/usbd_hid.h
+++ /dev/null
@@ -1,136 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    usbd_hid_core.h
-  * @author  MCD Application Team
-  * @version V2.0.0
-  * @date    18-February-2014
-  * @brief   header file for the usbd_hid_core.c file.
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT 2014 STMicroelectronics</center></h2>
-  *
-  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
-  * You may not use this file except in compliance with the License.
-  * You may obtain a copy of the License at:
-  *
-  *        http://www.st.com/software_license_agreement_liberty_v2
-  *
-  * Unless required by applicable law or agreed to in writing, software 
-  * distributed under the License is distributed on an "AS IS" BASIS, 
-  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  * See the License for the specific language governing permissions and
-  * limitations under the License.
-  *
-  ******************************************************************************
-  */ 
-
-/* Includes ------------------------------------------------------------------*/
-
-#ifndef __USB_HID_CORE_H_
-#define __USB_HID_CORE_H_
-
-#include  "usbd_ioreq.h"
-
-/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
-  * @{
-  */
-  
-/** @defgroup USBD_HID
-  * @brief This file is the Header file for USBD_msc.c
-  * @{
-  */ 
-
-
-/** @defgroup USBD_HID_Exported_Defines
-  * @{
-  */ 
-#define HID_EPIN_ADDR                 0x81
-#define HID_EPIN_SIZE                 0x04
-
-#define USB_HID_CONFIG_DESC_SIZ       34
-#define USB_HID_DESC_SIZ              9
-#define HID_MOUSE_REPORT_DESC_SIZE    74
-
-#define HID_DESCRIPTOR_TYPE           0x21
-#define HID_REPORT_DESC               0x22
-
-
-#define HID_REQ_SET_PROTOCOL          0x0B
-#define HID_REQ_GET_PROTOCOL          0x03
-
-#define HID_REQ_SET_IDLE              0x0A
-#define HID_REQ_GET_IDLE              0x02
-
-#define HID_REQ_SET_REPORT            0x09
-#define HID_REQ_GET_REPORT            0x01
-/**
-  * @}
-  */ 
-
-
-/** @defgroup USBD_CORE_Exported_TypesDefinitions
-  * @{
-  */
-typedef enum
-{
-  HID_IDLE = 0,
-  HID_BUSY,
-}
-HID_StateTypeDef; 
-
-
-typedef struct
-{
-  uint32_t             Protocol;   
-  uint32_t             IdleState;  
-  uint32_t             AltSetting;
-  HID_StateTypeDef     state;  
-}
-USBD_HID_HandleTypeDef; 
-/**
-  * @}
-  */ 
-
-
-
-/** @defgroup USBD_CORE_Exported_Macros
-  * @{
-  */ 
-
-/**
-  * @}
-  */ 
-
-/** @defgroup USBD_CORE_Exported_Variables
-  * @{
-  */ 
-
-extern USBD_ClassTypeDef  USBD_HID;
-/**
-  * @}
-  */ 
-
-/** @defgroup USB_CORE_Exported_Functions
-  * @{
-  */ 
-uint8_t USBD_HID_SendReport (USBD_HandleTypeDef *pdev, 
-                                 uint8_t *report,
-                                 uint16_t len);
-
-uint8_t  *USBD_HID_DeviceQualifierDescriptor (uint16_t *length);
-
-/**
-  * @}
-  */ 
-
-#endif  // __USB_HID_CORE_H_
-/**
-  * @}
-  */ 
-
-/**
-  * @}
-  */ 
-  
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/stmhal/usbdev/class/HID/Src/usbd_hid.c b/stmhal/usbdev/class/HID/Src/usbd_hid.c
deleted file mode 100644
index 11dca78d5..000000000
--- a/stmhal/usbdev/class/HID/Src/usbd_hid.c
+++ /dev/null
@@ -1,509 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    usbd_hid.c
-  * @author  MCD Application Team
-  * @version V2.0.0
-  * @date    18-February-2014
-  * @brief   This file provides the HID core functions.
-  *
-  * @verbatim
-  *      
-  *          ===================================================================      
-  *                                HID Class  Description
-  *          =================================================================== 
-  *           This module manages the HID class V1.11 following the "Device Class Definition
-  *           for Human Interface Devices (HID) Version 1.11 Jun 27, 2001".
-  *           This driver implements the following aspects of the specification:
-  *             - The Boot Interface Subclass
-  *             - The Mouse protocol
-  *             - Usage Page : Generic Desktop
-  *             - Usage : Joystick)
-  *             - Collection : Application 
-  *      
-  * @note     In HS mode and when the DMA is used, all variables and data structures
-  *           dealing with the DMA during the transaction process should be 32-bit aligned.
-  *           
-  *      
-  *  @endverbatim
-  *
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT 2014 STMicroelectronics</center></h2>
-  *
-  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
-  * You may not use this file except in compliance with the License.
-  * You may obtain a copy of the License at:
-  *
-  *        http://www.st.com/software_license_agreement_liberty_v2
-  *
-  * Unless required by applicable law or agreed to in writing, software 
-  * distributed under the License is distributed on an "AS IS" BASIS, 
-  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  * See the License for the specific language governing permissions and
-  * limitations under the License.
-  *
-  ******************************************************************************
-  */ 
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_hid.h"
-#include "usbd_desc.h"
-#include "usbd_ctlreq.h"
-
-
-/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
-  * @{
-  */
-
-
-/** @defgroup USBD_HID 
-  * @brief usbd core module
-  * @{
-  */ 
-
-/** @defgroup USBD_HID_Private_TypesDefinitions
-  * @{
-  */ 
-/**
-  * @}
-  */ 
-
-
-/** @defgroup USBD_HID_Private_Defines
-  * @{
-  */ 
-
-/**
-  * @}
-  */ 
-
-
-/** @defgroup USBD_HID_Private_Macros
-  * @{
-  */ 
-/**
-  * @}
-  */ 
-
-
-
-
-/** @defgroup USBD_HID_Private_FunctionPrototypes
-  * @{
-  */
-
-
-static uint8_t  USBD_HID_Init (USBD_HandleTypeDef *pdev, 
-                               uint8_t cfgidx);
-
-static uint8_t  USBD_HID_DeInit (USBD_HandleTypeDef *pdev, 
-                                 uint8_t cfgidx);
-
-static uint8_t  USBD_HID_Setup (USBD_HandleTypeDef *pdev, 
-                                USBD_SetupReqTypedef *req);
-
-static uint8_t  *USBD_HID_GetCfgDesc (uint16_t *length);
-
-static uint8_t  *USBD_HID_GetDeviceQualifierDesc (uint16_t *length);
-
-static uint8_t  USBD_HID_DataIn (USBD_HandleTypeDef *pdev, uint8_t epnum);
-/**
-  * @}
-  */ 
-
-/** @defgroup USBD_HID_Private_Variables
-  * @{
-  */ 
-
-USBD_ClassTypeDef  USBD_HID = 
-{
-  USBD_HID_Init,
-  USBD_HID_DeInit,
-  USBD_HID_Setup,
-  NULL, /*EP0_TxSent*/  
-  NULL, /*EP0_RxReady*/
-  USBD_HID_DataIn, /*DataIn*/
-  NULL, /*DataOut*/
-  NULL, /*SOF */
-  NULL,
-  NULL,      
-  USBD_HID_GetCfgDesc,
-  USBD_HID_GetCfgDesc, 
-  USBD_HID_GetCfgDesc,
-  USBD_HID_GetDeviceQualifierDesc,
-};
-
-/* USB HID device Configuration Descriptor */
-__ALIGN_BEGIN static uint8_t USBD_HID_CfgDesc[USB_HID_CONFIG_DESC_SIZ]  __ALIGN_END =
-{
-  0x09, /* bLength: Configuration Descriptor size */
-  USB_DESC_TYPE_CONFIGURATION, /* bDescriptorType: Configuration */
-  USB_HID_CONFIG_DESC_SIZ,
-  /* wTotalLength: Bytes returned */
-  0x00,
-  0x01,         /*bNumInterfaces: 1 interface*/
-  0x01,         /*bConfigurationValue: Configuration value*/
-  0x00,         /*iConfiguration: Index of string descriptor describing
-  the configuration*/
-  0xE0,         /*bmAttributes: bus powered and Support Remote Wake-up */
-  0x32,         /*MaxPower 100 mA: this current is used for detecting Vbus*/
-  
-  /************** Descriptor of Joystick Mouse interface ****************/
-  /* 09 */
-  0x09,         /*bLength: Interface Descriptor size*/
-  USB_DESC_TYPE_INTERFACE,/*bDescriptorType: Interface descriptor type*/
-  0x00,         /*bInterfaceNumber: Number of Interface*/
-  0x00,         /*bAlternateSetting: Alternate setting*/
-  0x01,         /*bNumEndpoints*/
-  0x03,         /*bInterfaceClass: HID*/
-  0x01,         /*bInterfaceSubClass : 1=BOOT, 0=no boot*/
-  0x02,         /*nInterfaceProtocol : 0=none, 1=keyboard, 2=mouse*/
-  0,            /*iInterface: Index of string descriptor*/
-  /******************** Descriptor of Joystick Mouse HID ********************/
-  /* 18 */
-  0x09,         /*bLength: HID Descriptor size*/
-  HID_DESCRIPTOR_TYPE, /*bDescriptorType: HID*/
-  0x11,         /*bcdHID: HID Class Spec release number*/
-  0x01,
-  0x00,         /*bCountryCode: Hardware target country*/
-  0x01,         /*bNumDescriptors: Number of HID class descriptors to follow*/
-  0x22,         /*bDescriptorType*/
-  HID_MOUSE_REPORT_DESC_SIZE,/*wItemLength: Total length of Report descriptor*/
-  0x00,
-  /******************** Descriptor of Mouse endpoint ********************/
-  /* 27 */
-  0x07,          /*bLength: Endpoint Descriptor size*/
-  USB_DESC_TYPE_ENDPOINT, /*bDescriptorType:*/
-  
-  HID_EPIN_ADDR,     /*bEndpointAddress: Endpoint Address (IN)*/
-  0x03,          /*bmAttributes: Interrupt endpoint*/
-  HID_EPIN_SIZE, /*wMaxPacketSize: 4 Byte max */
-  0x00,
-  0x0A,          /*bInterval: Polling Interval (10 ms)*/
-  /* 34 */
-} ;
-
-/* USB HID device Configuration Descriptor */
-__ALIGN_BEGIN static uint8_t USBD_HID_Desc[USB_HID_DESC_SIZ]  __ALIGN_END  =
-{
-  /* 18 */
-  0x09,         /*bLength: HID Descriptor size*/
-  HID_DESCRIPTOR_TYPE, /*bDescriptorType: HID*/
-  0x11,         /*bcdHID: HID Class Spec release number*/
-  0x01,
-  0x00,         /*bCountryCode: Hardware target country*/
-  0x01,         /*bNumDescriptors: Number of HID class descriptors to follow*/
-  0x22,         /*bDescriptorType*/
-  HID_MOUSE_REPORT_DESC_SIZE,/*wItemLength: Total length of Report descriptor*/
-  0x00,
-};
-
-/* USB Standard Device Descriptor */
-__ALIGN_BEGIN static uint8_t USBD_HID_DeviceQualifierDesc[USB_LEN_DEV_QUALIFIER_DESC]  __ALIGN_END =
-{
-  USB_LEN_DEV_QUALIFIER_DESC,
-  USB_DESC_TYPE_DEVICE_QUALIFIER,
-  0x00,
-  0x02,
-  0x00,
-  0x00,
-  0x00,
-  0x40,
-  0x01,
-  0x00,
-};
-
-__ALIGN_BEGIN static uint8_t HID_MOUSE_ReportDesc[HID_MOUSE_REPORT_DESC_SIZE]  __ALIGN_END =
-{
-  0x05,   0x01,
-  0x09,   0x02,
-  0xA1,   0x01,
-  0x09,   0x01,
-  
-  0xA1,   0x00,
-  0x05,   0x09,
-  0x19,   0x01,
-  0x29,   0x03,
-  
-  0x15,   0x00,
-  0x25,   0x01,
-  0x95,   0x03,
-  0x75,   0x01,
-  
-  0x81,   0x02,
-  0x95,   0x01,
-  0x75,   0x05,
-  0x81,   0x01,
-  
-  0x05,   0x01,
-  0x09,   0x30,
-  0x09,   0x31,
-  0x09,   0x38,
-  
-  0x15,   0x81,
-  0x25,   0x7F,
-  0x75,   0x08,
-  0x95,   0x03,
-  
-  0x81,   0x06,
-  0xC0,   0x09,
-  0x3c,   0x05,
-  0xff,   0x09,
-  
-  0x01,   0x15,
-  0x00,   0x25,
-  0x01,   0x75,
-  0x01,   0x95,
-  
-  0x02,   0xb1,
-  0x22,   0x75,
-  0x06,   0x95,
-  0x01,   0xb1,
-  
-  0x01,   0xc0
-}; 
-
-/**
-  * @}
-  */ 
-
-/** @defgroup USBD_HID_Private_Functions
-  * @{
-  */ 
-
-/**
-  * @brief  USBD_HID_Init
-  *         Initialize the HID interface
-  * @param  pdev: device instance
-  * @param  cfgidx: Configuration index
-  * @retval status
-  */
-static uint8_t  USBD_HID_Init (USBD_HandleTypeDef *pdev, 
-                               uint8_t cfgidx)
-{
-  uint8_t ret = 0;
-  
-  /* Open EP IN */
-  USBD_LL_OpenEP(pdev,
-                 HID_EPIN_ADDR,
-                 USBD_EP_TYPE_INTR,
-                 HID_EPIN_SIZE);  
-  
-  pdev->pClassData = USBD_malloc(sizeof (USBD_HID_HandleTypeDef));
-  
-  if(pdev->pClassData == NULL)
-  {
-    ret = 1; 
-  }
-  else
-  {
-    ((USBD_HID_HandleTypeDef *)pdev->pClassData)->state = HID_IDLE;
-  }
-  return ret;
-}
-
-/**
-  * @brief  USBD_HID_Init
-  *         DeInitialize the HID layer
-  * @param  pdev: device instance
-  * @param  cfgidx: Configuration index
-  * @retval status
-  */
-static uint8_t  USBD_HID_DeInit (USBD_HandleTypeDef *pdev, 
-                                 uint8_t cfgidx)
-{
-  /* Close HID EPs */
-  USBD_LL_CloseEP(pdev,
-                  HID_EPIN_SIZE);
-  
-  /* FRee allocated memory */
-  if(pdev->pClassData != NULL)
-  {
-    USBD_free(pdev->pClassData);
-    pdev->pClassData = NULL;
-  } 
-  
-  return USBD_OK;
-}
-
-/**
-  * @brief  USBD_HID_Setup
-  *         Handle the HID specific requests
-  * @param  pdev: instance
-  * @param  req: usb requests
-  * @retval status
-  */
-static uint8_t  USBD_HID_Setup (USBD_HandleTypeDef *pdev, 
-                                USBD_SetupReqTypedef *req)
-{
-  uint16_t len = 0;
-  uint8_t  *pbuf = NULL;
-  USBD_HID_HandleTypeDef     *hhid = pdev->pClassData;
-  
-  switch (req->bmRequest & USB_REQ_TYPE_MASK)
-  {
-  case USB_REQ_TYPE_CLASS :  
-    switch (req->bRequest)
-    {
-      
-      
-    case HID_REQ_SET_PROTOCOL:
-      hhid->Protocol = (uint8_t)(req->wValue);
-      break;
-      
-    case HID_REQ_GET_PROTOCOL:
-      USBD_CtlSendData (pdev, 
-                        (uint8_t *)&hhid->Protocol,
-                        1);    
-      break;
-      
-    case HID_REQ_SET_IDLE:
-      hhid->IdleState = (uint8_t)(req->wValue >> 8);
-      break;
-      
-    case HID_REQ_GET_IDLE:
-      USBD_CtlSendData (pdev, 
-                        (uint8_t *)&hhid->IdleState,
-                        1);        
-      break;      
-      
-    default:
-      USBD_CtlError (pdev, req);
-      return USBD_FAIL; 
-    }
-    break;
-    
-  case USB_REQ_TYPE_STANDARD:
-    switch (req->bRequest)
-    {
-    case USB_REQ_GET_DESCRIPTOR: 
-      if( req->wValue >> 8 == HID_REPORT_DESC)
-      {
-        len = MIN(HID_MOUSE_REPORT_DESC_SIZE , req->wLength);
-        pbuf = HID_MOUSE_ReportDesc;
-      }
-      else if( req->wValue >> 8 == HID_DESCRIPTOR_TYPE)
-      {
-        pbuf = USBD_HID_Desc;   
-        len = MIN(USB_HID_DESC_SIZ , req->wLength);
-      }
-      
-      USBD_CtlSendData (pdev, 
-                        pbuf,
-                        len);
-      
-      break;
-      
-    case USB_REQ_GET_INTERFACE :
-      USBD_CtlSendData (pdev,
-                        (uint8_t *)&hhid->AltSetting,
-                        1);
-      break;
-      
-    case USB_REQ_SET_INTERFACE :
-      hhid->AltSetting = (uint8_t)(req->wValue);
-      break;
-    }
-  }
-  return USBD_OK;
-}
-
-/**
-  * @brief  USBD_HID_SendReport 
-  *         Send HID Report
-  * @param  pdev: device instance
-  * @param  buff: pointer to report
-  * @retval status
-  */
-uint8_t USBD_HID_SendReport     (USBD_HandleTypeDef  *pdev, 
-                                 uint8_t *report,
-                                 uint16_t len)
-{
-  USBD_HID_HandleTypeDef     *hhid = pdev->pClassData;
-  
-  if (pdev->dev_state == USBD_STATE_CONFIGURED )
-  {
-    if(hhid->state == HID_IDLE)
-    {
-      hhid->state = HID_BUSY;
-      USBD_LL_Transmit (pdev, 
-                        HID_EPIN_ADDR,                                      
-                        report,
-                        len);
-    }
-  }
-  return USBD_OK;
-}
-
-/**
-  * @brief  USBD_HID_GetCfgDesc 
-  *         return configuration descriptor
-  * @param  speed : current device speed
-  * @param  length : pointer data length
-  * @retval pointer to descriptor buffer
-  */
-static uint8_t  *USBD_HID_GetCfgDesc (uint16_t *length)
-{
-  *length = sizeof (USBD_HID_CfgDesc);
-  return USBD_HID_CfgDesc;
-}
-
-/**
-* @brief  DeviceQualifierDescriptor 
-*         return Device Qualifier descriptor
-* @param  length : pointer data length
-* @retval pointer to descriptor buffer
-*/
-uint8_t  *USBD_HID_DeviceQualifierDescriptor (uint16_t *length)
-{
-  *length = sizeof (USBD_HID_DeviceQualifierDesc);
-  return USBD_HID_DeviceQualifierDesc;
-}
-
-
-/**
-  * @brief  USBD_HID_DataIn
-  *         handle data IN Stage
-  * @param  pdev: device instance
-  * @param  epnum: endpoint index
-  * @retval status
-  */
-static uint8_t  USBD_HID_DataIn (USBD_HandleTypeDef *pdev, 
-                              uint8_t epnum)
-{
-  
-  /* Ensure that the FIFO is empty before a new transfer, this condition could 
-  be caused by  a new transfer before the end of the previous transfer */
-  ((USBD_HID_HandleTypeDef *)pdev->pClassData)->state = HID_IDLE;
-  return USBD_OK;
-}
-
-
-/**
-* @brief  DeviceQualifierDescriptor 
-*         return Device Qualifier descriptor
-* @param  length : pointer data length
-* @retval pointer to descriptor buffer
-*/
-static uint8_t  *USBD_HID_GetDeviceQualifierDesc (uint16_t *length)
-{
-  *length = sizeof (USBD_HID_DeviceQualifierDesc);
-  return USBD_HID_DeviceQualifierDesc;
-}
-
-/**
-  * @}
-  */ 
-
-
-/**
-  * @}
-  */ 
-
-
-/**
-  * @}
-  */ 
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/stmhal/usbdev/class/Template/Inc/usbd_template.h b/stmhal/usbdev/class/Template/Inc/usbd_template.h
deleted file mode 100644
index 5571dbd1b..000000000
--- a/stmhal/usbdev/class/Template/Inc/usbd_template.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    usbd_template_core.h
-  * @author  MCD Application Team
-  * @version V2.0.0
-  * @date    18-February-2014
-  * @brief   header file for the usbd_template_core.c file.
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT 2014 STMicroelectronics</center></h2>
-  *
-  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
-  * You may not use this file except in compliance with the License.
-  * You may obtain a copy of the License at:
-  *
-  *        http://www.st.com/software_license_agreement_liberty_v2
-  *
-  * Unless required by applicable law or agreed to in writing, software 
-  * distributed under the License is distributed on an "AS IS" BASIS, 
-  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  * See the License for the specific language governing permissions and
-  * limitations under the License.
-  *
-  ******************************************************************************
-  */ 
-
-/* Includes ------------------------------------------------------------------*/
-
-#ifndef __USB_TEMPLATE_CORE_H_
-#define __USB_TEMPLATE_CORE_H_
-
-#include  "usbd_ioreq.h"
-
-/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
-  * @{
-  */
-  
-/** @defgroup USBD_TEMPLATE
-  * @brief This file is the Header file for USBD_msc.c
-  * @{
-  */ 
-
-
-/** @defgroup USBD_TEMPLATE_Exported_Defines
-  * @{
-  */ 
-#define TEMPLATE_EPIN_ADDR                 0x81
-#define TEMPLATE_EPIN_SIZE                 0x10
-
-#define USB_TEMPLATE_CONFIG_DESC_SIZ       64
-
-/**
-  * @}
-  */ 
-
-
-/** @defgroup USBD_CORE_Exported_TypesDefinitions
-  * @{
-  */
-
-/**
-  * @}
-  */ 
-
-
-
-/** @defgroup USBD_CORE_Exported_Macros
-  * @{
-  */ 
-
-/**
-  * @}
-  */ 
-
-/** @defgroup USBD_CORE_Exported_Variables
-  * @{
-  */ 
-
-extern USBD_ClassTypeDef  USBD_TEMPLATE_ClassDriver;
-/**
-  * @}
-  */ 
-
-/** @defgroup USB_CORE_Exported_Functions
-  * @{
-  */ 
-/**
-  * @}
-  */ 
-
-#endif  // __USB_TEMPLATE_CORE_H_
-/**
-  * @}
-  */ 
-
-/**
-  * @}
-  */ 
-  
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/stmhal/usbdev/class/Template/Src/usbd_template.c b/stmhal/usbdev/class/Template/Src/usbd_template.c
deleted file mode 100644
index 144faa217..000000000
--- a/stmhal/usbdev/class/Template/Src/usbd_template.c
+++ /dev/null
@@ -1,398 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    usbd_template.c
-  * @author  MCD Application Team
-  * @version V2.0.0
-  * @date    18-February-2014
-  * @brief   This file provides the HID core functions.
-  *
-  * @verbatim
-  *      
-  *          ===================================================================      
-  *                                TEMPLATE Class  Description
-  *          ===================================================================
-  *          
-  *
-  *
-  *
-  *           
-  *      
-  * @note     In HS mode and when the DMA is used, all variables and data structures
-  *           dealing with the DMA during the transaction process should be 32-bit aligned.
-  *           
-  *      
-  *  @endverbatim
-  *
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT 2014 STMicroelectronics</center></h2>
-  *
-  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
-  * You may not use this file except in compliance with the License.
-  * You may obtain a copy of the License at:
-  *
-  *        http://www.st.com/software_license_agreement_liberty_v2
-  *
-  * Unless required by applicable law or agreed to in writing, software 
-  * distributed under the License is distributed on an "AS IS" BASIS, 
-  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  * See the License for the specific language governing permissions and
-  * limitations under the License.
-  *
-  ******************************************************************************
-  */ 
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_template.h"
-#include "usbd_desc.h"
-#include "usbd_ctlreq.h"
-
-
-/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
-  * @{
-  */
-
-
-/** @defgroup USBD_TEMPLATE 
-  * @brief usbd core module
-  * @{
-  */ 
-
-/** @defgroup USBD_TEMPLATE_Private_TypesDefinitions
-  * @{
-  */ 
-/**
-  * @}
-  */ 
-
-
-/** @defgroup USBD_TEMPLATE_Private_Defines
-  * @{
-  */ 
-
-/**
-  * @}
-  */ 
-
-
-/** @defgroup USBD_TEMPLATE_Private_Macros
-  * @{
-  */ 
-                                         
-/**
-  * @}
-  */ 
-
-
-
-
-/** @defgroup USBD_TEMPLATE_Private_FunctionPrototypes
-  * @{
-  */
-
-
-static uint8_t  USBD_TEMPLATE_Init (USBD_HandleTypeDef *pdev, 
-                               uint8_t cfgidx);
-
-static uint8_t  USBD_TEMPLATE_DeInit (USBD_HandleTypeDef *pdev, 
-                                 uint8_t cfgidx);
-
-static uint8_t  USBD_TEMPLATE_Setup (USBD_HandleTypeDef *pdev, 
-                                USBD_SetupReqTypedef *req);
-
-static uint8_t  *USBD_TEMPLATE_GetCfgDesc (uint16_t *length);
-
-static uint8_t  *USBD_TEMPLATE_GetDeviceQualifierDesc (uint16_t *length);
-
-static uint8_t  USBD_TEMPLATE_DataIn (USBD_HandleTypeDef *pdev, uint8_t epnum);
-
-static uint8_t  USBD_TEMPLATE_DataOut (USBD_HandleTypeDef *pdev, uint8_t epnum);
-
-static uint8_t  USBD_TEMPLATE_EP0_RxReady (USBD_HandleTypeDef *pdev);
-
-static uint8_t  USBD_TEMPLATE_EP0_TxReady (USBD_HandleTypeDef *pdev);
-
-static uint8_t  USBD_TEMPLATE_SOF (USBD_HandleTypeDef *pdev);
-
-static uint8_t  USBD_TEMPLATE_IsoINIncomplete (USBD_HandleTypeDef *pdev, uint8_t epnum);
-
-static uint8_t  USBD_TEMPLATE_IsoOutIncomplete (USBD_HandleTypeDef *pdev, uint8_t epnum);
-
-/**
-  * @}
-  */ 
-
-/** @defgroup USBD_TEMPLATE_Private_Variables
-  * @{
-  */ 
-
-USBD_ClassTypeDef  USBD_TEMPLATE_ClassDriver = 
-{
-  USBD_TEMPLATE_Init,
-  USBD_TEMPLATE_DeInit,
-  USBD_TEMPLATE_Setup,
-  USBD_TEMPLATE_EP0_TxReady,  
-  USBD_TEMPLATE_EP0_RxReady,
-  USBD_TEMPLATE_DataIn,
-  USBD_TEMPLATE_DataOut,
-  USBD_TEMPLATE_SOF,
-  USBD_TEMPLATE_IsoINIncomplete,
-  USBD_TEMPLATE_IsoOutIncomplete,      
-  USBD_TEMPLATE_GetCfgDesc,
-  USBD_TEMPLATE_GetCfgDesc, 
-  USBD_TEMPLATE_GetCfgDesc,
-  USBD_TEMPLATE_GetDeviceQualifierDesc,
-};
-
-#if defined ( __ICCARM__ ) /*!< IAR Compiler */
-  #pragma data_alignment=4   
-#endif
-/* USB TEMPLATE device Configuration Descriptor */
-static uint8_t USBD_TEMPLATE_CfgDesc[USB_TEMPLATE_CONFIG_DESC_SIZ] =
-{
-  0x09, /* bLength: Configuation Descriptor size */
-  USB_DESC_TYPE_OTHER_SPEED_CONFIGURATION, /* bDescriptorType: Configuration */
-  USB_TEMPLATE_CONFIG_DESC_SIZ,
-  /* wTotalLength: Bytes returned */
-  0x00,
-  0x01,         /*bNumInterfaces: 1 interface*/
-  0x01,         /*bConfigurationValue: Configuration value*/
-  0x02,         /*iConfiguration: Index of string descriptor describing the configuration*/
-  0xC0,         /*bmAttributes: bus powered and Supprts Remote Wakeup */
-  0x32,         /*MaxPower 100 mA: this current is used for detecting Vbus*/
-  /* 09 */
-  
-  /**********  Descriptor of TEMPLATE interface 0 Alternate setting 0 **************/  
- 
-};
-  
-#if defined ( __ICCARM__ ) /*!< IAR Compiler */
-  #pragma data_alignment=4   
-#endif
-/* USB Standard Device Descriptor */
-static uint8_t USBD_TEMPLATE_DeviceQualifierDesc[USB_LEN_DEV_QUALIFIER_DESC] =
-{
-  USB_LEN_DEV_QUALIFIER_DESC,
-  USB_DESC_TYPE_DEVICE_QUALIFIER,
-  0x00,
-  0x02,
-  0x00,
-  0x00,
-  0x00,
-  0x40,
-  0x01,
-  0x00,
-};
-
-/**
-  * @}
-  */ 
-
-/** @defgroup USBD_TEMPLATE_Private_Functions
-  * @{
-  */ 
-
-/**
-  * @brief  USBD_TEMPLATE_Init
-  *         Initialize the TEMPLATE interface
-  * @param  pdev: device instance
-  * @param  cfgidx: Configuration index
-  * @retval status
-  */
-static uint8_t  USBD_TEMPLATE_Init (USBD_HandleTypeDef *pdev, 
-                               uint8_t cfgidx)
-{
-  uint8_t ret = 0;
-  
-
-  return ret;
-}
-
-/**
-  * @brief  USBD_TEMPLATE_Init
-  *         DeInitialize the TEMPLATE layer
-  * @param  pdev: device instance
-  * @param  cfgidx: Configuration index
-  * @retval status
-  */
-static uint8_t  USBD_TEMPLATE_DeInit (USBD_HandleTypeDef *pdev, 
-                                 uint8_t cfgidx)
-{
-
-  return USBD_OK;
-}
-
-/**
-  * @brief  USBD_TEMPLATE_Setup
-  *         Handle the TEMPLATE specific requests
-  * @param  pdev: instance
-  * @param  req: usb requests
-  * @retval status
-  */
-static uint8_t  USBD_TEMPLATE_Setup (USBD_HandleTypeDef *pdev, 
-                                USBD_SetupReqTypedef *req)
-{
- 
-  switch (req->bmRequest & USB_REQ_TYPE_MASK)
-  {
-  case USB_REQ_TYPE_CLASS :  
-    switch (req->bRequest)
-    {
-      
-    default:
-      USBD_CtlError (pdev, req);
-      return USBD_FAIL; 
-    }
-    break;
-    
-  case USB_REQ_TYPE_STANDARD:
-    switch (req->bRequest)
-    {
-    
-    default:
-      USBD_CtlError (pdev, req);
-      return USBD_FAIL;     
-    }
-  }
-  return USBD_OK;
-}
-
-
-/**
-  * @brief  USBD_TEMPLATE_GetCfgDesc 
-  *         return configuration descriptor
-  * @param  length : pointer data length
-  * @retval pointer to descriptor buffer
-  */
-static uint8_t  *USBD_TEMPLATE_GetCfgDesc (uint16_t *length)
-{
-  *length = sizeof (USBD_TEMPLATE_CfgDesc);
-  return USBD_TEMPLATE_CfgDesc;
-}
-
-/**
-* @brief  DeviceQualifierDescriptor 
-*         return Device Qualifier descriptor
-* @param  length : pointer data length
-* @retval pointer to descriptor buffer
-*/
-uint8_t  *USBD_TEMPLATE_DeviceQualifierDescriptor (uint16_t *length)
-{
-  *length = sizeof (USBD_TEMPLATE_DeviceQualifierDesc);
-  return USBD_TEMPLATE_DeviceQualifierDesc;
-}
-
-
-/**
-  * @brief  USBD_TEMPLATE_DataIn
-  *         handle data IN Stage
-  * @param  pdev: device instance
-  * @param  epnum: endpoint index
-  * @retval status
-  */
-static uint8_t  USBD_TEMPLATE_DataIn (USBD_HandleTypeDef *pdev, 
-                              uint8_t epnum)
-{
-
-  return USBD_OK;
-}
-
-/**
-  * @brief  USBD_TEMPLATE_EP0_RxReady
-  *         handle EP0 Rx Ready event
-  * @param  pdev: device instance
-  * @retval status
-  */
-static uint8_t  USBD_TEMPLATE_EP0_RxReady (USBD_HandleTypeDef *pdev)
-{
-
-  return USBD_OK;
-}
-/**
-  * @brief  USBD_TEMPLATE_EP0_TxReady
-  *         handle EP0 TRx Ready event
-  * @param  pdev: device instance
-  * @retval status
-  */
-static uint8_t  USBD_TEMPLATE_EP0_TxReady (USBD_HandleTypeDef *pdev)
-{
-
-  return USBD_OK;
-}
-/**
-  * @brief  USBD_TEMPLATE_SOF
-  *         handle SOF event
-  * @param  pdev: device instance
-  * @retval status
-  */
-static uint8_t  USBD_TEMPLATE_SOF (USBD_HandleTypeDef *pdev)
-{
-
-  return USBD_OK;
-}
-/**
-  * @brief  USBD_TEMPLATE_IsoINIncomplete
-  *         handle data ISO IN Incomplete event
-  * @param  pdev: device instance
-  * @param  epnum: endpoint index
-  * @retval status
-  */
-static uint8_t  USBD_TEMPLATE_IsoINIncomplete (USBD_HandleTypeDef *pdev, uint8_t epnum)
-{
-
-  return USBD_OK;
-}
-/**
-  * @brief  USBD_TEMPLATE_IsoOutIncomplete
-  *         handle data ISO OUT Incomplete event
-  * @param  pdev: device instance
-  * @param  epnum: endpoint index
-  * @retval status
-  */
-static uint8_t  USBD_TEMPLATE_IsoOutIncomplete (USBD_HandleTypeDef *pdev, uint8_t epnum)
-{
-
-  return USBD_OK;
-}
-/**
-  * @brief  USBD_TEMPLATE_DataOut
-  *         handle data OUT Stage
-  * @param  pdev: device instance
-  * @param  epnum: endpoint index
-  * @retval status
-  */
-static uint8_t  USBD_TEMPLATE_DataOut (USBD_HandleTypeDef *pdev, 
-                              uint8_t epnum)
-{
-
-  return USBD_OK;
-}
-
-/**
-* @brief  DeviceQualifierDescriptor 
-*         return Device Qualifier descriptor
-* @param  length : pointer data length
-* @retval pointer to descriptor buffer
-*/
-uint8_t  *USBD_TEMPLATE_GetDeviceQualifierDesc (uint16_t *length)
-{
-  *length = sizeof (USBD_TEMPLATE_DeviceQualifierDesc);
-  return USBD_TEMPLATE_DeviceQualifierDesc;
-}
-
-/**
-  * @}
-  */ 
-
-
-/**
-  * @}
-  */ 
-
-
-/**
-  * @}
-  */ 
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/stmhal/usbdev/class/cdc/inc/usbd_cdc.h b/stmhal/usbdev/class/cdc/inc/usbd_cdc.h
deleted file mode 100644
index e60fa2de5..000000000
--- a/stmhal/usbdev/class/cdc/inc/usbd_cdc.h
+++ /dev/null
@@ -1,171 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    usbd_cdc_core.h
-  * @author  MCD Application Team
-  * @version V2.0.0
-  * @date    18-February-2014
-  * @brief   header file for the usbd_cdc_core.c file.
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT 2014 STMicroelectronics</center></h2>
-  *
-  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
-  * You may not use this file except in compliance with the License.
-  * You may obtain a copy of the License at:
-  *
-  *        http://www.st.com/software_license_agreement_liberty_v2
-  *
-  * Unless required by applicable law or agreed to in writing, software 
-  * distributed under the License is distributed on an "AS IS" BASIS, 
-  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  * See the License for the specific language governing permissions and
-  * limitations under the License.
-  *
-  ******************************************************************************
-  */ 
-
-/* Includes ------------------------------------------------------------------*/
-
-#ifndef __USB_CDC_CORE_H_
-#define __USB_CDC_CORE_H_
-
-#include  "usbd_ioreq.h"
-
-/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
-  * @{
-  */
-  
-/** @defgroup usbd_cdc
-  * @brief This file is the Header file for USBD_cdc.c
-  * @{
-  */ 
-
-
-/** @defgroup usbd_cdc_Exported_Defines
-  * @{
-  */ 
-#define CDC_IN_EP                       0x81  /* EP1 for data IN */
-#define CDC_OUT_EP                      0x01  /* EP1 for data OUT */
-#define CDC_CMD_EP                      0x82  /* EP2 for CDC commands */
-
-/* CDC Endpoints parameters: you can fine tune these values depending on the needed baudrates and performance. */
-#define CDC_DATA_HS_MAX_PACKET_SIZE        512  /* Endpoint IN & OUT Packet size */
-#define CDC_DATA_FS_MAX_PACKET_SIZE         64  /* Endpoint IN & OUT Packet size */
-#define CDC_CMD_PACKET_SIZE                  8  /* Control Endpoint Packet size */ 
-
-#define USB_CDC_CONFIG_DESC_SIZ                67
-#define CDC_DATA_HS_IN_PACKET_SIZE                CDC_DATA_HS_MAX_PACKET_SIZE
-#define CDC_DATA_HS_OUT_PACKET_SIZE               CDC_DATA_HS_MAX_PACKET_SIZE
-
-#define CDC_DATA_FS_IN_PACKET_SIZE                CDC_DATA_FS_MAX_PACKET_SIZE
-#define CDC_DATA_FS_OUT_PACKET_SIZE               CDC_DATA_FS_MAX_PACKET_SIZE
-
-/*---------------------------------------------------------------------*/
-/*  CDC definitions                                                    */
-/*---------------------------------------------------------------------*/
-
-#define CDC_SEND_ENCAPSULATED_COMMAND               0x00
-#define CDC_GET_ENCAPSULATED_RESPONSE               0x01
-#define CDC_SET_COMM_FEATURE                        0x02
-#define CDC_GET_COMM_FEATURE                        0x03
-#define CDC_CLEAR_COMM_FEATURE                      0x04
-#define CDC_SET_LINE_CODING                         0x20
-#define CDC_GET_LINE_CODING                         0x21
-#define CDC_SET_CONTROL_LINE_STATE                  0x22
-#define CDC_SEND_BREAK                              0x23
-
-/**
-  * @}
-  */ 
-
-
-/** @defgroup USBD_CORE_Exported_TypesDefinitions
-  * @{
-  */
-
-/**
-  * @}
-  */ 
-typedef struct
-{
-  uint32_t bitrate;
-  uint8_t  format;
-  uint8_t  paritytype;
-  uint8_t  datatype;
-}USBD_CDC_LineCodingTypeDef;
-
-typedef struct _USBD_CDC_Itf
-{
-  int8_t (* Init)          (void);
-  int8_t (* DeInit)        (void);
-  int8_t (* Control)       (uint8_t, uint8_t * , uint16_t);   
-  int8_t (* Receive)       (uint8_t *, uint32_t *);  
-
-}USBD_CDC_ItfTypeDef;
-
-
-typedef struct
-{
-  uint32_t data[CDC_DATA_HS_MAX_PACKET_SIZE/4];      /* Force 32bits alignment */
-  uint8_t  CmdOpCode;
-  uint8_t  CmdLength;    
-  uint8_t  *RxBuffer;  
-  uint8_t  *TxBuffer;   
-  uint32_t RxLength;
-  uint32_t TxLength;    
-  
-  __IO uint32_t TxState;     
-  __IO uint32_t RxState;    
-}
-USBD_CDC_HandleTypeDef; 
-
-
-
-/** @defgroup USBD_CORE_Exported_Macros
-  * @{
-  */ 
-  
-/**
-  * @}
-  */ 
-
-/** @defgroup USBD_CORE_Exported_Variables
-  * @{
-  */ 
-
-extern USBD_ClassTypeDef  USBD_CDC;
-/**
-  * @}
-  */ 
-
-/** @defgroup USB_CORE_Exported_Functions
-  * @{
-  */
-uint8_t  USBD_CDC_RegisterInterface  (USBD_HandleTypeDef   *pdev, 
-                                      USBD_CDC_ItfTypeDef *fops);
-
-uint8_t  USBD_CDC_SetTxBuffer  (USBD_HandleTypeDef   *pdev,
-                                uint8_t  *pbuff,
-                                uint16_t length);
-
-uint8_t  USBD_CDC_SetRxBuffer        (USBD_HandleTypeDef   *pdev,
-                                      uint8_t  *pbuff);
-  
-uint8_t  USBD_CDC_ReceivePacket  (USBD_HandleTypeDef *pdev);
-
-uint8_t  USBD_CDC_TransmitPacket  (USBD_HandleTypeDef *pdev);
-/**
-  * @}
-  */ 
-
-#endif  // __USB_CDC_CORE_H_
-/**
-  * @}
-  */ 
-
-/**
-  * @}
-  */ 
-  
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/stmhal/usbdev/class/cdc/inc/usbd_cdc_if_template.h b/stmhal/usbdev/class/cdc/inc/usbd_cdc_if_template.h
deleted file mode 100644
index d29a6ff38..000000000
--- a/stmhal/usbdev/class/cdc/inc/usbd_cdc_if_template.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    usbd_cdc_if_template.h
-  * @author  MCD Application Team
-  * @version V2.0.0
-  * @date    18-February-2014
-  * @brief   Header for dfu_mal.c file.
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT 2014 STMicroelectronics</center></h2>
-  *
-  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
-  * You may not use this file except in compliance with the License.
-  * You may obtain a copy of the License at:
-  *
-  *        http://www.st.com/software_license_agreement_liberty_v2
-  *
-  * Unless required by applicable law or agreed to in writing, software 
-  * distributed under the License is distributed on an "AS IS" BASIS, 
-  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  * See the License for the specific language governing permissions and
-  * limitations under the License.
-  *
-  ******************************************************************************
-  */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __USBD_CDC_IF_TEMPLATE_H
-#define __USBD_CDC_IF_TEMPLATE_H
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_cdc.h"
-
-/* Exported types ------------------------------------------------------------*/
-/* Exported constants --------------------------------------------------------*/
-
-extern USBD_CDC_ItfTypeDef  USBD_CDC_Template_fops;
-
-/* Exported macro ------------------------------------------------------------*/
-/* Exported functions ------------------------------------------------------- */
-#endif /* __USBD_CDC_IF_TEMPLATE_H */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/stmhal/usbdev/class/cdc/src/usbd_cdc.c b/stmhal/usbdev/class/cdc/src/usbd_cdc.c
deleted file mode 100644
index 50179a2de..000000000
--- a/stmhal/usbdev/class/cdc/src/usbd_cdc.c
+++ /dev/null
@@ -1,907 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    USBD_CDC.c
-  * @author  MCD Application Team
-  * @version V2.0.0
-  * @date    18-February-2014
-  * @brief   This file provides the high layer firmware functions to manage the 
-  *          following functionalities of the USB CDC Class:
-  *           - Initialization and Configuration of high and low layer
-  *           - Enumeration as CDC Device (and enumeration for each implemented memory interface)
-  *           - OUT/IN data transfer
-  *           - Command IN transfer (class requests management)
-  *           - Error management
-  *           
-  *  @verbatim
-  *      
-  *          ===================================================================      
-  *                                CDC Class Driver Description
-  *          =================================================================== 
-  *           This driver manages the "Universal Serial Bus Class Definitions for Communications Devices
-  *           Revision 1.2 November 16, 2007" and the sub-protocol specification of "Universal Serial Bus 
-  *           Communications Class Subclass Specification for PSTN Devices Revision 1.2 February 9, 2007"
-  *           This driver implements the following aspects of the specification:
-  *             - Device descriptor management
-  *             - Configuration descriptor management
-  *             - Enumeration as CDC device with 2 data endpoints (IN and OUT) and 1 command endpoint (IN)
-  *             - Requests management (as described in section 6.2 in specification)
-  *             - Abstract Control Model compliant
-  *             - Union Functional collection (using 1 IN endpoint for control)
-  *             - Data interface class
-
-  *           @note
-  *             For the Abstract Control Model, this core allows only transmitting the requests to
-  *             lower layer dispatcher (ie. USBD_CDC_vcp.c/.h) which should manage each request and
-  *             perform relative actions.
-  * 
-  *           These aspects may be enriched or modified for a specific user application.
-  *          
-  *            This driver doesn't implement the following aspects of the specification 
-  *            (but it is possible to manage these features with some modifications on this driver):
-  *             - Any class-specific aspect relative to communication classes should be managed by user application.
-  *             - All communication classes other than PSTN are not managed
-  *      
-  *  @endverbatim
-  *                                  
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT 2014 STMicroelectronics</center></h2>
-  *
-  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
-  * You may not use this file except in compliance with the License.
-  * You may obtain a copy of the License at:
-  *
-  *        http://www.st.com/software_license_agreement_liberty_v2
-  *
-  * Unless required by applicable law or agreed to in writing, software 
-  * distributed under the License is distributed on an "AS IS" BASIS, 
-  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  * See the License for the specific language governing permissions and
-  * limitations under the License.
-  *
-  ******************************************************************************
-  */ 
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_cdc.h"
-#include "usbd_desc.h"
-#include "usbd_ctlreq.h"
-
-
-/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
-  * @{
-  */
-
-
-/** @defgroup USBD_CDC 
-  * @brief usbd core module
-  * @{
-  */ 
-
-/** @defgroup USBD_CDC_Private_TypesDefinitions
-  * @{
-  */ 
-/**
-  * @}
-  */ 
-
-
-/** @defgroup USBD_CDC_Private_Defines
-  * @{
-  */ 
-/**
-  * @}
-  */ 
-
-
-/** @defgroup USBD_CDC_Private_Macros
-  * @{
-  */ 
-
-/**
-  * @}
-  */ 
-
-
-/** @defgroup USBD_CDC_Private_FunctionPrototypes
-  * @{
-  */
-
-
-static uint8_t  USBD_CDC_Init (USBD_HandleTypeDef *pdev, 
-                               uint8_t cfgidx);
-
-static uint8_t  USBD_CDC_DeInit (USBD_HandleTypeDef *pdev, 
-                                 uint8_t cfgidx);
-
-static uint8_t  USBD_CDC_Setup (USBD_HandleTypeDef *pdev, 
-                                USBD_SetupReqTypedef *req);
-
-static uint8_t  USBD_CDC_DataIn (USBD_HandleTypeDef *pdev, 
-                                 uint8_t epnum);
-
-static uint8_t  USBD_CDC_DataOut (USBD_HandleTypeDef *pdev, 
-                                 uint8_t epnum);
-
-static uint8_t  USBD_CDC_EP0_RxReady (USBD_HandleTypeDef *pdev);
-
-static uint8_t  *USBD_CDC_GetFSCfgDesc (uint16_t *length);
-
-static uint8_t  *USBD_CDC_GetHSCfgDesc (uint16_t *length);
-
-static uint8_t  *USBD_CDC_GetOtherSpeedCfgDesc (uint16_t *length);
-
-static uint8_t  *USBD_CDC_GetOtherSpeedCfgDesc (uint16_t *length);
-
-uint8_t  *USBD_CDC_GetDeviceQualifierDescriptor (uint16_t *length);
-
-/* USB Standard Device Descriptor */
-__ALIGN_BEGIN static uint8_t USBD_CDC_DeviceQualifierDesc[USB_LEN_DEV_QUALIFIER_DESC] __ALIGN_END =
-{
-  USB_LEN_DEV_QUALIFIER_DESC,
-  USB_DESC_TYPE_DEVICE_QUALIFIER,
-  0x00,
-  0x02,
-  0x00,
-  0x00,
-  0x00,
-  0x40,
-  0x01,
-  0x00,
-};
-
-/**
-  * @}
-  */ 
-
-/** @defgroup USBD_CDC_Private_Variables
-  * @{
-  */ 
-
-
-/* CDC interface class callbacks structure */
-USBD_ClassTypeDef  USBD_CDC = 
-{
-  USBD_CDC_Init,
-  USBD_CDC_DeInit,
-  USBD_CDC_Setup,
-  NULL,                 /* EP0_TxSent, */
-  USBD_CDC_EP0_RxReady,
-  USBD_CDC_DataIn,
-  USBD_CDC_DataOut,
-  NULL,
-  NULL,
-  NULL,     
-  USBD_CDC_GetHSCfgDesc,  
-  USBD_CDC_GetFSCfgDesc,    
-  USBD_CDC_GetOtherSpeedCfgDesc, 
-  USBD_CDC_GetDeviceQualifierDescriptor,
-};
-
-/* USB CDC device Configuration Descriptor */
-__ALIGN_BEGIN uint8_t USBD_CDC_CfgHSDesc[USB_CDC_CONFIG_DESC_SIZ] __ALIGN_END =
-{
-  /*Configuration Descriptor*/
-  0x09,   /* bLength: Configuration Descriptor size */
-  USB_DESC_TYPE_CONFIGURATION,      /* bDescriptorType: Configuration */
-  USB_CDC_CONFIG_DESC_SIZ,                /* wTotalLength:no of returned bytes */
-  0x00,
-  0x02,   /* bNumInterfaces: 2 interface */
-  0x01,   /* bConfigurationValue: Configuration value */
-  0x00,   /* iConfiguration: Index of string descriptor describing the configuration */
-  0xC0,   /* bmAttributes: self powered */
-  0x32,   /* MaxPower 0 mA */
-  
-  /*---------------------------------------------------------------------------*/
-  
-  /*Interface Descriptor */
-  0x09,   /* bLength: Interface Descriptor size */
-  USB_DESC_TYPE_INTERFACE,  /* bDescriptorType: Interface */
-  /* Interface descriptor type */
-  0x00,   /* bInterfaceNumber: Number of Interface */
-  0x00,   /* bAlternateSetting: Alternate setting */
-  0x01,   /* bNumEndpoints: One endpoints used */
-  0x02,   /* bInterfaceClass: Communication Interface Class */
-  0x02,   /* bInterfaceSubClass: Abstract Control Model */
-  0x01,   /* bInterfaceProtocol: Common AT commands */
-  0x00,   /* iInterface: */
-  
-  /*Header Functional Descriptor*/
-  0x05,   /* bLength: Endpoint Descriptor size */
-  0x24,   /* bDescriptorType: CS_INTERFACE */
-  0x00,   /* bDescriptorSubtype: Header Func Desc */
-  0x10,   /* bcdCDC: spec release number */
-  0x01,
-  
-  /*Call Management Functional Descriptor*/
-  0x05,   /* bFunctionLength */
-  0x24,   /* bDescriptorType: CS_INTERFACE */
-  0x01,   /* bDescriptorSubtype: Call Management Func Desc */
-  0x00,   /* bmCapabilities: D0+D1 */
-  0x01,   /* bDataInterface: 1 */
-  
-  /*ACM Functional Descriptor*/
-  0x04,   /* bFunctionLength */
-  0x24,   /* bDescriptorType: CS_INTERFACE */
-  0x02,   /* bDescriptorSubtype: Abstract Control Management desc */
-  0x02,   /* bmCapabilities */
-  
-  /*Union Functional Descriptor*/
-  0x05,   /* bFunctionLength */
-  0x24,   /* bDescriptorType: CS_INTERFACE */
-  0x06,   /* bDescriptorSubtype: Union func desc */
-  0x00,   /* bMasterInterface: Communication class interface */
-  0x01,   /* bSlaveInterface0: Data Class Interface */
-  
-  /*Endpoint 2 Descriptor*/
-  0x07,                           /* bLength: Endpoint Descriptor size */
-  USB_DESC_TYPE_ENDPOINT,   /* bDescriptorType: Endpoint */
-  CDC_CMD_EP,                     /* bEndpointAddress */
-  0x03,                           /* bmAttributes: Interrupt */
-  LOBYTE(CDC_CMD_PACKET_SIZE),     /* wMaxPacketSize: */
-  HIBYTE(CDC_CMD_PACKET_SIZE),
-  0x10,                           /* bInterval: */ 
-  /*---------------------------------------------------------------------------*/
-  
-  /*Data class interface descriptor*/
-  0x09,   /* bLength: Endpoint Descriptor size */
-  USB_DESC_TYPE_INTERFACE,  /* bDescriptorType: */
-  0x01,   /* bInterfaceNumber: Number of Interface */
-  0x00,   /* bAlternateSetting: Alternate setting */
-  0x02,   /* bNumEndpoints: Two endpoints used */
-  0x0A,   /* bInterfaceClass: CDC */
-  0x00,   /* bInterfaceSubClass: */
-  0x00,   /* bInterfaceProtocol: */
-  0x00,   /* iInterface: */
-  
-  /*Endpoint OUT Descriptor*/
-  0x07,   /* bLength: Endpoint Descriptor size */
-  USB_DESC_TYPE_ENDPOINT,      /* bDescriptorType: Endpoint */
-  CDC_OUT_EP,                        /* bEndpointAddress */
-  0x02,                              /* bmAttributes: Bulk */
-  LOBYTE(CDC_DATA_HS_MAX_PACKET_SIZE),  /* wMaxPacketSize: */
-  HIBYTE(CDC_DATA_HS_MAX_PACKET_SIZE),
-  0x00,                              /* bInterval: ignore for Bulk transfer */
-  
-  /*Endpoint IN Descriptor*/
-  0x07,   /* bLength: Endpoint Descriptor size */
-  USB_DESC_TYPE_ENDPOINT,      /* bDescriptorType: Endpoint */
-  CDC_IN_EP,                         /* bEndpointAddress */
-  0x02,                              /* bmAttributes: Bulk */
-  LOBYTE(CDC_DATA_HS_MAX_PACKET_SIZE),  /* wMaxPacketSize: */
-  HIBYTE(CDC_DATA_HS_MAX_PACKET_SIZE),
-  0x00                               /* bInterval: ignore for Bulk transfer */
-} ;
-
-
-/* USB CDC device Configuration Descriptor */
-__ALIGN_BEGIN uint8_t USBD_CDC_CfgFSDesc[USB_CDC_CONFIG_DESC_SIZ] __ALIGN_END =
-{
-  /*Configuration Descriptor*/
-  0x09,   /* bLength: Configuration Descriptor size */
-  USB_DESC_TYPE_CONFIGURATION,      /* bDescriptorType: Configuration */
-  USB_CDC_CONFIG_DESC_SIZ,                /* wTotalLength:no of returned bytes */
-  0x00,
-  0x02,   /* bNumInterfaces: 2 interface */
-  0x01,   /* bConfigurationValue: Configuration value */
-  0x00,   /* iConfiguration: Index of string descriptor describing the configuration */
-  0xC0,   /* bmAttributes: self powered */
-  0x32,   /* MaxPower 0 mA */
-  
-  /*---------------------------------------------------------------------------*/
-  
-  /*Interface Descriptor */
-  0x09,   /* bLength: Interface Descriptor size */
-  USB_DESC_TYPE_INTERFACE,  /* bDescriptorType: Interface */
-  /* Interface descriptor type */
-  0x00,   /* bInterfaceNumber: Number of Interface */
-  0x00,   /* bAlternateSetting: Alternate setting */
-  0x01,   /* bNumEndpoints: One endpoints used */
-  0x02,   /* bInterfaceClass: Communication Interface Class */
-  0x02,   /* bInterfaceSubClass: Abstract Control Model */
-  0x01,   /* bInterfaceProtocol: Common AT commands */
-  0x00,   /* iInterface: */
-  
-  /*Header Functional Descriptor*/
-  0x05,   /* bLength: Endpoint Descriptor size */
-  0x24,   /* bDescriptorType: CS_INTERFACE */
-  0x00,   /* bDescriptorSubtype: Header Func Desc */
-  0x10,   /* bcdCDC: spec release number */
-  0x01,
-  
-  /*Call Management Functional Descriptor*/
-  0x05,   /* bFunctionLength */
-  0x24,   /* bDescriptorType: CS_INTERFACE */
-  0x01,   /* bDescriptorSubtype: Call Management Func Desc */
-  0x00,   /* bmCapabilities: D0+D1 */
-  0x01,   /* bDataInterface: 1 */
-  
-  /*ACM Functional Descriptor*/
-  0x04,   /* bFunctionLength */
-  0x24,   /* bDescriptorType: CS_INTERFACE */
-  0x02,   /* bDescriptorSubtype: Abstract Control Management desc */
-  0x02,   /* bmCapabilities */
-  
-  /*Union Functional Descriptor*/
-  0x05,   /* bFunctionLength */
-  0x24,   /* bDescriptorType: CS_INTERFACE */
-  0x06,   /* bDescriptorSubtype: Union func desc */
-  0x00,   /* bMasterInterface: Communication class interface */
-  0x01,   /* bSlaveInterface0: Data Class Interface */
-  
-  /*Endpoint 2 Descriptor*/
-  0x07,                           /* bLength: Endpoint Descriptor size */
-  USB_DESC_TYPE_ENDPOINT,   /* bDescriptorType: Endpoint */
-  CDC_CMD_EP,                     /* bEndpointAddress */
-  0x03,                           /* bmAttributes: Interrupt */
-  LOBYTE(CDC_CMD_PACKET_SIZE),     /* wMaxPacketSize: */
-  HIBYTE(CDC_CMD_PACKET_SIZE),
-  0x10,                           /* bInterval: */ 
-  /*---------------------------------------------------------------------------*/
-  
-  /*Data class interface descriptor*/
-  0x09,   /* bLength: Endpoint Descriptor size */
-  USB_DESC_TYPE_INTERFACE,  /* bDescriptorType: */
-  0x01,   /* bInterfaceNumber: Number of Interface */
-  0x00,   /* bAlternateSetting: Alternate setting */
-  0x02,   /* bNumEndpoints: Two endpoints used */
-  0x0A,   /* bInterfaceClass: CDC */
-  0x00,   /* bInterfaceSubClass: */
-  0x00,   /* bInterfaceProtocol: */
-  0x00,   /* iInterface: */
-  
-  /*Endpoint OUT Descriptor*/
-  0x07,   /* bLength: Endpoint Descriptor size */
-  USB_DESC_TYPE_ENDPOINT,      /* bDescriptorType: Endpoint */
-  CDC_OUT_EP,                        /* bEndpointAddress */
-  0x02,                              /* bmAttributes: Bulk */
-  LOBYTE(CDC_DATA_FS_MAX_PACKET_SIZE),  /* wMaxPacketSize: */
-  HIBYTE(CDC_DATA_FS_MAX_PACKET_SIZE),
-  0x00,                              /* bInterval: ignore for Bulk transfer */
-  
-  /*Endpoint IN Descriptor*/
-  0x07,   /* bLength: Endpoint Descriptor size */
-  USB_DESC_TYPE_ENDPOINT,      /* bDescriptorType: Endpoint */
-  CDC_IN_EP,                         /* bEndpointAddress */
-  0x02,                              /* bmAttributes: Bulk */
-  LOBYTE(CDC_DATA_FS_MAX_PACKET_SIZE),  /* wMaxPacketSize: */
-  HIBYTE(CDC_DATA_FS_MAX_PACKET_SIZE),
-  0x00                               /* bInterval: ignore for Bulk transfer */
-} ;
-
-/* USB_OTG_HS_INTERNAL_DMA_ENABLED */ 
-__ALIGN_BEGIN uint8_t USBD_CDC_OtherSpeedCfgDesc[USB_CDC_CONFIG_DESC_SIZ] __ALIGN_END =
-{ 
-  0x09,   /* bLength: Configuation Descriptor size */
-  USB_DESC_TYPE_OTHER_SPEED_CONFIGURATION,   
-  USB_CDC_CONFIG_DESC_SIZ,
-  0x00,
-  0x02,   /* bNumInterfaces: 2 interfaces */
-  0x01,   /* bConfigurationValue: */
-  0x04,   /* iConfiguration: */
-  0xC0,   /* bmAttributes: */
-  0x32,   /* MaxPower 100 mA */  
-  
-  /*Interface Descriptor */
-  0x09,   /* bLength: Interface Descriptor size */
-  USB_DESC_TYPE_INTERFACE,  /* bDescriptorType: Interface */
-  /* Interface descriptor type */
-  0x00,   /* bInterfaceNumber: Number of Interface */
-  0x00,   /* bAlternateSetting: Alternate setting */
-  0x01,   /* bNumEndpoints: One endpoints used */
-  0x02,   /* bInterfaceClass: Communication Interface Class */
-  0x02,   /* bInterfaceSubClass: Abstract Control Model */
-  0x01,   /* bInterfaceProtocol: Common AT commands */
-  0x00,   /* iInterface: */
-  
-  /*Header Functional Descriptor*/
-  0x05,   /* bLength: Endpoint Descriptor size */
-  0x24,   /* bDescriptorType: CS_INTERFACE */
-  0x00,   /* bDescriptorSubtype: Header Func Desc */
-  0x10,   /* bcdCDC: spec release number */
-  0x01,
-  
-  /*Call Management Functional Descriptor*/
-  0x05,   /* bFunctionLength */
-  0x24,   /* bDescriptorType: CS_INTERFACE */
-  0x01,   /* bDescriptorSubtype: Call Management Func Desc */
-  0x00,   /* bmCapabilities: D0+D1 */
-  0x01,   /* bDataInterface: 1 */
-  
-  /*ACM Functional Descriptor*/
-  0x04,   /* bFunctionLength */
-  0x24,   /* bDescriptorType: CS_INTERFACE */
-  0x02,   /* bDescriptorSubtype: Abstract Control Management desc */
-  0x02,   /* bmCapabilities */
-  
-  /*Union Functional Descriptor*/
-  0x05,   /* bFunctionLength */
-  0x24,   /* bDescriptorType: CS_INTERFACE */
-  0x06,   /* bDescriptorSubtype: Union func desc */
-  0x00,   /* bMasterInterface: Communication class interface */
-  0x01,   /* bSlaveInterface0: Data Class Interface */
-  
-  /*Endpoint 2 Descriptor*/
-  0x07,                           /* bLength: Endpoint Descriptor size */
-  USB_DESC_TYPE_ENDPOINT      ,   /* bDescriptorType: Endpoint */
-  CDC_CMD_EP,                     /* bEndpointAddress */
-  0x03,                           /* bmAttributes: Interrupt */
-  LOBYTE(CDC_CMD_PACKET_SIZE),     /* wMaxPacketSize: */
-  HIBYTE(CDC_CMD_PACKET_SIZE),
-  0xFF,                           /* bInterval: */
-  
-  /*---------------------------------------------------------------------------*/
-  
-  /*Data class interface descriptor*/
-  0x09,   /* bLength: Endpoint Descriptor size */
-  USB_DESC_TYPE_INTERFACE,  /* bDescriptorType: */
-  0x01,   /* bInterfaceNumber: Number of Interface */
-  0x00,   /* bAlternateSetting: Alternate setting */
-  0x02,   /* bNumEndpoints: Two endpoints used */
-  0x0A,   /* bInterfaceClass: CDC */
-  0x00,   /* bInterfaceSubClass: */
-  0x00,   /* bInterfaceProtocol: */
-  0x00,   /* iInterface: */
-  
-  /*Endpoint OUT Descriptor*/
-  0x07,   /* bLength: Endpoint Descriptor size */
-  USB_DESC_TYPE_ENDPOINT,      /* bDescriptorType: Endpoint */
-  CDC_OUT_EP,                        /* bEndpointAddress */
-  0x02,                              /* bmAttributes: Bulk */
-  0x40,                              /* wMaxPacketSize: */
-  0x00,
-  0x00,                              /* bInterval: ignore for Bulk transfer */
-  
-  /*Endpoint IN Descriptor*/
-  0x07,   /* bLength: Endpoint Descriptor size */
-  USB_DESC_TYPE_ENDPOINT,     /* bDescriptorType: Endpoint */
-  CDC_IN_EP,                        /* bEndpointAddress */
-  0x02,                             /* bmAttributes: Bulk */
-  0x40,                             /* wMaxPacketSize: */
-  0x00,
-  0x00                              /* bInterval */
-};
-
-/**
-  * @}
-  */ 
-
-/** @defgroup USBD_CDC_Private_Functions
-  * @{
-  */ 
-
-/**
-  * @brief  USBD_CDC_Init
-  *         Initilaize the CDC interface
-  * @param  pdev: device instance
-  * @param  cfgidx: Configuration index
-  * @retval status
-  */
-static uint8_t  USBD_CDC_Init (USBD_HandleTypeDef *pdev, 
-                               uint8_t cfgidx)
-{
-  uint8_t ret = 0;
-  USBD_CDC_HandleTypeDef   *hcdc;
-  
-  if(pdev->dev_speed == USBD_SPEED_HIGH  ) 
-  {  
-    /* Open EP IN */
-    USBD_LL_OpenEP(pdev,
-                   CDC_IN_EP,
-                   USBD_EP_TYPE_BULK,
-                   CDC_DATA_HS_IN_PACKET_SIZE);
-    
-    /* Open EP OUT */
-    USBD_LL_OpenEP(pdev,
-                   CDC_OUT_EP,
-                   USBD_EP_TYPE_BULK,
-                   CDC_DATA_HS_OUT_PACKET_SIZE);
-    
-  }
-  else
-  {
-    /* Open EP IN */
-    USBD_LL_OpenEP(pdev,
-                   CDC_IN_EP,
-                   USBD_EP_TYPE_BULK,
-                   CDC_DATA_FS_IN_PACKET_SIZE);
-    
-    /* Open EP OUT */
-    USBD_LL_OpenEP(pdev,
-                   CDC_OUT_EP,
-                   USBD_EP_TYPE_BULK,
-                   CDC_DATA_FS_OUT_PACKET_SIZE);
-  }
-  /* Open Command IN EP */
-  USBD_LL_OpenEP(pdev,
-                 CDC_CMD_EP,
-                 USBD_EP_TYPE_INTR,
-                 CDC_CMD_PACKET_SIZE);
-  
-    
-  pdev->pClassData = USBD_malloc(sizeof (USBD_CDC_HandleTypeDef));
-  
-  if(pdev->pClassData == NULL)
-  {
-    ret = 1; 
-  }
-  else
-  {
-    hcdc = pdev->pClassData;
-    
-    /* Init  physical Interface components */
-    ((USBD_CDC_ItfTypeDef *)pdev->pUserData)->Init();
-    
-    /* Init Xfer states */
-    hcdc->TxState =0;
-    hcdc->RxState =0;
-       
-    if(pdev->dev_speed == USBD_SPEED_HIGH  ) 
-    {      
-      /* Prepare Out endpoint to receive next packet */
-      USBD_LL_PrepareReceive(pdev,
-                             CDC_OUT_EP,
-                             hcdc->RxBuffer,
-                             CDC_DATA_HS_OUT_PACKET_SIZE);
-    }
-    else
-    {
-      /* Prepare Out endpoint to receive next packet */
-      USBD_LL_PrepareReceive(pdev,
-                             CDC_OUT_EP,
-                             hcdc->RxBuffer,
-                             CDC_DATA_FS_OUT_PACKET_SIZE);
-    }
-    
-    
-  }
-  return ret;
-}
-
-/**
-  * @brief  USBD_CDC_Init
-  *         DeInitialize the CDC layer
-  * @param  pdev: device instance
-  * @param  cfgidx: Configuration index
-  * @retval status
-  */
-static uint8_t  USBD_CDC_DeInit (USBD_HandleTypeDef *pdev, 
-                                 uint8_t cfgidx)
-{
-  uint8_t ret = 0;
-  
-  /* Open EP IN */
-  USBD_LL_CloseEP(pdev,
-              CDC_IN_EP);
-  
-  /* Open EP OUT */
-  USBD_LL_CloseEP(pdev,
-              CDC_OUT_EP);
-  
-  /* Open Command IN EP */
-  USBD_LL_CloseEP(pdev,
-              CDC_CMD_EP);
-  
-  
-  /* DeInit  physical Interface components */
-  if(pdev->pClassData != NULL)
-  {
-    ((USBD_CDC_ItfTypeDef *)pdev->pUserData)->DeInit();
-    USBD_free(pdev->pClassData);
-    pdev->pClassData = NULL;
-  }
-  
-  return ret;
-}
-
-/**
-  * @brief  USBD_CDC_Setup
-  *         Handle the CDC specific requests
-  * @param  pdev: instance
-  * @param  req: usb requests
-  * @retval status
-  */
-static uint8_t  USBD_CDC_Setup (USBD_HandleTypeDef *pdev, 
-                                USBD_SetupReqTypedef *req)
-{
-  USBD_CDC_HandleTypeDef   *hcdc = pdev->pClassData;
-  
-  switch (req->bmRequest & USB_REQ_TYPE_MASK)
-  {
-  case USB_REQ_TYPE_CLASS :
-    if (req->wLength)
-    {
-      if (req->bmRequest & 0x80)
-      {
-        ((USBD_CDC_ItfTypeDef *)pdev->pUserData)->Control(req->bRequest,
-                                                          (uint8_t *)hcdc->data,
-                                                          req->wLength);
-          USBD_CtlSendData (pdev, 
-                            (uint8_t *)hcdc->data,
-                            req->wLength);
-      }
-      else
-      {
-        hcdc->CmdOpCode = req->bRequest;
-        hcdc->CmdLength = req->wLength;
-                                                      
-        USBD_CtlPrepareRx (pdev, 
-                           (uint8_t *)hcdc->data,
-                           req->wLength);
-      }
-      break;
-    }
-  }
-  return USBD_OK;
-}
-
-/**
-  * @brief  usbd_audio_DataIn
-  *         Data sent on non-control IN endpoint
-  * @param  pdev: device instance
-  * @param  epnum: endpoint number
-  * @retval status
-  */
-static uint8_t  USBD_CDC_DataIn (USBD_HandleTypeDef *pdev, uint8_t epnum)
-{
-  USBD_CDC_HandleTypeDef   *hcdc = pdev->pClassData;
-  
-  if(pdev->pClassData != NULL)
-  {
-    
-    hcdc->TxState = 0;
-
-    return USBD_OK;
-  }
-  else
-  {
-    return USBD_FAIL;
-  }
-}
-
-/**
-  * @brief  USBD_CDC_DataOut
-  *         Data received on non-control Out endpoint
-  * @param  pdev: device instance
-  * @param  epnum: endpoint number
-  * @retval status
-  */
-static uint8_t  USBD_CDC_DataOut (USBD_HandleTypeDef *pdev, uint8_t epnum)
-{      
-  USBD_CDC_HandleTypeDef   *hcdc = pdev->pClassData;
-  
-  /* Get the received data length */
-  hcdc->RxLength = USBD_LL_GetRxDataSize (pdev, epnum);
-  
-  /* USB data will be immediately processed, this allow next USB traffic being 
-  NAKed till the end of the application Xfer */
-  if(pdev->pClassData != NULL)
-  {
-    ((USBD_CDC_ItfTypeDef *)pdev->pUserData)->Receive(hcdc->RxBuffer, &hcdc->RxLength);
-
-    return USBD_OK;
-  }
-  else
-  {
-    return USBD_FAIL;
-  }
-}
-
-
-
-/**
-  * @brief  USBD_CDC_DataOut
-  *         Data received on non-control Out endpoint
-  * @param  pdev: device instance
-  * @param  epnum: endpoint number
-  * @retval status
-  */
-static uint8_t  USBD_CDC_EP0_RxReady (USBD_HandleTypeDef *pdev)
-{ 
-  USBD_CDC_HandleTypeDef   *hcdc = pdev->pClassData;
-  
-  if((pdev->pUserData != NULL) && (hcdc->CmdOpCode != 0xFF))
-  {
-    ((USBD_CDC_ItfTypeDef *)pdev->pUserData)->Control(hcdc->CmdOpCode,
-                                                      (uint8_t *)hcdc->data,
-                                                      hcdc->CmdLength);
-      hcdc->CmdOpCode = 0xFF; 
-      
-  }
-  return USBD_OK;
-}
-
-/**
-  * @brief  USBD_CDC_GetFSCfgDesc 
-  *         Return configuration descriptor
-  * @param  speed : current device speed
-  * @param  length : pointer data length
-  * @retval pointer to descriptor buffer
-  */
-static uint8_t  *USBD_CDC_GetFSCfgDesc (uint16_t *length)
-{
-  *length = sizeof (USBD_CDC_CfgFSDesc);
-  return USBD_CDC_CfgFSDesc;
-}
-
-/**
-  * @brief  USBD_CDC_GetHSCfgDesc 
-  *         Return configuration descriptor
-  * @param  speed : current device speed
-  * @param  length : pointer data length
-  * @retval pointer to descriptor buffer
-  */
-static uint8_t  *USBD_CDC_GetHSCfgDesc (uint16_t *length)
-{
-  *length = sizeof (USBD_CDC_CfgHSDesc);
-  return USBD_CDC_CfgHSDesc;
-}
-
-/**
-  * @brief  USBD_CDC_GetCfgDesc 
-  *         Return configuration descriptor
-  * @param  speed : current device speed
-  * @param  length : pointer data length
-  * @retval pointer to descriptor buffer
-  */
-static uint8_t  *USBD_CDC_GetOtherSpeedCfgDesc (uint16_t *length)
-{
-  *length = sizeof (USBD_CDC_OtherSpeedCfgDesc);
-  return USBD_CDC_OtherSpeedCfgDesc;
-}
-
-/**
-* @brief  DeviceQualifierDescriptor 
-*         return Device Qualifier descriptor
-* @param  length : pointer data length
-* @retval pointer to descriptor buffer
-*/
-uint8_t  *USBD_CDC_GetDeviceQualifierDescriptor (uint16_t *length)
-{
-  *length = sizeof (USBD_CDC_DeviceQualifierDesc);
-  return USBD_CDC_DeviceQualifierDesc;
-}
-
-/**
-* @brief  USBD_CDC_RegisterInterface
-  * @param  pdev: device instance
-  * @param  fops: CD  Interface callback
-  * @retval status
-  */
-uint8_t  USBD_CDC_RegisterInterface  (USBD_HandleTypeDef   *pdev, 
-                                      USBD_CDC_ItfTypeDef *fops)
-{
-  uint8_t  ret = USBD_FAIL;
-  
-  if(fops != NULL)
-  {
-    pdev->pUserData= fops;
-    ret = USBD_OK;    
-  }
-  
-  return ret;
-}
-
-/**
-  * @brief  USBD_CDC_SetTxBuffer
-  * @param  pdev: device instance
-  * @param  pbuff: Tx Buffer
-  * @retval status
-  */
-uint8_t  USBD_CDC_SetTxBuffer  (USBD_HandleTypeDef   *pdev,
-                                uint8_t  *pbuff,
-                                uint16_t length)
-{
-  USBD_CDC_HandleTypeDef   *hcdc = pdev->pClassData;
-  
-  hcdc->TxBuffer = pbuff;
-  hcdc->TxLength = length;  
-  
-  return USBD_OK;  
-}
-
-
-/**
-  * @brief  USBD_CDC_SetRxBuffer
-  * @param  pdev: device instance
-  * @param  pbuff: Rx Buffer
-  * @retval status
-  */
-uint8_t  USBD_CDC_SetRxBuffer  (USBD_HandleTypeDef   *pdev,
-                                   uint8_t  *pbuff)
-{
-  USBD_CDC_HandleTypeDef   *hcdc = pdev->pClassData;
-  
-  hcdc->RxBuffer = pbuff;
-  
-  return USBD_OK;
-}
-
-/**
-  * @brief  USBD_CDC_DataOut
-  *         Data received on non-control Out endpoint
-  * @param  pdev: device instance
-  * @param  epnum: endpoint number
-  * @retval status
-  */
-uint8_t  USBD_CDC_TransmitPacket(USBD_HandleTypeDef *pdev)
-{      
-  USBD_CDC_HandleTypeDef   *hcdc = pdev->pClassData;
-  
-  if(pdev->pClassData != NULL)
-  {
-    if(hcdc->TxState == 0)
-    {
-      
-      /* Transmit next packet */
-      USBD_LL_Transmit(pdev,
-                       CDC_IN_EP,
-                       hcdc->TxBuffer,
-                       hcdc->TxLength);
-      
-      /* Tx Transfer in progress */
-      hcdc->TxState = 1;
-      return USBD_OK;
-    }
-    else
-    {
-      return USBD_BUSY;
-    }
-  }
-  else
-  {
-    return USBD_FAIL;
-  }
-}
-
-
-/**
-  * @brief  USBD_CDC_ReceivePacket
-  *         prepare OUT Endpoint for reception
-  * @param  pdev: device instance
-  * @retval status
-  */
-uint8_t  USBD_CDC_ReceivePacket(USBD_HandleTypeDef *pdev)
-{      
-  USBD_CDC_HandleTypeDef   *hcdc = pdev->pClassData;
-  
-  /* Suspend or Resume USB Out process */
-  if(pdev->pClassData != NULL)
-  {
-    if(pdev->dev_speed == USBD_SPEED_HIGH  ) 
-    {      
-      /* Prepare Out endpoint to receive next packet */
-      USBD_LL_PrepareReceive(pdev,
-                             CDC_OUT_EP,
-                             hcdc->RxBuffer,
-                             CDC_DATA_HS_OUT_PACKET_SIZE);
-    }
-    else
-    {
-      /* Prepare Out endpoint to receive next packet */
-      USBD_LL_PrepareReceive(pdev,
-                             CDC_OUT_EP,
-                             hcdc->RxBuffer,
-                             CDC_DATA_FS_OUT_PACKET_SIZE);
-    }
-    return USBD_OK;
-  }
-  else
-  {
-    return USBD_FAIL;
-  }
-}
-/**
-  * @}
-  */ 
-
-/**
-  * @}
-  */ 
-
-/**
-  * @}
-  */ 
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/stmhal/usbdev/class/cdc/src/usbd_cdc_if_template.c b/stmhal/usbdev/class/cdc/src/usbd_cdc_if_template.c
deleted file mode 100644
index b6fa5115c..000000000
--- a/stmhal/usbdev/class/cdc/src/usbd_cdc_if_template.c
+++ /dev/null
@@ -1,225 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    usbd_cdc_if_template.c
-  * @author  MCD Application Team
-  * @version V2.0.0
-  * @date    18-February-2014
-  * @brief   Generic media access Layer.
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT 2014 STMicroelectronics</center></h2>
-  *
-  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
-  * You may not use this file except in compliance with the License.
-  * You may obtain a copy of the License at:
-  *
-  *        http://www.st.com/software_license_agreement_liberty_v2
-  *
-  * Unless required by applicable law or agreed to in writing, software 
-  * distributed under the License is distributed on an "AS IS" BASIS, 
-  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  * See the License for the specific language governing permissions and
-  * limitations under the License.
-  *
-  ******************************************************************************
-  */ 
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_cdc_if_template.h"
-
-/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
-  * @{
-  */
-
-
-/** @defgroup USBD_CDC 
-  * @brief usbd core module
-  * @{
-  */ 
-
-/** @defgroup USBD_CDC_Private_TypesDefinitions
-  * @{
-  */ 
-/**
-  * @}
-  */ 
-
-
-/** @defgroup USBD_CDC_Private_Defines
-  * @{
-  */ 
-/**
-  * @}
-  */ 
-
-
-/** @defgroup USBD_CDC_Private_Macros
-  * @{
-  */ 
-
-/**
-  * @}
-  */ 
-
-
-/** @defgroup USBD_CDC_Private_FunctionPrototypes
-  * @{
-  */
-
-static int8_t TEMPLATE_Init     (void);
-static int8_t TEMPLATE_DeInit   (void);
-static int8_t TEMPLATE_Control  (uint8_t cmd, uint8_t* pbuf, uint16_t length);
-static int8_t TEMPLATE_Receive  (uint8_t* pbuf, uint32_t *Len);
-
-USBD_CDC_ItfTypeDef USBD_CDC_Template_fops = 
-{
-  TEMPLATE_Init,
-  TEMPLATE_DeInit,
-  TEMPLATE_Control,
-  TEMPLATE_Receive
-};
-
-USBD_CDC_LineCodingTypeDef linecoding =
-  {
-    115200, /* baud rate*/
-    0x00,   /* stop bits-1*/
-    0x00,   /* parity - none*/
-    0x08    /* nb. of bits 8*/
-  };
-
-/* Private functions ---------------------------------------------------------*/
-
-/**
-  * @brief  TEMPLATE_Init
-  *         Initializes the CDC media low layer
-  * @param  None
-  * @retval Result of the opeartion: USBD_OK if all operations are OK else USBD_FAIL
-  */
-static int8_t TEMPLATE_Init(void)
-{
-  /*
-     Add your initialization code here 
-  */  
-  return (0);
-}
-
-/**
-  * @brief  TEMPLATE_DeInit
-  *         DeInitializes the CDC media low layer
-  * @param  None
-  * @retval Result of the opeartion: USBD_OK if all operations are OK else USBD_FAIL
-  */
-static int8_t TEMPLATE_DeInit(void)
-{
-  /*
-     Add your deinitialization code here 
-  */  
-  return (0);
-}
-
-
-/**
-  * @brief  TEMPLATE_Control
-  *         Manage the CDC class requests
-  * @param  Cmd: Command code            
-  * @param  Buf: Buffer containing command data (request parameters)
-  * @param  Len: Number of data to be sent (in bytes)
-  * @retval Result of the opeartion: USBD_OK if all operations are OK else USBD_FAIL
-  */
-static int8_t TEMPLATE_Control  (uint8_t cmd, uint8_t* pbuf, uint16_t length)
-{ 
-  switch (cmd)
-  {
-  case CDC_SEND_ENCAPSULATED_COMMAND:
-    /* Add your code here */
-    break;
-
-  case CDC_GET_ENCAPSULATED_RESPONSE:
-    /* Add your code here */
-    break;
-
-  case CDC_SET_COMM_FEATURE:
-    /* Add your code here */
-    break;
-
-  case CDC_GET_COMM_FEATURE:
-    /* Add your code here */
-    break;
-
-  case CDC_CLEAR_COMM_FEATURE:
-    /* Add your code here */
-    break;
-
-  case CDC_SET_LINE_CODING:
-    linecoding.bitrate    = (uint32_t)(pbuf[0] | (pbuf[1] << 8) |\
-                            (pbuf[2] << 16) | (pbuf[3] << 24));
-    linecoding.format     = pbuf[4];
-    linecoding.paritytype = pbuf[5];
-    linecoding.datatype   = pbuf[6];
-    
-    /* Add your code here */
-    break;
-
-  case CDC_GET_LINE_CODING:
-    pbuf[0] = (uint8_t)(linecoding.bitrate);
-    pbuf[1] = (uint8_t)(linecoding.bitrate >> 8);
-    pbuf[2] = (uint8_t)(linecoding.bitrate >> 16);
-    pbuf[3] = (uint8_t)(linecoding.bitrate >> 24);
-    pbuf[4] = linecoding.format;
-    pbuf[5] = linecoding.paritytype;
-    pbuf[6] = linecoding.datatype;     
-    
-    /* Add your code here */
-    break;
-
-  case CDC_SET_CONTROL_LINE_STATE:
-    /* Add your code here */
-    break;
-
-  case CDC_SEND_BREAK:
-     /* Add your code here */
-    break;    
-    
-  default:
-    break;
-  }
-
-  return (0);
-}
-
-/**
-  * @brief  TEMPLATE_DataRx
-  *         Data received over USB OUT endpoint are sent over CDC interface 
-  *         through this function.
-  *           
-  *         @note
-  *         This function will block any OUT packet reception on USB endpoint 
-  *         untill exiting this function. If you exit this function before transfer
-  *         is complete on CDC interface (ie. using DMA controller) it will result 
-  *         in receiving more data while previous ones are still not sent.
-  *                 
-  * @param  Buf: Buffer of data to be received
-  * @param  Len: Number of data received (in bytes)
-  * @retval Result of the opeartion: USBD_OK if all operations are OK else USBD_FAIL
-  */
-static int8_t TEMPLATE_Receive (uint8_t* Buf, uint32_t *Len)
-{
- 
-  return (0);
-}
-
-/**
-  * @}
-  */ 
-
-/**
-  * @}
-  */ 
-
-/**
-  * @}
-  */ 
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
-
diff --git a/stmhal/usbdev/class/cdc_hid/inc/usbd_cdc_hid.h b/stmhal/usbdev/class/cdc_hid/inc/usbd_cdc_hid.h
deleted file mode 100644
index 4725918f9..000000000
--- a/stmhal/usbdev/class/cdc_hid/inc/usbd_cdc_hid.h
+++ /dev/null
@@ -1,83 +0,0 @@
-#ifndef _USB_CDC_HID_CORE_H_
-#define _USB_CDC_HID_CORE_H_
-
-#include  "usbd_ioreq.h"
-
-// CDC and HID packet sizes
-#define CDC_DATA_FS_MAX_PACKET_SIZE (64) // endpoint IN & OUT packet size
-
-#if 0
-// CDC
-#define USB_CDC_HID_CONFIG_DESC_SIZ (75)
-#define USB_CDC_HID_NUM_INTERFACES (2)
-#define USB_CDC_HID_USE_CDC (1)
-#define USB_CDC_HID_USE_HID (0)
-#define CDC_IN_EP                       0x81  /* EP1 for data IN */
-#define CDC_OUT_EP                      0x01  /* EP1 for data OUT */
-#define CDC_CMD_EP                      0x82  /* EP2 for CDC commands */
-#define HID_IN_EP (0x83)
-#define HID_OUT_EP (0x03)
-#elif 0
-// HID
-#define USB_CDC_HID_CONFIG_DESC_SIZ (32)
-#define USB_CDC_HID_NUM_INTERFACES (1)
-#define USB_CDC_HID_USE_CDC (0)
-#define USB_CDC_HID_USE_HID (1)
-#define CDC_IN_EP                       0x81  /* EP1 for data IN */
-#define CDC_OUT_EP                      0x01  /* EP1 for data OUT */
-#define CDC_CMD_EP                      0x82  /* EP2 for CDC commands */
-#define HID_IFACE_NUM (0)
-#define HID_IN_EP (0x81)
-#define HID_OUT_EP (0x01)
-#else
-// HID + CDC
-#define USB_CDC_HID_CONFIG_DESC_SIZ (100)
-#define USB_CDC_HID_NUM_INTERFACES (3)
-#define USB_CDC_HID_USE_CDC (1)
-#define USB_CDC_HID_USE_HID (1)
-#define CDC_IFACE_NUM (1)
-#define CDC_IN_EP  (0x83)
-#define CDC_OUT_EP (0x03)
-#define CDC_CMD_EP (0x82)
-#define HID_IFACE_NUM (0)
-#define HID_IN_EP (0x81)
-#endif
-
-typedef struct {
-  uint32_t bitrate;
-  uint8_t  format;
-  uint8_t  paritytype;
-  uint8_t  datatype;
-} USBD_CDC_LineCodingTypeDef;
-
-typedef struct _USBD_CDC_Itf {
-  int8_t (* Init)          (void);
-  int8_t (* DeInit)        (void);
-  int8_t (* Control)       (uint8_t, uint8_t * , uint16_t);   
-  int8_t (* Receive)       (uint8_t *, uint32_t *);  
-} USBD_CDC_ItfTypeDef;
-
-typedef struct {
-  uint32_t data[CDC_DATA_FS_MAX_PACKET_SIZE/4];      /* Force 32bits alignment */
-  uint8_t  CmdOpCode;
-  uint8_t  CmdLength;    
-  uint8_t  *RxBuffer;  
-  uint8_t  *TxBuffer;   
-  uint32_t RxLength;
-  uint32_t TxLength;    
-  
-  __IO uint32_t TxState;     
-  __IO uint32_t RxState;    
-} USBD_CDC_HandleTypeDef;
-
-extern USBD_ClassTypeDef USBD_CDC_HID;
-
-uint8_t USBD_CDC_RegisterInterface(USBD_HandleTypeDef *pdev, USBD_CDC_ItfTypeDef *fops);
-uint8_t USBD_CDC_SetTxBuffer(USBD_HandleTypeDef *pdev, uint8_t *pbuff, uint16_t length);
-uint8_t USBD_CDC_SetRxBuffer(USBD_HandleTypeDef *pdev, uint8_t *pbuff);
-uint8_t USBD_CDC_ReceivePacket(USBD_HandleTypeDef *pdev);
-uint8_t USBD_CDC_TransmitPacket(USBD_HandleTypeDef *pdev);
-
-uint8_t USBD_HID_SendReport(USBD_HandleTypeDef *pdev, uint8_t *report, uint16_t len);
-
-#endif // _USB_CDC_HID_CORE_H_
diff --git a/stmhal/usbdev/class/cdc_hid/src/usbd_cdc_hid.c b/stmhal/usbdev/class/cdc_hid/src/usbd_cdc_hid.c
deleted file mode 100644
index 89897e7c9..000000000
--- a/stmhal/usbdev/class/cdc_hid/src/usbd_cdc_hid.c
+++ /dev/null
@@ -1,654 +0,0 @@
-#include "usbd_ioreq.h"
-#include "usbd_cdc_hid.h"
-
-#define USB_DESC_TYPE_ASSOCIATION (0x0b)
-
-#define CDC_CMD_PACKET_SIZE                  8  // Control Endpoint Packet size
-#define CDC_DATA_FS_IN_PACKET_SIZE                CDC_DATA_FS_MAX_PACKET_SIZE
-#define CDC_DATA_FS_OUT_PACKET_SIZE               CDC_DATA_FS_MAX_PACKET_SIZE
-
-#define HID_MAX_FS_PACKET             0x04
-#define USB_HID_DESC_SIZ              9
-#define HID_MOUSE_REPORT_DESC_SIZE    74
-#define HID_KEYBOARD_REPORT_DESC_SIZE 63
-#define HID_DESCRIPTOR_TYPE           0x21
-#define HID_REPORT_DESC               0x22
-#define HID_REQ_SET_PROTOCOL          0x0B
-#define HID_REQ_GET_PROTOCOL          0x03
-#define HID_REQ_SET_IDLE              0x0A
-#define HID_REQ_GET_IDLE              0x02
-
-typedef enum {
-  HID_IDLE = 0,
-  HID_BUSY,
-} HID_StateTypeDef;
-
-typedef struct {
-  uint32_t             Protocol;
-  uint32_t             IdleState;
-  uint32_t             AltSetting;
-  HID_StateTypeDef     state;
-} USBD_HID_HandleTypeDef;
-
-static USBD_CDC_ItfTypeDef *CDC_fops;
-
-static USBD_CDC_HandleTypeDef CDC_ClassData;
-static USBD_HID_HandleTypeDef HID_ClassData;
-
-// I don't think we can make these descriptors constant because they are
-// modified (perhaps unnecessarily) by the USB driver.
-
-// USB Standard Device Descriptor
-__ALIGN_BEGIN static uint8_t USBD_CDC_HID_DeviceQualifierDesc[USB_LEN_DEV_QUALIFIER_DESC] __ALIGN_END = {
-    USB_LEN_DEV_QUALIFIER_DESC,
-    USB_DESC_TYPE_DEVICE_QUALIFIER,
-    0x00,
-    0x02,
-    0x00,
-    0x00,
-    0x00,
-    0x40, // maximum of: 0x40 for CDC, 0x04 for HID
-    0x01,
-    0x00,
-};
-
-// USB CDC HID device Configuration Descriptor
-__ALIGN_BEGIN static uint8_t USBD_CDC_HID_CfgFSDesc[USB_CDC_HID_CONFIG_DESC_SIZ] __ALIGN_END = {
-    //--------------------------------------------------------------------------
-    // Configuration Descriptor
-    0x09,   // bLength: Configuration Descriptor size
-    USB_DESC_TYPE_CONFIGURATION, // bDescriptorType: Configuration
-    LOBYTE(USB_CDC_HID_CONFIG_DESC_SIZ), // wTotalLength: no of returned bytes
-    HIBYTE(USB_CDC_HID_CONFIG_DESC_SIZ),
-    USB_CDC_HID_NUM_INTERFACES, // bNumInterfaces: 3 interfaces
-    0x01,   // bConfigurationValue: Configuration value
-    0x00,   // iConfiguration: Index of string descriptor describing the configuration
-    0x80,   // bmAttributes: bus powered; 0xc0 for self powered
-    0xfa,   // bMaxPower: in units of 2mA
-
-#if USB_CDC_HID_USE_CDC
-    //==========================================================================
-    // Interface Association for CDC VCP
-    0x08,   // bLength: 8 bytes
-    USB_DESC_TYPE_ASSOCIATION, // bDescriptorType: IAD
-    CDC_IFACE_NUM, // bFirstInterface: first interface for this association
-    0x02,   // bInterfaceCount: nummber of interfaces for this association
-    0x00,   // bFunctionClass: ?
-    0x00,   // bFunctionSubClass: ?
-    0x00,   // bFunctionProtocol: ?
-    0x00,   // iFunction: index of string for this function
-
-    //--------------------------------------------------------------------------
-    // Interface Descriptor
-    0x09,   // bLength: Interface Descriptor size
-    USB_DESC_TYPE_INTERFACE, // bDescriptorType: Interface
-    CDC_IFACE_NUM, // bInterfaceNumber: Number of Interface
-    0x00,   // bAlternateSetting: Alternate setting
-    0x01,   // bNumEndpoints: One endpoints used
-    0x02,   // bInterfaceClass: Communication Interface Class
-    0x02,   // bInterfaceSubClass: Abstract Control Model
-    0x01,   // bInterfaceProtocol: Common AT commands
-    0x00,   // iInterface:
-
-    // Header Functional Descriptor
-    0x05,   // bLength: Endpoint Descriptor size
-    0x24,   // bDescriptorType: CS_INTERFACE
-    0x00,   // bDescriptorSubtype: Header Func Desc
-    0x10,   // bcdCDC: spec release number
-    0x01,   // ?
-
-    // Call Management Functional Descriptor
-    0x05,   // bFunctionLength
-    0x24,   // bDescriptorType: CS_INTERFACE
-    0x01,   // bDescriptorSubtype: Call Management Func Desc
-    0x00,   // bmCapabilities: D0+D1
-    CDC_IFACE_NUM + 1,   // bDataInterface: 1
-
-    // ACM Functional Descriptor
-    0x04,   // bFunctionLength
-    0x24,   // bDescriptorType: CS_INTERFACE
-    0x02,   // bDescriptorSubtype: Abstract Control Management desc
-    0x02,   // bmCapabilities
-
-    // Union Functional Descriptor
-    0x05,   // bFunctionLength
-    0x24,   // bDescriptorType: CS_INTERFACE
-    0x06,   // bDescriptorSubtype: Union func desc
-    CDC_IFACE_NUM + 0,   // bMasterInterface: Communication class interface
-    CDC_IFACE_NUM + 1,   // bSlaveInterface0: Data Class Interface
-
-    // Endpoint 2 Descriptor
-    0x07,                           // bLength: Endpoint Descriptor size
-    USB_DESC_TYPE_ENDPOINT,         // bDescriptorType: Endpoint
-    CDC_CMD_EP,                     // bEndpointAddress
-    0x03,                           // bmAttributes: Interrupt
-    LOBYTE(CDC_CMD_PACKET_SIZE),    // wMaxPacketSize:
-    HIBYTE(CDC_CMD_PACKET_SIZE),
-    0x20,                           // bInterval: polling interval in frames of 1ms
-
-    //--------------------------------------------------------------------------
-    // Data class interface descriptor
-    0x09,   // bLength: Endpoint Descriptor size
-    USB_DESC_TYPE_INTERFACE, // bDescriptorType: interface
-    CDC_IFACE_NUM + 1,   // bInterfaceNumber: Number of Interface
-    0x00,   // bAlternateSetting: Alternate setting
-    0x02,   // bNumEndpoints: Two endpoints used
-    0x0A,   // bInterfaceClass: CDC
-    0x00,   // bInterfaceSubClass: ?
-    0x00,   // bInterfaceProtocol: ?
-    0x00,   // iInterface:
-
-    // Endpoint OUT Descriptor
-    0x07,                               // bLength: Endpoint Descriptor size
-    USB_DESC_TYPE_ENDPOINT,             // bDescriptorType: Endpoint
-    CDC_OUT_EP,                         // bEndpointAddress
-    0x02,                               // bmAttributes: Bulk
-    LOBYTE(CDC_DATA_FS_MAX_PACKET_SIZE),// wMaxPacketSize:
-    HIBYTE(CDC_DATA_FS_MAX_PACKET_SIZE),
-    0x00,                               // bInterval: ignore for Bulk transfer
-
-    // Endpoint IN Descriptor
-    0x07,                               // bLength: Endpoint Descriptor size
-    USB_DESC_TYPE_ENDPOINT,             // bDescriptorType: Endpoint
-    CDC_IN_EP,                          // bEndpointAddress
-    0x02,                               // bmAttributes: Bulk
-    LOBYTE(CDC_DATA_FS_MAX_PACKET_SIZE),// wMaxPacketSize:
-    HIBYTE(CDC_DATA_FS_MAX_PACKET_SIZE),
-    0x00,                               // bInterval: ignore for Bulk transfer
-#endif
-
-#if USB_CDC_HID_USE_HID
-    //==========================================================================
-    // HID only has 1 interface so doesn't need an IAD
-
-    //--------------------------------------------------------------------------
-    // Interface Descriptor
-    0x09,   // bLength: Interface Descriptor size
-    USB_DESC_TYPE_INTERFACE, // bDescriptorType: interface descriptor
-    HID_IFACE_NUM, // bInterfaceNumber: Number of Interface
-    0x00,   // bAlternateSetting: Alternate setting
-    0x01,   // bNumEndpoints
-    0x03,   // bInterfaceClass: HID Class
-    0x01,   // bInterfaceSubClass: 1=BOOT, 0=no boot
-    0x01,   // nInterfaceProtocol: 0=none, 1=keyboard, 2=mouse
-    0x00,   // iInterface:
-
-    // HID descriptor
-    0x09,                   // bLength: HID Descriptor size
-    HID_DESCRIPTOR_TYPE,    // bDescriptorType: HID
-    0x11,                   // bcdHID: HID Class Spec release number
-    0x01,
-    0x00,                   // bCountryCode: Hardware target country
-    0x01,                   // bNumDescriptors: Number of HID class descriptors to follow
-    0x22,                   // bDescriptorType
-    HID_MOUSE_REPORT_DESC_SIZE, // wItemLength: Total length of Report descriptor
-    0x00,
-
-    // Endpoint IN descriptor
-    0x07,                           // bLength: Endpoint descriptor length
-    USB_DESC_TYPE_ENDPOINT,         // bDescriptorType: Endpoint descriptor type
-    HID_IN_EP,                      // bEndpointAddress: IN
-    0x03,                           // bmAttributes: Interrupt endpoint type
-    LOBYTE(HID_MAX_FS_PACKET),      // wMaxPacketSize
-    HIBYTE(HID_MAX_FS_PACKET),
-    0x08,                           // bInterval: Polling interval
-#endif
-};
-
-#if USB_CDC_HID_USE_HID
-/* USB HID device Configuration Descriptor */
-__ALIGN_BEGIN static uint8_t USBD_HID_Desc[USB_HID_DESC_SIZ] __ALIGN_END = {
-  0x09,         /*bLength: HID Descriptor size*/
-  HID_DESCRIPTOR_TYPE, /*bDescriptorType: HID*/
-  0x11,         /*bcdHID: HID Class Spec release number*/
-  0x01,
-  0x00,         /*bCountryCode: Hardware target country*/
-  0x01,         /*bNumDescriptors: Number of HID class descriptors to follow*/
-  0x22,         /*bDescriptorType*/
-  HID_MOUSE_REPORT_DESC_SIZE,/*wItemLength: Total length of Report descriptor*/
-  0x00,
-};
-
-__ALIGN_BEGIN static uint8_t HID_MOUSE_ReportDesc[HID_MOUSE_REPORT_DESC_SIZE] __ALIGN_END = {
-  0x05,   0x01,
-  0x09,   0x02,
-  0xA1,   0x01,
-  0x09,   0x01,
-
-  0xA1,   0x00,
-  0x05,   0x09,
-  0x19,   0x01,
-  0x29,   0x03,
-
-  0x15,   0x00,
-  0x25,   0x01,
-  0x95,   0x03,
-  0x75,   0x01,
-
-  0x81,   0x02,
-  0x95,   0x01,
-  0x75,   0x05,
-  0x81,   0x01,
-
-  0x05,   0x01,
-  0x09,   0x30,
-  0x09,   0x31,
-  0x09,   0x38,
-
-  0x15,   0x81,
-  0x25,   0x7F,
-  0x75,   0x08,
-  0x95,   0x03,
-
-  0x81,   0x06,
-  0xC0,   0x09,
-  0x3c,   0x05,
-  0xff,   0x09,
-
-  0x01,   0x15,
-  0x00,   0x25,
-  0x01,   0x75,
-  0x01,   0x95,
-
-  0x02,   0xb1,
-  0x22,   0x75,
-  0x06,   0x95,
-  0x01,   0xb1,
-
-  0x01,   0xc0
-};
-
-#if 0
-__ALIGN_BEGIN static const uint8_t HID_KEYBOARD_ReportDesc[HID_KEYBOARD_REPORT_DESC_SIZE] __ALIGN_END = {
-    // From p69 of http://www.usb.org/developers/devclass_docs/HID1_11.pdf
-    0x05, 0x01,     // Usage Page (Generic Desktop),
-    0x09, 0x06,     // Usage (Keyboard),
-    0xA1, 0x01,     // Collection (Application),
-    0x05, 0x07,         // Usage Page (Key Codes);
-    0x19, 0xE0,         // Usage Minimum (224),
-    0x29, 0xE7,         // Usage Maximum (231),
-    0x15, 0x00,         // Logical Minimum (0),
-    0x25, 0x01,         // Logical Maximum (1),
-    0x75, 0x01,         // Report Size (1),
-    0x95, 0x08,         // Report Count (8),
-    0x81, 0x02,         // Input (Data, Variable, Absolute), ;Modifier byte
-    0x95, 0x01,         // Report Count (1),
-    0x75, 0x08,         // Report Size (8),
-    0x81, 0x01,         // Input (Constant), ;Reserved byte
-    0x95, 0x05,         // Report Count (5),
-    0x75, 0x01,         // Report Size (1),
-    0x05, 0x08,         // Usage Page (Page# for LEDs),
-    0x19, 0x01,         // Usage Minimum (1),
-    0x29, 0x05,         // Usage Maximum (5),
-    0x91, 0x02,         // Output (Data, Variable, Absolute), ;LED report
-    0x95, 0x01,         // Report Count (1),
-    0x75, 0x03,         // Report Size (3),
-    0x91, 0x01,         // Output (Constant), ;LED report padding
-    0x95, 0x06,         // Report Count (6),
-    0x75, 0x08,         // Report Size (8),
-    0x15, 0x00,         // Logical Minimum (0),
-    0x25, 0x65,         // Logical Maximum(101),
-    0x05, 0x07,         // Usage Page (Key Codes),
-    0x19, 0x00,         // Usage Minimum (0),
-    0x29, 0x65,         // Usage Maximum (101),
-    0x81, 0x00,         // Input (Data, Array), ;Key arrays (6 bytes)
-    0xC0            // End Collection
-};
-#endif
-#endif
-
-static uint8_t USBD_CDC_HID_Init(USBD_HandleTypeDef *pdev, uint8_t cfgidx) {
-    if (pdev->dev_speed == USBD_SPEED_HIGH) {
-        // can't handle high speed
-        return 1;
-    }
-
-#if USB_CDC_HID_USE_CDC
-    //----------------------------------
-    // CDC VCP component
-
-    // Open EP IN
-    USBD_LL_OpenEP(pdev,
-                   CDC_IN_EP,
-                   USBD_EP_TYPE_BULK,
-                   CDC_DATA_FS_IN_PACKET_SIZE);
-
-    // Open EP OUT
-    USBD_LL_OpenEP(pdev,
-                   CDC_OUT_EP,
-                   USBD_EP_TYPE_BULK,
-                   CDC_DATA_FS_OUT_PACKET_SIZE);
-
-    // Open Command IN EP
-    USBD_LL_OpenEP(pdev,
-                   CDC_CMD_EP,
-                   USBD_EP_TYPE_INTR,
-                   CDC_CMD_PACKET_SIZE);
-
-    // Init physical Interface components
-    CDC_fops->Init();
-
-    // Init Xfer states
-    CDC_ClassData.TxState =0;
-    CDC_ClassData.RxState =0;
-
-    // Prepare Out endpoint to receive next packet
-    USBD_LL_PrepareReceive(pdev, CDC_OUT_EP, CDC_ClassData.RxBuffer, CDC_DATA_FS_OUT_PACKET_SIZE);
-#endif
-
-#if USB_CDC_HID_USE_HID
-    //----------------------------------
-    // HID component
-
-    // Open EP IN
-    USBD_LL_OpenEP(pdev,
-                   HID_IN_EP,
-                   USBD_EP_TYPE_INTR,
-                   HID_MAX_FS_PACKET);
-
-    HID_ClassData.state = HID_IDLE;
-#endif
-
-    return 0;
-}
-
-static uint8_t USBD_CDC_HID_DeInit(USBD_HandleTypeDef *pdev, uint8_t cfgidx) {
-#if USD_CDC
-    //----------------------------------
-    // CDC VCP component
-
-    // close endpoints
-    USBD_LL_CloseEP(pdev, CDC_IN_EP);
-    USBD_LL_CloseEP(pdev, CDC_OUT_EP);
-    USBD_LL_CloseEP(pdev, CDC_CMD_EP);
-
-    // DeInit physical Interface components
-    CDC_fops->DeInit();
-#endif
-
-#if USB_CDC_HID_USE_HID
-    //----------------------------------
-    // HID component
-
-    // close endpoints
-    USBD_LL_CloseEP(pdev, HID_IN_EP);
-#endif
-
-    return 0;
-}
-
-static uint8_t USBD_CDC_HID_Setup(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req) {
-
-    /*
-    printf("SU: %x %x %x %x\n", req->bmRequest, req->bRequest, req->wValue, req->wIndex);
-    */
-
-    switch (req->bmRequest & USB_REQ_TYPE_MASK) {
-
-        // Class request
-        case USB_REQ_TYPE_CLASS:
-            // req->wIndex is the recipient interface number
-            if (0) {
-#if USB_CDC_HID_USE_CDC
-            } else if (req->wIndex == CDC_IFACE_NUM) {
-                // CDC component
-                if (req->wLength) {
-                    if (req->bmRequest & 0x80) {
-                        // device-to-host request
-                        CDC_fops->Control(req->bRequest, (uint8_t*)CDC_ClassData.data, req->wLength);
-                        USBD_CtlSendData(pdev, (uint8_t*)CDC_ClassData.data, req->wLength);
-                    } else {
-                        // host-to-device request
-                        CDC_ClassData.CmdOpCode = req->bRequest;
-                        CDC_ClassData.CmdLength = req->wLength;
-                        USBD_CtlPrepareRx(pdev, (uint8_t*)CDC_ClassData.data, req->wLength);
-                    }
-                } else {
-                    // Not a Data request
-                    // Transfer the command to the interface layer
-                    return CDC_fops->Control(req->bRequest, NULL, req->wValue);
-                }
-                break;
-#endif
-#if USB_CDC_HID_USE_HID
-            } else if (req->wIndex == HID_IFACE_NUM) {
-    switch (req->bRequest) {
-    case HID_REQ_SET_PROTOCOL:
-      HID_ClassData.Protocol = (uint8_t)(req->wValue);
-      break;
-
-    case HID_REQ_GET_PROTOCOL:
-      USBD_CtlSendData (pdev, (uint8_t *)&HID_ClassData.Protocol, 1);
-      break;
-
-    case HID_REQ_SET_IDLE:
-      HID_ClassData.IdleState = (uint8_t)(req->wValue >> 8);
-      break;
-
-    case HID_REQ_GET_IDLE:
-      USBD_CtlSendData (pdev, (uint8_t *)&HID_ClassData.IdleState, 1);
-      break;
-
-    default:
-      USBD_CtlError (pdev, req);
-      return USBD_FAIL;
-    }
-                break;
-            }
-#endif
-      break;
-
-    /* Interface & Endpoint request */
-    case USB_REQ_TYPE_STANDARD:
-#if USB_CDC_HID_USE_HID
-        // HID only
-        switch (req->bRequest) {
-            case USB_REQ_GET_DESCRIPTOR: {
-              uint16_t len = 0;
-              const uint8_t *pbuf = NULL;
-              if (req->wValue >> 8 == HID_REPORT_DESC) {
-                len = MIN(HID_MOUSE_REPORT_DESC_SIZE , req->wLength);
-                pbuf = HID_MOUSE_ReportDesc;
-              } else if (req->wValue >> 8 == HID_DESCRIPTOR_TYPE) {
-                len = MIN(USB_HID_DESC_SIZ , req->wLength);
-                pbuf = USBD_HID_Desc;
-              }
-              USBD_CtlSendData(pdev, (uint8_t*)pbuf, len);
-              break;
-             }
-
-            case USB_REQ_GET_INTERFACE:
-              USBD_CtlSendData (pdev, (uint8_t *)&HID_ClassData.AltSetting, 1);
-              break;
-
-            case USB_REQ_SET_INTERFACE:
-              HID_ClassData.AltSetting = (uint8_t)(req->wValue);
-              break;
-        }
-#endif
-        break;
-    }
-    return USBD_OK;
-}
-
-static uint8_t USBD_CDC_HID_EP0_RxReady(USBD_HandleTypeDef *pdev) {
-  if((CDC_fops != NULL) && (CDC_ClassData.CmdOpCode != 0xFF)) {
-    CDC_fops->Control(CDC_ClassData.CmdOpCode, (uint8_t *)CDC_ClassData.data, CDC_ClassData.CmdLength);
-      CDC_ClassData.CmdOpCode = 0xFF;
-  }
-  return USBD_OK;
-}
-
-static uint8_t USBD_CDC_HID_DataIn(USBD_HandleTypeDef *pdev, uint8_t epnum) {
-    switch (epnum) {
-#if USB_CDC_HID_USE_CDC
-        case (CDC_IN_EP & 0x7f):
-        case (CDC_CMD_EP & 0x7f):
-            CDC_ClassData.TxState = 0;
-            return USBD_OK;
-#endif
-#if USB_CDC_HID_USE_HID
-        case (HID_IN_EP & 0x7f):
-            /* Ensure that the FIFO is empty before a new transfer, this condition could
-            be caused by  a new transfer before the end of the previous transfer */
-            HID_ClassData.state = HID_IDLE;
-            return USBD_OK;
-#endif
-    }
-
-    return USBD_OK;
-}
-
-static uint8_t USBD_CDC_HID_DataOut(USBD_HandleTypeDef *pdev, uint8_t epnum) {
-    switch (epnum) {
-#if USB_CDC_HID_USE_CDC
-        case (CDC_OUT_EP & 0x7f):
-            /* Get the received data length */
-            CDC_ClassData.RxLength = USBD_LL_GetRxDataSize (pdev, epnum);
-
-            /* USB data will be immediately processed, this allow next USB traffic being
-            NAKed till the end of the application Xfer */
-            CDC_fops->Receive(CDC_ClassData.RxBuffer, &CDC_ClassData.RxLength);
-
-            return USBD_OK;
-#endif
-    }
-
-    return USBD_OK;
-}
-
-static uint8_t *USBD_CDC_HID_GetFSCfgDesc(uint16_t *length) {
-    *length = sizeof(USBD_CDC_HID_CfgFSDesc);
-    return USBD_CDC_HID_CfgFSDesc;
-}
-
-static uint8_t *USBD_CDC_HID_GetHSCfgDesc(uint16_t *length) {
-    *length = 0;
-    return USBD_CDC_HID_CfgFSDesc; // need to return something because the USB driver writes bytes to the result
-}
-
-static uint8_t *USBD_CDC_HID_GetOtherSpeedCfgDesc (uint16_t *length) {
-    *length = 0;
-    return USBD_CDC_HID_CfgFSDesc; // need to return something because the USB driver writes bytes to the result
-}
-
-uint8_t *USBD_CDC_HID_GetDeviceQualifierDescriptor (uint16_t *length) {
-    *length = sizeof(USBD_CDC_HID_DeviceQualifierDesc);
-    return USBD_CDC_HID_DeviceQualifierDesc;
-}
-
-uint8_t USBD_CDC_RegisterInterface(USBD_HandleTypeDef *pdev, USBD_CDC_ItfTypeDef *fops) {
-    if (fops == NULL) {
-        return USBD_FAIL;
-    } else {
-        CDC_fops = fops;
-        return USBD_OK;
-    }
-}
-
-/**
-  * @brief  USBD_CDC_SetTxBuffer
-  * @param  pdev: device instance
-  * @param  pbuff: Tx Buffer
-  * @retval status
-  */
-uint8_t  USBD_CDC_SetTxBuffer  (USBD_HandleTypeDef   *pdev,
-                                uint8_t  *pbuff,
-                                uint16_t length)
-{
-  CDC_ClassData.TxBuffer = pbuff;
-  CDC_ClassData.TxLength = length;
-
-  return USBD_OK;
-}
-
-
-/**
-  * @brief  USBD_CDC_SetRxBuffer
-  * @param  pdev: device instance
-  * @param  pbuff: Rx Buffer
-  * @retval status
-  */
-uint8_t  USBD_CDC_SetRxBuffer  (USBD_HandleTypeDef   *pdev,
-                                   uint8_t  *pbuff)
-{
-  CDC_ClassData.RxBuffer = pbuff;
-
-  return USBD_OK;
-}
-
-/**
-  * @brief  USBD_CDC_DataOut
-  *         Data received on non-control Out endpoint
-  * @param  pdev: device instance
-  * @param  epnum: endpoint number
-  * @retval status
-  */
-uint8_t  USBD_CDC_TransmitPacket(USBD_HandleTypeDef *pdev) {
-    if(CDC_ClassData.TxState == 0) {
-
-      /* Transmit next packet */
-      USBD_LL_Transmit(pdev,
-                       CDC_IN_EP,
-                       CDC_ClassData.TxBuffer,
-                       CDC_ClassData.TxLength);
-
-      /* Tx Transfer in progress */
-      CDC_ClassData.TxState = 1;
-      return USBD_OK;
-    }
-    else
-    {
-      return USBD_BUSY;
-    }
-}
-
-
-/**
-  * @brief  USBD_CDC_ReceivePacket
-  *         prepare OUT Endpoint for reception
-  * @param  pdev: device instance
-  * @retval status
-  */
-uint8_t USBD_CDC_ReceivePacket(USBD_HandleTypeDef *pdev) {
-    // Suspend or Resume USB Out process
-    if (pdev->dev_speed == USBD_SPEED_HIGH) {
-        return USBD_FAIL;
-    }
-
-    // Prepare Out endpoint to receive next packet */
-    USBD_LL_PrepareReceive(pdev,
-                           CDC_OUT_EP,
-                           CDC_ClassData.RxBuffer,
-                           CDC_DATA_FS_OUT_PACKET_SIZE);
-
-    return USBD_OK;
-}
-
-uint8_t USBD_HID_SendReport(USBD_HandleTypeDef *pdev, uint8_t *report, uint16_t len) {
-    if (pdev->dev_state == USBD_STATE_CONFIGURED) {
-        if (HID_ClassData.state == HID_IDLE) {
-            HID_ClassData.state = HID_BUSY;
-            USBD_LL_Transmit(pdev, HID_IN_EP, report, len);
-        }
-    }
-    return USBD_OK;
-}
-
-// CDC + HID interface class callbacks structure
-USBD_ClassTypeDef USBD_CDC_HID = {
-    USBD_CDC_HID_Init,
-    USBD_CDC_HID_DeInit,
-    USBD_CDC_HID_Setup,
-    NULL, // EP0_TxSent
-    USBD_CDC_HID_EP0_RxReady,
-    USBD_CDC_HID_DataIn,
-    USBD_CDC_HID_DataOut,
-    NULL, // SOF
-    NULL,
-    NULL,
-    USBD_CDC_HID_GetHSCfgDesc,
-    USBD_CDC_HID_GetFSCfgDesc,
-    USBD_CDC_HID_GetOtherSpeedCfgDesc,
-    USBD_CDC_HID_GetDeviceQualifierDescriptor,
-};
diff --git a/stmhal/usbdev/class/cdc_msc/inc/usbd_cdc_msc.h b/stmhal/usbdev/class/cdc_msc/inc/usbd_cdc_msc.h
deleted file mode 100644
index 5299f31e9..000000000
--- a/stmhal/usbdev/class/cdc_msc/inc/usbd_cdc_msc.h
+++ /dev/null
@@ -1,132 +0,0 @@
-#ifndef _USB_CDC_MSC_CORE_H_
-#define _USB_CDC_MSC_CORE_H_
-
-#include  "usbd_msc_bot.h"
-#include  "usbd_msc_scsi.h"
-#include  "usbd_ioreq.h"
-
-// CDC and MSC packet sizes
-#define CDC_DATA_FS_MAX_PACKET_SIZE (64) // endpoint IN & OUT packet size
-#define MSC_MEDIA_PACKET            (2048) // was 8192; how low can it go whilst still working?
-
-#if 0
-// CDC
-#define USB_CDC_MSC_CONFIG_DESC_SIZ (75)
-#define NUM_INTERFACES (2)
-#define USE_CDC (1)
-#define USE_MSC (0)
-#define CDC_IN_EP                       0x81  /* EP1 for data IN */
-#define CDC_OUT_EP                      0x01  /* EP1 for data OUT */
-#define CDC_CMD_EP                      0x82  /* EP2 for CDC commands */
-#define MSC_IN_EP (0x83)
-#define MSC_OUT_EP (0x03)
-#elif 0
-// MSC
-#define USB_CDC_MSC_CONFIG_DESC_SIZ (32)
-#define NUM_INTERFACES (1)
-#define USE_CDC (0)
-#define USE_MSC (1)
-#define CDC_IN_EP                       0x81  /* EP1 for data IN */
-#define CDC_OUT_EP                      0x01  /* EP1 for data OUT */
-#define CDC_CMD_EP                      0x82  /* EP2 for CDC commands */
-#define MSC_IFACE_NUM (0)
-#define MSC_IN_EP (0x81)
-#define MSC_OUT_EP (0x01)
-#elif 1
-// CDC + MSC
-#define USB_CDC_MSC_CONFIG_DESC_SIZ (98)
-#define NUM_INTERFACES (3)
-#define USE_CDC (1)
-#define USE_MSC (1)
-#define CDC_IFACE_NUM (0)
-#define CDC_IN_EP                       0x81  /* EP1 for data IN */
-#define CDC_OUT_EP                      0x01  /* EP1 for data OUT */
-#define CDC_CMD_EP                      0x82  /* EP2 for CDC commands */
-#define MSC_IFACE_NUM (2)
-#define MSC_IN_EP (0x83)
-#define MSC_OUT_EP (0x03)
-#else
-// MSC + CDC
-#define USB_CDC_MSC_CONFIG_DESC_SIZ (98)
-#define NUM_INTERFACES (3)
-#define USE_CDC (1)
-#define USE_MSC (1)
-#define CDC_IFACE_NUM (1)
-#define CDC_IN_EP                       0x83  /* EP1 for data IN */
-#define CDC_OUT_EP                      0x03  /* EP1 for data OUT */
-#define CDC_CMD_EP                      0x82  /* EP2 for CDC commands */
-#define MSC_IFACE_NUM (0)
-#define MSC_IN_EP (0x81)
-#define MSC_OUT_EP (0x01)
-#endif
-
-typedef struct {
-  uint32_t bitrate;
-  uint8_t  format;
-  uint8_t  paritytype;
-  uint8_t  datatype;
-} USBD_CDC_LineCodingTypeDef;
-
-typedef struct _USBD_CDC_Itf {
-  int8_t (* Init)          (void);
-  int8_t (* DeInit)        (void);
-  int8_t (* Control)       (uint8_t, uint8_t * , uint16_t);   
-  int8_t (* Receive)       (uint8_t *, uint32_t *);  
-} USBD_CDC_ItfTypeDef;
-
-typedef struct {
-  uint32_t data[CDC_DATA_FS_MAX_PACKET_SIZE/4];      /* Force 32bits alignment */
-  uint8_t  CmdOpCode;
-  uint8_t  CmdLength;    
-  uint8_t  *RxBuffer;  
-  uint8_t  *TxBuffer;   
-  uint32_t RxLength;
-  uint32_t TxLength;    
-  
-  __IO uint32_t TxState;     
-  __IO uint32_t RxState;    
-} USBD_CDC_HandleTypeDef;
-
-typedef struct _USBD_STORAGE {
-  int8_t (* Init) (uint8_t lun);
-  int8_t (* GetCapacity) (uint8_t lun, uint32_t *block_num, uint16_t *block_size);
-  int8_t (* IsReady) (uint8_t lun);
-  int8_t (* IsWriteProtected) (uint8_t lun);
-  int8_t (* Read) (uint8_t lun, uint8_t *buf, uint32_t blk_addr, uint16_t blk_len);
-  int8_t (* Write)(uint8_t lun, uint8_t *buf, uint32_t blk_addr, uint16_t blk_len);
-  int8_t (* GetMaxLun)(void);
-  int8_t *pInquiry;
-} USBD_StorageTypeDef;
-
-typedef struct {
-  uint32_t                 max_lun;   
-  uint32_t                 interface; 
-  uint8_t                  bot_state;
-  uint8_t                  bot_status;  
-  uint16_t                 bot_data_length;
-  uint8_t                  bot_data[MSC_MEDIA_PACKET];  
-  USBD_MSC_BOT_CBWTypeDef  cbw;
-  USBD_MSC_BOT_CSWTypeDef  csw;
-  
-  USBD_SCSI_SenseTypeDef   scsi_sense [SENSE_LIST_DEEPTH];
-  uint8_t                  scsi_sense_head;
-  uint8_t                  scsi_sense_tail;
-  
-  uint16_t                 scsi_blk_size;
-  uint32_t                 scsi_blk_nbr;
-  
-  uint32_t                 scsi_blk_addr;
-  uint32_t                 scsi_blk_len;
-} USBD_MSC_BOT_HandleTypeDef;
-
-extern USBD_ClassTypeDef USBD_CDC_MSC;
-
-uint8_t  USBD_CDC_RegisterInterface  (USBD_HandleTypeDef   *pdev, USBD_CDC_ItfTypeDef *fops);
-uint8_t  USBD_CDC_SetTxBuffer  (USBD_HandleTypeDef   *pdev, uint8_t  *pbuff, uint16_t length);
-uint8_t  USBD_CDC_SetRxBuffer        (USBD_HandleTypeDef   *pdev, uint8_t  *pbuff);
-uint8_t  USBD_CDC_ReceivePacket  (USBD_HandleTypeDef *pdev);
-uint8_t  USBD_CDC_TransmitPacket  (USBD_HandleTypeDef *pdev);
-
-uint8_t USBD_MSC_RegisterStorage(USBD_HandleTypeDef *pdev, USBD_StorageTypeDef *fops);
-
-#endif // _USB_CDC_MSC_CORE_H_
diff --git a/stmhal/usbdev/class/cdc_msc/src/usbd_cdc_msc.c b/stmhal/usbdev/class/cdc_msc/src/usbd_cdc_msc.c
deleted file mode 100644
index 07e801e9b..000000000
--- a/stmhal/usbdev/class/cdc_msc/src/usbd_cdc_msc.c
+++ /dev/null
@@ -1,578 +0,0 @@
-#include "usbd_ioreq.h"
-#include "usbd_cdc_msc.h"
-
-#define USB_DESC_TYPE_ASSOCIATION (0x0b)
-
-#define CDC_CMD_PACKET_SIZE                  8  // Control Endpoint Packet size
-#define CDC_DATA_FS_IN_PACKET_SIZE                CDC_DATA_FS_MAX_PACKET_SIZE
-#define CDC_DATA_FS_OUT_PACKET_SIZE               CDC_DATA_FS_MAX_PACKET_SIZE
-
-#define BOT_GET_MAX_LUN              0xFE
-#define BOT_RESET                    0xFF
-#define USB_MSC_CONFIG_DESC_SIZ      32
-
-#define MSC_MAX_FS_PACKET            0x40
-
-static USBD_CDC_ItfTypeDef *CDC_fops;
-static USBD_StorageTypeDef *MSC_fops;
-
-static USBD_CDC_HandleTypeDef CDC_ClassData;
-static USBD_MSC_BOT_HandleTypeDef MSC_BOT_ClassData;
-
-// I don't think we can make these descriptors constant because they are
-// modified (perhaps unnecessarily) by the USB driver.
-
-// USB Standard Device Descriptor
-__ALIGN_BEGIN static uint8_t USBD_CDC_MSC_DeviceQualifierDesc[USB_LEN_DEV_QUALIFIER_DESC] __ALIGN_END = {
-    USB_LEN_DEV_QUALIFIER_DESC,
-    USB_DESC_TYPE_DEVICE_QUALIFIER,
-    0x00,
-    0x02,
-    0x00,
-    0x00,
-    0x00,
-    0x40, // same for CDC and MSC (latter being MSC_MAX_FS_PACKET)
-    0x01,
-    0x00,
-};
-
-// USB CDC MSC device Configuration Descriptor
-__ALIGN_BEGIN static uint8_t USBD_CDC_MSC_CfgFSDesc[USB_CDC_MSC_CONFIG_DESC_SIZ] __ALIGN_END = {
-    //--------------------------------------------------------------------------
-    // Configuration Descriptor
-    0x09,   // bLength: Configuration Descriptor size
-    USB_DESC_TYPE_CONFIGURATION, // bDescriptorType: Configuration
-    LOBYTE(USB_CDC_MSC_CONFIG_DESC_SIZ), // wTotalLength: no of returned bytes
-    HIBYTE(USB_CDC_MSC_CONFIG_DESC_SIZ),
-    NUM_INTERFACES, // bNumInterfaces: 3 interfaces
-    0x01,   // bConfigurationValue: Configuration value
-    0x00,   // iConfiguration: Index of string descriptor describing the configuration
-    0x80,   // bmAttributes: bus powered; 0xc0 for self powered
-    0xfa,   // bMaxPower: in units of 2mA
-
-#if USE_CDC
-    //==========================================================================
-    // Interface Association for CDC VCP
-    0x08,   // bLength: 8 bytes
-    USB_DESC_TYPE_ASSOCIATION, // bDescriptorType: IAD
-    CDC_IFACE_NUM, // bFirstInterface: first interface for this association
-    0x02,   // bInterfaceCount: nummber of interfaces for this association
-    0x00,   // bFunctionClass: ?
-    0x00,   // bFunctionSubClass: ?
-    0x00,   // bFunctionProtocol: ?
-    0x00,   // iFunction: index of string for this function
-
-    //--------------------------------------------------------------------------
-    // Interface Descriptor
-    0x09,   // bLength: Interface Descriptor size
-    USB_DESC_TYPE_INTERFACE, // bDescriptorType: Interface
-    CDC_IFACE_NUM, // bInterfaceNumber: Number of Interface
-    0x00,   // bAlternateSetting: Alternate setting
-    0x01,   // bNumEndpoints: One endpoints used
-    0x02,   // bInterfaceClass: Communication Interface Class
-    0x02,   // bInterfaceSubClass: Abstract Control Model
-    0x01,   // bInterfaceProtocol: Common AT commands
-    0x00,   // iInterface:
-
-    // Header Functional Descriptor
-    0x05,   // bLength: Endpoint Descriptor size
-    0x24,   // bDescriptorType: CS_INTERFACE
-    0x00,   // bDescriptorSubtype: Header Func Desc
-    0x10,   // bcdCDC: spec release number
-    0x01,   // ?
-
-    // Call Management Functional Descriptor
-    0x05,   // bFunctionLength
-    0x24,   // bDescriptorType: CS_INTERFACE
-    0x01,   // bDescriptorSubtype: Call Management Func Desc
-    0x00,   // bmCapabilities: D0+D1
-    CDC_IFACE_NUM + 1,   // bDataInterface: 1
-
-    // ACM Functional Descriptor
-    0x04,   // bFunctionLength
-    0x24,   // bDescriptorType: CS_INTERFACE
-    0x02,   // bDescriptorSubtype: Abstract Control Management desc
-    0x02,   // bmCapabilities
-
-    // Union Functional Descriptor
-    0x05,   // bFunctionLength
-    0x24,   // bDescriptorType: CS_INTERFACE
-    0x06,   // bDescriptorSubtype: Union func desc
-    CDC_IFACE_NUM + 0,   // bMasterInterface: Communication class interface
-    CDC_IFACE_NUM + 1,   // bSlaveInterface0: Data Class Interface
-
-    // Endpoint 2 Descriptor
-    0x07,                           // bLength: Endpoint Descriptor size
-    USB_DESC_TYPE_ENDPOINT,         // bDescriptorType: Endpoint
-    CDC_CMD_EP,                     // bEndpointAddress
-    0x03,                           // bmAttributes: Interrupt
-    LOBYTE(CDC_CMD_PACKET_SIZE),    // wMaxPacketSize:
-    HIBYTE(CDC_CMD_PACKET_SIZE),
-    0x20,                           // bInterval: polling interval in frames of 1ms
-
-    //--------------------------------------------------------------------------
-    // Data class interface descriptor
-    0x09,   // bLength: Endpoint Descriptor size
-    USB_DESC_TYPE_INTERFACE, // bDescriptorType: interface
-    CDC_IFACE_NUM + 1,   // bInterfaceNumber: Number of Interface
-    0x00,   // bAlternateSetting: Alternate setting
-    0x02,   // bNumEndpoints: Two endpoints used
-    0x0A,   // bInterfaceClass: CDC
-    0x00,   // bInterfaceSubClass: ?
-    0x00,   // bInterfaceProtocol: ?
-    0x00,   // iInterface:
-
-    // Endpoint OUT Descriptor
-    0x07,                               // bLength: Endpoint Descriptor size
-    USB_DESC_TYPE_ENDPOINT,             // bDescriptorType: Endpoint
-    CDC_OUT_EP,                         // bEndpointAddress
-    0x02,                               // bmAttributes: Bulk
-    LOBYTE(CDC_DATA_FS_MAX_PACKET_SIZE),// wMaxPacketSize:
-    HIBYTE(CDC_DATA_FS_MAX_PACKET_SIZE),
-    0x00,                               // bInterval: ignore for Bulk transfer
-
-    // Endpoint IN Descriptor
-    0x07,                               // bLength: Endpoint Descriptor size
-    USB_DESC_TYPE_ENDPOINT,             // bDescriptorType: Endpoint
-    CDC_IN_EP,                          // bEndpointAddress
-    0x02,                               // bmAttributes: Bulk
-    LOBYTE(CDC_DATA_FS_MAX_PACKET_SIZE),// wMaxPacketSize:
-    HIBYTE(CDC_DATA_FS_MAX_PACKET_SIZE),
-    0x00,                               // bInterval: ignore for Bulk transfer
-#endif
-
-#if USE_MSC
-    //==========================================================================
-    // MSC only has 1 interface so doesn't need an IAD
-
-    //--------------------------------------------------------------------------
-    // Interface Descriptor
-    0x09,   // bLength: Interface Descriptor size
-    USB_DESC_TYPE_INTERFACE, // bDescriptorType: interface descriptor
-    MSC_IFACE_NUM, // bInterfaceNumber: Number of Interface
-    0x00,   // bAlternateSetting: Alternate setting
-    0x02,   // bNumEndpoints
-    0x08,   // bInterfaceClass: MSC Class
-    0x06,   // bInterfaceSubClass : SCSI transparent
-    0x50,   // nInterfaceProtocol
-    0x00,   // iInterface:
-
-    // Endpoint IN descriptor
-    0x07,                           // bLength: Endpoint descriptor length
-    USB_DESC_TYPE_ENDPOINT,         // bDescriptorType: Endpoint descriptor type
-    MSC_IN_EP,                      // bEndpointAddress: IN, address 3
-    0x02,                           // bmAttributes: Bulk endpoint type
-    LOBYTE(MSC_MAX_FS_PACKET),      // wMaxPacketSize
-    HIBYTE(MSC_MAX_FS_PACKET),
-    0x00,                           // bInterval: ignore for Bulk transfer
-
-    // Endpoint OUT descriptor
-    0x07,                           // bLength: Endpoint descriptor length
-    USB_DESC_TYPE_ENDPOINT,         // bDescriptorType: Endpoint descriptor type
-    MSC_OUT_EP,                     // bEndpointAddress: OUT, address 3
-    0x02,                           // bmAttributes: Bulk endpoint type
-    LOBYTE(MSC_MAX_FS_PACKET),      // wMaxPacketSize
-    HIBYTE(MSC_MAX_FS_PACKET),
-    0x00,                           // bInterval: ignore for Bulk transfer
-#endif
-};
-
-static uint8_t USBD_CDC_MSC_Init(USBD_HandleTypeDef *pdev, uint8_t cfgidx) {
-    if (pdev->dev_speed == USBD_SPEED_HIGH) {
-        // can't handle high speed
-        return 1;
-    }
-
-#if USE_CDC
-    //----------------------------------
-    // CDC VCP component
-
-    // Open EP IN
-    USBD_LL_OpenEP(pdev,
-                   CDC_IN_EP,
-                   USBD_EP_TYPE_BULK,
-                   CDC_DATA_FS_IN_PACKET_SIZE);
-
-    // Open EP OUT
-    USBD_LL_OpenEP(pdev,
-                   CDC_OUT_EP,
-                   USBD_EP_TYPE_BULK,
-                   CDC_DATA_FS_OUT_PACKET_SIZE);
-
-    // Open Command IN EP
-    USBD_LL_OpenEP(pdev,
-                   CDC_CMD_EP,
-                   USBD_EP_TYPE_INTR,
-                   CDC_CMD_PACKET_SIZE);
-
-    // Init physical Interface components
-    CDC_fops->Init();
-
-    // Init Xfer states
-    CDC_ClassData.TxState =0;
-    CDC_ClassData.RxState =0;
-
-    // Prepare Out endpoint to receive next packet
-    USBD_LL_PrepareReceive(pdev, CDC_OUT_EP, CDC_ClassData.RxBuffer, CDC_DATA_FS_OUT_PACKET_SIZE);
-#endif
-
-#if USE_MSC
-    //----------------------------------
-    // MSC component
-
-    // Open EP OUT
-    USBD_LL_OpenEP(pdev,
-                   MSC_OUT_EP,
-                   USBD_EP_TYPE_BULK,
-                   MSC_MAX_FS_PACKET);
-
-    // Open EP IN
-    USBD_LL_OpenEP(pdev,
-                   MSC_IN_EP,
-                   USBD_EP_TYPE_BULK,
-                   MSC_MAX_FS_PACKET);
-
-    // MSC uses the pClassData pointer because SCSI and BOT reference it
-    pdev->pClassData = &MSC_BOT_ClassData;
-
-    // Init the BOT layer
-    MSC_BOT_Init(pdev);
-#endif
-
-    return 0;
-}
-
-static uint8_t USBD_CDC_MSC_DeInit(USBD_HandleTypeDef *pdev, uint8_t cfgidx) {
-#if USD_CDC
-    //----------------------------------
-    // CDC VCP component
-
-    // close endpoints
-    USBD_LL_CloseEP(pdev, CDC_IN_EP);
-    USBD_LL_CloseEP(pdev, CDC_OUT_EP);
-    USBD_LL_CloseEP(pdev, CDC_CMD_EP);
-
-    // DeInit physical Interface components
-    CDC_fops->DeInit();
-#endif
-
-#if USE_MSC
-    //----------------------------------
-    // MSC component
-
-    // close endpoints
-    USBD_LL_CloseEP(pdev, MSC_OUT_EP);
-    USBD_LL_CloseEP(pdev, MSC_IN_EP);
-
-    // DeInit the BOT layer
-    MSC_BOT_DeInit(pdev);
-
-    // clear the pointer
-    pdev->pClassData = NULL;
-#endif
-
-    return 0;
-}
-
-static uint8_t USBD_CDC_MSC_Setup(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req) {
-
-    /*
-    printf("SU: %x %x %x %x\n", req->bmRequest, req->bRequest, req->wValue, req->wIndex);
-    This is what we get when MSC is IFACE=0 and CDC is IFACE=1,2:
-        SU: 21 22 0 1 -- USB_REQ_TYPE_CLASS | USB_REQ_RECIPIENT_INTERFACE; CDC_SET_CONTROL_LINE_STATE
-        SU: 21 20 0 1 -- USB_REQ_TYPE_CLASS | USB_REQ_RECIPIENT_INTERFACE; CDC_SET_LINE_CODING
-        SU: a1 fe 0 0 -- 0x80 | USB_REQ_TYPE_CLASS | USB_REQ_RECIPIENT_INTERFACE; BOT_GET_MAX_LUN; 0; 0
-        SU: 21 22 3 1 -- USB_REQ_TYPE_CLASS | USB_REQ_RECIPIENT_INTERFACE; CDC_SET_CONTROL_LINE_STATE
-    */
-
-    switch (req->bmRequest & USB_REQ_TYPE_MASK) {
-
-        // Class request
-        case USB_REQ_TYPE_CLASS:
-            // req->wIndex is the recipient interface number
-            if (0) {
-#if USE_CDC
-            } else if (req->wIndex == CDC_IFACE_NUM) {
-                // CDC component
-                if (req->wLength) {
-                    if (req->bmRequest & 0x80) {
-                        // device-to-host request
-                        CDC_fops->Control(req->bRequest, (uint8_t*)CDC_ClassData.data, req->wLength);
-                        USBD_CtlSendData(pdev, (uint8_t*)CDC_ClassData.data, req->wLength);
-                    } else {
-                        // host-to-device request
-                        CDC_ClassData.CmdOpCode = req->bRequest;
-                        CDC_ClassData.CmdLength = req->wLength;
-                        USBD_CtlPrepareRx(pdev, (uint8_t*)CDC_ClassData.data, req->wLength);
-                    }
-                } else {
-                    // Not a Data request
-                    // Transfer the command to the interface layer
-                    return CDC_fops->Control(req->bRequest, NULL, req->wValue);
-                }
-                break;
-#endif
-#if USE_MSC
-             } else if (req->wIndex == MSC_IFACE_NUM) {
-          // MSC component
-        switch (req->bRequest) {
-        case BOT_GET_MAX_LUN :
-
-          if((req->wValue  == 0) && 
-             (req->wLength == 1) &&
-             ((req->bmRequest & 0x80) == 0x80))
-          {
-            MSC_BOT_ClassData.max_lun = MSC_fops->GetMaxLun();
-            USBD_CtlSendData (pdev, (uint8_t *)&MSC_BOT_ClassData.max_lun, 1);
-          }
-          else
-          {
-             USBD_CtlError(pdev , req);
-             return USBD_FAIL; 
-          }
-          break;
-          
-        case BOT_RESET :
-          if((req->wValue  == 0) && 
-             (req->wLength == 0) &&
-            ((req->bmRequest & 0x80) != 0x80))
-          {      
-             MSC_BOT_Reset(pdev);
-          }
-          else
-          {
-             USBD_CtlError(pdev , req);
-             return USBD_FAIL; 
-          }
-          break;
-
-        default:
-           USBD_CtlError(pdev , req);
-           return USBD_FAIL; 
-        }
-    break;
-      }
-#endif
-      break;
-
-    /* Interface & Endpoint request */
-    case USB_REQ_TYPE_STANDARD:
-#if USE_MSC
-        // MSC only
-        switch (req->bRequest) {
-            case USB_REQ_GET_INTERFACE :
-                USBD_CtlSendData(pdev, (uint8_t *)&MSC_BOT_ClassData.interface, 1);
-                break;
-
-            case USB_REQ_SET_INTERFACE :
-                MSC_BOT_ClassData.interface = (uint8_t)(req->wValue);
-                break;
-
-            case USB_REQ_CLEAR_FEATURE:
-                /* Flush the FIFO and Clear the stall status */
-                USBD_LL_FlushEP(pdev, (uint8_t)req->wIndex);
-
-                /* Re-activate the EP */
-                USBD_LL_CloseEP (pdev , (uint8_t)req->wIndex);
-                if((((uint8_t)req->wIndex) & 0x80) == 0x80) {
-                    /* Open EP IN */
-                    USBD_LL_OpenEP(pdev, MSC_IN_EP, USBD_EP_TYPE_BULK, MSC_MAX_FS_PACKET);
-                } else {
-                    /* Open EP OUT */
-                    USBD_LL_OpenEP(pdev, MSC_OUT_EP, USBD_EP_TYPE_BULK, MSC_MAX_FS_PACKET);
-                }
-                /* Handle BOT error */
-                MSC_BOT_CplClrFeature(pdev, (uint8_t)req->wIndex);
-                break;
-        }
-#endif
-        break;
-    }
-    return USBD_OK;
-}
-
-static uint8_t USBD_CDC_MSC_EP0_RxReady(USBD_HandleTypeDef *pdev) {
-  if((CDC_fops != NULL) && (CDC_ClassData.CmdOpCode != 0xFF)) {
-    CDC_fops->Control(CDC_ClassData.CmdOpCode,
-                                                      (uint8_t *)CDC_ClassData.data,
-                                                      CDC_ClassData.CmdLength);
-      CDC_ClassData.CmdOpCode = 0xFF; 
-      
-  }
-  return USBD_OK;
-}
-
-static uint8_t USBD_CDC_MSC_DataIn(USBD_HandleTypeDef *pdev, uint8_t epnum) {
-    switch (epnum) {
-#if USE_CDC
-        case (CDC_IN_EP & 0x7f):
-        case (CDC_CMD_EP & 0x7f):
-            CDC_ClassData.TxState = 0;
-            return USBD_OK;
-#endif
-
-        case (MSC_IN_EP & 0x7f):
-            MSC_BOT_DataIn(pdev, epnum);
-            return USBD_OK;
-    }
-
-    return USBD_OK;
-}
-
-static uint8_t USBD_CDC_MSC_DataOut(USBD_HandleTypeDef *pdev, uint8_t epnum) {
-    switch (epnum) {
-#if USE_CDC
-        case (CDC_OUT_EP & 0x7f):
-            /* Get the received data length */
-            CDC_ClassData.RxLength = USBD_LL_GetRxDataSize (pdev, epnum);
-
-            /* USB data will be immediately processed, this allow next USB traffic being
-            NAKed till the end of the application Xfer */
-            CDC_fops->Receive(CDC_ClassData.RxBuffer, &CDC_ClassData.RxLength);
-
-            return USBD_OK;
-#endif
-
-        case (MSC_OUT_EP & 0x7f):
-            MSC_BOT_DataOut(pdev, epnum);
-            return USBD_OK;
-    }
-
-    return USBD_OK;
-}
-
-static uint8_t *USBD_CDC_MSC_GetFSCfgDesc(uint16_t *length) {
-    *length = sizeof(USBD_CDC_MSC_CfgFSDesc);
-    return USBD_CDC_MSC_CfgFSDesc;
-}
-
-static uint8_t *USBD_CDC_MSC_GetHSCfgDesc(uint16_t *length) {
-    *length = 0;
-    return USBD_CDC_MSC_CfgFSDesc; // need to return something because the USB driver writes bytes to the result
-}
-
-static uint8_t *USBD_CDC_MSC_GetOtherSpeedCfgDesc (uint16_t *length) {
-    *length = 0;
-    return USBD_CDC_MSC_CfgFSDesc; // need to return something because the USB driver writes bytes to the result
-}
-
-uint8_t *USBD_CDC_MSC_GetDeviceQualifierDescriptor (uint16_t *length) {
-    *length = sizeof(USBD_CDC_MSC_DeviceQualifierDesc);
-    return USBD_CDC_MSC_DeviceQualifierDesc;
-}
-
-uint8_t USBD_CDC_RegisterInterface(USBD_HandleTypeDef *pdev, USBD_CDC_ItfTypeDef *fops) {
-    if (fops == NULL) {
-        return USBD_FAIL;
-    } else {
-        CDC_fops = fops;
-        return USBD_OK;
-    }
-}
-
-/**
-  * @brief  USBD_CDC_SetTxBuffer
-  * @param  pdev: device instance
-  * @param  pbuff: Tx Buffer
-  * @retval status
-  */
-uint8_t  USBD_CDC_SetTxBuffer  (USBD_HandleTypeDef   *pdev,
-                                uint8_t  *pbuff,
-                                uint16_t length)
-{
-  CDC_ClassData.TxBuffer = pbuff;
-  CDC_ClassData.TxLength = length;  
-  
-  return USBD_OK;  
-}
-
-
-/**
-  * @brief  USBD_CDC_SetRxBuffer
-  * @param  pdev: device instance
-  * @param  pbuff: Rx Buffer
-  * @retval status
-  */
-uint8_t  USBD_CDC_SetRxBuffer  (USBD_HandleTypeDef   *pdev,
-                                   uint8_t  *pbuff)
-{
-  CDC_ClassData.RxBuffer = pbuff;
-  
-  return USBD_OK;
-}
-
-/**
-  * @brief  USBD_CDC_DataOut
-  *         Data received on non-control Out endpoint
-  * @param  pdev: device instance
-  * @param  epnum: endpoint number
-  * @retval status
-  */
-uint8_t  USBD_CDC_TransmitPacket(USBD_HandleTypeDef *pdev) {
-    if(CDC_ClassData.TxState == 0) {
-      
-      /* Transmit next packet */
-      USBD_LL_Transmit(pdev,
-                       CDC_IN_EP,
-                       CDC_ClassData.TxBuffer,
-                       CDC_ClassData.TxLength);
-      
-      /* Tx Transfer in progress */
-      CDC_ClassData.TxState = 1;
-      return USBD_OK;
-    }
-    else
-    {
-      return USBD_BUSY;
-    }
-}
-
-
-/**
-  * @brief  USBD_CDC_ReceivePacket
-  *         prepare OUT Endpoint for reception
-  * @param  pdev: device instance
-  * @retval status
-  */
-uint8_t USBD_CDC_ReceivePacket(USBD_HandleTypeDef *pdev) {
-    // Suspend or Resume USB Out process
-    if (pdev->dev_speed == USBD_SPEED_HIGH) {
-        return USBD_FAIL;
-    }
-
-    // Prepare Out endpoint to receive next packet */
-    USBD_LL_PrepareReceive(pdev,
-                           CDC_OUT_EP,
-                           CDC_ClassData.RxBuffer,
-                           CDC_DATA_FS_OUT_PACKET_SIZE);
-
-    return USBD_OK;
-}
-
-uint8_t USBD_MSC_RegisterStorage(USBD_HandleTypeDef *pdev, USBD_StorageTypeDef *fops) {
-    if (fops == NULL) {
-        return USBD_FAIL;
-    } else {
-        MSC_fops = fops;
-        pdev->pUserData = fops; // MSC uses pUserData because SCSI and BOT reference it
-        return USBD_OK;
-    }
-}
-
-// CDC + MSC interface class callbacks structure
-USBD_ClassTypeDef USBD_CDC_MSC = {
-    USBD_CDC_MSC_Init,
-    USBD_CDC_MSC_DeInit,
-    USBD_CDC_MSC_Setup,
-    NULL, // EP0_TxSent
-    USBD_CDC_MSC_EP0_RxReady,
-    USBD_CDC_MSC_DataIn,
-    USBD_CDC_MSC_DataOut,
-    NULL, // SOF
-    NULL,
-    NULL,
-    USBD_CDC_MSC_GetHSCfgDesc,
-    USBD_CDC_MSC_GetFSCfgDesc,
-    USBD_CDC_MSC_GetOtherSpeedCfgDesc,
-    USBD_CDC_MSC_GetDeviceQualifierDescriptor,
-};
diff --git a/stmhal/usbdev/class/cdc_msc/src/usbd_msc_bot.c b/stmhal/usbdev/class/cdc_msc/src/usbd_msc_bot.c
deleted file mode 100644
index 69c34a583..000000000
--- a/stmhal/usbdev/class/cdc_msc/src/usbd_msc_bot.c
+++ /dev/null
@@ -1,407 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    usbd_msc_bot.c
-  * @author  MCD Application Team
-  * @version V2.0.0
-  * @date    18-February-2014
-  * @brief   This file provides all the BOT protocol core functions.
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT 2014 STMicroelectronics</center></h2>
-  *
-  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
-  * You may not use this file except in compliance with the License.
-  * You may obtain a copy of the License at:
-  *
-  *        http://www.st.com/software_license_agreement_liberty_v2
-  *
-  * Unless required by applicable law or agreed to in writing, software 
-  * distributed under the License is distributed on an "AS IS" BASIS, 
-  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  * See the License for the specific language governing permissions and
-  * limitations under the License.
-  *
-  ******************************************************************************
-  */ 
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_msc_bot.h"
-#include "usbd_msc_scsi.h"
-#include "usbd_cdc_msc.h"
-#include "usbd_ioreq.h"
-
-/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
-  * @{
-  */
-
-
-/** @defgroup MSC_BOT 
-  * @brief BOT protocol module
-  * @{
-  */ 
-
-/** @defgroup MSC_BOT_Private_TypesDefinitions
-  * @{
-  */ 
-/**
-  * @}
-  */ 
-
-
-/** @defgroup MSC_BOT_Private_Defines
-  * @{
-  */ 
-
-/**
-  * @}
-  */ 
-
-
-/** @defgroup MSC_BOT_Private_Macros
-  * @{
-  */ 
-/**
-  * @}
-  */ 
-
-
-/** @defgroup MSC_BOT_Private_Variables
-  * @{
-  */ 
-
-/**
-  * @}
-  */ 
-
-
-/** @defgroup MSC_BOT_Private_FunctionPrototypes
-  * @{
-  */ 
-static void MSC_BOT_CBW_Decode (USBD_HandleTypeDef  *pdev);
-
-static void MSC_BOT_SendData (USBD_HandleTypeDef  *pdev, 
-                              uint8_t* pbuf, 
-                              uint16_t len);
-
-static void MSC_BOT_Abort(USBD_HandleTypeDef  *pdev);
-/**
-  * @}
-  */ 
-
-
-/** @defgroup MSC_BOT_Private_Functions
-  * @{
-  */ 
-
-
-
-/**
-* @brief  MSC_BOT_Init
-*         Initialize the BOT Process
-* @param  pdev: device instance
-* @retval None
-*/
-void MSC_BOT_Init (USBD_HandleTypeDef  *pdev)
-{
-  USBD_MSC_BOT_HandleTypeDef  *hmsc = pdev->pClassData;
-    
-  hmsc->bot_state  = USBD_BOT_IDLE;
-  hmsc->bot_status = USBD_BOT_STATUS_NORMAL;
-  
-  hmsc->scsi_sense_tail = 0;
-  hmsc->scsi_sense_head = 0;
-  
-  ((USBD_StorageTypeDef *)pdev->pUserData)->Init(0);
-  
-  USBD_LL_FlushEP(pdev, MSC_OUT_EP);
-  USBD_LL_FlushEP(pdev, MSC_IN_EP);
-  
-  /* Prapare EP to Receive First BOT Cmd */
-  USBD_LL_PrepareReceive (pdev,
-                          MSC_OUT_EP,
-                          (uint8_t *)&hmsc->cbw,
-                          USBD_BOT_CBW_LENGTH);    
-}
-
-/**
-* @brief  MSC_BOT_Reset
-*         Reset the BOT Machine
-* @param  pdev: device instance
-* @retval  None
-*/
-void MSC_BOT_Reset (USBD_HandleTypeDef  *pdev)
-{
-  USBD_MSC_BOT_HandleTypeDef  *hmsc = pdev->pClassData;
-    
-  hmsc->bot_state  = USBD_BOT_IDLE;
-  hmsc->bot_status = USBD_BOT_STATUS_RECOVERY;  
-  
-  /* Prapare EP to Receive First BOT Cmd */
-  USBD_LL_PrepareReceive (pdev,
-                          MSC_OUT_EP,
-                          (uint8_t *)&hmsc->cbw,
-                          USBD_BOT_CBW_LENGTH);   
-}
-
-/**
-* @brief  MSC_BOT_DeInit
-*         Uninitialize the BOT Machine
-* @param  pdev: device instance
-* @retval None
-*/
-void MSC_BOT_DeInit (USBD_HandleTypeDef  *pdev)
-{
-  USBD_MSC_BOT_HandleTypeDef  *hmsc = pdev->pClassData;  
-  hmsc->bot_state  = USBD_BOT_IDLE;
-}
-
-/**
-* @brief  MSC_BOT_DataIn
-*         Handle BOT IN data stage
-* @param  pdev: device instance
-* @param  epnum: endpoint index
-* @retval None
-*/
-void MSC_BOT_DataIn (USBD_HandleTypeDef  *pdev, 
-                     uint8_t epnum)
-{
-  USBD_MSC_BOT_HandleTypeDef  *hmsc = pdev->pClassData;  
-  
-  switch (hmsc->bot_state)
-  {
-  case USBD_BOT_DATA_IN:
-    if(SCSI_ProcessCmd(pdev,
-                        hmsc->cbw.bLUN,
-                        &hmsc->cbw.CB[0]) < 0)
-    {
-      MSC_BOT_SendCSW (pdev, USBD_CSW_CMD_FAILED);
-    }
-    break;
-    
-  case USBD_BOT_SEND_DATA:
-  case USBD_BOT_LAST_DATA_IN:
-    MSC_BOT_SendCSW (pdev, USBD_CSW_CMD_PASSED);
-    
-    break;
-    
-  default:
-    break;
-  }
-}
-/**
-* @brief  MSC_BOT_DataOut
-*         Proccess MSC OUT data
-* @param  pdev: device instance
-* @param  epnum: endpoint index
-* @retval None
-*/
-void MSC_BOT_DataOut (USBD_HandleTypeDef  *pdev, 
-                      uint8_t epnum)
-{
-  USBD_MSC_BOT_HandleTypeDef  *hmsc = pdev->pClassData;
-  
-  switch (hmsc->bot_state)
-  {
-  case USBD_BOT_IDLE:
-    MSC_BOT_CBW_Decode(pdev);
-    break;
-    
-  case USBD_BOT_DATA_OUT:
-    
-    if(SCSI_ProcessCmd(pdev,
-                        hmsc->cbw.bLUN,
-                        &hmsc->cbw.CB[0]) < 0)
-    {
-      MSC_BOT_SendCSW (pdev, USBD_CSW_CMD_FAILED);
-    }
-
-    break;
-    
-  default:
-    break;
-  }
-}
-
-/**
-* @brief  MSC_BOT_CBW_Decode
-*         Decode the CBW command and set the BOT state machine accordingtly  
-* @param  pdev: device instance
-* @retval None
-*/
-static void  MSC_BOT_CBW_Decode (USBD_HandleTypeDef  *pdev)
-{
-  USBD_MSC_BOT_HandleTypeDef  *hmsc = pdev->pClassData;  
-  
-  hmsc->csw.dTag = hmsc->cbw.dTag;
-  hmsc->csw.dDataResidue = hmsc->cbw.dDataLength;
-  
-  if ((USBD_LL_GetRxDataSize (pdev ,MSC_OUT_EP) != USBD_BOT_CBW_LENGTH) ||
-      (hmsc->cbw.dSignature != USBD_BOT_CBW_SIGNATURE)||
-        (hmsc->cbw.bLUN > 1) || 
-          (hmsc->cbw.bCBLength < 1) || 
-            (hmsc->cbw.bCBLength > 16))
-  {
-    
-    SCSI_SenseCode(pdev,
-                   hmsc->cbw.bLUN, 
-                   ILLEGAL_REQUEST, 
-                   INVALID_CDB);
-    
-    hmsc->bot_status = USBD_BOT_STATUS_ERROR;   
-    MSC_BOT_Abort(pdev);
- 
-  }
-  else
-  {
-    if(SCSI_ProcessCmd(pdev,
-                       hmsc->cbw.bLUN,
-                       &hmsc->cbw.CB[0]) < 0)
-    {
-      if(hmsc->bot_state == USBD_BOT_NO_DATA)
-      {
-       MSC_BOT_SendCSW (pdev,
-                         USBD_CSW_CMD_FAILED); 
-      }
-      else
-      {
-        MSC_BOT_Abort(pdev);
-      }
-    }
-    /*Burst xfer handled internally*/
-    else if ((hmsc->bot_state != USBD_BOT_DATA_IN) && 
-             (hmsc->bot_state != USBD_BOT_DATA_OUT) &&
-             (hmsc->bot_state != USBD_BOT_LAST_DATA_IN)) 
-    {
-      if (hmsc->bot_data_length > 0)
-      {
-        MSC_BOT_SendData(pdev,
-                         hmsc->bot_data, 
-                         hmsc->bot_data_length);
-      }
-      else if (hmsc->bot_data_length == 0) 
-      {
-        MSC_BOT_SendCSW (pdev,
-                         USBD_CSW_CMD_PASSED);
-      }
-    }
-  }
-}
-
-/**
-* @brief  MSC_BOT_SendData
-*         Send the requested data
-* @param  pdev: device instance
-* @param  buf: pointer to data buffer
-* @param  len: Data Length
-* @retval None
-*/
-static void  MSC_BOT_SendData(USBD_HandleTypeDef  *pdev,
-                              uint8_t* buf, 
-                              uint16_t len)
-{
-  USBD_MSC_BOT_HandleTypeDef  *hmsc = pdev->pClassData; 
-  
-  len = MIN (hmsc->cbw.dDataLength, len);
-  hmsc->csw.dDataResidue -= len;
-  hmsc->csw.bStatus = USBD_CSW_CMD_PASSED;
-  hmsc->bot_state = USBD_BOT_SEND_DATA;
-  
-  USBD_LL_Transmit (pdev, MSC_IN_EP, buf, len);  
-}
-
-/**
-* @brief  MSC_BOT_SendCSW
-*         Send the Command Status Wrapper
-* @param  pdev: device instance
-* @param  status : CSW status
-* @retval None
-*/
-void  MSC_BOT_SendCSW (USBD_HandleTypeDef  *pdev,
-                              uint8_t CSW_Status)
-{
-  USBD_MSC_BOT_HandleTypeDef  *hmsc = pdev->pClassData; 
-  
-  hmsc->csw.dSignature = USBD_BOT_CSW_SIGNATURE;
-  hmsc->csw.bStatus = CSW_Status;
-  hmsc->bot_state = USBD_BOT_IDLE;
-  
-  USBD_LL_Transmit (pdev, 
-             MSC_IN_EP, 
-             (uint8_t *)&hmsc->csw, 
-             USBD_BOT_CSW_LENGTH);
-  
-  /* Prapare EP to Receive next Cmd */
-  USBD_LL_PrepareReceive (pdev,
-                    MSC_OUT_EP,
-                    (uint8_t *)&hmsc->cbw, 
-                    USBD_BOT_CBW_LENGTH);  
-  
-}
-
-/**
-* @brief  MSC_BOT_Abort
-*         Abort the current transfer
-* @param  pdev: device instance
-* @retval status
-*/
-
-static void  MSC_BOT_Abort (USBD_HandleTypeDef  *pdev)
-{
-  USBD_MSC_BOT_HandleTypeDef  *hmsc = pdev->pClassData; 
-  
-  if ((hmsc->cbw.bmFlags == 0) && 
-      (hmsc->cbw.dDataLength != 0) &&
-      (hmsc->bot_status == USBD_BOT_STATUS_NORMAL) )
-  {
-    USBD_LL_StallEP(pdev, MSC_OUT_EP );
-  }
-  USBD_LL_StallEP(pdev, MSC_IN_EP);
-  
-  if(hmsc->bot_status == USBD_BOT_STATUS_ERROR)
-  {
-    USBD_LL_PrepareReceive (pdev,
-                      MSC_OUT_EP,
-                      (uint8_t *)&hmsc->cbw, 
-                      USBD_BOT_CBW_LENGTH);    
-  }
-}
-
-/**
-* @brief  MSC_BOT_CplClrFeature
-*         Complete the clear feature request
-* @param  pdev: device instance
-* @param  epnum: endpoint index
-* @retval None
-*/
-
-void  MSC_BOT_CplClrFeature (USBD_HandleTypeDef  *pdev, uint8_t epnum)
-{
-  USBD_MSC_BOT_HandleTypeDef  *hmsc = pdev->pClassData; 
-  
-  if(hmsc->bot_status == USBD_BOT_STATUS_ERROR )/* Bad CBW Signature */
-  {
-    USBD_LL_StallEP(pdev, MSC_IN_EP);
-    hmsc->bot_status = USBD_BOT_STATUS_NORMAL;    
-  }
-  else if(((epnum & 0x80) == 0x80) && ( hmsc->bot_status != USBD_BOT_STATUS_RECOVERY))
-  {
-    MSC_BOT_SendCSW (pdev, USBD_CSW_CMD_FAILED);
-  }
-  
-}
-/**
-  * @}
-  */ 
-
-
-/**
-  * @}
-  */ 
-
-
-/**
-  * @}
-  */ 
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/stmhal/usbdev/class/cdc_msc/src/usbd_msc_scsi.c b/stmhal/usbdev/class/cdc_msc/src/usbd_msc_scsi.c
deleted file mode 100644
index dd3de90fe..000000000
--- a/stmhal/usbdev/class/cdc_msc/src/usbd_msc_scsi.c
+++ /dev/null
@@ -1,770 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    usbd_msc_scsi.c
-  * @author  MCD Application Team
-  * @version V2.0.0
-  * @date    18-February-2014
-  * @brief   This file provides all the USBD SCSI layer functions.
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT 2014 STMicroelectronics</center></h2>
-  *
-  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
-  * You may not use this file except in compliance with the License.
-  * You may obtain a copy of the License at:
-  *
-  *        http://www.st.com/software_license_agreement_liberty_v2
-  *
-  * Unless required by applicable law or agreed to in writing, software 
-  * distributed under the License is distributed on an "AS IS" BASIS, 
-  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  * See the License for the specific language governing permissions and
-  * limitations under the License.
-  *
-  ******************************************************************************
-  */ 
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_msc_bot.h"
-#include "usbd_msc_scsi.h"
-#include "usbd_msc_data.h"
-#include "usbd_cdc_msc.h"
-
-
-
-/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
-  * @{
-  */
-
-
-/** @defgroup MSC_SCSI 
-  * @brief Mass storage SCSI layer module
-  * @{
-  */ 
-
-/** @defgroup MSC_SCSI_Private_TypesDefinitions
-  * @{
-  */ 
-/**
-  * @}
-  */ 
-
-
-/** @defgroup MSC_SCSI_Private_Defines
-  * @{
-  */ 
-
-/**
-  * @}
-  */ 
-
-
-/** @defgroup MSC_SCSI_Private_Macros
-  * @{
-  */ 
-/**
-  * @}
-  */ 
-
-
-/** @defgroup MSC_SCSI_Private_Variables
-  * @{
-  */ 
-
-/**
-  * @}
-  */ 
-
-
-/** @defgroup MSC_SCSI_Private_FunctionPrototypes
-  * @{
-  */ 
-static int8_t SCSI_TestUnitReady(USBD_HandleTypeDef  *pdev, uint8_t lun, uint8_t *params);
-static int8_t SCSI_Inquiry(USBD_HandleTypeDef  *pdev, uint8_t lun, uint8_t *params);
-static int8_t SCSI_ReadFormatCapacity(USBD_HandleTypeDef  *pdev, uint8_t lun, uint8_t *params);
-static int8_t SCSI_ReadCapacity10(USBD_HandleTypeDef  *pdev, uint8_t lun, uint8_t *params);
-static int8_t SCSI_RequestSense (USBD_HandleTypeDef  *pdev, uint8_t lun, uint8_t *params);
-static int8_t SCSI_StartStopUnit(USBD_HandleTypeDef  *pdev, uint8_t lun, uint8_t *params);
-static int8_t SCSI_ModeSense6 (USBD_HandleTypeDef  *pdev, uint8_t lun, uint8_t *params);
-static int8_t SCSI_ModeSense10 (USBD_HandleTypeDef  *pdev, uint8_t lun, uint8_t *params);
-static int8_t SCSI_Write10(USBD_HandleTypeDef  *pdev, uint8_t lun , uint8_t *params);
-static int8_t SCSI_Read10(USBD_HandleTypeDef  *pdev, uint8_t lun , uint8_t *params);
-static int8_t SCSI_Verify10(USBD_HandleTypeDef  *pdev, uint8_t lun, uint8_t *params);
-static int8_t SCSI_CheckAddressRange (USBD_HandleTypeDef  *pdev, 
-                                      uint8_t lun , 
-                                      uint32_t blk_offset , 
-                                      uint16_t blk_nbr);
-static int8_t SCSI_ProcessRead (USBD_HandleTypeDef  *pdev,
-                                uint8_t lun);
-
-static int8_t SCSI_ProcessWrite (USBD_HandleTypeDef  *pdev,
-                                 uint8_t lun);
-/**
-  * @}
-  */ 
-
-
-/** @defgroup MSC_SCSI_Private_Functions
-  * @{
-  */ 
-
-
-/**
-* @brief  SCSI_ProcessCmd
-*         Process SCSI commands
-* @param  pdev: device instance
-* @param  lun: Logical unit number
-* @param  params: Command parameters
-* @retval status
-*/
-int8_t SCSI_ProcessCmd(USBD_HandleTypeDef  *pdev,
-                           uint8_t lun, 
-                           uint8_t *params)
-{
-  
-  switch (params[0])
-  {
-  case SCSI_TEST_UNIT_READY:
-    return SCSI_TestUnitReady(pdev, lun, params);
-    
-  case SCSI_REQUEST_SENSE:
-    return SCSI_RequestSense (pdev, lun, params);
-  case SCSI_INQUIRY:
-    return SCSI_Inquiry(pdev, lun, params);
-    
-  case SCSI_START_STOP_UNIT:
-    return SCSI_StartStopUnit(pdev, lun, params);
-    
-  case SCSI_ALLOW_MEDIUM_REMOVAL:
-    return SCSI_StartStopUnit(pdev, lun, params);
-    
-  case SCSI_MODE_SENSE6:
-    return SCSI_ModeSense6 (pdev, lun, params);
-    
-  case SCSI_MODE_SENSE10:
-    return SCSI_ModeSense10 (pdev, lun, params);
-    
-  case SCSI_READ_FORMAT_CAPACITIES:
-    return SCSI_ReadFormatCapacity(pdev, lun, params);
-    
-  case SCSI_READ_CAPACITY10:
-    return SCSI_ReadCapacity10(pdev, lun, params);
-    
-  case SCSI_READ10:
-    return SCSI_Read10(pdev, lun, params); 
-    
-  case SCSI_WRITE10:
-    return SCSI_Write10(pdev, lun, params);
-    
-  case SCSI_VERIFY10:
-    return SCSI_Verify10(pdev, lun, params);
-    
-  default:
-    SCSI_SenseCode(pdev, 
-                   lun,
-                   ILLEGAL_REQUEST, 
-                   INVALID_CDB);    
-    return -1;
-  }
-}
-
-
-/**
-* @brief  SCSI_TestUnitReady
-*         Process SCSI Test Unit Ready Command
-* @param  lun: Logical unit number
-* @param  params: Command parameters
-* @retval status
-*/
-static int8_t SCSI_TestUnitReady(USBD_HandleTypeDef  *pdev, uint8_t lun, uint8_t *params)
-{
-  USBD_MSC_BOT_HandleTypeDef  *hmsc = pdev->pClassData;  
-    
-  /* case 9 : Hi > D0 */
-  if (hmsc->cbw.dDataLength != 0)
-  {
-    SCSI_SenseCode(pdev,
-                   hmsc->cbw.bLUN, 
-                   ILLEGAL_REQUEST, 
-                   INVALID_CDB);
-    return -1;
-  }  
-  
-  if(((USBD_StorageTypeDef *)pdev->pUserData)->IsReady(lun) !=0 )
-  {
-    SCSI_SenseCode(pdev,
-                   lun,
-                   NOT_READY, 
-                   MEDIUM_NOT_PRESENT);
-    
-    hmsc->bot_state = USBD_BOT_NO_DATA;
-    return -1;
-  } 
-  hmsc->bot_data_length = 0;
-  return 0;
-}
-
-/**
-* @brief  SCSI_Inquiry
-*         Process Inquiry command
-* @param  lun: Logical unit number
-* @param  params: Command parameters
-* @retval status
-*/
-static int8_t  SCSI_Inquiry(USBD_HandleTypeDef  *pdev, uint8_t lun, uint8_t *params)
-{
-  uint8_t* pPage;
-  uint16_t len;
-  USBD_MSC_BOT_HandleTypeDef  *hmsc = pdev->pClassData; 
-  
-  if (params[1] & 0x01)/*Evpd is set*/
-  {
-    pPage = (uint8_t *)MSC_Page00_Inquiry_Data;
-    len = LENGTH_INQUIRY_PAGE00;
-  }
-  else
-  {
-    
-    pPage = (uint8_t *)&((USBD_StorageTypeDef *)pdev->pUserData)->pInquiry[lun * STANDARD_INQUIRY_DATA_LEN];
-    len = pPage[4] + 5;
-    
-    if (params[4] <= len)
-    {
-      len = params[4];
-    }
-  }
-  hmsc->bot_data_length = len;
-  
-  while (len) 
-  {
-    len--;
-    hmsc->bot_data[len] = pPage[len];
-  }
-  return 0;
-}
-
-/**
-* @brief  SCSI_ReadCapacity10
-*         Process Read Capacity 10 command
-* @param  lun: Logical unit number
-* @param  params: Command parameters
-* @retval status
-*/
-static int8_t SCSI_ReadCapacity10(USBD_HandleTypeDef  *pdev, uint8_t lun, uint8_t *params)
-{
-  USBD_MSC_BOT_HandleTypeDef  *hmsc = pdev->pClassData; 
-  
-  if(((USBD_StorageTypeDef *)pdev->pUserData)->GetCapacity(lun, &hmsc->scsi_blk_nbr, &hmsc->scsi_blk_size) != 0)
-  {
-    SCSI_SenseCode(pdev,
-                   lun,
-                   NOT_READY, 
-                   MEDIUM_NOT_PRESENT);
-    return -1;
-  } 
-  else
-  {
-    
-    hmsc->bot_data[0] = (uint8_t)((hmsc->scsi_blk_nbr - 1) >> 24);
-    hmsc->bot_data[1] = (uint8_t)((hmsc->scsi_blk_nbr - 1) >> 16);
-    hmsc->bot_data[2] = (uint8_t)((hmsc->scsi_blk_nbr - 1) >>  8);
-    hmsc->bot_data[3] = (uint8_t)(hmsc->scsi_blk_nbr - 1);
-    
-    hmsc->bot_data[4] = (uint8_t)(hmsc->scsi_blk_size >>  24);
-    hmsc->bot_data[5] = (uint8_t)(hmsc->scsi_blk_size >>  16);
-    hmsc->bot_data[6] = (uint8_t)(hmsc->scsi_blk_size >>  8);
-    hmsc->bot_data[7] = (uint8_t)(hmsc->scsi_blk_size);
-    
-    hmsc->bot_data_length = 8;
-    return 0;
-  }
-}
-/**
-* @brief  SCSI_ReadFormatCapacity
-*         Process Read Format Capacity command
-* @param  lun: Logical unit number
-* @param  params: Command parameters
-* @retval status
-*/
-static int8_t SCSI_ReadFormatCapacity(USBD_HandleTypeDef  *pdev, uint8_t lun, uint8_t *params)
-{
-  USBD_MSC_BOT_HandleTypeDef  *hmsc = pdev->pClassData; 
-  
-  uint16_t blk_size;
-  uint32_t blk_nbr;
-  uint16_t i;
-  
-  for(i=0 ; i < 12 ; i++) 
-  {
-    hmsc->bot_data[i] = 0;
-  }
-  
-  if(((USBD_StorageTypeDef *)pdev->pUserData)->GetCapacity(lun, &blk_nbr, &blk_size) != 0)
-  {
-    SCSI_SenseCode(pdev,
-                   lun,
-                   NOT_READY, 
-                   MEDIUM_NOT_PRESENT);
-    return -1;
-  } 
-  else
-  {
-    hmsc->bot_data[3] = 0x08;
-    hmsc->bot_data[4] = (uint8_t)((blk_nbr - 1) >> 24);
-    hmsc->bot_data[5] = (uint8_t)((blk_nbr - 1) >> 16);
-    hmsc->bot_data[6] = (uint8_t)((blk_nbr - 1) >>  8);
-    hmsc->bot_data[7] = (uint8_t)(blk_nbr - 1);
-    
-    hmsc->bot_data[8] = 0x02;
-    hmsc->bot_data[9] = (uint8_t)(blk_size >>  16);
-    hmsc->bot_data[10] = (uint8_t)(blk_size >>  8);
-    hmsc->bot_data[11] = (uint8_t)(blk_size);
-    
-    hmsc->bot_data_length = 12;
-    return 0;
-  }
-}
-/**
-* @brief  SCSI_ModeSense6
-*         Process Mode Sense6 command
-* @param  lun: Logical unit number
-* @param  params: Command parameters
-* @retval status
-*/
-static int8_t SCSI_ModeSense6 (USBD_HandleTypeDef  *pdev, uint8_t lun, uint8_t *params)
-{
-  USBD_MSC_BOT_HandleTypeDef  *hmsc = pdev->pClassData; 
-  uint16_t len = 8 ;
-  hmsc->bot_data_length = len;
-  
-  while (len) 
-  {
-    len--;
-    hmsc->bot_data[len] = MSC_Mode_Sense6_data[len];
-  }
-  return 0;
-}
-
-/**
-* @brief  SCSI_ModeSense10
-*         Process Mode Sense10 command
-* @param  lun: Logical unit number
-* @param  params: Command parameters
-* @retval status
-*/
-static int8_t SCSI_ModeSense10 (USBD_HandleTypeDef  *pdev, uint8_t lun, uint8_t *params)
-{
-  uint16_t len = 8;
-  USBD_MSC_BOT_HandleTypeDef  *hmsc = pdev->pClassData; 
-  
-  hmsc->bot_data_length = len;
-
-  while (len) 
-  {
-    len--;
-    hmsc->bot_data[len] = MSC_Mode_Sense10_data[len];
-  }
-  return 0;
-}
-
-/**
-* @brief  SCSI_RequestSense
-*         Process Request Sense command
-* @param  lun: Logical unit number
-* @param  params: Command parameters
-* @retval status
-*/
-
-static int8_t SCSI_RequestSense (USBD_HandleTypeDef  *pdev, uint8_t lun, uint8_t *params)
-{
-  uint8_t i;
-  USBD_MSC_BOT_HandleTypeDef  *hmsc = pdev->pClassData; 
-  
-  for(i=0 ; i < REQUEST_SENSE_DATA_LEN ; i++) 
-  {
-    hmsc->bot_data[i] = 0;
-  }
-  
-  hmsc->bot_data[0]	= 0x70;		
-  hmsc->bot_data[7]	= REQUEST_SENSE_DATA_LEN - 6;	
-  
-  if((hmsc->scsi_sense_head != hmsc->scsi_sense_tail)) {
-    
-    hmsc->bot_data[2]     = hmsc->scsi_sense[hmsc->scsi_sense_head].Skey;		
-    hmsc->bot_data[12]    = hmsc->scsi_sense[hmsc->scsi_sense_head].w.b.ASCQ;	
-    hmsc->bot_data[13]    = hmsc->scsi_sense[hmsc->scsi_sense_head].w.b.ASC;	
-    hmsc->scsi_sense_head++;
-    
-    if (hmsc->scsi_sense_head == SENSE_LIST_DEEPTH)
-    {
-      hmsc->scsi_sense_head = 0;
-    }
-  }
-  hmsc->bot_data_length = REQUEST_SENSE_DATA_LEN;  
-  
-  if (params[4] <= REQUEST_SENSE_DATA_LEN)
-  {
-    hmsc->bot_data_length = params[4];
-  }
-  return 0;
-}
-
-/**
-* @brief  SCSI_SenseCode
-*         Load the last error code in the error list
-* @param  lun: Logical unit number
-* @param  sKey: Sense Key
-* @param  ASC: Additional Sense Key
-* @retval none
-
-*/
-void SCSI_SenseCode(USBD_HandleTypeDef  *pdev, uint8_t lun, uint8_t sKey, uint8_t ASC)
-{
-  USBD_MSC_BOT_HandleTypeDef  *hmsc = pdev->pClassData; 
-  
-  hmsc->scsi_sense[hmsc->scsi_sense_tail].Skey  = sKey;
-  hmsc->scsi_sense[hmsc->scsi_sense_tail].w.ASC = ASC << 8;
-  hmsc->scsi_sense_tail++;
-  if (hmsc->scsi_sense_tail == SENSE_LIST_DEEPTH)
-  {
-    hmsc->scsi_sense_tail = 0;
-  }
-}
-/**
-* @brief  SCSI_StartStopUnit
-*         Process Start Stop Unit command
-* @param  lun: Logical unit number
-* @param  params: Command parameters
-* @retval status
-*/
-static int8_t SCSI_StartStopUnit(USBD_HandleTypeDef  *pdev, uint8_t lun, uint8_t *params)
-{
-  USBD_MSC_BOT_HandleTypeDef  *hmsc = pdev->pClassData;   
-  hmsc->bot_data_length = 0;
-  return 0;
-}
-
-/**
-* @brief  SCSI_Read10
-*         Process Read10 command
-* @param  lun: Logical unit number
-* @param  params: Command parameters
-* @retval status
-*/
-static int8_t SCSI_Read10(USBD_HandleTypeDef  *pdev, uint8_t lun , uint8_t *params)
-{
-  USBD_MSC_BOT_HandleTypeDef  *hmsc = pdev->pClassData; 
-  
-  if(hmsc->bot_state == USBD_BOT_IDLE)  /* Idle */
-  {
-    
-    /* case 10 : Ho <> Di */
-    
-    if ((hmsc->cbw.bmFlags & 0x80) != 0x80)
-    {
-      SCSI_SenseCode(pdev,
-                     hmsc->cbw.bLUN, 
-                     ILLEGAL_REQUEST, 
-                     INVALID_CDB);
-      return -1;
-    }    
-    
-    if(((USBD_StorageTypeDef *)pdev->pUserData)->IsReady(lun) !=0 )
-    {
-      SCSI_SenseCode(pdev,
-                     lun,
-                     NOT_READY, 
-                     MEDIUM_NOT_PRESENT);
-      return -1;
-    } 
-    
-    hmsc->scsi_blk_addr = (params[2] << 24) | \
-      (params[3] << 16) | \
-        (params[4] <<  8) | \
-          params[5];
-    
-    hmsc->scsi_blk_len =  (params[7] <<  8) | \
-      params[8];  
-    
-    
-    
-    if( SCSI_CheckAddressRange(pdev, lun, hmsc->scsi_blk_addr, hmsc->scsi_blk_len) < 0)
-    {
-      return -1; /* error */
-    }
-    
-    hmsc->bot_state = USBD_BOT_DATA_IN;
-    hmsc->scsi_blk_addr *= hmsc->scsi_blk_size;
-    hmsc->scsi_blk_len  *= hmsc->scsi_blk_size;
-    
-    /* cases 4,5 : Hi <> Dn */
-    if (hmsc->cbw.dDataLength != hmsc->scsi_blk_len)
-    {
-      SCSI_SenseCode(pdev,
-                     hmsc->cbw.bLUN, 
-                     ILLEGAL_REQUEST, 
-                     INVALID_CDB);
-      return -1;
-    }
-  }
-  hmsc->bot_data_length = MSC_MEDIA_PACKET;  
-  
-  return SCSI_ProcessRead(pdev, lun);
-}
-
-/**
-* @brief  SCSI_Write10
-*         Process Write10 command
-* @param  lun: Logical unit number
-* @param  params: Command parameters
-* @retval status
-*/
-
-static int8_t SCSI_Write10 (USBD_HandleTypeDef  *pdev, uint8_t lun , uint8_t *params)
-{
-  USBD_MSC_BOT_HandleTypeDef  *hmsc = pdev->pClassData; 
-  
-  if (hmsc->bot_state == USBD_BOT_IDLE) /* Idle */
-  {
-    
-    /* case 8 : Hi <> Do */
-    
-    if ((hmsc->cbw.bmFlags & 0x80) == 0x80)
-    {
-      SCSI_SenseCode(pdev,
-                     hmsc->cbw.bLUN, 
-                     ILLEGAL_REQUEST, 
-                     INVALID_CDB);
-      return -1;
-    }
-    
-    /* Check whether Media is ready */
-    if(((USBD_StorageTypeDef *)pdev->pUserData)->IsReady(lun) !=0 )
-    {
-      SCSI_SenseCode(pdev,
-                     lun,
-                     NOT_READY, 
-                     MEDIUM_NOT_PRESENT);
-      return -1;
-    } 
-    
-    /* Check If media is write-protected */
-    if(((USBD_StorageTypeDef *)pdev->pUserData)->IsWriteProtected(lun) !=0 )
-    {
-      SCSI_SenseCode(pdev,
-                     lun,
-                     NOT_READY, 
-                     WRITE_PROTECTED);
-      return -1;
-    } 
-    
-    
-    hmsc->scsi_blk_addr = (params[2] << 24) | \
-      (params[3] << 16) | \
-        (params[4] <<  8) | \
-          params[5];
-    hmsc->scsi_blk_len = (params[7] <<  8) | \
-      params[8];  
-    
-    /* check if LBA address is in the right range */
-    if(SCSI_CheckAddressRange(pdev,
-                              lun,
-                              hmsc->scsi_blk_addr,
-                              hmsc->scsi_blk_len) < 0)
-    {
-      return -1; /* error */      
-    }
-    
-    hmsc->scsi_blk_addr *= hmsc->scsi_blk_size;
-    hmsc->scsi_blk_len  *= hmsc->scsi_blk_size;
-    
-    /* cases 3,11,13 : Hn,Ho <> D0 */
-    if (hmsc->cbw.dDataLength != hmsc->scsi_blk_len)
-    {
-      SCSI_SenseCode(pdev,
-                     hmsc->cbw.bLUN, 
-                     ILLEGAL_REQUEST, 
-                     INVALID_CDB);
-      return -1;
-    }
-    
-    /* Prepare EP to receive first data packet */
-    hmsc->bot_state = USBD_BOT_DATA_OUT;  
-    USBD_LL_PrepareReceive (pdev,
-                      MSC_OUT_EP,
-                      hmsc->bot_data, 
-                      MIN (hmsc->scsi_blk_len, MSC_MEDIA_PACKET));  
-  }
-  else /* Write Process ongoing */
-  {
-    return SCSI_ProcessWrite(pdev, lun);
-  }
-  return 0;
-}
-
-
-/**
-* @brief  SCSI_Verify10
-*         Process Verify10 command
-* @param  lun: Logical unit number
-* @param  params: Command parameters
-* @retval status
-*/
-
-static int8_t SCSI_Verify10(USBD_HandleTypeDef  *pdev, uint8_t lun , uint8_t *params)
-{
-  USBD_MSC_BOT_HandleTypeDef  *hmsc = pdev->pClassData; 
-  
-  if ((params[1]& 0x02) == 0x02) 
-  {
-    SCSI_SenseCode (pdev,
-                    lun, 
-                    ILLEGAL_REQUEST, 
-                    INVALID_FIELED_IN_COMMAND);
-    return -1; /* Error, Verify Mode Not supported*/
-  }
-  
-  if(SCSI_CheckAddressRange(pdev,
-                            lun, 
-                            hmsc->scsi_blk_addr, 
-                            hmsc->scsi_blk_len) < 0)
-  {
-    return -1; /* error */      
-  }
-  hmsc->bot_data_length = 0;
-  return 0;
-}
-
-/**
-* @brief  SCSI_CheckAddressRange
-*         Check address range
-* @param  lun: Logical unit number
-* @param  blk_offset: first block address
-* @param  blk_nbr: number of block to be processed
-* @retval status
-*/
-static int8_t SCSI_CheckAddressRange (USBD_HandleTypeDef  *pdev, uint8_t lun , uint32_t blk_offset , uint16_t blk_nbr)
-{
-  USBD_MSC_BOT_HandleTypeDef  *hmsc = pdev->pClassData; 
-  
-  if ((blk_offset + blk_nbr) > hmsc->scsi_blk_nbr )
-  {
-    SCSI_SenseCode(pdev,
-                   lun, 
-                   ILLEGAL_REQUEST, 
-                   ADDRESS_OUT_OF_RANGE);
-    return -1;
-  }
-  return 0;
-}
-
-/**
-* @brief  SCSI_ProcessRead
-*         Handle Read Process
-* @param  lun: Logical unit number
-* @retval status
-*/
-static int8_t SCSI_ProcessRead (USBD_HandleTypeDef  *pdev, uint8_t lun)
-{
-  USBD_MSC_BOT_HandleTypeDef  *hmsc = pdev->pClassData;   
-  uint32_t len;
-  
-  len = MIN(hmsc->scsi_blk_len , MSC_MEDIA_PACKET); 
-  
-  if( ((USBD_StorageTypeDef *)pdev->pUserData)->Read(lun ,
-                              hmsc->bot_data, 
-                              hmsc->scsi_blk_addr / hmsc->scsi_blk_size, 
-                              len / hmsc->scsi_blk_size) < 0)
-  {
-    
-    SCSI_SenseCode(pdev,
-                   lun, 
-                   HARDWARE_ERROR, 
-                   UNRECOVERED_READ_ERROR);
-    return -1; 
-  }
-  
-  
-  USBD_LL_Transmit (pdev, 
-             MSC_IN_EP,
-             hmsc->bot_data,
-             len);
-  
-  
-  hmsc->scsi_blk_addr   += len; 
-  hmsc->scsi_blk_len    -= len;  
-  
-  /* case 6 : Hi = Di */
-  hmsc->csw.dDataResidue -= len;
-  
-  if (hmsc->scsi_blk_len == 0)
-  {
-    hmsc->bot_state = USBD_BOT_LAST_DATA_IN;
-  }
-  return 0;
-}
-
-/**
-* @brief  SCSI_ProcessWrite
-*         Handle Write Process
-* @param  lun: Logical unit number
-* @retval status
-*/
-
-static int8_t SCSI_ProcessWrite (USBD_HandleTypeDef  *pdev, uint8_t lun)
-{
-  uint32_t len;
-  USBD_MSC_BOT_HandleTypeDef  *hmsc = pdev->pClassData; 
-  
-  len = MIN(hmsc->scsi_blk_len , MSC_MEDIA_PACKET); 
-  
-  if(((USBD_StorageTypeDef *)pdev->pUserData)->Write(lun ,
-                              hmsc->bot_data, 
-                              hmsc->scsi_blk_addr / hmsc->scsi_blk_size, 
-                              len / hmsc->scsi_blk_size) < 0)
-  {
-    SCSI_SenseCode(pdev,
-                   lun, 
-                   HARDWARE_ERROR, 
-                   WRITE_FAULT);     
-    return -1; 
-  }
-  
-  
-  hmsc->scsi_blk_addr  += len; 
-  hmsc->scsi_blk_len   -= len; 
-  
-  /* case 12 : Ho = Do */
-  hmsc->csw.dDataResidue -= len;
-  
-  if (hmsc->scsi_blk_len == 0)
-  {
-    MSC_BOT_SendCSW (pdev, USBD_CSW_CMD_PASSED);
-  }
-  else
-  {
-    /* Prapare EP to Receive next packet */
-    USBD_LL_PrepareReceive (pdev,
-                            MSC_OUT_EP,
-                            hmsc->bot_data, 
-                            MIN (hmsc->scsi_blk_len, MSC_MEDIA_PACKET)); 
-  }
-  
-  return 0;
-}
-/**
-  * @}
-  */ 
-
-
-/**
-  * @}
-  */ 
-
-
-/**
-  * @}
-  */ 
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/stmhal/usbdev/class/cdc_msc_hid/inc/usbd_msc_bot.h b/stmhal/usbdev/class/cdc_msc_hid/inc/usbd_msc_bot.h
deleted file mode 100644
index 41f8ab5a5..000000000
--- a/stmhal/usbdev/class/cdc_msc_hid/inc/usbd_msc_bot.h
+++ /dev/null
@@ -1,151 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    usbd_msc_bot.h
-  * @author  MCD Application Team
-  * @version V2.0.0
-  * @date    18-February-2014
-  * @brief   header for the usbd_msc_bot.c file
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT 2014 STMicroelectronics</center></h2>
-  *
-  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
-  * You may not use this file except in compliance with the License.
-  * You may obtain a copy of the License at:
-  *
-  *        http://www.st.com/software_license_agreement_liberty_v2
-  *
-  * Unless required by applicable law or agreed to in writing, software 
-  * distributed under the License is distributed on an "AS IS" BASIS, 
-  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  * See the License for the specific language governing permissions and
-  * limitations under the License.
-  *
-  ******************************************************************************
-  */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-
-#include "usbd_core.h"
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __USBD_MSC_BOT_H
-#define __USBD_MSC_BOT_H
-
-/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
-  * @{
-  */
-  
-/** @defgroup MSC_BOT
-  * @brief This file is the Header file for usbd_bot.c
-  * @{
-  */ 
-
-
-/** @defgroup USBD_CORE_Exported_Defines
-  * @{
-  */ 
-#define USBD_BOT_IDLE                      0       /* Idle state */
-#define USBD_BOT_DATA_OUT                  1       /* Data Out state */
-#define USBD_BOT_DATA_IN                   2       /* Data In state */
-#define USBD_BOT_LAST_DATA_IN              3       /* Last Data In Last */
-#define USBD_BOT_SEND_DATA                 4       /* Send Immediate data */
-#define USBD_BOT_NO_DATA                   5       /* No data Stage */
-
-#define USBD_BOT_CBW_SIGNATURE             0x43425355
-#define USBD_BOT_CSW_SIGNATURE             0x53425355
-#define USBD_BOT_CBW_LENGTH                31
-#define USBD_BOT_CSW_LENGTH                13
-#define USBD_BOT_MAX_DATA                  256
-
-/* CSW Status Definitions */
-#define USBD_CSW_CMD_PASSED                0x00
-#define USBD_CSW_CMD_FAILED                0x01
-#define USBD_CSW_PHASE_ERROR               0x02
-
-/* BOT Status */
-#define USBD_BOT_STATUS_NORMAL             0
-#define USBD_BOT_STATUS_RECOVERY           1
-#define USBD_BOT_STATUS_ERROR              2
-
-
-#define USBD_DIR_IN                        0
-#define USBD_DIR_OUT                       1
-#define USBD_BOTH_DIR                      2
-
-/**
-  * @}
-  */ 
-
-/** @defgroup MSC_CORE_Private_TypesDefinitions
-  * @{
-  */ 
-
-typedef struct
-{
-  uint32_t dSignature;
-  uint32_t dTag;
-  uint32_t dDataLength;
-  uint8_t  bmFlags;
-  uint8_t  bLUN;
-  uint8_t  bCBLength;
-  uint8_t  CB[16];
-  uint8_t  ReservedForAlign;
-}
-USBD_MSC_BOT_CBWTypeDef;
-
-
-typedef struct
-{
-  uint32_t dSignature;
-  uint32_t dTag;
-  uint32_t dDataResidue;
-  uint8_t  bStatus;
-  uint8_t  ReservedForAlign[3];  
-}
-USBD_MSC_BOT_CSWTypeDef;
-
-/**
-  * @}
-  */ 
-
-
-/** @defgroup USBD_CORE_Exported_Types
-  * @{
-  */
-
-/**
-  * @}
-  */ 
-/** @defgroup USBD_CORE_Exported_FunctionsPrototypes
-  * @{
-  */ 
-void MSC_BOT_Init (USBD_HandleTypeDef  *pdev);
-void MSC_BOT_Reset (USBD_HandleTypeDef  *pdev);
-void MSC_BOT_DeInit (USBD_HandleTypeDef  *pdev);
-void MSC_BOT_DataIn (USBD_HandleTypeDef  *pdev, 
-                     uint8_t epnum);
-
-void MSC_BOT_DataOut (USBD_HandleTypeDef  *pdev, 
-                      uint8_t epnum);
-
-void MSC_BOT_SendCSW (USBD_HandleTypeDef  *pdev,
-                             uint8_t CSW_Status);
-
-void  MSC_BOT_CplClrFeature (USBD_HandleTypeDef  *pdev, 
-                             uint8_t epnum);
-/**
-  * @}
-  */ 
-
-#endif /* __USBD_MSC_BOT_H */
-/**
-  * @}
-  */ 
-
-/**
-* @}
-*/ 
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
-
diff --git a/stmhal/usbdev/class/cdc_msc_hid/inc/usbd_msc_data.h b/stmhal/usbdev/class/cdc_msc_hid/inc/usbd_msc_data.h
deleted file mode 100644
index f468267f4..000000000
--- a/stmhal/usbdev/class/cdc_msc_hid/inc/usbd_msc_data.h
+++ /dev/null
@@ -1,104 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    usbd_msc_data.h
-  * @author  MCD Application Team
-  * @version V2.0.0
-  * @date    18-February-2014
-  * @brief   header for the usbd_msc_data.c file
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT 2014 STMicroelectronics</center></h2>
-  *
-  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
-  * You may not use this file except in compliance with the License.
-  * You may obtain a copy of the License at:
-  *
-  *        http://www.st.com/software_license_agreement_liberty_v2
-  *
-  * Unless required by applicable law or agreed to in writing, software 
-  * distributed under the License is distributed on an "AS IS" BASIS, 
-  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  * See the License for the specific language governing permissions and
-  * limitations under the License.
-  *
-  ******************************************************************************
-  */ 
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-
-#ifndef _USBD_MSC_DATA_H_
-#define _USBD_MSC_DATA_H_
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_conf.h"
-
-/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
-  * @{
-  */
-  
-/** @defgroup USB_INFO
-  * @brief general defines for the usb device library file
-  * @{
-  */ 
-
-/** @defgroup USB_INFO_Exported_Defines
-  * @{
-  */ 
-#define MODE_SENSE6_LEN			 8
-#define MODE_SENSE10_LEN		 8
-#define LENGTH_INQUIRY_PAGE00		 7
-#define LENGTH_FORMAT_CAPACITIES    	20
-
-/**
-  * @}
-  */ 
-
-
-/** @defgroup USBD_INFO_Exported_TypesDefinitions
-  * @{
-  */
-/**
-  * @}
-  */ 
-
-
-
-/** @defgroup USBD_INFO_Exported_Macros
-  * @{
-  */ 
-
-/**
-  * @}
-  */ 
-
-/** @defgroup USBD_INFO_Exported_Variables
-  * @{
-  */ 
-extern const uint8_t MSC_Page00_Inquiry_Data[];  
-extern const uint8_t MSC_Mode_Sense6_data[];
-extern const uint8_t MSC_Mode_Sense10_data[] ;
-
-/**
-  * @}
-  */ 
-
-/** @defgroup USBD_INFO_Exported_FunctionsPrototype
-  * @{
-  */ 
-
-/**
-  * @}
-  */ 
-
-#endif /* _USBD_MSC_DATA_H_ */
-
-/**
-  * @}
-  */ 
-
-/**
-* @}
-*/ 
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/stmhal/usbdev/class/cdc_msc_hid/inc/usbd_msc_scsi.h b/stmhal/usbdev/class/cdc_msc_hid/inc/usbd_msc_scsi.h
deleted file mode 100644
index dea247bca..000000000
--- a/stmhal/usbdev/class/cdc_msc_hid/inc/usbd_msc_scsi.h
+++ /dev/null
@@ -1,193 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    usbd_msc_scsi.h
-  * @author  MCD Application Team
-  * @version V2.0.0
-  * @date    18-February-2014
-  * @brief   header for the usbd_msc_scsi.c file
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT 2014 STMicroelectronics</center></h2>
-  *
-  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
-  * You may not use this file except in compliance with the License.
-  * You may obtain a copy of the License at:
-  *
-  *        http://www.st.com/software_license_agreement_liberty_v2
-  *
-  * Unless required by applicable law or agreed to in writing, software 
-  * distributed under the License is distributed on an "AS IS" BASIS, 
-  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  * See the License for the specific language governing permissions and
-  * limitations under the License.
-  *
-  ******************************************************************************
-  */ 
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __USBD_MSC_SCSI_H
-#define __USBD_MSC_SCSI_H
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_def.h"
-
-/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
-  * @{
-  */
-  
-/** @defgroup USBD_SCSI
-  * @brief header file for the storage disk file
-  * @{
-  */ 
-
-/** @defgroup USBD_SCSI_Exported_Defines
-  * @{
-  */ 
-
-#define SENSE_LIST_DEEPTH                          4
-
-/* SCSI Commands */
-#define SCSI_FORMAT_UNIT                            0x04
-#define SCSI_INQUIRY                                0x12
-#define SCSI_MODE_SELECT6                           0x15
-#define SCSI_MODE_SELECT10                          0x55
-#define SCSI_MODE_SENSE6                            0x1A
-#define SCSI_MODE_SENSE10                           0x5A
-#define SCSI_ALLOW_MEDIUM_REMOVAL                   0x1E
-#define SCSI_READ6                                  0x08
-#define SCSI_READ10                                 0x28
-#define SCSI_READ12                                 0xA8
-#define SCSI_READ16                                 0x88
-
-#define SCSI_READ_CAPACITY10                        0x25
-#define SCSI_READ_CAPACITY16                        0x9E
-
-#define SCSI_REQUEST_SENSE                          0x03
-#define SCSI_START_STOP_UNIT                        0x1B
-#define SCSI_TEST_UNIT_READY                        0x00
-#define SCSI_WRITE6                                 0x0A
-#define SCSI_WRITE10                                0x2A
-#define SCSI_WRITE12                                0xAA
-#define SCSI_WRITE16                                0x8A
-
-#define SCSI_VERIFY10                               0x2F
-#define SCSI_VERIFY12                               0xAF
-#define SCSI_VERIFY16                               0x8F
-
-#define SCSI_SEND_DIAGNOSTIC                        0x1D
-#define SCSI_READ_FORMAT_CAPACITIES                 0x23
-
-#define NO_SENSE                                    0
-#define RECOVERED_ERROR                             1
-#define NOT_READY                                   2
-#define MEDIUM_ERROR                                3
-#define HARDWARE_ERROR                              4
-#define ILLEGAL_REQUEST                             5
-#define UNIT_ATTENTION                              6
-#define DATA_PROTECT                                7
-#define BLANK_CHECK                                 8
-#define VENDOR_SPECIFIC                             9
-#define COPY_ABORTED                               10
-#define ABORTED_COMMAND                            11
-#define VOLUME_OVERFLOW                            13
-#define MISCOMPARE                                 14
-
-
-#define INVALID_CDB                                 0x20
-#define INVALID_FIELED_IN_COMMAND                   0x24
-#define PARAMETER_LIST_LENGTH_ERROR                 0x1A
-#define INVALID_FIELD_IN_PARAMETER_LIST             0x26
-#define ADDRESS_OUT_OF_RANGE                        0x21
-#define MEDIUM_NOT_PRESENT                          0x3A
-#define MEDIUM_HAVE_CHANGED                         0x28
-#define WRITE_PROTECTED                             0x27 
-#define UNRECOVERED_READ_ERROR			    0x11
-#define WRITE_FAULT				    0x03 
-
-#define READ_FORMAT_CAPACITY_DATA_LEN               0x0C
-#define READ_CAPACITY10_DATA_LEN                    0x08
-#define MODE_SENSE10_DATA_LEN                       0x08
-#define MODE_SENSE6_DATA_LEN                        0x04
-#define REQUEST_SENSE_DATA_LEN                      0x12
-#define STANDARD_INQUIRY_DATA_LEN                   0x24
-#define BLKVFY                                      0x04
-
-extern  uint8_t Page00_Inquiry_Data[];
-extern  uint8_t Standard_Inquiry_Data[];
-extern  uint8_t Standard_Inquiry_Data2[];
-extern  uint8_t Mode_Sense6_data[];
-extern  uint8_t Mode_Sense10_data[];
-extern  uint8_t Scsi_Sense_Data[];
-extern  uint8_t ReadCapacity10_Data[];
-extern  uint8_t ReadFormatCapacity_Data [];
-/**
-  * @}
-  */ 
-
-
-/** @defgroup USBD_SCSI_Exported_TypesDefinitions
-  * @{
-  */
-
-typedef struct _SENSE_ITEM {                
-  char Skey;
-  union {
-    struct _ASCs {
-      char ASC;
-      char ASCQ;
-    }b;
-    unsigned int	ASC;
-    char *pData;
-  } w;
-} USBD_SCSI_SenseTypeDef; 
-/**
-  * @}
-  */ 
-
-/** @defgroup USBD_SCSI_Exported_Macros
-  * @{
-  */ 
-
-/**
-  * @}
-  */ 
-
-/** @defgroup USBD_SCSI_Exported_Variables
-  * @{
-  */ 
-
-/**
-  * @}
-  */ 
-/** @defgroup USBD_SCSI_Exported_FunctionsPrototype
-  * @{
-  */ 
-int8_t SCSI_ProcessCmd(USBD_HandleTypeDef  *pdev,
-                           uint8_t lun, 
-                           uint8_t *cmd);
-
-void   SCSI_SenseCode(USBD_HandleTypeDef  *pdev,
-                      uint8_t lun, 
-                      uint8_t sKey, 
-                      uint8_t ASC);
-
-/**
-  * @}
-  */ 
-
-#endif /* __USBD_MSC_SCSI_H */
-/**
-  * @}
-  */ 
-
-/**
-  * @}
-  */ 
-
-/**
-* @}
-*/ 
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
-
diff --git a/stmhal/usbdev/class/cdc_msc_hid/src/usbd_msc.c b/stmhal/usbdev/class/cdc_msc_hid/src/usbd_msc.c
deleted file mode 100644
index 7817c98b1..000000000
--- a/stmhal/usbdev/class/cdc_msc_hid/src/usbd_msc.c
+++ /dev/null
@@ -1,609 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    usbd_msc_core.c
-  * @author  MCD Application Team
-  * @version V2.0.0
-  * @date    18-February-2014
-  * @brief   This file provides all the MSC core functions.
-  *
-  * @verbatim
-  *      
-  *          ===================================================================      
-  *                                MSC Class  Description
-  *          =================================================================== 
-  *           This module manages the MSC class V1.0 following the "Universal 
-  *           Serial Bus Mass Storage Class (MSC) Bulk-Only Transport (BOT) Version 1.0
-  *           Sep. 31, 1999".
-  *           This driver implements the following aspects of the specification:
-  *             - Bulk-Only Transport protocol
-  *             - Subclass : SCSI transparent command set (ref. SCSI Primary Commands - 3 (SPC-3))
-  *      
-  *  @endverbatim
-  *
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT 2014 STMicroelectronics</center></h2>
-  *
-  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
-  * You may not use this file except in compliance with the License.
-  * You may obtain a copy of the License at:
-  *
-  *        http://www.st.com/software_license_agreement_liberty_v2
-  *
-  * Unless required by applicable law or agreed to in writing, software 
-  * distributed under the License is distributed on an "AS IS" BASIS, 
-  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  * See the License for the specific language governing permissions and
-  * limitations under the License.
-  *
-  ******************************************************************************
-  */ 
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_msc.h"
-
-
-/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
-  * @{
-  */
-
-
-/** @defgroup MSC_CORE 
-  * @brief Mass storage core module
-  * @{
-  */ 
-
-/** @defgroup MSC_CORE_Private_TypesDefinitions
-  * @{
-  */ 
-/**
-  * @}
-  */ 
-
-
-/** @defgroup MSC_CORE_Private_Defines
-  * @{
-  */ 
-
-/**
-  * @}
-  */ 
-
-
-/** @defgroup MSC_CORE_Private_Macros
-  * @{
-  */ 
-/**
-  * @}
-  */ 
-
-
-/** @defgroup MSC_CORE_Private_FunctionPrototypes
-  * @{
-  */ 
-uint8_t  USBD_MSC_Init (USBD_HandleTypeDef *pdev, 
-                            uint8_t cfgidx);
-
-uint8_t  USBD_MSC_DeInit (USBD_HandleTypeDef *pdev, 
-                              uint8_t cfgidx);
-
-uint8_t  USBD_MSC_Setup (USBD_HandleTypeDef *pdev, 
-                             USBD_SetupReqTypedef *req);
-
-uint8_t  USBD_MSC_DataIn (USBD_HandleTypeDef *pdev, 
-                              uint8_t epnum);
-
-
-uint8_t  USBD_MSC_DataOut (USBD_HandleTypeDef *pdev, 
-                               uint8_t epnum);
-
-uint8_t  *USBD_MSC_GetHSCfgDesc (uint16_t *length);
-
-uint8_t  *USBD_MSC_GetFSCfgDesc (uint16_t *length);
-
-uint8_t  *USBD_MSC_GetOtherSpeedCfgDesc (uint16_t *length);
-
-uint8_t  *USBD_MSC_GetDeviceQualifierDescriptor (uint16_t *length);
-
-
-/**
-  * @}
-  */ 
-
-
-/** @defgroup MSC_CORE_Private_Variables
-  * @{
-  */ 
-
-
-USBD_ClassTypeDef  USBD_MSC = 
-{
-  USBD_MSC_Init,
-  USBD_MSC_DeInit,
-  USBD_MSC_Setup,
-  NULL, /*EP0_TxSent*/  
-  NULL, /*EP0_RxReady*/
-  USBD_MSC_DataIn,
-  USBD_MSC_DataOut,
-  NULL, /*SOF */ 
-  NULL,  
-  NULL,     
-  USBD_MSC_GetHSCfgDesc,
-  USBD_MSC_GetFSCfgDesc,  
-  USBD_MSC_GetOtherSpeedCfgDesc,
-  USBD_MSC_GetDeviceQualifierDescriptor,
-};
-
-/* USB Mass storage device Configuration Descriptor */
-/*   All Descriptors (Configuration, Interface, Endpoint, Class, Vendor */
-__ALIGN_BEGIN uint8_t USBD_MSC_CfgHSDesc[USB_MSC_CONFIG_DESC_SIZ]  __ALIGN_END =
-{
-  
-  0x09,   /* bLength: Configuation Descriptor size */
-  USB_DESC_TYPE_CONFIGURATION,   /* bDescriptorType: Configuration */
-  USB_MSC_CONFIG_DESC_SIZ,
-  
-  0x00,
-  0x01,   /* bNumInterfaces: 1 interface */
-  0x01,   /* bConfigurationValue: */
-  0x04,   /* iConfiguration: */
-  0xC0,   /* bmAttributes: */
-  0x32,   /* MaxPower 100 mA */
-  
-  /********************  Mass Storage interface ********************/
-  0x09,   /* bLength: Interface Descriptor size */
-  0x04,   /* bDescriptorType: */
-  0x00,   /* bInterfaceNumber: Number of Interface */
-  0x00,   /* bAlternateSetting: Alternate setting */
-  0x02,   /* bNumEndpoints*/
-  0x08,   /* bInterfaceClass: MSC Class */
-  0x06,   /* bInterfaceSubClass : SCSI transparent*/
-  0x50,   /* nInterfaceProtocol */
-  0x05,          /* iInterface: */
-  /********************  Mass Storage Endpoints ********************/
-  0x07,   /*Endpoint descriptor length = 7*/
-  0x05,   /*Endpoint descriptor type */
-  MSC_EPIN_ADDR,   /*Endpoint address (IN, address 1) */
-  0x02,   /*Bulk endpoint type */
-  LOBYTE(MSC_MAX_HS_PACKET),
-  HIBYTE(MSC_MAX_HS_PACKET),
-  0x00,   /*Polling interval in milliseconds */
-  
-  0x07,   /*Endpoint descriptor length = 7 */
-  0x05,   /*Endpoint descriptor type */
-  MSC_EPOUT_ADDR,   /*Endpoint address (OUT, address 1) */
-  0x02,   /*Bulk endpoint type */
-  LOBYTE(MSC_MAX_HS_PACKET),
-  HIBYTE(MSC_MAX_HS_PACKET),
-  0x00     /*Polling interval in milliseconds*/
-};
-
-/* USB Mass storage device Configuration Descriptor */
-/*   All Descriptors (Configuration, Interface, Endpoint, Class, Vendor */
-uint8_t USBD_MSC_CfgFSDesc[USB_MSC_CONFIG_DESC_SIZ]  __ALIGN_END =
-{
-  
-  0x09,   /* bLength: Configuation Descriptor size */
-  USB_DESC_TYPE_CONFIGURATION,   /* bDescriptorType: Configuration */
-  USB_MSC_CONFIG_DESC_SIZ,
-  
-  0x00,
-  0x01,   /* bNumInterfaces: 1 interface */
-  0x01,   /* bConfigurationValue: */
-  0x04,   /* iConfiguration: */
-  0xC0,   /* bmAttributes: */
-  0x32,   /* MaxPower 100 mA */
-  
-  /********************  Mass Storage interface ********************/
-  0x09,   /* bLength: Interface Descriptor size */
-  0x04,   /* bDescriptorType: */
-  0x00,   /* bInterfaceNumber: Number of Interface */
-  0x00,   /* bAlternateSetting: Alternate setting */
-  0x02,   /* bNumEndpoints*/
-  0x08,   /* bInterfaceClass: MSC Class */
-  0x06,   /* bInterfaceSubClass : SCSI transparent*/
-  0x50,   /* nInterfaceProtocol */
-  0x05,          /* iInterface: */
-  /********************  Mass Storage Endpoints ********************/
-  0x07,   /*Endpoint descriptor length = 7*/
-  0x05,   /*Endpoint descriptor type */
-  MSC_EPIN_ADDR,   /*Endpoint address (IN, address 1) */
-  0x02,   /*Bulk endpoint type */
-  LOBYTE(MSC_MAX_FS_PACKET),
-  HIBYTE(MSC_MAX_FS_PACKET),
-  0x00,   /*Polling interval in milliseconds */
-  
-  0x07,   /*Endpoint descriptor length = 7 */
-  0x05,   /*Endpoint descriptor type */
-  MSC_EPOUT_ADDR,   /*Endpoint address (OUT, address 1) */
-  0x02,   /*Bulk endpoint type */
-  LOBYTE(MSC_MAX_FS_PACKET),
-  HIBYTE(MSC_MAX_FS_PACKET),
-  0x00     /*Polling interval in milliseconds*/
-};
-
-__ALIGN_BEGIN uint8_t USBD_MSC_OtherSpeedCfgDesc[USB_MSC_CONFIG_DESC_SIZ]   __ALIGN_END  =
-{
-  
-  0x09,   /* bLength: Configuation Descriptor size */
-  USB_DESC_TYPE_OTHER_SPEED_CONFIGURATION,   
-  USB_MSC_CONFIG_DESC_SIZ,
-  
-  0x00,
-  0x01,   /* bNumInterfaces: 1 interface */
-  0x01,   /* bConfigurationValue: */
-  0x04,   /* iConfiguration: */
-  0xC0,   /* bmAttributes: */
-  0x32,   /* MaxPower 100 mA */
-  
-  /********************  Mass Storage interface ********************/
-  0x09,   /* bLength: Interface Descriptor size */
-  0x04,   /* bDescriptorType: */
-  0x00,   /* bInterfaceNumber: Number of Interface */
-  0x00,   /* bAlternateSetting: Alternate setting */
-  0x02,   /* bNumEndpoints*/
-  0x08,   /* bInterfaceClass: MSC Class */
-  0x06,   /* bInterfaceSubClass : SCSI transparent command set*/
-  0x50,   /* nInterfaceProtocol */
-  0x05,          /* iInterface: */
-  /********************  Mass Storage Endpoints ********************/
-  0x07,   /*Endpoint descriptor length = 7*/
-  0x05,   /*Endpoint descriptor type */
-  MSC_EPIN_ADDR,   /*Endpoint address (IN, address 1) */
-  0x02,   /*Bulk endpoint type */
-  0x40,
-  0x00,
-  0x00,   /*Polling interval in milliseconds */
-  
-  0x07,   /*Endpoint descriptor length = 7 */
-  0x05,   /*Endpoint descriptor type */
-  MSC_EPOUT_ADDR,   /*Endpoint address (OUT, address 1) */
-  0x02,   /*Bulk endpoint type */
-  0x40,
-  0x00,
-  0x00     /*Polling interval in milliseconds*/
-};
-
-/* USB Standard Device Descriptor */
-__ALIGN_BEGIN  uint8_t USBD_MSC_DeviceQualifierDesc[USB_LEN_DEV_QUALIFIER_DESC]  __ALIGN_END =
-{
-  USB_LEN_DEV_QUALIFIER_DESC,
-  USB_DESC_TYPE_DEVICE_QUALIFIER,
-  0x00,
-  0x02,
-  0x00,
-  0x00,
-  0x00,
-  MSC_MAX_FS_PACKET,
-  0x01,
-  0x00,
-};
-/**
-  * @}
-  */ 
-
-
-/** @defgroup MSC_CORE_Private_Functions
-  * @{
-  */ 
-
-/**
-  * @brief  USBD_MSC_Init
-  *         Initialize  the mass storage configuration
-  * @param  pdev: device instance
-  * @param  cfgidx: configuration index
-  * @retval status
-  */
-uint8_t  USBD_MSC_Init (USBD_HandleTypeDef *pdev, 
-                            uint8_t cfgidx)
-{
-  int16_t ret = 0;
-   
-  if(pdev->dev_speed == USBD_SPEED_HIGH  ) 
-  {
-    /* Open EP OUT */
-    USBD_LL_OpenEP(pdev,
-                   MSC_EPOUT_ADDR,
-                   USBD_EP_TYPE_BULK,
-                   MSC_MAX_HS_PACKET);
-    
-    /* Open EP IN */
-    USBD_LL_OpenEP(pdev,
-                   MSC_EPIN_ADDR,
-                   USBD_EP_TYPE_BULK,
-                   MSC_MAX_HS_PACKET);  
-  }
-  else
-  {
-    /* Open EP OUT */
-    USBD_LL_OpenEP(pdev,
-                   MSC_EPOUT_ADDR,
-                   USBD_EP_TYPE_BULK,
-                   MSC_MAX_FS_PACKET);
-    
-    /* Open EP IN */
-    USBD_LL_OpenEP(pdev,
-                   MSC_EPIN_ADDR,
-                   USBD_EP_TYPE_BULK,
-                   MSC_MAX_FS_PACKET);  
-  }
-  pdev->pClassData = USBD_malloc(sizeof (USBD_MSC_BOT_HandleTypeDef));
-  
-  if(pdev->pClassData == NULL)
-  {
-    ret = 1; 
-  }
-  else
-  {
-    /* Init the BOT  layer */
-    MSC_BOT_Init(pdev); 
-    ret = 0;
-  }
-  
-  return ret;
-}
-
-/**
-  * @brief  USBD_MSC_DeInit
-  *         DeInitilaize  the mass storage configuration
-  * @param  pdev: device instance
-  * @param  cfgidx: configuration index
-  * @retval status
-  */
-uint8_t  USBD_MSC_DeInit (USBD_HandleTypeDef *pdev, 
-                              uint8_t cfgidx)
-{
-  /* Close MSC EPs */
-  USBD_LL_CloseEP(pdev,
-                  MSC_EPOUT_ADDR);
-  
-  /* Open EP IN */
-  USBD_LL_CloseEP(pdev,
-                  MSC_EPIN_ADDR);
-  
-  
-    /* D-Init the BOT layer */
-  MSC_BOT_DeInit(pdev);
-  
-  /* Free MSC Class Resources */
-  if(pdev->pClassData != NULL)
-  {
-    USBD_free(pdev->pClassData);
-    pdev->pClassData  = NULL; 
-  }
-  return 0;
-}
-/**
-* @brief  USBD_MSC_Setup
-*         Handle the MSC specific requests
-* @param  pdev: device instance
-* @param  req: USB request
-* @retval status
-*/
-uint8_t  USBD_MSC_Setup (USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
-{
-  USBD_MSC_BOT_HandleTypeDef     *hmsc = pdev->pClassData;
-  
-  switch (req->bmRequest & USB_REQ_TYPE_MASK)
-  {
-
-  /* Class request */
-  case USB_REQ_TYPE_CLASS :
-    switch (req->bRequest)
-    {
-    case BOT_GET_MAX_LUN :
-
-      if((req->wValue  == 0) && 
-         (req->wLength == 1) &&
-         ((req->bmRequest & 0x80) == 0x80))
-      {
-        hmsc->max_lun = ((USBD_StorageTypeDef *)pdev->pUserData)->GetMaxLun();
-        USBD_CtlSendData (pdev,
-                          (uint8_t *)&hmsc->max_lun,
-                          1);
-      }
-      else
-      {
-         USBD_CtlError(pdev , req);
-         return USBD_FAIL; 
-      }
-      break;
-      
-    case BOT_RESET :
-      if((req->wValue  == 0) && 
-         (req->wLength == 0) &&
-        ((req->bmRequest & 0x80) != 0x80))
-      {      
-         MSC_BOT_Reset(pdev);
-      }
-      else
-      {
-         USBD_CtlError(pdev , req);
-         return USBD_FAIL; 
-      }
-      break;
-
-    default:
-       USBD_CtlError(pdev , req);
-       return USBD_FAIL; 
-    }
-    break;
-  /* Interface & Endpoint request */
-  case USB_REQ_TYPE_STANDARD:
-    switch (req->bRequest)
-    {
-    case USB_REQ_GET_INTERFACE :
-      USBD_CtlSendData (pdev,
-                        (uint8_t *)&hmsc->interface,
-                        1);
-      break;
-      
-    case USB_REQ_SET_INTERFACE :
-      hmsc->interface = (uint8_t)(req->wValue);
-      break;
-    
-    case USB_REQ_CLEAR_FEATURE:  
-      
-      /* Flush the FIFO and Clear the stall status */    
-      USBD_LL_FlushEP(pdev, (uint8_t)req->wIndex);
-      
-      /* Re-activate the EP */      
-      USBD_LL_CloseEP (pdev , (uint8_t)req->wIndex);
-      if((((uint8_t)req->wIndex) & 0x80) == 0x80)
-      {
-        if(pdev->dev_speed == USBD_SPEED_HIGH  ) 
-        {
-          /* Open EP IN */
-          USBD_LL_OpenEP(pdev,
-                         MSC_EPIN_ADDR,
-                         USBD_EP_TYPE_BULK,
-                         MSC_MAX_HS_PACKET);  
-        }
-        else
-        {   
-          /* Open EP IN */
-          USBD_LL_OpenEP(pdev,
-                         MSC_EPIN_ADDR,
-                         USBD_EP_TYPE_BULK,
-                         MSC_MAX_FS_PACKET);  
-        }
-      }
-      else
-      {
-        if(pdev->dev_speed == USBD_SPEED_HIGH  ) 
-        {
-          /* Open EP IN */
-          USBD_LL_OpenEP(pdev,
-                         MSC_EPOUT_ADDR,
-                         USBD_EP_TYPE_BULK,
-                         MSC_MAX_HS_PACKET);  
-        }
-        else
-        {   
-          /* Open EP IN */
-          USBD_LL_OpenEP(pdev,
-                         MSC_EPOUT_ADDR,
-                         USBD_EP_TYPE_BULK,
-                         MSC_MAX_FS_PACKET);  
-        }
-      }
-      
-      /* Handle BOT error */
-      MSC_BOT_CplClrFeature(pdev, (uint8_t)req->wIndex);
-      break;
-      
-    }  
-    break;
-   
-  default:
-    break;
-  }
-  return 0;
-}
-
-/**
-* @brief  USBD_MSC_DataIn
-*         handle data IN Stage
-* @param  pdev: device instance
-* @param  epnum: endpoint index
-* @retval status
-*/
-uint8_t  USBD_MSC_DataIn (USBD_HandleTypeDef *pdev, 
-                              uint8_t epnum)
-{
-  MSC_BOT_DataIn(pdev , epnum);
-  return 0;
-}
-
-/**
-* @brief  USBD_MSC_DataOut
-*         handle data OUT Stage
-* @param  pdev: device instance
-* @param  epnum: endpoint index
-* @retval status
-*/
-uint8_t  USBD_MSC_DataOut (USBD_HandleTypeDef *pdev, 
-                               uint8_t epnum)
-{
-  MSC_BOT_DataOut(pdev , epnum);
-  return 0;
-}
-
-/**
-* @brief  USBD_MSC_GetHSCfgDesc 
-*         return configuration descriptor
-* @param  length : pointer data length
-* @retval pointer to descriptor buffer
-*/
-uint8_t  *USBD_MSC_GetHSCfgDesc (uint16_t *length)
-{
-  *length = sizeof (USBD_MSC_CfgHSDesc);
-  return USBD_MSC_CfgHSDesc;
-}
-
-/**
-* @brief  USBD_MSC_GetFSCfgDesc 
-*         return configuration descriptor
-* @param  length : pointer data length
-* @retval pointer to descriptor buffer
-*/
-uint8_t  *USBD_MSC_GetFSCfgDesc (uint16_t *length)
-{
-  *length = sizeof (USBD_MSC_CfgFSDesc);
-  return USBD_MSC_CfgFSDesc;
-}
-
-/**
-* @brief  USBD_MSC_GetOtherSpeedCfgDesc 
-*         return other speed configuration descriptor
-* @param  length : pointer data length
-* @retval pointer to descriptor buffer
-*/
-uint8_t  *USBD_MSC_GetOtherSpeedCfgDesc (uint16_t *length)
-{
-  *length = sizeof (USBD_MSC_OtherSpeedCfgDesc);
-  return USBD_MSC_OtherSpeedCfgDesc;
-}
-/**
-* @brief  DeviceQualifierDescriptor 
-*         return Device Qualifier descriptor
-* @param  length : pointer data length
-* @retval pointer to descriptor buffer
-*/
-uint8_t  *USBD_MSC_GetDeviceQualifierDescriptor (uint16_t *length)
-{
-  *length = sizeof (USBD_MSC_DeviceQualifierDesc);
-  return USBD_MSC_DeviceQualifierDesc;
-}
-
-/**
-* @brief  USBD_MSC_RegisterStorage
-* @param  fops: storage callback
-* @retval status
-*/
-uint8_t  USBD_MSC_RegisterStorage  (USBD_HandleTypeDef   *pdev, 
-                                    USBD_StorageTypeDef *fops)
-{
-  if(fops != NULL)
-  {
-    pdev->pUserData= fops;
-  }
-  return 0;
-}
-
-/**
-  * @}
-  */ 
-
-
-/**
-  * @}
-  */ 
-
-
-/**
-  * @}
-  */ 
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/stmhal/usbdev/class/cdc_msc_hid/src/usbd_msc_data.c b/stmhal/usbdev/class/cdc_msc_hid/src/usbd_msc_data.c
deleted file mode 100644
index 4d72bd5fc..000000000
--- a/stmhal/usbdev/class/cdc_msc_hid/src/usbd_msc_data.c
+++ /dev/null
@@ -1,134 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    usbd_msc_data.c
-  * @author  MCD Application Team
-  * @version V2.0.0
-  * @date    18-February-2014
-  * @brief   This file provides all the vital inquiry pages and sense data.
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT 2014 STMicroelectronics</center></h2>
-  *
-  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
-  * You may not use this file except in compliance with the License.
-  * You may obtain a copy of the License at:
-  *
-  *        http://www.st.com/software_license_agreement_liberty_v2
-  *
-  * Unless required by applicable law or agreed to in writing, software 
-  * distributed under the License is distributed on an "AS IS" BASIS, 
-  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  * See the License for the specific language governing permissions and
-  * limitations under the License.
-  *
-  ******************************************************************************
-  */ 
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_msc_data.h"
-
-
-/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
-  * @{
-  */
-
-
-/** @defgroup MSC_DATA 
-  * @brief Mass storage info/data module
-  * @{
-  */ 
-
-/** @defgroup MSC_DATA_Private_TypesDefinitions
-  * @{
-  */ 
-/**
-  * @}
-  */ 
-
-
-/** @defgroup MSC_DATA_Private_Defines
-  * @{
-  */ 
-/**
-  * @}
-  */ 
-
-
-/** @defgroup MSC_DATA_Private_Macros
-  * @{
-  */ 
-/**
-  * @}
-  */ 
-
-
-/** @defgroup MSC_DATA_Private_Variables
-  * @{
-  */ 
-
-
-/* USB Mass storage Page 0 Inquiry Data */
-const uint8_t  MSC_Page00_Inquiry_Data[] = {//7						
-	0x00,		
-	0x00, 
-	0x00, 
-	(LENGTH_INQUIRY_PAGE00 - 4),
-	0x00, 
-	0x80, 
-	0x83 
-};  
-/* USB Mass storage sense 6  Data */
-const uint8_t  MSC_Mode_Sense6_data[] = {
-	0x00,
-	0x00,
-	0x00,
-	0x00,
-	0x00,
-	0x00, 
-	0x00,
-	0x00
-};	
-/* USB Mass storage sense 10  Data */
-const uint8_t  MSC_Mode_Sense10_data[] = {
-	0x00,
-	0x06, 
-	0x00, 
-	0x00, 
-	0x00, 
-	0x00, 
-	0x00, 
-	0x00
-};
-/**
-  * @}
-  */ 
-
-
-/** @defgroup MSC_DATA_Private_FunctionPrototypes
-  * @{
-  */ 
-/**
-  * @}
-  */ 
-
-
-/** @defgroup MSC_DATA_Private_Functions
-  * @{
-  */ 
-
-/**
-  * @}
-  */ 
-
-
-/**
-  * @}
-  */ 
-
-
-/**
-  * @}
-  */ 
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/stmhal/usbdev/class/cdc_msc_hid/inc/usbd_cdc_msc_hid.h b/stmhal/usbdev/class/inc/usbd_cdc_msc_hid.h
similarity index 100%
rename from stmhal/usbdev/class/cdc_msc_hid/inc/usbd_cdc_msc_hid.h
rename to stmhal/usbdev/class/inc/usbd_cdc_msc_hid.h
diff --git a/stmhal/usbdev/class/inc/usbd_cdc_msc_hid0.h b/stmhal/usbdev/class/inc/usbd_cdc_msc_hid0.h
new file mode 100644
index 000000000..7bf2cf955
--- /dev/null
+++ b/stmhal/usbdev/class/inc/usbd_cdc_msc_hid0.h
@@ -0,0 +1,51 @@
+/*
+ * This file is part of the Micro Python project, http://micropython.org/
+ *
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2015 Damien P. George
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#ifndef __MICROPY_INCLUDED_STMHAL_USB_CDC_MSC_HID0_H__
+#define __MICROPY_INCLUDED_STMHAL_USB_CDC_MSC_HID0_H__
+
+// these are exports for the CDC/MSC/HID interface that are independent
+// from any other definitions/declarations
+
+// only CDC_MSC and CDC_HID are available
+typedef enum {
+    USBD_MODE_CDC = 0x01,
+    USBD_MODE_MSC = 0x02,
+    USBD_MODE_HID = 0x04,
+    USBD_MODE_CDC_MSC = 0x03,
+    USBD_MODE_CDC_HID = 0x05,
+    USBD_MODE_MSC_HID = 0x06,
+} usb_device_mode_t;
+
+typedef struct _USBD_HID_ModeInfoTypeDef {
+    uint8_t subclass; // 0=no sub class, 1=boot
+    uint8_t protocol; // 0=none, 1=keyboard, 2=mouse
+    uint8_t max_packet_len; // only support up to 255
+    uint8_t report_desc_len;
+    const uint8_t *report_desc;
+} USBD_HID_ModeInfoTypeDef;
+
+#endif // __MICROPY_INCLUDED_STMHAL_USB_CDC_MSC_HID0_H__
diff --git a/stmhal/usbdev/class/cdc_msc/inc/usbd_msc_bot.h b/stmhal/usbdev/class/inc/usbd_msc_bot.h
similarity index 100%
rename from stmhal/usbdev/class/cdc_msc/inc/usbd_msc_bot.h
rename to stmhal/usbdev/class/inc/usbd_msc_bot.h
diff --git a/stmhal/usbdev/class/cdc_msc/inc/usbd_msc_data.h b/stmhal/usbdev/class/inc/usbd_msc_data.h
similarity index 100%
rename from stmhal/usbdev/class/cdc_msc/inc/usbd_msc_data.h
rename to stmhal/usbdev/class/inc/usbd_msc_data.h
diff --git a/stmhal/usbdev/class/cdc_msc/inc/usbd_msc_scsi.h b/stmhal/usbdev/class/inc/usbd_msc_scsi.h
similarity index 100%
rename from stmhal/usbdev/class/cdc_msc/inc/usbd_msc_scsi.h
rename to stmhal/usbdev/class/inc/usbd_msc_scsi.h
diff --git a/stmhal/usbdev/class/msc/inc/usbd_msc.h b/stmhal/usbdev/class/msc/inc/usbd_msc.h
deleted file mode 100644
index 9329278de..000000000
--- a/stmhal/usbdev/class/msc/inc/usbd_msc.h
+++ /dev/null
@@ -1,121 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    usbd_msc_core.h
-  * @author  MCD Application Team
-  * @version V2.0.0
-  * @date    18-February-2014
-  * @brief   header for the usbd_msc_core.c file
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT 2014 STMicroelectronics</center></h2>
-  *
-  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
-  * You may not use this file except in compliance with the License.
-  * You may obtain a copy of the License at:
-  *
-  *        http://www.st.com/software_license_agreement_liberty_v2
-  *
-  * Unless required by applicable law or agreed to in writing, software 
-  * distributed under the License is distributed on an "AS IS" BASIS, 
-  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  * See the License for the specific language governing permissions and
-  * limitations under the License.
-  *
-  ******************************************************************************
-  */ 
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef _USB_MSC_CORE_H_
-#define _USB_MSC_CORE_H_
-
-#include  "usbd_msc_bot.h"
-#include  "usbd_msc_scsi.h"
-#include  "usbd_ioreq.h"
-
-/** @addtogroup USBD_MSC_BOT
-  * @{
-  */
-  
-/** @defgroup USBD_MSC
-  * @brief This file is the Header file for USBD_msc.c
-  * @{
-  */ 
-
-
-/** @defgroup USBD_BOT_Exported_Defines
-  * @{
-  */ 
-#define MSC_MAX_FS_PACKET            0x40
-#define MSC_MAX_HS_PACKET            0x200
-
-#define BOT_GET_MAX_LUN              0xFE
-#define BOT_RESET                    0xFF
-#define USB_MSC_CONFIG_DESC_SIZ      32
- 
-
-#define MSC_EPIN_ADDR                0x81 
-#define MSC_EPOUT_ADDR               0x01 
-
-/**
-  * @}
-  */ 
-
-/** @defgroup USB_CORE_Exported_Types
-  * @{
-  */ 
-typedef struct _USBD_STORAGE
-{
-  int8_t (* Init) (uint8_t lun);
-  int8_t (* GetCapacity) (uint8_t lun, uint32_t *block_num, uint16_t *block_size);
-  int8_t (* IsReady) (uint8_t lun);
-  int8_t (* IsWriteProtected) (uint8_t lun);
-  int8_t (* Read) (uint8_t lun, uint8_t *buf, uint32_t blk_addr, uint16_t blk_len);
-  int8_t (* Write)(uint8_t lun, uint8_t *buf, uint32_t blk_addr, uint16_t blk_len);
-  int8_t (* GetMaxLun)(void);
-  int8_t *pInquiry;
-  
-}USBD_StorageTypeDef;
-
-
-typedef struct
-{
-  uint32_t                 max_lun;   
-  uint32_t                 interface; 
-  uint8_t                  bot_state;
-  uint8_t                  bot_status;  
-  uint16_t                 bot_data_length;
-  uint8_t                  bot_data[MSC_MEDIA_PACKET];  
-  USBD_MSC_BOT_CBWTypeDef  cbw;
-  USBD_MSC_BOT_CSWTypeDef  csw;
-  
-  USBD_SCSI_SenseTypeDef   scsi_sense [SENSE_LIST_DEEPTH];
-  uint8_t                  scsi_sense_head;
-  uint8_t                  scsi_sense_tail;
-  
-  uint16_t                 scsi_blk_size;
-  uint32_t                 scsi_blk_nbr;
-  
-  uint32_t                 scsi_blk_addr;
-  uint32_t                 scsi_blk_len;
-}
-USBD_MSC_BOT_HandleTypeDef; 
-
-/* Structure for MSC process */
-extern USBD_ClassTypeDef  USBD_MSC;
-
-uint8_t  USBD_MSC_RegisterStorage  (USBD_HandleTypeDef   *pdev, 
-                                    USBD_StorageTypeDef *fops);
-/**
-  * @}
-  */ 
-
-/**
-  * @}
-  */ 
-#endif  // _USB_MSC_CORE_H_
-/**
-  * @}
-  */ 
-  
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/stmhal/usbdev/class/msc/inc/usbd_msc_bot.h b/stmhal/usbdev/class/msc/inc/usbd_msc_bot.h
deleted file mode 100644
index 41f8ab5a5..000000000
--- a/stmhal/usbdev/class/msc/inc/usbd_msc_bot.h
+++ /dev/null
@@ -1,151 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    usbd_msc_bot.h
-  * @author  MCD Application Team
-  * @version V2.0.0
-  * @date    18-February-2014
-  * @brief   header for the usbd_msc_bot.c file
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT 2014 STMicroelectronics</center></h2>
-  *
-  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
-  * You may not use this file except in compliance with the License.
-  * You may obtain a copy of the License at:
-  *
-  *        http://www.st.com/software_license_agreement_liberty_v2
-  *
-  * Unless required by applicable law or agreed to in writing, software 
-  * distributed under the License is distributed on an "AS IS" BASIS, 
-  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  * See the License for the specific language governing permissions and
-  * limitations under the License.
-  *
-  ******************************************************************************
-  */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-
-#include "usbd_core.h"
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __USBD_MSC_BOT_H
-#define __USBD_MSC_BOT_H
-
-/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
-  * @{
-  */
-  
-/** @defgroup MSC_BOT
-  * @brief This file is the Header file for usbd_bot.c
-  * @{
-  */ 
-
-
-/** @defgroup USBD_CORE_Exported_Defines
-  * @{
-  */ 
-#define USBD_BOT_IDLE                      0       /* Idle state */
-#define USBD_BOT_DATA_OUT                  1       /* Data Out state */
-#define USBD_BOT_DATA_IN                   2       /* Data In state */
-#define USBD_BOT_LAST_DATA_IN              3       /* Last Data In Last */
-#define USBD_BOT_SEND_DATA                 4       /* Send Immediate data */
-#define USBD_BOT_NO_DATA                   5       /* No data Stage */
-
-#define USBD_BOT_CBW_SIGNATURE             0x43425355
-#define USBD_BOT_CSW_SIGNATURE             0x53425355
-#define USBD_BOT_CBW_LENGTH                31
-#define USBD_BOT_CSW_LENGTH                13
-#define USBD_BOT_MAX_DATA                  256
-
-/* CSW Status Definitions */
-#define USBD_CSW_CMD_PASSED                0x00
-#define USBD_CSW_CMD_FAILED                0x01
-#define USBD_CSW_PHASE_ERROR               0x02
-
-/* BOT Status */
-#define USBD_BOT_STATUS_NORMAL             0
-#define USBD_BOT_STATUS_RECOVERY           1
-#define USBD_BOT_STATUS_ERROR              2
-
-
-#define USBD_DIR_IN                        0
-#define USBD_DIR_OUT                       1
-#define USBD_BOTH_DIR                      2
-
-/**
-  * @}
-  */ 
-
-/** @defgroup MSC_CORE_Private_TypesDefinitions
-  * @{
-  */ 
-
-typedef struct
-{
-  uint32_t dSignature;
-  uint32_t dTag;
-  uint32_t dDataLength;
-  uint8_t  bmFlags;
-  uint8_t  bLUN;
-  uint8_t  bCBLength;
-  uint8_t  CB[16];
-  uint8_t  ReservedForAlign;
-}
-USBD_MSC_BOT_CBWTypeDef;
-
-
-typedef struct
-{
-  uint32_t dSignature;
-  uint32_t dTag;
-  uint32_t dDataResidue;
-  uint8_t  bStatus;
-  uint8_t  ReservedForAlign[3];  
-}
-USBD_MSC_BOT_CSWTypeDef;
-
-/**
-  * @}
-  */ 
-
-
-/** @defgroup USBD_CORE_Exported_Types
-  * @{
-  */
-
-/**
-  * @}
-  */ 
-/** @defgroup USBD_CORE_Exported_FunctionsPrototypes
-  * @{
-  */ 
-void MSC_BOT_Init (USBD_HandleTypeDef  *pdev);
-void MSC_BOT_Reset (USBD_HandleTypeDef  *pdev);
-void MSC_BOT_DeInit (USBD_HandleTypeDef  *pdev);
-void MSC_BOT_DataIn (USBD_HandleTypeDef  *pdev, 
-                     uint8_t epnum);
-
-void MSC_BOT_DataOut (USBD_HandleTypeDef  *pdev, 
-                      uint8_t epnum);
-
-void MSC_BOT_SendCSW (USBD_HandleTypeDef  *pdev,
-                             uint8_t CSW_Status);
-
-void  MSC_BOT_CplClrFeature (USBD_HandleTypeDef  *pdev, 
-                             uint8_t epnum);
-/**
-  * @}
-  */ 
-
-#endif /* __USBD_MSC_BOT_H */
-/**
-  * @}
-  */ 
-
-/**
-* @}
-*/ 
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
-
diff --git a/stmhal/usbdev/class/msc/inc/usbd_msc_data.h b/stmhal/usbdev/class/msc/inc/usbd_msc_data.h
deleted file mode 100644
index f468267f4..000000000
--- a/stmhal/usbdev/class/msc/inc/usbd_msc_data.h
+++ /dev/null
@@ -1,104 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    usbd_msc_data.h
-  * @author  MCD Application Team
-  * @version V2.0.0
-  * @date    18-February-2014
-  * @brief   header for the usbd_msc_data.c file
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT 2014 STMicroelectronics</center></h2>
-  *
-  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
-  * You may not use this file except in compliance with the License.
-  * You may obtain a copy of the License at:
-  *
-  *        http://www.st.com/software_license_agreement_liberty_v2
-  *
-  * Unless required by applicable law or agreed to in writing, software 
-  * distributed under the License is distributed on an "AS IS" BASIS, 
-  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  * See the License for the specific language governing permissions and
-  * limitations under the License.
-  *
-  ******************************************************************************
-  */ 
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-
-#ifndef _USBD_MSC_DATA_H_
-#define _USBD_MSC_DATA_H_
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_conf.h"
-
-/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
-  * @{
-  */
-  
-/** @defgroup USB_INFO
-  * @brief general defines for the usb device library file
-  * @{
-  */ 
-
-/** @defgroup USB_INFO_Exported_Defines
-  * @{
-  */ 
-#define MODE_SENSE6_LEN			 8
-#define MODE_SENSE10_LEN		 8
-#define LENGTH_INQUIRY_PAGE00		 7
-#define LENGTH_FORMAT_CAPACITIES    	20
-
-/**
-  * @}
-  */ 
-
-
-/** @defgroup USBD_INFO_Exported_TypesDefinitions
-  * @{
-  */
-/**
-  * @}
-  */ 
-
-
-
-/** @defgroup USBD_INFO_Exported_Macros
-  * @{
-  */ 
-
-/**
-  * @}
-  */ 
-
-/** @defgroup USBD_INFO_Exported_Variables
-  * @{
-  */ 
-extern const uint8_t MSC_Page00_Inquiry_Data[];  
-extern const uint8_t MSC_Mode_Sense6_data[];
-extern const uint8_t MSC_Mode_Sense10_data[] ;
-
-/**
-  * @}
-  */ 
-
-/** @defgroup USBD_INFO_Exported_FunctionsPrototype
-  * @{
-  */ 
-
-/**
-  * @}
-  */ 
-
-#endif /* _USBD_MSC_DATA_H_ */
-
-/**
-  * @}
-  */ 
-
-/**
-* @}
-*/ 
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/stmhal/usbdev/class/msc/inc/usbd_msc_scsi.h b/stmhal/usbdev/class/msc/inc/usbd_msc_scsi.h
deleted file mode 100644
index dea247bca..000000000
--- a/stmhal/usbdev/class/msc/inc/usbd_msc_scsi.h
+++ /dev/null
@@ -1,193 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    usbd_msc_scsi.h
-  * @author  MCD Application Team
-  * @version V2.0.0
-  * @date    18-February-2014
-  * @brief   header for the usbd_msc_scsi.c file
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT 2014 STMicroelectronics</center></h2>
-  *
-  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
-  * You may not use this file except in compliance with the License.
-  * You may obtain a copy of the License at:
-  *
-  *        http://www.st.com/software_license_agreement_liberty_v2
-  *
-  * Unless required by applicable law or agreed to in writing, software 
-  * distributed under the License is distributed on an "AS IS" BASIS, 
-  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  * See the License for the specific language governing permissions and
-  * limitations under the License.
-  *
-  ******************************************************************************
-  */ 
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __USBD_MSC_SCSI_H
-#define __USBD_MSC_SCSI_H
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_def.h"
-
-/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
-  * @{
-  */
-  
-/** @defgroup USBD_SCSI
-  * @brief header file for the storage disk file
-  * @{
-  */ 
-
-/** @defgroup USBD_SCSI_Exported_Defines
-  * @{
-  */ 
-
-#define SENSE_LIST_DEEPTH                          4
-
-/* SCSI Commands */
-#define SCSI_FORMAT_UNIT                            0x04
-#define SCSI_INQUIRY                                0x12
-#define SCSI_MODE_SELECT6                           0x15
-#define SCSI_MODE_SELECT10                          0x55
-#define SCSI_MODE_SENSE6                            0x1A
-#define SCSI_MODE_SENSE10                           0x5A
-#define SCSI_ALLOW_MEDIUM_REMOVAL                   0x1E
-#define SCSI_READ6                                  0x08
-#define SCSI_READ10                                 0x28
-#define SCSI_READ12                                 0xA8
-#define SCSI_READ16                                 0x88
-
-#define SCSI_READ_CAPACITY10                        0x25
-#define SCSI_READ_CAPACITY16                        0x9E
-
-#define SCSI_REQUEST_SENSE                          0x03
-#define SCSI_START_STOP_UNIT                        0x1B
-#define SCSI_TEST_UNIT_READY                        0x00
-#define SCSI_WRITE6                                 0x0A
-#define SCSI_WRITE10                                0x2A
-#define SCSI_WRITE12                                0xAA
-#define SCSI_WRITE16                                0x8A
-
-#define SCSI_VERIFY10                               0x2F
-#define SCSI_VERIFY12                               0xAF
-#define SCSI_VERIFY16                               0x8F
-
-#define SCSI_SEND_DIAGNOSTIC                        0x1D
-#define SCSI_READ_FORMAT_CAPACITIES                 0x23
-
-#define NO_SENSE                                    0
-#define RECOVERED_ERROR                             1
-#define NOT_READY                                   2
-#define MEDIUM_ERROR                                3
-#define HARDWARE_ERROR                              4
-#define ILLEGAL_REQUEST                             5
-#define UNIT_ATTENTION                              6
-#define DATA_PROTECT                                7
-#define BLANK_CHECK                                 8
-#define VENDOR_SPECIFIC                             9
-#define COPY_ABORTED                               10
-#define ABORTED_COMMAND                            11
-#define VOLUME_OVERFLOW                            13
-#define MISCOMPARE                                 14
-
-
-#define INVALID_CDB                                 0x20
-#define INVALID_FIELED_IN_COMMAND                   0x24
-#define PARAMETER_LIST_LENGTH_ERROR                 0x1A
-#define INVALID_FIELD_IN_PARAMETER_LIST             0x26
-#define ADDRESS_OUT_OF_RANGE                        0x21
-#define MEDIUM_NOT_PRESENT                          0x3A
-#define MEDIUM_HAVE_CHANGED                         0x28
-#define WRITE_PROTECTED                             0x27 
-#define UNRECOVERED_READ_ERROR			    0x11
-#define WRITE_FAULT				    0x03 
-
-#define READ_FORMAT_CAPACITY_DATA_LEN               0x0C
-#define READ_CAPACITY10_DATA_LEN                    0x08
-#define MODE_SENSE10_DATA_LEN                       0x08
-#define MODE_SENSE6_DATA_LEN                        0x04
-#define REQUEST_SENSE_DATA_LEN                      0x12
-#define STANDARD_INQUIRY_DATA_LEN                   0x24
-#define BLKVFY                                      0x04
-
-extern  uint8_t Page00_Inquiry_Data[];
-extern  uint8_t Standard_Inquiry_Data[];
-extern  uint8_t Standard_Inquiry_Data2[];
-extern  uint8_t Mode_Sense6_data[];
-extern  uint8_t Mode_Sense10_data[];
-extern  uint8_t Scsi_Sense_Data[];
-extern  uint8_t ReadCapacity10_Data[];
-extern  uint8_t ReadFormatCapacity_Data [];
-/**
-  * @}
-  */ 
-
-
-/** @defgroup USBD_SCSI_Exported_TypesDefinitions
-  * @{
-  */
-
-typedef struct _SENSE_ITEM {                
-  char Skey;
-  union {
-    struct _ASCs {
-      char ASC;
-      char ASCQ;
-    }b;
-    unsigned int	ASC;
-    char *pData;
-  } w;
-} USBD_SCSI_SenseTypeDef; 
-/**
-  * @}
-  */ 
-
-/** @defgroup USBD_SCSI_Exported_Macros
-  * @{
-  */ 
-
-/**
-  * @}
-  */ 
-
-/** @defgroup USBD_SCSI_Exported_Variables
-  * @{
-  */ 
-
-/**
-  * @}
-  */ 
-/** @defgroup USBD_SCSI_Exported_FunctionsPrototype
-  * @{
-  */ 
-int8_t SCSI_ProcessCmd(USBD_HandleTypeDef  *pdev,
-                           uint8_t lun, 
-                           uint8_t *cmd);
-
-void   SCSI_SenseCode(USBD_HandleTypeDef  *pdev,
-                      uint8_t lun, 
-                      uint8_t sKey, 
-                      uint8_t ASC);
-
-/**
-  * @}
-  */ 
-
-#endif /* __USBD_MSC_SCSI_H */
-/**
-  * @}
-  */ 
-
-/**
-  * @}
-  */ 
-
-/**
-* @}
-*/ 
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
-
diff --git a/stmhal/usbdev/class/msc/inc/usbd_msc_storage_template.h b/stmhal/usbdev/class/msc/inc/usbd_msc_storage_template.h
deleted file mode 100644
index 1fc030eea..000000000
--- a/stmhal/usbdev/class/msc/inc/usbd_msc_storage_template.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    usbd_msc_storage.h
-  * @author  MCD Application Team
-  * @version V2.0.0
-  * @date    18-February-2014
-  * @brief   header file for the usbd_msc_storage.c file
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT 2014 STMicroelectronics</center></h2>
-  *
-  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
-  * You may not use this file except in compliance with the License.
-  * You may obtain a copy of the License at:
-  *
-  *        http://www.st.com/software_license_agreement_liberty_v2
-  *
-  * Unless required by applicable law or agreed to in writing, software 
-  * distributed under the License is distributed on an "AS IS" BASIS, 
-  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  * See the License for the specific language governing permissions and
-  * limitations under the License.
-  *
-  ******************************************************************************
-  */ 
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-
-#ifndef __USBD_MSC_STORAGE_H_
-#define __USBD_MSC_STORAGE_H_
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_msc.h"
-
-/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
-  * @{
-  */
-  
-/** @defgroup USBD_STORAGE
-  * @brief header file for the USBD_STORAGE.c file
-  * @{
-  */ 
-
-/** @defgroup USBD_STORAGE_Exported_Defines
-  * @{
-  */ 
-/**
-  * @}
-  */ 
-
-
-/** @defgroup USBD_STORAGE_Exported_Types
-  * @{
-  */
-
-
-/**
-  * @}
-  */ 
-
-
-
-/** @defgroup USBD_STORAGE_Exported_Macros
-  * @{
-  */ 
-
-/**
-  * @}
-  */ 
-
-/** @defgroup USBD_STORAGE_Exported_Variables
-  * @{
-  */ 
-extern USBD_StorageTypeDef  USBD_MSC_Template_fops;
-/**
-  * @}
-  */ 
-
-/** @defgroup USBD_STORAGE_Exported_FunctionsPrototype
-  * @{
-  */ 
-
-
-/**
-  * @}
-  */ 
-
-#endif /* __USBD_MSC_STORAGE_H_ */
-
-/**
-  * @}
-  */ 
-
-/**
-* @}
-*/ 
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/stmhal/usbdev/class/msc/src/usbd_msc.c b/stmhal/usbdev/class/msc/src/usbd_msc.c
deleted file mode 100644
index 7817c98b1..000000000
--- a/stmhal/usbdev/class/msc/src/usbd_msc.c
+++ /dev/null
@@ -1,609 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    usbd_msc_core.c
-  * @author  MCD Application Team
-  * @version V2.0.0
-  * @date    18-February-2014
-  * @brief   This file provides all the MSC core functions.
-  *
-  * @verbatim
-  *      
-  *          ===================================================================      
-  *                                MSC Class  Description
-  *          =================================================================== 
-  *           This module manages the MSC class V1.0 following the "Universal 
-  *           Serial Bus Mass Storage Class (MSC) Bulk-Only Transport (BOT) Version 1.0
-  *           Sep. 31, 1999".
-  *           This driver implements the following aspects of the specification:
-  *             - Bulk-Only Transport protocol
-  *             - Subclass : SCSI transparent command set (ref. SCSI Primary Commands - 3 (SPC-3))
-  *      
-  *  @endverbatim
-  *
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT 2014 STMicroelectronics</center></h2>
-  *
-  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
-  * You may not use this file except in compliance with the License.
-  * You may obtain a copy of the License at:
-  *
-  *        http://www.st.com/software_license_agreement_liberty_v2
-  *
-  * Unless required by applicable law or agreed to in writing, software 
-  * distributed under the License is distributed on an "AS IS" BASIS, 
-  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  * See the License for the specific language governing permissions and
-  * limitations under the License.
-  *
-  ******************************************************************************
-  */ 
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_msc.h"
-
-
-/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
-  * @{
-  */
-
-
-/** @defgroup MSC_CORE 
-  * @brief Mass storage core module
-  * @{
-  */ 
-
-/** @defgroup MSC_CORE_Private_TypesDefinitions
-  * @{
-  */ 
-/**
-  * @}
-  */ 
-
-
-/** @defgroup MSC_CORE_Private_Defines
-  * @{
-  */ 
-
-/**
-  * @}
-  */ 
-
-
-/** @defgroup MSC_CORE_Private_Macros
-  * @{
-  */ 
-/**
-  * @}
-  */ 
-
-
-/** @defgroup MSC_CORE_Private_FunctionPrototypes
-  * @{
-  */ 
-uint8_t  USBD_MSC_Init (USBD_HandleTypeDef *pdev, 
-                            uint8_t cfgidx);
-
-uint8_t  USBD_MSC_DeInit (USBD_HandleTypeDef *pdev, 
-                              uint8_t cfgidx);
-
-uint8_t  USBD_MSC_Setup (USBD_HandleTypeDef *pdev, 
-                             USBD_SetupReqTypedef *req);
-
-uint8_t  USBD_MSC_DataIn (USBD_HandleTypeDef *pdev, 
-                              uint8_t epnum);
-
-
-uint8_t  USBD_MSC_DataOut (USBD_HandleTypeDef *pdev, 
-                               uint8_t epnum);
-
-uint8_t  *USBD_MSC_GetHSCfgDesc (uint16_t *length);
-
-uint8_t  *USBD_MSC_GetFSCfgDesc (uint16_t *length);
-
-uint8_t  *USBD_MSC_GetOtherSpeedCfgDesc (uint16_t *length);
-
-uint8_t  *USBD_MSC_GetDeviceQualifierDescriptor (uint16_t *length);
-
-
-/**
-  * @}
-  */ 
-
-
-/** @defgroup MSC_CORE_Private_Variables
-  * @{
-  */ 
-
-
-USBD_ClassTypeDef  USBD_MSC = 
-{
-  USBD_MSC_Init,
-  USBD_MSC_DeInit,
-  USBD_MSC_Setup,
-  NULL, /*EP0_TxSent*/  
-  NULL, /*EP0_RxReady*/
-  USBD_MSC_DataIn,
-  USBD_MSC_DataOut,
-  NULL, /*SOF */ 
-  NULL,  
-  NULL,     
-  USBD_MSC_GetHSCfgDesc,
-  USBD_MSC_GetFSCfgDesc,  
-  USBD_MSC_GetOtherSpeedCfgDesc,
-  USBD_MSC_GetDeviceQualifierDescriptor,
-};
-
-/* USB Mass storage device Configuration Descriptor */
-/*   All Descriptors (Configuration, Interface, Endpoint, Class, Vendor */
-__ALIGN_BEGIN uint8_t USBD_MSC_CfgHSDesc[USB_MSC_CONFIG_DESC_SIZ]  __ALIGN_END =
-{
-  
-  0x09,   /* bLength: Configuation Descriptor size */
-  USB_DESC_TYPE_CONFIGURATION,   /* bDescriptorType: Configuration */
-  USB_MSC_CONFIG_DESC_SIZ,
-  
-  0x00,
-  0x01,   /* bNumInterfaces: 1 interface */
-  0x01,   /* bConfigurationValue: */
-  0x04,   /* iConfiguration: */
-  0xC0,   /* bmAttributes: */
-  0x32,   /* MaxPower 100 mA */
-  
-  /********************  Mass Storage interface ********************/
-  0x09,   /* bLength: Interface Descriptor size */
-  0x04,   /* bDescriptorType: */
-  0x00,   /* bInterfaceNumber: Number of Interface */
-  0x00,   /* bAlternateSetting: Alternate setting */
-  0x02,   /* bNumEndpoints*/
-  0x08,   /* bInterfaceClass: MSC Class */
-  0x06,   /* bInterfaceSubClass : SCSI transparent*/
-  0x50,   /* nInterfaceProtocol */
-  0x05,          /* iInterface: */
-  /********************  Mass Storage Endpoints ********************/
-  0x07,   /*Endpoint descriptor length = 7*/
-  0x05,   /*Endpoint descriptor type */
-  MSC_EPIN_ADDR,   /*Endpoint address (IN, address 1) */
-  0x02,   /*Bulk endpoint type */
-  LOBYTE(MSC_MAX_HS_PACKET),
-  HIBYTE(MSC_MAX_HS_PACKET),
-  0x00,   /*Polling interval in milliseconds */
-  
-  0x07,   /*Endpoint descriptor length = 7 */
-  0x05,   /*Endpoint descriptor type */
-  MSC_EPOUT_ADDR,   /*Endpoint address (OUT, address 1) */
-  0x02,   /*Bulk endpoint type */
-  LOBYTE(MSC_MAX_HS_PACKET),
-  HIBYTE(MSC_MAX_HS_PACKET),
-  0x00     /*Polling interval in milliseconds*/
-};
-
-/* USB Mass storage device Configuration Descriptor */
-/*   All Descriptors (Configuration, Interface, Endpoint, Class, Vendor */
-uint8_t USBD_MSC_CfgFSDesc[USB_MSC_CONFIG_DESC_SIZ]  __ALIGN_END =
-{
-  
-  0x09,   /* bLength: Configuation Descriptor size */
-  USB_DESC_TYPE_CONFIGURATION,   /* bDescriptorType: Configuration */
-  USB_MSC_CONFIG_DESC_SIZ,
-  
-  0x00,
-  0x01,   /* bNumInterfaces: 1 interface */
-  0x01,   /* bConfigurationValue: */
-  0x04,   /* iConfiguration: */
-  0xC0,   /* bmAttributes: */
-  0x32,   /* MaxPower 100 mA */
-  
-  /********************  Mass Storage interface ********************/
-  0x09,   /* bLength: Interface Descriptor size */
-  0x04,   /* bDescriptorType: */
-  0x00,   /* bInterfaceNumber: Number of Interface */
-  0x00,   /* bAlternateSetting: Alternate setting */
-  0x02,   /* bNumEndpoints*/
-  0x08,   /* bInterfaceClass: MSC Class */
-  0x06,   /* bInterfaceSubClass : SCSI transparent*/
-  0x50,   /* nInterfaceProtocol */
-  0x05,          /* iInterface: */
-  /********************  Mass Storage Endpoints ********************/
-  0x07,   /*Endpoint descriptor length = 7*/
-  0x05,   /*Endpoint descriptor type */
-  MSC_EPIN_ADDR,   /*Endpoint address (IN, address 1) */
-  0x02,   /*Bulk endpoint type */
-  LOBYTE(MSC_MAX_FS_PACKET),
-  HIBYTE(MSC_MAX_FS_PACKET),
-  0x00,   /*Polling interval in milliseconds */
-  
-  0x07,   /*Endpoint descriptor length = 7 */
-  0x05,   /*Endpoint descriptor type */
-  MSC_EPOUT_ADDR,   /*Endpoint address (OUT, address 1) */
-  0x02,   /*Bulk endpoint type */
-  LOBYTE(MSC_MAX_FS_PACKET),
-  HIBYTE(MSC_MAX_FS_PACKET),
-  0x00     /*Polling interval in milliseconds*/
-};
-
-__ALIGN_BEGIN uint8_t USBD_MSC_OtherSpeedCfgDesc[USB_MSC_CONFIG_DESC_SIZ]   __ALIGN_END  =
-{
-  
-  0x09,   /* bLength: Configuation Descriptor size */
-  USB_DESC_TYPE_OTHER_SPEED_CONFIGURATION,   
-  USB_MSC_CONFIG_DESC_SIZ,
-  
-  0x00,
-  0x01,   /* bNumInterfaces: 1 interface */
-  0x01,   /* bConfigurationValue: */
-  0x04,   /* iConfiguration: */
-  0xC0,   /* bmAttributes: */
-  0x32,   /* MaxPower 100 mA */
-  
-  /********************  Mass Storage interface ********************/
-  0x09,   /* bLength: Interface Descriptor size */
-  0x04,   /* bDescriptorType: */
-  0x00,   /* bInterfaceNumber: Number of Interface */
-  0x00,   /* bAlternateSetting: Alternate setting */
-  0x02,   /* bNumEndpoints*/
-  0x08,   /* bInterfaceClass: MSC Class */
-  0x06,   /* bInterfaceSubClass : SCSI transparent command set*/
-  0x50,   /* nInterfaceProtocol */
-  0x05,          /* iInterface: */
-  /********************  Mass Storage Endpoints ********************/
-  0x07,   /*Endpoint descriptor length = 7*/
-  0x05,   /*Endpoint descriptor type */
-  MSC_EPIN_ADDR,   /*Endpoint address (IN, address 1) */
-  0x02,   /*Bulk endpoint type */
-  0x40,
-  0x00,
-  0x00,   /*Polling interval in milliseconds */
-  
-  0x07,   /*Endpoint descriptor length = 7 */
-  0x05,   /*Endpoint descriptor type */
-  MSC_EPOUT_ADDR,   /*Endpoint address (OUT, address 1) */
-  0x02,   /*Bulk endpoint type */
-  0x40,
-  0x00,
-  0x00     /*Polling interval in milliseconds*/
-};
-
-/* USB Standard Device Descriptor */
-__ALIGN_BEGIN  uint8_t USBD_MSC_DeviceQualifierDesc[USB_LEN_DEV_QUALIFIER_DESC]  __ALIGN_END =
-{
-  USB_LEN_DEV_QUALIFIER_DESC,
-  USB_DESC_TYPE_DEVICE_QUALIFIER,
-  0x00,
-  0x02,
-  0x00,
-  0x00,
-  0x00,
-  MSC_MAX_FS_PACKET,
-  0x01,
-  0x00,
-};
-/**
-  * @}
-  */ 
-
-
-/** @defgroup MSC_CORE_Private_Functions
-  * @{
-  */ 
-
-/**
-  * @brief  USBD_MSC_Init
-  *         Initialize  the mass storage configuration
-  * @param  pdev: device instance
-  * @param  cfgidx: configuration index
-  * @retval status
-  */
-uint8_t  USBD_MSC_Init (USBD_HandleTypeDef *pdev, 
-                            uint8_t cfgidx)
-{
-  int16_t ret = 0;
-   
-  if(pdev->dev_speed == USBD_SPEED_HIGH  ) 
-  {
-    /* Open EP OUT */
-    USBD_LL_OpenEP(pdev,
-                   MSC_EPOUT_ADDR,
-                   USBD_EP_TYPE_BULK,
-                   MSC_MAX_HS_PACKET);
-    
-    /* Open EP IN */
-    USBD_LL_OpenEP(pdev,
-                   MSC_EPIN_ADDR,
-                   USBD_EP_TYPE_BULK,
-                   MSC_MAX_HS_PACKET);  
-  }
-  else
-  {
-    /* Open EP OUT */
-    USBD_LL_OpenEP(pdev,
-                   MSC_EPOUT_ADDR,
-                   USBD_EP_TYPE_BULK,
-                   MSC_MAX_FS_PACKET);
-    
-    /* Open EP IN */
-    USBD_LL_OpenEP(pdev,
-                   MSC_EPIN_ADDR,
-                   USBD_EP_TYPE_BULK,
-                   MSC_MAX_FS_PACKET);  
-  }
-  pdev->pClassData = USBD_malloc(sizeof (USBD_MSC_BOT_HandleTypeDef));
-  
-  if(pdev->pClassData == NULL)
-  {
-    ret = 1; 
-  }
-  else
-  {
-    /* Init the BOT  layer */
-    MSC_BOT_Init(pdev); 
-    ret = 0;
-  }
-  
-  return ret;
-}
-
-/**
-  * @brief  USBD_MSC_DeInit
-  *         DeInitilaize  the mass storage configuration
-  * @param  pdev: device instance
-  * @param  cfgidx: configuration index
-  * @retval status
-  */
-uint8_t  USBD_MSC_DeInit (USBD_HandleTypeDef *pdev, 
-                              uint8_t cfgidx)
-{
-  /* Close MSC EPs */
-  USBD_LL_CloseEP(pdev,
-                  MSC_EPOUT_ADDR);
-  
-  /* Open EP IN */
-  USBD_LL_CloseEP(pdev,
-                  MSC_EPIN_ADDR);
-  
-  
-    /* D-Init the BOT layer */
-  MSC_BOT_DeInit(pdev);
-  
-  /* Free MSC Class Resources */
-  if(pdev->pClassData != NULL)
-  {
-    USBD_free(pdev->pClassData);
-    pdev->pClassData  = NULL; 
-  }
-  return 0;
-}
-/**
-* @brief  USBD_MSC_Setup
-*         Handle the MSC specific requests
-* @param  pdev: device instance
-* @param  req: USB request
-* @retval status
-*/
-uint8_t  USBD_MSC_Setup (USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
-{
-  USBD_MSC_BOT_HandleTypeDef     *hmsc = pdev->pClassData;
-  
-  switch (req->bmRequest & USB_REQ_TYPE_MASK)
-  {
-
-  /* Class request */
-  case USB_REQ_TYPE_CLASS :
-    switch (req->bRequest)
-    {
-    case BOT_GET_MAX_LUN :
-
-      if((req->wValue  == 0) && 
-         (req->wLength == 1) &&
-         ((req->bmRequest & 0x80) == 0x80))
-      {
-        hmsc->max_lun = ((USBD_StorageTypeDef *)pdev->pUserData)->GetMaxLun();
-        USBD_CtlSendData (pdev,
-                          (uint8_t *)&hmsc->max_lun,
-                          1);
-      }
-      else
-      {
-         USBD_CtlError(pdev , req);
-         return USBD_FAIL; 
-      }
-      break;
-      
-    case BOT_RESET :
-      if((req->wValue  == 0) && 
-         (req->wLength == 0) &&
-        ((req->bmRequest & 0x80) != 0x80))
-      {      
-         MSC_BOT_Reset(pdev);
-      }
-      else
-      {
-         USBD_CtlError(pdev , req);
-         return USBD_FAIL; 
-      }
-      break;
-
-    default:
-       USBD_CtlError(pdev , req);
-       return USBD_FAIL; 
-    }
-    break;
-  /* Interface & Endpoint request */
-  case USB_REQ_TYPE_STANDARD:
-    switch (req->bRequest)
-    {
-    case USB_REQ_GET_INTERFACE :
-      USBD_CtlSendData (pdev,
-                        (uint8_t *)&hmsc->interface,
-                        1);
-      break;
-      
-    case USB_REQ_SET_INTERFACE :
-      hmsc->interface = (uint8_t)(req->wValue);
-      break;
-    
-    case USB_REQ_CLEAR_FEATURE:  
-      
-      /* Flush the FIFO and Clear the stall status */    
-      USBD_LL_FlushEP(pdev, (uint8_t)req->wIndex);
-      
-      /* Re-activate the EP */      
-      USBD_LL_CloseEP (pdev , (uint8_t)req->wIndex);
-      if((((uint8_t)req->wIndex) & 0x80) == 0x80)
-      {
-        if(pdev->dev_speed == USBD_SPEED_HIGH  ) 
-        {
-          /* Open EP IN */
-          USBD_LL_OpenEP(pdev,
-                         MSC_EPIN_ADDR,
-                         USBD_EP_TYPE_BULK,
-                         MSC_MAX_HS_PACKET);  
-        }
-        else
-        {   
-          /* Open EP IN */
-          USBD_LL_OpenEP(pdev,
-                         MSC_EPIN_ADDR,
-                         USBD_EP_TYPE_BULK,
-                         MSC_MAX_FS_PACKET);  
-        }
-      }
-      else
-      {
-        if(pdev->dev_speed == USBD_SPEED_HIGH  ) 
-        {
-          /* Open EP IN */
-          USBD_LL_OpenEP(pdev,
-                         MSC_EPOUT_ADDR,
-                         USBD_EP_TYPE_BULK,
-                         MSC_MAX_HS_PACKET);  
-        }
-        else
-        {   
-          /* Open EP IN */
-          USBD_LL_OpenEP(pdev,
-                         MSC_EPOUT_ADDR,
-                         USBD_EP_TYPE_BULK,
-                         MSC_MAX_FS_PACKET);  
-        }
-      }
-      
-      /* Handle BOT error */
-      MSC_BOT_CplClrFeature(pdev, (uint8_t)req->wIndex);
-      break;
-      
-    }  
-    break;
-   
-  default:
-    break;
-  }
-  return 0;
-}
-
-/**
-* @brief  USBD_MSC_DataIn
-*         handle data IN Stage
-* @param  pdev: device instance
-* @param  epnum: endpoint index
-* @retval status
-*/
-uint8_t  USBD_MSC_DataIn (USBD_HandleTypeDef *pdev, 
-                              uint8_t epnum)
-{
-  MSC_BOT_DataIn(pdev , epnum);
-  return 0;
-}
-
-/**
-* @brief  USBD_MSC_DataOut
-*         handle data OUT Stage
-* @param  pdev: device instance
-* @param  epnum: endpoint index
-* @retval status
-*/
-uint8_t  USBD_MSC_DataOut (USBD_HandleTypeDef *pdev, 
-                               uint8_t epnum)
-{
-  MSC_BOT_DataOut(pdev , epnum);
-  return 0;
-}
-
-/**
-* @brief  USBD_MSC_GetHSCfgDesc 
-*         return configuration descriptor
-* @param  length : pointer data length
-* @retval pointer to descriptor buffer
-*/
-uint8_t  *USBD_MSC_GetHSCfgDesc (uint16_t *length)
-{
-  *length = sizeof (USBD_MSC_CfgHSDesc);
-  return USBD_MSC_CfgHSDesc;
-}
-
-/**
-* @brief  USBD_MSC_GetFSCfgDesc 
-*         return configuration descriptor
-* @param  length : pointer data length
-* @retval pointer to descriptor buffer
-*/
-uint8_t  *USBD_MSC_GetFSCfgDesc (uint16_t *length)
-{
-  *length = sizeof (USBD_MSC_CfgFSDesc);
-  return USBD_MSC_CfgFSDesc;
-}
-
-/**
-* @brief  USBD_MSC_GetOtherSpeedCfgDesc 
-*         return other speed configuration descriptor
-* @param  length : pointer data length
-* @retval pointer to descriptor buffer
-*/
-uint8_t  *USBD_MSC_GetOtherSpeedCfgDesc (uint16_t *length)
-{
-  *length = sizeof (USBD_MSC_OtherSpeedCfgDesc);
-  return USBD_MSC_OtherSpeedCfgDesc;
-}
-/**
-* @brief  DeviceQualifierDescriptor 
-*         return Device Qualifier descriptor
-* @param  length : pointer data length
-* @retval pointer to descriptor buffer
-*/
-uint8_t  *USBD_MSC_GetDeviceQualifierDescriptor (uint16_t *length)
-{
-  *length = sizeof (USBD_MSC_DeviceQualifierDesc);
-  return USBD_MSC_DeviceQualifierDesc;
-}
-
-/**
-* @brief  USBD_MSC_RegisterStorage
-* @param  fops: storage callback
-* @retval status
-*/
-uint8_t  USBD_MSC_RegisterStorage  (USBD_HandleTypeDef   *pdev, 
-                                    USBD_StorageTypeDef *fops)
-{
-  if(fops != NULL)
-  {
-    pdev->pUserData= fops;
-  }
-  return 0;
-}
-
-/**
-  * @}
-  */ 
-
-
-/**
-  * @}
-  */ 
-
-
-/**
-  * @}
-  */ 
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/stmhal/usbdev/class/msc/src/usbd_msc_bot.c b/stmhal/usbdev/class/msc/src/usbd_msc_bot.c
deleted file mode 100644
index a430ce770..000000000
--- a/stmhal/usbdev/class/msc/src/usbd_msc_bot.c
+++ /dev/null
@@ -1,407 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    usbd_msc_bot.c
-  * @author  MCD Application Team
-  * @version V2.0.0
-  * @date    18-February-2014
-  * @brief   This file provides all the BOT protocol core functions.
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT 2014 STMicroelectronics</center></h2>
-  *
-  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
-  * You may not use this file except in compliance with the License.
-  * You may obtain a copy of the License at:
-  *
-  *        http://www.st.com/software_license_agreement_liberty_v2
-  *
-  * Unless required by applicable law or agreed to in writing, software 
-  * distributed under the License is distributed on an "AS IS" BASIS, 
-  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  * See the License for the specific language governing permissions and
-  * limitations under the License.
-  *
-  ******************************************************************************
-  */ 
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_msc_bot.h"
-#include "usbd_msc.h"
-#include "usbd_msc_scsi.h"
-#include "usbd_ioreq.h"
-
-/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
-  * @{
-  */
-
-
-/** @defgroup MSC_BOT 
-  * @brief BOT protocol module
-  * @{
-  */ 
-
-/** @defgroup MSC_BOT_Private_TypesDefinitions
-  * @{
-  */ 
-/**
-  * @}
-  */ 
-
-
-/** @defgroup MSC_BOT_Private_Defines
-  * @{
-  */ 
-
-/**
-  * @}
-  */ 
-
-
-/** @defgroup MSC_BOT_Private_Macros
-  * @{
-  */ 
-/**
-  * @}
-  */ 
-
-
-/** @defgroup MSC_BOT_Private_Variables
-  * @{
-  */ 
-
-/**
-  * @}
-  */ 
-
-
-/** @defgroup MSC_BOT_Private_FunctionPrototypes
-  * @{
-  */ 
-static void MSC_BOT_CBW_Decode (USBD_HandleTypeDef  *pdev);
-
-static void MSC_BOT_SendData (USBD_HandleTypeDef  *pdev, 
-                              uint8_t* pbuf, 
-                              uint16_t len);
-
-static void MSC_BOT_Abort(USBD_HandleTypeDef  *pdev);
-/**
-  * @}
-  */ 
-
-
-/** @defgroup MSC_BOT_Private_Functions
-  * @{
-  */ 
-
-
-
-/**
-* @brief  MSC_BOT_Init
-*         Initialize the BOT Process
-* @param  pdev: device instance
-* @retval None
-*/
-void MSC_BOT_Init (USBD_HandleTypeDef  *pdev)
-{
-  USBD_MSC_BOT_HandleTypeDef  *hmsc = pdev->pClassData;
-    
-  hmsc->bot_state  = USBD_BOT_IDLE;
-  hmsc->bot_status = USBD_BOT_STATUS_NORMAL;
-  
-  hmsc->scsi_sense_tail = 0;
-  hmsc->scsi_sense_head = 0;
-  
-  ((USBD_StorageTypeDef *)pdev->pUserData)->Init(0);
-  
-  USBD_LL_FlushEP(pdev, MSC_EPOUT_ADDR);
-  USBD_LL_FlushEP(pdev, MSC_EPIN_ADDR);
-  
-  /* Prapare EP to Receive First BOT Cmd */
-  USBD_LL_PrepareReceive (pdev,
-                          MSC_EPOUT_ADDR,
-                          (uint8_t *)&hmsc->cbw,
-                          USBD_BOT_CBW_LENGTH);    
-}
-
-/**
-* @brief  MSC_BOT_Reset
-*         Reset the BOT Machine
-* @param  pdev: device instance
-* @retval  None
-*/
-void MSC_BOT_Reset (USBD_HandleTypeDef  *pdev)
-{
-  USBD_MSC_BOT_HandleTypeDef  *hmsc = pdev->pClassData;
-    
-  hmsc->bot_state  = USBD_BOT_IDLE;
-  hmsc->bot_status = USBD_BOT_STATUS_RECOVERY;  
-  
-  /* Prapare EP to Receive First BOT Cmd */
-  USBD_LL_PrepareReceive (pdev,
-                          MSC_EPOUT_ADDR,
-                          (uint8_t *)&hmsc->cbw,
-                          USBD_BOT_CBW_LENGTH);   
-}
-
-/**
-* @brief  MSC_BOT_DeInit
-*         Uninitialize the BOT Machine
-* @param  pdev: device instance
-* @retval None
-*/
-void MSC_BOT_DeInit (USBD_HandleTypeDef  *pdev)
-{
-  USBD_MSC_BOT_HandleTypeDef  *hmsc = pdev->pClassData;  
-  hmsc->bot_state  = USBD_BOT_IDLE;
-}
-
-/**
-* @brief  MSC_BOT_DataIn
-*         Handle BOT IN data stage
-* @param  pdev: device instance
-* @param  epnum: endpoint index
-* @retval None
-*/
-void MSC_BOT_DataIn (USBD_HandleTypeDef  *pdev, 
-                     uint8_t epnum)
-{
-  USBD_MSC_BOT_HandleTypeDef  *hmsc = pdev->pClassData;  
-  
-  switch (hmsc->bot_state)
-  {
-  case USBD_BOT_DATA_IN:
-    if(SCSI_ProcessCmd(pdev,
-                        hmsc->cbw.bLUN,
-                        &hmsc->cbw.CB[0]) < 0)
-    {
-      MSC_BOT_SendCSW (pdev, USBD_CSW_CMD_FAILED);
-    }
-    break;
-    
-  case USBD_BOT_SEND_DATA:
-  case USBD_BOT_LAST_DATA_IN:
-    MSC_BOT_SendCSW (pdev, USBD_CSW_CMD_PASSED);
-    
-    break;
-    
-  default:
-    break;
-  }
-}
-/**
-* @brief  MSC_BOT_DataOut
-*         Proccess MSC OUT data
-* @param  pdev: device instance
-* @param  epnum: endpoint index
-* @retval None
-*/
-void MSC_BOT_DataOut (USBD_HandleTypeDef  *pdev, 
-                      uint8_t epnum)
-{
-  USBD_MSC_BOT_HandleTypeDef  *hmsc = pdev->pClassData;
-  
-  switch (hmsc->bot_state)
-  {
-  case USBD_BOT_IDLE:
-    MSC_BOT_CBW_Decode(pdev);
-    break;
-    
-  case USBD_BOT_DATA_OUT:
-    
-    if(SCSI_ProcessCmd(pdev,
-                        hmsc->cbw.bLUN,
-                        &hmsc->cbw.CB[0]) < 0)
-    {
-      MSC_BOT_SendCSW (pdev, USBD_CSW_CMD_FAILED);
-    }
-
-    break;
-    
-  default:
-    break;
-  }
-}
-
-/**
-* @brief  MSC_BOT_CBW_Decode
-*         Decode the CBW command and set the BOT state machine accordingtly  
-* @param  pdev: device instance
-* @retval None
-*/
-static void  MSC_BOT_CBW_Decode (USBD_HandleTypeDef  *pdev)
-{
-  USBD_MSC_BOT_HandleTypeDef  *hmsc = pdev->pClassData;  
-  
-  hmsc->csw.dTag = hmsc->cbw.dTag;
-  hmsc->csw.dDataResidue = hmsc->cbw.dDataLength;
-  
-  if ((USBD_LL_GetRxDataSize (pdev ,MSC_EPOUT_ADDR) != USBD_BOT_CBW_LENGTH) ||
-      (hmsc->cbw.dSignature != USBD_BOT_CBW_SIGNATURE)||
-        (hmsc->cbw.bLUN > 1) || 
-          (hmsc->cbw.bCBLength < 1) || 
-            (hmsc->cbw.bCBLength > 16))
-  {
-    
-    SCSI_SenseCode(pdev,
-                   hmsc->cbw.bLUN, 
-                   ILLEGAL_REQUEST, 
-                   INVALID_CDB);
-    
-    hmsc->bot_status = USBD_BOT_STATUS_ERROR;   
-    MSC_BOT_Abort(pdev);
- 
-  }
-  else
-  {
-    if(SCSI_ProcessCmd(pdev,
-                       hmsc->cbw.bLUN,
-                       &hmsc->cbw.CB[0]) < 0)
-    {
-      if(hmsc->bot_state == USBD_BOT_NO_DATA)
-      {
-       MSC_BOT_SendCSW (pdev,
-                         USBD_CSW_CMD_FAILED); 
-      }
-      else
-      {
-        MSC_BOT_Abort(pdev);
-      }
-    }
-    /*Burst xfer handled internally*/
-    else if ((hmsc->bot_state != USBD_BOT_DATA_IN) && 
-             (hmsc->bot_state != USBD_BOT_DATA_OUT) &&
-             (hmsc->bot_state != USBD_BOT_LAST_DATA_IN)) 
-    {
-      if (hmsc->bot_data_length > 0)
-      {
-        MSC_BOT_SendData(pdev,
-                         hmsc->bot_data, 
-                         hmsc->bot_data_length);
-      }
-      else if (hmsc->bot_data_length == 0) 
-      {
-        MSC_BOT_SendCSW (pdev,
-                         USBD_CSW_CMD_PASSED);
-      }
-    }
-  }
-}
-
-/**
-* @brief  MSC_BOT_SendData
-*         Send the requested data
-* @param  pdev: device instance
-* @param  buf: pointer to data buffer
-* @param  len: Data Length
-* @retval None
-*/
-static void  MSC_BOT_SendData(USBD_HandleTypeDef  *pdev,
-                              uint8_t* buf, 
-                              uint16_t len)
-{
-  USBD_MSC_BOT_HandleTypeDef  *hmsc = pdev->pClassData; 
-  
-  len = MIN (hmsc->cbw.dDataLength, len);
-  hmsc->csw.dDataResidue -= len;
-  hmsc->csw.bStatus = USBD_CSW_CMD_PASSED;
-  hmsc->bot_state = USBD_BOT_SEND_DATA;
-  
-  USBD_LL_Transmit (pdev, MSC_EPIN_ADDR, buf, len);  
-}
-
-/**
-* @brief  MSC_BOT_SendCSW
-*         Send the Command Status Wrapper
-* @param  pdev: device instance
-* @param  status : CSW status
-* @retval None
-*/
-void  MSC_BOT_SendCSW (USBD_HandleTypeDef  *pdev,
-                              uint8_t CSW_Status)
-{
-  USBD_MSC_BOT_HandleTypeDef  *hmsc = pdev->pClassData; 
-  
-  hmsc->csw.dSignature = USBD_BOT_CSW_SIGNATURE;
-  hmsc->csw.bStatus = CSW_Status;
-  hmsc->bot_state = USBD_BOT_IDLE;
-  
-  USBD_LL_Transmit (pdev, 
-             MSC_EPIN_ADDR, 
-             (uint8_t *)&hmsc->csw, 
-             USBD_BOT_CSW_LENGTH);
-  
-  /* Prapare EP to Receive next Cmd */
-  USBD_LL_PrepareReceive (pdev,
-                    MSC_EPOUT_ADDR,
-                    (uint8_t *)&hmsc->cbw, 
-                    USBD_BOT_CBW_LENGTH);  
-  
-}
-
-/**
-* @brief  MSC_BOT_Abort
-*         Abort the current transfer
-* @param  pdev: device instance
-* @retval status
-*/
-
-static void  MSC_BOT_Abort (USBD_HandleTypeDef  *pdev)
-{
-  USBD_MSC_BOT_HandleTypeDef  *hmsc = pdev->pClassData; 
-  
-  if ((hmsc->cbw.bmFlags == 0) && 
-      (hmsc->cbw.dDataLength != 0) &&
-      (hmsc->bot_status == USBD_BOT_STATUS_NORMAL) )
-  {
-    USBD_LL_StallEP(pdev, MSC_EPOUT_ADDR );
-  }
-  USBD_LL_StallEP(pdev, MSC_EPIN_ADDR);
-  
-  if(hmsc->bot_status == USBD_BOT_STATUS_ERROR)
-  {
-    USBD_LL_PrepareReceive (pdev,
-                      MSC_EPOUT_ADDR,
-                      (uint8_t *)&hmsc->cbw, 
-                      USBD_BOT_CBW_LENGTH);    
-  }
-}
-
-/**
-* @brief  MSC_BOT_CplClrFeature
-*         Complete the clear feature request
-* @param  pdev: device instance
-* @param  epnum: endpoint index
-* @retval None
-*/
-
-void  MSC_BOT_CplClrFeature (USBD_HandleTypeDef  *pdev, uint8_t epnum)
-{
-  USBD_MSC_BOT_HandleTypeDef  *hmsc = pdev->pClassData; 
-  
-  if(hmsc->bot_status == USBD_BOT_STATUS_ERROR )/* Bad CBW Signature */
-  {
-    USBD_LL_StallEP(pdev, MSC_EPIN_ADDR);
-    hmsc->bot_status = USBD_BOT_STATUS_NORMAL;    
-  }
-  else if(((epnum & 0x80) == 0x80) && ( hmsc->bot_status != USBD_BOT_STATUS_RECOVERY))
-  {
-    MSC_BOT_SendCSW (pdev, USBD_CSW_CMD_FAILED);
-  }
-  
-}
-/**
-  * @}
-  */ 
-
-
-/**
-  * @}
-  */ 
-
-
-/**
-  * @}
-  */ 
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/stmhal/usbdev/class/msc/src/usbd_msc_data.c b/stmhal/usbdev/class/msc/src/usbd_msc_data.c
deleted file mode 100644
index 4d72bd5fc..000000000
--- a/stmhal/usbdev/class/msc/src/usbd_msc_data.c
+++ /dev/null
@@ -1,134 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    usbd_msc_data.c
-  * @author  MCD Application Team
-  * @version V2.0.0
-  * @date    18-February-2014
-  * @brief   This file provides all the vital inquiry pages and sense data.
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT 2014 STMicroelectronics</center></h2>
-  *
-  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
-  * You may not use this file except in compliance with the License.
-  * You may obtain a copy of the License at:
-  *
-  *        http://www.st.com/software_license_agreement_liberty_v2
-  *
-  * Unless required by applicable law or agreed to in writing, software 
-  * distributed under the License is distributed on an "AS IS" BASIS, 
-  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  * See the License for the specific language governing permissions and
-  * limitations under the License.
-  *
-  ******************************************************************************
-  */ 
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_msc_data.h"
-
-
-/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
-  * @{
-  */
-
-
-/** @defgroup MSC_DATA 
-  * @brief Mass storage info/data module
-  * @{
-  */ 
-
-/** @defgroup MSC_DATA_Private_TypesDefinitions
-  * @{
-  */ 
-/**
-  * @}
-  */ 
-
-
-/** @defgroup MSC_DATA_Private_Defines
-  * @{
-  */ 
-/**
-  * @}
-  */ 
-
-
-/** @defgroup MSC_DATA_Private_Macros
-  * @{
-  */ 
-/**
-  * @}
-  */ 
-
-
-/** @defgroup MSC_DATA_Private_Variables
-  * @{
-  */ 
-
-
-/* USB Mass storage Page 0 Inquiry Data */
-const uint8_t  MSC_Page00_Inquiry_Data[] = {//7						
-	0x00,		
-	0x00, 
-	0x00, 
-	(LENGTH_INQUIRY_PAGE00 - 4),
-	0x00, 
-	0x80, 
-	0x83 
-};  
-/* USB Mass storage sense 6  Data */
-const uint8_t  MSC_Mode_Sense6_data[] = {
-	0x00,
-	0x00,
-	0x00,
-	0x00,
-	0x00,
-	0x00, 
-	0x00,
-	0x00
-};	
-/* USB Mass storage sense 10  Data */
-const uint8_t  MSC_Mode_Sense10_data[] = {
-	0x00,
-	0x06, 
-	0x00, 
-	0x00, 
-	0x00, 
-	0x00, 
-	0x00, 
-	0x00
-};
-/**
-  * @}
-  */ 
-
-
-/** @defgroup MSC_DATA_Private_FunctionPrototypes
-  * @{
-  */ 
-/**
-  * @}
-  */ 
-
-
-/** @defgroup MSC_DATA_Private_Functions
-  * @{
-  */ 
-
-/**
-  * @}
-  */ 
-
-
-/**
-  * @}
-  */ 
-
-
-/**
-  * @}
-  */ 
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/stmhal/usbdev/class/msc/src/usbd_msc_scsi.c b/stmhal/usbdev/class/msc/src/usbd_msc_scsi.c
deleted file mode 100644
index ab94d8966..000000000
--- a/stmhal/usbdev/class/msc/src/usbd_msc_scsi.c
+++ /dev/null
@@ -1,770 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    usbd_msc_scsi.c
-  * @author  MCD Application Team
-  * @version V2.0.0
-  * @date    18-February-2014
-  * @brief   This file provides all the USBD SCSI layer functions.
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT 2014 STMicroelectronics</center></h2>
-  *
-  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
-  * You may not use this file except in compliance with the License.
-  * You may obtain a copy of the License at:
-  *
-  *        http://www.st.com/software_license_agreement_liberty_v2
-  *
-  * Unless required by applicable law or agreed to in writing, software 
-  * distributed under the License is distributed on an "AS IS" BASIS, 
-  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  * See the License for the specific language governing permissions and
-  * limitations under the License.
-  *
-  ******************************************************************************
-  */ 
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_msc_bot.h"
-#include "usbd_msc_scsi.h"
-#include "usbd_msc.h"
-#include "usbd_msc_data.h"
-
-
-
-/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
-  * @{
-  */
-
-
-/** @defgroup MSC_SCSI 
-  * @brief Mass storage SCSI layer module
-  * @{
-  */ 
-
-/** @defgroup MSC_SCSI_Private_TypesDefinitions
-  * @{
-  */ 
-/**
-  * @}
-  */ 
-
-
-/** @defgroup MSC_SCSI_Private_Defines
-  * @{
-  */ 
-
-/**
-  * @}
-  */ 
-
-
-/** @defgroup MSC_SCSI_Private_Macros
-  * @{
-  */ 
-/**
-  * @}
-  */ 
-
-
-/** @defgroup MSC_SCSI_Private_Variables
-  * @{
-  */ 
-
-/**
-  * @}
-  */ 
-
-
-/** @defgroup MSC_SCSI_Private_FunctionPrototypes
-  * @{
-  */ 
-static int8_t SCSI_TestUnitReady(USBD_HandleTypeDef  *pdev, uint8_t lun, uint8_t *params);
-static int8_t SCSI_Inquiry(USBD_HandleTypeDef  *pdev, uint8_t lun, uint8_t *params);
-static int8_t SCSI_ReadFormatCapacity(USBD_HandleTypeDef  *pdev, uint8_t lun, uint8_t *params);
-static int8_t SCSI_ReadCapacity10(USBD_HandleTypeDef  *pdev, uint8_t lun, uint8_t *params);
-static int8_t SCSI_RequestSense (USBD_HandleTypeDef  *pdev, uint8_t lun, uint8_t *params);
-static int8_t SCSI_StartStopUnit(USBD_HandleTypeDef  *pdev, uint8_t lun, uint8_t *params);
-static int8_t SCSI_ModeSense6 (USBD_HandleTypeDef  *pdev, uint8_t lun, uint8_t *params);
-static int8_t SCSI_ModeSense10 (USBD_HandleTypeDef  *pdev, uint8_t lun, uint8_t *params);
-static int8_t SCSI_Write10(USBD_HandleTypeDef  *pdev, uint8_t lun , uint8_t *params);
-static int8_t SCSI_Read10(USBD_HandleTypeDef  *pdev, uint8_t lun , uint8_t *params);
-static int8_t SCSI_Verify10(USBD_HandleTypeDef  *pdev, uint8_t lun, uint8_t *params);
-static int8_t SCSI_CheckAddressRange (USBD_HandleTypeDef  *pdev, 
-                                      uint8_t lun , 
-                                      uint32_t blk_offset , 
-                                      uint16_t blk_nbr);
-static int8_t SCSI_ProcessRead (USBD_HandleTypeDef  *pdev,
-                                uint8_t lun);
-
-static int8_t SCSI_ProcessWrite (USBD_HandleTypeDef  *pdev,
-                                 uint8_t lun);
-/**
-  * @}
-  */ 
-
-
-/** @defgroup MSC_SCSI_Private_Functions
-  * @{
-  */ 
-
-
-/**
-* @brief  SCSI_ProcessCmd
-*         Process SCSI commands
-* @param  pdev: device instance
-* @param  lun: Logical unit number
-* @param  params: Command parameters
-* @retval status
-*/
-int8_t SCSI_ProcessCmd(USBD_HandleTypeDef  *pdev,
-                           uint8_t lun, 
-                           uint8_t *params)
-{
-  
-  switch (params[0])
-  {
-  case SCSI_TEST_UNIT_READY:
-    return SCSI_TestUnitReady(pdev, lun, params);
-    
-  case SCSI_REQUEST_SENSE:
-    return SCSI_RequestSense (pdev, lun, params);
-  case SCSI_INQUIRY:
-    return SCSI_Inquiry(pdev, lun, params);
-    
-  case SCSI_START_STOP_UNIT:
-    return SCSI_StartStopUnit(pdev, lun, params);
-    
-  case SCSI_ALLOW_MEDIUM_REMOVAL:
-    return SCSI_StartStopUnit(pdev, lun, params);
-    
-  case SCSI_MODE_SENSE6:
-    return SCSI_ModeSense6 (pdev, lun, params);
-    
-  case SCSI_MODE_SENSE10:
-    return SCSI_ModeSense10 (pdev, lun, params);
-    
-  case SCSI_READ_FORMAT_CAPACITIES:
-    return SCSI_ReadFormatCapacity(pdev, lun, params);
-    
-  case SCSI_READ_CAPACITY10:
-    return SCSI_ReadCapacity10(pdev, lun, params);
-    
-  case SCSI_READ10:
-    return SCSI_Read10(pdev, lun, params); 
-    
-  case SCSI_WRITE10:
-    return SCSI_Write10(pdev, lun, params);
-    
-  case SCSI_VERIFY10:
-    return SCSI_Verify10(pdev, lun, params);
-    
-  default:
-    SCSI_SenseCode(pdev, 
-                   lun,
-                   ILLEGAL_REQUEST, 
-                   INVALID_CDB);    
-    return -1;
-  }
-}
-
-
-/**
-* @brief  SCSI_TestUnitReady
-*         Process SCSI Test Unit Ready Command
-* @param  lun: Logical unit number
-* @param  params: Command parameters
-* @retval status
-*/
-static int8_t SCSI_TestUnitReady(USBD_HandleTypeDef  *pdev, uint8_t lun, uint8_t *params)
-{
-  USBD_MSC_BOT_HandleTypeDef  *hmsc = pdev->pClassData;  
-    
-  /* case 9 : Hi > D0 */
-  if (hmsc->cbw.dDataLength != 0)
-  {
-    SCSI_SenseCode(pdev,
-                   hmsc->cbw.bLUN, 
-                   ILLEGAL_REQUEST, 
-                   INVALID_CDB);
-    return -1;
-  }  
-  
-  if(((USBD_StorageTypeDef *)pdev->pUserData)->IsReady(lun) !=0 )
-  {
-    SCSI_SenseCode(pdev,
-                   lun,
-                   NOT_READY, 
-                   MEDIUM_NOT_PRESENT);
-    
-    hmsc->bot_state = USBD_BOT_NO_DATA;
-    return -1;
-  } 
-  hmsc->bot_data_length = 0;
-  return 0;
-}
-
-/**
-* @brief  SCSI_Inquiry
-*         Process Inquiry command
-* @param  lun: Logical unit number
-* @param  params: Command parameters
-* @retval status
-*/
-static int8_t  SCSI_Inquiry(USBD_HandleTypeDef  *pdev, uint8_t lun, uint8_t *params)
-{
-  uint8_t* pPage;
-  uint16_t len;
-  USBD_MSC_BOT_HandleTypeDef  *hmsc = pdev->pClassData; 
-  
-  if (params[1] & 0x01)/*Evpd is set*/
-  {
-    pPage = (uint8_t *)MSC_Page00_Inquiry_Data;
-    len = LENGTH_INQUIRY_PAGE00;
-  }
-  else
-  {
-    
-    pPage = (uint8_t *)&((USBD_StorageTypeDef *)pdev->pUserData)->pInquiry[lun * STANDARD_INQUIRY_DATA_LEN];
-    len = pPage[4] + 5;
-    
-    if (params[4] <= len)
-    {
-      len = params[4];
-    }
-  }
-  hmsc->bot_data_length = len;
-  
-  while (len) 
-  {
-    len--;
-    hmsc->bot_data[len] = pPage[len];
-  }
-  return 0;
-}
-
-/**
-* @brief  SCSI_ReadCapacity10
-*         Process Read Capacity 10 command
-* @param  lun: Logical unit number
-* @param  params: Command parameters
-* @retval status
-*/
-static int8_t SCSI_ReadCapacity10(USBD_HandleTypeDef  *pdev, uint8_t lun, uint8_t *params)
-{
-  USBD_MSC_BOT_HandleTypeDef  *hmsc = pdev->pClassData; 
-  
-  if(((USBD_StorageTypeDef *)pdev->pUserData)->GetCapacity(lun, &hmsc->scsi_blk_nbr, &hmsc->scsi_blk_size) != 0)
-  {
-    SCSI_SenseCode(pdev,
-                   lun,
-                   NOT_READY, 
-                   MEDIUM_NOT_PRESENT);
-    return -1;
-  } 
-  else
-  {
-    
-    hmsc->bot_data[0] = (uint8_t)((hmsc->scsi_blk_nbr - 1) >> 24);
-    hmsc->bot_data[1] = (uint8_t)((hmsc->scsi_blk_nbr - 1) >> 16);
-    hmsc->bot_data[2] = (uint8_t)((hmsc->scsi_blk_nbr - 1) >>  8);
-    hmsc->bot_data[3] = (uint8_t)(hmsc->scsi_blk_nbr - 1);
-    
-    hmsc->bot_data[4] = (uint8_t)(hmsc->scsi_blk_size >>  24);
-    hmsc->bot_data[5] = (uint8_t)(hmsc->scsi_blk_size >>  16);
-    hmsc->bot_data[6] = (uint8_t)(hmsc->scsi_blk_size >>  8);
-    hmsc->bot_data[7] = (uint8_t)(hmsc->scsi_blk_size);
-    
-    hmsc->bot_data_length = 8;
-    return 0;
-  }
-}
-/**
-* @brief  SCSI_ReadFormatCapacity
-*         Process Read Format Capacity command
-* @param  lun: Logical unit number
-* @param  params: Command parameters
-* @retval status
-*/
-static int8_t SCSI_ReadFormatCapacity(USBD_HandleTypeDef  *pdev, uint8_t lun, uint8_t *params)
-{
-  USBD_MSC_BOT_HandleTypeDef  *hmsc = pdev->pClassData; 
-  
-  uint16_t blk_size;
-  uint32_t blk_nbr;
-  uint16_t i;
-  
-  for(i=0 ; i < 12 ; i++) 
-  {
-    hmsc->bot_data[i] = 0;
-  }
-  
-  if(((USBD_StorageTypeDef *)pdev->pUserData)->GetCapacity(lun, &blk_nbr, &blk_size) != 0)
-  {
-    SCSI_SenseCode(pdev,
-                   lun,
-                   NOT_READY, 
-                   MEDIUM_NOT_PRESENT);
-    return -1;
-  } 
-  else
-  {
-    hmsc->bot_data[3] = 0x08;
-    hmsc->bot_data[4] = (uint8_t)((blk_nbr - 1) >> 24);
-    hmsc->bot_data[5] = (uint8_t)((blk_nbr - 1) >> 16);
-    hmsc->bot_data[6] = (uint8_t)((blk_nbr - 1) >>  8);
-    hmsc->bot_data[7] = (uint8_t)(blk_nbr - 1);
-    
-    hmsc->bot_data[8] = 0x02;
-    hmsc->bot_data[9] = (uint8_t)(blk_size >>  16);
-    hmsc->bot_data[10] = (uint8_t)(blk_size >>  8);
-    hmsc->bot_data[11] = (uint8_t)(blk_size);
-    
-    hmsc->bot_data_length = 12;
-    return 0;
-  }
-}
-/**
-* @brief  SCSI_ModeSense6
-*         Process Mode Sense6 command
-* @param  lun: Logical unit number
-* @param  params: Command parameters
-* @retval status
-*/
-static int8_t SCSI_ModeSense6 (USBD_HandleTypeDef  *pdev, uint8_t lun, uint8_t *params)
-{
-  USBD_MSC_BOT_HandleTypeDef  *hmsc = pdev->pClassData; 
-  uint16_t len = 8 ;
-  hmsc->bot_data_length = len;
-  
-  while (len) 
-  {
-    len--;
-    hmsc->bot_data[len] = MSC_Mode_Sense6_data[len];
-  }
-  return 0;
-}
-
-/**
-* @brief  SCSI_ModeSense10
-*         Process Mode Sense10 command
-* @param  lun: Logical unit number
-* @param  params: Command parameters
-* @retval status
-*/
-static int8_t SCSI_ModeSense10 (USBD_HandleTypeDef  *pdev, uint8_t lun, uint8_t *params)
-{
-  uint16_t len = 8;
-  USBD_MSC_BOT_HandleTypeDef  *hmsc = pdev->pClassData; 
-  
-  hmsc->bot_data_length = len;
-
-  while (len) 
-  {
-    len--;
-    hmsc->bot_data[len] = MSC_Mode_Sense10_data[len];
-  }
-  return 0;
-}
-
-/**
-* @brief  SCSI_RequestSense
-*         Process Request Sense command
-* @param  lun: Logical unit number
-* @param  params: Command parameters
-* @retval status
-*/
-
-static int8_t SCSI_RequestSense (USBD_HandleTypeDef  *pdev, uint8_t lun, uint8_t *params)
-{
-  uint8_t i;
-  USBD_MSC_BOT_HandleTypeDef  *hmsc = pdev->pClassData; 
-  
-  for(i=0 ; i < REQUEST_SENSE_DATA_LEN ; i++) 
-  {
-    hmsc->bot_data[i] = 0;
-  }
-  
-  hmsc->bot_data[0]	= 0x70;		
-  hmsc->bot_data[7]	= REQUEST_SENSE_DATA_LEN - 6;	
-  
-  if((hmsc->scsi_sense_head != hmsc->scsi_sense_tail)) {
-    
-    hmsc->bot_data[2]     = hmsc->scsi_sense[hmsc->scsi_sense_head].Skey;		
-    hmsc->bot_data[12]    = hmsc->scsi_sense[hmsc->scsi_sense_head].w.b.ASCQ;	
-    hmsc->bot_data[13]    = hmsc->scsi_sense[hmsc->scsi_sense_head].w.b.ASC;	
-    hmsc->scsi_sense_head++;
-    
-    if (hmsc->scsi_sense_head == SENSE_LIST_DEEPTH)
-    {
-      hmsc->scsi_sense_head = 0;
-    }
-  }
-  hmsc->bot_data_length = REQUEST_SENSE_DATA_LEN;  
-  
-  if (params[4] <= REQUEST_SENSE_DATA_LEN)
-  {
-    hmsc->bot_data_length = params[4];
-  }
-  return 0;
-}
-
-/**
-* @brief  SCSI_SenseCode
-*         Load the last error code in the error list
-* @param  lun: Logical unit number
-* @param  sKey: Sense Key
-* @param  ASC: Additional Sense Key
-* @retval none
-
-*/
-void SCSI_SenseCode(USBD_HandleTypeDef  *pdev, uint8_t lun, uint8_t sKey, uint8_t ASC)
-{
-  USBD_MSC_BOT_HandleTypeDef  *hmsc = pdev->pClassData; 
-  
-  hmsc->scsi_sense[hmsc->scsi_sense_tail].Skey  = sKey;
-  hmsc->scsi_sense[hmsc->scsi_sense_tail].w.ASC = ASC << 8;
-  hmsc->scsi_sense_tail++;
-  if (hmsc->scsi_sense_tail == SENSE_LIST_DEEPTH)
-  {
-    hmsc->scsi_sense_tail = 0;
-  }
-}
-/**
-* @brief  SCSI_StartStopUnit
-*         Process Start Stop Unit command
-* @param  lun: Logical unit number
-* @param  params: Command parameters
-* @retval status
-*/
-static int8_t SCSI_StartStopUnit(USBD_HandleTypeDef  *pdev, uint8_t lun, uint8_t *params)
-{
-  USBD_MSC_BOT_HandleTypeDef  *hmsc = pdev->pClassData;   
-  hmsc->bot_data_length = 0;
-  return 0;
-}
-
-/**
-* @brief  SCSI_Read10
-*         Process Read10 command
-* @param  lun: Logical unit number
-* @param  params: Command parameters
-* @retval status
-*/
-static int8_t SCSI_Read10(USBD_HandleTypeDef  *pdev, uint8_t lun , uint8_t *params)
-{
-  USBD_MSC_BOT_HandleTypeDef  *hmsc = pdev->pClassData; 
-  
-  if(hmsc->bot_state == USBD_BOT_IDLE)  /* Idle */
-  {
-    
-    /* case 10 : Ho <> Di */
-    
-    if ((hmsc->cbw.bmFlags & 0x80) != 0x80)
-    {
-      SCSI_SenseCode(pdev,
-                     hmsc->cbw.bLUN, 
-                     ILLEGAL_REQUEST, 
-                     INVALID_CDB);
-      return -1;
-    }    
-    
-    if(((USBD_StorageTypeDef *)pdev->pUserData)->IsReady(lun) !=0 )
-    {
-      SCSI_SenseCode(pdev,
-                     lun,
-                     NOT_READY, 
-                     MEDIUM_NOT_PRESENT);
-      return -1;
-    } 
-    
-    hmsc->scsi_blk_addr = (params[2] << 24) | \
-      (params[3] << 16) | \
-        (params[4] <<  8) | \
-          params[5];
-    
-    hmsc->scsi_blk_len =  (params[7] <<  8) | \
-      params[8];  
-    
-    
-    
-    if( SCSI_CheckAddressRange(pdev, lun, hmsc->scsi_blk_addr, hmsc->scsi_blk_len) < 0)
-    {
-      return -1; /* error */
-    }
-    
-    hmsc->bot_state = USBD_BOT_DATA_IN;
-    hmsc->scsi_blk_addr *= hmsc->scsi_blk_size;
-    hmsc->scsi_blk_len  *= hmsc->scsi_blk_size;
-    
-    /* cases 4,5 : Hi <> Dn */
-    if (hmsc->cbw.dDataLength != hmsc->scsi_blk_len)
-    {
-      SCSI_SenseCode(pdev,
-                     hmsc->cbw.bLUN, 
-                     ILLEGAL_REQUEST, 
-                     INVALID_CDB);
-      return -1;
-    }
-  }
-  hmsc->bot_data_length = MSC_MEDIA_PACKET;  
-  
-  return SCSI_ProcessRead(pdev, lun);
-}
-
-/**
-* @brief  SCSI_Write10
-*         Process Write10 command
-* @param  lun: Logical unit number
-* @param  params: Command parameters
-* @retval status
-*/
-
-static int8_t SCSI_Write10 (USBD_HandleTypeDef  *pdev, uint8_t lun , uint8_t *params)
-{
-  USBD_MSC_BOT_HandleTypeDef  *hmsc = pdev->pClassData; 
-  
-  if (hmsc->bot_state == USBD_BOT_IDLE) /* Idle */
-  {
-    
-    /* case 8 : Hi <> Do */
-    
-    if ((hmsc->cbw.bmFlags & 0x80) == 0x80)
-    {
-      SCSI_SenseCode(pdev,
-                     hmsc->cbw.bLUN, 
-                     ILLEGAL_REQUEST, 
-                     INVALID_CDB);
-      return -1;
-    }
-    
-    /* Check whether Media is ready */
-    if(((USBD_StorageTypeDef *)pdev->pUserData)->IsReady(lun) !=0 )
-    {
-      SCSI_SenseCode(pdev,
-                     lun,
-                     NOT_READY, 
-                     MEDIUM_NOT_PRESENT);
-      return -1;
-    } 
-    
-    /* Check If media is write-protected */
-    if(((USBD_StorageTypeDef *)pdev->pUserData)->IsWriteProtected(lun) !=0 )
-    {
-      SCSI_SenseCode(pdev,
-                     lun,
-                     NOT_READY, 
-                     WRITE_PROTECTED);
-      return -1;
-    } 
-    
-    
-    hmsc->scsi_blk_addr = (params[2] << 24) | \
-      (params[3] << 16) | \
-        (params[4] <<  8) | \
-          params[5];
-    hmsc->scsi_blk_len = (params[7] <<  8) | \
-      params[8];  
-    
-    /* check if LBA address is in the right range */
-    if(SCSI_CheckAddressRange(pdev,
-                              lun,
-                              hmsc->scsi_blk_addr,
-                              hmsc->scsi_blk_len) < 0)
-    {
-      return -1; /* error */      
-    }
-    
-    hmsc->scsi_blk_addr *= hmsc->scsi_blk_size;
-    hmsc->scsi_blk_len  *= hmsc->scsi_blk_size;
-    
-    /* cases 3,11,13 : Hn,Ho <> D0 */
-    if (hmsc->cbw.dDataLength != hmsc->scsi_blk_len)
-    {
-      SCSI_SenseCode(pdev,
-                     hmsc->cbw.bLUN, 
-                     ILLEGAL_REQUEST, 
-                     INVALID_CDB);
-      return -1;
-    }
-    
-    /* Prepare EP to receive first data packet */
-    hmsc->bot_state = USBD_BOT_DATA_OUT;  
-    USBD_LL_PrepareReceive (pdev,
-                      MSC_EPOUT_ADDR,
-                      hmsc->bot_data, 
-                      MIN (hmsc->scsi_blk_len, MSC_MEDIA_PACKET));  
-  }
-  else /* Write Process ongoing */
-  {
-    return SCSI_ProcessWrite(pdev, lun);
-  }
-  return 0;
-}
-
-
-/**
-* @brief  SCSI_Verify10
-*         Process Verify10 command
-* @param  lun: Logical unit number
-* @param  params: Command parameters
-* @retval status
-*/
-
-static int8_t SCSI_Verify10(USBD_HandleTypeDef  *pdev, uint8_t lun , uint8_t *params)
-{
-  USBD_MSC_BOT_HandleTypeDef  *hmsc = pdev->pClassData; 
-  
-  if ((params[1]& 0x02) == 0x02) 
-  {
-    SCSI_SenseCode (pdev,
-                    lun, 
-                    ILLEGAL_REQUEST, 
-                    INVALID_FIELED_IN_COMMAND);
-    return -1; /* Error, Verify Mode Not supported*/
-  }
-  
-  if(SCSI_CheckAddressRange(pdev,
-                            lun, 
-                            hmsc->scsi_blk_addr, 
-                            hmsc->scsi_blk_len) < 0)
-  {
-    return -1; /* error */      
-  }
-  hmsc->bot_data_length = 0;
-  return 0;
-}
-
-/**
-* @brief  SCSI_CheckAddressRange
-*         Check address range
-* @param  lun: Logical unit number
-* @param  blk_offset: first block address
-* @param  blk_nbr: number of block to be processed
-* @retval status
-*/
-static int8_t SCSI_CheckAddressRange (USBD_HandleTypeDef  *pdev, uint8_t lun , uint32_t blk_offset , uint16_t blk_nbr)
-{
-  USBD_MSC_BOT_HandleTypeDef  *hmsc = pdev->pClassData; 
-  
-  if ((blk_offset + blk_nbr) > hmsc->scsi_blk_nbr )
-  {
-    SCSI_SenseCode(pdev,
-                   lun, 
-                   ILLEGAL_REQUEST, 
-                   ADDRESS_OUT_OF_RANGE);
-    return -1;
-  }
-  return 0;
-}
-
-/**
-* @brief  SCSI_ProcessRead
-*         Handle Read Process
-* @param  lun: Logical unit number
-* @retval status
-*/
-static int8_t SCSI_ProcessRead (USBD_HandleTypeDef  *pdev, uint8_t lun)
-{
-  USBD_MSC_BOT_HandleTypeDef  *hmsc = pdev->pClassData;   
-  uint32_t len;
-  
-  len = MIN(hmsc->scsi_blk_len , MSC_MEDIA_PACKET); 
-  
-  if( ((USBD_StorageTypeDef *)pdev->pUserData)->Read(lun ,
-                              hmsc->bot_data, 
-                              hmsc->scsi_blk_addr / hmsc->scsi_blk_size, 
-                              len / hmsc->scsi_blk_size) < 0)
-  {
-    
-    SCSI_SenseCode(pdev,
-                   lun, 
-                   HARDWARE_ERROR, 
-                   UNRECOVERED_READ_ERROR);
-    return -1; 
-  }
-  
-  
-  USBD_LL_Transmit (pdev, 
-             MSC_EPIN_ADDR,
-             hmsc->bot_data,
-             len);
-  
-  
-  hmsc->scsi_blk_addr   += len; 
-  hmsc->scsi_blk_len    -= len;  
-  
-  /* case 6 : Hi = Di */
-  hmsc->csw.dDataResidue -= len;
-  
-  if (hmsc->scsi_blk_len == 0)
-  {
-    hmsc->bot_state = USBD_BOT_LAST_DATA_IN;
-  }
-  return 0;
-}
-
-/**
-* @brief  SCSI_ProcessWrite
-*         Handle Write Process
-* @param  lun: Logical unit number
-* @retval status
-*/
-
-static int8_t SCSI_ProcessWrite (USBD_HandleTypeDef  *pdev, uint8_t lun)
-{
-  uint32_t len;
-  USBD_MSC_BOT_HandleTypeDef  *hmsc = pdev->pClassData; 
-  
-  len = MIN(hmsc->scsi_blk_len , MSC_MEDIA_PACKET); 
-  
-  if(((USBD_StorageTypeDef *)pdev->pUserData)->Write(lun ,
-                              hmsc->bot_data, 
-                              hmsc->scsi_blk_addr / hmsc->scsi_blk_size, 
-                              len / hmsc->scsi_blk_size) < 0)
-  {
-    SCSI_SenseCode(pdev,
-                   lun, 
-                   HARDWARE_ERROR, 
-                   WRITE_FAULT);     
-    return -1; 
-  }
-  
-  
-  hmsc->scsi_blk_addr  += len; 
-  hmsc->scsi_blk_len   -= len; 
-  
-  /* case 12 : Ho = Do */
-  hmsc->csw.dDataResidue -= len;
-  
-  if (hmsc->scsi_blk_len == 0)
-  {
-    MSC_BOT_SendCSW (pdev, USBD_CSW_CMD_PASSED);
-  }
-  else
-  {
-    /* Prapare EP to Receive next packet */
-    USBD_LL_PrepareReceive (pdev,
-                            MSC_EPOUT_ADDR,
-                            hmsc->bot_data, 
-                            MIN (hmsc->scsi_blk_len, MSC_MEDIA_PACKET)); 
-  }
-  
-  return 0;
-}
-/**
-  * @}
-  */ 
-
-
-/**
-  * @}
-  */ 
-
-
-/**
-  * @}
-  */ 
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/stmhal/usbdev/class/msc/src/usbd_msc_storage_template.c b/stmhal/usbdev/class/msc/src/usbd_msc_storage_template.c
deleted file mode 100644
index f75f11a9e..000000000
--- a/stmhal/usbdev/class/msc/src/usbd_msc_storage_template.c
+++ /dev/null
@@ -1,188 +0,0 @@
-/**
-  ******************************************************************************
-  * @file    usbd_msc_storage_template.c
-  * @author  MCD Application Team
-  * @version V2.0.0
-  * @date    18-February-2014
-  * @brief   Memory management layer
-  ******************************************************************************
-  * @attention
-  *
-  * <h2><center>&copy; COPYRIGHT 2014 STMicroelectronics</center></h2>
-  *
-  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
-  * You may not use this file except in compliance with the License.
-  * You may obtain a copy of the License at:
-  *
-  *        http://www.st.com/software_license_agreement_liberty_v2
-  *
-  * Unless required by applicable law or agreed to in writing, software 
-  * distributed under the License is distributed on an "AS IS" BASIS, 
-  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  * See the License for the specific language governing permissions and
-  * limitations under the License.
-  *
-  ******************************************************************************
-  */ 
-
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_msc_storage_template.h"
-
-
-/* Private typedef -----------------------------------------------------------*/
-/* Private define ------------------------------------------------------------*/
-/* Private macro -------------------------------------------------------------*/
-/* Private variables ---------------------------------------------------------*/
-/* Private function prototypes -----------------------------------------------*/
-/* Extern function prototypes ------------------------------------------------*/
-/* Private functions ---------------------------------------------------------*/
-
-#define STORAGE_LUN_NBR                  1  
-#define STORAGE_BLK_NBR                  0x10000  
-#define STORAGE_BLK_SIZ                  0x200
-
-int8_t STORAGE_Init (uint8_t lun);
-
-int8_t STORAGE_GetCapacity (uint8_t lun, 
-                           uint32_t *block_num, 
-                           uint16_t *block_size);
-
-int8_t  STORAGE_IsReady (uint8_t lun);
-
-int8_t  STORAGE_IsWriteProtected (uint8_t lun);
-
-int8_t STORAGE_Read (uint8_t lun, 
-                        uint8_t *buf, 
-                        uint32_t blk_addr,
-                        uint16_t blk_len);
-
-int8_t STORAGE_Write (uint8_t lun, 
-                        uint8_t *buf, 
-                        uint32_t blk_addr,
-                        uint16_t blk_len);
-
-int8_t STORAGE_GetMaxLun (void);
-
-/* USB Mass storage Standard Inquiry Data */
-int8_t  STORAGE_Inquirydata[] = {//36
-  
-  /* LUN 0 */
-  0x00,		
-  0x80,		
-  0x02,		
-  0x02,
-  (STANDARD_INQUIRY_DATA_LEN - 5),
-  0x00,
-  0x00,	
-  0x00,
-  'S', 'T', 'M', ' ', ' ', ' ', ' ', ' ', /* Manufacturer : 8 bytes */
-  'P', 'r', 'o', 'd', 'u', 'c', 't', ' ', /* Product      : 16 Bytes */
-  ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
-  '0', '.', '0' ,'1',                     /* Version      : 4 Bytes */
-}; 
-
-USBD_StorageTypeDef USBD_MSC_Template_fops =
-{
-  STORAGE_Init,
-  STORAGE_GetCapacity,
-  STORAGE_IsReady,
-  STORAGE_IsWriteProtected,
-  STORAGE_Read,
-  STORAGE_Write,
-  STORAGE_GetMaxLun,
-  STORAGE_Inquirydata,
-  
-};
-/*******************************************************************************
-* Function Name  : Read_Memory
-* Description    : Handle the Read operation from the microSD card.
-* Input          : None.
-* Output         : None.
-* Return         : None.
-*******************************************************************************/
-int8_t STORAGE_Init (uint8_t lun)
-{
-  return (0);
-}
-
-/*******************************************************************************
-* Function Name  : Read_Memory
-* Description    : Handle the Read operation from the STORAGE card.
-* Input          : None.
-* Output         : None.
-* Return         : None.
-*******************************************************************************/
-int8_t STORAGE_GetCapacity (uint8_t lun, uint32_t *block_num, uint16_t *block_size)
-{
-  *block_num  = STORAGE_BLK_NBR;
-  *block_size = STORAGE_BLK_SIZ;
-  return (0);
-}
-
-/*******************************************************************************
-* Function Name  : Read_Memory
-* Description    : Handle the Read operation from the STORAGE card.
-* Input          : None.
-* Output         : None.
-* Return         : None.
-*******************************************************************************/
-int8_t  STORAGE_IsReady (uint8_t lun)
-{
-  return (0);
-}
-
-/*******************************************************************************
-* Function Name  : Read_Memory
-* Description    : Handle the Read operation from the STORAGE card.
-* Input          : None.
-* Output         : None.
-* Return         : None.
-*******************************************************************************/
-int8_t  STORAGE_IsWriteProtected (uint8_t lun)
-{
-  return  0;
-}
-
-/*******************************************************************************
-* Function Name  : Read_Memory
-* Description    : Handle the Read operation from the STORAGE card.
-* Input          : None.
-* Output         : None.
-* Return         : None.
-*******************************************************************************/
-int8_t STORAGE_Read (uint8_t lun, 
-                 uint8_t *buf, 
-                 uint32_t blk_addr,                       
-                 uint16_t blk_len)
-{
-  return 0;
-}
-/*******************************************************************************
-* Function Name  : Write_Memory
-* Description    : Handle the Write operation to the STORAGE card.
-* Input          : None.
-* Output         : None.
-* Return         : None.
-*******************************************************************************/
-int8_t STORAGE_Write (uint8_t lun, 
-                  uint8_t *buf, 
-                  uint32_t blk_addr,
-                  uint16_t blk_len)
-{
-  return (0);
-}
-/*******************************************************************************
-* Function Name  : Write_Memory
-* Description    : Handle the Write operation to the STORAGE card.
-* Input          : None.
-* Output         : None.
-* Return         : None.
-*******************************************************************************/
-int8_t STORAGE_GetMaxLun (void)
-{
-  return (STORAGE_LUN_NBR - 1);
-}
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
-
diff --git a/stmhal/usbdev/class/cdc_msc_hid/src/usbd_cdc_msc_hid.c b/stmhal/usbdev/class/src/usbd_cdc_msc_hid.c
similarity index 100%
rename from stmhal/usbdev/class/cdc_msc_hid/src/usbd_cdc_msc_hid.c
rename to stmhal/usbdev/class/src/usbd_cdc_msc_hid.c
diff --git a/stmhal/usbdev/class/cdc_msc/src/usbd_msc.c b/stmhal/usbdev/class/src/usbd_msc.c
similarity index 100%
rename from stmhal/usbdev/class/cdc_msc/src/usbd_msc.c
rename to stmhal/usbdev/class/src/usbd_msc.c
diff --git a/stmhal/usbdev/class/cdc_msc_hid/src/usbd_msc_bot.c b/stmhal/usbdev/class/src/usbd_msc_bot.c
similarity index 100%
rename from stmhal/usbdev/class/cdc_msc_hid/src/usbd_msc_bot.c
rename to stmhal/usbdev/class/src/usbd_msc_bot.c
diff --git a/stmhal/usbdev/class/cdc_msc/src/usbd_msc_data.c b/stmhal/usbdev/class/src/usbd_msc_data.c
similarity index 100%
rename from stmhal/usbdev/class/cdc_msc/src/usbd_msc_data.c
rename to stmhal/usbdev/class/src/usbd_msc_data.c
diff --git a/stmhal/usbdev/class/cdc_msc_hid/src/usbd_msc_scsi.c b/stmhal/usbdev/class/src/usbd_msc_scsi.c
similarity index 100%
rename from stmhal/usbdev/class/cdc_msc_hid/src/usbd_msc_scsi.c
rename to stmhal/usbdev/class/src/usbd_msc_scsi.c
-- 
GitLab