Bläddra i källkod

USB Mic descriptor

Murad Jabir 2 år sedan
förälder
incheckning
9e5a7c233f

+ 1 - 0
.cproject

@@ -185,4 +185,5 @@
 			<autodiscovery enabled="false" problemReportingEnabled="true" selectedProfileId=""/>
 		</scannerConfigBuildInfo>
 	</storageModule>
+	<storageModule moduleId="refreshScope"/>
 </cproject>

+ 139 - 136
Middlewares/ST/STM32_USB_Device_Library/Class/AUDIO/Inc/usbd_audio.h

@@ -1,20 +1,20 @@
 /**
-  ******************************************************************************
-  * @file    usbd_audio.h
-  * @author  MCD Application Team
-  * @brief   header file for the usbd_audio.c file.
-  ******************************************************************************
-  * @attention
-  *
-  * Copyright (c) 2015 STMicroelectronics.
-  * All rights reserved.
-  *
-  * This software is licensed under terms that can be found in the LICENSE file
-  * in the root directory of this software component.
-  * If no LICENSE file comes with this software, it is provided AS-IS.
-  *
-  ******************************************************************************
-  */
+ ******************************************************************************
+ * @file    usbd_audio.h
+ * @author  MCD Application Team
+ * @brief   header file for the usbd_audio.c file.
+ ******************************************************************************
+ * @attention
+ *
+ * Copyright (c) 2015 STMicroelectronics.
+ * All rights reserved.
+ *
+ * This software is licensed under terms that can be found in the LICENSE file
+ * in the root directory of this software component.
+ * If no LICENSE file comes with this software, it is provided AS-IS.
+ *
+ ******************************************************************************
+ */
 
 /* Define to prevent recursive inclusion -------------------------------------*/
 #ifndef __USB_AUDIO_H
@@ -28,18 +28,18 @@ extern "C" {
 #include  "usbd_ioreq.h"
 
 /** @addtogroup STM32_USB_DEVICE_LIBRARY
-  * @{
-  */
+ * @{
+ */
 
 /** @defgroup USBD_AUDIO
-  * @brief This file is the Header file for usbd_audio.c
-  * @{
-  */
+ * @brief This file is the Header file for usbd_audio.c
+ * @{
+ */
 
 
 /** @defgroup USBD_AUDIO_Exported_Defines
-  * @{
-  */
+ * @{
+ */
 #ifndef USBD_AUDIO_FREQ
 /* AUDIO Class Config */
 #define USBD_AUDIO_FREQ                               48000U
@@ -57,11 +57,14 @@ extern "C" {
 #define AUDIO_FS_BINTERVAL                            0x01U
 #endif /* AUDIO_FS_BINTERVAL */
 
+#define AUDIO_IN_EP                                   0x81U // [EDITED]
+#define AUDIO_OUT_EP                                  0x01U
+#define USB_AUDIO_CONFIG_DESC_SIZ                     100U  // [EDITED]
+
 #ifndef AUDIO_OUT_EP
 #define AUDIO_OUT_EP                                  0x01U
 #endif /* AUDIO_OUT_EP */
 
-#define USB_AUDIO_CONFIG_DESC_SIZ                     0x6DU
 #define AUDIO_INTERFACE_DESC_SIZE                     0x09U
 #define USB_AUDIO_DESC_SIZ                            0x09U
 #define AUDIO_STANDARD_ENDPOINT_DESC_SIZE             0x09U
@@ -117,57 +120,57 @@ extern "C" {
 /* Audio Commands enumeration */
 typedef enum
 {
-  AUDIO_CMD_START = 1,
-  AUDIO_CMD_PLAY,
-  AUDIO_CMD_STOP,
+	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_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;
+	uint8_t cmd;
+	uint8_t data[USB_MAX_EP0_SIZE];
+	uint8_t len;
+	uint8_t unit;
 } USBD_AUDIO_ControlTypeDef;
 
 
 typedef struct
 {
-  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;
+	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 *pbuf, uint32_t size, uint8_t cmd);
-  int8_t (*GetState)(void);
+	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 *pbuf, uint32_t size, uint8_t cmd);
+	int8_t (*GetState)(void);
 } USBD_AUDIO_ItfTypeDef;
 
 /*
@@ -177,136 +180,136 @@ typedef struct
 /* Table 4-2: Class-Specific AC Interface Header Descriptor */
 typedef struct
 {
-  uint8_t           bLength;
-  uint8_t           bDescriptorType;
-  uint8_t           bDescriptorSubtype;
-  uint16_t          bcdADC;
-  uint16_t          wTotalLength;
-  uint8_t           bInCollection;
-  uint8_t           baInterfaceNr;
+	uint8_t           bLength;
+	uint8_t           bDescriptorType;
+	uint8_t           bDescriptorSubtype;
+	uint16_t          bcdADC;
+	uint16_t          wTotalLength;
+	uint8_t           bInCollection;
+	uint8_t           baInterfaceNr;
 } __PACKED USBD_SpeakerIfDescTypeDef;
 
 /* Table 4-3: Input Terminal Descriptor */
 typedef struct
 {
-  uint8_t           bLength;
-  uint8_t           bDescriptorType;
-  uint8_t           bDescriptorSubtype;
-  uint8_t           bTerminalID;
-  uint16_t          wTerminalType;
-  uint8_t           bAssocTerminal;
-  uint8_t           bNrChannels;
-  uint16_t          wChannelConfig;
-  uint8_t           iChannelNames;
-  uint8_t           iTerminal;
+	uint8_t           bLength;
+	uint8_t           bDescriptorType;
+	uint8_t           bDescriptorSubtype;
+	uint8_t           bTerminalID;
+	uint16_t          wTerminalType;
+	uint8_t           bAssocTerminal;
+	uint8_t           bNrChannels;
+	uint16_t          wChannelConfig;
+	uint8_t           iChannelNames;
+	uint8_t           iTerminal;
 } __PACKED USBD_SpeakerInDescTypeDef;
 
 /* USB Speaker Audio Feature Unit Descriptor */
 typedef struct
 {
-  uint8_t           bLength;
-  uint8_t           bDescriptorType;
-  uint8_t           bDescriptorSubtype;
-  uint8_t           bUnitID;
-  uint8_t           bSourceID;
-  uint8_t           bControlSize;
-  uint16_t          bmaControls;
-  uint8_t           iTerminal;
+	uint8_t           bLength;
+	uint8_t           bDescriptorType;
+	uint8_t           bDescriptorSubtype;
+	uint8_t           bUnitID;
+	uint8_t           bSourceID;
+	uint8_t           bControlSize;
+	uint16_t          bmaControls;
+	uint8_t           iTerminal;
 } __PACKED USBD_SpeakerFeatureDescTypeDef;
 
 /* Table 4-4: Output Terminal Descriptor */
 typedef struct
 {
-  uint8_t           bLength;
-  uint8_t           bDescriptorType;
-  uint8_t           bDescriptorSubtype;
-  uint8_t           bTerminalID;
-  uint16_t          wTerminalType;
-  uint8_t           bAssocTerminal;
-  uint8_t           bSourceID;
-  uint8_t           iTerminal;
+	uint8_t           bLength;
+	uint8_t           bDescriptorType;
+	uint8_t           bDescriptorSubtype;
+	uint8_t           bTerminalID;
+	uint16_t          wTerminalType;
+	uint8_t           bAssocTerminal;
+	uint8_t           bSourceID;
+	uint8_t           iTerminal;
 } __PACKED USBD_SpeakerOutDescTypeDef;
 
 /* Table 4-19: Class-Specific AS Interface Descriptor */
 typedef struct
 {
-  uint8_t           bLength;
-  uint8_t           bDescriptorType;
-  uint8_t           bDescriptorSubtype;
-  uint8_t           bTerminalLink;
-  uint8_t           bDelay;
-  uint16_t          wFormatTag;
+	uint8_t           bLength;
+	uint8_t           bDescriptorType;
+	uint8_t           bDescriptorSubtype;
+	uint8_t           bTerminalLink;
+	uint8_t           bDelay;
+	uint16_t          wFormatTag;
 } __PACKED USBD_SpeakerStreamIfDescTypeDef;
 
 /* USB Speaker Audio Type III Format Interface Descriptor */
 typedef struct
 {
-  uint8_t           bLength;
-  uint8_t           bDescriptorType;
-  uint8_t           bDescriptorSubtype;
-  uint8_t           bFormatType;
-  uint8_t           bNrChannels;
-  uint8_t           bSubFrameSize;
-  uint8_t           bBitResolution;
-  uint8_t           bSamFreqType;
-  uint8_t           tSamFreq2;
-  uint8_t           tSamFreq1;
-  uint8_t           tSamFreq0;
+	uint8_t           bLength;
+	uint8_t           bDescriptorType;
+	uint8_t           bDescriptorSubtype;
+	uint8_t           bFormatType;
+	uint8_t           bNrChannels;
+	uint8_t           bSubFrameSize;
+	uint8_t           bBitResolution;
+	uint8_t           bSamFreqType;
+	uint8_t           tSamFreq2;
+	uint8_t           tSamFreq1;
+	uint8_t           tSamFreq0;
 } USBD_SpeakerIIIFormatIfDescTypeDef;
 
 /* Table 4-17: Standard AC Interrupt Endpoint Descriptor */
 typedef struct
 {
-  uint8_t           bLength;
-  uint8_t           bDescriptorType;
-  uint8_t           bEndpointAddress;
-  uint8_t           bmAttributes;
-  uint16_t          wMaxPacketSize;
-  uint8_t           bInterval;
-  uint8_t           bRefresh;
-  uint8_t           bSynchAddress;
+	uint8_t           bLength;
+	uint8_t           bDescriptorType;
+	uint8_t           bEndpointAddress;
+	uint8_t           bmAttributes;
+	uint16_t          wMaxPacketSize;
+	uint8_t           bInterval;
+	uint8_t           bRefresh;
+	uint8_t           bSynchAddress;
 } __PACKED USBD_SpeakerEndDescTypeDef;
 
 /* Table 4-21: Class-Specific AS Isochronous Audio Data Endpoint Descriptor        */
 typedef struct
 {
-  uint8_t           bLength;
-  uint8_t           bDescriptorType;
-  uint8_t           bDescriptor;
-  uint8_t           bmAttributes;
-  uint8_t           bLockDelayUnits;
-  uint16_t          wLockDelay;
+	uint8_t           bLength;
+	uint8_t           bDescriptorType;
+	uint8_t           bDescriptor;
+	uint8_t           bmAttributes;
+	uint8_t           bLockDelayUnits;
+	uint16_t          wLockDelay;
 } __PACKED USBD_SpeakerEndStDescTypeDef;
 
 /**
-  * @}
-  */
+ * @}
+ */
 
 
 
 /** @defgroup USBD_CORE_Exported_Macros
-  * @{
-  */
+ * @{
+ */
 
 /**
-  * @}
-  */
+ * @}
+ */
 
 /** @defgroup USBD_CORE_Exported_Variables
-  * @{
-  */
+ * @{
+ */
 
 extern USBD_ClassTypeDef USBD_AUDIO;
 #define USBD_AUDIO_CLASS &USBD_AUDIO
 /**
-  * @}
-  */
+ * @}
+ */
 
 /** @defgroup USB_CORE_Exported_Functions
-  * @{
-  */
+ * @{
+ */
 uint8_t USBD_AUDIO_RegisterInterface(USBD_HandleTypeDef *pdev,
-                                     USBD_AUDIO_ItfTypeDef *fops);
+		USBD_AUDIO_ItfTypeDef *fops);
 
 void USBD_AUDIO_Sync(USBD_HandleTypeDef *pdev, AUDIO_OffsetTypeDef offset);
 
@@ -315,8 +318,8 @@ uint32_t USBD_AUDIO_GetEpPcktSze(USBD_HandleTypeDef *pdev, uint8_t If, uint8_t E
 #endif /* USE_USBD_COMPOSITE */
 
 /**
-  * @}
-  */
+ * @}
+ */
 
 #ifdef __cplusplus
 }
@@ -324,9 +327,9 @@ uint32_t USBD_AUDIO_GetEpPcktSze(USBD_HandleTypeDef *pdev, uint8_t If, uint8_t E
 
 #endif  /* __USB_AUDIO_H */
 /**
-  * @}
-  */
+ * @}
+ */
 
 /**
-  * @}
-  */
+ * @}
+ */

+ 735 - 841
Middlewares/ST/STM32_USB_Device_Library/Class/AUDIO/Src/usbd_audio.c

@@ -1,123 +1,118 @@
 /**
-  ******************************************************************************
-  * @file    usbd_audio.c
-  * @author  MCD Application Team
-  * @brief   This file provides the Audio core functions.
-  *
-  *
-  ******************************************************************************
-  * @attention
-  *
-  * Copyright (c) 2015 STMicroelectronics.
-  * All rights reserved.
-  *
-  * This software is licensed under terms that can be found in the LICENSE file
-  * in the root directory of this software component.
-  * If no LICENSE file comes with this software, it is provided AS-IS.
-  *
-  ******************************************************************************
-  * @verbatim
-  *
-  *          ===================================================================
-  *                                AUDIO Class  Description
-  *          ===================================================================
-  *           This driver manages the Audio Class 1.0 following the "USB Device Class Definition for
-  *           Audio Devices V1.0 Mar 18, 98".
-  *           This driver implements the following aspects of the specification:
-  *             - Device descriptor management
-  *             - Configuration descriptor management
-  *             - Standard AC Interface Descriptor management
-  *             - 1 Audio Streaming Interface (with single channel, PCM, Stereo mode)
-  *             - 1 Audio Streaming Endpoint
-  *             - 1 Audio Terminal Input (1 channel)
-  *             - Audio Class-Specific AC Interfaces
-  *             - Audio Class-Specific AS Interfaces
-  *             - AudioControl Requests: only SET_CUR and GET_CUR requests are supported (for Mute)
-  *             - Audio Feature Unit (limited to Mute control)
-  *             - Audio Synchronization type: Asynchronous
-  *             - Single fixed audio sampling rate (configurable in usbd_conf.h file)
-  *          The current audio class version supports the following audio features:
-  *             - Pulse Coded Modulation (PCM) format
-  *             - sampling rate: 48KHz.
-  *             - Bit resolution: 16
-  *             - Number of channels: 2
-  *             - No volume control
-  *             - Mute/Unmute capability
-  *             - Asynchronous Endpoints
-  *
-  * @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
-  ******************************************************************************
-  */
+ ******************************************************************************
+ * @file    usbd_audio.c
+ * @author  MCD Application Team
+ * @brief   This file provides the Audio core functions.
+ *
+ *
+ ******************************************************************************
+ * @attention
+ *
+ * Copyright (c) 2015 STMicroelectronics.
+ * All rights reserved.
+ *
+ * This software is licensed under terms that can be found in the LICENSE file
+ * in the root directory of this software component.
+ * If no LICENSE file comes with this software, it is provided AS-IS.
+ *
+ ******************************************************************************
+ * @verbatim
+ *
+ *          ===================================================================
+ *                                AUDIO Class  Description
+ *          ===================================================================
+ *           This driver manages the Audio Class 1.0 following the "USB Device Class Definition for
+ *           Audio Devices V1.0 Mar 18, 98".
+ *           This driver implements the following aspects of the specification:
+ *             - Device descriptor management
+ *             - Configuration descriptor management
+ *             - Standard AC Interface Descriptor management
+ *             - 1 Audio Streaming Interface (with single channel, PCM, Stereo mode)
+ *             - 1 Audio Streaming Endpoint
+ *             - 1 Audio Terminal Input (1 channel)
+ *             - Audio Class-Specific AC Interfaces
+ *             - Audio Class-Specific AS Interfaces
+ *             - AudioControl Requests: only SET_CUR and GET_CUR requests are supported (for Mute)
+ *             - Audio Feature Unit (limited to Mute control)
+ *             - Audio Synchronization type: Asynchronous
+ *             - Single fixed audio sampling rate (configurable in usbd_conf.h file)
+ *          The current audio class version supports the following audio features:
+ *             - Pulse Coded Modulation (PCM) format
+ *             - sampling rate: 48KHz.
+ *             - Bit resolution: 16
+ *             - Number of channels: 2
+ *             - No volume control
+ *             - Mute/Unmute capability
+ *             - Asynchronous Endpoints
+ *
+ * @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
+ ******************************************************************************
+ */
 
 /* BSPDependencies
-- "stm32xxxxx_{eval}{discovery}.c"
-- "stm32xxxxx_{eval}{discovery}_io.c"
-- "stm32xxxxx_{eval}{discovery}_audio.c"
-EndBSPDependencies */
+ - "stm32xxxxx_{eval}{discovery}.c"
+ - "stm32xxxxx_{eval}{discovery}_io.c"
+ - "stm32xxxxx_{eval}{discovery}_audio.c"
+ EndBSPDependencies */
 
 /* Includes ------------------------------------------------------------------*/
 #include "usbd_audio.h"
 #include "usbd_ctlreq.h"
 
-
 /** @addtogroup STM32_USB_DEVICE_LIBRARY
-  * @{
-  */
-
+ * @{
+ */
 
 /** @defgroup USBD_AUDIO
-  * @brief usbd core module
-  * @{
-  */
+ * @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 * 2U * 2U) / 1000U) & 0xFFU), (uint8_t)((((frq * 2U * 2U) / 1000U) >> 8) & 0xFFU)
-
+ * @{
+ */
+
+#define AUDIO_SAMPLE_FREQ(frq)         (uint8_t)(frq), (uint8_t)((frq >> 8)), (uint8_t)((frq >> 16))
+#define AUDIO_PACKET_SZE(frq)          (uint8_t)(((frq * 2U * 2U)/1000U) & 0xFFU), \
+		(uint8_t)((((frq * 2U * 2U)/1000U) >> 8) & 0xFFU)
+#define MIC_PACKET_SZE(frq)            (uint8_t)(((frq * 1U * 2U)/1000U) & 0xFFU), \
+		(uint8_t)((((frq * 1U * 2U)/1000U) >> 8) & 0xFFU)
 #ifdef USE_USBD_COMPOSITE
 #define AUDIO_PACKET_SZE_WORD(frq)     (uint32_t)((((frq) * 2U * 2U)/1000U))
 #endif /* USE_USBD_COMPOSITE  */
 /**
-  * @}
-  */
-
+ * @}
+ */
 
 /** @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);
+		USBD_SetupReqTypedef *req);
 #ifndef USE_USBD_COMPOSITE
-static uint8_t *USBD_AUDIO_GetCfgDesc(uint16_t *length);
-static uint8_t *USBD_AUDIO_GetDeviceQualifierDesc(uint16_t *length);
+static uint8_t* USBD_AUDIO_GetCfgDesc(uint16_t *length);
+static uint8_t* USBD_AUDIO_GetDeviceQualifierDesc(uint16_t *length);
 #endif /* USE_USBD_COMPOSITE  */
 static uint8_t USBD_AUDIO_DataIn(USBD_HandleTypeDef *pdev, uint8_t epnum);
 static uint8_t USBD_AUDIO_DataOut(USBD_HandleTypeDef *pdev, uint8_t epnum);
@@ -125,856 +120,755 @@ 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);
-static void *USBD_AUDIO_GetAudioHeaderDesc(uint8_t *pConfDesc);
+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);
+static void* USBD_AUDIO_GetAudioHeaderDesc(uint8_t *pConfDesc);
 
 /**
-  * @}
-  */
+ * @}
+ */
 
 /** @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_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,
 #ifdef USE_USBD_COMPOSITE
-  NULL,
-  NULL,
-  NULL,
-  NULL,
+		NULL,
+		NULL,
+		NULL,
+		NULL,
 #else
-  USBD_AUDIO_GetCfgDesc,
-  USBD_AUDIO_GetCfgDesc,
-  USBD_AUDIO_GetCfgDesc,
-  USBD_AUDIO_GetDeviceQualifierDesc,
+		USBD_AUDIO_GetCfgDesc, USBD_AUDIO_GetCfgDesc, USBD_AUDIO_GetCfgDesc,
+		USBD_AUDIO_GetDeviceQualifierDesc,
 #endif /* USE_USBD_COMPOSITE  */
 };
 
 #ifndef USE_USBD_COMPOSITE
 /* 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 */
-  HIBYTE(USB_AUDIO_CONFIG_DESC_SIZ),
-  0x02,                                 /* bNumInterfaces */
-  0x01,                                 /* bConfigurationValue */
-  0x00,                                 /* iConfiguration */
-#if (USBD_SELF_POWERED == 1U)
-  0xC0,                                 /* bmAttributes: Bus Powered according to user configuration */
-#else
-  0x80,                                 /* bmAttributes: Bus Powered according to user configuration */
-#endif /* USBD_SELF_POWERED */
-  USBD_MAX_POWER,                       /* MaxPower (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 */
-  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,                   /* 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 Bandwidth */
-  /* 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_I,                  /* 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)) */
-  AUDIO_FS_BINTERVAL,                   /* 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*/
-} ;
+__ALIGN_BEGIN static uint8_t USBD_AUDIO_CfgDesc[USB_AUDIO_CONFIG_DESC_SIZ] __ALIGN_END
+= {
+		/* Configuration Descriptor */
+		0x09, /* bLength */
+		USB_DESC_TYPE_CONFIGURATION, /* bDescriptorType */
+		LOBYTE(USB_AUDIO_CONFIG_DESC_SIZ), /* wTotalLength  100 bytes*/
+		HIBYTE(USB_AUDIO_CONFIG_DESC_SIZ), 0x02, /* bNumInterfaces */
+		0x01, /* bConfigurationValue */
+		0x00, /* iConfiguration */
+		0xC0, /* bmAttributes  BUS Powred*/
+		0x32, /* bMaxPower = 100 mA*/
+		/* 09 byte*/
+
+		/* 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*/
+
+		/* Class-specific AC Interface Descriptor */
+		AUDIO_INTERFACE_DESC_SIZE, /* bLength */
+		AUDIO_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */
+		AUDIO_CONTROL_HEADER, /* bDescriptorSubtype */
+		0x00, /* 1.00 *//* bcdADC */
+		0x01, 0x1E, /* [EDITED] wTotalLength = 30*/
+		0x00, 0x01, /* bInCollection */
+		0x01, /* baInterfaceNr */
+		/* 09 byte*/
+
+		/* Mic Input Terminal Descriptor */
+		AUDIO_INPUT_TERMINAL_DESC_SIZE, /* bLength */
+		AUDIO_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */
+		AUDIO_CONTROL_INPUT_TERMINAL, /* bDescriptorSubtype */
+		0x01, /* bTerminalID */
+		0x01, /* wTerminalType = 0x0201 = Microphone */
+		0x02, 0x00, /* bAssocTerminal - No Associated Terminal */
+		0x01, /* bNrChannels = 1 */
+		0x00, /* wChannelConfig = 0x0000 = Mono */
+		0x00, 0x00, /* iChannelNames */
+		0x00, /* iTerminal */
+		/* 12 byte*/
+
+		/* Mic Output Terminal Descriptor */
+		0x09, /* bLength */
+		AUDIO_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */
+		AUDIO_CONTROL_OUTPUT_TERMINAL, /* bDescriptorSubtype */
+		0x02, /* bTerminalID */
+		0x01, /* wTerminalType = 0x0101 = USB_STREAMING */
+		0x01, 0x00, /* bAssocTerminal */
+		0x01, /* bSourceID */
+		0x00, /* iTerminal */
+		/* 09 byte*/
+
+		/* Mic 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*/
+
+		/* Mic 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*/
+
+		/* Mic Audio Streaming Interface Descriptor */
+		AUDIO_STREAMING_INTERFACE_DESC_SIZE, /* bLength */
+		AUDIO_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType */
+		AUDIO_STREAMING_GENERAL, /* bDescriptorSubtype */
+		0x02, /* bTerminalLink */
+		0x01, /* bDelay */
+		0x01, /* wFormatTag AUDIO_FORMAT_PCM  0x0001 */
+		0x00,
+		/* 07 byte*/
+
+		/* Mic Audio Type I Format Interface Descriptor */
+		0x0B, /* bLength */
+		AUDIO_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType 0x24 */
+		AUDIO_STREAMING_FORMAT_TYPE, /* bDescriptorSubtype 0x02 */
+		AUDIO_FORMAT_TYPE_I, /* bFormatType */
+		0x01, /* 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 0x09 */
+		USB_DESC_TYPE_ENDPOINT, /* bDescriptorType 0x05 */
+		AUDIO_IN_EP, /* bEndpointAddress: IN endpoint 1 */
+		USBD_EP_TYPE_ISOC, /* bmAttributes */
+		MIC_PACKET_SZE(USBD_AUDIO_FREQ), /* wMaxPacketSize in Bytes (Freq(Samples)*1(Mono)*2(HalfWord)) */
+		AUDIO_FS_BINTERVAL, /* bInterval 0x01 */
+		0x00, /* bRefresh */
+		0x00, /* bSynchAddress */
+		/* 09 byte*/
+
+		/* Endpoint - Audio Streaming Descriptor*/
+		AUDIO_STREAMING_ENDPOINT_DESC_SIZE, /* bLength 0x07 */
+		AUDIO_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType 0x25 */
+		AUDIO_ENDPOINT_GENERAL, /* bDescriptor 0x01 */
+		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,
-};
+__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, };
 #endif /* USE_USBD_COMPOSITE  */
 
 static uint8_t AUDIOOutEpAdd = AUDIO_OUT_EP;
 /**
-  * @}
-  */
+ * @}
+ */
 
 /** @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)
-{
-  UNUSED(cfgidx);
-  USBD_AUDIO_HandleTypeDef *haudio;
-
-  /* Allocate Audio structure */
-  haudio = (USBD_AUDIO_HandleTypeDef *)USBD_malloc(sizeof(USBD_AUDIO_HandleTypeDef));
-
-  if (haudio == NULL)
-  {
-    pdev->pClassDataCmsit[pdev->classId] = NULL;
-    return (uint8_t)USBD_EMEM;
-  }
-
-  pdev->pClassDataCmsit[pdev->classId] = (void *)haudio;
-  pdev->pClassData = pdev->pClassDataCmsit[pdev->classId];
+ * @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) {
+	UNUSED(cfgidx);
+	USBD_AUDIO_HandleTypeDef *haudio;
+
+	/* Allocate Audio structure */
+	haudio = (USBD_AUDIO_HandleTypeDef*) USBD_malloc (
+			sizeof(USBD_AUDIO_HandleTypeDef));
+
+	if (haudio == NULL) {
+		pdev->pClassDataCmsit[pdev->classId] = NULL;
+		return (uint8_t) USBD_EMEM;
+	}
+
+	pdev->pClassDataCmsit[pdev->classId] = (void*) haudio;
+	pdev->pClassData = pdev->pClassDataCmsit[pdev->classId];
 
 #ifdef USE_USBD_COMPOSITE
-  /* Get the Endpoints addresses allocated for this class instance */
-  AUDIOOutEpAdd = USBD_CoreGetEPAdd(pdev, USBD_EP_OUT, USBD_EP_TYPE_ISOC, (uint8_t)pdev->classId);
+	/* Get the Endpoints addresses allocated for this class instance */
+	AUDIOOutEpAdd = USBD_CoreGetEPAdd(pdev, USBD_EP_OUT, USBD_EP_TYPE_ISOC, (uint8_t)pdev->classId);
 #endif /* USE_USBD_COMPOSITE */
 
-  if (pdev->dev_speed == USBD_SPEED_HIGH)
-  {
-    pdev->ep_out[AUDIOOutEpAdd & 0xFU].bInterval = AUDIO_HS_BINTERVAL;
-  }
-  else   /* LOW and FULL-speed endpoints */
-  {
-    pdev->ep_out[AUDIOOutEpAdd & 0xFU].bInterval = AUDIO_FS_BINTERVAL;
-  }
-
-  /* Open EP OUT */
-  (void)USBD_LL_OpenEP(pdev, AUDIOOutEpAdd, USBD_EP_TYPE_ISOC, AUDIO_OUT_PACKET);
-  pdev->ep_out[AUDIOOutEpAdd & 0xFU].is_used = 1U;
-
-  haudio->alt_setting = 0U;
-  haudio->offset = AUDIO_OFFSET_UNKNOWN;
-  haudio->wr_ptr = 0U;
-  haudio->rd_ptr = 0U;
-  haudio->rd_enable = 0U;
-
-  /* Initialize the Audio output Hardware layer */
-  if (((USBD_AUDIO_ItfTypeDef *)pdev->pUserData[pdev->classId])->Init(USBD_AUDIO_FREQ,
-                                                                      AUDIO_DEFAULT_VOLUME,
-                                                                      0U) != 0U)
-  {
-    return (uint8_t)USBD_FAIL;
-  }
-
-  /* Prepare Out endpoint to receive 1st packet */
-  (void)USBD_LL_PrepareReceive(pdev, AUDIOOutEpAdd, haudio->buffer,
-                               AUDIO_OUT_PACKET);
-
-  return (uint8_t)USBD_OK;
+	if (pdev->dev_speed == USBD_SPEED_HIGH) {
+		pdev->ep_out[AUDIOOutEpAdd & 0xFU].bInterval = AUDIO_HS_BINTERVAL;
+	} else /* LOW and FULL-speed endpoints */
+	{
+		pdev->ep_out[AUDIOOutEpAdd & 0xFU].bInterval = AUDIO_FS_BINTERVAL;
+	}
+
+	/* Open EP OUT */
+	(void) USBD_LL_OpenEP(pdev, AUDIOOutEpAdd, USBD_EP_TYPE_ISOC,
+			AUDIO_OUT_PACKET);
+	pdev->ep_out[AUDIOOutEpAdd & 0xFU].is_used = 1U;
+
+	haudio->alt_setting = 0U;
+	haudio->offset = AUDIO_OFFSET_UNKNOWN;
+	haudio->wr_ptr = 0U;
+	haudio->rd_ptr = 0U;
+	haudio->rd_enable = 0U;
+
+	/* Initialize the Audio output Hardware layer */
+	if (((USBD_AUDIO_ItfTypeDef*) pdev->pUserData[pdev->classId])->Init(
+			USBD_AUDIO_FREQ,
+			AUDIO_DEFAULT_VOLUME, 0U) != 0U) {
+		return (uint8_t) USBD_FAIL;
+	}
+
+	/* Prepare Out endpoint to receive 1st packet */
+	(void) USBD_LL_PrepareReceive(pdev, AUDIOOutEpAdd, haudio->buffer,
+			AUDIO_OUT_PACKET);
+
+	return (uint8_t) 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)
-{
-  UNUSED(cfgidx);
+ * @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) {
+	UNUSED(cfgidx);
 
 #ifdef USE_USBD_COMPOSITE
-  /* Get the Endpoints addresses allocated for this class instance */
-  AUDIOOutEpAdd = USBD_CoreGetEPAdd(pdev, USBD_EP_OUT, USBD_EP_TYPE_ISOC, (uint8_t)pdev->classId);
+	/* Get the Endpoints addresses allocated for this class instance */
+	AUDIOOutEpAdd = USBD_CoreGetEPAdd(pdev, USBD_EP_OUT, USBD_EP_TYPE_ISOC, (uint8_t)pdev->classId);
 #endif /* USE_USBD_COMPOSITE */
 
-  /* Open EP OUT */
-  (void)USBD_LL_CloseEP(pdev, AUDIOOutEpAdd);
-  pdev->ep_out[AUDIOOutEpAdd & 0xFU].is_used = 0U;
-  pdev->ep_out[AUDIOOutEpAdd & 0xFU].bInterval = 0U;
-
-  /* DeInit  physical Interface components */
-  if (pdev->pClassDataCmsit[pdev->classId] != NULL)
-  {
-    ((USBD_AUDIO_ItfTypeDef *)pdev->pUserData[pdev->classId])->DeInit(0U);
-    (void)USBD_free(pdev->pClassDataCmsit[pdev->classId]);
-    pdev->pClassDataCmsit[pdev->classId] = NULL;
-    pdev->pClassData = NULL;
-  }
-
-  return (uint8_t)USBD_OK;
+	/* Open EP OUT */
+	(void) USBD_LL_CloseEP(pdev, AUDIOOutEpAdd);
+	pdev->ep_out[AUDIOOutEpAdd & 0xFU].is_used = 0U;
+	pdev->ep_out[AUDIOOutEpAdd & 0xFU].bInterval = 0U;
+
+	/* DeInit  physical Interface components */
+	if (pdev->pClassDataCmsit[pdev->classId] != NULL) {
+		((USBD_AUDIO_ItfTypeDef*) pdev->pUserData[pdev->classId])->DeInit(0U);
+		(void) USBD_free(pdev->pClassDataCmsit[pdev->classId]);
+		pdev->pClassDataCmsit[pdev->classId] = NULL;
+		pdev->pClassData = NULL;
+	}
+
+	return (uint8_t) USBD_OK;
 }
 
 /**
-  * @brief  USBD_AUDIO_Setup
-  *         Handle the AUDIO specific requests
-  * @param  pdev: instance
-  * @param  req: usb requests
-  * @retval status
-  */
+ * @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;
-  uint16_t status_info = 0U;
-  USBD_StatusTypeDef ret = USBD_OK;
-
-  haudio = (USBD_AUDIO_HandleTypeDef *)pdev->pClassDataCmsit[pdev->classId];
-
-  if (haudio == NULL)
-  {
-    return (uint8_t)USBD_FAIL;
-  }
-
-  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;
-      }
-      break;
-
-    case USB_REQ_TYPE_STANDARD:
-      switch (req->bRequest)
-      {
-        case USB_REQ_GET_STATUS:
-          if (pdev->dev_state == USBD_STATE_CONFIGURED)
-          {
-            (void)USBD_CtlSendData(pdev, (uint8_t *)&status_info, 2U);
-          }
-          else
-          {
-            USBD_CtlError(pdev, req);
-            ret = USBD_FAIL;
-          }
-          break;
-
-        case USB_REQ_GET_DESCRIPTOR:
-          if ((req->wValue >> 8) == AUDIO_DESCRIPTOR_TYPE)
-          {
-            pbuf = (uint8_t *)USBD_AUDIO_GetAudioHeaderDesc(pdev->pConfDesc);
-            if (pbuf != NULL)
-            {
-              len = MIN(USB_AUDIO_DESC_SIZ, req->wLength);
-              (void)USBD_CtlSendData(pdev, pbuf, len);
-            }
-            else
-            {
-              USBD_CtlError(pdev, req);
-              ret = USBD_FAIL;
-            }
-          }
-          break;
-
-        case USB_REQ_GET_INTERFACE:
-          if (pdev->dev_state == USBD_STATE_CONFIGURED)
-          {
-            (void)USBD_CtlSendData(pdev, (uint8_t *)&haudio->alt_setting, 1U);
-          }
-          else
-          {
-            USBD_CtlError(pdev, req);
-            ret = USBD_FAIL;
-          }
-          break;
-
-        case USB_REQ_SET_INTERFACE:
-          if (pdev->dev_state == USBD_STATE_CONFIGURED)
-          {
-            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 NAKed */
-              USBD_CtlError(pdev, req);
-              ret = USBD_FAIL;
-            }
-          }
-          else
-          {
-            USBD_CtlError(pdev, req);
-            ret = USBD_FAIL;
-          }
-          break;
-
-        case USB_REQ_CLEAR_FEATURE:
-          break;
-
-        default:
-          USBD_CtlError(pdev, req);
-          ret = USBD_FAIL;
-          break;
-      }
-      break;
-    default:
-      USBD_CtlError(pdev, req);
-      ret = USBD_FAIL;
-      break;
-  }
-
-  return (uint8_t)ret;
+		USBD_SetupReqTypedef *req) {
+	USBD_AUDIO_HandleTypeDef *haudio;
+	uint16_t len;
+	uint8_t *pbuf;
+	uint16_t status_info = 0U;
+	USBD_StatusTypeDef ret = USBD_OK;
+
+	haudio = (USBD_AUDIO_HandleTypeDef*) pdev->pClassDataCmsit[pdev->classId];
+
+	if (haudio == NULL) {
+		return (uint8_t) USBD_FAIL;
+	}
+
+	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;
+		}
+		break;
+
+		case USB_REQ_TYPE_STANDARD:
+			switch (req->bRequest) {
+			case USB_REQ_GET_STATUS:
+				if (pdev->dev_state == USBD_STATE_CONFIGURED) {
+					(void) USBD_CtlSendData(pdev, (uint8_t*) &status_info, 2U);
+				} else {
+					USBD_CtlError(pdev, req);
+					ret = USBD_FAIL;
+				}
+				break;
+
+			case USB_REQ_GET_DESCRIPTOR:
+				if ((req->wValue >> 8) == AUDIO_DESCRIPTOR_TYPE) {
+					pbuf = (uint8_t*) USBD_AUDIO_GetAudioHeaderDesc(
+							pdev->pConfDesc);
+					if (pbuf != NULL) {
+						len = MIN(USB_AUDIO_DESC_SIZ, req->wLength);
+						(void) USBD_CtlSendData(pdev, pbuf, len);
+					} else {
+						USBD_CtlError(pdev, req);
+						ret = USBD_FAIL;
+					}
+				}
+				break;
+
+			case USB_REQ_GET_INTERFACE:
+				if (pdev->dev_state == USBD_STATE_CONFIGURED) {
+					(void) USBD_CtlSendData(pdev, (uint8_t*) &haudio->alt_setting,
+							1U);
+				} else {
+					USBD_CtlError(pdev, req);
+					ret = USBD_FAIL;
+				}
+				break;
+
+			case USB_REQ_SET_INTERFACE:
+				if (pdev->dev_state == USBD_STATE_CONFIGURED) {
+					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 NAKed */
+						USBD_CtlError(pdev, req);
+						ret = USBD_FAIL;
+					}
+				} else {
+					USBD_CtlError(pdev, req);
+					ret = USBD_FAIL;
+				}
+				break;
+
+			case USB_REQ_CLEAR_FEATURE:
+				break;
+
+			default:
+				USBD_CtlError(pdev, req);
+				ret = USBD_FAIL;
+				break;
+			}
+			break;
+			default:
+				USBD_CtlError(pdev, req);
+				ret = USBD_FAIL;
+				break;
+	}
+
+	return (uint8_t) ret;
 }
 
 #ifndef USE_USBD_COMPOSITE
 /**
-  * @brief  USBD_AUDIO_GetCfgDesc
-  *         return configuration descriptor
-  * @param  length : pointer data length
-  * @retval pointer to descriptor buffer
-  */
-static uint8_t *USBD_AUDIO_GetCfgDesc(uint16_t *length)
-{
-  *length = (uint16_t)sizeof(USBD_AUDIO_CfgDesc);
-
-  return USBD_AUDIO_CfgDesc;
+ * @brief  USBD_AUDIO_GetCfgDesc
+ *         return configuration descriptor
+ * @param  length : pointer data length
+ * @retval pointer to descriptor buffer
+ */
+static uint8_t* USBD_AUDIO_GetCfgDesc(uint16_t *length) {
+	*length = (uint16_t) sizeof(USBD_AUDIO_CfgDesc);
+
+	return USBD_AUDIO_CfgDesc;
 }
 #endif /* USE_USBD_COMPOSITE  */
 /**
-  * @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)
-{
-  UNUSED(pdev);
-  UNUSED(epnum);
-
-  /* Only OUT data are processed */
-  return (uint8_t)USBD_OK;
+ * @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) {
+	UNUSED(pdev);
+	UNUSED(epnum);
+
+	/* Only OUT data are processed */
+	return (uint8_t) 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 = (USBD_AUDIO_HandleTypeDef *)pdev->pClassDataCmsit[pdev->classId];
-
-  if (haudio == NULL)
-  {
-    return (uint8_t)USBD_FAIL;
-  }
-
-  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[pdev->classId])->MuteCtl(haudio->control.data[0]);
-      haudio->control.cmd = 0U;
-      haudio->control.len = 0U;
-    }
-  }
-
-  return (uint8_t)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 = (USBD_AUDIO_HandleTypeDef*) pdev->pClassDataCmsit[pdev->classId];
+
+	if (haudio == NULL) {
+		return (uint8_t) USBD_FAIL;
+	}
+
+	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[pdev->classId])->MuteCtl(
+					haudio->control.data[0]);
+			haudio->control.cmd = 0U;
+			haudio->control.len = 0U;
+		}
+	}
+
+	return (uint8_t) 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)
-{
-  UNUSED(pdev);
-
-  /* Only OUT control data are processed */
-  return (uint8_t)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) {
+	UNUSED(pdev);
+
+	/* Only OUT control data are processed */
+	return (uint8_t) USBD_OK;
 }
 /**
-  * @brief  USBD_AUDIO_SOF
-  *         handle SOF event
-  * @param  pdev: device instance
-  * @retval status
-  */
-static uint8_t USBD_AUDIO_SOF(USBD_HandleTypeDef *pdev)
-{
-  UNUSED(pdev);
-
-  return (uint8_t)USBD_OK;
+ * @brief  USBD_AUDIO_SOF
+ *         handle SOF event
+ * @param  pdev: device instance
+ * @retval status
+ */
+static uint8_t USBD_AUDIO_SOF(USBD_HandleTypeDef *pdev) {
+	UNUSED(pdev);
+
+	return (uint8_t) USBD_OK;
 }
 
 /**
-  * @brief  USBD_AUDIO_SOF
-  *         handle SOF event
-  * @param  pdev: device instance
-  * @param  offset: audio offset
-  * @retval status
-  */
-void USBD_AUDIO_Sync(USBD_HandleTypeDef *pdev, AUDIO_OffsetTypeDef offset)
-{
-  USBD_AUDIO_HandleTypeDef *haudio;
-  uint32_t BufferSize = AUDIO_TOTAL_BUF_SIZE / 2U;
-
-  if (pdev->pClassDataCmsit[pdev->classId] == NULL)
-  {
-    return;
-  }
-
-  haudio = (USBD_AUDIO_HandleTypeDef *)pdev->pClassDataCmsit[pdev->classId];
-
-  haudio->offset = offset;
-
-  if (haudio->rd_enable == 1U)
-  {
-    haudio->rd_ptr += (uint16_t)BufferSize;
-
-    if (haudio->rd_ptr == AUDIO_TOTAL_BUF_SIZE)
-    {
-      /* roll back */
-      haudio->rd_ptr = 0U;
-    }
-  }
-
-  if (haudio->rd_ptr > haudio->wr_ptr)
-  {
-    if ((haudio->rd_ptr - haudio->wr_ptr) < AUDIO_OUT_PACKET)
-    {
-      BufferSize += 4U;
-    }
-    else
-    {
-      if ((haudio->rd_ptr - haudio->wr_ptr) > (AUDIO_TOTAL_BUF_SIZE - AUDIO_OUT_PACKET))
-      {
-        BufferSize -= 4U;
-      }
-    }
-  }
-  else
-  {
-    if ((haudio->wr_ptr - haudio->rd_ptr) < AUDIO_OUT_PACKET)
-    {
-      BufferSize -= 4U;
-    }
-    else
-    {
-      if ((haudio->wr_ptr - haudio->rd_ptr) > (AUDIO_TOTAL_BUF_SIZE - AUDIO_OUT_PACKET))
-      {
-        BufferSize += 4U;
-      }
-    }
-  }
-
-  if (haudio->offset == AUDIO_OFFSET_FULL)
-  {
-    ((USBD_AUDIO_ItfTypeDef *)pdev->pUserData[pdev->classId])->AudioCmd(&haudio->buffer[0],
-                                                                        BufferSize, AUDIO_CMD_PLAY);
-    haudio->offset = AUDIO_OFFSET_NONE;
-  }
+ * @brief  USBD_AUDIO_SOF
+ *         handle SOF event
+ * @param  pdev: device instance
+ * @param  offset: audio offset
+ * @retval status
+ */
+void USBD_AUDIO_Sync(USBD_HandleTypeDef *pdev, AUDIO_OffsetTypeDef offset) {
+	USBD_AUDIO_HandleTypeDef *haudio;
+	uint32_t BufferSize = AUDIO_TOTAL_BUF_SIZE / 2U;
+
+	if (pdev->pClassDataCmsit[pdev->classId] == NULL) {
+		return;
+	}
+
+	haudio = (USBD_AUDIO_HandleTypeDef*) pdev->pClassDataCmsit[pdev->classId];
+
+	haudio->offset = offset;
+
+	if (haudio->rd_enable == 1U) {
+		haudio->rd_ptr += (uint16_t) BufferSize;
+
+		if (haudio->rd_ptr == AUDIO_TOTAL_BUF_SIZE) {
+			/* roll back */
+			haudio->rd_ptr = 0U;
+		}
+	}
+
+	if (haudio->rd_ptr > haudio->wr_ptr) {
+		if ((haudio->rd_ptr - haudio->wr_ptr) < AUDIO_OUT_PACKET) {
+			BufferSize += 4U;
+		} else {
+			if ((haudio->rd_ptr - haudio->wr_ptr)
+					> (AUDIO_TOTAL_BUF_SIZE - AUDIO_OUT_PACKET )) {
+				BufferSize -= 4U;
+			}
+		}
+	} else {
+		if ((haudio->wr_ptr - haudio->rd_ptr) < AUDIO_OUT_PACKET) {
+			BufferSize -= 4U;
+		} else {
+			if ((haudio->wr_ptr - haudio->rd_ptr)
+					> (AUDIO_TOTAL_BUF_SIZE - AUDIO_OUT_PACKET )) {
+				BufferSize += 4U;
+			}
+		}
+	}
+
+	if (haudio->offset == AUDIO_OFFSET_FULL) {
+		((USBD_AUDIO_ItfTypeDef*) pdev->pUserData[pdev->classId])->AudioCmd(
+				&haudio->buffer[0], BufferSize, 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)
-{
-  UNUSED(pdev);
-  UNUSED(epnum);
-
-  return (uint8_t)USBD_OK;
+ * @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) {
+	UNUSED(pdev);
+	UNUSED(epnum);
+
+	return (uint8_t) 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)
-{
-  USBD_AUDIO_HandleTypeDef *haudio;
-
-  if (pdev->pClassDataCmsit[pdev->classId] == NULL)
-  {
-    return (uint8_t)USBD_FAIL;
-  }
-
-  haudio = (USBD_AUDIO_HandleTypeDef *)pdev->pClassDataCmsit[pdev->classId];
-
-  /* Prepare Out endpoint to receive next audio packet */
-  (void)USBD_LL_PrepareReceive(pdev, epnum,
-                               &haudio->buffer[haudio->wr_ptr],
-                               AUDIO_OUT_PACKET);
-
-  return (uint8_t)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) {
+	USBD_AUDIO_HandleTypeDef *haudio;
+
+	if (pdev->pClassDataCmsit[pdev->classId] == NULL) {
+		return (uint8_t) USBD_FAIL;
+	}
+
+	haudio = (USBD_AUDIO_HandleTypeDef*) pdev->pClassDataCmsit[pdev->classId];
+
+	/* Prepare Out endpoint to receive next audio packet */
+	(void) USBD_LL_PrepareReceive(pdev, epnum, &haudio->buffer[haudio->wr_ptr],
+			AUDIO_OUT_PACKET);
+
+	return (uint8_t) 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)
-{
-  uint16_t PacketSize;
-  USBD_AUDIO_HandleTypeDef *haudio;
+ * @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) {
+	uint16_t PacketSize;
+	USBD_AUDIO_HandleTypeDef *haudio;
 
 #ifdef USE_USBD_COMPOSITE
-  /* Get the Endpoints addresses allocated for this class instance */
-  AUDIOOutEpAdd = USBD_CoreGetEPAdd(pdev, USBD_EP_OUT, USBD_EP_TYPE_ISOC, (uint8_t)pdev->classId);
+	/* Get the Endpoints addresses allocated for this class instance */
+	AUDIOOutEpAdd = USBD_CoreGetEPAdd(pdev, USBD_EP_OUT, USBD_EP_TYPE_ISOC, (uint8_t)pdev->classId);
 #endif /* USE_USBD_COMPOSITE */
 
-  haudio = (USBD_AUDIO_HandleTypeDef *)pdev->pClassDataCmsit[pdev->classId];
-
-  if (haudio == NULL)
-  {
-    return (uint8_t)USBD_FAIL;
-  }
-
-  if (epnum == AUDIOOutEpAdd)
-  {
-    /* Get received data packet length */
-    PacketSize = (uint16_t)USBD_LL_GetRxDataSize(pdev, epnum);
-
-    /* Packet received Callback */
-    ((USBD_AUDIO_ItfTypeDef *)pdev->pUserData[pdev->classId])->PeriodicTC(&haudio->buffer[haudio->wr_ptr],
-                                                                          PacketSize, AUDIO_OUT_TC);
-
-    /* Increment the Buffer pointer or roll it back when all buffers are full */
-    haudio->wr_ptr += PacketSize;
-
-    if (haudio->wr_ptr >= AUDIO_TOTAL_BUF_SIZE)
-    {
-      /* All buffers are full: roll back */
-      haudio->wr_ptr = 0U;
-
-      if (haudio->offset == AUDIO_OFFSET_UNKNOWN)
-      {
-        ((USBD_AUDIO_ItfTypeDef *)pdev->pUserData[pdev->classId])->AudioCmd(&haudio->buffer[0],
-                                                                            AUDIO_TOTAL_BUF_SIZE / 2U,
-                                                                            AUDIO_CMD_START);
-        haudio->offset = AUDIO_OFFSET_NONE;
-      }
-    }
-
-    if (haudio->rd_enable == 0U)
-    {
-      if (haudio->wr_ptr == (AUDIO_TOTAL_BUF_SIZE / 2U))
-      {
-        haudio->rd_enable = 1U;
-      }
-    }
-
-    /* Prepare Out endpoint to receive next audio packet */
-    (void)USBD_LL_PrepareReceive(pdev, AUDIOOutEpAdd,
-                                 &haudio->buffer[haudio->wr_ptr],
-                                 AUDIO_OUT_PACKET);
-  }
-
-  return (uint8_t)USBD_OK;
-}
+	haudio = (USBD_AUDIO_HandleTypeDef*) pdev->pClassDataCmsit[pdev->classId];
 
-/**
-  * @brief  AUDIO_Req_GetCurrent
-  *         Handles the GET_CUR Audio control request.
-  * @param  pdev: device instance
-  * @param  req: setup class request
-  * @retval status
-  */
-static void AUDIO_REQ_GetCurrent(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
-{
-  USBD_AUDIO_HandleTypeDef *haudio;
-  haudio = (USBD_AUDIO_HandleTypeDef *)pdev->pClassDataCmsit[pdev->classId];
+	if (haudio == NULL) {
+		return (uint8_t) USBD_FAIL;
+	}
+
+	if (epnum == AUDIOOutEpAdd) {
+		/* Get received data packet length */
+		PacketSize = (uint16_t) USBD_LL_GetRxDataSize(pdev, epnum);
 
-  if (haudio == NULL)
-  {
-    return;
-  }
+		/* Packet received Callback */
+		((USBD_AUDIO_ItfTypeDef*) pdev->pUserData[pdev->classId])->PeriodicTC(
+				&haudio->buffer[haudio->wr_ptr], PacketSize, AUDIO_OUT_TC);
 
-  (void)USBD_memset(haudio->control.data, 0, USB_MAX_EP0_SIZE);
+		/* Increment the Buffer pointer or roll it back when all buffers are full */
+		haudio->wr_ptr += PacketSize;
 
-  /* Send the current mute state */
-  (void)USBD_CtlSendData(pdev, haudio->control.data,
-                         MIN(req->wLength, USB_MAX_EP0_SIZE));
+		if (haudio->wr_ptr >= AUDIO_TOTAL_BUF_SIZE) {
+			/* All buffers are full: roll back */
+			haudio->wr_ptr = 0U;
+
+			if (haudio->offset == AUDIO_OFFSET_UNKNOWN) {
+				((USBD_AUDIO_ItfTypeDef*) pdev->pUserData[pdev->classId])->AudioCmd(
+						&haudio->buffer[0],
+						AUDIO_TOTAL_BUF_SIZE / 2U, AUDIO_CMD_START);
+				haudio->offset = AUDIO_OFFSET_NONE;
+			}
+		}
+
+		if (haudio->rd_enable == 0U) {
+			if (haudio->wr_ptr == (AUDIO_TOTAL_BUF_SIZE / 2U)) {
+				haudio->rd_enable = 1U;
+			}
+		}
+
+		/* Prepare Out endpoint to receive next audio packet */
+		(void) USBD_LL_PrepareReceive(pdev, AUDIOOutEpAdd,
+				&haudio->buffer[haudio->wr_ptr],
+				AUDIO_OUT_PACKET);
+	}
+
+	return (uint8_t) USBD_OK;
 }
 
 /**
-  * @brief  AUDIO_Req_SetCurrent
-  *         Handles the SET_CUR Audio control request.
-  * @param  pdev: device instance
-  * @param  req: setup class request
-  * @retval status
-  */
-static void AUDIO_REQ_SetCurrent(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
-{
-  USBD_AUDIO_HandleTypeDef *haudio;
-  haudio = (USBD_AUDIO_HandleTypeDef *)pdev->pClassDataCmsit[pdev->classId];
-
-  if (haudio == NULL)
-  {
-    return;
-  }
-
-  if (req->wLength != 0U)
-  {
-    haudio->control.cmd = AUDIO_REQ_SET_CUR;     /* Set the request value */
-    haudio->control.len = (uint8_t)MIN(req->wLength, USB_MAX_EP0_SIZE);  /* Set the request data length */
-    haudio->control.unit = HIBYTE(req->wIndex);  /* Set the request target unit */
-
-    /* Prepare the reception of the buffer over EP0 */
-    (void)USBD_CtlPrepareRx(pdev, haudio->control.data, haudio->control.len);
-  }
+ * @brief  AUDIO_Req_GetCurrent
+ *         Handles the GET_CUR Audio control request.
+ * @param  pdev: device instance
+ * @param  req: setup class request
+ * @retval status
+ */
+static void AUDIO_REQ_GetCurrent(USBD_HandleTypeDef *pdev,
+		USBD_SetupReqTypedef *req) {
+	USBD_AUDIO_HandleTypeDef *haudio;
+	haudio = (USBD_AUDIO_HandleTypeDef*) pdev->pClassDataCmsit[pdev->classId];
+
+	if (haudio == NULL) {
+		return;
+	}
+
+	(void) USBD_memset(haudio->control.data, 0, USB_MAX_EP0_SIZE);
+
+	/* Send the current mute state */
+	(void) USBD_CtlSendData(pdev, haudio->control.data,
+			MIN(req->wLength, USB_MAX_EP0_SIZE));
 }
 
-#ifndef USE_USBD_COMPOSITE
 /**
-  * @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 = (uint16_t)sizeof(USBD_AUDIO_DeviceQualifierDesc);
+ * @brief  AUDIO_Req_SetCurrent
+ *         Handles the SET_CUR Audio control request.
+ * @param  pdev: device instance
+ * @param  req: setup class request
+ * @retval status
+ */
+static void AUDIO_REQ_SetCurrent(USBD_HandleTypeDef *pdev,
+		USBD_SetupReqTypedef *req) {
+	USBD_AUDIO_HandleTypeDef *haudio;
+	haudio = (USBD_AUDIO_HandleTypeDef*) pdev->pClassDataCmsit[pdev->classId];
+
+	if (haudio == NULL) {
+		return;
+	}
+
+	if (req->wLength != 0U) {
+		haudio->control.cmd = AUDIO_REQ_SET_CUR; /* Set the request value */
+		haudio->control.len = (uint8_t) MIN(req->wLength, USB_MAX_EP0_SIZE); /* Set the request data length */
+		haudio->control.unit = HIBYTE(req->wIndex); /* Set the request target unit */
+
+		/* Prepare the reception of the buffer over EP0 */
+		(void) USBD_CtlPrepareRx(pdev, haudio->control.data,
+				haudio->control.len);
+	}
+}
 
-  return USBD_AUDIO_DeviceQualifierDesc;
+#ifndef USE_USBD_COMPOSITE
+/**
+ * @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 = (uint16_t) sizeof(USBD_AUDIO_DeviceQualifierDesc);
+
+	return USBD_AUDIO_DeviceQualifierDesc;
 }
 #endif /* USE_USBD_COMPOSITE  */
 /**
-  * @brief  USBD_AUDIO_RegisterInterface
-  * @param  pdev: device instance
-  * @param  fops: Audio interface callback
-  * @retval status
-  */
+ * @brief  USBD_AUDIO_RegisterInterface
+ * @param  pdev: device instance
+ * @param  fops: Audio interface callback
+ * @retval status
+ */
 uint8_t USBD_AUDIO_RegisterInterface(USBD_HandleTypeDef *pdev,
-                                     USBD_AUDIO_ItfTypeDef *fops)
-{
-  if (fops == NULL)
-  {
-    return (uint8_t)USBD_FAIL;
-  }
+		USBD_AUDIO_ItfTypeDef *fops) {
+	if (fops == NULL) {
+		return (uint8_t) USBD_FAIL;
+	}
 
-  pdev->pUserData[pdev->classId] = fops;
+	pdev->pUserData[pdev->classId] = fops;
 
-  return (uint8_t)USBD_OK;
+	return (uint8_t) USBD_OK;
 }
 
 #ifdef USE_USBD_COMPOSITE
 /**
-  * @brief  USBD_AUDIO_GetEpPcktSze
-  * @param  pdev: device instance (reserved for future use)
-  * @param  If: Interface number (reserved for future use)
-  * @param  Ep: Endpoint number (reserved for future use)
-  * @retval status
-  */
+ * @brief  USBD_AUDIO_GetEpPcktSze
+ * @param  pdev: device instance (reserved for future use)
+ * @param  If: Interface number (reserved for future use)
+ * @param  Ep: Endpoint number (reserved for future use)
+ * @retval status
+ */
 uint32_t USBD_AUDIO_GetEpPcktSze(USBD_HandleTypeDef *pdev, uint8_t If, uint8_t Ep)
 {
-  uint32_t mps;
+	uint32_t mps;
 
-  UNUSED(pdev);
-  UNUSED(If);
-  UNUSED(Ep);
+	UNUSED(pdev);
+	UNUSED(If);
+	UNUSED(Ep);
 
-  mps = AUDIO_PACKET_SZE_WORD(USBD_AUDIO_FREQ);
+	mps = AUDIO_PACKET_SZE_WORD(USBD_AUDIO_FREQ);
 
-  /* Return the wMaxPacketSize value in Bytes (Freq(Samples)*2(Stereo)*2(HalfWord)) */
-  return mps;
+	/* Return the wMaxPacketSize value in Bytes (Freq(Samples)*2(Stereo)*2(HalfWord)) */
+	return mps;
 }
 #endif /* USE_USBD_COMPOSITE */
 
 /**
-  * @brief  USBD_AUDIO_GetAudioHeaderDesc
-  *         This function return the Audio descriptor
-  * @param  pdev: device instance
-  * @param  pConfDesc:  pointer to Bos descriptor
-  * @retval pointer to the Audio AC Header descriptor
-  */
-static void *USBD_AUDIO_GetAudioHeaderDesc(uint8_t *pConfDesc)
-{
-  USBD_ConfigDescTypeDef *desc = (USBD_ConfigDescTypeDef *)(void *)pConfDesc;
-  USBD_DescHeaderTypeDef *pdesc = (USBD_DescHeaderTypeDef *)(void *)pConfDesc;
-  uint8_t *pAudioDesc =  NULL;
-  uint16_t ptr;
-
-  if (desc->wTotalLength > desc->bLength)
-  {
-    ptr = desc->bLength;
-
-    while (ptr < desc->wTotalLength)
-    {
-      pdesc = USBD_GetNextDesc((uint8_t *)pdesc, &ptr);
-      if ((pdesc->bDescriptorType == AUDIO_INTERFACE_DESCRIPTOR_TYPE) &&
-          (pdesc->bDescriptorSubType == AUDIO_CONTROL_HEADER))
-      {
-        pAudioDesc = (uint8_t *)pdesc;
-        break;
-      }
-    }
-  }
-  return pAudioDesc;
+ * @brief  USBD_AUDIO_GetAudioHeaderDesc
+ *         This function return the Audio descriptor
+ * @param  pdev: device instance
+ * @param  pConfDesc:  pointer to Bos descriptor
+ * @retval pointer to the Audio AC Header descriptor
+ */
+static void* USBD_AUDIO_GetAudioHeaderDesc(uint8_t *pConfDesc) {
+	USBD_ConfigDescTypeDef *desc = (USBD_ConfigDescTypeDef*) (void*) pConfDesc;
+	USBD_DescHeaderTypeDef *pdesc = (USBD_DescHeaderTypeDef*) (void*) pConfDesc;
+	uint8_t *pAudioDesc = NULL;
+	uint16_t ptr;
+
+	if (desc->wTotalLength > desc->bLength) {
+		ptr = desc->bLength;
+
+		while (ptr < desc->wTotalLength) {
+			pdesc = USBD_GetNextDesc((uint8_t*) pdesc, &ptr);
+			if ((pdesc->bDescriptorType == AUDIO_INTERFACE_DESCRIPTOR_TYPE)
+					&& (pdesc->bDescriptorSubType == AUDIO_CONTROL_HEADER)) {
+				pAudioDesc = (uint8_t*) pdesc;
+				break;
+			}
+		}
+	}
+	return pAudioDesc;
 }
 
 /**
-  * @}
-  */
-
+ * @}
+ */
 
 /**
-  * @}
-  */
-
+ * @}
+ */
 
 /**
-  * @}
-  */
+ * @}
+ */

+ 1 - 1
USB_DEVICE/Target/usbd_conf.h

@@ -75,7 +75,7 @@
 /*---------- -----------*/
 #define USBD_SELF_POWERED     1U
 /*---------- -----------*/
-#define USBD_AUDIO_FREQ     22100U
+#define USBD_AUDIO_FREQ     48000U
 
 /****************************************/
 /* #define for FS and HS identification */

+ 3 - 2
usb_mic.ioc

@@ -83,7 +83,7 @@ ProjectManager.ToolChainLocation=
 ProjectManager.UAScriptAfterPath=
 ProjectManager.UAScriptBeforePath=
 ProjectManager.UnderRoot=true
-ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false
+ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_USB_DEVICE_Init-USB_DEVICE-false-HAL-false
 RCC.48MHZClocksFreq_Value=48000000
 RCC.AHBFreq_Value=16000000
 RCC.APB1Freq_Value=16000000
@@ -109,7 +109,8 @@ RCC.VCOInputMFreq_Value=1562500
 RCC.VCOOutputFreq_Value=240000000
 RCC.VcooutputI2S=150000000
 USB_DEVICE.CLASS_NAME_FS=AUDIO
-USB_DEVICE.IPParameters=VirtualMode,VirtualModeFS,CLASS_NAME_FS
+USB_DEVICE.IPParameters=VirtualMode,VirtualModeFS,CLASS_NAME_FS,USBD_AUDIO_FREQ
+USB_DEVICE.USBD_AUDIO_FREQ=48000
 USB_DEVICE.VirtualMode=Audio
 USB_DEVICE.VirtualModeFS=Audio_FS
 USB_OTG_FS.IPParameters=VirtualMode