diff --git a/.github/build-each-commit.py b/.github/build-each-commit.py
index 76cde9be6..a82ad87a7 100755
--- a/.github/build-each-commit.py
+++ b/.github/build-each-commit.py
@@ -66,6 +66,7 @@
)
if args.hub == "primehub" or args.hub == "essentialhub":
pybricks.git.submodule("update", "--init", "--checkout", "lib/btstack")
+ pybricks.git.submodule("update", "--init", "--checkout", "lib/STM32_USB_Device_Library")
# build the firmware
subprocess.check_call(
diff --git a/.github/build-missing-commits.py b/.github/build-missing-commits.py
index 655dd6142..39e17287c 100755
--- a/.github/build-missing-commits.py
+++ b/.github/build-missing-commits.py
@@ -97,6 +97,7 @@
"update", "--init", "lib/stm32lib"
)
pybricks.git.submodule("update", "--init", "--checkout", "lib/btstack")
+ pybricks.git.submodule("update", "--init", "--checkout", "lib/STM32_USB_Device_Library")
# Make mpy-cross once
print("Building mpy-cross")
diff --git a/.gitmodules b/.gitmodules
index ab385fe77..0eb4bdfb0 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -10,3 +10,7 @@
path = lib/ev3rt-lib
url = https://github.com/pybricks/ev3rt-lib.git
update = none
+[submodule "lib/STM32_USB_Device_Library"]
+ path = lib/STM32_USB_Device_Library
+ url = https://github.com/STMicroelectronics/stm32_mw_usb_device.git
+ update = none
diff --git a/bricks/_common/arm_none_eabi.mk b/bricks/_common/arm_none_eabi.mk
index 4da8dde45..b99ed7006 100644
--- a/bricks/_common/arm_none_eabi.mk
+++ b/bricks/_common/arm_none_eabi.mk
@@ -61,6 +61,15 @@ $(error failed)
endif
endif
endif
+ifeq ($(PB_LIB_STM32_USB_DEVICE),1)
+ifeq ("$(wildcard $(PBTOP)/lib/STM32_USB_Device_Library/README.md)","")
+$(info GIT cloning STM32_USB_Device_Library submodule)
+$(info $(shell cd $(PBTOP) && git submodule update --checkout --init lib/STM32_USB_Device_Library))
+ifeq ("$(wildcard $(PBTOP)/lib/STM32_USB_Device_Library/README.md)","")
+$(error failed)
+endif
+endif
+endif
# lets micropython make files work with external files
USER_C_MODULES = $(PBTOP)
@@ -119,7 +128,6 @@ ifeq ($(PB_LIB_LSM6DS3TR_C),1)
INC += -I$(PBTOP)/lib/lsm6ds3tr_c_STdC/driver
endif
ifeq ($(PB_LIB_STM32_USB_DEVICE),1)
-INC += -I$(PBTOP)/lib/STM32_USB_Device_Library/Class/CDC/Inc/
INC += -I$(PBTOP)/lib/STM32_USB_Device_Library/Core/Inc/
endif
INC += -I$(PBTOP)
@@ -362,7 +370,6 @@ LSM6DS3TR_C_SRC_C = lib/lsm6ds3tr_c_STdC/driver/lsm6ds3tr_c_reg.c
# STM32 USB Device library
SRC_STM32_USB_DEV = $(addprefix lib/STM32_USB_Device_Library/,\
- Class/CDC/Src/usbd_cdc.c \
Core/Src/usbd_core.c \
Core/Src/usbd_ctlreq.c \
Core/Src/usbd_ioreq.c \
@@ -375,6 +382,7 @@ endif
SRC_STM32_USB_DEV += $(addprefix lib/pbio/drv/usb/stm32_usbd/,\
usbd_conf.c \
usbd_desc.c \
+ usbd_pybricks.c \
)
NXOS_SRC_C = $(addprefix lib/pbio/platform/nxt/nxos/,\
diff --git a/lib/STM32_USB_Device_Library b/lib/STM32_USB_Device_Library
new file mode 160000
index 000000000..7b5e6886d
--- /dev/null
+++ b/lib/STM32_USB_Device_Library
@@ -0,0 +1 @@
+Subproject commit 7b5e6886d2f11ad15d2b46364e8a96984358f639
diff --git a/lib/STM32_USB_Device_Library/Class/AUDIO/Inc/usbd_audio.h b/lib/STM32_USB_Device_Library/Class/AUDIO/Inc/usbd_audio.h
deleted file mode 100644
index dbb71cd7a..000000000
--- a/lib/STM32_USB_Device_Library/Class/AUDIO/Inc/usbd_audio.h
+++ /dev/null
@@ -1,218 +0,0 @@
-/**
- ******************************************************************************
- * @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 component is licensed by ST under Ultimate Liberty license
- * SLA0044, the "License"; You may not use this file except in compliance with
- * the License. You may obtain a copy of the License at:
- * www.st.com/SLA0044
- *
- ******************************************************************************
- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __USB_AUDIO_H
-#define __USB_AUDIO_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_ioreq.h"
-
-/** @addtogroup STM32_USB_DEVICE_LIBRARY
- * @{
- */
-
-/** @defgroup USBD_AUDIO
- * @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
-#endif /* USBD_AUDIO_FREQ */
-
-#ifndef USBD_MAX_NUM_INTERFACES
-#define USBD_MAX_NUM_INTERFACES 1U
-#endif /* USBD_AUDIO_FREQ */
-
-#ifndef AUDIO_HS_BINTERVAL
-#define AUDIO_HS_BINTERVAL 0x01U
-#endif /* AUDIO_HS_BINTERVAL */
-
-#ifndef AUDIO_FS_BINTERVAL
-#define AUDIO_FS_BINTERVAL 0x01U
-#endif /* AUDIO_FS_BINTERVAL */
-
-#define AUDIO_OUT_EP 0x01U
-#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
-#define AUDIO_STREAMING_ENDPOINT_DESC_SIZE 0x07U
-
-#define AUDIO_DESCRIPTOR_TYPE 0x21U
-#define USB_DEVICE_CLASS_AUDIO 0x01U
-#define AUDIO_SUBCLASS_AUDIOCONTROL 0x01U
-#define AUDIO_SUBCLASS_AUDIOSTREAMING 0x02U
-#define AUDIO_PROTOCOL_UNDEFINED 0x00U
-#define AUDIO_STREAMING_GENERAL 0x01U
-#define AUDIO_STREAMING_FORMAT_TYPE 0x02U
-
-/* Audio Descriptor Types */
-#define AUDIO_INTERFACE_DESCRIPTOR_TYPE 0x24U
-#define AUDIO_ENDPOINT_DESCRIPTOR_TYPE 0x25U
-
-/* Audio Control Interface Descriptor Subtypes */
-#define AUDIO_CONTROL_HEADER 0x01U
-#define AUDIO_CONTROL_INPUT_TERMINAL 0x02U
-#define AUDIO_CONTROL_OUTPUT_TERMINAL 0x03U
-#define AUDIO_CONTROL_FEATURE_UNIT 0x06U
-
-#define AUDIO_INPUT_TERMINAL_DESC_SIZE 0x0CU
-#define AUDIO_OUTPUT_TERMINAL_DESC_SIZE 0x09U
-#define AUDIO_STREAMING_INTERFACE_DESC_SIZE 0x07U
-
-#define AUDIO_CONTROL_MUTE 0x0001U
-
-#define AUDIO_FORMAT_TYPE_I 0x01U
-#define AUDIO_FORMAT_TYPE_III 0x03U
-
-#define AUDIO_ENDPOINT_GENERAL 0x01U
-
-#define AUDIO_REQ_GET_CUR 0x81U
-#define AUDIO_REQ_SET_CUR 0x01U
-
-#define AUDIO_OUT_STREAMING_CTRL 0x02U
-
-#define AUDIO_OUT_TC 0x01U
-#define AUDIO_IN_TC 0x02U
-
-
-#define AUDIO_OUT_PACKET (uint16_t)(((USBD_AUDIO_FREQ * 2U * 2U) / 1000U))
-#define AUDIO_DEFAULT_VOLUME 70U
-
-/* 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 80U
-/* Total size of the audio transfer buffer */
-#define AUDIO_TOTAL_BUF_SIZE ((uint16_t)(AUDIO_OUT_PACKET * AUDIO_OUT_PACKET_NUM))
-
-/* Audio Commands enumeration */
-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
-{
- 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);
-} USBD_AUDIO_ItfTypeDef;
-/**
- * @}
- */
-
-
-
-/** @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);
-
-void USBD_AUDIO_Sync(USBD_HandleTypeDef *pdev, AUDIO_OffsetTypeDef offset);
-/**
- * @}
- */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __USB_AUDIO_H */
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/lib/STM32_USB_Device_Library/Class/AUDIO/Inc/usbd_audio_if_template.h b/lib/STM32_USB_Device_Library/Class/AUDIO/Inc/usbd_audio_if_template.h
deleted file mode 100644
index 21cee0d72..000000000
--- a/lib/STM32_USB_Device_Library/Class/AUDIO/Inc/usbd_audio_if_template.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/**
- ******************************************************************************
- * @file usbd_audio_if_template.h
- * @author MCD Application Team
- * @brief Header for usbd_audio_if_template.c file.
- ******************************************************************************
- * @attention
- *
- * © Copyright (c) 2015 STMicroelectronics.
- * All rights reserved.
- *
- * This software component is licensed by ST under Ultimate Liberty license
- * SLA0044, the "License"; You may not use this file except in compliance with
- * the License. You may obtain a copy of the License at:
- * www.st.com/SLA0044
- *
- ******************************************************************************
- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __USBD_AUDIO_IF_TEMPLATE_H
-#define __USBD_AUDIO_IF_TEMPLATE_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_audio.h"
-
-/* Exported types ------------------------------------------------------------*/
-/* Exported constants --------------------------------------------------------*/
-
-extern USBD_AUDIO_ItfTypeDef USBD_AUDIO_Template_fops;
-
-/* Exported macro ------------------------------------------------------------*/
-/* Exported functions ------------------------------------------------------- */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __USBD_AUDIO_IF_TEMPLATE_H */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/lib/STM32_USB_Device_Library/Class/AUDIO/Src/usbd_audio.c b/lib/STM32_USB_Device_Library/Class/AUDIO/Src/usbd_audio.c
deleted file mode 100644
index 1dce51a31..000000000
--- a/lib/STM32_USB_Device_Library/Class/AUDIO/Src/usbd_audio.c
+++ /dev/null
@@ -1,844 +0,0 @@
-/**
- ******************************************************************************
- * @file usbd_audio.c
- * @author MCD Application Team
- * @brief This file provides the Audio core functions.
- *
- * @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
- *
- ******************************************************************************
- * @attention
- *
- * © Copyright (c) 2015 STMicroelectronics.
- * All rights reserved.
- *
- * This software component is licensed by ST under Ultimate Liberty license
- * SLA0044, the "License"; You may not use this file except in compliance with
- * the License. You may obtain a copy of the License at:
- * www.st.com/SLA0044
- *
- ******************************************************************************
- */
-
-/* BSPDependencies
-- "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
- * @{
- */
-
-/** @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)
-
-/**
- * @}
- */
-
-
-/** @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, /* 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_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*/
-} ;
-
-/* 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)
-{
- UNUSED(cfgidx);
- USBD_AUDIO_HandleTypeDef *haudio;
-
- /* Allocate Audio structure */
- haudio = USBD_malloc(sizeof(USBD_AUDIO_HandleTypeDef));
-
- if (haudio == NULL)
- {
- pdev->pClassData = NULL;
- return (uint8_t)USBD_EMEM;
- }
-
- pdev->pClassData = (void *)haudio;
-
- if (pdev->dev_speed == USBD_SPEED_HIGH)
- {
- pdev->ep_out[AUDIO_OUT_EP & 0xFU].bInterval = AUDIO_HS_BINTERVAL;
- }
- else /* LOW and FULL-speed endpoints */
- {
- pdev->ep_out[AUDIO_OUT_EP & 0xFU].bInterval = AUDIO_FS_BINTERVAL;
- }
-
- /* Open EP OUT */
- (void)USBD_LL_OpenEP(pdev, AUDIO_OUT_EP, USBD_EP_TYPE_ISOC, AUDIO_OUT_PACKET);
- pdev->ep_out[AUDIO_OUT_EP & 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)->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, AUDIO_OUT_EP, 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);
-
- /* Open EP OUT */
- (void)USBD_LL_CloseEP(pdev, AUDIO_OUT_EP);
- pdev->ep_out[AUDIO_OUT_EP & 0xFU].is_used = 0U;
- pdev->ep_out[AUDIO_OUT_EP & 0xFU].bInterval = 0U;
-
- /* DeInit physical Interface components */
- if (pdev->pClassData != NULL)
- {
- ((USBD_AUDIO_ItfTypeDef *)pdev->pUserData)->DeInit(0U);
- (void)USBD_free(pdev->pClassData);
- 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
- */
-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->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;
- }
- 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 = USBD_AUDIO_CfgDesc + 18;
- len = MIN(USB_AUDIO_DESC_SIZ, req->wLength);
-
- (void)USBD_CtlSendData(pdev, pbuf, len);
- }
- 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 nacked */
- 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;
-}
-
-
-/**
- * @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 = (uint16_t)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)
-{
- 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->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 = 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_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
- */
-void USBD_AUDIO_Sync(USBD_HandleTypeDef *pdev, AUDIO_OffsetTypeDef offset)
-{
- USBD_AUDIO_HandleTypeDef *haudio;
- uint32_t BufferSize = AUDIO_TOTAL_BUF_SIZE / 2U;
-
- if (pdev->pClassData == NULL)
- {
- return;
- }
-
- haudio = (USBD_AUDIO_HandleTypeDef *)pdev->pClassData;
-
- 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)->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_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)
-{
- UNUSED(pdev);
- UNUSED(epnum);
-
- 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;
-
- haudio = (USBD_AUDIO_HandleTypeDef *)pdev->pClassData;
-
- if (epnum == AUDIO_OUT_EP)
- {
- /* Get received data packet length */
- PacketSize = (uint16_t)USBD_LL_GetRxDataSize(pdev, epnum);
-
- /* Packet received Callback */
- ((USBD_AUDIO_ItfTypeDef *)pdev->pUserData)->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)->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, AUDIO_OUT_EP,
- &haudio->buffer[haudio->wr_ptr],
- AUDIO_OUT_PACKET);
- }
-
- return (uint8_t)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 = (USBD_AUDIO_HandleTypeDef *)pdev->pClassData;
-
- (void)USBD_memset(haudio->control.data, 0, 64U);
-
- /* Send the current mute state */
- (void)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 = (USBD_AUDIO_HandleTypeDef *)pdev->pClassData;
-
- if (req->wLength != 0U)
- {
- /* Prepare the reception of the buffer over EP0 */
- (void)USBD_CtlPrepareRx(pdev, haudio->control.data, req->wLength);
-
- haudio->control.cmd = AUDIO_REQ_SET_CUR; /* Set the request value */
- haudio->control.len = (uint8_t)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 = (uint16_t)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)
- {
- return (uint8_t)USBD_FAIL;
- }
-
- pdev->pUserData = fops;
-
- return (uint8_t)USBD_OK;
-}
-/**
- * @}
- */
-
-
-/**
- * @}
- */
-
-
-/**
- * @}
- */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/lib/STM32_USB_Device_Library/Class/AUDIO/Src/usbd_audio_if_template.c b/lib/STM32_USB_Device_Library/Class/AUDIO/Src/usbd_audio_if_template.c
deleted file mode 100644
index 7c97c751c..000000000
--- a/lib/STM32_USB_Device_Library/Class/AUDIO/Src/usbd_audio_if_template.c
+++ /dev/null
@@ -1,201 +0,0 @@
-/**
- ******************************************************************************
- * @file usbd_cdc_if_template.c
- * @author MCD Application Team
- * @brief Generic media access Layer.
- ******************************************************************************
- * @attention
- *
- * © Copyright (c) 2015 STMicroelectronics.
- * All rights reserved.
- *
- * This software component is licensed by ST under Ultimate Liberty license
- * SLA0044, the "License"; You may not use this file except in compliance with
- * the License. You may obtain a copy of the License at:
- * www.st.com/SLA0044
- *
- ******************************************************************************
- */
-
-/* BSPDependencies
-- "stm32xxxxx_{eval}{discovery}.c"
-- "stm32xxxxx_{eval}{discovery}_io.c"
-- "stm32xxxxx_{eval}{discovery}_audio.c"
-EndBSPDependencies */
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_audio_if_template.h"
-
-/** @addtogroup STM32_USB_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 *pbuf, uint32_t size, 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 operation: USBD_OK if all operations are OK else USBD_FAIL
- */
-static int8_t TEMPLATE_Init(uint32_t AudioFreq, uint32_t Volume, uint32_t options)
-{
- UNUSED(AudioFreq);
- UNUSED(Volume);
- UNUSED(options);
-
- /*
- Add your initialization code here
- */
- return (0);
-}
-
-/**
- * @brief TEMPLATE_DeInit
- * DeInitializes the AUDIO media low layer
- * @param None
- * @retval Result of the operation: USBD_OK if all operations are OK else USBD_FAIL
- */
-static int8_t TEMPLATE_DeInit(uint32_t options)
-{
- UNUSED(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 operation: USBD_OK if all operations are OK else USBD_FAIL
- */
-static int8_t TEMPLATE_AudioCmd(uint8_t *pbuf, uint32_t size, uint8_t cmd)
-{
- UNUSED(pbuf);
- UNUSED(size);
- UNUSED(cmd);
-
- return (0);
-}
-
-/**
- * @brief TEMPLATE_VolumeCtl
- * @param vol: volume level (0..100)
- * @retval Result of the operation: USBD_OK if all operations are OK else USBD_FAIL
- */
-static int8_t TEMPLATE_VolumeCtl(uint8_t vol)
-{
- UNUSED(vol);
-
- return (0);
-}
-
-/**
- * @brief TEMPLATE_MuteCtl
- * @param cmd: vmute command
- * @retval Result of the operation: USBD_OK if all operations are OK else USBD_FAIL
- */
-static int8_t TEMPLATE_MuteCtl(uint8_t cmd)
-{
- UNUSED(cmd);
-
- return (0);
-}
-
-/**
- * @brief TEMPLATE_PeriodicTC
- * @param cmd
- * @retval Result of the operation: USBD_OK if all operations are OK else USBD_FAIL
- */
-static int8_t TEMPLATE_PeriodicTC(uint8_t *pbuf, uint32_t size, uint8_t cmd)
-{
- UNUSED(pbuf);
- UNUSED(size);
- UNUSED(cmd);
-
- return (0);
-}
-
-/**
- * @brief TEMPLATE_GetState
- * @param None
- * @retval Result of the operation: 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/lib/STM32_USB_Device_Library/Class/BillBoard/Inc/usbd_billboard.h b/lib/STM32_USB_Device_Library/Class/BillBoard/Inc/usbd_billboard.h
deleted file mode 100644
index 8bff7b355..000000000
--- a/lib/STM32_USB_Device_Library/Class/BillBoard/Inc/usbd_billboard.h
+++ /dev/null
@@ -1,163 +0,0 @@
-/**
- ******************************************************************************
- * @file usbd_billboard.h
- * @author MCD Application Team
- * @brief Header file for the usbd_billboard.c file.
- ******************************************************************************
- * @attention
- *
- * © Copyright (c) 2019 STMicroelectronics.
- * All rights reserved.
- *
- * This software component is licensed by ST under Ultimate Liberty license
- * SLA0044, the "License"; You may not use this file except in compliance with
- * the License. You may obtain a copy of the License at:
- * www.st.com/SLA0044
- *
- ******************************************************************************
- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __USB_BB_H
-#define __USB_BB_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_ioreq.h"
-#include "usbd_desc.h"
-/** @addtogroup STM32_USB_DEVICE_LIBRARY
- * @{
- */
-
-/** @defgroup USBD_BB
- * @brief This file is the Header file for usbd_billboard.c
- * @{
- */
-
-/** @defgroup USBD_BB_Exported_Defines
- * @{
- */
-#define USB_BB_CONFIG_DESC_SIZ 18U
-
-#ifndef USB_BB_MAX_NUM_ALT_MODE
-#define USB_BB_MAX_NUM_ALT_MODE 0x2U
-#endif /* USB_BB_MAX_NUM_ALT_MODE */
-
-#ifndef USBD_BB_IF_STRING_INDEX
-#define USBD_BB_IF_STRING_INDEX 0x10U
-#endif /* USBD_BB_IF_STRING_INDEX */
-
-
-#define USBD_BILLBOARD_CAPABILITY 0x0DU
-#define USBD_BILLBOARD_ALTMODE_CAPABILITY 0x0FU
-
-/**
- * @}
- */
-
-
-/** @defgroup USBD_CORE_Exported_TypesDefinitions
- * @{
- */
-typedef struct _BB_DescHeader
-{
- uint8_t bLength;
- uint8_t bDescriptorType;
- uint8_t bDevCapabilityType;
-}
-USBD_BB_DescHeader_t;
-
-typedef struct
-{
- uint16_t wSVID;
- uint8_t bAlternateMode;
- uint8_t iAlternateModeString;
-} USBD_BB_AltModeTypeDef;
-
-typedef struct
-{
- uint8_t bLength;
- uint8_t bDescriptorType;
- uint8_t bDevCapabilityType;
- uint8_t bIndex;
- uint32_t dwAlternateModeVdo;
-} USBD_BB_AltModeCapDescTypeDef;
-
-typedef struct
-{
- uint8_t bLength;
- uint8_t bDescriptorType;
- uint8_t bDevCapabilityType;
- uint8_t iAddtionalInfoURL;
- uint8_t bNbrOfAltModes;
- uint8_t bPreferredAltMode;
- uint16_t VconnPwr;
- uint8_t bmConfigured[32];
- uint16_t bcdVersion;
- uint8_t bAdditionalFailureInfo;
- uint8_t bReserved;
- USBD_BB_AltModeTypeDef wSVID[USB_BB_MAX_NUM_ALT_MODE];
-} USBD_BosBBCapDescTypedef;
-
-typedef enum
-{
- UNSPECIFIED_ERROR = 0,
- CONFIGURATION_NOT_ATTEMPTED,
- CONFIGURATION_UNSUCCESSFUL,
- CONFIGURATION_SUCCESSFUL,
-} BB_AltModeState;
-
-/**
- * @}
- */
-
-
-
-/** @defgroup USBD_CORE_Exported_Macros
- * @{
- */
-
-/**
- * @}
- */
-
-/** @defgroup USBD_CORE_Exported_Variables
- * @{
- */
-
-extern USBD_ClassTypeDef USBD_BB;
-#define USBD_BB_CLASS &USBD_BB
-/**
- * @}
- */
-
-/** @defgroup USB_CORE_Exported_Functions
- * @{
- */
-
-#if (USBD_CLASS_BOS_ENABLED == 1)
-void *USBD_BB_GetCapDesc(USBD_HandleTypeDef *pdev, uint8_t *buf);
-void *USBD_BB_GetAltModeDesc(USBD_HandleTypeDef *pdev, uint8_t *buf, uint8_t idx);
-#endif
-
-/**
- * @}
- */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __USB_BB_H */
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/lib/STM32_USB_Device_Library/Class/BillBoard/Src/usbd_billboard.c b/lib/STM32_USB_Device_Library/Class/BillBoard/Src/usbd_billboard.c
deleted file mode 100644
index b9e6d1906..000000000
--- a/lib/STM32_USB_Device_Library/Class/BillBoard/Src/usbd_billboard.c
+++ /dev/null
@@ -1,496 +0,0 @@
-/**
- ******************************************************************************
- * @file usbd_billboard.c
- * @author MCD Application Team
- * @brief This file provides the high layer firmware functions to manage the
- * following functionalities of the USB BillBoard Class:
- * - Initialization and Configuration of high and low layer
- * - Enumeration as BillBoard Device
- * - Error management
- * @verbatim
- *
- * ===================================================================
- * BillBoard Class Description
- * ===================================================================
- * This module manages the BillBoard class V1.2.1 following the "Device Class Definition
- * for BillBoard Devices (BB) Version R1.2.1 Sept 08, 2016".
- * This driver implements the following aspects of the specification:
- * - Device descriptor management
- * - Configuration descriptor management
- * - Enumeration as an USB BillBoard device
- * - Enumeration & management of BillBoard device supported alternate modes
- *
- * @endverbatim
- *
- ******************************************************************************
- * @attention
- *
- * © Copyright (c) 2019 STMicroelectronics.
- * All rights reserved.
- *
- * This software component is licensed by ST under Ultimate Liberty license
- * SLA0044, the "License"; You may not use this file except in compliance with
- * the License. You may obtain a copy of the License at:
- * www.st.com/SLA0044
- *
- ******************************************************************************
- */
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_billboard.h"
-#include "usbd_ctlreq.h"
-
-
-/** @addtogroup STM32_USB_DEVICE_LIBRARY
- * @{
- */
-
-
-/** @defgroup USBD_BB
- * @brief usbd core module
- * @{
- */
-
-/** @defgroup USBD_BB_Private_TypesDefinitions
- * @{
- */
-/**
- * @}
- */
-
-
-/** @defgroup USBD_BB_Private_Defines
- * @{
- */
-
-/**
- * @}
- */
-
-
-/** @defgroup USBD_BB_Private_Macros
- * @{
- */
-/**
- * @}
- */
-
-
-/** @defgroup USBD_BB_Private_FunctionPrototypes
- * @{
- */
-
-static uint8_t USBD_BB_Init(USBD_HandleTypeDef *pdev, uint8_t cfgidx);
-static uint8_t USBD_BB_DeInit(USBD_HandleTypeDef *pdev, uint8_t cfgidx);
-static uint8_t USBD_BB_Setup(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
-static uint8_t USBD_BB_DataIn(USBD_HandleTypeDef *pdev, uint8_t epnum);
-static uint8_t USBD_BB_DataOut(USBD_HandleTypeDef *pdev, uint8_t epnum);
-static uint8_t USBD_BB_EP0_RxReady(USBD_HandleTypeDef *pdev);
-
-static uint8_t *USBD_BB_GetCfgDesc(uint16_t *length);
-static uint8_t *USBD_BB_GetDeviceQualifierDesc(uint16_t *length);
-static uint8_t *USBD_BB_GetOtherSpeedCfgDesc(uint16_t *length);
-
-#if (USBD_CLASS_BOS_ENABLED == 1)
-USBD_BB_DescHeader_t *USBD_BB_GetNextDesc(uint8_t *pbuf, uint16_t *ptr);
-#endif
-
-
-
-/**
- * @}
- */
-
-/** @defgroup USBD_BB_Private_Variables
- * @{
- */
-USBD_ClassTypeDef USBD_BB =
-{
- USBD_BB_Init, /* Init */
- USBD_BB_DeInit, /* DeInit */
- USBD_BB_Setup, /* Setup */
- NULL, /* EP0_TxSent */
- USBD_BB_EP0_RxReady, /* EP0_RxReady */
- USBD_BB_DataIn, /* DataIn */
- USBD_BB_DataOut, /* DataOut */
- NULL, /* SOF */
- NULL,
- NULL,
- USBD_BB_GetCfgDesc,
- USBD_BB_GetCfgDesc,
- USBD_BB_GetOtherSpeedCfgDesc,
- USBD_BB_GetDeviceQualifierDesc,
-#if (USBD_SUPPORT_USER_STRING_DESC == 1U)
- NULL,
-#endif
-};
-
-/* USB Standard Device Qualifier Descriptor */
-__ALIGN_BEGIN static uint8_t USBD_BB_DeviceQualifierDesc[USB_LEN_DEV_QUALIFIER_DESC] __ALIGN_END =
-{
- USB_LEN_DEV_QUALIFIER_DESC, /* bLength */
- USB_DESC_TYPE_DEVICE_QUALIFIER, /* bDescriptorType */
- 0x01, /* bcdUSB */
- 0x20,
- 0x11, /* bDeviceClass */
- 0x00, /* bDeviceSubClass */
- 0x00, /* bDeviceProtocol */
- 0x40, /* bMaxPacketSize0 */
- 0x01, /* bNumConfigurations */
- 0x00, /* bReserved */
-};
-
-/* USB device Configuration Descriptor */
-__ALIGN_BEGIN static uint8_t USBD_BB_CfgDesc[USB_BB_CONFIG_DESC_SIZ] __ALIGN_END =
-{
- 0x09, /* bLength: Configuration Descriptor size */
- USB_DESC_TYPE_CONFIGURATION, /* bDescriptorType: Configuration */
- USB_BB_CONFIG_DESC_SIZ, /* wTotalLength: Bytes returned */
- 0x00,
- 0x01, /* bNumInterfaces: 1 interface */
- 0x01, /* bConfigurationValue: Configuration value */
- USBD_IDX_CONFIG_STR, /* iConfiguration: Index of string descriptor describing the configuration */
- 0xC0, /* bmAttributes: bus powered and Support Remote Wake-up */
- 0x00, /* MaxPower 100 mA: this current is used for detecting Vbus */
- /* 09 */
-
- /************** Descriptor of BillBoard interface ****************/
- /* 09 */
- 0x09, /* bLength: Interface Descriptor size */
- USB_DESC_TYPE_INTERFACE, /* bDescriptorType: Interface descriptor type */
- 0x00, /* bInterfaceNumber: Number of Interface */
- 0x00, /* bAlternateSetting: Alternate setting */
- 0x00, /* bNumEndpoints */
- 0x11, /* bInterfaceClass: billboard */
- 0x00, /* bInterfaceSubClass */
- 0x00, /* nInterfaceProtocol */
- USBD_BB_IF_STRING_INDEX, /* iInterface: Index of string descriptor */
-};
-
-/* USB device Other Speed Configuration Descriptor */
-__ALIGN_BEGIN static uint8_t USBD_BB_OtherSpeedCfgDesc[USB_BB_CONFIG_DESC_SIZ] __ALIGN_END =
-{
- 0x09, /* bLength: Configuation Descriptor size */
- USB_DESC_TYPE_OTHER_SPEED_CONFIGURATION,
- USB_BB_CONFIG_DESC_SIZ,
- 0x00,
- 0x01, /* bNumInterfaces: 1 interface */
- 0x01, /* bConfigurationValue: */
- USBD_IDX_CONFIG_STR, /* iConfiguration: */
- 0xC0, /* bmAttributes: */
- 0x00, /* MaxPower 100 mA */
-
- /************** Descriptor of BillBoard interface ****************/
- /* 09 */
- 0x09, /* bLength: Interface Descriptor size */
- USB_DESC_TYPE_INTERFACE, /* bDescriptorType: Interface descriptor type */
- 0x00, /* bInterfaceNumber: Number of Interface */
- 0x00, /* bAlternateSetting: Alternate setting */
- 0x00, /* bNumEndpoints*/
- 0x11, /* bInterfaceClass: billboard */
- 0x00, /* bInterfaceSubClass */
- 0x00, /* nInterfaceProtocol */
- USBD_BB_IF_STRING_INDEX, /* iInterface: Index of string descriptor */
-} ;
-
-/**
- * @}
- */
-
-/** @defgroup USBD_BB_Private_Functions
- * @{
- */
-
-/**
- * @brief USBD_BB_Init
- * Initialize the BB interface
- * @param pdev: device instance
- * @param cfgidx: Configuration index
- * @retval status
- */
-static uint8_t USBD_BB_Init(USBD_HandleTypeDef *pdev, uint8_t cfgidx)
-{
- /* Prevent unused argument compilation warning */
- UNUSED(pdev);
- UNUSED(cfgidx);
-
- return (uint8_t)USBD_OK;
-}
-
-/**
- * @brief USBD_BB_Init
- * DeInitialize the BB layer
- * @param pdev: device instance
- * @param cfgidx: Configuration index
- * @retval status
- */
-static uint8_t USBD_BB_DeInit(USBD_HandleTypeDef *pdev, uint8_t cfgidx)
-{
- /* Prevent unused argument compilation warning */
- UNUSED(pdev);
- UNUSED(cfgidx);
-
- return (uint8_t)USBD_OK;
-}
-
-/**
- * @brief USBD_BB_Setup
- * Handle the BB specific requests
- * @param pdev: instance
- * @param req: usb requests
- * @retval status
- */
-static uint8_t USBD_BB_Setup(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
-{
- USBD_StatusTypeDef ret = USBD_OK;
- uint16_t status_info = 0U;
- uint16_t AltSetting = 0U;
-
- switch (req->bmRequest & USB_REQ_TYPE_MASK)
- {
- case USB_REQ_TYPE_CLASS:
- 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_INTERFACE:
- if (pdev->dev_state == USBD_STATE_CONFIGURED)
- {
- (void)USBD_CtlSendData(pdev, (uint8_t *)&AltSetting, 1U);
- }
- else
- {
- USBD_CtlError(pdev, req);
- ret = USBD_FAIL;
- }
- break;
-
- case USB_REQ_SET_INTERFACE:
- 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;
-}
-
-/**
- * @brief USBD_BB_DataIn
- * Data sent on non-control IN endpoint
- * @param pdev: device instance
- * @param epnum: endpoint number
- * @retval status
- */
-static uint8_t USBD_BB_DataIn(USBD_HandleTypeDef *pdev, uint8_t epnum)
-{
- /* Prevent unused argument compilation warning */
- UNUSED(pdev);
- UNUSED(epnum);
-
- return (uint8_t)USBD_OK;
-}
-
-/**
- * @brief USBD_BB_DataOut
- * Data received on non-control Out endpoint
- * @param pdev: device instance
- * @param epnum: endpoint number
- * @retval status
- */
-static uint8_t USBD_BB_DataOut(USBD_HandleTypeDef *pdev, uint8_t epnum)
-{
- /* Prevent unused argument compilation warning */
- UNUSED(pdev);
- UNUSED(epnum);
-
- return (uint8_t)USBD_OK;
-}
-
-/**
- * @brief USBD_BB_EP0_RxReady
- * Handle EP0 Rx Ready event
- * @param pdev: device instance
- * @retval status
- */
-static uint8_t USBD_BB_EP0_RxReady(USBD_HandleTypeDef *pdev)
-{
- /* Prevent unused argument compilation warning */
- UNUSED(pdev);
-
- return (uint8_t)USBD_OK;
-}
-
-/**
- * @brief USBD_BB_GetCfgDesc
- * return configuration descriptor
- * @param speed : current device speed
- * @param length : pointer data length
- * @retval pointer to descriptor buffer
- */
-static uint8_t *USBD_BB_GetCfgDesc(uint16_t *length)
-{
- *length = (uint16_t)sizeof(USBD_BB_CfgDesc);
- return USBD_BB_CfgDesc;
-}
-
-/**
- * @brief USBD_BB_GetOtherSpeedCfgDesc
- * return other speed configuration descriptor
- * @param length : pointer data length
- * @retval pointer to descriptor buffer
- */
-uint8_t *USBD_BB_GetOtherSpeedCfgDesc(uint16_t *length)
-{
- *length = (uint16_t)sizeof(USBD_BB_OtherSpeedCfgDesc);
- return USBD_BB_OtherSpeedCfgDesc;
-}
-
-/**
- * @brief DeviceQualifierDescriptor
- * return Device Qualifier descriptor
- * @param length : pointer data length
- * @retval pointer to descriptor buffer
- */
-static uint8_t *USBD_BB_GetDeviceQualifierDesc(uint16_t *length)
-{
- *length = (uint16_t)sizeof(USBD_BB_DeviceQualifierDesc);
- return USBD_BB_DeviceQualifierDesc;
-}
-
-
-#if (USBD_CLASS_BOS_ENABLED == 1U)
-/**
- * @brief USBD_BB_GetNextDesc
- * This function return the next descriptor header
- * @param buf: Buffer where the descriptor is available
- * @param ptr: data pointer inside the descriptor
- * @retval next header
- */
-USBD_BB_DescHeader_t *USBD_BB_GetNextDesc(uint8_t *pbuf, uint16_t *ptr)
-{
- USBD_BB_DescHeader_t *pnext = (USBD_BB_DescHeader_t *)pbuf;
-
- *ptr += pnext->bLength;
- pnext = (USBD_BB_DescHeader_t *)(pbuf + pnext->bLength);
-
- return (pnext);
-}
-
-
-/**
- * @brief USBD_BB_GetCapDesc
- * This function return the Billboard Capability descriptor
- * @param pdev: device instance
- * @param pBosDesc: pointer to Bos descriptor
- * @retval pointer to Billboard Capability descriptor
- */
-void *USBD_BB_GetCapDesc(USBD_HandleTypeDef *pdev, uint8_t *pBosDesc)
-{
- UNUSED(pdev);
-
- USBD_BB_DescHeader_t *pdesc = (USBD_BB_DescHeader_t *)pBosDesc;
- USBD_BosDescTypedef *desc = (USBD_BosDescTypedef *)pBosDesc;
- USBD_BosBBCapDescTypedef *pCapDesc = NULL;
- uint16_t ptr;
-
- if (desc->wTotalLength > desc->bLength)
- {
- ptr = desc->bLength;
-
- while (ptr < desc->wTotalLength)
- {
- pdesc = USBD_BB_GetNextDesc((uint8_t *)pdesc, &ptr);
-
- if (pdesc->bDevCapabilityType == USBD_BILLBOARD_CAPABILITY)
- {
- pCapDesc = (USBD_BosBBCapDescTypedef *)pdesc;
- break;
- }
- }
- }
- return (void *)pCapDesc;
-}
-
-
-/**
- * @brief USBD_BB_GetAltModeDesc
- * This function return the Billboard Alternate Mode descriptor
- * @param pdev: device instance
- * @param pBosDesc: pointer to Bos descriptor
- * @param idx: Index of requested Alternate Mode descriptor
- * @retval pointer to Alternate Mode descriptor
- */
-void *USBD_BB_GetAltModeDesc(USBD_HandleTypeDef *pdev, uint8_t *pBosDesc, uint8_t idx)
-{
- UNUSED(pdev);
-
- USBD_BB_DescHeader_t *pdesc = (USBD_BB_DescHeader_t *)pBosDesc;
- USBD_BosDescTypedef *desc = (USBD_BosDescTypedef *)pBosDesc;
- USBD_BB_AltModeCapDescTypeDef *pAltModDesc = NULL;
- uint8_t cnt = 0U;
- uint16_t ptr;
-
- if (desc->wTotalLength > desc->bLength)
- {
- ptr = desc->bLength;
-
- while (ptr < desc->wTotalLength)
- {
- pdesc = USBD_BB_GetNextDesc((uint8_t *)pdesc, &ptr);
-
- if (pdesc->bDevCapabilityType == USBD_BILLBOARD_ALTMODE_CAPABILITY)
- {
- if (cnt == idx)
- {
- pAltModDesc = (USBD_BB_AltModeCapDescTypeDef *)pdesc;
- break;
- }
- else
- {
- cnt++;
- }
- }
- }
- }
- return (void *)pAltModDesc;
-}
-#endif
-
-/**
- * @}
- */
-
-
-/**
- * @}
- */
-
-
-/**
- * @}
- */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/lib/STM32_USB_Device_Library/Class/CDC/Inc/usbd_cdc.h b/lib/STM32_USB_Device_Library/Class/CDC/Inc/usbd_cdc.h
deleted file mode 100644
index dc927e63b..000000000
--- a/lib/STM32_USB_Device_Library/Class/CDC/Inc/usbd_cdc.h
+++ /dev/null
@@ -1,187 +0,0 @@
-/**
- ******************************************************************************
- * @file usbd_cdc.h
- * @author MCD Application Team
- * @brief header file for the usbd_cdc.c file.
- ******************************************************************************
- * @attention
- *
- * © Copyright (c) 2015 STMicroelectronics.
- * All rights reserved.
- *
- * This software component is licensed by ST under Ultimate Liberty license
- * SLA0044, the "License"; You may not use this file except in compliance with
- * the License. You may obtain a copy of the License at:
- * www.st.com/SLA0044
- *
- ******************************************************************************
- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __USB_CDC_H
-#define __USB_CDC_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_ioreq.h"
-
-/** @addtogroup STM32_USB_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 0x81U /* EP1 for data IN */
-#define CDC_OUT_EP 0x01U /* EP1 for data OUT */
-#define CDC_CMD_EP 0x82U /* EP2 for CDC commands */
-
-#ifndef CDC_HS_BINTERVAL
-#define CDC_HS_BINTERVAL 0x10U
-#endif /* CDC_HS_BINTERVAL */
-
-#ifndef CDC_FS_BINTERVAL
-#define CDC_FS_BINTERVAL 0x10U
-#endif /* CDC_FS_BINTERVAL */
-
-/* CDC Endpoints parameters: you can fine tune these values depending on the needed baudrates and performance. */
-#define CDC_DATA_HS_MAX_PACKET_SIZE 512U /* Endpoint IN & OUT Packet size */
-#define CDC_DATA_FS_MAX_PACKET_SIZE 64U /* Endpoint IN & OUT Packet size */
-#define CDC_CMD_PACKET_SIZE 8U /* Control Endpoint Packet size */
-
-#define USB_CDC_CONFIG_DESC_SIZ 67U
-#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 0x00U
-#define CDC_GET_ENCAPSULATED_RESPONSE 0x01U
-#define CDC_SET_COMM_FEATURE 0x02U
-#define CDC_GET_COMM_FEATURE 0x03U
-#define CDC_CLEAR_COMM_FEATURE 0x04U
-#define CDC_SET_LINE_CODING 0x20U
-#define CDC_GET_LINE_CODING 0x21U
-#define CDC_SET_CONTROL_LINE_STATE 0x22U
-#define CDC_SEND_BREAK 0x23U
-
-#define CDC_STOP_BITS_1 0x00
-#define CDC_STOP_BITS_1_5 0x01
-#define CDC_STOP_BITS_2 0x02
-
-#define CDC_PARITY_NONE 0x00
-#define CDC_PARITY_ODD 0x01
-#define CDC_PARITY_EVEN 0x02
-#define CDC_PARITY_MARK 0x03
-#define CDC_PARITY_SPACE 0x04
-
-#define CDC_CONTROL_LINE_DTR 0x0001
-#define CDC_CONTROL_LINE_RTS 0x0002
-
-/**
- * @}
- */
-
-
-/** @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 cmd, uint8_t *pbuf, uint16_t length);
- int8_t (* Receive)(uint8_t *Buf, uint32_t *Len);
- int8_t (* TransmitCplt)(uint8_t *Buf, uint32_t *Len, uint8_t epnum);
-} USBD_CDC_ItfTypeDef;
-
-
-typedef struct
-{
- uint32_t data[CDC_DATA_HS_MAX_PACKET_SIZE / 4U]; /* 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;
-#define USBD_CDC_CLASS &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,
- uint32_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);
-/**
- * @}
- */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __USB_CDC_H */
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/lib/STM32_USB_Device_Library/Class/CDC/Inc/usbd_cdc_if_template.h b/lib/STM32_USB_Device_Library/Class/CDC/Inc/usbd_cdc_if_template.h
deleted file mode 100644
index 158ad40c2..000000000
--- a/lib/STM32_USB_Device_Library/Class/CDC/Inc/usbd_cdc_if_template.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/**
- ******************************************************************************
- * @file usbd_cdc_if_template.h
- * @author MCD Application Team
- * @brief Header for usbd_cdc_if_template.c file.
- ******************************************************************************
- * @attention
- *
- * © Copyright (c) 2015 STMicroelectronics.
- * All rights reserved.
- *
- * This software component is licensed by ST under Ultimate Liberty license
- * SLA0044, the "License"; You may not use this file except in compliance with
- * the License. You may obtain a copy of the License at:
- * www.st.com/SLA0044
- *
- ******************************************************************************
- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __USBD_CDC_IF_TEMPLATE_H
-#define __USBD_CDC_IF_TEMPLATE_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_cdc.h"
-
-/* Exported types ------------------------------------------------------------*/
-/* Exported constants --------------------------------------------------------*/
-
-extern USBD_CDC_ItfTypeDef USBD_CDC_Template_fops;
-
-/* Exported macro ------------------------------------------------------------*/
-/* Exported functions ------------------------------------------------------- */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __USBD_CDC_IF_TEMPLATE_H */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/lib/STM32_USB_Device_Library/Class/CDC/Src/usbd_cdc.c b/lib/STM32_USB_Device_Library/Class/CDC/Src/usbd_cdc.c
deleted file mode 100644
index 814e945e5..000000000
--- a/lib/STM32_USB_Device_Library/Class/CDC/Src/usbd_cdc.c
+++ /dev/null
@@ -1,926 +0,0 @@
-/**
- ******************************************************************************
- * @file usbd_cdc.c
- * @author MCD Application Team
- * @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
- *
- * 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
- *
- * © Copyright (c) 2015 STMicroelectronics.
- * All rights reserved.
- *
- * This software component is licensed by ST under Ultimate Liberty license
- * SLA0044, the "License"; You may not use this file except in compliance with
- * the License. You may obtain a copy of the License at:
- * www.st.com/SLA0044
- *
- ******************************************************************************
- */
-
-/* BSPDependencies
-- "stm32xxxxx_{eval}{discovery}{nucleo_144}.c"
-- "stm32xxxxx_{eval}{discovery}_io.c"
-EndBSPDependencies */
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_cdc.h"
-#include "usbd_ctlreq.h"
-
-
-/** @addtogroup STM32_USB_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 static 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),
- CDC_HS_BINTERVAL, /* 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 static 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),
- CDC_FS_BINTERVAL, /* 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 */
-};
-
-__ALIGN_BEGIN static 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),
- CDC_FS_BINTERVAL, /* 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
- * Initialize 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)
-{
- UNUSED(cfgidx);
- static USBD_CDC_HandleTypeDef hcdc;
-
- pdev->pClassData = &hcdc;
-
- if (pdev->dev_speed == USBD_SPEED_HIGH)
- {
- /* Open EP IN */
- (void)USBD_LL_OpenEP(pdev, CDC_IN_EP, USBD_EP_TYPE_BULK,
- CDC_DATA_HS_IN_PACKET_SIZE);
-
- pdev->ep_in[CDC_IN_EP & 0xFU].is_used = 1U;
-
- /* Open EP OUT */
- (void)USBD_LL_OpenEP(pdev, CDC_OUT_EP, USBD_EP_TYPE_BULK,
- CDC_DATA_HS_OUT_PACKET_SIZE);
-
- pdev->ep_out[CDC_OUT_EP & 0xFU].is_used = 1U;
-
- /* Set bInterval for CDC CMD Endpoint */
- pdev->ep_in[CDC_CMD_EP & 0xFU].bInterval = CDC_HS_BINTERVAL;
- }
- else
- {
- /* Open EP IN */
- (void)USBD_LL_OpenEP(pdev, CDC_IN_EP, USBD_EP_TYPE_BULK,
- CDC_DATA_FS_IN_PACKET_SIZE);
-
- pdev->ep_in[CDC_IN_EP & 0xFU].is_used = 1U;
-
- /* Open EP OUT */
- (void)USBD_LL_OpenEP(pdev, CDC_OUT_EP, USBD_EP_TYPE_BULK,
- CDC_DATA_FS_OUT_PACKET_SIZE);
-
- pdev->ep_out[CDC_OUT_EP & 0xFU].is_used = 1U;
-
- /* Set bInterval for CMD Endpoint */
- pdev->ep_in[CDC_CMD_EP & 0xFU].bInterval = CDC_FS_BINTERVAL;
- }
-
- /* Open Command IN EP */
- (void)USBD_LL_OpenEP(pdev, CDC_CMD_EP, USBD_EP_TYPE_INTR, CDC_CMD_PACKET_SIZE);
- pdev->ep_in[CDC_CMD_EP & 0xFU].is_used = 1U;
-
- /* Init physical Interface components */
- ((USBD_CDC_ItfTypeDef *)pdev->pUserData)->Init();
-
- /* Init Xfer states */
- hcdc.TxState = 0U;
- hcdc.RxState = 0U;
-
- if (pdev->dev_speed == USBD_SPEED_HIGH)
- {
- /* Prepare Out endpoint to receive next packet */
- (void)USBD_LL_PrepareReceive(pdev, CDC_OUT_EP, hcdc.RxBuffer,
- CDC_DATA_HS_OUT_PACKET_SIZE);
- }
- else
- {
- /* Prepare Out endpoint to receive next packet */
- (void)USBD_LL_PrepareReceive(pdev, CDC_OUT_EP, hcdc.RxBuffer,
- CDC_DATA_FS_OUT_PACKET_SIZE);
- }
-
- return (uint8_t)USBD_OK;
-}
-
-/**
- * @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)
-{
- UNUSED(cfgidx);
- uint8_t ret = 0U;
-
- /* Close EP IN */
- (void)USBD_LL_CloseEP(pdev, CDC_IN_EP);
- pdev->ep_in[CDC_IN_EP & 0xFU].is_used = 0U;
-
- /* Close EP OUT */
- (void)USBD_LL_CloseEP(pdev, CDC_OUT_EP);
- pdev->ep_out[CDC_OUT_EP & 0xFU].is_used = 0U;
-
- /* Close Command IN EP */
- (void)USBD_LL_CloseEP(pdev, CDC_CMD_EP);
- pdev->ep_in[CDC_CMD_EP & 0xFU].is_used = 0U;
- pdev->ep_in[CDC_CMD_EP & 0xFU].bInterval = 0U;
-
- /* DeInit physical Interface components */
- if (pdev->pClassData != NULL)
- {
- ((USBD_CDC_ItfTypeDef *)pdev->pUserData)->DeInit();
- 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 = (USBD_CDC_HandleTypeDef *)pdev->pClassData;
- uint8_t ifalt = 0U;
- uint16_t status_info = 0U;
- USBD_StatusTypeDef ret = USBD_OK;
-
- switch (req->bmRequest & USB_REQ_TYPE_MASK)
- {
- case USB_REQ_TYPE_CLASS:
- if (req->wLength != 0U)
- {
- if ((req->bmRequest & 0x80U) != 0U)
- {
- ((USBD_CDC_ItfTypeDef *)pdev->pUserData)->Control(req->bRequest,
- (uint8_t *)hcdc->data,
- req->wLength);
-
- (void)USBD_CtlSendData(pdev, (uint8_t *)hcdc->data, req->wLength);
- }
- else
- {
- hcdc->CmdOpCode = req->bRequest;
- hcdc->CmdLength = (uint8_t)req->wLength;
-
- (void)USBD_CtlPrepareRx(pdev, (uint8_t *)hcdc->data, req->wLength);
- }
- }
- else
- {
- ((USBD_CDC_ItfTypeDef *)pdev->pUserData)->Control(req->bRequest,
- (uint8_t *)req, 0U);
- }
- 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_INTERFACE:
- if (pdev->dev_state == USBD_STATE_CONFIGURED)
- {
- (void)USBD_CtlSendData(pdev, &ifalt, 1U);
- }
- else
- {
- USBD_CtlError(pdev, req);
- ret = USBD_FAIL;
- }
- break;
-
- case USB_REQ_SET_INTERFACE:
- if (pdev->dev_state != USBD_STATE_CONFIGURED)
- {
- 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;
-}
-
-/**
- * @brief USBD_CDC_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;
- PCD_HandleTypeDef *hpcd = pdev->pData;
-
- if (pdev->pClassData == NULL)
- {
- return (uint8_t)USBD_FAIL;
- }
-
- hcdc = (USBD_CDC_HandleTypeDef *)pdev->pClassData;
-
- if ((pdev->ep_in[epnum].total_length > 0U) &&
- ((pdev->ep_in[epnum].total_length % hpcd->IN_ep[epnum].maxpacket) == 0U))
- {
- /* Update the packet total length */
- pdev->ep_in[epnum].total_length = 0U;
-
- /* Send ZLP */
- (void)USBD_LL_Transmit(pdev, epnum, NULL, 0U);
- }
- else
- {
- hcdc->TxState = 0U;
- ((USBD_CDC_ItfTypeDef *)pdev->pUserData)->TransmitCplt(hcdc->TxBuffer, &hcdc->TxLength, epnum);
- }
-
- return (uint8_t)USBD_OK;
-}
-
-/**
- * @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 = (USBD_CDC_HandleTypeDef *)pdev->pClassData;
-
- if (pdev->pClassData == NULL)
- {
- return (uint8_t)USBD_FAIL;
- }
-
- /* 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 */
-
- ((USBD_CDC_ItfTypeDef *)pdev->pUserData)->Receive(hcdc->RxBuffer, &hcdc->RxLength);
-
- return (uint8_t)USBD_OK;
-}
-
-/**
- * @brief USBD_CDC_EP0_RxReady
- * Handle EP0 Rx Ready event
- * @param pdev: device instance
- * @retval status
- */
-static uint8_t USBD_CDC_EP0_RxReady(USBD_HandleTypeDef *pdev)
-{
- USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef *)pdev->pClassData;
-
- if ((pdev->pUserData != NULL) && (hcdc->CmdOpCode != 0xFFU))
- {
- ((USBD_CDC_ItfTypeDef *)pdev->pUserData)->Control(hcdc->CmdOpCode,
- (uint8_t *)hcdc->data,
- (uint16_t)hcdc->CmdLength);
- hcdc->CmdOpCode = 0xFFU;
-
- }
-
- return (uint8_t)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 = (uint16_t)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 = (uint16_t)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 = (uint16_t)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 = (uint16_t)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)
-{
- if (fops == NULL)
- {
- return (uint8_t)USBD_FAIL;
- }
-
- pdev->pUserData = fops;
-
- return (uint8_t)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, uint32_t length)
-{
- USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef *)pdev->pClassData;
-
- hcdc->TxBuffer = pbuff;
- hcdc->TxLength = length;
-
- return (uint8_t)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 = (USBD_CDC_HandleTypeDef *)pdev->pClassData;
-
- hcdc->RxBuffer = pbuff;
-
- return (uint8_t)USBD_OK;
-}
-
-/**
- * @brief USBD_CDC_TransmitPacket
- * Transmit packet on IN endpoint
- * @param pdev: device instance
- * @retval status
- */
-uint8_t USBD_CDC_TransmitPacket(USBD_HandleTypeDef *pdev)
-{
- USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef *)pdev->pClassData;
- USBD_StatusTypeDef ret = USBD_BUSY;
-
- if (pdev->pClassData == NULL)
- {
- return (uint8_t)USBD_FAIL;
- }
-
- if (hcdc->TxState == 0U)
- {
- /* Tx Transfer in progress */
- hcdc->TxState = 1U;
-
- /* Update the packet total length */
- pdev->ep_in[CDC_IN_EP & 0xFU].total_length = hcdc->TxLength;
-
- /* Transmit next packet */
- (void)USBD_LL_Transmit(pdev, CDC_IN_EP, hcdc->TxBuffer, hcdc->TxLength);
-
- ret = USBD_OK;
- }
-
- return (uint8_t)ret;
-}
-
-
-/**
- * @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 = (USBD_CDC_HandleTypeDef *)pdev->pClassData;
-
- if (pdev->pClassData == NULL)
- {
- return (uint8_t)USBD_FAIL;
- }
-
- if (pdev->dev_speed == USBD_SPEED_HIGH)
- {
- /* Prepare Out endpoint to receive next packet */
- (void)USBD_LL_PrepareReceive(pdev, CDC_OUT_EP, hcdc->RxBuffer,
- CDC_DATA_HS_OUT_PACKET_SIZE);
- }
- else
- {
- /* Prepare Out endpoint to receive next packet */
- (void)USBD_LL_PrepareReceive(pdev, CDC_OUT_EP, hcdc->RxBuffer,
- CDC_DATA_FS_OUT_PACKET_SIZE);
- }
-
- return (uint8_t)USBD_OK;
-}
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/lib/STM32_USB_Device_Library/Class/CDC/Src/usbd_cdc_if_template.c b/lib/STM32_USB_Device_Library/Class/CDC/Src/usbd_cdc_if_template.c
deleted file mode 100644
index 60748c39f..000000000
--- a/lib/STM32_USB_Device_Library/Class/CDC/Src/usbd_cdc_if_template.c
+++ /dev/null
@@ -1,248 +0,0 @@
-/**
- ******************************************************************************
- * @file usbd_cdc_if_template.c
- * @author MCD Application Team
- * @brief Generic media access Layer.
- ******************************************************************************
- * @attention
- *
- * © Copyright (c) 2015 STMicroelectronics.
- * All rights reserved.
- *
- * This software component is licensed by ST under Ultimate Liberty license
- * SLA0044, the "License"; You may not use this file except in compliance with
- * the License. You may obtain a copy of the License at:
- * www.st.com/SLA0044
- *
- ******************************************************************************
- */
-
-/* BSPDependencies
-- "stm32xxxxx_{eval}{discovery}{nucleo_144}.c"
-- "stm32xxxxx_{eval}{discovery}_io.c"
-EndBSPDependencies */
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_cdc_if_template.h"
-
-/** @addtogroup STM32_USB_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);
-static int8_t TEMPLATE_TransmitCplt(uint8_t *pbuf, uint32_t *Len, uint8_t epnum);
-
-USBD_CDC_ItfTypeDef USBD_CDC_Template_fops =
-{
- TEMPLATE_Init,
- TEMPLATE_DeInit,
- TEMPLATE_Control,
- TEMPLATE_Receive,
- TEMPLATE_TransmitCplt
-};
-
-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 operation: 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 operation: 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 operation: 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_Receive
- * Data received over USB OUT endpoint are sent over CDC interface
- * through this function.
- *
- * @note
- * This function will issue a NAK packet on any OUT packet received on
- * USB endpoint until 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 operation: USBD_OK if all operations are OK else USBD_FAIL
- */
-static int8_t TEMPLATE_Receive(uint8_t *Buf, uint32_t *Len)
-{
- UNUSED(Buf);
- UNUSED(Len);
-
- return (0);
-}
-
-/**
- * @brief TEMPLATE_TransmitCplt
- * Data transmited callback
- *
- * @note
- * This function is IN transfer complete callback used to inform user that
- * the submitted Data is successfully sent over USB.
- *
- * @param Buf: Buffer of data to be received
- * @param Len: Number of data received (in bytes)
- * @retval Result of the operation: USBD_OK if all operations are OK else USBD_FAIL
- */
-static int8_t TEMPLATE_TransmitCplt(uint8_t *Buf, uint32_t *Len, uint8_t epnum)
-{
- UNUSED(Buf);
- UNUSED(Len);
- UNUSED(epnum);
-
- return (0);
-}
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
-
diff --git a/lib/STM32_USB_Device_Library/Class/CDC_ECM/Inc/usbd_cdc_ecm.h b/lib/STM32_USB_Device_Library/Class/CDC_ECM/Inc/usbd_cdc_ecm.h
deleted file mode 100644
index f4bef2c71..000000000
--- a/lib/STM32_USB_Device_Library/Class/CDC_ECM/Inc/usbd_cdc_ecm.h
+++ /dev/null
@@ -1,255 +0,0 @@
-/**
- ******************************************************************************
- * @file usbd_cdc_ecm.h
- * @author MCD Application Team
- * @brief header file for the usbd_cdc_ecm.c file.
- ******************************************************************************
- * @attention
- *
- * © Copyright (c) 2019 STMicroelectronics.
- * All rights reserved.
- *
- * This software component is licensed by ST under Ultimate Liberty license
- * SLA0044, the "License"; You may not use this file except in compliance with
- * the License. You may obtain a copy of the License at:
- * www.st.com/SLA0044
- *
- ******************************************************************************
- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __USB_CDC_ECM_H
-#define __USB_CDC_ECM_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_ioreq.h"
-
-/** @addtogroup STM32_USB_DEVICE_LIBRARY
- * @{
- */
-
-/** @defgroup usbd_cdc_ecm
- * @brief This file is the Header file for usbd_cdc_ecm.c
- * @{
- */
-
-
-/** @defgroup usbd_cdc_ecm_Exported_Defines
- * @{
- */
-/* Comment this define in order to disable the CDC ECM Notification pipe */
-
-
-#define CDC_ECM_IN_EP 0x81U /* EP1 for data IN */
-#define CDC_ECM_OUT_EP 0x01U /* EP1 for data OUT */
-#define CDC_ECM_CMD_EP 0x82U /* EP2 for CDC ECM commands */
-
-#ifndef CDC_ECM_CMD_ITF_NBR
-#define CDC_ECM_CMD_ITF_NBR 0x00U /* Command Interface Number 0 */
-#endif /* CDC_ECM_CMD_ITF_NBR */
-
-#ifndef CDC_ECM_COM_ITF_NBR
-#define CDC_ECM_COM_ITF_NBR 0x01U /* Communication Interface Number 0 */
-#endif /* CDC_ECM_CMD_ITF_NBR */
-
-#ifndef CDC_ECM_HS_BINTERVAL
-#define CDC_ECM_HS_BINTERVAL 0x10U
-#endif /* CDC_ECM_HS_BINTERVAL */
-
-#ifndef CDC_ECM_FS_BINTERVAL
-#define CDC_ECM_FS_BINTERVAL 0x10U
-#endif /* CDC_ECM_FS_BINTERVAL */
-
-#ifndef USBD_SUPPORT_USER_STRING_DESC
-#define USBD_SUPPORT_USER_STRING_DESC 1U
-#endif /* USBD_SUPPORT_USER_STRING_DESC */
-
-/* CDC_ECM Endpoints parameters: you can fine tune these values depending on the needed baudrates and performance. */
-#define CDC_ECM_DATA_HS_MAX_PACKET_SIZE 512U /* Endpoint IN & OUT Packet size */
-#define CDC_ECM_DATA_FS_MAX_PACKET_SIZE 64U /* Endpoint IN & OUT Packet size */
-#define CDC_ECM_CMD_PACKET_SIZE 16U /* Control Endpoint Packet size */
-
-#define CDC_ECM_CONFIG_DESC_SIZ 79U
-
-#define CDC_ECM_DATA_HS_IN_PACKET_SIZE CDC_ECM_DATA_HS_MAX_PACKET_SIZE
-#define CDC_ECM_DATA_HS_OUT_PACKET_SIZE CDC_ECM_DATA_HS_MAX_PACKET_SIZE
-
-#define CDC_ECM_DATA_FS_IN_PACKET_SIZE CDC_ECM_DATA_FS_MAX_PACKET_SIZE
-#define CDC_ECM_DATA_FS_OUT_PACKET_SIZE CDC_ECM_DATA_FS_MAX_PACKET_SIZE
-
-/*---------------------------------------------------------------------*/
-/* CDC_ECM definitions */
-/*---------------------------------------------------------------------*/
-#define CDC_ECM_SEND_ENCAPSULATED_COMMAND 0x00U
-#define CDC_ECM_GET_ENCAPSULATED_RESPONSE 0x01U
-#define CDC_ECM_SET_ETH_MULTICAST_FILTERS 0x40U
-#define CDC_ECM_SET_ETH_PWRM_PATTERN_FILTER 0x41U
-#define CDC_ECM_GET_ETH_PWRM_PATTERN_FILTER 0x42U
-#define CDC_ECM_SET_ETH_PACKET_FILTER 0x43U
-#define CDC_ECM_GET_ETH_STATISTIC 0x44U
-
-#define CDC_ECM_NET_DISCONNECTED 0x00U
-#define CDC_ECM_NET_CONNECTED 0x01U
-
-
-/* Ethernet statistics definitions */
-#define CDC_ECM_XMIT_OK_VAL CDC_ECM_ETH_STATS_VAL_ENABLED
-#define CDC_ECM_XMIT_OK 0x01U
-#define CDC_ECM_RVC_OK 0x02U
-#define CDC_ECM_XMIT_ERROR 0x04U
-#define CDC_ECM_RCV_ERROR 0x08U
-#define CDC_ECM_RCV_NO_BUFFER 0x10U
-#define CDC_ECM_DIRECTED_BYTES_XMIT 0x20U
-#define CDC_ECM_DIRECTED_FRAMES_XMIT 0x40U
-#define CDC_ECM_MULTICAST_BYTES_XMIT 0x80U
-
-#define CDC_ECM_MULTICAST_FRAMES_XMIT 0x01U
-#define CDC_ECM_BROADCAST_BYTES_XMIT 0x02U
-#define CDC_ECM_BROADCAST_FRAMES_XMIT 0x04U
-#define CDC_ECM_DIRECTED_BYTES_RCV 0x08U
-#define CDC_ECM_DIRECTED_FRAMES_RCV 0x10U
-#define CDC_ECM_MULTICAST_BYTES_RCV 0x20U
-#define CDC_ECM_MULTICAST_FRAMES_RCV 0x40U
-#define CDC_ECM_BROADCAST_BYTES_RCV 0x80U
-
-#define CDC_ECM_BROADCAST_FRAMES_RCV 0x01U
-#define CDC_ECM_RCV_CRC_ERROR 0x02U
-#define CDC_ECM_TRANSMIT_QUEUE_LENGTH 0x04U
-#define CDC_ECM_RCV_ERROR_ALIGNMENT 0x08U
-#define CDC_ECM_XMIT_ONE_COLLISION 0x10U
-#define CDC_ECM_XMIT_MORE_COLLISIONS 0x20U
-#define CDC_ECM_XMIT_DEFERRED 0x40U
-#define CDC_ECM_XMIT_MAX_COLLISIONS 0x80U
-
-#define CDC_ECM_RCV_OVERRUN 0x40U
-#define CDC_ECM_XMIT_UNDERRUN 0x40U
-#define CDC_ECM_XMIT_HEARTBEAT_FAILURE 0x40U
-#define CDC_ECM_XMIT_TIMES_CRS_LOST 0x40U
-#define CDC_ECM_XMIT_LATE_COLLISIONS 0x40U
-
-#define CDC_ECM_ETH_STATS_RESERVED 0xE0U
-#define CDC_ECM_BMREQUEST_TYPE_ECM 0xA1U
-
-/* MAC String index */
-#define CDC_ECM_MAC_STRING_INDEX 6U
-
-/**
- * @}
- */
-
-
-/** @defgroup USBD_CORE_Exported_TypesDefinitions
- * @{
- */
-
-/**
- * @}
- */
-
-typedef struct
-{
- int8_t (* Init)(void);
- int8_t (* DeInit)(void);
- int8_t (* Control)(uint8_t cmd, uint8_t *pbuf, uint16_t length);
- int8_t (* Receive)(uint8_t *Buf, uint32_t *Len);
- int8_t (* TransmitCplt)(uint8_t *Buf, uint32_t *Len, uint8_t epnum);
- int8_t (* Process)(USBD_HandleTypeDef *pdev);
- const uint8_t *pStrDesc;
-} USBD_CDC_ECM_ItfTypeDef;
-
-typedef struct
-{
- uint8_t bmRequest;
- uint8_t bRequest;
- uint16_t wValue;
- uint16_t wIndex;
- uint16_t wLength;
- uint8_t data[8];
-} USBD_CDC_ECM_NotifTypeDef;
-
-typedef struct
-{
- uint32_t data[2000 / 4]; /* Force 32bits alignment */
- uint8_t CmdOpCode;
- uint8_t CmdLength;
- uint8_t Reserved1; /* Reserved Byte to force 4 bytes alignment of following fields */
- uint8_t Reserved2; /* Reserved Byte to force 4 bytes alignment of following fields */
- uint8_t *RxBuffer;
- uint8_t *TxBuffer;
- uint32_t RxLength;
- uint32_t TxLength;
-
- __IO uint32_t TxState;
- __IO uint32_t RxState;
-
- __IO uint32_t MaxPcktLen;
- __IO uint32_t LinkStatus;
- __IO uint32_t NotificationStatus;
- USBD_CDC_ECM_NotifTypeDef Req;
-} USBD_CDC_ECM_HandleTypeDef;
-
-typedef enum
-{
- NETWORK_CONNECTION = 0x00,
- RESPONSE_AVAILABLE = 0x01,
- CONNECTION_SPEED_CHANGE = 0x2A
-} USBD_CDC_ECM_NotifCodeTypeDef;
-
-/** @defgroup USBD_CORE_Exported_Macros
- * @{
- */
-
-/**
- * @}
- */
-
-/** @defgroup USBD_CORE_Exported_Variables
- * @{
- */
-
-extern USBD_ClassTypeDef USBD_CDC_ECM;
-#define USBD_CDC_ECM_CLASS &USBD_CDC_ECM
-/**
- * @}
- */
-
-/** @defgroup USB_CORE_Exported_Functions
- * @{
- */
-uint8_t USBD_CDC_ECM_RegisterInterface(USBD_HandleTypeDef *pdev,
- USBD_CDC_ECM_ItfTypeDef *fops);
-
-uint8_t USBD_CDC_ECM_SetTxBuffer(USBD_HandleTypeDef *pdev, uint8_t *pbuff,
- uint32_t length);
-
-uint8_t USBD_CDC_ECM_SetRxBuffer(USBD_HandleTypeDef *pdev, uint8_t *pbuff);
-
-uint8_t USBD_CDC_ECM_ReceivePacket(USBD_HandleTypeDef *pdev);
-
-uint8_t USBD_CDC_ECM_TransmitPacket(USBD_HandleTypeDef *pdev);
-
-uint8_t USBD_CDC_ECM_SendNotification(USBD_HandleTypeDef *pdev,
- USBD_CDC_ECM_NotifCodeTypeDef Notif,
- uint16_t bVal, uint8_t *pData);
-/**
- * @}
- */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __USB_CDC_ECM_H */
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/lib/STM32_USB_Device_Library/Class/CDC_ECM/Inc/usbd_cdc_ecm_if_template.h b/lib/STM32_USB_Device_Library/Class/CDC_ECM/Inc/usbd_cdc_ecm_if_template.h
deleted file mode 100644
index 7ce8714df..000000000
--- a/lib/STM32_USB_Device_Library/Class/CDC_ECM/Inc/usbd_cdc_ecm_if_template.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/**
- ******************************************************************************
- * @file Inc/usbd_cdc_ecm_if_template.h
- * @author MCD Application Team
- * @brief Header for usbd_cdc_ecm_if_template.c file.
- ******************************************************************************
- * @attention
- *
- * © Copyright (c) 2019 STMicroelectronics.
- * All rights reserved.
- *
- * This software component is licensed by ST under Ultimate Liberty license
- * SLA0044, the "License"; You may not use this file except in compliance with
- * the License. You may obtain a copy of the License at:
- * www.st.com/SLA0044
- *
- ******************************************************************************
- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __USBD_CDC_ECM_IF_H
-#define __USBD_CDC_ECM_IF_H
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_cdc_ecm.h"
-
-/* Exported types ------------------------------------------------------------*/
-/* Exported constants --------------------------------------------------------*/
-
-/* Ensure this MAC address value is same as MAC_ADDRx declared in STM32xxx_conf.h */
-#define CDC_ECM_MAC_STR_DESC (uint8_t *)"000202030000"
-#define CDC_ECM_MAC_ADDR0 0x00U /* 01 */
-#define CDC_ECM_MAC_ADDR1 0x02U /* 02 */
-#define CDC_ECM_MAC_ADDR2 0x02U /* 03 */
-#define CDC_ECM_MAC_ADDR3 0x03U /* 00 */
-#define CDC_ECM_MAC_ADDR4 0x00U /* 00 */
-#define CDC_ECM_MAC_ADDR5 0x00U /* 00 */
-
-/* Max Number of Trials waiting for Tx ready */
-#define CDC_ECM_MAX_TX_WAIT_TRIALS 1000000U
-
-#define CDC_ECM_ETH_STATS_BYTE0 0U
-/*(uint8_t)(CDC_ECM_XMIT_OK_VAL | CDC_ECM_RVC_OK_VAL | CDC_ECM_XMIT_ERROR_VAL | \
- CDC_ECM_RCV_ERROR_VAL | CDC_ECM_RCV_NO_BUFFER_VAL | CDC_ECM_DIRECTED_BYTES_XMIT_VAL | \
- CDC_ECM_DIRECTED_FRAMES_XMIT_VAL | CDC_ECM_MULTICAST_BYTES_XMIT_VAL) */
-
-#define CDC_ECM_ETH_STATS_BYTE1 0U
-/*(uint8_t)(CDC_ECM_MULTICAST_FRAMES_XMIT_VAL | CDC_ECM_BROADCAST_BYTES_XMIT_VAL | \
- CDC_ECM_BROADCAST_FRAMES_XMIT_VAL | CDC_ECM_DIRECTED_BYTES_RCV_VAL | \
- CDC_ECM_DIRECTED_FRAMES_RCV_VAL | CDC_ECM_MULTICAST_BYTES_RCV_VAL | \
- CDC_ECM_MULTICAST_FRAMES_RCV_VAL | CDC_ECM_BROADCAST_BYTES_RCV_VAL) */
-
-#define CDC_ECM_ETH_STATS_BYTE2 0U
-/*(uint8_t)(CDC_ECM_BROADCAST_FRAMES_RCV_VAL | CDC_ECM_RCV_CRC_ERROR_VAL | \
- CDC_ECM_TRANSMIT_QUEUE_LENGTH_VAL | CDC_ECM_RCV_ERROR_ALIGNMENT_VAL | \
- CDC_ECM_XMIT_ONE_COLLISION_VAL | CDC_ECM_XMIT_MORE_COLLISIONS_VAL | \
- CDC_ECM_XMIT_DEFERRED_VAL | CDC_ECM_XMIT_MAX_COLLISIONS_VAL) */
-
-#define CDC_ECM_ETH_STATS_BYTE3 0U
-/*(uint8_t)(CDC_ECM_RCV_OVERRUN_VAL | CDC_ECM_XMIT_UNDERRUN_VAL | CDC_ECM_XMIT_HEARTBEAT_FAILURE_VAL | \
- CDC_ECM_XMIT_TIMES_CRS_LOST_VAL | CDC_ECM_XMIT_LATE_COLLISIONS_VAL | CDC_ECM_ETH_STATS_RESERVED) */
-
-/* Ethernet Maximum Segment size, typically 1514 bytes */
-#define CDC_ECM_ETH_MAX_SEGSZE 1514U
-
-/* Number of Ethernet multicast filters */
-#define CDC_ECM_ETH_NBR_MACFILTERS 0U
-
-/* Number of wakeup power filters */
-#define CDC_ECM_ETH_NBR_PWRFILTERS 0U
-
-
-#define CDC_ECM_CONNECT_SPEED_UPSTREAM 0x004C4B40U /* 5Mbps */
-#define CDC_ECM_CONNECT_SPEED_DOWNSTREAM 0x004C4B40U /* 5Mbps */
-
-extern USBD_CDC_ECM_ItfTypeDef USBD_CDC_ECM_fops;
-
-/* Exported macro ------------------------------------------------------------*/
-/* Exported functions ------------------------------------------------------- */
-#endif /* __USBD_CDC_ECM_IF_H */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/lib/STM32_USB_Device_Library/Class/CDC_ECM/Src/usbd_cdc_ecm.c b/lib/STM32_USB_Device_Library/Class/CDC_ECM/Src/usbd_cdc_ecm.c
deleted file mode 100644
index edc5d220d..000000000
--- a/lib/STM32_USB_Device_Library/Class/CDC_ECM/Src/usbd_cdc_ecm.c
+++ /dev/null
@@ -1,1091 +0,0 @@
-/**
- ******************************************************************************
- * @file usbd_cdc_ecm.c
- * @author MCD Application Team
- * @brief This file provides the high layer firmware functions to manage the
- * following functionalities of the USB CDC_ECM Class:
- * - Initialization and Configuration of high and low layer
- * - Enumeration as CDC_ECM Device (and enumeration for each implemented memory interface)
- * - OUT/IN data transfer
- * - Command IN transfer (class requests management)
- * - Error management
- *
- ******************************************************************************
- * @attention
- *
- * © Copyright (c) 2019 STMicroelectronics.
- * All rights reserved.
- *
- * This software component is licensed by ST under Ultimate Liberty license
- * SLA0044, the "License"; You may not use this file except in compliance with
- * the License. You may obtain a copy of the License at:
- * www.st.com/SLA0044
- *
- ******************************************************************************
- */
-
-/* BSPDependencies
-- "stm32xxxxx_{eval}{discovery}{nucleo_144}.c"
-- "stm32xxxxx_{eval}{discovery}_io.c"
-EndBSPDependencies */
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_cdc_ecm.h"
-#include "usbd_ctlreq.h"
-
-#ifndef __USBD_CDC_ECM_IF_H
-#include "usbd_cdc_ecm_if_template.h"
-#endif
-
-
-/** @addtogroup STM32_USB_DEVICE_LIBRARY
- * @{
- */
-
-
-/** @defgroup USBD_CDC_ECM
- * @brief usbd core module
- * @{
- */
-
-/** @defgroup USBD_CDC_ECM_Private_TypesDefinitions
- * @{
- */
-
-/**
- * @}
- */
-
-
-/** @defgroup USBD_CDC_ECM_Private_Defines
- * @{
- */
-/**
- * @}
- */
-
-/** @defgroup USBD_CDC_ECM_Private_Macros
- * @{
- */
-
-/**
- * @}
- */
-
-
-/** @defgroup USBD_CDC_ECM_Private_FunctionPrototypes
- * @{
- */
-
-static uint8_t USBD_CDC_ECM_Init(USBD_HandleTypeDef *pdev, uint8_t cfgidx);
-static uint8_t USBD_CDC_ECM_DeInit(USBD_HandleTypeDef *pdev, uint8_t cfgidx);
-static uint8_t USBD_CDC_ECM_DataIn(USBD_HandleTypeDef *pdev, uint8_t epnum);
-static uint8_t USBD_CDC_ECM_DataOut(USBD_HandleTypeDef *pdev, uint8_t epnum);
-static uint8_t USBD_CDC_ECM_EP0_RxReady(USBD_HandleTypeDef *pdev);
-static uint8_t USBD_CDC_ECM_Setup(USBD_HandleTypeDef *pdev,
- USBD_SetupReqTypedef *req);
-
-static uint8_t *USBD_CDC_ECM_GetFSCfgDesc(uint16_t *length);
-static uint8_t *USBD_CDC_ECM_GetHSCfgDesc(uint16_t *length);
-static uint8_t *USBD_CDC_ECM_GetOtherSpeedCfgDesc(uint16_t *length);
-static uint8_t *USBD_CDC_ECM_GetOtherSpeedCfgDesc(uint16_t *length);
-
-#if (USBD_SUPPORT_USER_STRING_DESC == 1U)
-static uint8_t *USBD_CDC_ECM_USRStringDescriptor(USBD_HandleTypeDef *pdev,
- uint8_t index, uint16_t *length);
-#endif
-
-uint8_t *USBD_CDC_ECM_GetDeviceQualifierDescriptor(uint16_t *length);
-
-/* USB Standard Device Descriptor */
-__ALIGN_BEGIN static uint8_t USBD_CDC_ECM_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,
-};
-
-static uint32_t ConnSpeedTab[2] = {CDC_ECM_CONNECT_SPEED_UPSTREAM,
- CDC_ECM_CONNECT_SPEED_DOWNSTREAM};
-
-/**
- * @}
- */
-
-/** @defgroup USBD_CDC_ECM_Private_Variables
- * @{
- */
-
-
-/* CDC_ECM interface class callbacks structure */
-USBD_ClassTypeDef USBD_CDC_ECM =
-{
- USBD_CDC_ECM_Init,
- USBD_CDC_ECM_DeInit,
- USBD_CDC_ECM_Setup,
- NULL, /* EP0_TxSent, */
- USBD_CDC_ECM_EP0_RxReady,
- USBD_CDC_ECM_DataIn,
- USBD_CDC_ECM_DataOut,
- NULL,
- NULL,
- NULL,
- USBD_CDC_ECM_GetHSCfgDesc,
- USBD_CDC_ECM_GetFSCfgDesc,
- USBD_CDC_ECM_GetOtherSpeedCfgDesc,
- USBD_CDC_ECM_GetDeviceQualifierDescriptor,
-#if (USBD_SUPPORT_USER_STRING_DESC == 1U)
- USBD_CDC_ECM_USRStringDescriptor,
-#endif
-};
-
-/* USB CDC_ECM device Configuration Descriptor */
-__ALIGN_BEGIN static uint8_t USBD_CDC_ECM_CfgHSDesc[] __ALIGN_END =
-{
- /* Configuration Descriptor */
- 0x09, /* bLength: Configuration Descriptor size */
- USB_DESC_TYPE_CONFIGURATION, /* bDescriptorType: Configuration */
- LOBYTE(CDC_ECM_CONFIG_DESC_SIZ), /* wTotalLength:no of returned bytes */
- HIBYTE(CDC_ECM_CONFIG_DESC_SIZ),
- 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 */
-
- /*---------------------------------------------------------------------------*/
-
- /* IAD descriptor */
- 0x08, /* bLength */
- 0x0B, /* bDescriptorType */
- 0x00, /* bFirstInterface */
- 0x02, /* bInterfaceCount */
- 0x02, /* bFunctionClass (Wireless Controller) */
- 0x06, /* bFunctionSubClass */
- 0x00, /* bFunctionProtocol */
- 0x00, /* iFunction */
-
- /* Interface Descriptor */
- 0x09, /* bLength: Interface Descriptor size */
- USB_DESC_TYPE_INTERFACE, /* bDescriptorType: Interface descriptor type */
- CDC_ECM_CMD_ITF_NBR, /* bInterfaceNumber: Number of Interface */
- 0x00, /* bAlternateSetting: Alternate setting */
- 0x01, /* bNumEndpoints: One endpoint used */
- 0x02, /* bInterfaceClass: Communication Interface Class */
- 0x06, /* bInterfaceSubClass: Ethernet Control Model */
- 0x00, /* bInterfaceProtocol: No specific protocol required */
- 0x00, /* iInterface: */
-
- /* Header Functional Descriptor */
- 0x05, /* bLength: Endpoint Descriptor size */
- 0x24, /* bDescriptorType: CS_INTERFACE */
- 0x00, /* bDescriptorSubtype: Header functional descriptor */
- 0x10, /* bcd CDC_ECM: spec release number: 1.10 */
- 0x01,
-
- /* CDC_ECM Functional Descriptor */
- 0x0D, /* bFunctionLength */
- 0x24, /* bDescriptorType: CS_INTERFACE */
- 0x0F, /* Ethernet Networking functional descriptor subtype */
- CDC_ECM_MAC_STRING_INDEX, /* Device's MAC string index */
- CDC_ECM_ETH_STATS_BYTE3, /* Ethernet statistics byte 3 (bitmap) */
- CDC_ECM_ETH_STATS_BYTE2, /* Ethernet statistics byte 2 (bitmap) */
- CDC_ECM_ETH_STATS_BYTE1, /* Ethernet statistics byte 1 (bitmap) */
- CDC_ECM_ETH_STATS_BYTE0, /* Ethernet statistics byte 0 (bitmap) */
- LOBYTE(CDC_ECM_ETH_MAX_SEGSZE),
- HIBYTE(CDC_ECM_ETH_MAX_SEGSZE), /* wMaxSegmentSize: Ethernet Maximum Segment size, typically 1514 bytes */
- LOBYTE(CDC_ECM_ETH_NBR_MACFILTERS),
- HIBYTE(CDC_ECM_ETH_NBR_MACFILTERS), /* wNumberMCFilters: the number of multicast filters */
- CDC_ECM_ETH_NBR_PWRFILTERS, /* bNumberPowerFilters: the number of wakeup power filters */
-
- /* Union Functional Descriptor */
- 0x05, /* bFunctionLength */
- 0x24, /* bDescriptorType: CS_INTERFACE */
- 0x06, /* bDescriptorSubtype: Union functional descriptor */
- 0x00, /* bMasterInterface: Communication class interface */
- 0x01, /* bSlaveInterface0: Data Class Interface */
-
- /* Communication Endpoint Descriptor */
- 0x07, /* bLength: Endpoint Descriptor size */
- USB_DESC_TYPE_ENDPOINT, /* bDescriptorType: Endpoint */
- CDC_ECM_CMD_EP, /* bEndpointAddress */
- 0x03, /* bmAttributes: Interrupt */
- LOBYTE(CDC_ECM_CMD_PACKET_SIZE), /* wMaxPacketSize: */
- HIBYTE(CDC_ECM_CMD_PACKET_SIZE),
- CDC_ECM_HS_BINTERVAL, /* bInterval */
-
- /*----------------------*/
-
- /* Data class interface descriptor */
- 0x09, /* bLength: Endpoint Descriptor size */
- USB_DESC_TYPE_INTERFACE, /* bDescriptorType: */
- CDC_ECM_COM_ITF_NBR, /* 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_ECM_OUT_EP, /* bEndpointAddress */
- 0x02, /* bmAttributes: Bulk */
- LOBYTE(CDC_ECM_DATA_HS_MAX_PACKET_SIZE), /* wMaxPacketSize: */
- HIBYTE(CDC_ECM_DATA_HS_MAX_PACKET_SIZE),
- 0xFF, /* bInterval: ignore for Bulk transfer */
-
- /* Endpoint IN Descriptor */
- 0x07, /* bLength: Endpoint Descriptor size */
- USB_DESC_TYPE_ENDPOINT, /* bDescriptorType: Endpoint */
- CDC_ECM_IN_EP, /* bEndpointAddress */
- 0x02, /* bmAttributes: Bulk */
- LOBYTE(CDC_ECM_DATA_HS_MAX_PACKET_SIZE), /* wMaxPacketSize: */
- HIBYTE(CDC_ECM_DATA_HS_MAX_PACKET_SIZE),
- 0xFF /* bInterval: ignore for Bulk transfer */
-};
-
-
-/* USB CDC_ECM device Configuration Descriptor */
-__ALIGN_BEGIN static uint8_t USBD_CDC_ECM_CfgFSDesc[] __ALIGN_END =
-{
- /* Configuration Descriptor */
- 0x09, /* bLength: Configuration Descriptor size */
- USB_DESC_TYPE_CONFIGURATION, /* bDescriptorType: Configuration */
- LOBYTE(CDC_ECM_CONFIG_DESC_SIZ), /* wTotalLength: Total size of the Config descriptor */
- HIBYTE(CDC_ECM_CONFIG_DESC_SIZ),
- 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 */
-
- /*---------------------------------------------------------------------------*/
- /* IAD descriptor */
- 0x08, /* bLength */
- 0x0B, /* bDescriptorType */
- 0x00, /* bFirstInterface */
- 0x02, /* bInterfaceCount */
- 0x02, /* bFunctionClass (Wireless Controller) */
- 0x06, /* bFunctionSubClass */
- 0x00, /* bFunctionProtocol */
- 0x00, /* iFunction */
-
- /* Interface Descriptor */
- 0x09, /* bLength: Interface Descriptor size */
- USB_DESC_TYPE_INTERFACE, /* bDescriptorType: Interface descriptor type */
- CDC_ECM_CMD_ITF_NBR, /* bInterfaceNumber: Number of Interface */
- 0x00, /* bAlternateSetting: Alternate setting */
- 0x01, /* bNumEndpoints: One endpoint used */
- 0x02, /* bInterfaceClass: Communication Interface Class */
- 0x06, /* bInterfaceSubClass: Ethernet Control Model */
- 0x00, /* bInterfaceProtocol: No specific protocol required */
- 0x00, /* iInterface: */
-
- /* Header Functional Descriptor */
- 0x05, /* bLength: Endpoint Descriptor size */
- 0x24, /* bDescriptorType: CS_INTERFACE */
- 0x00, /* bDescriptorSubtype: Header functional descriptor */
- 0x10, /* bcd CDC_ECM : spec release number: 1.20 */
- 0x01,
-
- /* Union Functional Descriptor */
- 0x05, /* bFunctionLength */
- 0x24, /* bDescriptorType: CS_INTERFACE */
- 0x06, /* bDescriptorSubtype: Union functional descriptor */
- CDC_ECM_CMD_ITF_NBR, /* bMasterInterface: Communication class interface */
- CDC_ECM_COM_ITF_NBR, /* bSlaveInterface0: Data Class Interface */
-
- /* CDC_ECM Functional Descriptor */
- 0x0D, /* bFunctionLength */
- 0x24, /* bDescriptorType: CS_INTERFACE */
- 0x0F, /* Ethernet Networking functional descriptor subtype */
- CDC_ECM_MAC_STRING_INDEX, /* Device's MAC string index */
- CDC_ECM_ETH_STATS_BYTE3, /* Ethernet statistics byte 3 (bitmap) */
- CDC_ECM_ETH_STATS_BYTE2, /* Ethernet statistics byte 2 (bitmap) */
- CDC_ECM_ETH_STATS_BYTE1, /* Ethernet statistics byte 1 (bitmap) */
- CDC_ECM_ETH_STATS_BYTE0, /* Ethernet statistics byte 0 (bitmap) */
- LOBYTE(CDC_ECM_ETH_MAX_SEGSZE),
- HIBYTE(CDC_ECM_ETH_MAX_SEGSZE), /* wMaxSegmentSize: Ethernet Maximum Segment size, typically 1514 bytes */
- LOBYTE(CDC_ECM_ETH_NBR_MACFILTERS),
- HIBYTE(CDC_ECM_ETH_NBR_MACFILTERS), /* wNumberMCFilters: the number of multicast filters */
- CDC_ECM_ETH_NBR_PWRFILTERS, /* bNumberPowerFilters: the number of wakeup power filters */
-
-
- /* Communication Endpoint Descriptor */
- 0x07, /* bLength: Endpoint Descriptor size */
- USB_DESC_TYPE_ENDPOINT, /* bDescriptorType: Endpoint */
- CDC_ECM_CMD_EP, /* bEndpointAddress */
- 0x03, /* bmAttributes: Interrupt */
- LOBYTE(CDC_ECM_CMD_PACKET_SIZE), /* wMaxPacketSize: */
- HIBYTE(CDC_ECM_CMD_PACKET_SIZE),
- CDC_ECM_FS_BINTERVAL, /* bInterval */
-
- /*----------------------*/
-
- /* Data class interface descriptor */
- 0x09, /* bLength: Endpoint Descriptor size */
- USB_DESC_TYPE_INTERFACE, /* bDescriptorType: */
- CDC_ECM_COM_ITF_NBR, /* bInterfaceNumber: Number of Interface */
- 0x00, /* bAlternateSetting: Alternate setting */
- 0x02, /* bNumEndpoints: Two endpoints used */
- 0x0A, /* bInterfaceClass: CDC_ECM */
- 0x00, /* bInterfaceSubClass: */
- 0x00, /* bInterfaceProtocol: */
- 0x00, /* iInterface: */
-
- /* Endpoint OUT Descriptor */
- 0x07, /* bLength: Endpoint Descriptor size */
- USB_DESC_TYPE_ENDPOINT, /* bDescriptorType: Endpoint */
- CDC_ECM_OUT_EP, /* bEndpointAddress */
- 0x02, /* bmAttributes: Bulk */
- LOBYTE(CDC_ECM_DATA_FS_MAX_PACKET_SIZE), /* wMaxPacketSize: */
- HIBYTE(CDC_ECM_DATA_FS_MAX_PACKET_SIZE),
- 0xFF, /* bInterval: ignore for Bulk transfer */
-
- /* Endpoint IN Descriptor */
- 0x07, /* bLength: Endpoint Descriptor size */
- USB_DESC_TYPE_ENDPOINT, /* bDescriptorType: Endpoint */
- CDC_ECM_IN_EP, /* bEndpointAddress */
- 0x02, /* bmAttributes: Bulk */
- LOBYTE(CDC_ECM_DATA_FS_MAX_PACKET_SIZE), /* wMaxPacketSize: */
- HIBYTE(CDC_ECM_DATA_FS_MAX_PACKET_SIZE),
- 0xFF /* bInterval: ignore for Bulk transfer */
-} ;
-
-__ALIGN_BEGIN static uint8_t USBD_CDC_ECM_OtherSpeedCfgDesc[] __ALIGN_END =
-{
- /* Configuration Descriptor */
- 0x09, /* bLength: Configuration Descriptor size */
- USB_DESC_TYPE_CONFIGURATION, /* bDescriptorType: Configuration */
- LOBYTE(CDC_ECM_CONFIG_DESC_SIZ), /* wTotalLength:no of returned bytes */
- HIBYTE(CDC_ECM_CONFIG_DESC_SIZ),
- 0x02, /* bNumInterfaces: 2 interface */
- 0x01, /* bConfigurationValue: Configuration value */
- 0x04, /* iConfiguration: Index of string descriptor describing the configuration */
- 0xC0, /* bmAttributes: self powered */
- 0x32, /* MaxPower 0 mA */
-
- /*--------------------------------------- ------------------------------------*/
- /* IAD descriptor */
- 0x08, /* bLength */
- 0x0B, /* bDescriptorType */
- 0x00, /* bFirstInterface */
- 0x02, /* bInterfaceCount */
- 0x02, /* bFunctionClass (Wireless Controller) */
- 0x06, /* bFunctionSubClass */
- 0x00, /* bFunctionProtocol */
- 0x00, /* iFunction */
-
- /* Interface Descriptor */
- 0x09, /* bLength: Interface Descriptor size */
- USB_DESC_TYPE_INTERFACE, /* bDescriptorType: Interface descriptor type */
- 0x00, /* bInterfaceNumber: Number of Interface */
- 0x00, /* bAlternateSetting: Alternate setting */
- 0x01, /* bNumEndpoints: One endpoint used */
- 0x02, /* bInterfaceClass: Communication Interface Class */
- 0x06, /* bInterfaceSubClass: Ethernet Control Model */
- 0x00, /* bInterfaceProtocol: No specific protocol required */
- 0x00, /* iInterface: */
-
- /* Header Functional Descriptor */
- 0x05, /* bLength: Endpoint Descriptor size */
- 0x24, /* bDescriptorType: CS_INTERFACE */
- 0x00, /* bDescriptorSubtype: Header functional descriptor */
- 0x10, /* bcd CDC_ECM : spec release number: 1.20 */
- 0x01,
-
- /* CDC_ECM Functional Descriptor */
- 0x0D, /* bFunctionLength */
- 0x24, /* bDescriptorType: CS_INTERFACE */
- 0x0F, /* Ethernet Networking functional descriptor subtype */
- CDC_ECM_MAC_STRING_INDEX, /* Device's MAC string index */
- CDC_ECM_ETH_STATS_BYTE3, /* Ethernet statistics byte 3 (bitmap) */
- CDC_ECM_ETH_STATS_BYTE2, /* Ethernet statistics byte 2 (bitmap) */
- CDC_ECM_ETH_STATS_BYTE1, /* Ethernet statistics byte 1 (bitmap) */
- CDC_ECM_ETH_STATS_BYTE0, /* Ethernet statistics byte 0 (bitmap) */
- LOBYTE(CDC_ECM_ETH_MAX_SEGSZE),
- HIBYTE(CDC_ECM_ETH_MAX_SEGSZE), /* wMaxSegmentSize: Ethernet Maximum Segment size, typically 1514 bytes */
- LOBYTE(CDC_ECM_ETH_NBR_MACFILTERS),
- HIBYTE(CDC_ECM_ETH_NBR_MACFILTERS), /* wNumberMCFilters: the number of multicast filters */
- CDC_ECM_ETH_NBR_PWRFILTERS, /* bNumberPowerFilters: the number of wakeup power filters */
-
- /* Union Functional Descriptor */
- 0x05, /* bFunctionLength */
- 0x24, /* bDescriptorType: CS_INTERFACE */
- 0x06, /* bDescriptorSubtype: Union functional descriptor */
- 0x00, /* bMasterInterface: Communication class interface */
- 0x01, /* bSlaveInterface0: Data Class Interface */
-
- /* Communication Endpoint Descriptor */
- 0x07, /* bLength: Endpoint Descriptor size */
- USB_DESC_TYPE_ENDPOINT, /* bDescriptorType: Endpoint */
- CDC_ECM_CMD_EP, /* bEndpointAddress */
- 0x03, /* bmAttributes: Interrupt */
- LOBYTE(CDC_ECM_CMD_PACKET_SIZE), /* wMaxPacketSize: */
- HIBYTE(CDC_ECM_CMD_PACKET_SIZE),
- CDC_ECM_FS_BINTERVAL, /* 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_ECM_OUT_EP, /* bEndpointAddress */
- 0x02, /* bmAttributes: Bulk */
- 0x40, /* wMaxPacketSize: */
- 0x00,
- 0xFF, /* bInterval: ignore for Bulk transfer */
-
- /* Endpoint IN Descriptor */
- 0x07, /* bLength: Endpoint Descriptor size */
- USB_DESC_TYPE_ENDPOINT, /* bDescriptorType: Endpoint */
- CDC_ECM_IN_EP, /* bEndpointAddress */
- 0x02, /* bmAttributes: Bulk */
- 0x40, /* wMaxPacketSize: */
- 0x00,
- 0xFF /* bInterval: ignore for Bulk transfer */
-};
-
-/**
- * @}
- */
-
-/** @defgroup USBD_CDC_ECM_Private_Functions
- * @{
- */
-
-/**
- * @brief USBD_CDC_ECM_Init
- * Initialize the CDC_ECM interface
- * @param pdev: device instance
- * @param cfgidx: Configuration index
- * @retval status
- */
-static uint8_t USBD_CDC_ECM_Init(USBD_HandleTypeDef *pdev, uint8_t cfgidx)
-{
- UNUSED(cfgidx);
-
- USBD_CDC_ECM_HandleTypeDef *hcdc;
-
- hcdc = USBD_malloc(sizeof(USBD_CDC_ECM_HandleTypeDef));
-
- if (hcdc == NULL)
- {
- pdev->pClassData = NULL;
- return (uint8_t)USBD_EMEM;
- }
-
- pdev->pClassData = (void *)hcdc;
-
- if (pdev->dev_speed == USBD_SPEED_HIGH)
- {
- /* Open EP IN */
- (void)USBD_LL_OpenEP(pdev, CDC_ECM_IN_EP, USBD_EP_TYPE_BULK,
- CDC_ECM_DATA_HS_IN_PACKET_SIZE);
-
- pdev->ep_in[CDC_ECM_IN_EP & 0xFU].is_used = 1U;
-
- /* Open EP OUT */
- (void)USBD_LL_OpenEP(pdev, CDC_ECM_OUT_EP, USBD_EP_TYPE_BULK,
- CDC_ECM_DATA_HS_OUT_PACKET_SIZE);
-
- pdev->ep_out[CDC_ECM_OUT_EP & 0xFU].is_used = 1U;
-
- /* Set bInterval for CDC ECM CMD Endpoint */
- pdev->ep_in[CDC_ECM_CMD_EP & 0xFU].bInterval = CDC_ECM_HS_BINTERVAL;
- }
- else
- {
- /* Open EP IN */
- (void)USBD_LL_OpenEP(pdev, CDC_ECM_IN_EP, USBD_EP_TYPE_BULK,
- CDC_ECM_DATA_FS_IN_PACKET_SIZE);
-
- pdev->ep_in[CDC_ECM_IN_EP & 0xFU].is_used = 1U;
-
- /* Open EP OUT */
- (void)USBD_LL_OpenEP(pdev, CDC_ECM_OUT_EP, USBD_EP_TYPE_BULK,
- CDC_ECM_DATA_FS_OUT_PACKET_SIZE);
-
- pdev->ep_out[CDC_ECM_OUT_EP & 0xFU].is_used = 1U;
-
- /* Set bInterval for CDC ECM CMD Endpoint */
- pdev->ep_in[CDC_ECM_CMD_EP & 0xFU].bInterval = CDC_ECM_FS_BINTERVAL;
- }
-
- /* Open Command IN EP */
- (void)USBD_LL_OpenEP(pdev, CDC_ECM_CMD_EP, USBD_EP_TYPE_INTR, CDC_ECM_CMD_PACKET_SIZE);
- pdev->ep_in[CDC_ECM_CMD_EP & 0xFU].is_used = 1U;
-
- /* Init physical Interface components */
- ((USBD_CDC_ECM_ItfTypeDef *)pdev->pUserData)->Init();
-
- /* Init Xfer states */
- hcdc->TxState = 0U;
- hcdc->RxState = 0U;
- hcdc->RxLength = 0U;
- hcdc->TxLength = 0U;
- hcdc->LinkStatus = 0U;
- hcdc->NotificationStatus = 0U;
- hcdc->MaxPcktLen = (pdev->dev_speed == USBD_SPEED_HIGH) ? CDC_ECM_DATA_HS_MAX_PACKET_SIZE : CDC_ECM_DATA_FS_MAX_PACKET_SIZE;
-
- /* Prepare Out endpoint to receive next packet */
- (void)USBD_LL_PrepareReceive(pdev, CDC_ECM_OUT_EP, hcdc->RxBuffer, hcdc->MaxPcktLen);
-
- return (uint8_t)USBD_OK;
-}
-
-/**
- * @brief USBD_CDC_ECM_DeInit
- * DeInitialize the CDC_ECM layer
- * @param pdev: device instance
- * @param cfgidx: Configuration index
- * @retval status
- */
-static uint8_t USBD_CDC_ECM_DeInit(USBD_HandleTypeDef *pdev, uint8_t cfgidx)
-{
- UNUSED(cfgidx);
-
- /* Close EP IN */
- (void)USBD_LL_CloseEP(pdev, CDC_ECM_IN_EP);
- pdev->ep_in[CDC_ECM_IN_EP & 0xFU].is_used = 0U;
-
- /* Close EP OUT */
- (void)USBD_LL_CloseEP(pdev, CDC_ECM_OUT_EP);
- pdev->ep_out[CDC_ECM_OUT_EP & 0xFU].is_used = 0U;
-
- /* Close Command IN EP */
- (void)USBD_LL_CloseEP(pdev, CDC_ECM_CMD_EP);
- pdev->ep_in[CDC_ECM_CMD_EP & 0xFU].is_used = 0U;
- pdev->ep_in[CDC_ECM_CMD_EP & 0xFU].bInterval = 0U;
-
- /* DeInit physical Interface components */
- if (pdev->pClassData != NULL)
- {
- ((USBD_CDC_ECM_ItfTypeDef *)pdev->pUserData)->DeInit();
- USBD_free(pdev->pClassData);
- pdev->pClassData = NULL;
- }
-
- return (uint8_t)USBD_OK;
-}
-
-/**
- * @brief USBD_CDC_ECM_Setup
- * Handle the CDC_ECM specific requests
- * @param pdev: instance
- * @param req: usb requests
- * @retval status
- */
-static uint8_t USBD_CDC_ECM_Setup(USBD_HandleTypeDef *pdev,
- USBD_SetupReqTypedef *req)
-{
- USBD_CDC_ECM_HandleTypeDef *hcdc = (USBD_CDC_ECM_HandleTypeDef *) pdev->pClassData;
- USBD_CDC_ECM_ItfTypeDef *EcmInterface = (USBD_CDC_ECM_ItfTypeDef *)pdev->pUserData;
- USBD_StatusTypeDef ret = USBD_OK;
- uint8_t ifalt = 0U;
- uint16_t status_info = 0U;
-
- switch (req->bmRequest & USB_REQ_TYPE_MASK)
- {
- case USB_REQ_TYPE_CLASS :
- if (req->wLength != 0U)
- {
- if ((req->bmRequest & 0x80U) != 0U)
- {
- EcmInterface->Control(req->bRequest,
- (uint8_t *)hcdc->data, req->wLength);
-
- (void)USBD_CtlSendData(pdev, (uint8_t *)hcdc->data, req->wLength);
- }
- else
- {
- hcdc->CmdOpCode = req->bRequest;
- hcdc->CmdLength = (uint8_t)req->wLength;
-
- (void)USBD_CtlPrepareRx(pdev, (uint8_t *)hcdc->data, req->wLength);
- }
- }
- else
- {
- EcmInterface->Control(req->bRequest, (uint8_t *)req, 0U);
- }
- 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_INTERFACE:
- if (pdev->dev_state == USBD_STATE_CONFIGURED)
- {
- (void)USBD_CtlSendData(pdev, &ifalt, 1U);
- }
- else
- {
- USBD_CtlError(pdev, req);
- ret = USBD_FAIL;
- }
- break;
-
- case USB_REQ_SET_INTERFACE:
- if (pdev->dev_state != USBD_STATE_CONFIGURED)
- {
- 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;
-}
-
-/**
- * @brief USBD_CDC_ECM_DataIn
- * Data sent on non-control IN endpoint
- * @param pdev: device instance
- * @param epnum: endpoint number
- * @retval status
- */
-static uint8_t USBD_CDC_ECM_DataIn(USBD_HandleTypeDef *pdev, uint8_t epnum)
-{
- USBD_CDC_ECM_HandleTypeDef *hcdc = (USBD_CDC_ECM_HandleTypeDef *)pdev->pClassData;
- PCD_HandleTypeDef *hpcd = pdev->pData;
-
- if (pdev->pClassData == NULL)
- {
- return (uint8_t)USBD_FAIL;
- }
-
- if (epnum == (CDC_ECM_IN_EP & 0x7FU))
- {
- if ((pdev->ep_in[epnum].total_length > 0U) &&
- ((pdev->ep_in[epnum].total_length % hpcd->IN_ep[epnum].maxpacket) == 0U))
- {
- /* Update the packet total length */
- pdev->ep_in[epnum].total_length = 0U;
-
- /* Send ZLP */
- (void)USBD_LL_Transmit(pdev, epnum, NULL, 0U);
- }
- else
- {
- hcdc->TxState = 0U;
- ((USBD_CDC_ECM_ItfTypeDef *)pdev->pUserData)->TransmitCplt(hcdc->TxBuffer, &hcdc->TxLength, epnum);
- }
- }
- else if (epnum == (CDC_ECM_CMD_EP & 0x7FU))
- {
- if (hcdc->NotificationStatus != 0U)
- {
- (void)USBD_CDC_ECM_SendNotification(pdev, CONNECTION_SPEED_CHANGE,
- 0U, (uint8_t *)ConnSpeedTab);
-
- hcdc->NotificationStatus = 0U;
- }
- }
- else
- {
- return (uint8_t)USBD_FAIL;
- }
-
- return (uint8_t)USBD_OK;
-}
-
-/**
- * @brief USBD_CDC_ECM_DataOut
- * Data received on non-control Out endpoint
- * @param pdev: device instance
- * @param epnum: endpoint number
- * @retval status
- */
-static uint8_t USBD_CDC_ECM_DataOut(USBD_HandleTypeDef *pdev, uint8_t epnum)
-{
- USBD_CDC_ECM_HandleTypeDef *hcdc = (USBD_CDC_ECM_HandleTypeDef *)pdev->pClassData;
- uint32_t CurrPcktLen;
-
- if (pdev->pClassData == NULL)
- {
- return (uint8_t)USBD_FAIL;
- }
-
- if (epnum == CDC_ECM_OUT_EP)
- {
- /* Get the received data length */
- CurrPcktLen = USBD_LL_GetRxDataSize(pdev, epnum);
-
- /* Increment the frame length */
- hcdc->RxLength += CurrPcktLen;
-
- /* If the buffer size is less than max packet size: it is the last packet in current frame */
- if ((CurrPcktLen < hcdc->MaxPcktLen) || (hcdc->RxLength >= CDC_ECM_ETH_MAX_SEGSZE))
- {
- /* USB data will be immediately processed, this allow next USB traffic being
- NACKed till the end of the application Xfer */
-
- /* Process data by application (ie. copy to app buffer or notify user)
- hcdc->RxLength must be reset to zero at the end of the call of this function */
- ((USBD_CDC_ECM_ItfTypeDef *)pdev->pUserData)->Receive(hcdc->RxBuffer, &hcdc->RxLength);
- }
- else
- {
- /* Prepare Out endpoint to receive next packet in current/new frame */
- (void)USBD_LL_PrepareReceive(pdev, CDC_ECM_OUT_EP,
- (uint8_t *)(hcdc->RxBuffer + hcdc->RxLength),
- hcdc->MaxPcktLen);
- }
- }
- else
- {
- return (uint8_t)USBD_FAIL;
- }
-
- return (uint8_t)USBD_OK;
-}
-
-/**
- * @brief USBD_CDC_ECM_EP0_RxReady
- * Handle EP0 Rx Ready event
- * @param pdev: device instance
- * @retval status
- */
-static uint8_t USBD_CDC_ECM_EP0_RxReady(USBD_HandleTypeDef *pdev)
-{
- USBD_CDC_ECM_HandleTypeDef *hcdc = (USBD_CDC_ECM_HandleTypeDef *)pdev->pClassData;
-
- if ((pdev->pUserData != NULL) && (hcdc->CmdOpCode != 0xFFU))
- {
- ((USBD_CDC_ECM_ItfTypeDef *)pdev->pUserData)->Control(hcdc->CmdOpCode,
- (uint8_t *)hcdc->data,
- (uint16_t)hcdc->CmdLength);
- hcdc->CmdOpCode = 0xFFU;
-
- }
- return (uint8_t)USBD_OK;
-}
-
-/**
- * @brief USBD_CDC_ECM_GetFSCfgDesc
- * Return configuration descriptor
- * @param speed : current device speed
- * @param length : pointer data length
- * @retval pointer to descriptor buffer
- */
-static uint8_t *USBD_CDC_ECM_GetFSCfgDesc(uint16_t *length)
-{
- *length = (uint16_t)sizeof(USBD_CDC_ECM_CfgFSDesc);
-
- return USBD_CDC_ECM_CfgFSDesc;
-}
-
-/**
- * @brief USBD_CDC_ECM_GetHSCfgDesc
- * Return configuration descriptor
- * @param speed : current device speed
- * @param length : pointer data length
- * @retval pointer to descriptor buffer
- */
-static uint8_t *USBD_CDC_ECM_GetHSCfgDesc(uint16_t *length)
-{
- *length = (uint16_t) sizeof(USBD_CDC_ECM_CfgHSDesc);
-
- return USBD_CDC_ECM_CfgHSDesc;
-}
-
-/**
- * @brief USBD_CDC_ECM_GetCfgDesc
- * Return configuration descriptor
- * @param speed : current device speed
- * @param length : pointer data length
- * @retval pointer to descriptor buffer
- */
-static uint8_t *USBD_CDC_ECM_GetOtherSpeedCfgDesc(uint16_t *length)
-{
- *length = (uint16_t)sizeof(USBD_CDC_ECM_OtherSpeedCfgDesc);
-
- return USBD_CDC_ECM_OtherSpeedCfgDesc;
-}
-
-/**
- * @brief DeviceQualifierDescriptor
- * return Device Qualifier descriptor
- * @param length : pointer data length
- * @retval pointer to descriptor buffer
- */
-uint8_t *USBD_CDC_ECM_GetDeviceQualifierDescriptor(uint16_t *length)
-{
- *length = (uint16_t)sizeof(USBD_CDC_ECM_DeviceQualifierDesc);
-
- return USBD_CDC_ECM_DeviceQualifierDesc;
-}
-
-/**
- * @brief USBD_CDC_ECM_RegisterInterface
- * @param pdev: device instance
- * @param fops: CD Interface callback
- * @retval status
- */
-uint8_t USBD_CDC_ECM_RegisterInterface(USBD_HandleTypeDef *pdev,
- USBD_CDC_ECM_ItfTypeDef *fops)
-{
- if (fops == NULL)
- {
- return (uint8_t)USBD_FAIL;
- }
-
- pdev->pUserData = fops;
-
- return (uint8_t)USBD_OK;
-}
-
-
-/**
- * @brief USBD_CDC_ECM_USRStringDescriptor
- * Manages the transfer of user string descriptors.
- * @param speed : current device speed
- * @param index: descriptor 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_DESC == 1U)
-static uint8_t *USBD_CDC_ECM_USRStringDescriptor(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 == CDC_ECM_MAC_STRING_INDEX)
- {
- USBD_GetString((uint8_t *)((USBD_CDC_ECM_ItfTypeDef *)pdev->pUserData)->pStrDesc, USBD_StrDesc, length);
- return USBD_StrDesc;
- }
- /* Not supported Interface Descriptor index */
- else
- {
- return NULL;
- }
-}
-#endif
-
-/**
- * @brief USBD_CDC_ECM_SetTxBuffer
- * @param pdev: device instance
- * @param pbuff: Tx Buffer
- * @retval status
- */
-uint8_t USBD_CDC_ECM_SetTxBuffer(USBD_HandleTypeDef *pdev, uint8_t *pbuff, uint32_t length)
-{
- USBD_CDC_ECM_HandleTypeDef *hcdc = (USBD_CDC_ECM_HandleTypeDef *)pdev->pClassData;
-
- hcdc->TxBuffer = pbuff;
- hcdc->TxLength = length;
-
- return (uint8_t)USBD_OK;
-}
-
-
-/**
- * @brief USBD_CDC_ECM_SetRxBuffer
- * @param pdev: device instance
- * @param pbuff: Rx Buffer
- * @retval status
- */
-uint8_t USBD_CDC_ECM_SetRxBuffer(USBD_HandleTypeDef *pdev, uint8_t *pbuff)
-{
- USBD_CDC_ECM_HandleTypeDef *hcdc = (USBD_CDC_ECM_HandleTypeDef *)pdev->pClassData;
-
- hcdc->RxBuffer = pbuff;
-
- return (uint8_t)USBD_OK;
-}
-
-/**
- * @brief USBD_CDC_ECM_TransmitPacket
- * Transmit packet on IN endpoint
- * @param pdev: device instance
- * @retval status
- */
-uint8_t USBD_CDC_ECM_TransmitPacket(USBD_HandleTypeDef *pdev)
-{
- USBD_CDC_ECM_HandleTypeDef *hcdc = (USBD_CDC_ECM_HandleTypeDef *)pdev->pClassData;
- USBD_StatusTypeDef ret = USBD_BUSY;
-
- if (pdev->pClassData == NULL)
- {
- return (uint8_t)USBD_FAIL;
- }
-
- if (hcdc->TxState == 0U)
- {
- /* Tx Transfer in progress */
- hcdc->TxState = 1U;
-
- /* Update the packet total length */
- pdev->ep_in[CDC_ECM_IN_EP & 0xFU].total_length = hcdc->TxLength;
-
- /* Transmit next packet */
- (void)USBD_LL_Transmit(pdev, CDC_ECM_IN_EP, hcdc->TxBuffer, hcdc->TxLength);
-
- ret = USBD_OK;
- }
-
- return (uint8_t)ret;
-}
-
-
-/**
- * @brief USBD_CDC_ECM_ReceivePacket
- * prepare OUT Endpoint for reception
- * @param pdev: device instance
- * @retval status
- */
-uint8_t USBD_CDC_ECM_ReceivePacket(USBD_HandleTypeDef *pdev)
-{
- USBD_CDC_ECM_HandleTypeDef *hcdc = (USBD_CDC_ECM_HandleTypeDef *)pdev->pClassData;
-
- if (pdev->pClassData == NULL)
- {
- return (uint8_t)USBD_FAIL;
- }
-
- /* Prepare Out endpoint to receive next packet */
- (void)USBD_LL_PrepareReceive(pdev, CDC_ECM_OUT_EP,hcdc->RxBuffer, hcdc->MaxPcktLen);
-
- return (uint8_t)USBD_OK;
-}
-
-/**
- * @brief USBD_CDC_ECM_SendNotification
- * Transmit Notification packet on CMD IN interrupt endpoint
- * @param pdev: device instance
- * Notif: value of the notification type (from CDC_ECM_Notification_TypeDef enumeration list)
- * bVal: value of the notification switch (ie. 0x00 or 0x01 for Network Connection notification)
- * pData: pointer to data buffer (ie. upstream and downstream connection speed values)
- * @retval status
- */
-uint8_t USBD_CDC_ECM_SendNotification(USBD_HandleTypeDef *pdev,
- USBD_CDC_ECM_NotifCodeTypeDef Notif,
- uint16_t bVal, uint8_t *pData)
-{
- uint32_t Idx;
- uint32_t ReqSize = 0U;
- USBD_CDC_ECM_HandleTypeDef *hcdc = (USBD_CDC_ECM_HandleTypeDef *)pdev->pClassData;
- USBD_StatusTypeDef ret = USBD_OK;
-
- /* Initialize the request fields */
- (hcdc->Req).bmRequest = CDC_ECM_BMREQUEST_TYPE_ECM;
- (hcdc->Req).bRequest = (uint8_t)Notif;
-
- switch (Notif)
- {
- case NETWORK_CONNECTION:
- (hcdc->Req).wValue = bVal;
- (hcdc->Req).wIndex = CDC_ECM_CMD_ITF_NBR;
- (hcdc->Req).wLength = 0U;
-
- for (Idx = 0U; Idx < 8U; Idx++)
- {
- (hcdc->Req).data[Idx] = 0U;
- }
- ReqSize = 8U;
- break;
-
- case RESPONSE_AVAILABLE:
- (hcdc->Req).wValue = 0U;
- (hcdc->Req).wIndex = CDC_ECM_CMD_ITF_NBR;
- (hcdc->Req).wLength = 0U;
- for (Idx = 0U; Idx < 8U; Idx++)
- {
- (hcdc->Req).data[Idx] = 0U;
- }
- ReqSize = 8U;
- break;
-
- case CONNECTION_SPEED_CHANGE:
- (hcdc->Req).wValue = 0U;
- (hcdc->Req).wIndex = CDC_ECM_CMD_ITF_NBR;
- (hcdc->Req).wLength = 0x0008U;
- ReqSize = 16U;
-
- /* Check pointer to data buffer */
- if (pData != NULL)
- {
- for (Idx = 0U; Idx < 8U; Idx++)
- {
- (hcdc->Req).data[Idx] = pData[Idx];
- }
- }
- break;
-
- default:
- ret = USBD_FAIL;
- break;
- }
-
- /* Transmit notification packet */
- if (ReqSize != 0U)
- {
- (void)USBD_LL_Transmit(pdev, CDC_ECM_CMD_EP, (uint8_t *)&(hcdc->Req), ReqSize);
- }
-
- return (uint8_t)ret;
-}
-
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/lib/STM32_USB_Device_Library/Class/CDC_ECM/Src/usbd_cdc_ecm_if_template.c b/lib/STM32_USB_Device_Library/Class/CDC_ECM/Src/usbd_cdc_ecm_if_template.c
deleted file mode 100644
index 9b96de8b4..000000000
--- a/lib/STM32_USB_Device_Library/Class/CDC_ECM/Src/usbd_cdc_ecm_if_template.c
+++ /dev/null
@@ -1,247 +0,0 @@
-/**
- ******************************************************************************
- * @file Src/usbd_cdc_ecm_if_template.c
- * @author MCD Application Team
- * @brief Source file for USBD CDC_ECM interface
- ******************************************************************************
- * @attention
- *
- * © Copyright (c) 2019 STMicroelectronics.
- * All rights reserved.
- *
- * This software component is licensed by ST under Ultimate Liberty license
- * SLA0044, the "License"; You may not use this file except in compliance with
- * the License. You may obtain a copy of the License at:
- * www.st.com/SLA0044
- *
- ******************************************************************************
- */
-
-/* Includes ------------------------------------------------------------------*/
-
-#include "main.h"
-/*
-
- Include here LwIP files if used
-
-*/
-
-/* Private typedef -----------------------------------------------------------*/
-/* Private define ------------------------------------------------------------*/
-/* Private macro -------------------------------------------------------------*/
-/* Private variables ---------------------------------------------------------*/
-
-#if defined ( __ICCARM__ ) /*!< IAR Compiler */
- #pragma data_alignment=4
-#endif
-__ALIGN_BEGIN static uint8_t UserRxBuffer[CDC_ECM_ETH_MAX_SEGSZE + 100]__ALIGN_END; /* Received Data over USB are stored in this buffer */
-
-#if defined ( __ICCARM__ ) /*!< IAR Compiler */
- #pragma data_alignment=4
-#endif
-__ALIGN_BEGIN static uint8_t UserTxBuffer[CDC_ECM_ETH_MAX_SEGSZE + 100]__ALIGN_END; /* Received Data over CDC_ECM (CDC_ECM interface) are stored in this buffer */
-
-static uint8_t CDC_ECMInitialized = 0U;
-
-/* USB handler declaration */
-extern USBD_HandleTypeDef USBD_Device;
-
-/* Private function prototypes -----------------------------------------------*/
-static int8_t CDC_ECM_Itf_Init(void);
-static int8_t CDC_ECM_Itf_DeInit(void);
-static int8_t CDC_ECM_Itf_Control(uint8_t cmd, uint8_t *pbuf, uint16_t length);
-static int8_t CDC_ECM_Itf_Receive(uint8_t *pbuf, uint32_t *Len);
-static int8_t CDC_ECM_Itf_TransmitCplt(uint8_t *pbuf, uint32_t *Len, uint8_t epnum);
-static int8_t CDC_ECM_Itf_Process(USBD_HandleTypeDef *pdev);
-
-USBD_CDC_ECM_ItfTypeDef USBD_CDC_ECM_fops =
-{
- CDC_ECM_Itf_Init,
- CDC_ECM_Itf_DeInit,
- CDC_ECM_Itf_Control,
- CDC_ECM_Itf_Receive,
- CDC_ECM_Itf_TransmitCplt,
- CDC_ECM_Itf_Process,
- (uint8_t *)CDC_ECM_MAC_STR_DESC,
-};
-
-/* Private functions ---------------------------------------------------------*/
-
-/**
- * @brief CDC_ECM_Itf_Init
- * Initializes the CDC_ECM media low layer
- * @param None
- * @retval Result of the operation: USBD_OK if all operations are OK else USBD_FAIL
- */
-static int8_t CDC_ECM_Itf_Init(void)
-{
- if (CDC_ECMInitialized == 0U)
- {
- /*
- Initialize the TCP/IP stack here
- */
-
- CDC_ECMInitialized = 1U;
- }
-
- /* Set Application Buffers */
- (void)USBD_CDC_ECM_SetTxBuffer(&USBD_Device, UserTxBuffer, 0U);
- (void)USBD_CDC_ECM_SetRxBuffer(&USBD_Device, UserRxBuffer);
-
- return (0);
-}
-
-/**
- * @brief CDC_ECM_Itf_DeInit
- * DeInitializes the CDC_ECM media low layer
- * @param None
- * @retval Result of the operation: USBD_OK if all operations are OK else USBD_FAIL
- */
-static int8_t CDC_ECM_Itf_DeInit(void)
-{
- USBD_CDC_ECM_HandleTypeDef *hcdc_cdc_ecm = (USBD_CDC_ECM_HandleTypeDef *)(USBD_Device.pClassData);
-
- /* Notify application layer that link is down */
- hcdc_cdc_ecm->LinkStatus = 0U;
-
- return (0);
-}
-
-/**
- * @brief CDC_ECM_Itf_Control
- * Manage the CDC_ECM 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 operation: USBD_OK if all operations are OK else USBD_FAIL
- */
-static int8_t CDC_ECM_Itf_Control(uint8_t cmd, uint8_t *pbuf, uint16_t length)
-{
- USBD_CDC_ECM_HandleTypeDef *hcdc_cdc_ecm = (USBD_CDC_ECM_HandleTypeDef *)(USBD_Device.pClassData);
-
- switch (cmd)
- {
- case CDC_ECM_SEND_ENCAPSULATED_COMMAND:
- /* Add your code here */
- break;
-
- case CDC_ECM_GET_ENCAPSULATED_RESPONSE:
- /* Add your code here */
- break;
-
- case CDC_ECM_SET_ETH_MULTICAST_FILTERS:
- /* Add your code here */
- break;
-
- case CDC_ECM_SET_ETH_PWRM_PATTERN_FILTER:
- /* Add your code here */
- break;
-
- case CDC_ECM_GET_ETH_PWRM_PATTERN_FILTER:
- /* Add your code here */
- break;
-
- case CDC_ECM_SET_ETH_PACKET_FILTER:
- /* Check if this is the first time we enter */
- if (hcdc_cdc_ecm->LinkStatus == 0U)
- {
- /*
- Setup the Link up at TCP/IP level
- */
- hcdc_cdc_ecm->LinkStatus = 1U;
-
- /* Modification for MacOS which doesn't send SetInterface before receiving INs */
- if (hcdc_cdc_ecm->NotificationStatus == 0U)
- {
- /* Send notification: NETWORK_CONNECTION Event */
- (void)USBD_CDC_ECM_SendNotification(&USBD_Device, NETWORK_CONNECTION,
- CDC_ECM_NET_CONNECTED, NULL);
-
- /* Prepare for sending Connection Speed Change notification */
- hcdc_cdc_ecm->NotificationStatus = 1U;
- }
- }
- /* Add your code here */
- break;
-
- case CDC_ECM_GET_ETH_STATISTIC:
- /* Add your code here */
- break;
-
- default:
- break;
- }
- UNUSED(length);
- UNUSED(pbuf);
-
- return (0);
-}
-
-/**
- * @brief CDC_ECM_Itf_Receive
- * Data received over USB OUT endpoint are sent over CDC_ECM interface
- * through this function.
- * @param Buf: Buffer of data to be transmitted
- * @param Len: Number of data received (in bytes)
- * @retval Result of the operation: USBD_OK if all operations are OK else USBD_FAIL
- */
-static int8_t CDC_ECM_Itf_Receive(uint8_t *Buf, uint32_t *Len)
-{
- /* Get the CDC_ECM handler pointer */
- USBD_CDC_ECM_HandleTypeDef *hcdc_cdc_ecm = (USBD_CDC_ECM_HandleTypeDef *)(USBD_Device.pClassData);
-
- /* Call Eth buffer processing */
- hcdc_cdc_ecm->RxState = 1U;
-
- UNUSED(Len);
- UNUSED(Buf);
-
- return (0);
-}
-
-/**
- * @brief CDC_ECM_Itf_TransmitCplt
- * Data transmited callback
- *
- * @note
- * This function is IN transfer complete callback used to inform user that
- * the submitted Data is successfully sent over USB.
- *
- * @param Buf: Buffer of data to be received
- * @param Len: Number of data received (in bytes)
- * @retval Result of the operation: USBD_OK if all operations are OK else USBD_FAIL
- */
-static int8_t CDC_ECM_Itf_TransmitCplt(uint8_t *Buf, uint32_t *Len, uint8_t epnum)
-{
- UNUSED(Buf);
- UNUSED(Len);
- UNUSED(epnum);
-
- return (0);
-}
-
-/**
- * @brief CDC_ECM_Itf_Process
- * Data received over USB OUT endpoint are sent over CDC_ECM interface
- * through this function.
- * @param pdef: pointer to the USB Device Handle
- * @retval Result of the operation: USBD_OK if all operations are OK else USBD_FAIL
- */
-static int8_t CDC_ECM_Itf_Process(USBD_HandleTypeDef *pdev)
-{
- /* Get the CDC_ECM handler pointer */
- USBD_CDC_ECM_HandleTypeDef *hcdc_cdc_ecm = (USBD_CDC_ECM_HandleTypeDef *)(pdev->pClassData);
-
- if ((hcdc_cdc_ecm != NULL) && (hcdc_cdc_ecm->LinkStatus != 0U))
- {
- /*
- Read a received packet from the Ethernet buffers and send it
- to the lwIP for handling
- Call here the TCP/IP background tasks.
- */
- }
-
- return (0);
-}
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/lib/STM32_USB_Device_Library/Class/CDC_RNDIS/Inc/usbd_cdc_rndis.h b/lib/STM32_USB_Device_Library/Class/CDC_RNDIS/Inc/usbd_cdc_rndis.h
deleted file mode 100644
index ef7689440..000000000
--- a/lib/STM32_USB_Device_Library/Class/CDC_RNDIS/Inc/usbd_cdc_rndis.h
+++ /dev/null
@@ -1,529 +0,0 @@
-/**
- ******************************************************************************
- * @file usbd_cdc_rndis.h
- * @author MCD Application Team
- * @brief header file for the usbd_cdc_rndis.c file.
- ******************************************************************************
- * @attention
- *
- * © Copyright (c) 2015 STMicroelectronics.
- * All rights reserved.
- *
- * This software component is licensed by ST under Ultimate Liberty license
- * SLA0044, the "License"; You may not use this file except in compliance with
- * the License. You may obtain a copy of the License at:
- * www.st.com/SLA0044
- *
- ******************************************************************************
- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __USB_CDC_RNDIS_H
-#define __USB_CDC_RNDIS_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_ioreq.h"
-
-/** @addtogroup STM32_USB_DEVICE_LIBRARY
- * @{
- */
-
-/** @defgroup usbd_cdc_rndis
- * @brief This file is the Header file for usbd_cdc_rndis.c
- * @{
- */
-
-
-/** @defgroup usbd_cdc_rndis_Exported_Defines
- * @{
- */
-
-#define CDC_RNDIS_IN_EP 0x81U /* EP1 for data IN */
-#define CDC_RNDIS_OUT_EP 0x01U /* EP1 for data OUT */
-#define CDC_RNDIS_CMD_EP 0x82U /* EP2 for CDC_RNDIS commands */
-
-#ifndef CDC_RNDIS_CMD_ITF_NBR
-#define CDC_RNDIS_CMD_ITF_NBR 0x00U /* Command Interface Number 0 */
-#endif /* CDC_RNDIS_CMD_ITF_NBR */
-
-#ifndef CDC_RNDIS_COM_ITF_NBR
-#define CDC_RNDIS_COM_ITF_NBR 0x01U /* Communication Interface Number 0 */
-#endif /* CDC_RNDIS_CMD_ITF_NBR */
-
-#ifndef CDC_RNDIS_HS_BINTERVAL
-#define CDC_RNDIS_HS_BINTERVAL 0x10U
-#endif /* CDC_RNDIS_HS_BINTERVAL */
-
-#ifndef CDC_RNDIS_FS_BINTERVAL
-#define CDC_RNDIS_FS_BINTERVAL 0x10U
-#endif /* CDC_RNDIS_FS_BINTERVAL */
-
-
-/* CDC_RNDIS Endpoints parameters: you can fine tune these values
- depending on the needed baudrates and performance. */
-#define CDC_RNDIS_DATA_HS_MAX_PACKET_SIZE 512U /* Endpoint IN & OUT Packet size */
-#define CDC_RNDIS_DATA_FS_MAX_PACKET_SIZE 64U /* Endpoint IN & OUT Packet size */
-#define CDC_RNDIS_CMD_PACKET_SIZE 16U /* Control Endpoint Packet size */
-
-#define CDC_RNDIS_CONFIG_DESC_SIZ 75U
-#define CDC_RNDIS_DATA_HS_IN_PACKET_SIZE CDC_RNDIS_DATA_HS_MAX_PACKET_SIZE
-#define CDC_RNDIS_DATA_HS_OUT_PACKET_SIZE CDC_RNDIS_DATA_HS_MAX_PACKET_SIZE
-
-#define CDC_RNDIS_DATA_FS_IN_PACKET_SIZE CDC_RNDIS_DATA_FS_MAX_PACKET_SIZE
-#define CDC_RNDIS_DATA_FS_OUT_PACKET_SIZE CDC_RNDIS_DATA_FS_MAX_PACKET_SIZE
-
-/*---------------------------------------------------------------------*/
-/* CDC_RNDIS definitions */
-/*---------------------------------------------------------------------*/
-
-/** Implemented CDC_RNDIS Version Major */
-#define CDC_RNDIS_VERSION_MAJOR 0x01U
-
-/* Implemented CDC_RNDIS Version Minor */
-#define CDC_RNDIS_VERSION_MINOR 0x00U
-
-/* Maximum size in bytes of a CDC_RNDIS control message
- which can be sent or received */
-#define CDC_RNDIS_MESSAGE_BUFFER_SIZE 128U
-
-/* Maximum size in bytes of an Ethernet frame
- according to the Ethernet standard */
-#define CDC_RNDIS_ETH_FRAME_SIZE_MAX 1536U
-
-/* Maximum size allocated for buffer
- inside Query messages structures */
-#define CDC_RNDIS_MAX_INFO_BUFF_SZ 200U
-#define CDC_RNDIS_MAX_DATA_SZE 2000U
-
-/* Notification request value for a CDC_RNDIS
- Response Available notification */
-#define CDC_RNDIS_NOTIFICATION_RESP_AVAILABLE 0x00000001UL
-
-
-#define CDC_RNDIS_PACKET_MSG_ID 0x00000001UL
-#define CDC_RNDIS_INITIALIZE_MSG_ID 0x00000002UL
-#define CDC_RNDIS_HALT_MSG_ID 0x00000003UL
-#define CDC_RNDIS_QUERY_MSG_ID 0x00000004UL
-#define CDC_RNDIS_SET_MSG_ID 0x00000005UL
-#define CDC_RNDIS_RESET_MSG_ID 0x00000006UL
-#define CDC_RNDIS_INDICATE_STATUS_MSG_ID 0x00000007UL
-#define CDC_RNDIS_KEEPALIVE_MSG_ID 0x00000008UL
-
-#define CDC_RNDIS_INITIALIZE_CMPLT_ID 0x80000002UL
-#define CDC_RNDIS_QUERY_CMPLT_ID 0x80000004UL
-#define CDC_RNDIS_SET_CMPLT_ID 0x80000005UL
-#define CDC_RNDIS_RESET_CMPLT_ID 0x80000006UL
-#define CDC_RNDIS_KEEPALIVE_CMPLT_ID 0x80000008UL
-
-#define CDC_RNDIS_STATUS_SUCCESS 0x00000000UL
-#define CDC_RNDIS_STATUS_FAILURE 0xC0000001UL
-#define CDC_RNDIS_STATUS_INVALID_DATA 0xC0010015UL
-#define CDC_RNDIS_STATUS_NOT_SUPPORTED 0xC00000BBUL
-#define CDC_RNDIS_STATUS_MEDIA_CONNECT 0x4001000BUL
-#define CDC_RNDIS_STATUS_MEDIA_DISCONNECT 0x4001000CUL
-/** Media state */
-#define CDC_RNDIS_MEDIA_STATE_CONNECTED 0x00000000UL
-#define CDC_RNDIS_MEDIA_STATE_DISCONNECTED 0x00000001UL
-
-/** Media types */
-#define CDC_RNDIS_MEDIUM_802_3 0x00000000UL
-
-#define CDC_RNDIS_DF_CONNECTIONLESS 0x00000001UL
-#define CDC_RNDIS_DF_CONNECTION_ORIENTED 0x00000002UL
-
-/** Hardware status of the underlying NIC */
-#define CDC_RNDIS_HW_STS_READY 0x00000000UL
-#define CDC_RNDIS_HW_STS_INITIALIZING 0x00000001UL
-#define CDC_RNDIS_HW_STS_RESET 0x00000002UL
-#define CDC_RNDIS_HW_STS_CLOSING 0x00000003UL
-#define CDC_RNDIS_HW_STS_NOT_READY 0x00000004UL
-
-/** Packet filter */
-#define CDC_RNDIS_PACKET_DIRECTED 0x00000001UL
-#define CDC_RNDIS_PACKET_MULTICAST 0x00000002UL
-#define CDC_RNDIS_PACKET_ALL_MULTICAST 0x00000004UL
-#define CDC_RNDIS_PACKET_BROADCAST 0x00000008UL
-#define CDC_RNDIS_PACKET_SOURCE_ROUTING 0x00000010UL
-#define CDC_RNDIS_PACKET_PROMISCUOUS 0x00000020UL
-#define CDC_RNDIS_PACKET_SMT 0x00000040UL
-#define CDC_RNDIS_PACKET_ALL_LOCAL 0x00000080UL
-#define CDC_RNDIS_PACKET_GROUP 0x00001000UL
-#define CDC_RNDIS_PACKET_ALL_FUNCTIONAL 0x00002000UL
-#define CDC_RNDIS_PACKET_FUNCTIONAL 0x00004000UL
-#define CDC_RNDIS_PACKET_MAC_FRAME 0x00008000UL
-
-#define OID_GEN_SUPPORTED_LIST 0x00010101UL
-#define OID_GEN_HARDWARE_STATUS 0x00010102UL
-#define OID_GEN_MEDIA_SUPPORTED 0x00010103UL
-#define OID_GEN_MEDIA_IN_USE 0x00010104UL
-#define OID_GEN_MAXIMUM_FRAME_SIZE 0x00010106UL
-#define OID_GEN_MAXIMUM_TOTAL_SIZE 0x00010111UL
-#define OID_GEN_LINK_SPEED 0x00010107UL
-#define OID_GEN_TRANSMIT_BLOCK_SIZE 0x0001010AUL
-#define OID_GEN_RECEIVE_BLOCK_SIZE 0x0001010BUL
-#define OID_GEN_VENDOR_ID 0x0001010CUL
-#define OID_GEN_VENDOR_DESCRIPTION 0x0001010DUL
-#define OID_GEN_CURRENT_PACKET_FILTER 0x0001010EUL
-#define OID_GEN_MEDIA_CONNECT_STATUS 0x00010114UL
-#define OID_GEN_MAXIMUM_SEND_PACKETS 0x00010115UL
-#define OID_GEN_PHYSICAL_MEDIUM 0x00010202UL
-#define OID_GEN_XMIT_OK 0x00020101UL
-#define OID_GEN_RCV_OK 0x00020102UL
-#define OID_GEN_XMIT_ERROR 0x00020103UL
-#define OID_GEN_RCV_ERROR 0x00020104UL
-#define OID_GEN_RCV_NO_BUFFER 0x00020105UL
-#define OID_GEN_CDC_RNDIS_CONFIG_PARAMETER 0x0001021BUL
-#define OID_802_3_PERMANENT_ADDRESS 0x01010101UL
-#define OID_802_3_CURRENT_ADDRESS 0x01010102UL
-#define OID_802_3_MULTICAST_LIST 0x01010103UL
-#define OID_802_3_MAXIMUM_LIST_SIZE 0x01010104UL
-#define OID_802_3_RCV_ERROR_ALIGNMENT 0x01020101UL
-#define OID_802_3_XMIT_ONE_COLLISION 0x01020102UL
-#define OID_802_3_XMIT_MORE_COLLISIONS 0x01020103UL
-
-
-#define CDC_RNDIS_SEND_ENCAPSULATED_COMMAND 0x00U
-#define CDC_RNDIS_GET_ENCAPSULATED_RESPONSE 0x01U
-
-#define CDC_RNDIS_NET_DISCONNECTED 0x00U
-#define CDC_RNDIS_NET_CONNECTED 0x01U
-
-#define CDC_RNDIS_BMREQUEST_TYPE_RNDIS 0xA1U
-#define CDC_RNDIS_PCKTMSG_DATAOFFSET_OFFSET 8U
-
-/* MAC String index */
-#define CDC_RNDIS_MAC_STRING_INDEX 6U
-
-/**
- * @}
- */
-
-
-/** @defgroup USBD_CORE_Exported_TypesDefinitions
- * @{
- */
-
-/**
- * @}
- */
-
-typedef struct _USBD_CDC_RNDIS_Itf
-{
- int8_t (* Init)(void);
- int8_t (* DeInit)(void);
- int8_t (* Control)(uint8_t cmd, uint8_t *pbuf, uint16_t length);
- int8_t (* Receive)(uint8_t *Buf, uint32_t *Len);
- int8_t (* TransmitCplt)(uint8_t *Buf, uint32_t *Len, uint8_t epnum);
- int8_t (* Process)(USBD_HandleTypeDef *pdev);
- uint8_t *pStrDesc;
-} USBD_CDC_RNDIS_ItfTypeDef;
-
-/* CDC_RNDIS State values */
-typedef enum
-{
- CDC_RNDIS_STATE_UNINITIALIZED = 0,
- CDC_RNDIS_STATE_BUS_INITIALIZED = 1,
- CDC_RNDIS_STATE_INITIALIZED = 2,
- CDC_RNDIS_STATE_DATA_INITIALIZED = 3
-} USBD_CDC_RNDIS_StateTypeDef;
-
-typedef struct
-{
- uint8_t bmRequest;
- uint8_t bRequest;
- uint16_t wValue;
- uint16_t wIndex;
- uint16_t wLength;
- uint8_t data[8];
-} USBD_CDC_RNDIS_NotifTypeDef;
-
-typedef struct
-{
- uint32_t data[2000 / 4]; /* Force 32bits alignment */
- uint8_t CmdOpCode;
- uint8_t CmdLength;
- uint8_t ResponseRdy; /* Indicates if the Device Response to an CDC_RNDIS msg is ready */
- uint8_t Reserved1; /* Reserved Byte to force 4 bytes alignment of following fields */
- uint8_t *RxBuffer;
- uint8_t *TxBuffer;
- uint32_t RxLength;
- uint32_t TxLength;
-
- USBD_CDC_RNDIS_NotifTypeDef Req;
- USBD_CDC_RNDIS_StateTypeDef State;
-
- __IO uint32_t TxState;
- __IO uint32_t RxState;
-
- __IO uint32_t MaxPcktLen;
- __IO uint32_t LinkStatus;
- __IO uint32_t NotificationStatus;
- __IO uint32_t PacketFilter;
-} USBD_CDC_RNDIS_HandleTypeDef;
-
-
-typedef enum
-{
- NETWORK_CONNECTION = 0x00,
- RESPONSE_AVAILABLE = 0x01,
- CONNECTION_SPEED_CHANGE = 0x2A
-} USBD_CDC_RNDIS_NotifCodeTypeDef;
-
-
-/* Messages Sent by the Host ---------------------*/
-
-/* Type define for a CDC_RNDIS Initialize command message */
-typedef struct
-{
- uint32_t MsgType;
- uint32_t MsgLength;
- uint32_t ReqId;
- uint32_t MajorVersion;
- uint32_t MinorVersion;
- uint32_t MaxTransferSize;
-} USBD_CDC_RNDIS_InitMsgTypeDef;
-
-/* Type define for a CDC_RNDIS Halt Message */
-typedef struct
-{
- uint32_t MsgType;
- uint32_t MsgLength;
- uint32_t ReqId;
-} USBD_CDC_RNDIS_HaltMsgTypeDef;
-
-/* Type define for a CDC_RNDIS Query command message */
-typedef struct
-{
- uint32_t MsgType;
- uint32_t MsgLength;
- uint32_t RequestId;
- uint32_t Oid;
- uint32_t InfoBufLength;
- uint32_t InfoBufOffset;
- uint32_t DeviceVcHandle;
- uint32_t InfoBuf[CDC_RNDIS_MAX_INFO_BUFF_SZ];
-} USBD_CDC_RNDIS_QueryMsgTypeDef;
-
-/* Type define for a CDC_RNDIS Set command message */
-typedef struct
-{
- uint32_t MsgType;
- uint32_t MsgLength;
- uint32_t ReqId;
- uint32_t Oid;
- uint32_t InfoBufLength;
- uint32_t InfoBufOffset;
- uint32_t DeviceVcHandle;
- uint32_t InfoBuf[CDC_RNDIS_MAX_INFO_BUFF_SZ];
-} USBD_CDC_RNDIS_SetMsgTypeDef;
-
-/* Type define for a CDC_RNDIS Reset message */
-typedef struct
-{
- uint32_t MsgType;
- uint32_t MsgLength;
- uint32_t Reserved;
-} USBD_CDC_RNDIS_ResetMsgTypeDef;
-
-/* Type define for a CDC_RNDIS Keepalive command message */
-typedef struct
-{
- uint32_t MsgType;
- uint32_t MsgLength;
- uint32_t ReqId;
-} USBD_CDC_RNDIS_KpAliveMsgTypeDef;
-
-
-/* Messages Sent by the Device ---------------------*/
-
-/* Type define for a CDC_RNDIS Initialize complete response message */
-typedef struct
-{
- uint32_t MsgType;
- uint32_t MsgLength;
- uint32_t ReqId;
- uint32_t Status;
- uint32_t MajorVersion;
- uint32_t MinorVersion;
- uint32_t DeviceFlags;
- uint32_t Medium;
- uint32_t MaxPacketsPerTransfer;
- uint32_t MaxTransferSize;
- uint32_t PacketAlignmentFactor;
- uint32_t AFListOffset;
- uint32_t AFListSize;
-} USBD_CDC_RNDIS_InitCpltMsgTypeDef;
-
-/* Type define for a CDC_RNDIS Query complete response message */
-typedef struct
-{
- uint32_t MsgType;
- uint32_t MsgLength;
- uint32_t ReqId;
- uint32_t Status;
- uint32_t InfoBufLength;
- uint32_t InfoBufOffset;
- uint32_t InfoBuf[CDC_RNDIS_MAX_INFO_BUFF_SZ];
-} USBD_CDC_RNDIS_QueryCpltMsgTypeDef;
-
-/* Type define for a CDC_RNDIS Set complete response message */
-typedef struct
-{
- uint32_t MsgType;
- uint32_t MsgLength;
- uint32_t ReqId;
- uint32_t Status;
-} USBD_CDC_RNDIS_SetCpltMsgTypeDef;
-
-/* Type define for a CDC_RNDIS Reset complete message */
-typedef struct
-{
- uint32_t MsgType;
- uint32_t MsgLength;
- uint32_t Status;
- uint32_t AddrReset;
-} USBD_CDC_RNDIS_ResetCpltMsgTypeDef;
-
-/* Type define for CDC_RNDIS struct to indicate a change
- in the status of the device */
-typedef struct
-{
- uint32_t MsgType;
- uint32_t MsgLength;
- uint32_t Status;
- uint32_t StsBufLength;
- uint32_t StsBufOffset;
-} USBD_CDC_RNDIS_StsChangeMsgTypeDef;
-
-/* Type define for a CDC_RNDIS Keepalive complete message */
-typedef struct
-{
- uint32_t MsgType;
- uint32_t MsgLength;
- uint32_t ReqId;
- uint32_t Status;
-} USBD_CDC_RNDIS_KpAliveCpltMsgTypeDef;
-
-
-/* Messages Sent by both Host and Device ---------------------*/
-
-/* Type define for a CDC_RNDIS packet message, used to encapsulate
- Ethernet packets sent to and from the adapter */
-typedef struct
-{
- uint32_t MsgType;
- uint32_t MsgLength;
- uint32_t DataOffset;
- uint32_t DataLength;
- uint32_t OOBDataOffset;
- uint32_t OOBDataLength;
- uint32_t NumOOBDataElements;
- uint32_t PerPacketInfoOffset;
- uint32_t PerPacketInfoLength;
- uint32_t VcHandle;
- uint32_t Reserved;
-} USBD_CDC_RNDIS_PacketMsgTypeDef;
-
-/* Miscellaneous types used for parsing ---------------------*/
-
-/* The common part for all CDC_RNDIS messages Complete response */
-typedef struct
-{
- uint32_t MsgType;
- uint32_t MsgLength;
- uint32_t ReqId;
- uint32_t Status;
-} USBD_CDC_RNDIS_CommonCpltMsgTypeDef;
-
-/* Type define for a single parameter structure */
-typedef struct
-{
- uint32_t ParamNameOffset;
- uint32_t ParamNameLength;
- uint32_t ParamType;
- uint32_t ParamValueOffset;
- uint32_t ParamValueLength;
-} USBD_CDC_RNDIS_ParamStructTypeDef;
-
-
-/* Type define of a single CDC_RNDIS OOB data record */
-typedef struct
-{
- uint32_t Size;
- uint32_t Type;
- uint32_t ClassInfoType;
- uint32_t OOBData[sizeof(uint32_t)];
-} USBD_CDC_RNDIS_OOBPacketTypeDef;
-
-/* Type define for notification structure */
-typedef struct
-{
- uint32_t notification;
- uint32_t reserved;
-} USBD_CDC_RNDIS_NotifStructTypeDef;
-
-/* This structure will be used to store the type, the size and ID for any
- received message from the control endpoint */
-typedef struct
-{
- uint32_t MsgType;
- uint32_t MsgLength;
-} USBD_CDC_RNDIS_CtrlMsgTypeDef;
-
-
-/** @defgroup USBD_CORE_Exported_Macros
- * @{
- */
-
-/**
- * @}
- */
-
-/** @defgroup USBD_CORE_Exported_Variables
- * @{
- */
-
-extern USBD_ClassTypeDef USBD_CDC_RNDIS;
-#define USBD_CDC_RNDIS_CLASS &USBD_CDC_RNDIS
-/**
- * @}
- */
-
-/** @defgroup USB_CORE_Exported_Functions
- * @{
- */
-uint8_t USBD_CDC_RNDIS_SetRxBuffer(USBD_HandleTypeDef *pdev, uint8_t *pbuff);
-uint8_t USBD_CDC_RNDIS_ReceivePacket(USBD_HandleTypeDef *pdev);
-uint8_t USBD_CDC_RNDIS_TransmitPacket(USBD_HandleTypeDef *pdev);
-
-uint8_t USBD_CDC_RNDIS_RegisterInterface(USBD_HandleTypeDef *pdev,
- USBD_CDC_RNDIS_ItfTypeDef *fops);
-
-uint8_t USBD_CDC_RNDIS_SetTxBuffer(USBD_HandleTypeDef *pdev,
- uint8_t *pbuff, uint32_t length);
-
-uint8_t USBD_CDC_RNDIS_SendNotification(USBD_HandleTypeDef *pdev,
- USBD_CDC_RNDIS_NotifCodeTypeDef Notif,
- uint16_t bVal, uint8_t *pData);
-/**
- * @}
- */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __USB_CDC_RNDIS_H */
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/lib/STM32_USB_Device_Library/Class/CDC_RNDIS/Inc/usbd_cdc_rndis_if_template.h b/lib/STM32_USB_Device_Library/Class/CDC_RNDIS/Inc/usbd_cdc_rndis_if_template.h
deleted file mode 100644
index 3cf027165..000000000
--- a/lib/STM32_USB_Device_Library/Class/CDC_RNDIS/Inc/usbd_cdc_rndis_if_template.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/**
- ******************************************************************************
- * @file usbd_cdc_rndis_if_template.h
- * @author MCD Application Team
- * @brief Header for usbd_cdc_rndis_if.c file.
- ******************************************************************************
- * @attention
- *
- * © Copyright (c) 2019 STMicroelectronics.
- * All rights reserved.
- *
- * This software component is licensed by ST under Ultimate Liberty license
- * SLA0044, the "License"; You may not use this file except in compliance with
- * the License. You may obtain a copy of the License at:
- * www.st.com/SLA0044
- *
- ******************************************************************************
- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __USBD_CDC_RNDIS_IF_H
-#define __USBD_CDC_RNDIS_IF_H
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_cdc_rndis.h"
-
-/* Exported types ------------------------------------------------------------*/
-/* Exported constants --------------------------------------------------------*/
-
-/* Ensure this MAC address value is same as MAC_ADDRx declared in STM32xxx_conf.h */
-#define CDC_RNDIS_MAC_STR_DESC (uint8_t *)"000202030000"
-#define CDC_RNDIS_MAC_ADDR0 0x00U /* 01 */
-#define CDC_RNDIS_MAC_ADDR1 0x02U /* 02 */
-#define CDC_RNDIS_MAC_ADDR2 0x02U /* 03 */
-#define CDC_RNDIS_MAC_ADDR3 0x03U /* 00 */
-#define CDC_RNDIS_MAC_ADDR4 0x00U /* 00 */
-#define CDC_RNDIS_MAC_ADDR5 0x00U /* 00 */
-
-#define USBD_CDC_RNDIS_VENDOR_DESC "STMicroelectronics"
-#define USBD_CDC_RNDIS_LINK_SPEED 100000U /* 10Mbps */
-#define USBD_CDC_RNDIS_VID 0x0483U
-
-/* Max Number of Trials waiting for Tx ready */
-#define CDC_RNDIS_MAX_TX_WAIT_TRIALS 1000000U
-
-/* Ethernet Maximum Segment size, typically 1514 bytes */
-#define CDC_RNDIS_ETH_MAX_SEGSZE 1514U
-
-#define CDC_RNDIS_CONNECT_SPEED_UPSTREAM 0x1E000000U
-#define CDC_RNDIS_CONNECT_SPEED_DOWNSTREAM 0x1E000000U
-
-
-extern USBD_CDC_RNDIS_ItfTypeDef USBD_CDC_RNDIS_fops;
-
-/* Exported macro ------------------------------------------------------------*/
-/* Exported functions ------------------------------------------------------- */
-
-#endif /* __USBD_CDC_RNDIS_IF_H */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/lib/STM32_USB_Device_Library/Class/CDC_RNDIS/Src/usbd_cdc_rndis.c b/lib/STM32_USB_Device_Library/Class/CDC_RNDIS/Src/usbd_cdc_rndis.c
deleted file mode 100644
index 946ed5018..000000000
--- a/lib/STM32_USB_Device_Library/Class/CDC_RNDIS/Src/usbd_cdc_rndis.c
+++ /dev/null
@@ -1,1698 +0,0 @@
-/**
- ******************************************************************************
- * @file usbd_cdc_rndis.c
- * @author MCD Application Team
- * @brief This file provides the high layer firmware functions to manage the
- * following functionalities of the USB CDC_RNDIS Class:
- * - Initialization and Configuration of high and low layer
- * - Enumeration as CDC_RNDIS Device (and enumeration for each implemented memory interface)
- * - OUT/IN data transfer
- * - Command IN transfer (class requests management)
- * - Error management
- *
- * @verbatim
- *
- * ===================================================================
- * CDC_RNDIS 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
- *
- * 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
- *
- * © Copyright (c) 2019 STMicroelectronics.
- * All rights reserved.
- *
- * This software component is licensed by ST under Ultimate Liberty license
- * SLA0044, the "License"; You may not use this file except in compliance with
- * the License. You may obtain a copy of the License at:
- * www.st.com/SLA0044
- *
- ******************************************************************************
- */
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_cdc_rndis.h"
-#include "usbd_ctlreq.h"
-
-#ifndef __USBD_CDC_RNDIS_IF_H
-#include "usbd_cdc_rndis_if_template.h"
-#endif
-/** @addtogroup STM32_USB_DEVICE_LIBRARY
- * @{
- */
-
-
-/** @defgroup USBD_CDC_RNDIS
- * @brief usbd core module
- * @{
- */
-
-/** @defgroup USBD_CDC_RNDIS_Private_TypesDefinitions
- * @{
- */
-/**
- * @}
- */
-
-
-/** @defgroup USBD_CDC_RNDIS_Private_Defines
- * @{
- */
-/**
- * @}
- */
-
-
-/** @defgroup USBD_CDC_RNDIS_Private_Macros
- * @{
- */
-
-/**
- * @}
- */
-
-
-/** @defgroup USBD_CDC_RNDIS_Private_FunctionPrototypes
- * @{
- */
-
-static uint8_t USBD_CDC_RNDIS_Init(USBD_HandleTypeDef *pdev, uint8_t cfgidx);
-static uint8_t USBD_CDC_RNDIS_DeInit(USBD_HandleTypeDef *pdev, uint8_t cfgidx);
-
-static uint8_t USBD_CDC_RNDIS_Setup(USBD_HandleTypeDef *pdev,
- USBD_SetupReqTypedef *req);
-
-static uint8_t USBD_CDC_RNDIS_DataIn(USBD_HandleTypeDef *pdev, uint8_t epnum);
-static uint8_t USBD_CDC_RNDIS_DataOut(USBD_HandleTypeDef *pdev, uint8_t epnum);
-static uint8_t USBD_CDC_RNDIS_EP0_RxReady(USBD_HandleTypeDef *pdev);
-static uint8_t *USBD_CDC_RNDIS_GetFSCfgDesc(uint16_t *length);
-static uint8_t *USBD_CDC_RNDIS_GetHSCfgDesc(uint16_t *length);
-static uint8_t *USBD_CDC_RNDIS_GetOtherSpeedCfgDesc(uint16_t *length);
-static uint8_t *USBD_CDC_RNDIS_GetOtherSpeedCfgDesc(uint16_t *length);
-
-#if (USBD_SUPPORT_USER_STRING_DESC == 1U)
-static uint8_t *USBD_CDC_RNDIS_USRStringDescriptor(USBD_HandleTypeDef *pdev, uint8_t index, uint16_t *length);
-#endif
-
-uint8_t *USBD_CDC_RNDIS_GetDeviceQualifierDescriptor(uint16_t *length);
-
-
-/* CDC_RNDIS Internal messages parsing and construction functions */
-static uint8_t USBD_CDC_RNDIS_MsgParsing(USBD_HandleTypeDef *pdev, uint8_t *RxBuff);
-static uint8_t USBD_CDC_RNDIS_ProcessInitMsg(USBD_HandleTypeDef *pdev, USBD_CDC_RNDIS_InitMsgTypeDef *Msg);
-static uint8_t USBD_CDC_RNDIS_ProcessHaltMsg(USBD_HandleTypeDef *pdev, USBD_CDC_RNDIS_HaltMsgTypeDef *Msg);
-static uint8_t USBD_CDC_RNDIS_ProcessKeepAliveMsg(USBD_HandleTypeDef *pdev, USBD_CDC_RNDIS_KpAliveMsgTypeDef *Msg);
-static uint8_t USBD_CDC_RNDIS_ProcessQueryMsg(USBD_HandleTypeDef *pdev, USBD_CDC_RNDIS_QueryMsgTypeDef *Msg);
-static uint8_t USBD_CDC_RNDIS_ProcessSetMsg(USBD_HandleTypeDef *pdev, USBD_CDC_RNDIS_SetMsgTypeDef *Msg);
-static uint8_t USBD_CDC_RNDIS_ProcessResetMsg(USBD_HandleTypeDef *pdev, USBD_CDC_RNDIS_ResetMsgTypeDef *Msg);
-static uint8_t USBD_CDC_RNDIS_ProcessPacketMsg(USBD_HandleTypeDef *pdev, USBD_CDC_RNDIS_PacketMsgTypeDef *Msg);
-static uint8_t USBD_CDC_RNDIS_ProcessUnsupportedMsg(USBD_HandleTypeDef *pdev, USBD_CDC_RNDIS_CtrlMsgTypeDef *Msg);
-
-/* USB Standard Device Descriptor */
-__ALIGN_BEGIN static uint8_t USBD_CDC_RNDIS_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,
-};
-
-static uint8_t MAC_StrDesc[6] = {CDC_RNDIS_MAC_ADDR0, CDC_RNDIS_MAC_ADDR1, CDC_RNDIS_MAC_ADDR2,
- CDC_RNDIS_MAC_ADDR3, CDC_RNDIS_MAC_ADDR4, CDC_RNDIS_MAC_ADDR5};
-
-static uint32_t ConnSpeedTab[2] = {CDC_RNDIS_CONNECT_SPEED_UPSTREAM,
- CDC_RNDIS_CONNECT_SPEED_DOWNSTREAM};
-
-static uint8_t EmptyResponse = 0x00U;
-
-/**
- * @}
- */
-
-/** @defgroup USBD_CDC_RNDIS_Private_Variables
- * @{
- */
-
-
-/* CDC_RNDIS interface class callbacks structure */
-USBD_ClassTypeDef USBD_CDC_RNDIS =
-{
- USBD_CDC_RNDIS_Init,
- USBD_CDC_RNDIS_DeInit,
- USBD_CDC_RNDIS_Setup,
- NULL, /* EP0_TxSent, */
- USBD_CDC_RNDIS_EP0_RxReady,
- USBD_CDC_RNDIS_DataIn,
- USBD_CDC_RNDIS_DataOut,
- NULL,
- NULL,
- NULL,
- USBD_CDC_RNDIS_GetHSCfgDesc,
- USBD_CDC_RNDIS_GetFSCfgDesc,
- USBD_CDC_RNDIS_GetOtherSpeedCfgDesc,
- USBD_CDC_RNDIS_GetDeviceQualifierDescriptor,
-#if (USBD_SUPPORT_USER_STRING_DESC == 1U)
- USBD_CDC_RNDIS_USRStringDescriptor,
-#endif
-};
-
-/* USB CDC_RNDIS device Configuration Descriptor */
-__ALIGN_BEGIN static uint8_t USBD_CDC_RNDIS_CfgHSDesc[] __ALIGN_END =
-{
- /* Configuration Descriptor */
- 0x09, /* bLength: Configuration Descriptor size */
- USB_DESC_TYPE_CONFIGURATION, /* bDescriptorType: Configuration */
- LOBYTE(CDC_RNDIS_CONFIG_DESC_SIZ), /* wTotalLength: Total size of the Config descriptor */
- HIBYTE(CDC_RNDIS_CONFIG_DESC_SIZ),
- 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 */
-
- /*---------------------------------------------------------------------------*/
- /* IAD descriptor */
- 0x08, /* bLength */
- 0x0B, /* bDescriptorType */
- 0x00, /* bFirstInterface */
- 0x02, /* bInterfaceCount */
- 0xE0, /* bFunctionClass (Wireless Controller) */
- 0x01, /* bFunctionSubClass */
- 0x03, /* bFunctionProtocol */
- 0x00, /* iFunction */
-
- /*---------------------------------------------------------------------------*/
- /* Interface Descriptor */
- 0x09, /* bLength: Interface Descriptor size */
- USB_DESC_TYPE_INTERFACE, /* bDescriptorType: Interface descriptor type */
- CDC_RNDIS_CMD_ITF_NBR, /* bInterfaceNumber: Number of Interface */
- 0x00, /* bAlternateSetting: Alternate setting */
- 0x01, /* bNumEndpoints: One endpoint used */
- 0x02, /* bInterfaceClass: Communication Interface Class */
- 0x02, /* bInterfaceSubClass:Abstract Control Model */
- 0xFF, /* bInterfaceProtocol: Common AT commands */
- 0x00, /* iInterface: */
-
- /* Header Functional Descriptor */
- 0x05, /* bLength: Endpoint Descriptor size */
- 0x24, /* bDescriptorType: CS_INTERFACE */
- 0x00, /* bDescriptorSubtype: Header functional descriptor */
- 0x10, /* bcdCDC: spec release number: 1.20 */
- 0x01,
-
- /* Call Management Functional Descriptor */
- 0x05, /* bFunctionLength */
- 0x24, /* bDescriptorType: CS_INTERFACE */
- 0x01, /* bDescriptorSubtype: Call Management Func Desc */
- 0x00, /* bmCapabilities: D0+D1 */
- CDC_RNDIS_COM_ITF_NBR, /* bDataInterface: 1 */
-
- /* ACM Functional Descriptor */
- 0x04, /* bFunctionLength */
- 0x24, /* bDescriptorType: CS_INTERFACE */
- 0x02, /* bDescriptorSubtype: Abstract Control Management desc */
- 0x00, /* bmCapabilities */
-
- /* Union Functional Descriptor */
- 0x05, /* bFunctionLength */
- 0x24, /* bDescriptorType: CS_INTERFACE */
- 0x06, /* bDescriptorSubtype: Union functional descriptor */
- CDC_RNDIS_CMD_ITF_NBR, /* bMasterInterface: Communication class interface */
- CDC_RNDIS_COM_ITF_NBR, /* bSlaveInterface0: Data Class Interface */
-
- /* Notification Endpoint Descriptor */
- 0x07, /* bLength: Endpoint Descriptor size */
- USB_DESC_TYPE_ENDPOINT, /* bDescriptorType: Endpoint */
- CDC_RNDIS_CMD_EP, /* bEndpointAddress */
- 0x03, /* bmAttributes: Interrupt */
- LOBYTE(CDC_RNDIS_CMD_PACKET_SIZE), /* wMaxPacketSize: */
- HIBYTE(CDC_RNDIS_CMD_PACKET_SIZE),
- CDC_RNDIS_HS_BINTERVAL, /* bInterval */
-
- /*---------------------------------------------------------------------------*/
- /* Data class interface descriptor */
- 0x09, /* bLength: Endpoint Descriptor size */
- USB_DESC_TYPE_INTERFACE, /* bDescriptorType: */
- CDC_RNDIS_COM_ITF_NBR, /* 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_RNDIS_OUT_EP, /* bEndpointAddress */
- 0x02, /* bmAttributes: Bulk */
- LOBYTE(CDC_RNDIS_DATA_HS_MAX_PACKET_SIZE), /* wMaxPacketSize: */
- HIBYTE(CDC_RNDIS_DATA_HS_MAX_PACKET_SIZE),
- 0xFF, /* bInterval: ignore for Bulk transfer */
-
- /* Endpoint IN Descriptor */
- 0x07, /* bLength: Endpoint Descriptor size */
- USB_DESC_TYPE_ENDPOINT, /* bDescriptorType: Endpoint */
- CDC_RNDIS_IN_EP, /* bEndpointAddress */
- 0x02, /* bmAttributes: Bulk */
- LOBYTE(CDC_RNDIS_DATA_HS_MAX_PACKET_SIZE), /* wMaxPacketSize: */
- HIBYTE(CDC_RNDIS_DATA_HS_MAX_PACKET_SIZE),
- 0xFF /* bInterval: ignore for Bulk transfer */
-};
-
-
-/* USB CDC device Configuration Descriptor */
-__ALIGN_BEGIN static uint8_t USBD_CDC_RNDIS_CfgFSDesc[] __ALIGN_END =
-{
- /* Configuration Descriptor */
- 0x09, /* bLength: Configuration Descriptor size */
- USB_DESC_TYPE_CONFIGURATION, /* bDescriptorType: Configuration */
- LOBYTE(CDC_RNDIS_CONFIG_DESC_SIZ), /* wTotalLength: Total size of the Config descriptor */
- HIBYTE(CDC_RNDIS_CONFIG_DESC_SIZ),
- 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 */
-
- /*---------------------------------------------------------------------------*/
- /* IAD descriptor */
- 0x08, /* bLength */
- 0x0B, /* bDescriptorType */
- 0x00, /* bFirstInterface */
- 0x02, /* bInterfaceCount */
- 0xE0, /* bFunctionClass (Wireless Controller) */
- 0x01, /* bFunctionSubClass */
- 0x03, /* bFunctionProtocol */
- 0x00, /* iFunction */
-
- /*---------------------------------------------------------------------------*/
- /* Interface Descriptor */
- 0x09, /* bLength: Interface Descriptor size */
- USB_DESC_TYPE_INTERFACE, /* bDescriptorType: Interface descriptor type */
- CDC_RNDIS_CMD_ITF_NBR, /* bInterfaceNumber: Number of Interface */
- 0x00, /* bAlternateSetting: Alternate setting */
- 0x01, /* bNumEndpoints: One endpoint used */
- 0x02, /* bInterfaceClass: Communication Interface Class */
- 0x02, /* bInterfaceSubClass:Abstract Control Model */
- 0xFF, /* bInterfaceProtocol: Common AT commands */
- 0x00, /* iInterface: */
-
- /* Header Functional Descriptor */
- 0x05, /* bLength: Endpoint Descriptor size */
- 0x24, /* bDescriptorType: CS_INTERFACE */
- 0x00, /* bDescriptorSubtype: Header functional descriptor */
- 0x10, /* bcdCDC: spec release number: 1.20 */
- 0x01,
-
- /* Call Management Functional Descriptor */
- 0x05, /* bFunctionLength */
- 0x24, /* bDescriptorType: CS_INTERFACE */
- 0x01, /* bDescriptorSubtype: Call Management Func Desc */
- 0x00, /* bmCapabilities: D0+D1 */
- CDC_RNDIS_COM_ITF_NBR, /* bDataInterface: 1 */
-
- /* ACM Functional Descriptor */
- 0x04, /* bFunctionLength */
- 0x24, /* bDescriptorType: CS_INTERFACE */
- 0x02, /* bDescriptorSubtype: Abstract Control Management desc */
- 0x00, /* bmCapabilities */
-
- /* Union Functional Descriptor */
- 0x05, /* bFunctionLength */
- 0x24, /* bDescriptorType: CS_INTERFACE */
- 0x06, /* bDescriptorSubtype: Union functional descriptor */
- CDC_RNDIS_CMD_ITF_NBR, /* bMasterInterface: Communication class interface */
- CDC_RNDIS_COM_ITF_NBR, /* bSlaveInterface0: Data Class Interface */
-
- /* Notification Endpoint Descriptor */
- 0x07, /* bLength: Endpoint Descriptor size */
- USB_DESC_TYPE_ENDPOINT, /* bDescriptorType: Endpoint */
- CDC_RNDIS_CMD_EP, /* bEndpointAddress */
- 0x03, /* bmAttributes: Interrupt */
- LOBYTE(CDC_RNDIS_CMD_PACKET_SIZE), /* wMaxPacketSize: */
- HIBYTE(CDC_RNDIS_CMD_PACKET_SIZE),
- CDC_RNDIS_FS_BINTERVAL, /* bInterval */
-
- /*---------------------------------------------------------------------------*/
- /* Data class interface descriptor */
- 0x09, /* bLength: Endpoint Descriptor size */
- USB_DESC_TYPE_INTERFACE, /* bDescriptorType: */
- CDC_RNDIS_COM_ITF_NBR, /* 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_RNDIS_OUT_EP, /* bEndpointAddress */
- 0x02, /* bmAttributes: Bulk */
- LOBYTE(CDC_RNDIS_DATA_FS_MAX_PACKET_SIZE), /* wMaxPacketSize: */
- HIBYTE(CDC_RNDIS_DATA_FS_MAX_PACKET_SIZE),
- 0xFF, /* bInterval: ignore for Bulk transfer */
-
- /* Endpoint IN Descriptor */
- 0x07, /* bLength: Endpoint Descriptor size */
- USB_DESC_TYPE_ENDPOINT, /* bDescriptorType: Endpoint */
- CDC_RNDIS_IN_EP, /* bEndpointAddress */
- 0x02, /* bmAttributes: Bulk */
- LOBYTE(CDC_RNDIS_DATA_FS_MAX_PACKET_SIZE), /* wMaxPacketSize: */
- HIBYTE(CDC_RNDIS_DATA_FS_MAX_PACKET_SIZE),
- 0xFF /* bInterval: ignore for Bulk transfer */
-} ;
-
-__ALIGN_BEGIN static uint8_t USBD_CDC_RNDIS_OtherSpeedCfgDesc[] __ALIGN_END =
-{
- /* Configuration Descriptor */
- 0x09, /* bLength: Configuration Descriptor size */
- USB_DESC_TYPE_CONFIGURATION, /* bDescriptorType: Configuration */
- LOBYTE(CDC_RNDIS_CONFIG_DESC_SIZ), /* wTotalLength:no of returned bytes */
- HIBYTE(CDC_RNDIS_CONFIG_DESC_SIZ),
- 0x02, /* bNumInterfaces: 2 interface */
- 0x01, /* bConfigurationValue: Configuration value */
- 0x04, /* iConfiguration: Index of string descriptor describing the configuration */
- 0xC0, /* bmAttributes: self powered */
- 0x32, /* MaxPower 0 mA */
-
- /*---------------------------------------------------------------------------*/
- /* IAD descriptor */
- 0x08, /* bLength */
- 0x0B, /* bDescriptorType */
- 0x00, /* bFirstInterface */
- 0x02, /* bInterfaceCount */
- 0xE0, /* bFunctionClass (Wireless Controller) */
- 0x01, /* bFunctionSubClass */
- 0x03, /* bFunctionProtocol */
- 0x00, /* iFunction */
-
- /*---------------------------------------------------------------------------*/
- /* Interface Descriptor */
- 0x09, /* bLength: Interface Descriptor size */
- USB_DESC_TYPE_INTERFACE, /* bDescriptorType: Interface descriptor type */
- CDC_RNDIS_CMD_ITF_NBR, /* bInterfaceNumber: Number of Interface */
- 0x00, /* bAlternateSetting: Alternate setting */
- 0x01, /* bNumEndpoints: One endpoint used */
- 0x02, /* bInterfaceClass: Communication Interface Class */
- 0x02, /* bInterfaceSubClass:Abstract Control Model */
- 0xFF, /* bInterfaceProtocol: Common AT commands */
- 0x00, /* iInterface: */
-
- /* Header Functional Descriptor */
- 0x05, /* bLength: Endpoint Descriptor size */
- 0x24, /* bDescriptorType: CS_INTERFACE */
- 0x00, /* bDescriptorSubtype: Header functional descriptor */
- 0x10, /* bcdCDC: spec release number: 1.20 */
- 0x01,
-
- /* Call Management Functional Descriptor */
- 0x05, /* bFunctionLength */
- 0x24, /* bDescriptorType: CS_INTERFACE */
- 0x01, /* bDescriptorSubtype: Call Management Func Desc */
- 0x00, /* bmCapabilities: D0+D1 */
- CDC_RNDIS_COM_ITF_NBR, /* bDataInterface: 1 */
-
- /* ACM Functional Descriptor */
- 0x04, /* bFunctionLength */
- 0x24, /* bDescriptorType: CS_INTERFACE */
- 0x02, /* bDescriptorSubtype: Abstract Control Management desc */
- 0x00, /* bmCapabilities */
-
- /* Union Functional Descriptor */
- 0x05, /* bFunctionLength */
- 0x24, /* bDescriptorType: CS_INTERFACE */
- 0x06, /* bDescriptorSubtype: Union functional descriptor */
- CDC_RNDIS_CMD_ITF_NBR, /* bMasterInterface: Communication class interface */
- CDC_RNDIS_COM_ITF_NBR, /* bSlaveInterface0: Data Class Interface */
-
- /* Communication Endpoint Descriptor */
- 0x07, /* bLength: Endpoint Descriptor size */
- USB_DESC_TYPE_ENDPOINT, /* bDescriptorType: Endpoint */
- CDC_RNDIS_CMD_EP, /* bEndpointAddress */
- 0x03, /* bmAttributes: Interrupt */
- LOBYTE(CDC_RNDIS_CMD_PACKET_SIZE), /* wMaxPacketSize: */
- HIBYTE(CDC_RNDIS_CMD_PACKET_SIZE),
- CDC_RNDIS_FS_BINTERVAL, /* bInterval */
-
- /*---------------------------------------------------------------------------*/
- /* Data class interface descriptor */
- 0x09, /* bLength: Endpoint Descriptor size */
- USB_DESC_TYPE_INTERFACE, /* bDescriptorType: */
- CDC_RNDIS_COM_ITF_NBR, /* 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_RNDIS_OUT_EP, /* bEndpointAddress */
- 0x02, /* bmAttributes: Bulk */
- 0x40, /* wMaxPacketSize: */
- 0x00,
- 0xFF, /* bInterval: ignore for Bulk transfer */
-
- /* Endpoint IN Descriptor */
- 0x07, /* bLength: Endpoint Descriptor size */
- USB_DESC_TYPE_ENDPOINT, /* bDescriptorType: Endpoint */
- CDC_RNDIS_IN_EP, /* bEndpointAddress */
- 0x02, /* bmAttributes: Bulk */
- 0x40, /* wMaxPacketSize: */
- 0x00,
- 0xFF /* bInterval: ignore for Bulk transfer */
-};
-
-
-static const uint32_t CDC_RNDIS_SupportedOIDs[] =
-{
- OID_GEN_SUPPORTED_LIST,
- OID_GEN_HARDWARE_STATUS,
- OID_GEN_MEDIA_SUPPORTED,
- OID_GEN_MEDIA_IN_USE,
- OID_GEN_MAXIMUM_FRAME_SIZE,
- OID_GEN_LINK_SPEED,
- OID_GEN_TRANSMIT_BLOCK_SIZE,
- OID_GEN_RECEIVE_BLOCK_SIZE,
- OID_GEN_VENDOR_ID,
- OID_GEN_VENDOR_DESCRIPTION,
- OID_GEN_CURRENT_PACKET_FILTER,
- OID_GEN_MAXIMUM_TOTAL_SIZE,
- OID_GEN_MEDIA_CONNECT_STATUS,
- OID_GEN_MAXIMUM_SEND_PACKETS,
- OID_802_3_PERMANENT_ADDRESS,
- OID_802_3_CURRENT_ADDRESS,
- OID_802_3_MULTICAST_LIST,
- OID_802_3_MAXIMUM_LIST_SIZE,
- OID_802_3_RCV_ERROR_ALIGNMENT,
- OID_802_3_XMIT_ONE_COLLISION,
- OID_802_3_XMIT_MORE_COLLISIONS,
-};
-
-/**
- * @}
- */
-
-/** @defgroup USBD_CDC_RNDIS_Private_Functions
- * @{
- */
-
-/**
- * @brief USBD_CDC_RNDIS_Init
- * Initialize the CDC CDC_RNDIS interface
- * @param pdev: device instance
- * @param cfgidx: Configuration index
- * @retval status
- */
-static uint8_t USBD_CDC_RNDIS_Init(USBD_HandleTypeDef *pdev, uint8_t cfgidx)
-{
- UNUSED(cfgidx);
- USBD_CDC_RNDIS_HandleTypeDef *hcdc;
-
- hcdc = USBD_malloc(sizeof(USBD_CDC_RNDIS_HandleTypeDef));
-
- if (hcdc == NULL)
- {
- pdev->pClassData = NULL;
- return (uint8_t)USBD_EMEM;
- }
-
- pdev->pClassData = (void *)hcdc;
-
- if (pdev->dev_speed == USBD_SPEED_HIGH)
- {
- /* Open EP IN */
- (void)USBD_LL_OpenEP(pdev, CDC_RNDIS_IN_EP, USBD_EP_TYPE_BULK,
- CDC_RNDIS_DATA_HS_IN_PACKET_SIZE);
-
- pdev->ep_in[CDC_RNDIS_IN_EP & 0xFU].is_used = 1U;
-
- /* Open EP OUT */
- (void)USBD_LL_OpenEP(pdev, CDC_RNDIS_OUT_EP, USBD_EP_TYPE_BULK,
- CDC_RNDIS_DATA_HS_OUT_PACKET_SIZE);
-
- pdev->ep_out[CDC_RNDIS_OUT_EP & 0xFU].is_used = 1U;
-
- /* Set bInterval for CDC RNDIS CMD Endpoint */
- pdev->ep_in[CDC_RNDIS_CMD_EP & 0xFU].bInterval = CDC_RNDIS_HS_BINTERVAL;
- }
- else
- {
- /* Open EP IN */
- (void)USBD_LL_OpenEP(pdev, CDC_RNDIS_IN_EP, USBD_EP_TYPE_BULK,
- CDC_RNDIS_DATA_FS_IN_PACKET_SIZE);
-
- pdev->ep_in[CDC_RNDIS_IN_EP & 0xFU].is_used = 1U;
-
- /* Open EP OUT */
- (void)USBD_LL_OpenEP(pdev, CDC_RNDIS_OUT_EP, USBD_EP_TYPE_BULK,
- CDC_RNDIS_DATA_FS_OUT_PACKET_SIZE);
-
- pdev->ep_out[CDC_RNDIS_OUT_EP & 0xFU].is_used = 1U;
-
- /* Set bInterval for CDC RNDIS CMD Endpoint */
- pdev->ep_in[CDC_RNDIS_CMD_EP & 0xFU].bInterval = CDC_RNDIS_FS_BINTERVAL;
- }
-
- /* Open Command IN EP */
- (void)USBD_LL_OpenEP(pdev, CDC_RNDIS_CMD_EP, USBD_EP_TYPE_INTR, CDC_RNDIS_CMD_PACKET_SIZE);
- pdev->ep_in[CDC_RNDIS_CMD_EP & 0xFU].is_used = 1U;
-
- /* Init physical Interface components */
- ((USBD_CDC_RNDIS_ItfTypeDef *)pdev->pUserData)->Init();
-
- /* Init the CDC_RNDIS state */
- hcdc->State = CDC_RNDIS_STATE_BUS_INITIALIZED;
-
- /* Init Xfer states */
- hcdc->TxState = 0U;
- hcdc->RxState = 0U;
- hcdc->RxLength = 0U;
- hcdc->TxLength = 0U;
- hcdc->LinkStatus = 0U;
- hcdc->NotificationStatus = 0U;
- hcdc->MaxPcktLen = (pdev->dev_speed == USBD_SPEED_HIGH) ? CDC_RNDIS_DATA_HS_MAX_PACKET_SIZE : CDC_RNDIS_DATA_FS_MAX_PACKET_SIZE;
-
- /* Prepare Out endpoint to receive next packet */
- (void)USBD_LL_PrepareReceive(pdev, CDC_RNDIS_OUT_EP,
- hcdc->RxBuffer, hcdc->MaxPcktLen);
-
- return (uint8_t)USBD_OK;
-}
-
-/**
- * @brief USBD_CDC_RNDIS_DeInit
- * DeInitialize the CDC layer
- * @param pdev: device instance
- * @param cfgidx: Configuration index
- * @retval status
- */
-static uint8_t USBD_CDC_RNDIS_DeInit(USBD_HandleTypeDef *pdev, uint8_t cfgidx)
-{
- UNUSED(cfgidx);
-
- /* Close EP IN */
- (void)USBD_LL_CloseEP(pdev, CDC_RNDIS_IN_EP);
- pdev->ep_in[CDC_RNDIS_IN_EP & 0xFU].is_used = 0U;
-
- /* Close EP OUT */
- (void)USBD_LL_CloseEP(pdev, CDC_RNDIS_OUT_EP);
- pdev->ep_out[CDC_RNDIS_OUT_EP & 0xFU].is_used = 0U;
-
- /* Close Command IN EP */
- (void)USBD_LL_CloseEP(pdev, CDC_RNDIS_CMD_EP);
- pdev->ep_in[CDC_RNDIS_CMD_EP & 0xFU].is_used = 0U;
- pdev->ep_in[CDC_RNDIS_CMD_EP & 0xFU].bInterval = 0U;
-
- /* DeInit physical Interface components */
- if (pdev->pClassData != NULL)
- {
- ((USBD_CDC_RNDIS_ItfTypeDef *)pdev->pUserData)->DeInit();
- USBD_free(pdev->pClassData);
- pdev->pClassData = NULL;
- }
-
- return (uint8_t)USBD_OK;
-}
-
-/**
- * @brief USBD_CDC_RNDIS_Setup
- * Handle the CDC specific requests
- * @param pdev: instance
- * @param req: usb requests
- * @retval status
- */
-static uint8_t USBD_CDC_RNDIS_Setup(USBD_HandleTypeDef *pdev,
- USBD_SetupReqTypedef *req)
-{
- USBD_CDC_RNDIS_HandleTypeDef *hcdc = (USBD_CDC_RNDIS_HandleTypeDef *)pdev->pClassData;
- USBD_CDC_RNDIS_CtrlMsgTypeDef *Msg = (USBD_CDC_RNDIS_CtrlMsgTypeDef *)hcdc->data;
- uint8_t ifalt = 0U;
- uint16_t status_info = 0U;
- USBD_StatusTypeDef ret = USBD_OK;
-
- switch (req->bmRequest & USB_REQ_TYPE_MASK)
- {
- case USB_REQ_TYPE_CLASS :
- if (req->wLength != 0U)
- {
- /* Control Request Data from Device to Host, send data prepared by device */
- if ((req->bmRequest & 0x80U) != 0U)
- {
- /* Update opcode and length */
- hcdc->CmdOpCode = req->bRequest;
- hcdc->CmdLength = (uint8_t)req->wLength;
-
- if (hcdc->CmdOpCode == CDC_RNDIS_GET_ENCAPSULATED_RESPONSE)
- {
- /* Data of Response Message has already been prepared by USBD_CDC_RNDIS_MsgParsing.
- Just check that length is corresponding to right expected value */
- if (req->wLength != Msg->MsgLength)
- {
- }
- }
-
- /* Allow application layer to pre-process data or add own processing before sending response */
- ((USBD_CDC_RNDIS_ItfTypeDef *)pdev->pUserData)->Control(req->bRequest,
- (uint8_t *)hcdc->data,
- req->wLength);
- /* Check if Response is ready */
- if (hcdc->ResponseRdy != 0U)
- {
- /* Clear Response Ready flag */
- hcdc->ResponseRdy = 0U;
-
- /* Send data on control endpoint */
- (void)USBD_CtlSendData(pdev, (uint8_t *)hcdc->data, Msg->MsgLength);
- }
- else
- {
- /* CDC_RNDIS Specification says: If for some reason the device receives a GET ENCAPSULATED RESPONSE
- and is unable to respond with a valid data on the Control endpoint,
- then it should return a one-byte packet set to 0x00, rather than
- stalling the Control endpoint */
- (void)USBD_CtlSendData(pdev, &EmptyResponse, 1U);
- }
- }
- /* Control Request Data from Host to Device: Prepare reception of control data stage */
- else
- {
- hcdc->CmdOpCode = req->bRequest;
- hcdc->CmdLength = (uint8_t)req->wLength;
-
- (void)USBD_CtlPrepareRx(pdev, (uint8_t *)hcdc->data, req->wLength);
- }
- }
- /* No Data control request: there is no such request for CDC_RNDIS protocol,
- so let application layer manage this case */
- else
- {
- ((USBD_CDC_RNDIS_ItfTypeDef *)pdev->pUserData)->Control(req->bRequest,
- (uint8_t *)req, 0U);
- }
- 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_INTERFACE:
- if (pdev->dev_state == USBD_STATE_CONFIGURED)
- {
- (void)USBD_CtlSendData(pdev, &ifalt, 1U);
- }
- else
- {
- USBD_CtlError(pdev, req);
- ret = USBD_FAIL;
- }
- break;
-
- case USB_REQ_SET_INTERFACE:
- if (pdev->dev_state != USBD_STATE_CONFIGURED)
- {
- 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;
-}
-
-/**
- * @brief USBD_CDC_RNDIS_DataIn
- * Data sent on non-control IN endpoint
- * @param pdev: device instance
- * @param epnum: endpoint number
- * @retval status
- */
-static uint8_t USBD_CDC_RNDIS_DataIn(USBD_HandleTypeDef *pdev, uint8_t epnum)
-{
- USBD_CDC_RNDIS_HandleTypeDef *hcdc;
- PCD_HandleTypeDef *hpcd = pdev->pData;
-
- if (pdev->pClassData == NULL)
- {
- return (uint8_t)USBD_FAIL;
- }
-
- hcdc = (USBD_CDC_RNDIS_HandleTypeDef *)pdev->pClassData;
-
- if (epnum == (CDC_RNDIS_IN_EP & 0x7FU))
- {
- if ((pdev->ep_in[epnum & 0xFU].total_length > 0U) &&
- ((pdev->ep_in[epnum & 0xFU].total_length % hpcd->IN_ep[epnum & 0xFU].maxpacket) == 0U))
- {
- /* Update the packet total length */
- pdev->ep_in[epnum & 0xFU].total_length = 0U;
-
- /* Send ZLP */
- (void)USBD_LL_Transmit(pdev, epnum, NULL, 0U);
- }
- else
- {
- hcdc->TxState = 0U;
- ((USBD_CDC_RNDIS_ItfTypeDef *)pdev->pUserData)->TransmitCplt(hcdc->TxBuffer, &hcdc->TxLength, epnum);
- }
- }
- else if (epnum == (CDC_RNDIS_CMD_EP & 0x7FU))
- {
- if (hcdc->NotificationStatus != 0U)
- {
- (void)USBD_CDC_RNDIS_SendNotification(pdev, CONNECTION_SPEED_CHANGE,
- 0U, (uint8_t *)ConnSpeedTab);
-
- hcdc->NotificationStatus = 0U;
- }
- }
- else
- {
- return (uint8_t)USBD_FAIL;
- }
-
- return (uint8_t)USBD_OK;
-}
-
-/**
- * @brief USBD_CDC_RNDIS_DataOut
- * Data received on non-control Out endpoint
- * @param pdev: device instance
- * @param epnum: endpoint number
- * @retval status
- */
-static uint8_t USBD_CDC_RNDIS_DataOut(USBD_HandleTypeDef *pdev, uint8_t epnum)
-{
- USBD_CDC_RNDIS_HandleTypeDef *hcdc;
- uint32_t CurrPcktLen;
-
- if (pdev->pClassData == NULL)
- {
- return (uint8_t)USBD_FAIL;
- }
-
- hcdc = (USBD_CDC_RNDIS_HandleTypeDef *)pdev->pClassData;
-
- if (epnum == CDC_RNDIS_OUT_EP)
- {
- /* Get the received data length */
- CurrPcktLen = USBD_LL_GetRxDataSize(pdev, epnum);
-
- /* Increment the frame length */
- hcdc->RxLength += CurrPcktLen;
-
- /* If the buffer size is less than max packet size: it is the last packet in current frame */
- if ((CurrPcktLen < hcdc->MaxPcktLen) ||
- (hcdc->RxLength >= (CDC_RNDIS_ETH_MAX_SEGSZE + sizeof(USBD_CDC_RNDIS_PacketMsgTypeDef))))
- {
- /* USB data will be immediately processed, this allow next USB traffic being
- NACKed till the end of the application Xfer */
-
- /* Call data packet message parsing and processing function */
- (void)USBD_CDC_RNDIS_ProcessPacketMsg(pdev, (USBD_CDC_RNDIS_PacketMsgTypeDef *)hcdc->RxBuffer);
- }
- else
- {
- /* Prepare Out endpoint to receive next packet in current/new frame */
- (void)USBD_LL_PrepareReceive(pdev, CDC_RNDIS_OUT_EP,
- (uint8_t *)(hcdc->RxBuffer + hcdc->RxLength),
- hcdc->MaxPcktLen);
- }
- }
- else
- {
- return (uint8_t)USBD_FAIL;
- }
-
- return (uint8_t)USBD_OK;
-}
-
-/**
- * @brief USBD_CDC_RNDIS_EP0_RxReady
- * Handle EP0 Rx Ready event
- * @param pdev: device instance
- * @retval status
- */
-static uint8_t USBD_CDC_RNDIS_EP0_RxReady(USBD_HandleTypeDef *pdev)
-{
- USBD_CDC_RNDIS_HandleTypeDef *hcdc = (USBD_CDC_RNDIS_HandleTypeDef *)pdev->pClassData;
-
- if ((pdev->pUserData != NULL) && (hcdc->CmdOpCode != 0xFFU))
- {
- /* Check if the received command is SendEncapsulated command */
- if (hcdc->CmdOpCode == CDC_RNDIS_SEND_ENCAPSULATED_COMMAND)
- {
- /* Process Received CDC_RNDIS Control Message */
- (void)USBD_CDC_RNDIS_MsgParsing(pdev, (uint8_t *)(hcdc->data));
-
- /* Reset the command opcode for next processing */
- hcdc->CmdOpCode = 0xFFU;
- }
- else
- {
- /* Reset the command opcode for next processing */
- hcdc->CmdOpCode = 0xFFU;
-
- /* Ignore the command and return fail */
- return (uint8_t)USBD_FAIL;
- }
- }
-
- return (uint8_t)USBD_OK;
-}
-
-/**
- * @brief USBD_CDC_RNDIS_GetFSCfgDesc
- * Return configuration descriptor
- * @param speed : current device speed
- * @param length : pointer data length
- * @retval pointer to descriptor buffer
- */
-static uint8_t *USBD_CDC_RNDIS_GetFSCfgDesc(uint16_t *length)
-{
- *length = (uint16_t)(sizeof(USBD_CDC_RNDIS_CfgFSDesc));
-
- return USBD_CDC_RNDIS_CfgFSDesc;
-}
-
-/**
- * @brief USBD_CDC_RNDIS_GetHSCfgDesc
- * Return configuration descriptor
- * @param speed : current device speed
- * @param length : pointer data length
- * @retval pointer to descriptor buffer
- */
-static uint8_t *USBD_CDC_RNDIS_GetHSCfgDesc(uint16_t *length)
-{
- *length = (uint16_t)(sizeof(USBD_CDC_RNDIS_CfgHSDesc));
-
- return USBD_CDC_RNDIS_CfgHSDesc;
-}
-
-/**
- * @brief USBD_CDC_RNDIS_GetOtherSpeedCfgDesc
- * Return configuration descriptor
- * @param speed : current device speed
- * @param length : pointer data length
- * @retval pointer to descriptor buffer
- */
-static uint8_t *USBD_CDC_RNDIS_GetOtherSpeedCfgDesc(uint16_t *length)
-{
- *length = (uint16_t)(sizeof(USBD_CDC_RNDIS_OtherSpeedCfgDesc));
-
- return USBD_CDC_RNDIS_OtherSpeedCfgDesc;
-}
-
-/**
- * @brief DeviceQualifierDescriptor
- * return Device Qualifier descriptor
- * @param length : pointer data length
- * @retval pointer to descriptor buffer
- */
-uint8_t *USBD_CDC_RNDIS_GetDeviceQualifierDescriptor(uint16_t *length)
-{
- *length = (uint16_t)(sizeof(USBD_CDC_RNDIS_DeviceQualifierDesc));
-
- return USBD_CDC_RNDIS_DeviceQualifierDesc;
-}
-
-/**
- * @brief USBD_CDC_RNDIS_RegisterInterface
- * @param pdev: device instance
- * @param fops: CD Interface callback
- * @retval status
- */
-uint8_t USBD_CDC_RNDIS_RegisterInterface(USBD_HandleTypeDef *pdev,
- USBD_CDC_RNDIS_ItfTypeDef *fops)
-{
- if (fops == NULL)
- {
- return (uint8_t)USBD_FAIL;
- }
-
- pdev->pUserData = fops;
-
- return (uint8_t)USBD_OK;
-}
-
-
-/**
- * @brief USBD_CDC_RNDIS_USRStringDescriptor
- * Manages the transfer of user string descriptors.
- * @param speed : current device speed
- * @param index: descriptor 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_DESC == 1U)
-static uint8_t *USBD_CDC_RNDIS_USRStringDescriptor(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 == CDC_RNDIS_MAC_STRING_INDEX)
- {
- USBD_GetString((uint8_t *)((USBD_CDC_RNDIS_ItfTypeDef *)pdev->pUserData)->pStrDesc, USBD_StrDesc, length);
- return USBD_StrDesc;
- }
- /* Not supported Interface Descriptor index */
- else
- {
- return NULL;
- }
-}
-#endif /* USBD_SUPPORT_USER_STRING_DESC */
-
-/**
- * @brief USBD_CDC_RNDIS_SetTxBuffer
- * @param pdev: device instance
- * @param pbuff: Tx Buffer
- * @retval status
- */
-uint8_t USBD_CDC_RNDIS_SetTxBuffer(USBD_HandleTypeDef *pdev, uint8_t *pbuff, uint32_t length)
-{
- USBD_CDC_RNDIS_HandleTypeDef *hcdc = (USBD_CDC_RNDIS_HandleTypeDef *)pdev->pClassData;
-
- hcdc->TxBuffer = pbuff;
- hcdc->TxLength = length;
-
- return (uint8_t)USBD_OK;
-}
-
-
-/**
- * @brief USBD_CDC_RNDIS_SetRxBuffer
- * @param pdev: device instance
- * @param pbuff: Rx Buffer
- * @retval status
- */
-uint8_t USBD_CDC_RNDIS_SetRxBuffer(USBD_HandleTypeDef *pdev, uint8_t *pbuff)
-{
- USBD_CDC_RNDIS_HandleTypeDef *hcdc = (USBD_CDC_RNDIS_HandleTypeDef *)pdev->pClassData;
-
- hcdc->RxBuffer = pbuff;
-
- return (uint8_t)USBD_OK;
-}
-
-
-/**
- * @brief USBD_CDC_RNDIS_TransmitPacket
- * Transmit packet on IN endpoint
- * @param pdev: device instance
- * @retval status
- */
-uint8_t USBD_CDC_RNDIS_TransmitPacket(USBD_HandleTypeDef *pdev)
-{
- USBD_CDC_RNDIS_HandleTypeDef *hcdc;
- USBD_CDC_RNDIS_PacketMsgTypeDef *PacketMsg;
- USBD_StatusTypeDef ret = USBD_BUSY;
-
- if (pdev->pClassData == NULL)
- {
- return (uint8_t)USBD_FAIL;
- }
-
- hcdc = (USBD_CDC_RNDIS_HandleTypeDef *)pdev->pClassData;
- PacketMsg = (USBD_CDC_RNDIS_PacketMsgTypeDef *)hcdc->TxBuffer;
-
- if (hcdc->TxState == 0U)
- {
- /* Tx Transfer in progress */
- hcdc->TxState = 1U;
-
- /* Format the packet information */
- PacketMsg->MsgType = CDC_RNDIS_PACKET_MSG_ID;
- PacketMsg->MsgLength = hcdc->TxLength;
- PacketMsg->DataOffset = sizeof(USBD_CDC_RNDIS_PacketMsgTypeDef) - CDC_RNDIS_PCKTMSG_DATAOFFSET_OFFSET;
- PacketMsg->DataLength = hcdc->TxLength - sizeof(USBD_CDC_RNDIS_PacketMsgTypeDef);
- PacketMsg->OOBDataOffset = 0U;
- PacketMsg->OOBDataLength = 0U;
- PacketMsg->NumOOBDataElements = 0U;
- PacketMsg->PerPacketInfoOffset = 0U;
- PacketMsg->PerPacketInfoLength = 0U;
- PacketMsg->VcHandle = 0U;
- PacketMsg->Reserved = 0U;
-
- /* Update the packet total length */
- pdev->ep_in[CDC_RNDIS_IN_EP & 0xFU].total_length = hcdc->TxLength;
-
- /* Transmit next packet */
- (void)USBD_LL_Transmit(pdev, CDC_RNDIS_IN_EP, hcdc->TxBuffer, hcdc->TxLength);
-
- ret = USBD_OK;
- }
-
- return (uint8_t)ret;
-}
-
-
-/**
- * @brief USBD_CDC_RNDIS_ReceivePacket
- * prepare OUT Endpoint for reception
- * @param pdev: device instance
- * @retval status
- */
-uint8_t USBD_CDC_RNDIS_ReceivePacket(USBD_HandleTypeDef *pdev)
-{
- USBD_CDC_RNDIS_HandleTypeDef *hcdc;
-
- if (pdev->pClassData == NULL)
- {
- return (uint8_t)USBD_FAIL;
- }
-
- hcdc = (USBD_CDC_RNDIS_HandleTypeDef *)pdev->pClassData;
-
- /* Prepare Out endpoint to receive next packet */
- (void)USBD_LL_PrepareReceive(pdev, CDC_RNDIS_OUT_EP,
- hcdc->RxBuffer, hcdc->MaxPcktLen);
-
- return (uint8_t)USBD_OK;
-}
-
-
-/**
- * @brief USBD_CDC_RNDIS_SendNotification
- * Transmit Notification packet on CMD IN interrupt endpoint
- * @param pdev: device instance
- * Notif: value of the notification type (from CDC_RNDIS_Notification_TypeDef enumeration list)
- * bVal: value of the notification switch (ie. 0x00 or 0x01 for Network Connection notification)
- * pData: pointer to data buffer (ie. upstream and downstream connection speed values)
- * @retval status
- */
-uint8_t USBD_CDC_RNDIS_SendNotification(USBD_HandleTypeDef *pdev,
- USBD_CDC_RNDIS_NotifCodeTypeDef Notif,
- uint16_t bVal, uint8_t *pData)
-{
- uint32_t Idx;
- uint16_t ReqSize = 0U;
- USBD_CDC_RNDIS_HandleTypeDef *hcdc = (USBD_CDC_RNDIS_HandleTypeDef *)pdev->pClassData;
- USBD_StatusTypeDef ret = USBD_OK;
-
- UNUSED(bVal);
- UNUSED(pData);
-
- /* Initialize the request fields */
- (hcdc->Req).bmRequest = CDC_RNDIS_BMREQUEST_TYPE_RNDIS;
- (hcdc->Req).bRequest = (uint8_t)Notif;
-
- switch (Notif)
- {
- case RESPONSE_AVAILABLE:
- (hcdc->Req).wValue = 0U;
- (hcdc->Req).wIndex = CDC_RNDIS_CMD_ITF_NBR;
- (hcdc->Req).wLength = 0U;
- for (Idx = 0U; Idx < 8U; Idx++)
- {
- (hcdc->Req).data[Idx] = 0U;
- }
- ReqSize = 8U;
- break;
-
- default:
- ret = USBD_FAIL;
- break;
- }
-
- /* Transmit notification packet */
- if (ReqSize != 0U)
- {
- (void)USBD_LL_Transmit(pdev, CDC_RNDIS_CMD_EP, (uint8_t *)&(hcdc->Req), ReqSize);
- }
-
- return (uint8_t)ret;
-}
-
-
-/* ----------------------------- CDC_RNDIS Messages processing functions ----------------------- */
-/**
- * @brief USBD_CDC_RNDIS_MsgParsing
- * Parse received message and process it depending on its nature.
- * @param pdev: USB Device Handle pointer
- * @param RxBuff: Pointer to the message data extracted from SendEncapsulated command
- * @retval status
- */
-static uint8_t USBD_CDC_RNDIS_MsgParsing(USBD_HandleTypeDef *pdev, uint8_t *RxBuff)
-{
- USBD_CDC_RNDIS_CtrlMsgTypeDef *Msg = (USBD_CDC_RNDIS_CtrlMsgTypeDef *)RxBuff;
- static uint8_t ret = (uint8_t)USBD_OK;
-
- /* Check message type */
- switch (Msg->MsgType)
- {
- /* CDC_RNDIS Initialize message */
- case CDC_RNDIS_INITIALIZE_MSG_ID:
- ret = USBD_CDC_RNDIS_ProcessInitMsg(pdev, (USBD_CDC_RNDIS_InitMsgTypeDef *)Msg);
- break;
-
- /* CDC_RNDIS Halt message */
- case CDC_RNDIS_HALT_MSG_ID:
- ret = USBD_CDC_RNDIS_ProcessHaltMsg(pdev, (USBD_CDC_RNDIS_HaltMsgTypeDef *)Msg);
- break;
-
- /* CDC_RNDIS Query message */
- case CDC_RNDIS_QUERY_MSG_ID:
- ret = USBD_CDC_RNDIS_ProcessQueryMsg(pdev, (USBD_CDC_RNDIS_QueryMsgTypeDef *)Msg);
- break;
-
- /* CDC_RNDIS Set message */
- case CDC_RNDIS_SET_MSG_ID:
- ret = USBD_CDC_RNDIS_ProcessSetMsg(pdev, (USBD_CDC_RNDIS_SetMsgTypeDef *)Msg);
- break;
-
- /* CDC_RNDIS Reset message */
- case CDC_RNDIS_RESET_MSG_ID:
- ret = USBD_CDC_RNDIS_ProcessResetMsg(pdev, (USBD_CDC_RNDIS_ResetMsgTypeDef *)Msg);
- break;
-
- /* CDC_RNDIS Keep-Alive message */
- case CDC_RNDIS_KEEPALIVE_MSG_ID:
- ret = USBD_CDC_RNDIS_ProcessKeepAliveMsg(pdev, (USBD_CDC_RNDIS_KpAliveMsgTypeDef *)Msg);
- break;
-
- /* CDC_RNDIS unsupported message */
- default:
- ret = USBD_CDC_RNDIS_ProcessUnsupportedMsg(pdev, (USBD_CDC_RNDIS_CtrlMsgTypeDef *)Msg);
- break;
- }
-
- return ret;
-}
-
-
-/**
- * @brief USBD_CDC_RNDIS_ProcessInitMsg
- * Parse, extract data and check correctness of CDC_RNDIS INIT_MSG command.
- * @param pdev: USB Device Handle pointer
- * @param Msg: Pointer to the message data extracted from SendEncapsulated command
- * @retval status
- */
-static uint8_t USBD_CDC_RNDIS_ProcessInitMsg(USBD_HandleTypeDef *pdev,
- USBD_CDC_RNDIS_InitMsgTypeDef *Msg)
-{
- /* Get the CDC_RNDIS handle pointer */
- USBD_CDC_RNDIS_HandleTypeDef *hcdc = (USBD_CDC_RNDIS_HandleTypeDef *)pdev->pClassData;
-
- /* Get and format the Msg input */
- USBD_CDC_RNDIS_InitMsgTypeDef *InitMessage = (USBD_CDC_RNDIS_InitMsgTypeDef *)Msg;
-
- /* Use same Msg input buffer as response buffer */
- USBD_CDC_RNDIS_InitCpltMsgTypeDef *InitResponse = (USBD_CDC_RNDIS_InitCpltMsgTypeDef *)Msg;
-
- /* Store the Message Request ID */
- uint32_t ReqId = InitMessage->ReqId;
-
- /* Check correctness of the message (MsgType already checked by entry to this function) */
- if ((InitMessage->MsgLength != sizeof(USBD_CDC_RNDIS_InitMsgTypeDef)) || \
- (InitMessage->MajorVersion < CDC_RNDIS_VERSION_MAJOR))
- {
- InitResponse->Status = CDC_RNDIS_STATUS_FAILURE;
- }
- else
- {
- InitResponse->Status = CDC_RNDIS_STATUS_SUCCESS;
- }
-
- /* Setup the response buffer content */
- InitResponse->MsgType = CDC_RNDIS_INITIALIZE_CMPLT_ID;
- InitResponse->MsgLength = sizeof(USBD_CDC_RNDIS_InitCpltMsgTypeDef);
- InitResponse->ReqId = ReqId;
- InitResponse->MajorVersion = CDC_RNDIS_VERSION_MAJOR;
- InitResponse->MinorVersion = CDC_RNDIS_VERSION_MINOR;
- InitResponse->DeviceFlags = CDC_RNDIS_DF_CONNECTIONLESS;
- InitResponse->Medium = CDC_RNDIS_MEDIUM_802_3;
- InitResponse->MaxPacketsPerTransfer = 1U;
- InitResponse->MaxTransferSize = (sizeof(USBD_CDC_RNDIS_PacketMsgTypeDef) + CDC_RNDIS_ETH_FRAME_SIZE_MAX);
- InitResponse->PacketAlignmentFactor = 2U; /* Not needed as single packet by transfer set */
- InitResponse->AFListOffset = 0U; /* Reserved for connection-oriented devices. Set value to zero. */
- InitResponse->AFListSize = 0U; /* Reserved for connection-oriented devices. Set value to zero. */
-
- /* Set CDC_RNDIS state to INITIALIZED */
- hcdc->State = CDC_RNDIS_STATE_INITIALIZED;
-
- /* Set Response Ready field in order to send response during next control request */
- hcdc->ResponseRdy = 1U;
-
- /* Send Notification on Interrupt EP to inform Host that response is ready */
- (void)USBD_CDC_RNDIS_SendNotification(pdev, RESPONSE_AVAILABLE, 0U, NULL);
-
- return (uint8_t)USBD_OK;
-}
-
-
-/**
- * @brief USBD_CDC_RNDIS_ProcessHaltMsg
- * Parse, extract data and check correctness of CDC_RNDIS Halt command.
- * @param pdev: USB Device Handle pointer
- * @param Msg: Pointer to the message data extracted from SendEncapsulated command
- * @retval status
- */
-static uint8_t USBD_CDC_RNDIS_ProcessHaltMsg(USBD_HandleTypeDef *pdev,
- USBD_CDC_RNDIS_HaltMsgTypeDef *Msg)
-{
- /* Get the CDC_RNDIS handle pointer */
- USBD_CDC_RNDIS_HandleTypeDef *hcdc = (USBD_CDC_RNDIS_HandleTypeDef *)pdev->pClassData;
-
- /* Set CDC_RNDIS state to INITIALIZED */
- hcdc->State = CDC_RNDIS_STATE_UNINITIALIZED;
-
- /* No response required for this message, so no notification (RESPNSE_AVAILABLE) is sent */
-
- UNUSED(Msg);
-
- return (uint8_t)USBD_OK;
-}
-
-
-/**
- * @brief USBD_CDC_RNDIS_ProcessKeepAliveMsg
- * Parse, extract data and check correctness of CDC_RNDIS KeepAlive command.
- * @param pdev: USB Device Handle pointer
- * @param Msg: Pointer to the message data extracted from SendEncapsulated command
- * @retval status
- */
-static uint8_t USBD_CDC_RNDIS_ProcessKeepAliveMsg(USBD_HandleTypeDef *pdev,
- USBD_CDC_RNDIS_KpAliveMsgTypeDef *Msg)
-{
- /* Get the CDC_RNDIS handle pointer */
- USBD_CDC_RNDIS_HandleTypeDef *hcdc = (USBD_CDC_RNDIS_HandleTypeDef *)pdev->pClassData;
-
- /* Use same Msg input buffer as response buffer */
- USBD_CDC_RNDIS_KpAliveCpltMsgTypeDef *InitResponse = (USBD_CDC_RNDIS_KpAliveCpltMsgTypeDef *)Msg;
-
- /* Store the Message Request ID */
- uint32_t ReqId = Msg->ReqId;
-
- /* Check correctness of the message (MsgType already checked by entry to this function) */
- if (Msg->MsgLength != sizeof(USBD_CDC_RNDIS_KpAliveMsgTypeDef))
- {
- InitResponse->Status = CDC_RNDIS_STATUS_FAILURE;
- }
- else
- {
- InitResponse->Status = CDC_RNDIS_STATUS_SUCCESS;
- }
-
- /* Setup the response buffer content */
- InitResponse->MsgType = CDC_RNDIS_KEEPALIVE_CMPLT_ID;
- InitResponse->MsgLength = sizeof(USBD_CDC_RNDIS_KpAliveCpltMsgTypeDef);
- InitResponse->ReqId = ReqId;
- InitResponse->Status = CDC_RNDIS_STATUS_SUCCESS;
-
- /* Set Response Ready field in order to send response during next control request */
- hcdc->ResponseRdy = 1U;
-
- /* Send Notification on Interrupt EP to inform Host that response is ready */
- (void)USBD_CDC_RNDIS_SendNotification(pdev, RESPONSE_AVAILABLE, 0U, NULL);
-
- return (uint8_t)USBD_OK;
-}
-
-
-/**
- * @brief USBD_CDC_RNDIS_ProcessQueryMsg
- * Parse, extract data and check correctness of CDC_RNDIS Query command.
- * @param pdev: USB Device Handle pointer
- * @param Msg: Pointer to the message data extracted from SendEncapsulated command
- * @retval status
- */
-static uint8_t USBD_CDC_RNDIS_ProcessQueryMsg(USBD_HandleTypeDef *pdev,
- USBD_CDC_RNDIS_QueryMsgTypeDef *Msg)
-{
- /* Get the CDC_RNDIS handle pointer */
- USBD_CDC_RNDIS_HandleTypeDef *hcdc = (USBD_CDC_RNDIS_HandleTypeDef *)pdev->pClassData;
-
- /* Use same Msg input buffer as response buffer */
- USBD_CDC_RNDIS_QueryCpltMsgTypeDef *QueryResponse = (USBD_CDC_RNDIS_QueryCpltMsgTypeDef *)Msg;
-
- /* Store the Message Request ID */
- uint32_t ReqId = Msg->RequestId;
-
- /* Process the OID depending on its code */
- switch (Msg->Oid)
- {
- case OID_GEN_SUPPORTED_LIST:
- QueryResponse->InfoBufLength = sizeof(CDC_RNDIS_SupportedOIDs);
- (void)USBD_memcpy(QueryResponse->InfoBuf, CDC_RNDIS_SupportedOIDs,
- sizeof(CDC_RNDIS_SupportedOIDs));
-
- QueryResponse->Status = CDC_RNDIS_STATUS_SUCCESS;
- break;
-
- case OID_GEN_HARDWARE_STATUS:
- QueryResponse->InfoBufLength = sizeof(uint32_t);
- QueryResponse->InfoBuf[0] = CDC_RNDIS_HW_STS_READY;
- QueryResponse->Status = CDC_RNDIS_STATUS_SUCCESS;
- break;
-
- case OID_GEN_MEDIA_SUPPORTED:
- case OID_GEN_MEDIA_IN_USE:
- QueryResponse->InfoBufLength = sizeof(uint32_t);
- QueryResponse->InfoBuf[0] = CDC_RNDIS_MEDIUM_802_3;
- QueryResponse->Status = CDC_RNDIS_STATUS_SUCCESS;
- break;
-
- case OID_GEN_VENDOR_ID:
- QueryResponse->InfoBufLength = sizeof(uint32_t);
- QueryResponse->InfoBuf[0] = USBD_CDC_RNDIS_VID;
- QueryResponse->Status = CDC_RNDIS_STATUS_SUCCESS;
- break;
-
- case OID_GEN_MAXIMUM_FRAME_SIZE:
- case OID_GEN_TRANSMIT_BLOCK_SIZE:
- case OID_GEN_RECEIVE_BLOCK_SIZE:
- QueryResponse->InfoBufLength = sizeof(uint32_t);
- QueryResponse->InfoBuf[0] = CDC_RNDIS_ETH_FRAME_SIZE_MAX;
- QueryResponse->Status = CDC_RNDIS_STATUS_SUCCESS;
- break;
-
- case OID_GEN_VENDOR_DESCRIPTION:
- QueryResponse->InfoBufLength = (strlen(USBD_CDC_RNDIS_VENDOR_DESC) + 1U);
- (void)USBD_memcpy(QueryResponse->InfoBuf, USBD_CDC_RNDIS_VENDOR_DESC,
- strlen(USBD_CDC_RNDIS_VENDOR_DESC));
-
- QueryResponse->Status = CDC_RNDIS_STATUS_SUCCESS;
- break;
-
- case OID_GEN_MEDIA_CONNECT_STATUS:
- QueryResponse->InfoBufLength = sizeof(uint32_t);
- QueryResponse->InfoBuf[0] = CDC_RNDIS_MEDIA_STATE_CONNECTED;
- QueryResponse->Status = CDC_RNDIS_STATUS_SUCCESS;
- break;
-
- case OID_GEN_MAXIMUM_SEND_PACKETS:
- QueryResponse->InfoBufLength = sizeof(uint32_t);
- QueryResponse->InfoBuf[0] = 1U;
- QueryResponse->Status = CDC_RNDIS_STATUS_SUCCESS;
- break;
-
- case OID_GEN_LINK_SPEED:
- QueryResponse->InfoBufLength = sizeof(uint32_t);
- QueryResponse->InfoBuf[0] = USBD_CDC_RNDIS_LINK_SPEED;
- QueryResponse->Status = CDC_RNDIS_STATUS_SUCCESS;
- break;
-
- case OID_802_3_PERMANENT_ADDRESS:
- case OID_802_3_CURRENT_ADDRESS:
- QueryResponse->InfoBufLength = 6U;
- (void)USBD_memcpy(QueryResponse->InfoBuf, MAC_StrDesc, 6);
- QueryResponse->Status = CDC_RNDIS_STATUS_SUCCESS;
- break;
-
- case OID_802_3_MAXIMUM_LIST_SIZE:
- QueryResponse->InfoBufLength = sizeof(uint32_t);
- QueryResponse->InfoBuf[0] = 1U; /* Only one multicast address supported */
- QueryResponse->Status = CDC_RNDIS_STATUS_SUCCESS;
- break;
-
- case OID_GEN_CURRENT_PACKET_FILTER:
- QueryResponse->InfoBufLength = sizeof(uint32_t);
- QueryResponse->InfoBuf[0] = 0xFFFFFFU; /* USBD_CDC_RNDIS_DEVICE.packetFilter; */
- QueryResponse->Status = CDC_RNDIS_STATUS_SUCCESS;
- break;
-
- case OID_802_3_RCV_ERROR_ALIGNMENT:
- case OID_802_3_XMIT_ONE_COLLISION:
- case OID_802_3_XMIT_MORE_COLLISIONS:
- QueryResponse->InfoBufLength = sizeof(uint32_t);
- QueryResponse->InfoBuf[0] = 0U; /* Unused OIDs, return zero */
- QueryResponse->Status = CDC_RNDIS_STATUS_SUCCESS;
- break;
-
- case OID_GEN_MAXIMUM_TOTAL_SIZE:
- QueryResponse->InfoBufLength = sizeof(uint32_t);
- /* Indicate maximum overall buffer (Ethernet frame and CDC_RNDIS header) the adapter can handle */
- QueryResponse->InfoBuf[0] = (CDC_RNDIS_MESSAGE_BUFFER_SIZE + CDC_RNDIS_ETH_FRAME_SIZE_MAX);
- QueryResponse->Status = CDC_RNDIS_STATUS_SUCCESS;
- break;
-
- default:
- /* Unknown or unsupported OID */
- QueryResponse->InfoBufLength = 0U;
- QueryResponse->Status = CDC_RNDIS_STATUS_FAILURE;
- break;
- }
-
- /* Setup the response buffer content */
- QueryResponse->MsgType = CDC_RNDIS_QUERY_CMPLT_ID;
- QueryResponse->MsgLength = QueryResponse->InfoBufLength + 24U;
- QueryResponse->ReqId = ReqId;
- QueryResponse->InfoBufOffset = 16U;
-
- /* Set Response Ready field in order to send response during next control request */
- hcdc->ResponseRdy = 1U;
-
- /* Send Notification on Interrupt EP to inform Host that response is ready */
- (void)USBD_CDC_RNDIS_SendNotification(pdev, RESPONSE_AVAILABLE, 0U, NULL);
-
- return(uint8_t)USBD_OK;
-}
-
-
-/**
- * @brief USBD_CDC_RNDIS_ProcessSetMsg
- * Parse, extract data and check correctness of CDC_RNDIS Set Message command.
- * @param pdev: USB Device Handle pointer
- * @param Msg: Pointer to the message data extracted from SendEncapsulated command
- * @retval status
- */
-static uint8_t USBD_CDC_RNDIS_ProcessSetMsg(USBD_HandleTypeDef *pdev,
- USBD_CDC_RNDIS_SetMsgTypeDef *Msg)
-{
- /* Get the CDC_RNDIS handle pointer */
- USBD_CDC_RNDIS_HandleTypeDef *hcdc = (USBD_CDC_RNDIS_HandleTypeDef *)pdev->pClassData;
-
- /* Get and format the Msg input */
- USBD_CDC_RNDIS_SetMsgTypeDef *SetMessage = (USBD_CDC_RNDIS_SetMsgTypeDef *)Msg;
-
- /* Use same Msg input buffer as response buffer */
- USBD_CDC_RNDIS_SetCpltMsgTypeDef *SetResponse = (USBD_CDC_RNDIS_SetCpltMsgTypeDef *)Msg;
-
- /* Store the Message Request ID */
- uint32_t ReqId = SetMessage->ReqId;
-
- switch (SetMessage->Oid)
- {
- case OID_GEN_CURRENT_PACKET_FILTER:
- /* Setup the packet filter value */
- hcdc->PacketFilter = SetMessage->InfoBuf[0];
- SetResponse->Status = CDC_RNDIS_STATUS_SUCCESS;
- break;
-
- case OID_802_3_MULTICAST_LIST:
- /* List of multicast addresses on a miniport adapter */
- SetResponse->Status = CDC_RNDIS_STATUS_SUCCESS;
- break;
-
- default:
- /* Report an error */
- SetResponse->Status = CDC_RNDIS_STATUS_FAILURE;
- break;
- }
-
- /* Prepare response buffer */
- SetResponse->MsgType = CDC_RNDIS_SET_CMPLT_ID;
- SetResponse->MsgLength = sizeof(USBD_CDC_RNDIS_SetCpltMsgTypeDef);
- SetResponse->ReqId = ReqId;
-
- /* Set Response Ready field in order to send response during next control request */
- hcdc->ResponseRdy = 1U;
-
- /* Send Notification on Interrupt EP to inform Host that response is ready */
- (void)USBD_CDC_RNDIS_SendNotification(pdev, RESPONSE_AVAILABLE, 0U, NULL);
-
- return (uint8_t)USBD_OK;
-}
-
-
-/**
- * @brief USBD_CDC_RNDIS_ProcessResetMsg
- * Parse, extract data and check correctness of CDC_RNDIS Set Message command.
- * @param pdev: USB Device Handle pointer
- * @param Msg: Pointer to the message data extracted from SendEncapsulated command
- * @retval status
- */
-static uint8_t USBD_CDC_RNDIS_ProcessResetMsg(USBD_HandleTypeDef *pdev,
- USBD_CDC_RNDIS_ResetMsgTypeDef *Msg)
-{
- /* Get and format the Msg input */
- USBD_CDC_RNDIS_ResetMsgTypeDef *ResetMessage = (USBD_CDC_RNDIS_ResetMsgTypeDef *)Msg;
- /* Get the CDC_RNDIS handle pointer */
- USBD_CDC_RNDIS_HandleTypeDef *hcdc = (USBD_CDC_RNDIS_HandleTypeDef *)pdev->pClassData;
- /* Use same Msg input buffer as response buffer */
- USBD_CDC_RNDIS_ResetCpltMsgTypeDef *ResetResponse = (USBD_CDC_RNDIS_ResetCpltMsgTypeDef *)Msg;
-
- if ((ResetMessage->MsgLength != sizeof(USBD_CDC_RNDIS_ResetMsgTypeDef)) || \
- (ResetMessage->Reserved != 0U))
- {
- ResetResponse->Status = CDC_RNDIS_STATUS_FAILURE;
- }
- else
- {
- ResetResponse->Status = CDC_RNDIS_STATUS_SUCCESS;
- }
-
- /* Prepare response buffer */
- ResetResponse->MsgType = CDC_RNDIS_RESET_CMPLT_ID;
- ResetResponse->MsgLength = sizeof(USBD_CDC_RNDIS_ResetCpltMsgTypeDef);
- ResetResponse->AddrReset = 0U;
-
- /* Set CDC_RNDIS state to INITIALIZED */
- hcdc->State = CDC_RNDIS_STATE_BUS_INITIALIZED;
- hcdc->LinkStatus = 0U;
-
- /* Set Response Ready field in order to send response during next control request */
- hcdc->ResponseRdy = 1U;
-
- /* Send Notification on Interrupt EP to inform Host that response is ready */
- (void)USBD_CDC_RNDIS_SendNotification(pdev, RESPONSE_AVAILABLE, 0U, NULL);
-
- return (uint8_t)USBD_OK;
-}
-
-
-/**
- * @brief USBD_CDC_RNDIS_ProcessPacketMsg
- * Parse, extract data and check correctness of CDC_RNDIS Data Packet.
- * @param pdev: USB Device Handle pointer
- * @param Msg: Pointer to the message data extracted from Packet
- * @retval status
- */
-static uint8_t USBD_CDC_RNDIS_ProcessPacketMsg(USBD_HandleTypeDef *pdev,
- USBD_CDC_RNDIS_PacketMsgTypeDef *Msg)
-{
- uint32_t tmp1, tmp2;
-
- /* Get the CDC_RNDIS handle pointer */
- USBD_CDC_RNDIS_HandleTypeDef *hcdc = (USBD_CDC_RNDIS_HandleTypeDef *)pdev->pClassData;
-
- /* Get and format the Msg input */
- USBD_CDC_RNDIS_PacketMsgTypeDef *PacketMsg = (USBD_CDC_RNDIS_PacketMsgTypeDef *)Msg;
-
- /* Check correctness of the message */
- if ((PacketMsg->MsgType != CDC_RNDIS_PACKET_MSG_ID))
- {
- return (uint8_t)USBD_FAIL;
- }
-
- /* Point to the payload and udpate the message length */
-
- /* Use temporary storage variables to comply with MISRA-C 2012 rule of (+) operand allowed types */
- tmp1 = (uint32_t)PacketMsg;
- tmp2 = (uint32_t)(PacketMsg->DataOffset);
- hcdc->RxBuffer = (uint8_t *)(tmp1 + tmp2 + CDC_RNDIS_PCKTMSG_DATAOFFSET_OFFSET);
- hcdc->RxLength = PacketMsg->DataLength;
-
- /* Process data by application */
- ((USBD_CDC_RNDIS_ItfTypeDef *)pdev->pUserData)->Receive(hcdc->RxBuffer, &hcdc->RxLength);
-
- return (uint8_t)USBD_OK;
-}
-
-
-/**
-* @brief USBD_CDC_RNDIS_ProcessUnsupportedMsg
-* Parse, extract data and check correctness of CDC_RNDIS KeepAlive command.
-* @param pdev: USB Device Handle pointer
-* @param Msg: Pointer to the message data extracted from SendEncapsulated command
-* @retval status
-*/
-static uint8_t USBD_CDC_RNDIS_ProcessUnsupportedMsg(USBD_HandleTypeDef *pdev,
- USBD_CDC_RNDIS_CtrlMsgTypeDef *Msg)
-{
- /* Get the CDC_RNDIS handle pointer */
- USBD_CDC_RNDIS_HandleTypeDef *hcdc = (USBD_CDC_RNDIS_HandleTypeDef *)pdev->pClassData;
-
- /* Use same Msg input buffer as response buffer */
- USBD_CDC_RNDIS_StsChangeMsgTypeDef *Response = (USBD_CDC_RNDIS_StsChangeMsgTypeDef *)Msg;
-
- /* Setup the response buffer content */
- Response->MsgType = CDC_RNDIS_INDICATE_STATUS_MSG_ID;
- Response->MsgLength = sizeof(USBD_CDC_RNDIS_StsChangeMsgTypeDef);
- Response->Status = CDC_RNDIS_STATUS_NOT_SUPPORTED;
- Response->StsBufLength = 0U;
- Response->StsBufOffset = 20U;
-
- /* Set Response Ready field in order to send response during next control request */
- hcdc->ResponseRdy = 1U;
-
- /* Send Notification on Interrupt EP to inform Host that response is ready */
- (void)USBD_CDC_RNDIS_SendNotification(pdev, RESPONSE_AVAILABLE, 0U, NULL);
-
- UNUSED(Msg);
-
- return (uint8_t)USBD_OK;
-}
-
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/lib/STM32_USB_Device_Library/Class/CDC_RNDIS/Src/usbd_cdc_rndis_if_template.c b/lib/STM32_USB_Device_Library/Class/CDC_RNDIS/Src/usbd_cdc_rndis_if_template.c
deleted file mode 100644
index 9408d43bb..000000000
--- a/lib/STM32_USB_Device_Library/Class/CDC_RNDIS/Src/usbd_cdc_rndis_if_template.c
+++ /dev/null
@@ -1,233 +0,0 @@
-/**
- ******************************************************************************
- * @file usbd_cdc_rndis_if_template.c
- * @author MCD Application Team
- * @brief Source file for USBD CDC_RNDIS interface template
- ******************************************************************************
- * @attention
- *
- * © Copyright (c) 2019 STMicroelectronics.
- * All rights reserved.
- *
- * This software component is licensed by ST under Ultimate Liberty license
- * SLA0044, the "License"; You may not use this file except in compliance with
- * the License. You may obtain a copy of the License at:
- * www.st.com/SLA0044
- *
- ******************************************************************************
- */
-
-/* Includes ------------------------------------------------------------------*/
-
-/* Include TCP/IP stack header files */
-/*
-#include "lwip/opt.h"
-#include "lwip/init.h"
-#include "lwip/dhcp.h"
-#include "lwip/netif.h"
-#include "lwip/timeouts.h"
-#include "netif/etharp.h"
-#include "http_cgi_ssi.h"
-#include "ethernetif.h"
-*/
-
-#include "main.h"
-
-/* Private typedef -----------------------------------------------------------*/
-/* Private define ------------------------------------------------------------*/
-/* Private macro -------------------------------------------------------------*/
-/* Private variables ---------------------------------------------------------*/
-#if defined ( __ICCARM__ ) /*!< IAR Compiler */
- #pragma data_alignment=4
-#endif
-__ALIGN_BEGIN uint8_t UserRxBuffer[CDC_RNDIS_ETH_MAX_SEGSZE + 100] __ALIGN_END; /* Received Data over USB are stored in this buffer */
-
-#if defined ( __ICCARM__ ) /*!< IAR Compiler */
- #pragma data_alignment=4
-#endif
-__ALIGN_BEGIN static uint8_t UserTxBuffer[CDC_RNDIS_ETH_MAX_SEGSZE + 100] __ALIGN_END; /* Received Data over CDC_RNDIS (CDC_RNDIS interface) are stored in this buffer */
-
-static uint8_t CDC_RNDISInitialized = 0U;
-
-/* USB handler declaration */
-extern USBD_HandleTypeDef USBD_Device;
-
-
-/* Private function prototypes -----------------------------------------------*/
-static int8_t CDC_RNDIS_Itf_Init(void);
-static int8_t CDC_RNDIS_Itf_DeInit(void);
-static int8_t CDC_RNDIS_Itf_Control(uint8_t cmd, uint8_t *pbuf, uint16_t length);
-static int8_t CDC_RNDIS_Itf_Receive(uint8_t *pbuf, uint32_t *Len);
-static int8_t CDC_RNDIS_Itf_TransmitCplt(uint8_t *pbuf, uint32_t *Len, uint8_t epnum);
-static int8_t CDC_RNDIS_Itf_Process(USBD_HandleTypeDef *pdev);
-
-USBD_CDC_RNDIS_ItfTypeDef USBD_CDC_RNDIS_fops =
-{
- CDC_RNDIS_Itf_Init,
- CDC_RNDIS_Itf_DeInit,
- CDC_RNDIS_Itf_Control,
- CDC_RNDIS_Itf_Receive,
- CDC_RNDIS_Itf_TransmitCplt,
- CDC_RNDIS_Itf_Process,
- (uint8_t *)CDC_RNDIS_MAC_STR_DESC,
-};
-
-/* Private functions ---------------------------------------------------------*/
-
-/**
- * @brief CDC_RNDIS_Itf_Init
- * Initializes the CDC_RNDIS media low layer
- * @param None
- * @retval Result of the operation: USBD_OK if all operations are OK else USBD_FAIL
- */
-static int8_t CDC_RNDIS_Itf_Init(void)
-{
- if (CDC_RNDISInitialized == 0U)
- {
- /*
- Initialize the LwIP stack
- Add your code here
-
- */
-
- CDC_RNDISInitialized = 1U;
- }
-
- /* Set Application Buffers */
- (void)USBD_CDC_RNDIS_SetTxBuffer(&USBD_Device, UserTxBuffer, 0U);
- (void)USBD_CDC_RNDIS_SetRxBuffer(&USBD_Device, UserRxBuffer);
-
- return (0);
-}
-
-/**
- * @brief CDC_RNDIS_Itf_DeInit
- * DeInitializes the CDC_RNDIS media low layer
- * @param None
- * @retval Result of the operation: USBD_OK if all operations are OK else USBD_FAIL
- */
-static int8_t CDC_RNDIS_Itf_DeInit(void)
-{
- USBD_CDC_RNDIS_HandleTypeDef *hcdc_cdc_rndis = (USBD_CDC_RNDIS_HandleTypeDef *)(USBD_Device.pClassData);
-
- /*
- Add your code here
- */
-
- /* Notify application layer that link is down */
- hcdc_cdc_rndis->LinkStatus = 0U;
-
- return (0);
-}
-
-/**
- * @brief CDC_RNDIS_Itf_Control
- * Manage the CDC_RNDIS 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 operation: USBD_OK if all operations are OK else USBD_FAIL
- */
-static int8_t CDC_RNDIS_Itf_Control(uint8_t cmd, uint8_t *pbuf, uint16_t length)
-{
- USBD_CDC_RNDIS_HandleTypeDef *hcdc_cdc_rndis = (USBD_CDC_RNDIS_HandleTypeDef *)(USBD_Device.pClassData);
-
- switch (cmd)
- {
- case CDC_RNDIS_SEND_ENCAPSULATED_COMMAND:
- /* Add your code here */
- break;
-
- case CDC_RNDIS_GET_ENCAPSULATED_RESPONSE:
- /* Check if this is the first time we enter */
- if (hcdc_cdc_rndis->LinkStatus == 0U)
- {
- /* Setup the Link up at TCP/IP stack level */
- hcdc_cdc_rndis->LinkStatus = 1U;
- /*
- Add your code here
- */
- }
- /* Add your code here */
- break;
-
- default:
- /* Add your code here */
- break;
- }
-
- UNUSED(length);
- UNUSED(pbuf);
-
- return (0);
-}
-
-/**
- * @brief CDC_RNDIS_Itf_Receive
- * Data received over USB OUT endpoint are sent over CDC_RNDIS interface
- * through this function.
- * @param Buf: Buffer of data to be transmitted
- * @param Len: Number of data received (in bytes)
- * @retval Result of the operation: USBD_OK if all operations are OK else USBD_FAIL
- */
-static int8_t CDC_RNDIS_Itf_Receive(uint8_t *Buf, uint32_t *Len)
-{
- /* Get the CDC_RNDIS handler pointer */
- USBD_CDC_RNDIS_HandleTypeDef *hcdc_cdc_rndis = (USBD_CDC_RNDIS_HandleTypeDef *)(USBD_Device.pClassData);
-
- /* Call Eth buffer processing */
- hcdc_cdc_rndis->RxState = 1U;
-
- UNUSED(Buf);
- UNUSED(Len);
-
- return (0);
-}
-
-/**
- * @brief CDC_RNDIS_Itf_TransmitCplt
- * Data transmited callback
- *
- * @note
- * This function is IN transfer complete callback used to inform user that
- * the submitted Data is successfully sent over USB.
- *
- * @param Buf: Buffer of data to be received
- * @param Len: Number of data received (in bytes)
- * @param epnum: EP number
- * @retval Result of the operation: USBD_OK if all operations are OK else USBD_FAIL
- */
-static int8_t CDC_RNDIS_Itf_TransmitCplt(uint8_t *Buf, uint32_t *Len, uint8_t epnum)
-{
- UNUSED(Buf);
- UNUSED(Len);
- UNUSED(epnum);
-
- return (0);
-}
-
-/**
- * @brief CDC_RNDIS_Itf_Process
- * Data received over USB OUT endpoint are sent over CDC_RNDIS interface
- * through this function.
- * @param pdef: pointer to the USB Device Handle
- * @retval Result of the operation: USBD_OK if all operations are OK else USBD_FAIL
- */
-static int8_t CDC_RNDIS_Itf_Process(USBD_HandleTypeDef *pdev)
-{
- /* Get the CDC_RNDIS handler pointer */
- USBD_CDC_RNDIS_HandleTypeDef *hcdc_cdc_rndis = (USBD_CDC_RNDIS_HandleTypeDef *)(pdev->pClassData);
-
- if ((hcdc_cdc_rndis != NULL) && (hcdc_cdc_rndis->LinkStatus != 0U))
- {
- /*
- Add your code here
- Read a received packet from the Ethernet buffers and send it
- to the lwIP for handling
- */
- }
-
- return (0);
-}
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/lib/STM32_USB_Device_Library/Class/CustomHID/Inc/usbd_customhid.h b/lib/STM32_USB_Device_Library/Class/CustomHID/Inc/usbd_customhid.h
deleted file mode 100644
index a1dcd7ca7..000000000
--- a/lib/STM32_USB_Device_Library/Class/CustomHID/Inc/usbd_customhid.h
+++ /dev/null
@@ -1,164 +0,0 @@
-/**
- ******************************************************************************
- * @file usbd_customhid.h
- * @author MCD Application Team
- * @brief header file for the usbd_customhid.c file.
- ******************************************************************************
- * @attention
- *
- * © Copyright (c) 2015 STMicroelectronics.
- * All rights reserved.
- *
- * This software component is licensed by ST under Ultimate Liberty license
- * SLA0044, the "License"; You may not use this file except in compliance with
- * the License. You may obtain a copy of the License at:
- * www.st.com/SLA0044
- *
- ******************************************************************************
- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __USB_CUSTOMHID_H
-#define __USB_CUSTOMHID_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_ioreq.h"
-
-/** @addtogroup STM32_USB_DEVICE_LIBRARY
- * @{
- */
-
-/** @defgroup USBD_CUSTOM_HID
- * @brief This file is the Header file for USBD_customhid.c
- * @{
- */
-
-
-/** @defgroup USBD_CUSTOM_HID_Exported_Defines
- * @{
- */
-#define CUSTOM_HID_EPIN_ADDR 0x81U
-#define CUSTOM_HID_EPIN_SIZE 0x02U
-
-#define CUSTOM_HID_EPOUT_ADDR 0x01U
-#define CUSTOM_HID_EPOUT_SIZE 0x02U
-
-#define USB_CUSTOM_HID_CONFIG_DESC_SIZ 41U
-#define USB_CUSTOM_HID_DESC_SIZ 9U
-
-#ifndef CUSTOM_HID_HS_BINTERVAL
-#define CUSTOM_HID_HS_BINTERVAL 0x05U
-#endif /* CUSTOM_HID_HS_BINTERVAL */
-
-#ifndef CUSTOM_HID_FS_BINTERVAL
-#define CUSTOM_HID_FS_BINTERVAL 0x05U
-#endif /* CUSTOM_HID_FS_BINTERVAL */
-
-#ifndef USBD_CUSTOMHID_OUTREPORT_BUF_SIZE
-#define USBD_CUSTOMHID_OUTREPORT_BUF_SIZE 0x02U
-#endif /* USBD_CUSTOMHID_OUTREPORT_BUF_SIZE */
-
-#ifndef USBD_CUSTOM_HID_REPORT_DESC_SIZE
-#define USBD_CUSTOM_HID_REPORT_DESC_SIZE 163U
-#endif /* USBD_CUSTOM_HID_REPORT_DESC_SIZE */
-
-#define CUSTOM_HID_DESCRIPTOR_TYPE 0x21U
-#define CUSTOM_HID_REPORT_DESC 0x22U
-
-#define CUSTOM_HID_REQ_SET_PROTOCOL 0x0BU
-#define CUSTOM_HID_REQ_GET_PROTOCOL 0x03U
-
-#define CUSTOM_HID_REQ_SET_IDLE 0x0AU
-#define CUSTOM_HID_REQ_GET_IDLE 0x02U
-
-#define CUSTOM_HID_REQ_SET_REPORT 0x09U
-#define CUSTOM_HID_REQ_GET_REPORT 0x01U
-/**
- * @}
- */
-
-
-/** @defgroup USBD_CORE_Exported_TypesDefinitions
- * @{
- */
-typedef enum
-{
- CUSTOM_HID_IDLE = 0U,
- CUSTOM_HID_BUSY,
-} CUSTOM_HID_StateTypeDef;
-
-typedef struct _USBD_CUSTOM_HID_Itf
-{
- uint8_t *pReport;
- int8_t (* Init)(void);
- int8_t (* DeInit)(void);
- int8_t (* OutEvent)(uint8_t event_idx, uint8_t state);
-
-} USBD_CUSTOM_HID_ItfTypeDef;
-
-typedef struct
-{
- uint8_t Report_buf[USBD_CUSTOMHID_OUTREPORT_BUF_SIZE];
- uint32_t Protocol;
- uint32_t IdleState;
- uint32_t AltSetting;
- uint32_t IsReportAvailable;
- CUSTOM_HID_StateTypeDef state;
-} USBD_CUSTOM_HID_HandleTypeDef;
-/**
- * @}
- */
-
-
-
-/** @defgroup USBD_CORE_Exported_Macros
- * @{
- */
-
-/**
- * @}
- */
-
-/** @defgroup USBD_CORE_Exported_Variables
- * @{
- */
-
-extern USBD_ClassTypeDef USBD_CUSTOM_HID;
-#define USBD_CUSTOM_HID_CLASS &USBD_CUSTOM_HID
-/**
- * @}
- */
-
-/** @defgroup USB_CORE_Exported_Functions
- * @{
- */
-uint8_t USBD_CUSTOM_HID_SendReport(USBD_HandleTypeDef *pdev,
- uint8_t *report, uint16_t len);
-
-uint8_t USBD_CUSTOM_HID_ReceivePacket(USBD_HandleTypeDef *pdev);
-
-uint8_t USBD_CUSTOM_HID_RegisterInterface(USBD_HandleTypeDef *pdev,
- USBD_CUSTOM_HID_ItfTypeDef *fops);
-
-/**
- * @}
- */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __USB_CUSTOMHID_H */
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/lib/STM32_USB_Device_Library/Class/CustomHID/Inc/usbd_customhid_if_template.h b/lib/STM32_USB_Device_Library/Class/CustomHID/Inc/usbd_customhid_if_template.h
deleted file mode 100644
index e39069383..000000000
--- a/lib/STM32_USB_Device_Library/Class/CustomHID/Inc/usbd_customhid_if_template.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- ******************************************************************************
- * @file usbd_customhid_if_template.h
- * @author MCD Application Team
- * @brief Header for usbd_customhid_if_template.c file.
- ******************************************************************************
- * @attention
- *
- * © Copyright (c) 2015 STMicroelectronics.
- * All rights reserved.
- *
- * This software component is licensed by ST under Ultimate Liberty license
- * SLA0044, the "License"; You may not use this file except in compliance with
- * the License. You may obtain a copy of the License at:
- * www.st.com/SLA0044
- *
- ******************************************************************************
- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __USBD_CUSTOMHID_IF_TEMPLATE_H
-#define __USBD_CUSTOMHID_IF_TEMPLATE_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_customhid.h"
-
-/* Exported types ------------------------------------------------------------*/
-/* Exported constants --------------------------------------------------------*/
-/* Exported macro ------------------------------------------------------------*/
-/* Exported functions ------------------------------------------------------- */
-extern USBD_CUSTOM_HID_ItfTypeDef USBD_CustomHID_template_fops;
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __USBD_CUSTOMHID_IF_TEMPLATE_H */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/lib/STM32_USB_Device_Library/Class/CustomHID/Src/usbd_customhid.c b/lib/STM32_USB_Device_Library/Class/CustomHID/Src/usbd_customhid.c
deleted file mode 100644
index 268027407..000000000
--- a/lib/STM32_USB_Device_Library/Class/CustomHID/Src/usbd_customhid.c
+++ /dev/null
@@ -1,762 +0,0 @@
-/**
- ******************************************************************************
- * @file usbd_customhid.c
- * @author MCD Application Team
- * @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
- * - Usage Page : Generic Desktop
- * - Usage : Vendor
- * - 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
- *
- * © Copyright (c) 2015 STMicroelectronics.
- * All rights reserved.
- *
- * This software component is licensed by ST under Ultimate Liberty license
- * SLA0044, the "License"; You may not use this file except in compliance with
- * the License. You may obtain a copy of the License at:
- * www.st.com/SLA0044
- *
- ******************************************************************************
- */
-
-/* BSPDependencies
-- "stm32xxxxx_{eval}{discovery}{nucleo_144}.c"
-- "stm32xxxxx_{eval}{discovery}_io.c"
-EndBSPDependencies */
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_customhid.h"
-#include "usbd_ctlreq.h"
-
-
-/** @addtogroup STM32_USB_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
- * @{
- */
-/**
- * @}
- */
-/** @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_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);
-
-static uint8_t *USBD_CUSTOM_HID_GetFSCfgDesc(uint16_t *length);
-static uint8_t *USBD_CUSTOM_HID_GetHSCfgDesc(uint16_t *length);
-static uint8_t *USBD_CUSTOM_HID_GetOtherSpeedCfgDesc(uint16_t *length);
-static uint8_t *USBD_CUSTOM_HID_GetDeviceQualifierDesc(uint16_t *length);
-
-/**
- * @}
- */
-
-/** @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_GetHSCfgDesc,
- USBD_CUSTOM_HID_GetFSCfgDesc,
- USBD_CUSTOM_HID_GetOtherSpeedCfgDesc,
- USBD_CUSTOM_HID_GetDeviceQualifierDesc,
-};
-
-/* USB CUSTOM_HID device FS Configuration Descriptor */
-__ALIGN_BEGIN static uint8_t USBD_CUSTOM_HID_CfgFSDesc[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 */
- 0x00, /* iInterface: Index of string descriptor */
- /******************** Descriptor of CUSTOM_HID *************************/
- /* 18 */
- 0x09, /* bLength: CUSTOM_HID Descriptor size */
- CUSTOM_HID_DESCRIPTOR_TYPE, /* bDescriptorType: CUSTOM_HID */
- 0x11, /* bCUSTOM_HIDUSTOM_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 */
- USBD_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,
- CUSTOM_HID_FS_BINTERVAL, /* bInterval: Polling Interval */
- /* 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,
- CUSTOM_HID_FS_BINTERVAL, /* bInterval: Polling Interval */
- /* 41 */
-};
-
-/* USB CUSTOM_HID device HS Configuration Descriptor */
-__ALIGN_BEGIN static uint8_t USBD_CUSTOM_HID_CfgHSDesc[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, /* bCUSTOM_HIDUSTOM_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 */
- USBD_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,
- CUSTOM_HID_HS_BINTERVAL, /* bInterval: Polling Interval */
- /* 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,
- CUSTOM_HID_HS_BINTERVAL, /* bInterval: Polling Interval */
- /* 41 */
-};
-
-/* USB CUSTOM_HID device Other Speed Configuration Descriptor */
-__ALIGN_BEGIN static uint8_t USBD_CUSTOM_HID_OtherSpeedCfgDesc[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, /* bCUSTOM_HIDUSTOM_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 */
- USBD_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,
- CUSTOM_HID_FS_BINTERVAL, /* bInterval: Polling Interval */
- /* 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,
- CUSTOM_HID_FS_BINTERVAL, /* bInterval: Polling Interval */
- /* 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, /* bCUSTOM_HIDUSTOM_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 */
- USBD_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,
-};
-
-/**
- * @}
- */
-
-/** @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)
-{
- UNUSED(cfgidx);
- USBD_CUSTOM_HID_HandleTypeDef *hhid;
-
- hhid = USBD_malloc(sizeof(USBD_CUSTOM_HID_HandleTypeDef));
-
- if (hhid == NULL)
- {
- pdev->pClassData = NULL;
- return (uint8_t)USBD_EMEM;
- }
-
- pdev->pClassData = (void *)hhid;
-
- if (pdev->dev_speed == USBD_SPEED_HIGH)
- {
- pdev->ep_in[CUSTOM_HID_EPIN_ADDR & 0xFU].bInterval = CUSTOM_HID_HS_BINTERVAL;
- pdev->ep_out[CUSTOM_HID_EPOUT_ADDR & 0xFU].bInterval = CUSTOM_HID_HS_BINTERVAL;
- }
- else /* LOW and FULL-speed endpoints */
- {
- pdev->ep_in[CUSTOM_HID_EPIN_ADDR & 0xFU].bInterval = CUSTOM_HID_FS_BINTERVAL;
- pdev->ep_out[CUSTOM_HID_EPOUT_ADDR & 0xFU].bInterval = CUSTOM_HID_FS_BINTERVAL;
- }
-
- /* Open EP IN */
- (void)USBD_LL_OpenEP(pdev, CUSTOM_HID_EPIN_ADDR, USBD_EP_TYPE_INTR,
- CUSTOM_HID_EPIN_SIZE);
-
- pdev->ep_in[CUSTOM_HID_EPIN_ADDR & 0xFU].is_used = 1U;
-
- /* Open EP OUT */
- (void)USBD_LL_OpenEP(pdev, CUSTOM_HID_EPOUT_ADDR, USBD_EP_TYPE_INTR,
- CUSTOM_HID_EPOUT_SIZE);
-
- pdev->ep_out[CUSTOM_HID_EPOUT_ADDR & 0xFU].is_used = 1U;
-
- hhid->state = CUSTOM_HID_IDLE;
-
- ((USBD_CUSTOM_HID_ItfTypeDef *)pdev->pUserData)->Init();
-
- /* Prepare Out endpoint to receive 1st packet */
- (void)USBD_LL_PrepareReceive(pdev, CUSTOM_HID_EPOUT_ADDR, hhid->Report_buf,
- USBD_CUSTOMHID_OUTREPORT_BUF_SIZE);
-
- return (uint8_t)USBD_OK;
-}
-
-/**
- * @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)
-{
- UNUSED(cfgidx);
-
- /* Close CUSTOM_HID EP IN */
- (void)USBD_LL_CloseEP(pdev, CUSTOM_HID_EPIN_ADDR);
- pdev->ep_in[CUSTOM_HID_EPIN_ADDR & 0xFU].is_used = 0U;
- pdev->ep_in[CUSTOM_HID_EPIN_ADDR & 0xFU].bInterval = 0U;
-
- /* Close CUSTOM_HID EP OUT */
- (void)USBD_LL_CloseEP(pdev, CUSTOM_HID_EPOUT_ADDR);
- pdev->ep_out[CUSTOM_HID_EPOUT_ADDR & 0xFU].is_used = 0U;
- pdev->ep_out[CUSTOM_HID_EPOUT_ADDR & 0xFU].bInterval = 0U;
-
- /* FRee allocated memory */
- if (pdev->pClassData != NULL)
- {
- ((USBD_CUSTOM_HID_ItfTypeDef *)pdev->pUserData)->DeInit();
- USBD_free(pdev->pClassData);
- pdev->pClassData = NULL;
- }
-
- return (uint8_t)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)
-{
- USBD_CUSTOM_HID_HandleTypeDef *hhid = (USBD_CUSTOM_HID_HandleTypeDef *)pdev->pClassData;
- uint16_t len = 0U;
- uint8_t *pbuf = NULL;
- uint16_t status_info = 0U;
- USBD_StatusTypeDef ret = USBD_OK;
-
- 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:
- (void)USBD_CtlSendData(pdev, (uint8_t *)&hhid->Protocol, 1U);
- break;
-
- case CUSTOM_HID_REQ_SET_IDLE:
- hhid->IdleState = (uint8_t)(req->wValue >> 8);
- break;
-
- case CUSTOM_HID_REQ_GET_IDLE:
- (void)USBD_CtlSendData(pdev, (uint8_t *)&hhid->IdleState, 1U);
- break;
-
- case CUSTOM_HID_REQ_SET_REPORT:
- hhid->IsReportAvailable = 1U;
- (void)USBD_CtlPrepareRx(pdev, hhid->Report_buf, req->wLength);
- 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) == CUSTOM_HID_REPORT_DESC)
- {
- len = MIN(USBD_CUSTOM_HID_REPORT_DESC_SIZE, req->wLength);
- pbuf = ((USBD_CUSTOM_HID_ItfTypeDef *)pdev->pUserData)->pReport;
- }
- else
- {
- if ((req->wValue >> 8) == CUSTOM_HID_DESCRIPTOR_TYPE)
- {
- pbuf = USBD_CUSTOM_HID_Desc;
- len = MIN(USB_CUSTOM_HID_DESC_SIZ, req->wLength);
- }
- }
-
- (void)USBD_CtlSendData(pdev, pbuf, len);
- break;
-
- case USB_REQ_GET_INTERFACE:
- if (pdev->dev_state == USBD_STATE_CONFIGURED)
- {
- (void)USBD_CtlSendData(pdev, (uint8_t *)&hhid->AltSetting, 1U);
- }
- else
- {
- USBD_CtlError(pdev, req);
- ret = USBD_FAIL;
- }
- break;
-
- case USB_REQ_SET_INTERFACE:
- if (pdev->dev_state == USBD_STATE_CONFIGURED)
- {
- hhid->AltSetting = (uint8_t)(req->wValue);
- }
- 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;
-}
-
-/**
- * @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;
-
- if (pdev->pClassData == NULL)
- {
- return (uint8_t)USBD_FAIL;
- }
-
- hhid = (USBD_CUSTOM_HID_HandleTypeDef*)pdev->pClassData;
-
- if (pdev->dev_state == USBD_STATE_CONFIGURED)
- {
- if (hhid->state == CUSTOM_HID_IDLE)
- {
- hhid->state = CUSTOM_HID_BUSY;
- (void)USBD_LL_Transmit(pdev, CUSTOM_HID_EPIN_ADDR, report, len);
- }
- else
- {
- return (uint8_t)USBD_BUSY;
- }
- }
- return (uint8_t)USBD_OK;
-}
-
-/**
- * @brief USBD_CUSTOM_HID_GetFSCfgDesc
- * return FS configuration descriptor
- * @param speed : current device speed
- * @param length : pointer data length
- * @retval pointer to descriptor buffer
- */
-static uint8_t *USBD_CUSTOM_HID_GetFSCfgDesc(uint16_t *length)
-{
- *length = (uint16_t)sizeof(USBD_CUSTOM_HID_CfgFSDesc);
-
- return USBD_CUSTOM_HID_CfgFSDesc;
-}
-
-/**
- * @brief USBD_CUSTOM_HID_GetHSCfgDesc
- * return HS configuration descriptor
- * @param speed : current device speed
- * @param length : pointer data length
- * @retval pointer to descriptor buffer
- */
-static uint8_t *USBD_CUSTOM_HID_GetHSCfgDesc(uint16_t *length)
-{
- *length = (uint16_t)sizeof(USBD_CUSTOM_HID_CfgHSDesc);
-
- return USBD_CUSTOM_HID_CfgHSDesc;
-}
-
-/**
- * @brief USBD_CUSTOM_HID_GetOtherSpeedCfgDesc
- * return other speed configuration descriptor
- * @param speed : current device speed
- * @param length : pointer data length
- * @retval pointer to descriptor buffer
- */
-static uint8_t *USBD_CUSTOM_HID_GetOtherSpeedCfgDesc(uint16_t *length)
-{
- *length = (uint16_t)sizeof(USBD_CUSTOM_HID_OtherSpeedCfgDesc);
-
- return USBD_CUSTOM_HID_OtherSpeedCfgDesc;
-}
-
-/**
- * @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)
-{
- UNUSED(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;
-
- return (uint8_t)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)
-{
- UNUSED(epnum);
- USBD_CUSTOM_HID_HandleTypeDef *hhid;
-
- if (pdev->pClassData == NULL)
- {
- return (uint8_t)USBD_FAIL;
- }
-
- hhid = (USBD_CUSTOM_HID_HandleTypeDef*)pdev->pClassData;
-
- /* USB data will be immediately processed, this allow next USB traffic being
- NAKed till the end of the application processing */
- ((USBD_CUSTOM_HID_ItfTypeDef *)pdev->pUserData)->OutEvent(hhid->Report_buf[0],
- hhid->Report_buf[1]);
-
- return (uint8_t)USBD_OK;
-}
-
-
-/**
- * @brief USBD_CUSTOM_HID_ReceivePacket
- * prepare OUT Endpoint for reception
- * @param pdev: device instance
- * @retval status
- */
-uint8_t USBD_CUSTOM_HID_ReceivePacket(USBD_HandleTypeDef *pdev)
-{
- USBD_CUSTOM_HID_HandleTypeDef *hhid;
-
- if (pdev->pClassData == NULL)
- {
- return (uint8_t)USBD_FAIL;
- }
-
- hhid = (USBD_CUSTOM_HID_HandleTypeDef*)pdev->pClassData;
-
- /* Resume USB Out process */
- (void)USBD_LL_PrepareReceive(pdev, CUSTOM_HID_EPOUT_ADDR, hhid->Report_buf,
- USBD_CUSTOMHID_OUTREPORT_BUF_SIZE);
-
- return (uint8_t)USBD_OK;
-}
-
-
-/**
- * @brief USBD_CUSTOM_HID_EP0_RxReady
- * Handles control request data.
- * @param pdev: device instance
- * @retval status
- */
-static uint8_t USBD_CUSTOM_HID_EP0_RxReady(USBD_HandleTypeDef *pdev)
-{
- USBD_CUSTOM_HID_HandleTypeDef *hhid = (USBD_CUSTOM_HID_HandleTypeDef *)pdev->pClassData;
-
- if (hhid->IsReportAvailable == 1U)
- {
- ((USBD_CUSTOM_HID_ItfTypeDef *)pdev->pUserData)->OutEvent(hhid->Report_buf[0],
- hhid->Report_buf[1]);
- hhid->IsReportAvailable = 0U;
- }
-
- return (uint8_t)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 = (uint16_t)sizeof(USBD_CUSTOM_HID_DeviceQualifierDesc);
-
- return USBD_CUSTOM_HID_DeviceQualifierDesc;
-}
-
-/**
-* @brief USBD_CUSTOM_HID_RegisterInterface
- * @param pdev: device instance
- * @param fops: CUSTOMHID Interface callback
- * @retval status
- */
-uint8_t USBD_CUSTOM_HID_RegisterInterface(USBD_HandleTypeDef *pdev,
- USBD_CUSTOM_HID_ItfTypeDef *fops)
-{
- if (fops == NULL)
- {
- return (uint8_t)USBD_FAIL;
- }
-
- pdev->pUserData = fops;
-
- return (uint8_t)USBD_OK;
-}
-/**
- * @}
- */
-
-
-/**
- * @}
- */
-
-
-/**
- * @}
- */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/lib/STM32_USB_Device_Library/Class/CustomHID/Src/usbd_customhid_if_template.c b/lib/STM32_USB_Device_Library/Class/CustomHID/Src/usbd_customhid_if_template.c
deleted file mode 100644
index 1fb6edd16..000000000
--- a/lib/STM32_USB_Device_Library/Class/CustomHID/Src/usbd_customhid_if_template.c
+++ /dev/null
@@ -1,91 +0,0 @@
-/**
- ******************************************************************************
- * @file usbd_customhid_if_template.c
- * @author MCD Application Team
- * @brief USB Device Custom HID interface file.
- * This template should be copied to the user folder, renamed and customized
- * following user needs.
- ******************************************************************************
- * @attention
- *
- * © Copyright (c) 2015 STMicroelectronics.
- * All rights reserved.
- *
- * This software component is licensed by ST under Ultimate Liberty license
- * SLA0044, the "License"; You may not use this file except in compliance with
- * the License. You may obtain a copy of the License at:
- * www.st.com/SLA0044
- *
- ******************************************************************************
- */
-
-/* BSPDependencies
-- "stm32xxxxx_{eval}{discovery}{nucleo_144}.c"
-- "stm32xxxxx_{eval}{discovery}_io.c"
-EndBSPDependencies */
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_customhid_if_template.h"
-/* Private typedef -----------------------------------------------------------*/
-/* Private define ------------------------------------------------------------*/
-/* Private macro -------------------------------------------------------------*/
-/* Private function prototypes -----------------------------------------------*/
-
-static int8_t TEMPLATE_CUSTOM_HID_Init(void);
-static int8_t TEMPLATE_CUSTOM_HID_DeInit(void);
-static int8_t TEMPLATE_CUSTOM_HID_OutEvent(uint8_t event_idx, uint8_t state);
-/* Private variables ---------------------------------------------------------*/
-USBD_CUSTOM_HID_ItfTypeDef USBD_CustomHID_template_fops =
-{
- TEMPLATE_CUSTOM_HID_ReportDesc,
- TEMPLATE_CUSTOM_HID_Init,
- TEMPLATE_CUSTOM_HID_DeInit,
- TEMPLATE_CUSTOM_HID_OutEvent,
-};
-
-/* Private functions ---------------------------------------------------------*/
-
-/**
- * @brief TEMPLATE_CUSTOM_HID_Init
- * Initializes the CUSTOM HID media low layer
- * @param None
- * @retval Result of the operation: USBD_OK if all operations are OK else USBD_FAIL
- */
-static int8_t TEMPLATE_CUSTOM_HID_Init(void)
-{
- return (0);
-}
-
-/**
- * @brief TEMPLATE_CUSTOM_HID_DeInit
- * DeInitializes the CUSTOM HID media low layer
- * @param None
- * @retval Result of the operation: USBD_OK if all operations are OK else USBD_FAIL
- */
-static int8_t TEMPLATE_CUSTOM_HID_DeInit(void)
-{
- /*
- Add your deinitialization code here
- */
- return (0);
-}
-
-
-/**
- * @brief TEMPLATE_CUSTOM_HID_Control
- * Manage the CUSTOM HID class events
- * @param event_idx: event index
- * @param state: event state
- * @retval Result of the operation: USBD_OK if all operations are OK else USBD_FAIL
- */
-static int8_t TEMPLATE_CUSTOM_HID_OutEvent(uint8_t event_idx, uint8_t state)
-{
- UNUSED(event_idx);
- UNUSED(state);
-
- /* Start next USB packet transfer once data processing is completed */
- USBD_CUSTOM_HID_ReceivePacket(&USBD_Device);
-
- return (0);
-}
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/lib/STM32_USB_Device_Library/Class/DFU/Inc/usbd_dfu.h b/lib/STM32_USB_Device_Library/Class/DFU/Inc/usbd_dfu.h
deleted file mode 100644
index 307c96d93..000000000
--- a/lib/STM32_USB_Device_Library/Class/DFU/Inc/usbd_dfu.h
+++ /dev/null
@@ -1,235 +0,0 @@
-/**
- ******************************************************************************
- * @file usbd_dfu.h
- * @author MCD Application Team
- * @brief Header file for the usbd_dfu.c file.
- ******************************************************************************
- * @attention
- *
- * © Copyright (c) 2015 STMicroelectronics.
- * All rights reserved.
- *
- * This software component is licensed by ST under Ultimate Liberty license
- * SLA0044, the "License"; You may not use this file except in compliance with
- * the License. You may obtain a copy of the License at:
- * www.st.com/SLA0044
- *
- ******************************************************************************
- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __USB_DFU_H
-#define __USB_DFU_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_ioreq.h"
-
-/** @addtogroup STM32_USB_DEVICE_LIBRARY
- * @{
- */
-
-/** @defgroup USBD_DFU
- * @brief This file is the Header file for usbd_dfu.c
- * @{
- */
-
-
-/** @defgroup USBD_DFU_Exported_Defines
- * @{
- */
-#ifndef USBD_DFU_MAX_ITF_NUM
-#define USBD_DFU_MAX_ITF_NUM 1U
-#endif /* USBD_DFU_MAX_ITF_NUM */
-
-#ifndef USBD_DFU_XFER_SIZE
-#define USBD_DFU_XFER_SIZE 1024U
-#endif /* USBD_DFU_XFER_SIZE */
-
-#ifndef USBD_DFU_APP_DEFAULT_ADD
-#define USBD_DFU_APP_DEFAULT_ADD 0x08008000U /* The first sector (32 KB) is reserved for DFU code */
-#endif /* USBD_DFU_APP_DEFAULT_ADD */
-
-#define USB_DFU_CONFIG_DESC_SIZ (18U + (9U * USBD_DFU_MAX_ITF_NUM))
-#define USB_DFU_DESC_SIZ 9U
-
-#define DFU_DESCRIPTOR_TYPE 0x21U
-
-
-/**************************************************/
-/* DFU Requests DFU states */
-/**************************************************/
-#define APP_STATE_IDLE 0U
-#define APP_STATE_DETACH 1U
-#define DFU_STATE_IDLE 2U
-#define DFU_STATE_DNLOAD_SYNC 3U
-#define DFU_STATE_DNLOAD_BUSY 4U
-#define DFU_STATE_DNLOAD_IDLE 5U
-#define DFU_STATE_MANIFEST_SYNC 6U
-#define DFU_STATE_MANIFEST 7U
-#define DFU_STATE_MANIFEST_WAIT_RESET 8U
-#define DFU_STATE_UPLOAD_IDLE 9U
-#define DFU_STATE_ERROR 10U
-
-/**************************************************/
-/* DFU errors */
-/**************************************************/
-#define DFU_ERROR_NONE 0x00U
-#define DFU_ERROR_TARGET 0x01U
-#define DFU_ERROR_FILE 0x02U
-#define DFU_ERROR_WRITE 0x03U
-#define DFU_ERROR_ERASE 0x04U
-#define DFU_ERROR_CHECK_ERASED 0x05U
-#define DFU_ERROR_PROG 0x06U
-#define DFU_ERROR_VERIFY 0x07U
-#define DFU_ERROR_ADDRESS 0x08U
-#define DFU_ERROR_NOTDONE 0x09U
-#define DFU_ERROR_FIRMWARE 0x0AU
-#define DFU_ERROR_VENDOR 0x0BU
-#define DFU_ERROR_USB 0x0CU
-#define DFU_ERROR_POR 0x0DU
-#define DFU_ERROR_UNKNOWN 0x0EU
-#define DFU_ERROR_STALLEDPKT 0x0FU
-
-/**************************************************/
-/* DFU Manifestation State */
-/**************************************************/
-#define DFU_MANIFEST_COMPLETE 0x00U
-#define DFU_MANIFEST_IN_PROGRESS 0x01U
-
-
-/**************************************************/
-/* Special Commands with Download Request */
-/**************************************************/
-#define DFU_CMD_GETCOMMANDS 0x00U
-#define DFU_CMD_SETADDRESSPOINTER 0x21U
-#define DFU_CMD_ERASE 0x41U
-
-#define DFU_MEDIA_ERASE 0x00U
-#define DFU_MEDIA_PROGRAM 0x01U
-
-/**************************************************/
-/* Other defines */
-/**************************************************/
-/* Bit Detach capable = bit 3 in bmAttributes field */
-#define DFU_DETACH_MASK (1U << 4)
-#define DFU_STATUS_DEPTH 6U
-
-typedef enum
-{
- DFU_DETACH = 0U,
- 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) + 1U /* iInterface: Index of string descriptor */ \
-
-#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 / 4U];
- uint8_t d8[USBD_DFU_XFER_SIZE];
- } buffer;
-
- uint32_t wblock_num;
- uint32_t wlength;
- uint32_t data_ptr;
- uint32_t alt_setting;
-
- uint8_t dev_status[DFU_STATUS_DEPTH];
- uint8_t ReservedForAlign[2];
- uint8_t dev_state;
- uint8_t manif_state;
-} 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;
-#define USBD_DFU_CLASS &USBD_DFU
-/**
- * @}
- */
-
-/** @defgroup USB_CORE_Exported_Functions
- * @{
- */
-uint8_t USBD_DFU_RegisterMedia(USBD_HandleTypeDef *pdev,
- USBD_DFU_MediaTypeDef *fops);
-/**
- * @}
- */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __USB_DFU_H */
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/lib/STM32_USB_Device_Library/Class/DFU/Inc/usbd_dfu_media_template.h b/lib/STM32_USB_Device_Library/Class/DFU/Inc/usbd_dfu_media_template.h
deleted file mode 100644
index 1ba14227c..000000000
--- a/lib/STM32_USB_Device_Library/Class/DFU/Inc/usbd_dfu_media_template.h
+++ /dev/null
@@ -1,97 +0,0 @@
-/**
- ******************************************************************************
- * @file usbd_dfu_media_template.h
- * @author MCD Application Team
- * @brief header file for the usbd_dfu_media_template.c file
- ******************************************************************************
- * @attention
- *
- * © Copyright (c) 2015 STMicroelectronics.
- * All rights reserved.
- *
- * This software component is licensed by ST under Ultimate Liberty license
- * SLA0044, the "License"; You may not use this file except in compliance with
- * the License. You may obtain a copy of the License at:
- * www.st.com/SLA0044
- *
- ******************************************************************************
- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __USBD_DFU_MEDIA_TEMPLATE_H
-#define __USBD_DFU_MEDIA_TEMPLATE_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_dfu.h"
-
-/** @addtogroup STM32_USB_DEVICE_LIBRARY
- * @{
- */
-
-/** @defgroup USBD_MEDIA
- * @brief header file for the usbd_dfu_media_template.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
- * @{
- */
-
-
-/**
- * @}
- */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __USBD_DFU_MEDIA_TEMPLATE_H */
-
-/**
- * @}
- */
-
-/**
-* @}
-*/
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/lib/STM32_USB_Device_Library/Class/DFU/Src/usbd_dfu.c b/lib/STM32_USB_Device_Library/Class/DFU/Src/usbd_dfu.c
deleted file mode 100644
index d179650b1..000000000
--- a/lib/STM32_USB_Device_Library/Class/DFU/Src/usbd_dfu.c
+++ /dev/null
@@ -1,1063 +0,0 @@
-/**
- ******************************************************************************
- * @file usbd_dfu.c
- * @author MCD Application Team
- * @brief This file provides the DFU core functions.
- *
- * @verbatim
- *
- * ===================================================================
- * DFU Class Driver Description
- * ===================================================================
- * This driver manages the DFU class V1.1 following the "Device Class Specification for
- * Device Firmware Upgrade Version 1.1 Aug 5, 2004".
- * This driver implements the following aspects of the specification:
- * - Device descriptor management
- * - Configuration descriptor management
- * - Enumeration as DFU device (in DFU mode only)
- * - Requests management (supporting ST DFU sub-protocol)
- * - Memory operations management (Download/Upload/Erase/Detach/GetState/GetStatus)
- * - DFU state machine implementation.
- *
- * @note
- * ST DFU sub-protocol is compliant with DFU protocol and use sub-requests to manage
- * memory addressing, commands processing, specific memories operations (ie. Erase) ...
- * As required by the DFU specification, only endpoint 0 is used in this application.
- * Other endpoints and functions may be added to the application (ie. DFU ...)
- *
- * 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):
- * - Manifestation Tolerant mode
- *
- * @endverbatim
- *
- ******************************************************************************
- * @attention
- *
- * © Copyright (c) 2015 STMicroelectronics.
- * All rights reserved.
- *
- * This software component is licensed by ST under Ultimate Liberty license
- * SLA0044, the "License"; You may not use this file except in compliance with
- * the License. You may obtain a copy of the License at:
- * www.st.com/SLA0044
- *
- ******************************************************************************
- */
-
-/* BSPDependencies
-- "stm32xxxxx_{eval}{discovery}{nucleo_144}.c"
-- "stm32xxxxx_{eval}{discovery}_io.c"
-EndBSPDependencies */
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_dfu.h"
-#include "usbd_ctlreq.h"
-
-
-/** @addtogroup STM32_USB_DEVICE_LIBRARY
- * @{
- */
-
-
-/** @defgroup USBD_DFU
- * @brief usbd core module
- * @{
- */
-
-/** @defgroup USBD_DFU_Private_TypesDefinitions
- * @{
- */
-/**
- * @}
- */
-
-
-/** @defgroup USBD_DFU_Private_Defines
- * @{
- */
-
-/**
- * @}
- */
-
-
-/** @defgroup USBD_DFU_Private_Macros
- * @{
- */
-
-/**
- * @}
- */
-
-
-/** @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_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_GetCfgDesc(uint16_t *length);
-static uint8_t *USBD_DFU_GetDeviceQualifierDesc(uint16_t *length);
-
-#if (USBD_SUPPORT_USER_STRING_DESC == 1U)
-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,
- NULL,
- NULL,
- USBD_DFU_SOF,
- NULL,
- NULL,
- USBD_DFU_GetCfgDesc,
- USBD_DFU_GetCfgDesc,
- USBD_DFU_GetCfgDesc,
- USBD_DFU_GetDeviceQualifierDesc,
-#if (USBD_SUPPORT_USER_STRING_DESC == 1U)
- 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(0U), /* This interface is mandatory for all devices */
-
-#if (USBD_DFU_MAX_ITF_NUM > 1U)
- /********** 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 > 2U)
- /********** 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 > 3U)
- /********** 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 > 4U)
- /********** 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 > 5U)
- /********** 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 > 6U)
-#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)
-{
- UNUSED(cfgidx);
-
- USBD_DFU_HandleTypeDef *hdfu;
-
- /* Allocate Audio structure */
- hdfu = USBD_malloc(sizeof(USBD_DFU_HandleTypeDef));
-
- if (hdfu == NULL)
- {
- pdev->pClassData = NULL;
- return (uint8_t)USBD_EMEM;
- }
-
- pdev->pClassData = (void *)hdfu;
-
- hdfu->alt_setting = 0U;
- hdfu->data_ptr = USBD_DFU_APP_DEFAULT_ADD;
- hdfu->wblock_num = 0U;
- hdfu->wlength = 0U;
-
- hdfu->manif_state = DFU_MANIFEST_COMPLETE;
- hdfu->dev_state = DFU_STATE_IDLE;
-
- hdfu->dev_status[0] = DFU_ERROR_NONE;
- hdfu->dev_status[1] = 0U;
- hdfu->dev_status[2] = 0U;
- hdfu->dev_status[3] = 0U;
- hdfu->dev_status[4] = DFU_STATE_IDLE;
- hdfu->dev_status[5] = 0U;
-
- /* Initialize Hardware layer */
- if (((USBD_DFU_MediaTypeDef *)pdev->pUserData)->Init() != USBD_OK)
- {
- return (uint8_t)USBD_FAIL;
- }
-
- return (uint8_t)USBD_OK;
-}
-
-/**
- * @brief USBD_DFU_Init
- * De-Initialize 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)
-{
- UNUSED(cfgidx);
- USBD_DFU_HandleTypeDef *hdfu;
-
- if (pdev->pClassData == NULL)
- {
- return (uint8_t)USBD_EMEM;
- }
-
- hdfu = (USBD_DFU_HandleTypeDef *)pdev->pClassData;
- hdfu->wblock_num = 0U;
- hdfu->wlength = 0U;
-
- hdfu->dev_state = DFU_STATE_IDLE;
- hdfu->dev_status[0] = DFU_ERROR_NONE;
- hdfu->dev_status[4] = DFU_STATE_IDLE;
-
- /* DeInit physical Interface components and Hardware Layer */
- ((USBD_DFU_MediaTypeDef *)pdev->pUserData)->DeInit();
- USBD_free(pdev->pClassData);
- pdev->pClassData = NULL;
-
- return (uint8_t)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)
-{
- USBD_DFU_HandleTypeDef *hdfu = (USBD_DFU_HandleTypeDef *)pdev->pClassData;
- USBD_StatusTypeDef ret = USBD_OK;
- uint8_t *pbuf = NULL;
- uint16_t len = 0U;
- uint16_t status_info = 0U;
-
- 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;
- }
- 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) == DFU_DESCRIPTOR_TYPE)
- {
- pbuf = USBD_DFU_CfgDesc + (9U * (USBD_DFU_MAX_ITF_NUM + 1U));
- len = MIN(USB_DFU_DESC_SIZ, req->wLength);
- }
-
- (void)USBD_CtlSendData(pdev, pbuf, len);
- break;
-
- case USB_REQ_GET_INTERFACE:
- if (pdev->dev_state == USBD_STATE_CONFIGURED)
- {
- (void)USBD_CtlSendData(pdev, (uint8_t *)hdfu->alt_setting, 1U);
- }
- else
- {
- USBD_CtlError(pdev, req);
- ret = USBD_FAIL;
- }
- break;
-
- case USB_REQ_SET_INTERFACE:
- if ((uint8_t)(req->wValue) < USBD_DFU_MAX_ITF_NUM)
- {
- if (pdev->dev_state == USBD_STATE_CONFIGURED)
- {
- hdfu->alt_setting = (uint8_t)(req->wValue);
- }
- else
- {
- USBD_CtlError(pdev, req);
- ret = USBD_FAIL;
- }
- }
- else
- {
- /* Call the error management function (command will be nacked */
- 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;
-}
-
-
-/**
- * @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 = (uint16_t)sizeof(USBD_DFU_CfgDesc);
-
- return USBD_DFU_CfgDesc;
-}
-
-
-/**
- * @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)
-{
- UNUSED(pdev);
-
- return (uint8_t)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)
-{
- USBD_SetupReqTypedef req;
- uint32_t addr;
- USBD_DFU_HandleTypeDef *hdfu = (USBD_DFU_HandleTypeDef *)pdev->pClassData;
- USBD_DFU_MediaTypeDef *DfuInterface = (USBD_DFU_MediaTypeDef *)pdev->pUserData;
-
- if (hdfu->dev_state == DFU_STATE_DNLOAD_BUSY)
- {
- /* Decode the Special Command*/
- if (hdfu->wblock_num == 0U)
- {
- if(hdfu->wlength == 1U)
- {
- if (hdfu->buffer.d8[0] == DFU_CMD_GETCOMMANDS)
- {
- /* nothink to do */
- }
- }
- else if (hdfu->wlength == 5U)
- {
- if (hdfu->buffer.d8[0] == DFU_CMD_SETADDRESSPOINTER)
- {
- hdfu->data_ptr = hdfu->buffer.d8[1];
- hdfu->data_ptr += (uint32_t)hdfu->buffer.d8[2] << 8;
- hdfu->data_ptr += (uint32_t)hdfu->buffer.d8[3] << 16;
- hdfu->data_ptr += (uint32_t)hdfu->buffer.d8[4] << 24;
- }
- else if (hdfu->buffer.d8[0] == DFU_CMD_ERASE)
- {
- hdfu->data_ptr = hdfu->buffer.d8[1];
- hdfu->data_ptr += (uint32_t)hdfu->buffer.d8[2] << 8;
- hdfu->data_ptr += (uint32_t)hdfu->buffer.d8[3] << 16;
- hdfu->data_ptr += (uint32_t)hdfu->buffer.d8[4] << 24;
-
- if (DfuInterface->Erase(hdfu->data_ptr) != USBD_OK)
- {
- return (uint8_t)USBD_FAIL;
- }
- }
- else
- {
- /* .. */
- }
- }
- else
- {
- /* Reset the global length and block number */
- hdfu->wlength = 0U;
- hdfu->wblock_num = 0U;
- /* Call the error management function (command will be nacked) */
- req.bmRequest = 0U;
- req.wLength = 1U;
- USBD_CtlError(pdev, &req);
- }
- }
- /* Regular Download Command */
- else
- {
- if (hdfu->wblock_num > 1U)
- {
- /* Decode the required address */
- addr = ((hdfu->wblock_num - 2U) * USBD_DFU_XFER_SIZE) + hdfu->data_ptr;
-
- /* Preform the write operation */
- if (DfuInterface->Write(hdfu->buffer.d8, (uint8_t *)addr, hdfu->wlength) != USBD_OK)
- {
- return (uint8_t)USBD_FAIL;
- }
- }
- }
-
- /* Reset the global length and block number */
- hdfu->wlength = 0U;
- hdfu->wblock_num = 0U;
-
- /* Update the state machine */
- hdfu->dev_state = DFU_STATE_DNLOAD_SYNC;
-
- hdfu->dev_status[1] = 0U;
- hdfu->dev_status[2] = 0U;
- hdfu->dev_status[3] = 0U;
- hdfu->dev_status[4] = hdfu->dev_state;
- }
- else if (hdfu->dev_state == DFU_STATE_MANIFEST)/* Manifestation in progress */
- {
- /* Start leaving DFU mode */
- DFU_Leave(pdev);
- }
- else
- {
- /* .. */
- }
-
- return (uint8_t)USBD_OK;
-}
-/**
- * @brief USBD_DFU_SOF
- * handle SOF event
- * @param pdev: device instance
- * @retval status
- */
-static uint8_t USBD_DFU_SOF(USBD_HandleTypeDef *pdev)
-{
- UNUSED(pdev);
-
- return (uint8_t)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 = (uint16_t)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_DESC == 1U)
-static uint8_t *USBD_DFU_GetUsrStringDesc(USBD_HandleTypeDef *pdev, uint8_t index, uint16_t *length)
-{
- static uint8_t USBD_StrDesc[255];
- USBD_DFU_MediaTypeDef *DfuInterface = (USBD_DFU_MediaTypeDef *)pdev->pUserData;
-
- /* Check if the requested string interface is supported */
- if (index <= (USBD_IDX_INTERFACE_STR + USBD_DFU_MAX_ITF_NUM))
- {
- USBD_GetString((uint8_t *)DfuInterface->pStrDesc, USBD_StrDesc, length);
- return USBD_StrDesc;
- }
- else
- {
- /* Not supported Interface Descriptor index */
- 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)
- {
- return (uint8_t)USBD_FAIL;
- }
-
- pdev->pUserData = fops;
-
- return (uint8_t)USBD_OK;
-}
-
-/******************************************************************************
- 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 = (USBD_DFU_HandleTypeDef *)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] = 0U;
- hdfu->dev_status[2] = 0U;
- hdfu->dev_status[3] = 0U; /*bwPollTimeout=0ms*/
- hdfu->dev_status[4] = hdfu->dev_state;
- hdfu->dev_status[5] = 0U; /*iString*/
- hdfu->wblock_num = 0U;
- hdfu->wlength = 0U;
- }
-
- /* Check the detach capability in the DFU functional descriptor */
- if (((USBD_DFU_CfgDesc[12U + (9U * USBD_DFU_MAX_ITF_NUM)]) & DFU_DETACH_MASK) != 0U)
- {
- /* Perform an Attach-Detach operation on USB bus */
- (void)USBD_Stop(pdev);
- (void)USBD_Start(pdev);
- }
- else
- {
- /* Wait for the period of time specified in Detach request */
- USBD_Delay((uint32_t)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 = (USBD_DFU_HandleTypeDef *)pdev->pClassData;
-
- /* Data setup request */
- if (req->wLength > 0U)
- {
- 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 */
- (void)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] = 0U;
- hdfu->dev_status[2] = 0U;
- hdfu->dev_status[3] = 0U;
- 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 = (USBD_DFU_HandleTypeDef *)pdev->pClassData;
- USBD_DFU_MediaTypeDef *DfuInterface = (USBD_DFU_MediaTypeDef *)pdev->pUserData;
- uint8_t *phaddr;
- uint32_t addr;
-
- /* Data setup request */
- if (req->wLength > 0U)
- {
- if ((hdfu->dev_state == DFU_STATE_IDLE) || (hdfu->dev_state == DFU_STATE_UPLOAD_IDLE))
- {
- /* Update the global length and block number */
- hdfu->wblock_num = req->wValue;
- hdfu->wlength = req->wLength;
-
- /* DFU Get Command */
- if (hdfu->wblock_num == 0U)
- {
- /* Update the state machine */
- hdfu->dev_state = (hdfu->wlength > 3U) ? DFU_STATE_IDLE : DFU_STATE_UPLOAD_IDLE;
-
- hdfu->dev_status[1] = 0U;
- hdfu->dev_status[2] = 0U;
- hdfu->dev_status[3] = 0U;
- 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 */
- (void)USBD_CtlSendData(pdev, (uint8_t *)(&(hdfu->buffer.d8[0])), 3U);
- }
- else if (hdfu->wblock_num > 1U)
- {
- hdfu->dev_state = DFU_STATE_UPLOAD_IDLE;
-
- hdfu->dev_status[1] = 0U;
- hdfu->dev_status[2] = 0U;
- hdfu->dev_status[3] = 0U;
- hdfu->dev_status[4] = hdfu->dev_state;
-
- addr = ((hdfu->wblock_num - 2U) * USBD_DFU_XFER_SIZE) + hdfu->data_ptr;
-
- /* Return the physical address where data are stored */
- phaddr = DfuInterface->Read((uint8_t *)addr, hdfu->buffer.d8, hdfu->wlength);
-
- /* Send the status data over EP0 */
- (void)USBD_CtlSendData(pdev, phaddr, hdfu->wlength);
- }
- else /* unsupported hdfu->wblock_num */
- {
- hdfu->dev_state = DFU_ERROR_STALLEDPKT;
-
- hdfu->dev_status[1] = 0U;
- hdfu->dev_status[2] = 0U;
- hdfu->dev_status[3] = 0U;
- 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 = 0U;
- hdfu->wblock_num = 0U;
-
- /* 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] = 0U;
- hdfu->dev_status[2] = 0U;
- hdfu->dev_status[3] = 0U;
- 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 = (USBD_DFU_HandleTypeDef *)pdev->pClassData;
- USBD_DFU_MediaTypeDef *DfuInterface = (USBD_DFU_MediaTypeDef *)pdev->pUserData;
-
- switch (hdfu->dev_state)
- {
- case DFU_STATE_DNLOAD_SYNC:
- if (hdfu->wlength != 0U)
- {
- hdfu->dev_state = DFU_STATE_DNLOAD_BUSY;
-
- hdfu->dev_status[1] = 0U;
- hdfu->dev_status[2] = 0U;
- hdfu->dev_status[3] = 0U;
- hdfu->dev_status[4] = hdfu->dev_state;
-
- if ((hdfu->wblock_num == 0U) && (hdfu->buffer.d8[0] == DFU_CMD_ERASE))
- {
- DfuInterface->GetStatus(hdfu->data_ptr, DFU_MEDIA_ERASE, hdfu->dev_status);
- }
- else
- {
- DfuInterface->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] = 0U;
- hdfu->dev_status[2] = 0U;
- hdfu->dev_status[3] = 0U;
- 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] = 1U; /*bwPollTimeout = 1ms*/
- hdfu->dev_status[2] = 0U;
- hdfu->dev_status[3] = 0U;
- hdfu->dev_status[4] = hdfu->dev_state;
- }
- else
- {
- if ((hdfu->manif_state == DFU_MANIFEST_COMPLETE) &&
- (((USBD_DFU_CfgDesc[(11U + (9U * USBD_DFU_MAX_ITF_NUM))]) & 0x04U) != 0U))
- {
- hdfu->dev_state = DFU_STATE_IDLE;
-
- hdfu->dev_status[1] = 0U;
- hdfu->dev_status[2] = 0U;
- hdfu->dev_status[3] = 0U;
- hdfu->dev_status[4] = hdfu->dev_state;
- }
- }
- break;
-
- default:
- break;
- }
-
- /* Send the status data over EP0 */
- (void)USBD_CtlSendData(pdev, (uint8_t *)(&(hdfu->dev_status[0])), 6U);
-}
-
-/**
- * @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 = (USBD_DFU_HandleTypeDef *)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] = 0U;
- hdfu->dev_status[2] = 0U;
- hdfu->dev_status[3] = 0U; /*bwPollTimeout=0ms*/
- hdfu->dev_status[4] = hdfu->dev_state; /*bState*/
- hdfu->dev_status[5] = 0U; /*iString*/
- }
- else
- {
- /*State Error*/
- hdfu->dev_state = DFU_STATE_ERROR;
- hdfu->dev_status[0] = DFU_ERROR_UNKNOWN; /*bStatus*/
- hdfu->dev_status[1] = 0U;
- hdfu->dev_status[2] = 0U;
- hdfu->dev_status[3] = 0U; /*bwPollTimeout=0ms*/
- hdfu->dev_status[4] = hdfu->dev_state; /*bState*/
- hdfu->dev_status[5] = 0U; /*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 = (USBD_DFU_HandleTypeDef *)pdev->pClassData;
-
- /* Return the current state of the DFU interface */
- (void)USBD_CtlSendData(pdev, &hdfu->dev_state, 1U);
-}
-
-/**
- * @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 = (USBD_DFU_HandleTypeDef *)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] = 0U;
- hdfu->dev_status[2] = 0U;
- hdfu->dev_status[3] = 0U; /*bwPollTimeout=0ms*/
- hdfu->dev_status[4] = hdfu->dev_state;
- hdfu->dev_status[5] = 0U; /*iString*/
- hdfu->wblock_num = 0U;
- hdfu->wlength = 0U;
- }
-}
-
-/**
- * @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
- */
-static void DFU_Leave(USBD_HandleTypeDef *pdev)
-{
- USBD_DFU_HandleTypeDef *hdfu = (USBD_DFU_HandleTypeDef *)pdev->pClassData;
-
- hdfu->manif_state = DFU_MANIFEST_COMPLETE;
-
- if (((USBD_DFU_CfgDesc[(11U + (9U * USBD_DFU_MAX_ITF_NUM))]) & 0x04U) != 0U)
- {
- hdfu->dev_state = DFU_STATE_MANIFEST_SYNC;
-
- hdfu->dev_status[1] = 0U;
- hdfu->dev_status[2] = 0U;
- hdfu->dev_status[3] = 0U;
- hdfu->dev_status[4] = hdfu->dev_state;
- return;
- }
- else
- {
- hdfu->dev_state = DFU_STATE_MANIFEST_WAIT_RESET;
-
- hdfu->dev_status[1] = 0U;
- hdfu->dev_status[2] = 0U;
- hdfu->dev_status[3] = 0U;
- hdfu->dev_status[4] = hdfu->dev_state;
-
- /* Disconnect the USB device */
- (void)USBD_Stop(pdev);
-
- /* Generate system reset to allow jumping to the user code */
- NVIC_SystemReset();
-
- /* The next instructions will not be reached (system reset) */
- }
-}
-
-/**
- * @}
- */
-
-
-/**
- * @}
- */
-
-
-/**
- * @}
- */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/lib/STM32_USB_Device_Library/Class/DFU/Src/usbd_dfu_media_template.c b/lib/STM32_USB_Device_Library/Class/DFU/Src/usbd_dfu_media_template.c
deleted file mode 100644
index b40a10cb8..000000000
--- a/lib/STM32_USB_Device_Library/Class/DFU/Src/usbd_dfu_media_template.c
+++ /dev/null
@@ -1,135 +0,0 @@
-/**
- ******************************************************************************
- * @file usbd_dfu_media_template.c
- * @author MCD Application Team
- * @brief Memory management layer
- ******************************************************************************
- * @attention
- *
- * © Copyright (c) 2015 STMicroelectronics.
- * All rights reserved.
- *
- * This software component is licensed by ST under Ultimate Liberty license
- * SLA0044, the "License"; You may not use this file except in compliance with
- * the License. You may obtain a copy of the License at:
- * www.st.com/SLA0044
- *
- ******************************************************************************
- */
-
-/* BSPDependencies
-- "stm32xxxxx_{eval}{discovery}{nucleo_144}.c"
-- "stm32xxxxx_{eval}{discovery}_io.c"
-EndBSPDependencies */
-
-/* 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 successful, 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 successful, 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 successful, 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 successful, 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 physical 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 physical 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/lib/STM32_USB_Device_Library/Class/HID/Inc/usbd_hid.h b/lib/STM32_USB_Device_Library/Class/HID/Inc/usbd_hid.h
deleted file mode 100644
index 40ed7291a..000000000
--- a/lib/STM32_USB_Device_Library/Class/HID/Inc/usbd_hid.h
+++ /dev/null
@@ -1,139 +0,0 @@
-/**
- ******************************************************************************
- * @file usbd_hid.h
- * @author MCD Application Team
- * @brief Header file for the usbd_hid_core.c file.
- ******************************************************************************
- * @attention
- *
- * © Copyright (c) 2015 STMicroelectronics.
- * All rights reserved.
- *
- * This software component is licensed by ST under Ultimate Liberty license
- * SLA0044, the "License"; You may not use this file except in compliance with
- * the License. You may obtain a copy of the License at:
- * www.st.com/SLA0044
- *
- ******************************************************************************
- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __USB_HID_H
-#define __USB_HID_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_ioreq.h"
-
-/** @addtogroup STM32_USB_DEVICE_LIBRARY
- * @{
- */
-
-/** @defgroup USBD_HID
- * @brief This file is the Header file for usbd_hid.c
- * @{
- */
-
-
-/** @defgroup USBD_HID_Exported_Defines
- * @{
- */
-#define HID_EPIN_ADDR 0x81U
-#define HID_EPIN_SIZE 0x04U
-
-#define USB_HID_CONFIG_DESC_SIZ 34U
-#define USB_HID_DESC_SIZ 9U
-#define HID_MOUSE_REPORT_DESC_SIZE 74U
-
-#define HID_DESCRIPTOR_TYPE 0x21U
-#define HID_REPORT_DESC 0x22U
-
-#ifndef HID_HS_BINTERVAL
-#define HID_HS_BINTERVAL 0x07U
-#endif /* HID_HS_BINTERVAL */
-
-#ifndef HID_FS_BINTERVAL
-#define HID_FS_BINTERVAL 0x0AU
-#endif /* HID_FS_BINTERVAL */
-
-#define HID_REQ_SET_PROTOCOL 0x0BU
-#define HID_REQ_GET_PROTOCOL 0x03U
-
-#define HID_REQ_SET_IDLE 0x0AU
-#define HID_REQ_GET_IDLE 0x02U
-
-#define HID_REQ_SET_REPORT 0x09U
-#define HID_REQ_GET_REPORT 0x01U
-/**
- * @}
- */
-
-
-/** @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;
-#define USBD_HID_CLASS &USBD_HID
-/**
- * @}
- */
-
-/** @defgroup USB_CORE_Exported_Functions
- * @{
- */
-uint8_t USBD_HID_SendReport(USBD_HandleTypeDef *pdev, uint8_t *report,uint16_t len);
-uint32_t USBD_HID_GetPollingInterval(USBD_HandleTypeDef *pdev);
-
-/**
- * @}
- */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __USB_HID_H */
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/lib/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.c b/lib/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.c
deleted file mode 100644
index c73dacebe..000000000
--- a/lib/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.c
+++ /dev/null
@@ -1,680 +0,0 @@
-/**
- ******************************************************************************
- * @file usbd_hid.c
- * @author MCD Application Team
- * @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
- *
- * © Copyright (c) 2015 STMicroelectronics.
- * All rights reserved.
- *
- * This software component is licensed by ST under Ultimate Liberty license
- * SLA0044, the "License"; You may not use this file except in compliance with
- * the License. You may obtain a copy of the License at:
- * www.st.com/SLA0044
- *
- ******************************************************************************
- */
-
-/* BSPDependencies
-- "stm32xxxxx_{eval}{discovery}{nucleo_144}.c"
-- "stm32xxxxx_{eval}{discovery}_io.c"
-EndBSPDependencies */
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_hid.h"
-#include "usbd_ctlreq.h"
-
-
-/** @addtogroup STM32_USB_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_DataIn(USBD_HandleTypeDef *pdev, uint8_t epnum);
-
-static uint8_t *USBD_HID_GetFSCfgDesc(uint16_t *length);
-static uint8_t *USBD_HID_GetHSCfgDesc(uint16_t *length);
-static uint8_t *USBD_HID_GetOtherSpeedCfgDesc(uint16_t *length);
-static uint8_t *USBD_HID_GetDeviceQualifierDesc(uint16_t *length);
-
-/**
- * @}
- */
-
-/** @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_GetHSCfgDesc,
- USBD_HID_GetFSCfgDesc,
- USBD_HID_GetOtherSpeedCfgDesc,
- USBD_HID_GetDeviceQualifierDesc,
-};
-
-/* USB HID device FS Configuration Descriptor */
-__ALIGN_BEGIN static uint8_t USBD_HID_CfgFSDesc[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,
- HID_FS_BINTERVAL, /* bInterval: Polling Interval */
- /* 34 */
-};
-
-/* USB HID device HS Configuration Descriptor */
-__ALIGN_BEGIN static uint8_t USBD_HID_CfgHSDesc[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,
- HID_HS_BINTERVAL, /* bInterval: Polling Interval */
- /* 34 */
-};
-
-/* USB HID device Other Speed Configuration Descriptor */
-__ALIGN_BEGIN static uint8_t USBD_HID_OtherSpeedCfgDesc[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,
- HID_FS_BINTERVAL, /* bInterval: Polling Interval */
- /* 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)
-{
- UNUSED(cfgidx);
-
- USBD_HID_HandleTypeDef *hhid;
-
- hhid = USBD_malloc(sizeof(USBD_HID_HandleTypeDef));
-
- if (hhid == NULL)
- {
- pdev->pClassData = NULL;
- return (uint8_t)USBD_EMEM;
- }
-
- pdev->pClassData = (void *)hhid;
-
- if (pdev->dev_speed == USBD_SPEED_HIGH)
- {
- pdev->ep_in[HID_EPIN_ADDR & 0xFU].bInterval = HID_HS_BINTERVAL;
- }
- else /* LOW and FULL-speed endpoints */
- {
- pdev->ep_in[HID_EPIN_ADDR & 0xFU].bInterval = HID_FS_BINTERVAL;
- }
-
- /* Open EP IN */
- (void)USBD_LL_OpenEP(pdev, HID_EPIN_ADDR, USBD_EP_TYPE_INTR, HID_EPIN_SIZE);
- pdev->ep_in[HID_EPIN_ADDR & 0xFU].is_used = 1U;
-
- hhid->state = HID_IDLE;
-
- return (uint8_t)USBD_OK;
-}
-
-/**
- * @brief USBD_HID_DeInit
- * 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)
-{
- UNUSED(cfgidx);
-
- /* Close HID EPs */
- (void)USBD_LL_CloseEP(pdev, HID_EPIN_ADDR);
- pdev->ep_in[HID_EPIN_ADDR & 0xFU].is_used = 0U;
- pdev->ep_in[HID_EPIN_ADDR & 0xFU].bInterval = 0U;
-
- /* FRee allocated memory */
- if (pdev->pClassData != NULL)
- {
- (void)USBD_free(pdev->pClassData);
- pdev->pClassData = NULL;
- }
-
- return (uint8_t)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)
-{
- USBD_HID_HandleTypeDef *hhid = (USBD_HID_HandleTypeDef *)pdev->pClassData;
- USBD_StatusTypeDef ret = USBD_OK;
- uint16_t len;
- uint8_t *pbuf;
- uint16_t status_info = 0U;
-
- 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:
- (void)USBD_CtlSendData(pdev, (uint8_t *)&hhid->Protocol, 1U);
- break;
-
- case HID_REQ_SET_IDLE:
- hhid->IdleState = (uint8_t)(req->wValue >> 8);
- break;
-
- case HID_REQ_GET_IDLE:
- (void)USBD_CtlSendData(pdev, (uint8_t *)&hhid->IdleState, 1U);
- 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) == 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);
- }
- else
- {
- USBD_CtlError(pdev, req);
- ret = USBD_FAIL;
- break;
- }
- (void)USBD_CtlSendData(pdev, pbuf, len);
- break;
-
- case USB_REQ_GET_INTERFACE :
- if (pdev->dev_state == USBD_STATE_CONFIGURED)
- {
- (void)USBD_CtlSendData(pdev, (uint8_t *)&hhid->AltSetting, 1U);
- }
- else
- {
- USBD_CtlError(pdev, req);
- ret = USBD_FAIL;
- }
- break;
-
- case USB_REQ_SET_INTERFACE:
- if (pdev->dev_state == USBD_STATE_CONFIGURED)
- {
- hhid->AltSetting = (uint8_t)(req->wValue);
- }
- 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;
-}
-
-/**
- * @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 = (USBD_HID_HandleTypeDef *)pdev->pClassData;
-
- if (pdev->dev_state == USBD_STATE_CONFIGURED)
- {
- if (hhid->state == HID_IDLE)
- {
- hhid->state = HID_BUSY;
- (void)USBD_LL_Transmit(pdev, HID_EPIN_ADDR, report, len);
- }
- }
-
- return (uint8_t)USBD_OK;
-}
-
-/**
- * @brief USBD_HID_GetPollingInterval
- * return polling interval from endpoint descriptor
- * @param pdev: device instance
- * @retval polling interval
- */
-uint32_t USBD_HID_GetPollingInterval(USBD_HandleTypeDef *pdev)
-{
- uint32_t polling_interval;
-
- /* HIGH-speed endpoints */
- if (pdev->dev_speed == USBD_SPEED_HIGH)
- {
- /* Sets the data transfer polling interval for high speed transfers.
- Values between 1..16 are allowed. Values correspond to interval
- of 2 ^ (bInterval-1). This option (8 ms, corresponds to HID_HS_BINTERVAL */
- polling_interval = (((1U << (HID_HS_BINTERVAL - 1U))) / 8U);
- }
- else /* LOW and FULL-speed endpoints */
- {
- /* Sets the data transfer polling interval for low and full
- speed transfers */
- polling_interval = HID_FS_BINTERVAL;
- }
-
- return ((uint32_t)(polling_interval));
-}
-
-/**
- * @brief USBD_HID_GetCfgFSDesc
- * return FS configuration descriptor
- * @param speed : current device speed
- * @param length : pointer data length
- * @retval pointer to descriptor buffer
- */
-static uint8_t *USBD_HID_GetFSCfgDesc(uint16_t *length)
-{
- *length = (uint16_t)sizeof(USBD_HID_CfgFSDesc);
-
- return USBD_HID_CfgFSDesc;
-}
-
-/**
- * @brief USBD_HID_GetCfgHSDesc
- * return HS configuration descriptor
- * @param speed : current device speed
- * @param length : pointer data length
- * @retval pointer to descriptor buffer
- */
-static uint8_t *USBD_HID_GetHSCfgDesc(uint16_t *length)
-{
- *length = (uint16_t)sizeof(USBD_HID_CfgHSDesc);
-
- return USBD_HID_CfgHSDesc;
-}
-
-/**
- * @brief USBD_HID_GetOtherSpeedCfgDesc
- * return other speed configuration descriptor
- * @param speed : current device speed
- * @param length : pointer data length
- * @retval pointer to descriptor buffer
- */
-static uint8_t *USBD_HID_GetOtherSpeedCfgDesc(uint16_t *length)
-{
- *length = (uint16_t)sizeof(USBD_HID_OtherSpeedCfgDesc);
-
- return USBD_HID_OtherSpeedCfgDesc;
-}
-
-/**
- * @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)
-{
- UNUSED(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 (uint8_t)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 = (uint16_t)sizeof(USBD_HID_DeviceQualifierDesc);
-
- return USBD_HID_DeviceQualifierDesc;
-}
-
-/**
- * @}
- */
-
-
-/**
- * @}
- */
-
-
-/**
- * @}
- */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/lib/STM32_USB_Device_Library/Class/MSC/Inc/usbd_msc.h b/lib/STM32_USB_Device_Library/Class/MSC/Inc/usbd_msc.h
deleted file mode 100644
index a0bbab906..000000000
--- a/lib/STM32_USB_Device_Library/Class/MSC/Inc/usbd_msc.h
+++ /dev/null
@@ -1,130 +0,0 @@
-/**
- ******************************************************************************
- * @file usbd_msc.h
- * @author MCD Application Team
- * @brief Header for the usbd_msc.c file
- ******************************************************************************
- * @attention
- *
- * © Copyright (c) 2015 STMicroelectronics.
- * All rights reserved.
- *
- * This software component is licensed by ST under Ultimate Liberty license
- * SLA0044, the "License"; You may not use this file except in compliance with
- * the License. You may obtain a copy of the License at:
- * www.st.com/SLA0044
- *
- ******************************************************************************
- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __USBD_MSC_H
-#define __USBD_MSC_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#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
- * @{
- */
-/* MSC Class Config */
-#ifndef MSC_MEDIA_PACKET
-#define MSC_MEDIA_PACKET 512U
-#endif /* MSC_MEDIA_PACKET */
-
-#define MSC_MAX_FS_PACKET 0x40U
-#define MSC_MAX_HS_PACKET 0x200U
-
-#define BOT_GET_MAX_LUN 0xFE
-#define BOT_RESET 0xFF
-#define USB_MSC_CONFIG_DESC_SIZ 32
-
-
-#define MSC_EPIN_ADDR 0x81U
-#define MSC_EPOUT_ADDR 0x01U
-
-/**
- * @}
- */
-
-/** @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;
- uint32_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;
- uint8_t scsi_medium_state;
-
- 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;
-#define USBD_MSC_CLASS &USBD_MSC
-
-uint8_t USBD_MSC_RegisterStorage(USBD_HandleTypeDef *pdev,
- USBD_StorageTypeDef *fops);
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __USBD_MSC_H */
-/**
- * @}
- */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/lib/STM32_USB_Device_Library/Class/MSC/Inc/usbd_msc_bot.h b/lib/STM32_USB_Device_Library/Class/MSC/Inc/usbd_msc_bot.h
deleted file mode 100644
index f5b1b6d42..000000000
--- a/lib/STM32_USB_Device_Library/Class/MSC/Inc/usbd_msc_bot.h
+++ /dev/null
@@ -1,150 +0,0 @@
-/**
- ******************************************************************************
- * @file usbd_msc_bot.h
- * @author MCD Application Team
- * @brief Header for the usbd_msc_bot.c file
- ******************************************************************************
- * @attention
- *
- * © Copyright (c) 2015 STMicroelectronics.
- * All rights reserved.
- *
- * This software component is licensed by ST under Ultimate Liberty license
- * SLA0044, the "License"; You may not use this file except in compliance with
- * the License. You may obtain a copy of the License at:
- * www.st.com/SLA0044
- *
- ******************************************************************************
- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __USBD_MSC_BOT_H
-#define __USBD_MSC_BOT_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_core.h"
-
-/** @addtogroup STM32_USB_DEVICE_LIBRARY
- * @{
- */
-
-/** @defgroup MSC_BOT
- * @brief This file is the Header file for usbd_msc_bot.c
- * @{
- */
-
-
-/** @defgroup USBD_CORE_Exported_Defines
- * @{
- */
-#define USBD_BOT_IDLE 0U /* Idle state */
-#define USBD_BOT_DATA_OUT 1U /* Data Out state */
-#define USBD_BOT_DATA_IN 2U /* Data In state */
-#define USBD_BOT_LAST_DATA_IN 3U /* Last Data In Last */
-#define USBD_BOT_SEND_DATA 4U /* Send Immediate data */
-#define USBD_BOT_NO_DATA 5U /* No data Stage */
-
-#define USBD_BOT_CBW_SIGNATURE 0x43425355U
-#define USBD_BOT_CSW_SIGNATURE 0x53425355U
-#define USBD_BOT_CBW_LENGTH 31U
-#define USBD_BOT_CSW_LENGTH 13U
-#define USBD_BOT_MAX_DATA 256U
-
-/* CSW Status Definitions */
-#define USBD_CSW_CMD_PASSED 0x00U
-#define USBD_CSW_CMD_FAILED 0x01U
-#define USBD_CSW_PHASE_ERROR 0x02U
-
-/* BOT Status */
-#define USBD_BOT_STATUS_NORMAL 0U
-#define USBD_BOT_STATUS_RECOVERY 1U
-#define USBD_BOT_STATUS_ERROR 2U
-
-
-#define USBD_DIR_IN 0U
-#define USBD_DIR_OUT 1U
-#define USBD_BOTH_DIR 2U
-
-/**
- * @}
- */
-
-/** @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);
-/**
- * @}
- */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __USBD_MSC_BOT_H */
-/**
- * @}
- */
-
-/**
-* @}
-*/
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
-
diff --git a/lib/STM32_USB_Device_Library/Class/MSC/Inc/usbd_msc_data.h b/lib/STM32_USB_Device_Library/Class/MSC/Inc/usbd_msc_data.h
deleted file mode 100644
index 26838de02..000000000
--- a/lib/STM32_USB_Device_Library/Class/MSC/Inc/usbd_msc_data.h
+++ /dev/null
@@ -1,105 +0,0 @@
-/**
- ******************************************************************************
- * @file usbd_msc_data.h
- * @author MCD Application Team
- * @brief Header for the usbd_msc_data.c file
- ******************************************************************************
- * @attention
- *
- * © Copyright (c) 2015 STMicroelectronics.
- * All rights reserved.
- *
- * This software component is licensed by ST under Ultimate Liberty license
- * SLA0044, the "License"; You may not use this file except in compliance with
- * the License. You may obtain a copy of the License at:
- * www.st.com/SLA0044
- *
- ******************************************************************************
- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __USBD_MSC_DATA_H
-#define __USBD_MSC_DATA_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_conf.h"
-
-/** @addtogroup STM32_USB_DEVICE_LIBRARY
- * @{
- */
-
-/** @defgroup USB_INFO
- * @brief general defines for the usb device library file
- * @{
- */
-
-/** @defgroup USB_INFO_Exported_Defines
- * @{
- */
-#define MODE_SENSE6_LEN 0x17U
-#define MODE_SENSE10_LEN 0x1BU
-#define LENGTH_INQUIRY_PAGE00 0x06U
-#define LENGTH_INQUIRY_PAGE80 0x08U
-#define LENGTH_FORMAT_CAPACITIES 0x14U
-
-/**
- * @}
- */
-
-
-/** @defgroup USBD_INFO_Exported_TypesDefinitions
- * @{
- */
-/**
- * @}
- */
-
-
-
-/** @defgroup USBD_INFO_Exported_Macros
- * @{
- */
-
-/**
- * @}
- */
-
-/** @defgroup USBD_INFO_Exported_Variables
- * @{
- */
-extern uint8_t MSC_Page00_Inquiry_Data[LENGTH_INQUIRY_PAGE00];
-extern uint8_t MSC_Page80_Inquiry_Data[LENGTH_INQUIRY_PAGE80];
-extern uint8_t MSC_Mode_Sense6_data[MODE_SENSE6_LEN];
-extern uint8_t MSC_Mode_Sense10_data[MODE_SENSE10_LEN];
-
-/**
- * @}
- */
-
-/** @defgroup USBD_INFO_Exported_FunctionsPrototype
- * @{
- */
-
-/**
- * @}
- */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __USBD_MSC_DATA_H */
-
-/**
- * @}
- */
-
-/**
-* @}
-*/
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/lib/STM32_USB_Device_Library/Class/MSC/Inc/usbd_msc_scsi.h b/lib/STM32_USB_Device_Library/Class/MSC/Inc/usbd_msc_scsi.h
deleted file mode 100644
index b32ded0f6..000000000
--- a/lib/STM32_USB_Device_Library/Class/MSC/Inc/usbd_msc_scsi.h
+++ /dev/null
@@ -1,185 +0,0 @@
-/**
- ******************************************************************************
- * @file usbd_msc_scsi.h
- * @author MCD Application Team
- * @brief Header for the usbd_msc_scsi.c file
- ******************************************************************************
- * @attention
- *
- * © Copyright (c) 2015 STMicroelectronics.
- * All rights reserved.
- *
- * This software component is licensed by ST under Ultimate Liberty license
- * SLA0044, the "License"; You may not use this file except in compliance with
- * the License. You may obtain a copy of the License at:
- * www.st.com/SLA0044
- *
- ******************************************************************************
- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __USBD_MSC_SCSI_H
-#define __USBD_MSC_SCSI_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_def.h"
-
-/** @addtogroup STM32_USB_DEVICE_LIBRARY
- * @{
- */
-
-/** @defgroup USBD_SCSI
- * @brief header file for the storage disk file
- * @{
- */
-
-/** @defgroup USBD_SCSI_Exported_Defines
- * @{
- */
-
-#define SENSE_LIST_DEEPTH 4U
-
-/* SCSI Commands */
-#define SCSI_FORMAT_UNIT 0x04U
-#define SCSI_INQUIRY 0x12U
-#define SCSI_MODE_SELECT6 0x15U
-#define SCSI_MODE_SELECT10 0x55U
-#define SCSI_MODE_SENSE6 0x1AU
-#define SCSI_MODE_SENSE10 0x5AU
-#define SCSI_ALLOW_MEDIUM_REMOVAL 0x1EU
-#define SCSI_READ6 0x08U
-#define SCSI_READ10 0x28U
-#define SCSI_READ12 0xA8U
-#define SCSI_READ16 0x88U
-
-#define SCSI_READ_CAPACITY10 0x25U
-#define SCSI_READ_CAPACITY16 0x9EU
-
-#define SCSI_REQUEST_SENSE 0x03U
-#define SCSI_START_STOP_UNIT 0x1BU
-#define SCSI_TEST_UNIT_READY 0x00U
-#define SCSI_WRITE6 0x0AU
-#define SCSI_WRITE10 0x2AU
-#define SCSI_WRITE12 0xAAU
-#define SCSI_WRITE16 0x8AU
-
-#define SCSI_VERIFY10 0x2FU
-#define SCSI_VERIFY12 0xAFU
-#define SCSI_VERIFY16 0x8FU
-
-#define SCSI_SEND_DIAGNOSTIC 0x1DU
-#define SCSI_READ_FORMAT_CAPACITIES 0x23U
-
-#define NO_SENSE 0U
-#define RECOVERED_ERROR 1U
-#define NOT_READY 2U
-#define MEDIUM_ERROR 3U
-#define HARDWARE_ERROR 4U
-#define ILLEGAL_REQUEST 5U
-#define UNIT_ATTENTION 6U
-#define DATA_PROTECT 7U
-#define BLANK_CHECK 8U
-#define VENDOR_SPECIFIC 9U
-#define COPY_ABORTED 10U
-#define ABORTED_COMMAND 11U
-#define VOLUME_OVERFLOW 13U
-#define MISCOMPARE 14U
-
-
-#define INVALID_CDB 0x20U
-#define INVALID_FIELED_IN_COMMAND 0x24U
-#define PARAMETER_LIST_LENGTH_ERROR 0x1AU
-#define INVALID_FIELD_IN_PARAMETER_LIST 0x26U
-#define ADDRESS_OUT_OF_RANGE 0x21U
-#define MEDIUM_NOT_PRESENT 0x3AU
-#define MEDIUM_HAVE_CHANGED 0x28U
-#define WRITE_PROTECTED 0x27U
-#define UNRECOVERED_READ_ERROR 0x11U
-#define WRITE_FAULT 0x03U
-
-#define READ_FORMAT_CAPACITY_DATA_LEN 0x0CU
-#define READ_CAPACITY10_DATA_LEN 0x08U
-#define REQUEST_SENSE_DATA_LEN 0x12U
-#define STANDARD_INQUIRY_DATA_LEN 0x24U
-#define BLKVFY 0x04U
-
-#define SCSI_MEDIUM_UNLOCKED 0x00U
-#define SCSI_MEDIUM_LOCKED 0x01U
-#define SCSI_MEDIUM_EJECTED 0x02U
-/**
- * @}
- */
-
-
-/** @defgroup USBD_SCSI_Exported_TypesDefinitions
- * @{
- */
-
-typedef struct _SENSE_ITEM
-{
- uint8_t Skey;
- union
- {
- struct _ASCs
- {
- uint8_t ASC;
- uint8_t ASCQ;
- } b;
- uint8_t ASC;
- uint8_t *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);
-
-/**
- * @}
- */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __USBD_MSC_SCSI_H */
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
-* @}
-*/
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
-
diff --git a/lib/STM32_USB_Device_Library/Class/MSC/Inc/usbd_msc_storage_template.h b/lib/STM32_USB_Device_Library/Class/MSC/Inc/usbd_msc_storage_template.h
deleted file mode 100644
index 0288c308f..000000000
--- a/lib/STM32_USB_Device_Library/Class/MSC/Inc/usbd_msc_storage_template.h
+++ /dev/null
@@ -1,97 +0,0 @@
-/**
- ******************************************************************************
- * @file usbd_msc_storage.h
- * @author MCD Application Team
- * @brief Header file for the usbd_msc_storage.c file
- ******************************************************************************
- * @attention
- *
- * © Copyright (c) 2015 STMicroelectronics.
- * All rights reserved.
- *
- * This software component is licensed by ST under Ultimate Liberty license
- * SLA0044, the "License"; You may not use this file except in compliance with
- * the License. You may obtain a copy of the License at:
- * www.st.com/SLA0044
- *
- ******************************************************************************
- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __USBD_MSC_STORAGE_H
-#define __USBD_MSC_STORAGE_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_msc.h"
-
-/** @addtogroup STM32_USB_DEVICE_LIBRARY
- * @{
- */
-
-/** @defgroup USBD_STORAGE
- * @brief header file for the usbd_msc_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
- * @{
- */
-
-
-/**
- * @}
- */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __USBD_MSC_STORAGE_H */
-
-/**
- * @}
- */
-
-/**
-* @}
-*/
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/lib/STM32_USB_Device_Library/Class/MSC/Src/usbd_msc.c b/lib/STM32_USB_Device_Library/Class/MSC/Src/usbd_msc.c
deleted file mode 100644
index fe6e1c6a2..000000000
--- a/lib/STM32_USB_Device_Library/Class/MSC/Src/usbd_msc.c
+++ /dev/null
@@ -1,584 +0,0 @@
-/**
- ******************************************************************************
- * @file usbd_msc.c
- * @author MCD Application Team
- * @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
- *
- * © Copyright (c) 2015 STMicroelectronics.
- * All rights reserved.
- *
- * This software component is licensed by ST under Ultimate Liberty license
- * SLA0044, the "License"; You may not use this file except in compliance with
- * the License. You may obtain a copy of the License at:
- * www.st.com/SLA0044
- *
- ******************************************************************************
- */
-
-/* BSPDependencies
-- "stm32xxxxx_{eval}{discovery}{nucleo_144}.c"
-- "stm32xxxxx_{eval}{discovery}_io.c"
-- "stm32xxxxx_{eval}{discovery}{adafruit}_sd.c"
-EndBSPDependencies */
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_msc.h"
-
-
-/** @addtogroup STM32_USB_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 static 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 */
-__ALIGN_BEGIN static 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 static 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 static 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)
-{
- UNUSED(cfgidx);
- USBD_MSC_BOT_HandleTypeDef *hmsc;
-
- hmsc = USBD_malloc(sizeof(USBD_MSC_BOT_HandleTypeDef));
-
- if (hmsc == NULL)
- {
- pdev->pClassData = NULL;
- return (uint8_t)USBD_EMEM;
- }
-
- pdev->pClassData = (void *)hmsc;
-
- if (pdev->dev_speed == USBD_SPEED_HIGH)
- {
- /* Open EP OUT */
- (void)USBD_LL_OpenEP(pdev, MSC_EPOUT_ADDR, USBD_EP_TYPE_BULK, MSC_MAX_HS_PACKET);
- pdev->ep_out[MSC_EPOUT_ADDR & 0xFU].is_used = 1U;
-
- /* Open EP IN */
- (void)USBD_LL_OpenEP(pdev, MSC_EPIN_ADDR, USBD_EP_TYPE_BULK, MSC_MAX_HS_PACKET);
- pdev->ep_in[MSC_EPIN_ADDR & 0xFU].is_used = 1U;
- }
- else
- {
- /* Open EP OUT */
- (void)USBD_LL_OpenEP(pdev, MSC_EPOUT_ADDR, USBD_EP_TYPE_BULK, MSC_MAX_FS_PACKET);
- pdev->ep_out[MSC_EPOUT_ADDR & 0xFU].is_used = 1U;
-
- /* Open EP IN */
- (void)USBD_LL_OpenEP(pdev, MSC_EPIN_ADDR, USBD_EP_TYPE_BULK, MSC_MAX_FS_PACKET);
- pdev->ep_in[MSC_EPIN_ADDR & 0xFU].is_used = 1U;
- }
-
- /* Init the BOT layer */
- MSC_BOT_Init(pdev);
-
- return (uint8_t)USBD_OK;
-}
-
-/**
- * @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)
-{
- UNUSED(cfgidx);
-
- /* Close MSC EPs */
- (void)USBD_LL_CloseEP(pdev, MSC_EPOUT_ADDR);
- pdev->ep_out[MSC_EPOUT_ADDR & 0xFU].is_used = 0U;
-
- /* Close EP IN */
- (void)USBD_LL_CloseEP(pdev, MSC_EPIN_ADDR);
- pdev->ep_in[MSC_EPIN_ADDR & 0xFU].is_used = 0U;
-
- /* De-Init the BOT layer */
- MSC_BOT_DeInit(pdev);
-
- /* Free MSC Class Resources */
- if (pdev->pClassData != NULL)
- {
- (void)USBD_free(pdev->pClassData);
- pdev->pClassData = NULL;
- }
-
- return (uint8_t)USBD_OK;
-}
-/**
-* @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 = (USBD_MSC_BOT_HandleTypeDef *)pdev->pClassData;
- USBD_StatusTypeDef ret = USBD_OK;
- uint16_t status_info = 0U;
-
- 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 == 0U) && (req->wLength == 1U) &&
- ((req->bmRequest & 0x80U) == 0x80U))
- {
- hmsc->max_lun = (uint32_t)((USBD_StorageTypeDef *)pdev->pUserData)->GetMaxLun();
- (void)USBD_CtlSendData(pdev, (uint8_t *)&hmsc->max_lun, 1U);
- }
- else
- {
- USBD_CtlError(pdev, req);
- ret = USBD_FAIL;
- }
- break;
-
- case BOT_RESET :
- if ((req->wValue == 0U) && (req->wLength == 0U) &&
- ((req->bmRequest & 0x80U) != 0x80U))
- {
- MSC_BOT_Reset(pdev);
- }
- else
- {
- USBD_CtlError(pdev, req);
- ret = USBD_FAIL;
- }
- break;
-
- default:
- USBD_CtlError(pdev, req);
- ret = USBD_FAIL;
- break;
- }
- break;
- /* Interface & Endpoint request */
- 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_INTERFACE:
- if (pdev->dev_state == USBD_STATE_CONFIGURED)
- {
- (void)USBD_CtlSendData(pdev, (uint8_t *)&hmsc->interface, 1U);
- }
- else
- {
- USBD_CtlError(pdev, req);
- ret = USBD_FAIL;
- }
- break;
-
- case USB_REQ_SET_INTERFACE:
- if (pdev->dev_state == USBD_STATE_CONFIGURED)
- {
- hmsc->interface = (uint8_t)(req->wValue);
- }
- else
- {
- USBD_CtlError(pdev, req);
- ret = USBD_FAIL;
- }
- break;
-
- case USB_REQ_CLEAR_FEATURE:
- if (pdev->dev_state == USBD_STATE_CONFIGURED)
- {
- if (req->wValue == USB_FEATURE_EP_HALT)
- {
- /* Flush the FIFO */
- (void)USBD_LL_FlushEP(pdev, (uint8_t)req->wIndex);
-
- /* Handle BOT error */
- MSC_BOT_CplClrFeature(pdev, (uint8_t)req->wIndex);
- }
- }
- break;
-
- default:
- USBD_CtlError(pdev, req);
- ret = USBD_FAIL;
- break;
- }
- break;
-
- default:
- USBD_CtlError(pdev, req);
- ret = USBD_FAIL;
- break;
- }
-
- return (uint8_t)ret;
-}
-
-/**
-* @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 (uint8_t)USBD_OK;
-}
-
-/**
-* @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 (uint8_t)USBD_OK;
-}
-
-/**
-* @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 = (uint16_t)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 = (uint16_t)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 = (uint16_t)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 = (uint16_t)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)
- {
- return (uint8_t)USBD_FAIL;
- }
-
- pdev->pUserData = fops;
-
- return (uint8_t)USBD_OK;
-}
-
-/**
- * @}
- */
-
-
-/**
- * @}
- */
-
-
-/**
- * @}
- */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/lib/STM32_USB_Device_Library/Class/MSC/Src/usbd_msc_bot.c b/lib/STM32_USB_Device_Library/Class/MSC/Src/usbd_msc_bot.c
deleted file mode 100644
index ae68ac055..000000000
--- a/lib/STM32_USB_Device_Library/Class/MSC/Src/usbd_msc_bot.c
+++ /dev/null
@@ -1,386 +0,0 @@
-/**
- ******************************************************************************
- * @file usbd_msc_bot.c
- * @author MCD Application Team
- * @brief This file provides all the BOT protocol core functions.
- ******************************************************************************
- * @attention
- *
- * © Copyright (c) 2015 STMicroelectronics.
- * All rights reserved.
- *
- * This software component is licensed by ST under Ultimate Liberty license
- * SLA0044, the "License"; You may not use this file except in compliance with
- * the License. You may obtain a copy of the License at:
- * www.st.com/SLA0044
- *
- ******************************************************************************
- */
-
-/* BSPDependencies
-- "stm32xxxxx_{eval}{discovery}{nucleo_144}.c"
-- "stm32xxxxx_{eval}{discovery}_io.c"
-- "stm32xxxxx_{eval}{discovery}{adafruit}_sd.c"
-EndBSPDependencies */
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_msc_bot.h"
-#include "usbd_msc.h"
-#include "usbd_msc_scsi.h"
-#include "usbd_ioreq.h"
-
-/** @addtogroup STM32_USB_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_SendData(USBD_HandleTypeDef *pdev, uint8_t *pbuf, uint32_t len);
-static void MSC_BOT_CBW_Decode(USBD_HandleTypeDef *pdev);
-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 = (USBD_MSC_BOT_HandleTypeDef *)pdev->pClassData;
-
- hmsc->bot_state = USBD_BOT_IDLE;
- hmsc->bot_status = USBD_BOT_STATUS_NORMAL;
-
- hmsc->scsi_sense_tail = 0U;
- hmsc->scsi_sense_head = 0U;
- hmsc->scsi_medium_state = SCSI_MEDIUM_UNLOCKED;
-
- ((USBD_StorageTypeDef *)pdev->pUserData)->Init(0U);
-
- (void)USBD_LL_FlushEP(pdev, MSC_EPOUT_ADDR);
- (void)USBD_LL_FlushEP(pdev, MSC_EPIN_ADDR);
-
- /* Prapare EP to Receive First BOT Cmd */
- (void)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 = (USBD_MSC_BOT_HandleTypeDef *)pdev->pClassData;
-
- hmsc->bot_state = USBD_BOT_IDLE;
- hmsc->bot_status = USBD_BOT_STATUS_RECOVERY;
-
- (void)USBD_LL_ClearStallEP(pdev, MSC_EPIN_ADDR);
- (void)USBD_LL_ClearStallEP(pdev, MSC_EPOUT_ADDR);
-
- /* Prapare EP to Receive First BOT Cmd */
- (void)USBD_LL_PrepareReceive(pdev, MSC_EPOUT_ADDR, (uint8_t *)&hmsc->cbw,
- USBD_BOT_CBW_LENGTH);
-}
-
-/**
-* @brief MSC_BOT_DeInit
-* Deinitialize the BOT Machine
-* @param pdev: device instance
-* @retval None
-*/
-void MSC_BOT_DeInit(USBD_HandleTypeDef *pdev)
-{
- USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef *)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)
-{
- UNUSED(epnum);
-
- USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef *)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
-* Process MSC OUT data
-* @param pdev: device instance
-* @param epnum: endpoint index
-* @retval None
-*/
-void MSC_BOT_DataOut(USBD_HandleTypeDef *pdev, uint8_t epnum)
-{
- UNUSED(epnum);
-
- USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef *)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 accordingly
-* @param pdev: device instance
-* @retval None
-*/
-static void MSC_BOT_CBW_Decode(USBD_HandleTypeDef *pdev)
-{
- USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef *)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 > 1U) || (hmsc->cbw.bCBLength < 1U) ||
- (hmsc->cbw.bCBLength > 16U))
- {
- 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 > 0U)
- {
- MSC_BOT_SendData(pdev, hmsc->bot_data, hmsc->bot_data_length);
- }
- else if (hmsc->bot_data_length == 0U)
- {
- MSC_BOT_SendCSW(pdev, USBD_CSW_CMD_PASSED);
- }
- else
- {
- MSC_BOT_Abort(pdev);
- }
- }
- else
- {
- return;
- }
- }
-}
-
-/**
-* @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 *pbuf, uint32_t len)
-{
- USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef *)pdev->pClassData;
-
- uint32_t length = MIN(hmsc->cbw.dDataLength, len);
-
- hmsc->csw.dDataResidue -= len;
- hmsc->csw.bStatus = USBD_CSW_CMD_PASSED;
- hmsc->bot_state = USBD_BOT_SEND_DATA;
-
- (void)USBD_LL_Transmit(pdev, MSC_EPIN_ADDR, pbuf, length);
-}
-
-/**
-* @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 = (USBD_MSC_BOT_HandleTypeDef *)pdev->pClassData;
-
- hmsc->csw.dSignature = USBD_BOT_CSW_SIGNATURE;
- hmsc->csw.bStatus = CSW_Status;
- hmsc->bot_state = USBD_BOT_IDLE;
-
- (void)USBD_LL_Transmit(pdev, MSC_EPIN_ADDR, (uint8_t *)&hmsc->csw,
- USBD_BOT_CSW_LENGTH);
-
- /* Prepare EP to Receive next Cmd */
- (void)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 = (USBD_MSC_BOT_HandleTypeDef *)pdev->pClassData;
-
- if ((hmsc->cbw.bmFlags == 0U) &&
- (hmsc->cbw.dDataLength != 0U) &&
- (hmsc->bot_status == USBD_BOT_STATUS_NORMAL))
- {
- (void)USBD_LL_StallEP(pdev, MSC_EPOUT_ADDR);
- }
-
- (void)USBD_LL_StallEP(pdev, MSC_EPIN_ADDR);
-
- if (hmsc->bot_status == USBD_BOT_STATUS_ERROR)
- {
- (void)USBD_LL_StallEP(pdev, MSC_EPIN_ADDR);
- (void)USBD_LL_StallEP(pdev, MSC_EPOUT_ADDR);
- }
-}
-
-/**
-* @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 = (USBD_MSC_BOT_HandleTypeDef *)pdev->pClassData;
-
- if (hmsc->bot_status == USBD_BOT_STATUS_ERROR) /* Bad CBW Signature */
- {
- (void)USBD_LL_StallEP(pdev, MSC_EPIN_ADDR);
- (void)USBD_LL_StallEP(pdev, MSC_EPOUT_ADDR);
- }
- else if (((epnum & 0x80U) == 0x80U) && (hmsc->bot_status != USBD_BOT_STATUS_RECOVERY))
- {
- MSC_BOT_SendCSW(pdev, USBD_CSW_CMD_FAILED);
- }
- else
- {
- return;
- }
-}
-/**
- * @}
- */
-
-
-/**
- * @}
- */
-
-
-/**
- * @}
- */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/lib/STM32_USB_Device_Library/Class/MSC/Src/usbd_msc_data.c b/lib/STM32_USB_Device_Library/Class/MSC/Src/usbd_msc_data.c
deleted file mode 100644
index d1c3a9772..000000000
--- a/lib/STM32_USB_Device_Library/Class/MSC/Src/usbd_msc_data.c
+++ /dev/null
@@ -1,183 +0,0 @@
-/**
- ******************************************************************************
- * @file usbd_msc_data.c
- * @author MCD Application Team
- * @brief This file provides all the vital inquiry pages and sense data.
- ******************************************************************************
- * @attention
- *
- * © Copyright (c) 2015 STMicroelectronics.
- * All rights reserved.
- *
- * This software component is licensed by ST under Ultimate Liberty license
- * SLA0044, the "License"; You may not use this file except in compliance with
- * the License. You may obtain a copy of the License at:
- * www.st.com/SLA0044
- *
- ******************************************************************************
- */
-
-/* BSPDependencies
-- "stm32xxxxx_{eval}{discovery}{nucleo_144}.c"
-- "stm32xxxxx_{eval}{discovery}_io.c"
-- "stm32xxxxx_{eval}{discovery}{adafruit}_sd.c"
-EndBSPDependencies */
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_msc_data.h"
-
-
-/** @addtogroup STM32_USB_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 */
-uint8_t MSC_Page00_Inquiry_Data[LENGTH_INQUIRY_PAGE00] =
-{
- 0x00,
- 0x00,
- 0x00,
- (LENGTH_INQUIRY_PAGE00 - 4U),
- 0x00,
- 0x80
-};
-
-/* USB Mass storage VPD Page 0x80 Inquiry Data for Unit Serial Number */
-uint8_t MSC_Page80_Inquiry_Data[LENGTH_INQUIRY_PAGE80] =
-{
- 0x00,
- 0x80,
- 0x00,
- LENGTH_INQUIRY_PAGE80,
- 0x20, /* Put Product Serial number */
- 0x20,
- 0x20,
- 0x20
- };
-
-/* USB Mass storage sense 6 Data */
-uint8_t MSC_Mode_Sense6_data[MODE_SENSE6_LEN] =
-{
- 0x22,
- 0x00,
- 0x00,
- 0x00,
- 0x08,
- 0x12,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00
-};
-
-
-/* USB Mass storage sense 10 Data */
-uint8_t MSC_Mode_Sense10_data[MODE_SENSE10_LEN] =
-{
- 0x00,
- 0x26,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x08,
- 0x12,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 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/lib/STM32_USB_Device_Library/Class/MSC/Src/usbd_msc_scsi.c b/lib/STM32_USB_Device_Library/Class/MSC/Src/usbd_msc_scsi.c
deleted file mode 100644
index 5c36a6e8c..000000000
--- a/lib/STM32_USB_Device_Library/Class/MSC/Src/usbd_msc_scsi.c
+++ /dev/null
@@ -1,1075 +0,0 @@
-/**
- ******************************************************************************
- * @file usbd_msc_scsi.c
- * @author MCD Application Team
- * @brief This file provides all the USBD SCSI layer functions.
- ******************************************************************************
- * @attention
- *
- * © Copyright (c) 2015 STMicroelectronics.
- * All rights reserved.
- *
- * This software component is licensed by ST under Ultimate Liberty license
- * SLA0044, the "License"; You may not use this file except in compliance with
- * the License. You may obtain a copy of the License at:
- * www.st.com/SLA0044
- *
- ******************************************************************************
- */
-
-/* BSPDependencies
-- "stm32xxxxx_{eval}{discovery}{nucleo_144}.c"
-- "stm32xxxxx_{eval}{discovery}_io.c"
-- "stm32xxxxx_{eval}{discovery}{adafruit}_sd.c"
-EndBSPDependencies */
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_msc_bot.h"
-#include "usbd_msc_scsi.h"
-#include "usbd_msc.h"
-#include "usbd_msc_data.h"
-
-
-/** @addtogroup STM32_USB_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_ReadCapacity16(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_AllowPreventRemovable(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_Write12(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_Read12(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, uint32_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);
-
-static int8_t SCSI_UpdateBotData(USBD_MSC_BOT_HandleTypeDef *hmsc,
- uint8_t *pBuff, uint16_t length);
-/**
- * @}
- */
-
-
-/** @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 *cmd)
-{
- int8_t ret;
- USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef *)pdev->pClassData;
-
- switch (cmd[0])
- {
- case SCSI_TEST_UNIT_READY:
- ret = SCSI_TestUnitReady(pdev, lun, cmd);
- break;
-
- case SCSI_REQUEST_SENSE:
- ret = SCSI_RequestSense(pdev, lun, cmd);
- break;
-
- case SCSI_INQUIRY:
- ret = SCSI_Inquiry(pdev, lun, cmd);
- break;
-
- case SCSI_START_STOP_UNIT:
- ret = SCSI_StartStopUnit(pdev, lun, cmd);
- break;
-
- case SCSI_ALLOW_MEDIUM_REMOVAL:
- ret = SCSI_AllowPreventRemovable(pdev, lun, cmd);
- break;
-
- case SCSI_MODE_SENSE6:
- ret = SCSI_ModeSense6(pdev, lun, cmd);
- break;
-
- case SCSI_MODE_SENSE10:
- ret = SCSI_ModeSense10(pdev, lun, cmd);
- break;
-
- case SCSI_READ_FORMAT_CAPACITIES:
- ret = SCSI_ReadFormatCapacity(pdev, lun, cmd);
- break;
-
- case SCSI_READ_CAPACITY10:
- ret = SCSI_ReadCapacity10(pdev, lun, cmd);
- break;
-
- case SCSI_READ_CAPACITY16:
- ret = SCSI_ReadCapacity16(pdev, lun, cmd);
- break;
-
- case SCSI_READ10:
- ret = SCSI_Read10(pdev, lun, cmd);
- break;
-
- case SCSI_READ12:
- ret = SCSI_Read12(pdev, lun, cmd);
- break;
-
- case SCSI_WRITE10:
- ret = SCSI_Write10(pdev, lun, cmd);
- break;
-
- case SCSI_WRITE12:
- ret = SCSI_Write12(pdev, lun, cmd);
- break;
-
- case SCSI_VERIFY10:
- ret = SCSI_Verify10(pdev, lun, cmd);
- break;
-
- default:
- SCSI_SenseCode(pdev, lun, ILLEGAL_REQUEST, INVALID_CDB);
- hmsc->bot_status = USBD_BOT_STATUS_ERROR;
- ret = -1;
- break;
- }
-
- return ret;
-}
-
-
-/**
-* @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)
-{
- UNUSED(params);
- USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef *)pdev->pClassData;
-
- /* case 9 : Hi > D0 */
- if (hmsc->cbw.dDataLength != 0U)
- {
- SCSI_SenseCode(pdev, hmsc->cbw.bLUN, ILLEGAL_REQUEST, INVALID_CDB);
-
- return -1;
- }
-
- if (hmsc->scsi_medium_state == SCSI_MEDIUM_EJECTED)
- {
- SCSI_SenseCode(pdev, lun, NOT_READY, MEDIUM_NOT_PRESENT);
- hmsc->bot_state = USBD_BOT_NO_DATA;
- 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 = 0U;
-
- 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 = (USBD_MSC_BOT_HandleTypeDef *)pdev->pClassData;
-
- if (hmsc->cbw.dDataLength == 0U)
- {
- SCSI_SenseCode(pdev, hmsc->cbw.bLUN, ILLEGAL_REQUEST, INVALID_CDB);
- return -1;
- }
-
- if ((params[1] & 0x01U) != 0U) /* Evpd is set */
- {
- if (params[2] == 0U) /* Request for Supported Vital Product Data Pages*/
- {
- (void)SCSI_UpdateBotData(hmsc, MSC_Page00_Inquiry_Data, LENGTH_INQUIRY_PAGE00);
- }
- else if (params[2] == 0x80U) /* Request for VPD page 0x80 Unit Serial Number */
- {
- (void)SCSI_UpdateBotData(hmsc, MSC_Page80_Inquiry_Data, LENGTH_INQUIRY_PAGE80);
- }
- else /* Request Not supported */
- {
- SCSI_SenseCode(pdev, hmsc->cbw.bLUN, ILLEGAL_REQUEST,
- INVALID_FIELED_IN_COMMAND);
-
- return -1;
- }
- }
- else
- {
- pPage = (uint8_t *)&((USBD_StorageTypeDef *)pdev->pUserData)->pInquiry[lun * STANDARD_INQUIRY_DATA_LEN];
- len = (uint16_t)pPage[4] + 5U;
-
- if (params[4] <= len)
- {
- len = params[4];
- }
-
- (void)SCSI_UpdateBotData(hmsc, 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)
-{
- UNUSED(params);
- int8_t ret;
- USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef *)pdev->pClassData;
-
- ret = ((USBD_StorageTypeDef *)pdev->pUserData)->GetCapacity(lun, &hmsc->scsi_blk_nbr, &hmsc->scsi_blk_size);
-
- if ((ret != 0) || (hmsc->scsi_medium_state == SCSI_MEDIUM_EJECTED))
- {
- SCSI_SenseCode(pdev, lun, NOT_READY, MEDIUM_NOT_PRESENT);
- return -1;
- }
-
- hmsc->bot_data[0] = (uint8_t)((hmsc->scsi_blk_nbr - 1U) >> 24);
- hmsc->bot_data[1] = (uint8_t)((hmsc->scsi_blk_nbr - 1U) >> 16);
- hmsc->bot_data[2] = (uint8_t)((hmsc->scsi_blk_nbr - 1U) >> 8);
- hmsc->bot_data[3] = (uint8_t)(hmsc->scsi_blk_nbr - 1U);
-
- 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 = 8U;
-
- return 0;
-
-}
-
-
-/**
-* @brief SCSI_ReadCapacity16
-* Process Read Capacity 16 command
-* @param lun: Logical unit number
-* @param params: Command parameters
-* @retval status
-*/
-static int8_t SCSI_ReadCapacity16(USBD_HandleTypeDef *pdev, uint8_t lun, uint8_t *params)
-{
- UNUSED(params);
- uint8_t idx;
- int8_t ret;
- USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef *)pdev->pClassData;
-
- ret = ((USBD_StorageTypeDef *)pdev->pUserData)->GetCapacity(lun, &hmsc->scsi_blk_nbr, &hmsc->scsi_blk_size);
-
- if ((ret != 0) || (hmsc->scsi_medium_state == SCSI_MEDIUM_EJECTED))
- {
- SCSI_SenseCode(pdev, lun, NOT_READY, MEDIUM_NOT_PRESENT);
- return -1;
- }
-
- hmsc->bot_data_length = ((uint32_t)params[10] << 24) |
- ((uint32_t)params[11] << 16) |
- ((uint32_t)params[12] << 8) |
- (uint32_t)params[13];
-
- for (idx = 0U; idx < hmsc->bot_data_length; idx++)
- {
- hmsc->bot_data[idx] = 0U;
- }
-
- hmsc->bot_data[4] = (uint8_t)((hmsc->scsi_blk_nbr - 1U) >> 24);
- hmsc->bot_data[5] = (uint8_t)((hmsc->scsi_blk_nbr - 1U) >> 16);
- hmsc->bot_data[6] = (uint8_t)((hmsc->scsi_blk_nbr - 1U) >> 8);
- hmsc->bot_data[7] = (uint8_t)(hmsc->scsi_blk_nbr - 1U);
-
- hmsc->bot_data[8] = (uint8_t)(hmsc->scsi_blk_size >> 24);
- hmsc->bot_data[9] = (uint8_t)(hmsc->scsi_blk_size >> 16);
- hmsc->bot_data[10] = (uint8_t)(hmsc->scsi_blk_size >> 8);
- hmsc->bot_data[11] = (uint8_t)(hmsc->scsi_blk_size);
-
- hmsc->bot_data_length = ((uint32_t)params[10] << 24) |
- ((uint32_t)params[11] << 16) |
- ((uint32_t)params[12] << 8) |
- (uint32_t)params[13];
-
- 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)
-{
- UNUSED(params);
- uint16_t blk_size;
- uint32_t blk_nbr;
- uint16_t i;
- int8_t ret;
- USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef *)pdev->pClassData;
-
- ret = ((USBD_StorageTypeDef *)pdev->pUserData)->GetCapacity(lun, &blk_nbr, &blk_size);
-
- if ((ret != 0) || (hmsc->scsi_medium_state == SCSI_MEDIUM_EJECTED))
- {
- SCSI_SenseCode(pdev, lun, NOT_READY, MEDIUM_NOT_PRESENT);
- return -1;
- }
-
- for (i = 0U; i < 12U ; i++)
- {
- hmsc->bot_data[i] = 0U;
- }
-
- hmsc->bot_data[3] = 0x08U;
- hmsc->bot_data[4] = (uint8_t)((blk_nbr - 1U) >> 24);
- hmsc->bot_data[5] = (uint8_t)((blk_nbr - 1U) >> 16);
- hmsc->bot_data[6] = (uint8_t)((blk_nbr - 1U) >> 8);
- hmsc->bot_data[7] = (uint8_t)(blk_nbr - 1U);
-
- hmsc->bot_data[8] = 0x02U;
- 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 = 12U;
-
- 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)
-{
- UNUSED(lun);
- USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef *)pdev->pClassData;
- uint16_t len = MODE_SENSE6_LEN;
-
- if (params[4] <= len)
- {
- len = params[4];
- }
-
- (void)SCSI_UpdateBotData(hmsc, 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)
-{
- UNUSED(lun);
- USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef *)pdev->pClassData;
- uint16_t len = MODE_SENSE10_LEN;
-
- if (params[8] <= len)
- {
- len = params[8];
- }
-
- (void)SCSI_UpdateBotData(hmsc, 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)
-{
- UNUSED(lun);
- uint8_t i;
- USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef *)pdev->pClassData;
-
- if (hmsc->cbw.dDataLength == 0U)
- {
- SCSI_SenseCode(pdev, hmsc->cbw.bLUN, ILLEGAL_REQUEST, INVALID_CDB);
- return -1;
- }
-
- for (i = 0U; i < REQUEST_SENSE_DATA_LEN; i++)
- {
- hmsc->bot_data[i] = 0U;
- }
-
- hmsc->bot_data[0] = 0x70U;
- hmsc->bot_data[7] = REQUEST_SENSE_DATA_LEN - 6U;
-
- if ((hmsc->scsi_sense_head != hmsc->scsi_sense_tail))
- {
- hmsc->bot_data[2] = (uint8_t)hmsc->scsi_sense[hmsc->scsi_sense_head].Skey;
- hmsc->bot_data[12] = (uint8_t)hmsc->scsi_sense[hmsc->scsi_sense_head].w.b.ASC;
- hmsc->bot_data[13] = (uint8_t)hmsc->scsi_sense[hmsc->scsi_sense_head].w.b.ASCQ;
- hmsc->scsi_sense_head++;
-
- if (hmsc->scsi_sense_head == SENSE_LIST_DEEPTH)
- {
- hmsc->scsi_sense_head = 0U;
- }
- }
-
- 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 Code
-* @retval none
-
-*/
-void SCSI_SenseCode(USBD_HandleTypeDef *pdev, uint8_t lun, uint8_t sKey, uint8_t ASC)
-{
- UNUSED(lun);
- USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef *)pdev->pClassData;
-
- hmsc->scsi_sense[hmsc->scsi_sense_tail].Skey = sKey;
- hmsc->scsi_sense[hmsc->scsi_sense_tail].w.b.ASC = ASC;
- hmsc->scsi_sense[hmsc->scsi_sense_tail].w.b.ASCQ = 0U;
- hmsc->scsi_sense_tail++;
-
- if (hmsc->scsi_sense_tail == SENSE_LIST_DEEPTH)
- {
- hmsc->scsi_sense_tail = 0U;
- }
-}
-
-
-/**
-* @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)
-{
- UNUSED(lun);
- USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef *)pdev->pClassData;
-
- if ((hmsc->scsi_medium_state == SCSI_MEDIUM_LOCKED) && ((params[4] & 0x3U) == 2U))
- {
- SCSI_SenseCode(pdev, lun, ILLEGAL_REQUEST, INVALID_FIELED_IN_COMMAND);
-
- return -1;
- }
-
- if ((params[4] & 0x3U) == 0x1U) /* START=1 */
- {
- hmsc->scsi_medium_state = SCSI_MEDIUM_UNLOCKED;
- }
- else if ((params[4] & 0x3U) == 0x2U) /* START=0 and LOEJ Load Eject=1 */
- {
- hmsc->scsi_medium_state = SCSI_MEDIUM_EJECTED;
- }
- else if ((params[4] & 0x3U) == 0x3U) /* START=1 and LOEJ Load Eject=1 */
- {
- hmsc->scsi_medium_state = SCSI_MEDIUM_UNLOCKED;
- }
- else
- {
- /* .. */
- }
- hmsc->bot_data_length = 0U;
-
- return 0;
-}
-
-
-/**
-* @brief SCSI_AllowPreventRemovable
-* Process Allow Prevent Removable medium command
-* @param lun: Logical unit number
-* @param params: Command parameters
-* @retval status
-*/
-static int8_t SCSI_AllowPreventRemovable(USBD_HandleTypeDef *pdev, uint8_t lun, uint8_t *params)
-{
- UNUSED(lun);
- USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef *)pdev->pClassData;
-
- if (params[4] == 0U)
- {
- hmsc->scsi_medium_state = SCSI_MEDIUM_UNLOCKED;
- }
- else
- {
- hmsc->scsi_medium_state = SCSI_MEDIUM_LOCKED;
- }
-
- hmsc->bot_data_length = 0U;
-
- 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 = (USBD_MSC_BOT_HandleTypeDef *)pdev->pClassData;
-
- if (hmsc->bot_state == USBD_BOT_IDLE) /* Idle */
- {
- /* case 10 : Ho <> Di */
- if ((hmsc->cbw.bmFlags & 0x80U) != 0x80U)
- {
- SCSI_SenseCode(pdev, hmsc->cbw.bLUN, ILLEGAL_REQUEST, INVALID_CDB);
- return -1;
- }
-
- if (hmsc->scsi_medium_state == SCSI_MEDIUM_EJECTED)
- {
- SCSI_SenseCode(pdev, lun, NOT_READY, MEDIUM_NOT_PRESENT);
-
- 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 = ((uint32_t)params[2] << 24) |
- ((uint32_t)params[3] << 16) |
- ((uint32_t)params[4] << 8) |
- (uint32_t)params[5];
-
- hmsc->scsi_blk_len = ((uint32_t)params[7] << 8) | (uint32_t)params[8];
-
- if (SCSI_CheckAddressRange(pdev, lun, hmsc->scsi_blk_addr,
- hmsc->scsi_blk_len) < 0)
- {
- return -1; /* error */
- }
-
- /* cases 4,5 : Hi <> Dn */
- if (hmsc->cbw.dDataLength != (hmsc->scsi_blk_len * hmsc->scsi_blk_size))
- {
- SCSI_SenseCode(pdev, hmsc->cbw.bLUN, ILLEGAL_REQUEST, INVALID_CDB);
- return -1;
- }
-
- hmsc->bot_state = USBD_BOT_DATA_IN;
- }
- hmsc->bot_data_length = MSC_MEDIA_PACKET;
-
- return SCSI_ProcessRead(pdev, lun);
-}
-
-
-/**
-* @brief SCSI_Read12
-* Process Read12 command
-* @param lun: Logical unit number
-* @param params: Command parameters
-* @retval status
-*/
-static int8_t SCSI_Read12(USBD_HandleTypeDef *pdev, uint8_t lun, uint8_t *params)
-{
- USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef *)pdev->pClassData;
-
- if (hmsc->bot_state == USBD_BOT_IDLE) /* Idle */
- {
- /* case 10 : Ho <> Di */
- if ((hmsc->cbw.bmFlags & 0x80U) != 0x80U)
- {
- SCSI_SenseCode(pdev, hmsc->cbw.bLUN, ILLEGAL_REQUEST, INVALID_CDB);
- return -1;
- }
-
- if (hmsc->scsi_medium_state == SCSI_MEDIUM_EJECTED)
- {
- SCSI_SenseCode(pdev, lun, NOT_READY, MEDIUM_NOT_PRESENT);
- 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 = ((uint32_t)params[2] << 24) |
- ((uint32_t)params[3] << 16) |
- ((uint32_t)params[4] << 8) |
- (uint32_t)params[5];
-
- hmsc->scsi_blk_len = ((uint32_t)params[6] << 24) |
- ((uint32_t)params[7] << 16) |
- ((uint32_t)params[8] << 8) |
- (uint32_t)params[9];
-
- if (SCSI_CheckAddressRange(pdev, lun, hmsc->scsi_blk_addr,
- hmsc->scsi_blk_len) < 0)
- {
- return -1; /* error */
- }
-
- /* cases 4,5 : Hi <> Dn */
- if (hmsc->cbw.dDataLength != (hmsc->scsi_blk_len * hmsc->scsi_blk_size))
- {
- SCSI_SenseCode(pdev, hmsc->cbw.bLUN, ILLEGAL_REQUEST, INVALID_CDB);
- return -1;
- }
-
- hmsc->bot_state = USBD_BOT_DATA_IN;
- }
- 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 = (USBD_MSC_BOT_HandleTypeDef *)pdev->pClassData;
- uint32_t len;
-
- if (hmsc->bot_state == USBD_BOT_IDLE) /* Idle */
- {
- if (hmsc->cbw.dDataLength == 0U)
- {
- SCSI_SenseCode(pdev, hmsc->cbw.bLUN, ILLEGAL_REQUEST, INVALID_CDB);
- return -1;
- }
-
- /* case 8 : Hi <> Do */
- if ((hmsc->cbw.bmFlags & 0x80U) == 0x80U)
- {
- 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 = ((uint32_t)params[2] << 24) |
- ((uint32_t)params[3] << 16) |
- ((uint32_t)params[4] << 8) |
- (uint32_t)params[5];
-
- hmsc->scsi_blk_len = ((uint32_t)params[7] << 8) |
- (uint32_t)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 */
- }
-
- len = hmsc->scsi_blk_len * hmsc->scsi_blk_size;
-
- /* cases 3,11,13 : Hn,Ho <> D0 */
- if (hmsc->cbw.dDataLength != len)
- {
- SCSI_SenseCode(pdev, hmsc->cbw.bLUN, ILLEGAL_REQUEST, INVALID_CDB);
- return -1;
- }
-
- len = MIN(len, MSC_MEDIA_PACKET);
-
- /* Prepare EP to receive first data packet */
- hmsc->bot_state = USBD_BOT_DATA_OUT;
- (void)USBD_LL_PrepareReceive(pdev, MSC_EPOUT_ADDR, hmsc->bot_data, len);
- }
- else /* Write Process ongoing */
- {
- return SCSI_ProcessWrite(pdev, lun);
- }
-
- return 0;
-}
-
-
-/**
-* @brief SCSI_Write12
-* Process Write12 command
-* @param lun: Logical unit number
-* @param params: Command parameters
-* @retval status
-*/
-static int8_t SCSI_Write12(USBD_HandleTypeDef *pdev, uint8_t lun, uint8_t *params)
-{
- USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef *)pdev->pClassData;
- uint32_t len;
-
- if (hmsc->bot_state == USBD_BOT_IDLE) /* Idle */
- {
- if (hmsc->cbw.dDataLength == 0U)
- {
- SCSI_SenseCode(pdev, hmsc->cbw.bLUN, ILLEGAL_REQUEST, INVALID_CDB);
- return -1;
- }
-
- /* case 8 : Hi <> Do */
- if ((hmsc->cbw.bmFlags & 0x80U) == 0x80U)
- {
- 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);
- hmsc->bot_state = USBD_BOT_NO_DATA;
- return -1;
- }
-
- /* Check If media is write-protected */
- if (((USBD_StorageTypeDef *)pdev->pUserData)->IsWriteProtected(lun) != 0)
- {
- SCSI_SenseCode(pdev, lun, NOT_READY, WRITE_PROTECTED);
- hmsc->bot_state = USBD_BOT_NO_DATA;
- return -1;
- }
-
- hmsc->scsi_blk_addr = ((uint32_t)params[2] << 24) |
- ((uint32_t)params[3] << 16) |
- ((uint32_t)params[4] << 8) |
- (uint32_t)params[5];
-
- hmsc->scsi_blk_len = ((uint32_t)params[6] << 24) |
- ((uint32_t)params[7] << 16) |
- ((uint32_t)params[8] << 8) |
- (uint32_t)params[9];
-
- /* 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 */
- }
-
- len = hmsc->scsi_blk_len * hmsc->scsi_blk_size;
-
- /* cases 3,11,13 : Hn,Ho <> D0 */
- if (hmsc->cbw.dDataLength != len)
- {
- SCSI_SenseCode(pdev, hmsc->cbw.bLUN, ILLEGAL_REQUEST, INVALID_CDB);
- return -1;
- }
-
- len = MIN(len, MSC_MEDIA_PACKET);
-
- /* Prepare EP to receive first data packet */
- hmsc->bot_state = USBD_BOT_DATA_OUT;
- (void)USBD_LL_PrepareReceive(pdev, MSC_EPOUT_ADDR, hmsc->bot_data, len);
- }
- 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 = (USBD_MSC_BOT_HandleTypeDef *)pdev->pClassData;
-
- if ((params[1] & 0x02U) == 0x02U)
- {
- 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 = 0U;
-
- 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, uint32_t blk_nbr)
-{
- USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef *)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 = (USBD_MSC_BOT_HandleTypeDef *)pdev->pClassData;
- uint32_t len = hmsc->scsi_blk_len * hmsc->scsi_blk_size;
-
- len = MIN(len, MSC_MEDIA_PACKET);
-
- if (((USBD_StorageTypeDef *)pdev->pUserData)->Read(lun, hmsc->bot_data,
- hmsc->scsi_blk_addr,
- (len / hmsc->scsi_blk_size)) < 0)
- {
- SCSI_SenseCode(pdev, lun, HARDWARE_ERROR, UNRECOVERED_READ_ERROR);
- return -1;
- }
-
- (void)USBD_LL_Transmit(pdev, MSC_EPIN_ADDR, hmsc->bot_data, len);
-
- hmsc->scsi_blk_addr += (len / hmsc->scsi_blk_size);
- hmsc->scsi_blk_len -= (len / hmsc->scsi_blk_size);
-
- /* case 6 : Hi = Di */
- hmsc->csw.dDataResidue -= len;
-
- if (hmsc->scsi_blk_len == 0U)
- {
- 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)
-{
- USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef *)pdev->pClassData;
- uint32_t len = hmsc->scsi_blk_len * hmsc->scsi_blk_size;
-
- len = MIN(len, MSC_MEDIA_PACKET);
-
- if (((USBD_StorageTypeDef *)pdev->pUserData)->Write(lun, hmsc->bot_data,
- hmsc->scsi_blk_addr,
- (len / hmsc->scsi_blk_size)) < 0)
- {
- SCSI_SenseCode(pdev, lun, HARDWARE_ERROR, WRITE_FAULT);
- return -1;
- }
-
- hmsc->scsi_blk_addr += (len / hmsc->scsi_blk_size);
- hmsc->scsi_blk_len -= (len / hmsc->scsi_blk_size);
-
- /* case 12 : Ho = Do */
- hmsc->csw.dDataResidue -= len;
-
- if (hmsc->scsi_blk_len == 0U)
- {
- MSC_BOT_SendCSW(pdev, USBD_CSW_CMD_PASSED);
- }
- else
- {
- len = MIN((hmsc->scsi_blk_len * hmsc->scsi_blk_size), MSC_MEDIA_PACKET);
-
- /* Prepare EP to Receive next packet */
- (void)USBD_LL_PrepareReceive(pdev, MSC_EPOUT_ADDR, hmsc->bot_data, len);
- }
-
- return 0;
-}
-
-
-/**
-* @brief SCSI_UpdateBotData
-* fill the requested Data to transmit buffer
-* @param hmsc handler
-* @param params: Data buffer
-* @param length: Data length
-* @retval status
-*/
-static int8_t SCSI_UpdateBotData(USBD_MSC_BOT_HandleTypeDef *hmsc,
- uint8_t *pBuff, uint16_t length)
-{
- uint16_t len = length;
-
- hmsc->bot_data_length = len;
-
- while (len != 0U)
- {
- len--;
- hmsc->bot_data[len] = pBuff[len];
- }
-
- return 0;
-}
-/**
- * @}
- */
-
-
-/**
- * @}
- */
-
-
-/**
- * @}
- */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/lib/STM32_USB_Device_Library/Class/MSC/Src/usbd_msc_storage_template.c b/lib/STM32_USB_Device_Library/Class/MSC/Src/usbd_msc_storage_template.c
deleted file mode 100644
index dc6cc3dea..000000000
--- a/lib/STM32_USB_Device_Library/Class/MSC/Src/usbd_msc_storage_template.c
+++ /dev/null
@@ -1,177 +0,0 @@
-/**
- ******************************************************************************
- * @file usbd_msc_storage_template.c
- * @author MCD Application Team
- * @brief Memory management layer
- ******************************************************************************
- * @attention
- *
- * © Copyright (c) 2015 STMicroelectronics.
- * All rights reserved.
- *
- * This software component is licensed by ST under Ultimate Liberty license
- * SLA0044, the "License"; You may not use this file except in compliance with
- * the License. You may obtain a copy of the License at:
- * www.st.com/SLA0044
- *
- ******************************************************************************
- */
-
-/* BSPDependencies
-- "stm32xxxxx_{eval}{discovery}{nucleo_144}.c"
-- "stm32xxxxx_{eval}{discovery}_io.c"
-- "stm32xxxxx_{eval}{discovery}{adafruit}_sd.c"
-EndBSPDependencies */
-
-/* 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 1U
-#define STORAGE_BLK_NBR 0x10000U
-#define STORAGE_BLK_SIZ 0x200U
-
-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/lib/STM32_USB_Device_Library/Class/Template/Inc/usbd_template.h b/lib/STM32_USB_Device_Library/Class/Template/Inc/usbd_template.h
deleted file mode 100644
index 8e9163bb2..000000000
--- a/lib/STM32_USB_Device_Library/Class/Template/Inc/usbd_template.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/**
- ******************************************************************************
- * @file usbd_template_core.h
- * @author MCD Application Team
- * @brief Header file for the usbd_template_core.c file.
- ******************************************************************************
- * @attention
- *
- * © Copyright (c) 2015 STMicroelectronics.
- * All rights reserved.
- *
- * This software component is licensed by ST under Ultimate Liberty license
- * SLA0044, the "License"; You may not use this file except in compliance with
- * the License. You may obtain a copy of the License at:
- * www.st.com/SLA0044
- *
- ******************************************************************************
- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __USB_TEMPLATE_CORE_H
-#define __USB_TEMPLATE_CORE_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_ioreq.h"
-
-/** @addtogroup STM32_USB_DEVICE_LIBRARY
- * @{
- */
-
-/** @defgroup USBD_TEMPLATE
- * @brief This file is the header file for usbd_template_core.c
- * @{
- */
-
-
-/** @defgroup USBD_TEMPLATE_Exported_Defines
- * @{
- */
-#define TEMPLATE_EPIN_ADDR 0x81U
-#define TEMPLATE_EPIN_SIZE 0x10U
-
-#define USB_TEMPLATE_CONFIG_DESC_SIZ 64U
-
-/**
- * @}
- */
-
-
-/** @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
- * @{
- */
-/**
- * @}
- */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __USB_TEMPLATE_CORE_H */
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/lib/STM32_USB_Device_Library/Class/Template/Src/usbd_template.c b/lib/STM32_USB_Device_Library/Class/Template/Src/usbd_template.c
deleted file mode 100644
index 1c8ea725e..000000000
--- a/lib/STM32_USB_Device_Library/Class/Template/Src/usbd_template.c
+++ /dev/null
@@ -1,378 +0,0 @@
-/**
- ******************************************************************************
- * @file usbd_template.c
- * @author MCD Application Team
- * @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
- *
- * © Copyright (c) 2015 STMicroelectronics.
- * All rights reserved.
- *
- * This software component is licensed by ST under Ultimate Liberty license
- * SLA0044, the "License"; You may not use this file except in compliance with
- * the License. You may obtain a copy of the License at:
- * www.st.com/SLA0044
- *
- ******************************************************************************
- */
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_template.h"
-#include "usbd_ctlreq.h"
-
-
-/** @addtogroup STM32_USB_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_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);
-
-static uint8_t *USBD_TEMPLATE_GetCfgDesc(uint16_t *length);
-static uint8_t *USBD_TEMPLATE_GetDeviceQualifierDesc(uint16_t *length);
-/**
- * @}
- */
-
-/** @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 */
-__ALIGN_BEGIN static uint8_t USBD_TEMPLATE_CfgDesc[USB_TEMPLATE_CONFIG_DESC_SIZ] __ALIGN_END =
-{
- 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 Supports 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 */
-__ALIGN_BEGIN static uint8_t USBD_TEMPLATE_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_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)
-{
-
- return (uint8_t)USBD_OK;
-}
-
-/**
- * @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 (uint8_t)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)
-{
- USBD_StatusTypeDef ret = USBD_OK;
-
- switch (req->bmRequest & USB_REQ_TYPE_MASK)
- {
- case USB_REQ_TYPE_CLASS :
- switch (req->bRequest)
- {
- default:
- USBD_CtlError(pdev, req);
- ret = USBD_FAIL;
- break;
- }
- break;
-
- case USB_REQ_TYPE_STANDARD:
- switch (req->bRequest)
- {
- default:
- USBD_CtlError(pdev, req);
- ret = USBD_FAIL;
- break;
- }
- break;
-
- default:
- USBD_CtlError(pdev, req);
- ret = USBD_FAIL;
- break;
- }
-
- return (uint8_t)ret;
-}
-
-
-/**
- * @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 = (uint16_t)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 = (uint16_t)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 (uint8_t)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 (uint8_t)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 (uint8_t)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 (uint8_t)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 (uint8_t)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 (uint8_t)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 (uint8_t)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 = (uint16_t)sizeof(USBD_TEMPLATE_DeviceQualifierDesc);
-
- return USBD_TEMPLATE_DeviceQualifierDesc;
-}
-
-/**
- * @}
- */
-
-
-/**
- * @}
- */
-
-
-/**
- * @}
- */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/lib/STM32_USB_Device_Library/Core/Inc/usbd_conf_template.h b/lib/STM32_USB_Device_Library/Core/Inc/usbd_conf_template.h
deleted file mode 100644
index 85e18ab78..000000000
--- a/lib/STM32_USB_Device_Library/Core/Inc/usbd_conf_template.h
+++ /dev/null
@@ -1,170 +0,0 @@
-/**
- ******************************************************************************
- * @file usbd_conf_template.h
- * @author MCD Application Team
- * @brief Header file for the usbd_conf_template.c file
- ******************************************************************************
- * @attention
- *
- * © Copyright (c) 2015 STMicroelectronics.
- * All rights reserved.
- *
- * This software component is licensed by ST under Ultimate Liberty license
- * SLA0044, the "License"; You may not use this file except in compliance with
- * the License. You may obtain a copy of the License at:
- * www.st.com/SLA0044
- *
- ******************************************************************************
- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __USBD_CONF_TEMPLATE_H
-#define __USBD_CONF_TEMPLATE_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include "stm32fxxx.h" /* replace 'stm32xxx' with your HAL driver header filename, ex: stm32f4xx.h */
-#include
-#include
-#include
-
-/** @addtogroup STM32_USB_DEVICE_LIBRARY
- * @{
- */
-
-/** @defgroup USBD_CONF
- * @brief USB device low level driver configuration file
- * @{
- */
-
-/** @defgroup USBD_CONF_Exported_Defines
- * @{
- */
-
-#define USBD_MAX_NUM_INTERFACES 1U
-#define USBD_MAX_NUM_CONFIGURATION 1U
-#define USBD_MAX_STR_DESC_SIZ 0x100U
-#define USBD_SELF_POWERED 1U
-#define USBD_DEBUG_LEVEL 2U
-
-/* ECM, RNDIS, DFU Class Config */
-#define USBD_SUPPORT_USER_STRING_DESC 1U
-
-/* BillBoard Class Config */
-#define USBD_CLASS_USER_STRING_DESC 1U
-#define USBD_CLASS_BOS_ENABLED 1U
-#define USB_BB_MAX_NUM_ALT_MODE 0x2U
-
-/* MSC Class Config */
-#define MSC_MEDIA_PACKET 8192U
-
-/* CDC Class Config */
-#define USBD_CDC_INTERVAL 2000U
-
-/* DFU Class Config */
-#define USBD_DFU_MAX_ITF_NUM 1U
-#define USBD_DFU_XFERS_IZE 1024U
-
-/* AUDIO Class Config */
-#define USBD_AUDIO_FREQ 22100U
-
-/** @defgroup USBD_Exported_Macros
- * @{
- */
-
-/* Memory management macros */
-#define USBD_malloc malloc
-#define USBD_free free
-#define USBD_memset memset
-#define USBD_memcpy memcpy
-#define USBD_Delay HAL_Delay
-
-/* DEBUG macros */
-#if (USBD_DEBUG_LEVEL > 0U)
-#define USBD_UsrLog(...) do { \
- printf(__VA_ARGS__); \
- printf("\n"); \
-} while (0)
-#else
-#define USBD_UsrLog(...) do {} while (0)
-#endif
-
-#if (USBD_DEBUG_LEVEL > 1U)
-
-#define USBD_ErrLog(...) do { \
- printf("ERROR: ") ; \
- printf(__VA_ARGS__); \
- printf("\n"); \
-} while (0)
-#else
-#define USBD_ErrLog(...) do {} while (0)
-#endif
-
-#if (USBD_DEBUG_LEVEL > 2U)
-#define USBD_DbgLog(...) do { \
- printf("DEBUG : ") ; \
- printf(__VA_ARGS__); \
- printf("\n"); \
-} while (0)
-#else
-#define USBD_DbgLog(...) do {} while (0)
-#endif
-
-/**
- * @}
- */
-
-
-
-/**
- * @}
- */
-
-
-/** @defgroup USBD_CONF_Exported_Types
- * @{
- */
-/**
- * @}
- */
-
-
-/** @defgroup USBD_CONF_Exported_Macros
- * @{
- */
-/**
- * @}
- */
-
-/** @defgroup USBD_CONF_Exported_Variables
- * @{
- */
-/**
- * @}
- */
-
-/** @defgroup USBD_CONF_Exported_FunctionsPrototype
- * @{
- */
-/**
- * @}
- */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __USBD_CONF_TEMPLATE_H */
-
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/lib/STM32_USB_Device_Library/Core/Inc/usbd_core.h b/lib/STM32_USB_Device_Library/Core/Inc/usbd_core.h
deleted file mode 100644
index 4e50b47f3..000000000
--- a/lib/STM32_USB_Device_Library/Core/Inc/usbd_core.h
+++ /dev/null
@@ -1,156 +0,0 @@
-/**
- ******************************************************************************
- * @file usbd_core.h
- * @author MCD Application Team
- * @brief Header file for usbd_core.c file
- ******************************************************************************
- * @attention
- *
- * © Copyright (c) 2015 STMicroelectronics.
- * All rights reserved.
- *
- * This software component is licensed by ST under Ultimate Liberty license
- * SLA0044, the "License"; You may not use this file except in compliance with
- * the License. You may obtain a copy of the License at:
- * www.st.com/SLA0044
- *
- ******************************************************************************
- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __USBD_CORE_H
-#define __USBD_CORE_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_conf.h"
-#include "usbd_def.h"
-#include "usbd_ioreq.h"
-#include "usbd_ctlreq.h"
-
-/** @addtogroup STM32_USB_DEVICE_LIBRARY
- * @{
- */
-
-/** @defgroup USBD_CORE
- * @brief This file is the Header file for usbd_core.c file
- * @{
- */
-
-
-/** @defgroup USBD_CORE_Exported_Defines
- * @{
- */
-#ifndef USBD_DEBUG_LEVEL
-#define USBD_DEBUG_LEVEL 0U
-#endif /* USBD_DEBUG_LEVEL */
-/**
- * @}
- */
-
-
-/** @defgroup USBD_CORE_Exported_TypesDefinitions
- * @{
- */
-
-
-/**
- * @}
- */
-
-
-
-/** @defgroup USBD_CORE_Exported_Macros
- * @{
- */
-
-/**
- * @}
- */
-
-/** @defgroup USBD_CORE_Exported_Variables
- * @{
- */
-#define USBD_SOF USBD_LL_SOF
-/**
- * @}
- */
-
-/** @defgroup USBD_CORE_Exported_FunctionsPrototype
- * @{
- */
-USBD_StatusTypeDef USBD_Init(USBD_HandleTypeDef *pdev, USBD_DescriptorsTypeDef *pdesc, uint8_t id);
-USBD_StatusTypeDef USBD_DeInit(USBD_HandleTypeDef *pdev);
-USBD_StatusTypeDef USBD_Start(USBD_HandleTypeDef *pdev);
-USBD_StatusTypeDef USBD_Stop(USBD_HandleTypeDef *pdev);
-USBD_StatusTypeDef USBD_RegisterClass(USBD_HandleTypeDef *pdev, USBD_ClassTypeDef *pclass);
-
-USBD_StatusTypeDef USBD_RunTestMode(USBD_HandleTypeDef *pdev);
-USBD_StatusTypeDef USBD_SetClassConfig(USBD_HandleTypeDef *pdev, uint8_t cfgidx);
-USBD_StatusTypeDef USBD_ClrClassConfig(USBD_HandleTypeDef *pdev, uint8_t cfgidx);
-
-USBD_StatusTypeDef USBD_LL_SetupStage(USBD_HandleTypeDef *pdev, uint8_t *psetup);
-USBD_StatusTypeDef USBD_LL_DataOutStage(USBD_HandleTypeDef *pdev, uint8_t epnum, uint8_t *pdata);
-USBD_StatusTypeDef USBD_LL_DataInStage(USBD_HandleTypeDef *pdev, uint8_t epnum, uint8_t *pdata);
-
-USBD_StatusTypeDef USBD_LL_Reset(USBD_HandleTypeDef *pdev);
-USBD_StatusTypeDef USBD_LL_SetSpeed(USBD_HandleTypeDef *pdev, USBD_SpeedTypeDef speed);
-USBD_StatusTypeDef USBD_LL_Suspend(USBD_HandleTypeDef *pdev);
-USBD_StatusTypeDef USBD_LL_Resume(USBD_HandleTypeDef *pdev);
-
-USBD_StatusTypeDef USBD_LL_SOF(USBD_HandleTypeDef *pdev);
-USBD_StatusTypeDef USBD_LL_IsoINIncomplete(USBD_HandleTypeDef *pdev, uint8_t epnum);
-USBD_StatusTypeDef USBD_LL_IsoOUTIncomplete(USBD_HandleTypeDef *pdev, uint8_t epnum);
-
-USBD_StatusTypeDef USBD_LL_DevConnected(USBD_HandleTypeDef *pdev);
-USBD_StatusTypeDef USBD_LL_DevDisconnected(USBD_HandleTypeDef *pdev);
-
-/* USBD Low Level Driver */
-USBD_StatusTypeDef USBD_LL_Init(USBD_HandleTypeDef *pdev);
-USBD_StatusTypeDef USBD_LL_DeInit(USBD_HandleTypeDef *pdev);
-USBD_StatusTypeDef USBD_LL_Start(USBD_HandleTypeDef *pdev);
-USBD_StatusTypeDef USBD_LL_Stop(USBD_HandleTypeDef *pdev);
-
-USBD_StatusTypeDef USBD_LL_OpenEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr,
- uint8_t ep_type, uint16_t ep_mps);
-
-USBD_StatusTypeDef USBD_LL_CloseEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr);
-USBD_StatusTypeDef USBD_LL_FlushEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr);
-USBD_StatusTypeDef USBD_LL_StallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr);
-USBD_StatusTypeDef USBD_LL_ClearStallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr);
-USBD_StatusTypeDef USBD_LL_SetUSBAddress(USBD_HandleTypeDef *pdev, uint8_t dev_addr);
-
-USBD_StatusTypeDef USBD_LL_Transmit(USBD_HandleTypeDef *pdev, uint8_t ep_addr,
- uint8_t *pbuf, uint32_t size);
-
-USBD_StatusTypeDef USBD_LL_PrepareReceive(USBD_HandleTypeDef *pdev, uint8_t ep_addr,
- uint8_t *pbuf, uint32_t size);
-
-uint8_t USBD_LL_IsStallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr);
-uint32_t USBD_LL_GetRxDataSize(USBD_HandleTypeDef *pdev, uint8_t ep_addr);
-
-/**
- * @}
- */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __USBD_CORE_H */
-
-/**
- * @}
- */
-
-/**
-* @}
-*/
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
-
-
-
diff --git a/lib/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h b/lib/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h
deleted file mode 100644
index f973a8b1b..000000000
--- a/lib/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h
+++ /dev/null
@@ -1,103 +0,0 @@
-/**
- ******************************************************************************
- * @file usbd_req.h
- * @author MCD Application Team
- * @brief Header file for the usbd_req.c file
- ******************************************************************************
- * @attention
- *
- * © Copyright (c) 2015 STMicroelectronics.
- * All rights reserved.
- *
- * This software component is licensed by ST under Ultimate Liberty license
- * SLA0044, the "License"; You may not use this file except in compliance with
- * the License. You may obtain a copy of the License at:
- * www.st.com/SLA0044
- *
- ******************************************************************************
- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __USB_REQUEST_H
-#define __USB_REQUEST_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_def.h"
-
-
-/** @addtogroup STM32_USB_DEVICE_LIBRARY
- * @{
- */
-
-/** @defgroup USBD_REQ
- * @brief header file for the usbd_req.c file
- * @{
- */
-
-/** @defgroup USBD_REQ_Exported_Defines
- * @{
- */
-/**
- * @}
- */
-
-
-/** @defgroup USBD_REQ_Exported_Types
- * @{
- */
-/**
- * @}
- */
-
-
-
-/** @defgroup USBD_REQ_Exported_Macros
- * @{
- */
-/**
- * @}
- */
-
-/** @defgroup USBD_REQ_Exported_Variables
- * @{
- */
-/**
- * @}
- */
-
-/** @defgroup USBD_REQ_Exported_FunctionsPrototype
- * @{
- */
-
-USBD_StatusTypeDef USBD_StdDevReq(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
-USBD_StatusTypeDef USBD_StdItfReq(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
-USBD_StatusTypeDef USBD_StdEPReq(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
-
-void USBD_CtlError(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
-void USBD_ParseSetupRequest(USBD_SetupReqTypedef *req, uint8_t *pdata);
-void USBD_GetString(uint8_t *desc, uint8_t *unicode, uint16_t *len);
-
-/**
- * @}
- */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __USB_REQUEST_H */
-
-/**
- * @}
- */
-
-/**
-* @}
-*/
-
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/lib/STM32_USB_Device_Library/Core/Inc/usbd_def.h b/lib/STM32_USB_Device_Library/Core/Inc/usbd_def.h
deleted file mode 100644
index 25720e4d4..000000000
--- a/lib/STM32_USB_Device_Library/Core/Inc/usbd_def.h
+++ /dev/null
@@ -1,391 +0,0 @@
-/**
- ******************************************************************************
- * @file usbd_def.h
- * @author MCD Application Team
- * @brief General defines for the usb device library
- ******************************************************************************
- * @attention
- *
- * © Copyright (c) 2015 STMicroelectronics.
- * All rights reserved.
- *
- * This software component is licensed by ST under Ultimate Liberty license
- * SLA0044, the "License"; You may not use this file except in compliance with
- * the License. You may obtain a copy of the License at:
- * www.st.com/SLA0044
- *
- ******************************************************************************
- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __USBD_DEF_H
-#define __USBD_DEF_H
-
-/* Includes ------------------------------------------------------------------*/
-#include
-
-#include "usbd_conf.h"
-
-/** @addtogroup STM32_USBD_DEVICE_LIBRARY
- * @{
- */
-
-/** @defgroup USB_DEF
- * @brief general defines for the usb device library file
- * @{
- */
-
-/** @defgroup USB_DEF_Exported_Defines
- * @{
- */
-
-#ifndef NULL
-#define NULL 0U
-#endif /* NULL */
-
-#ifndef USBD_MAX_NUM_INTERFACES
-#define USBD_MAX_NUM_INTERFACES 1U
-#endif /* USBD_MAX_NUM_CONFIGURATION */
-
-#ifndef USBD_MAX_NUM_CONFIGURATION
-#define USBD_MAX_NUM_CONFIGURATION 1U
-#endif /* USBD_MAX_NUM_CONFIGURATION */
-
-#ifndef USBD_LPM_ENABLED
-#define USBD_LPM_ENABLED 0U
-#endif /* USBD_LPM_ENABLED */
-
-#ifndef USBD_SELF_POWERED
-#define USBD_SELF_POWERED 1U
-#endif /*USBD_SELF_POWERED */
-
-#ifndef USBD_SUPPORT_USER_STRING_DESC
-#define USBD_SUPPORT_USER_STRING_DESC 0U
-#endif /* USBD_SUPPORT_USER_STRING_DESC */
-
-#ifndef USBD_CLASS_USER_STRING_DESC
-#define USBD_CLASS_USER_STRING_DESC 0U
-#endif /* USBD_CLASS_USER_STRING_DESC */
-
-#define USB_LEN_DEV_QUALIFIER_DESC 0x0AU
-#define USB_LEN_DEV_DESC 0x12U
-#define USB_LEN_CFG_DESC 0x09U
-#define USB_LEN_IF_DESC 0x09U
-#define USB_LEN_EP_DESC 0x07U
-#define USB_LEN_OTG_DESC 0x03U
-#define USB_LEN_LANGID_STR_DESC 0x04U
-#define USB_LEN_OTHER_SPEED_DESC_SIZ 0x09U
-
-#define USBD_IDX_LANGID_STR 0x00U
-#define USBD_IDX_MFC_STR 0x01U
-#define USBD_IDX_PRODUCT_STR 0x02U
-#define USBD_IDX_SERIAL_STR 0x03U
-#define USBD_IDX_CONFIG_STR 0x04U
-#define USBD_IDX_INTERFACE_STR 0x05U
-
-#define USB_REQ_TYPE_STANDARD 0x00U
-#define USB_REQ_TYPE_CLASS 0x20U
-#define USB_REQ_TYPE_VENDOR 0x40U
-#define USB_REQ_TYPE_MASK 0x60U
-
-#define USB_REQ_RECIPIENT_DEVICE 0x00U
-#define USB_REQ_RECIPIENT_INTERFACE 0x01U
-#define USB_REQ_RECIPIENT_ENDPOINT 0x02U
-#define USB_REQ_RECIPIENT_MASK 0x03U
-
-#define USB_REQ_GET_STATUS 0x00U
-#define USB_REQ_CLEAR_FEATURE 0x01U
-#define USB_REQ_SET_FEATURE 0x03U
-#define USB_REQ_SET_ADDRESS 0x05U
-#define USB_REQ_GET_DESCRIPTOR 0x06U
-#define USB_REQ_SET_DESCRIPTOR 0x07U
-#define USB_REQ_GET_CONFIGURATION 0x08U
-#define USB_REQ_SET_CONFIGURATION 0x09U
-#define USB_REQ_GET_INTERFACE 0x0AU
-#define USB_REQ_SET_INTERFACE 0x0BU
-#define USB_REQ_SYNCH_FRAME 0x0CU
-
-#define USB_DESC_TYPE_DEVICE 0x01U
-#define USB_DESC_TYPE_CONFIGURATION 0x02U
-#define USB_DESC_TYPE_STRING 0x03U
-#define USB_DESC_TYPE_INTERFACE 0x04U
-#define USB_DESC_TYPE_ENDPOINT 0x05U
-#define USB_DESC_TYPE_DEVICE_QUALIFIER 0x06U
-#define USB_DESC_TYPE_OTHER_SPEED_CONFIGURATION 0x07U
-#define USB_DESC_TYPE_BOS 0x0FU
-
-#define USB_CONFIG_REMOTE_WAKEUP 0x02U
-#define USB_CONFIG_SELF_POWERED 0x01U
-
-#define USB_FEATURE_EP_HALT 0x00U
-#define USB_FEATURE_REMOTE_WAKEUP 0x01U
-#define USB_FEATURE_TEST_MODE 0x02U
-
-#define USB_DEVICE_CAPABITY_TYPE 0x10U
-
-#define USB_HS_MAX_PACKET_SIZE 512U
-#define USB_FS_MAX_PACKET_SIZE 64U
-#define USB_MAX_EP0_SIZE 64U
-
-/* Device Status */
-#define USBD_STATE_DEFAULT 0x01U
-#define USBD_STATE_ADDRESSED 0x02U
-#define USBD_STATE_CONFIGURED 0x03U
-#define USBD_STATE_SUSPENDED 0x04U
-
-
-/* EP0 State */
-#define USBD_EP0_IDLE 0x00U
-#define USBD_EP0_SETUP 0x01U
-#define USBD_EP0_DATA_IN 0x02U
-#define USBD_EP0_DATA_OUT 0x03U
-#define USBD_EP0_STATUS_IN 0x04U
-#define USBD_EP0_STATUS_OUT 0x05U
-#define USBD_EP0_STALL 0x06U
-
-#define USBD_EP_TYPE_CTRL 0x00U
-#define USBD_EP_TYPE_ISOC 0x01U
-#define USBD_EP_TYPE_BULK 0x02U
-#define USBD_EP_TYPE_INTR 0x03U
-
-
-/**
- * @}
- */
-
-
-/** @defgroup USBD_DEF_Exported_TypesDefinitions
- * @{
- */
-
-typedef struct usb_setup_req
-{
- uint8_t bmRequest;
- uint8_t bRequest;
- uint16_t wValue;
- uint16_t wIndex;
- uint16_t wLength;
-} USBD_SetupReqTypedef;
-
-typedef struct
-{
- uint8_t bLength;
- uint8_t bDescriptorType;
- uint8_t wDescriptorLengthLow;
- uint8_t wDescriptorLengthHigh;
- uint8_t bNumInterfaces;
- uint8_t bConfigurationValue;
- uint8_t iConfiguration;
- uint8_t bmAttributes;
- uint8_t bMaxPower;
-} USBD_ConfigDescTypedef;
-
-typedef struct
-{
- uint8_t bLength;
- uint8_t bDescriptorType;
- uint16_t wTotalLength;
- uint8_t bNumDeviceCaps;
-} USBD_BosDescTypedef;
-
-
-struct _USBD_HandleTypeDef;
-
-typedef struct _Device_cb
-{
- uint8_t (*Init)(struct _USBD_HandleTypeDef *pdev, uint8_t cfgidx);
- uint8_t (*DeInit)(struct _USBD_HandleTypeDef *pdev, uint8_t cfgidx);
- /* Control Endpoints*/
- uint8_t (*Setup)(struct _USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
- uint8_t (*EP0_TxSent)(struct _USBD_HandleTypeDef *pdev);
- uint8_t (*EP0_RxReady)(struct _USBD_HandleTypeDef *pdev);
- /* Class Specific Endpoints*/
- uint8_t (*DataIn)(struct _USBD_HandleTypeDef *pdev, uint8_t epnum);
- uint8_t (*DataOut)(struct _USBD_HandleTypeDef *pdev, uint8_t epnum);
- uint8_t (*SOF)(struct _USBD_HandleTypeDef *pdev);
- uint8_t (*IsoINIncomplete)(struct _USBD_HandleTypeDef *pdev, uint8_t epnum);
- uint8_t (*IsoOUTIncomplete)(struct _USBD_HandleTypeDef *pdev, uint8_t epnum);
-
- uint8_t *(*GetHSConfigDescriptor)(uint16_t *length);
- uint8_t *(*GetFSConfigDescriptor)(uint16_t *length);
- uint8_t *(*GetOtherSpeedConfigDescriptor)(uint16_t *length);
- uint8_t *(*GetDeviceQualifierDescriptor)(uint16_t *length);
-#if (USBD_SUPPORT_USER_STRING_DESC == 1U)
- uint8_t *(*GetUsrStrDescriptor)(struct _USBD_HandleTypeDef *pdev, uint8_t index, uint16_t *length);
-#endif
-
-} USBD_ClassTypeDef;
-
-/* Following USB Device Speed */
-typedef enum
-{
- USBD_SPEED_HIGH = 0U,
- USBD_SPEED_FULL = 1U,
- USBD_SPEED_LOW = 2U,
-} USBD_SpeedTypeDef;
-
-/* Following USB Device status */
-typedef enum
-{
- USBD_OK = 0U,
- USBD_BUSY,
- USBD_EMEM,
- USBD_FAIL,
-} USBD_StatusTypeDef;
-
-/* USB Device descriptors structure */
-typedef struct
-{
- uint8_t *(*GetDeviceDescriptor)(USBD_SpeedTypeDef speed, uint16_t *length);
- uint8_t *(*GetLangIDStrDescriptor)(USBD_SpeedTypeDef speed, uint16_t *length);
- uint8_t *(*GetManufacturerStrDescriptor)(USBD_SpeedTypeDef speed, uint16_t *length);
- uint8_t *(*GetProductStrDescriptor)(USBD_SpeedTypeDef speed, uint16_t *length);
- uint8_t *(*GetSerialStrDescriptor)(USBD_SpeedTypeDef speed, uint16_t *length);
- uint8_t *(*GetConfigurationStrDescriptor)(USBD_SpeedTypeDef speed, uint16_t *length);
- uint8_t *(*GetInterfaceStrDescriptor)(USBD_SpeedTypeDef speed, uint16_t *length);
-#if (USBD_CLASS_USER_STRING_DESC == 1)
- uint8_t *(*GetUserStrDescriptor)(USBD_SpeedTypeDef speed, uint8_t idx, uint16_t *length);
-#endif
-#if ((USBD_LPM_ENABLED == 1U) || (USBD_CLASS_BOS_ENABLED == 1))
- uint8_t *(*GetBOSDescriptor)(USBD_SpeedTypeDef speed, uint16_t *length);
-#endif
-} USBD_DescriptorsTypeDef;
-
-/* USB Device handle structure */
-typedef struct
-{
- uint32_t status;
- uint32_t total_length;
- uint32_t rem_length;
- uint32_t maxpacket;
- uint16_t is_used;
- uint16_t bInterval;
-} USBD_EndpointTypeDef;
-
-/* USB Device handle structure */
-typedef struct _USBD_HandleTypeDef
-{
- uint8_t id;
- uint32_t dev_config;
- uint32_t dev_default_config;
- uint32_t dev_config_status;
- USBD_SpeedTypeDef dev_speed;
- USBD_EndpointTypeDef ep_in[16];
- USBD_EndpointTypeDef ep_out[16];
- uint32_t ep0_state;
- uint32_t ep0_data_len;
- uint8_t dev_state;
- uint8_t dev_old_state;
- uint8_t dev_address;
- uint8_t dev_connection_status;
- uint8_t dev_test_mode;
- uint32_t dev_remote_wakeup;
- uint8_t ConfIdx;
-
- USBD_SetupReqTypedef request;
- USBD_DescriptorsTypeDef *pDesc;
- USBD_ClassTypeDef *pClass;
- void *pClassData;
- void *pUserData;
- void *pData;
- void *pBosDesc;
- void *pConfDesc;
-} USBD_HandleTypeDef;
-
-/**
- * @}
- */
-
-
-
-/** @defgroup USBD_DEF_Exported_Macros
- * @{
- */
-__STATIC_INLINE uint16_t SWAPBYTE(uint8_t *addr)
-{
- uint16_t _SwapVal, _Byte1, _Byte2;
- uint8_t *_pbuff = addr;
-
- _Byte1 = *(uint8_t *)_pbuff;
- _pbuff++;
- _Byte2 = *(uint8_t *)_pbuff;
-
- _SwapVal = (_Byte2 << 8) | _Byte1;
-
- return _SwapVal;
-}
-
-#define LOBYTE(x) ((uint8_t)((x) & 0x00FFU))
-#define HIBYTE(x) ((uint8_t)(((x) & 0xFF00U) >> 8U))
-#ifndef MIN
-#define MIN(a, b) (((a) < (b)) ? (a) : (b))
-#endif
-#ifndef MAX
-#define MAX(a, b) (((a) > (b)) ? (a) : (b))
-#endif
-
-
-#if defined ( __GNUC__ )
-#ifndef __weak
-#define __weak __attribute__((weak))
-#endif /* __weak */
-#ifndef __packed
-#define __packed __attribute__((__packed__))
-#endif /* __packed */
-#endif /* __GNUC__ */
-
-
-/* In HS mode and when the DMA is used, all variables and data structures dealing
- with the DMA during the transaction process should be 4-bytes aligned */
-
-#if defined ( __GNUC__ ) && !defined (__CC_ARM) /* GNU Compiler */
-#ifndef __ALIGN_END
-#define __ALIGN_END __attribute__ ((aligned (4U)))
-#endif /* __ALIGN_END */
-#ifndef __ALIGN_BEGIN
-#define __ALIGN_BEGIN
-#endif /* __ALIGN_BEGIN */
-#else
-#ifndef __ALIGN_END
-#define __ALIGN_END
-#endif /* __ALIGN_END */
-#ifndef __ALIGN_BEGIN
-#if defined (__CC_ARM) /* ARM Compiler */
-#define __ALIGN_BEGIN __align(4U)
-#elif defined (__ICCARM__) /* IAR Compiler */
-#define __ALIGN_BEGIN
-#endif /* __CC_ARM */
-#endif /* __ALIGN_BEGIN */
-#endif /* __GNUC__ */
-
-
-/**
- * @}
- */
-
-/** @defgroup USBD_DEF_Exported_Variables
- * @{
- */
-
-/**
- * @}
- */
-
-/** @defgroup USBD_DEF_Exported_FunctionsPrototype
- * @{
- */
-
-/**
- * @}
- */
-
-#endif /* __USBD_DEF_H */
-
-/**
- * @}
- */
-
-/**
-* @}
-*/
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/lib/STM32_USB_Device_Library/Core/Inc/usbd_desc_template.h b/lib/STM32_USB_Device_Library/Core/Inc/usbd_desc_template.h
deleted file mode 100644
index 8fbbfaa63..000000000
--- a/lib/STM32_USB_Device_Library/Core/Inc/usbd_desc_template.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/**
- ******************************************************************************
- * @file usbd_desc_template.h
- * @author MCD Application Team
- * @brief Header for usbd_desc_template.c module
- ******************************************************************************
- * @attention
- *
- * © Copyright (c) 2015 STMicroelectronics.
- * All rights reserved.
- *
- * This software component is licensed by ST under Ultimate Liberty license
- * SLA0044, the "License"; You may not use this file except in compliance with
- * the License. You may obtain a copy of the License at:
- * www.st.com/SLA0044
- *
- ******************************************************************************
- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __USBD_DESC_TEMPLATE_H
-#define __USBD_DESC_TEMPLATE_H
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_def.h"
-
-/* Exported types ------------------------------------------------------------*/
-/* Exported constants --------------------------------------------------------*/
-#define DEVICE_ID1 (UID_BASE)
-#define DEVICE_ID2 (UID_BASE + 0x4U)
-#define DEVICE_ID3 (UID_BASE + 0x8U)
-
-/*
- * USB Billboard Class USER string desc Defines Template
- * index should start form 0x10 to avoid using the reserved device string desc indexes
- */
-#if (USBD_CLASS_USER_STRING_DESC == 1)
-#define USBD_BB_IF_STRING_INDEX 0x10U
-#define USBD_BB_URL_STRING_INDEX 0x11U
-#define USBD_BB_ALTMODE0_STRING_INDEX 0x12U
-#define USBD_BB_ALTMODE1_STRING_INDEX 0x13U
-/* Add Specific USER string Desc */
-#define USBD_BB_IF_STR_DESC (uint8_t *)"STM32 BillBoard Interface"
-#define USBD_BB_URL_STR_DESC (uint8_t *)"www.st.com"
-#define USBD_BB_ALTMODE0_STR_DESC (uint8_t *)"STM32 Alternate0 Mode"
-#define USBD_BB_ALTMODE1_STR_DESC (uint8_t *)"STM32 Alternate1 Mode"
-#endif
-
-#define USB_SIZ_STRING_SERIAL 0x1AU
-
-#if (USBD_LPM_ENABLED == 1)
-#define USB_SIZ_BOS_DESC 0x0CU
-#elif (USBD_CLASS_BOS_ENABLED == 1)
-#define USB_SIZ_BOS_DESC 0x5DU
-#endif
-
-/* Exported macro ------------------------------------------------------------*/
-/* Exported functions ------------------------------------------------------- */
-extern USBD_DescriptorsTypeDef XXX_Desc; /* Replace 'XXX_Desc' with your active USB device class, ex: HID_Desc */
-
-#endif /* __USBD_DESC_TEMPLATE_H*/
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/lib/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h b/lib/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h
deleted file mode 100644
index b7159d53b..000000000
--- a/lib/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h
+++ /dev/null
@@ -1,114 +0,0 @@
-/**
- ******************************************************************************
- * @file usbd_ioreq.h
- * @author MCD Application Team
- * @brief Header file for the usbd_ioreq.c file
- ******************************************************************************
- * @attention
- *
- * © Copyright (c) 2015 STMicroelectronics.
- * All rights reserved.
- *
- * This software component is licensed by ST under Ultimate Liberty license
- * SLA0044, the "License"; You may not use this file except in compliance with
- * the License. You may obtain a copy of the License at:
- * www.st.com/SLA0044
- *
- ******************************************************************************
- */
-
-/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __USBD_IOREQ_H
-#define __USBD_IOREQ_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_def.h"
-#include "usbd_core.h"
-
-/** @addtogroup STM32_USB_DEVICE_LIBRARY
- * @{
- */
-
-/** @defgroup USBD_IOREQ
- * @brief header file for the usbd_ioreq.c file
- * @{
- */
-
-/** @defgroup USBD_IOREQ_Exported_Defines
- * @{
- */
-/**
- * @}
- */
-
-
-/** @defgroup USBD_IOREQ_Exported_Types
- * @{
- */
-
-
-/**
- * @}
- */
-
-
-
-/** @defgroup USBD_IOREQ_Exported_Macros
- * @{
- */
-
-/**
- * @}
- */
-
-/** @defgroup USBD_IOREQ_Exported_Variables
- * @{
- */
-
-/**
- * @}
- */
-
-/** @defgroup USBD_IOREQ_Exported_FunctionsPrototype
- * @{
- */
-
-USBD_StatusTypeDef USBD_CtlSendData(USBD_HandleTypeDef *pdev,
- uint8_t *pbuf, uint32_t len);
-
-USBD_StatusTypeDef USBD_CtlContinueSendData(USBD_HandleTypeDef *pdev,
- uint8_t *pbuf, uint32_t len);
-
-USBD_StatusTypeDef USBD_CtlPrepareRx(USBD_HandleTypeDef *pdev,
- uint8_t *pbuf, uint32_t len);
-
-USBD_StatusTypeDef USBD_CtlContinueRx(USBD_HandleTypeDef *pdev,
- uint8_t *pbuf, uint32_t len);
-
-USBD_StatusTypeDef USBD_CtlSendStatus(USBD_HandleTypeDef *pdev);
-USBD_StatusTypeDef USBD_CtlReceiveStatus(USBD_HandleTypeDef *pdev);
-
-uint32_t USBD_GetRxCount(USBD_HandleTypeDef *pdev, uint8_t ep_addr);
-
-/**
- * @}
- */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __USBD_IOREQ_H */
-
-/**
- * @}
- */
-
-/**
-* @}
-*/
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/lib/STM32_USB_Device_Library/Core/Src/usbd_conf_template.c b/lib/STM32_USB_Device_Library/Core/Src/usbd_conf_template.c
deleted file mode 100644
index 67b70aa0e..000000000
--- a/lib/STM32_USB_Device_Library/Core/Src/usbd_conf_template.c
+++ /dev/null
@@ -1,246 +0,0 @@
-/**
- ******************************************************************************
- * @file usbd_conf_template.c
- * @author MCD Application Team
- * @brief USB Device configuration and interface file
- * This template should be copied to the user folder,
- * renamed and customized following user needs.
- ******************************************************************************
- * @attention
- *
- * © Copyright (c) 2015 STMicroelectronics.
- * All rights reserved.
- *
- * This software component is licensed by ST under Ultimate Liberty license
- * SLA0044, the "License"; You may not use this file except in compliance with
- * the License. You may obtain a copy of the License at:
- * www.st.com/SLA0044
- *
- ******************************************************************************
- */
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_core.h"
-/* Private typedef -----------------------------------------------------------*/
-/* Private define ------------------------------------------------------------*/
-/* Private macro -------------------------------------------------------------*/
-/* Private variables ---------------------------------------------------------*/
-/* Private function prototypes -----------------------------------------------*/
-/* Private functions ---------------------------------------------------------*/
-/**
- * @brief Initializes the Low Level portion of the Device driver.
- * @param pdev: Device handle
- * @retval USBD Status
- */
-USBD_StatusTypeDef USBD_LL_Init(USBD_HandleTypeDef *pdev)
-{
- UNUSED(pdev);
-
- return USBD_OK;
-}
-
-/**
- * @brief De-Initializes the Low Level portion of the Device driver.
- * @param pdev: Device handle
- * @retval USBD Status
- */
-USBD_StatusTypeDef USBD_LL_DeInit(USBD_HandleTypeDef *pdev)
-{
- UNUSED(pdev);
-
- return USBD_OK;
-}
-
-/**
- * @brief Starts the Low Level portion of the Device driver.
- * @param pdev: Device handle
- * @retval USBD Status
- */
-USBD_StatusTypeDef USBD_LL_Start(USBD_HandleTypeDef *pdev)
-{
- UNUSED(pdev);
-
- return USBD_OK;
-}
-
-/**
- * @brief Stops the Low Level portion of the Device driver.
- * @param pdev: Device handle
- * @retval USBD Status
- */
-USBD_StatusTypeDef USBD_LL_Stop(USBD_HandleTypeDef *pdev)
-{
- UNUSED(pdev);
-
- return USBD_OK;
-}
-
-/**
- * @brief Opens an endpoint of the Low Level Driver.
- * @param pdev: Device handle
- * @param ep_addr: Endpoint Number
- * @param ep_type: Endpoint Type
- * @param ep_mps: Endpoint Max Packet Size
- * @retval USBD Status
- */
-USBD_StatusTypeDef USBD_LL_OpenEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr,
- uint8_t ep_type, uint16_t ep_mps)
-{
- UNUSED(pdev);
- UNUSED(ep_addr);
- UNUSED(ep_type);
- UNUSED(ep_mps);
-
- return USBD_OK;
-}
-
-/**
- * @brief Closes an endpoint of the Low Level Driver.
- * @param pdev: Device handle
- * @param ep_addr: Endpoint Number
- * @retval USBD Status
- */
-USBD_StatusTypeDef USBD_LL_CloseEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr)
-{
- UNUSED(pdev);
- UNUSED(ep_addr);
-
- return USBD_OK;
-}
-
-/**
- * @brief Flushes an endpoint of the Low Level Driver.
- * @param pdev: Device handle
- * @param ep_addr: Endpoint Number
- * @retval USBD Status
- */
-USBD_StatusTypeDef USBD_LL_FlushEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr)
-{
- UNUSED(pdev);
- UNUSED(ep_addr);
-
- return USBD_OK;
-}
-
-/**
- * @brief Sets a Stall condition on an endpoint of the Low Level Driver.
- * @param pdev: Device handle
- * @param ep_addr: Endpoint Number
- * @retval USBD Status
- */
-USBD_StatusTypeDef USBD_LL_StallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr)
-{
- UNUSED(pdev);
- UNUSED(ep_addr);
-
- return USBD_OK;
-}
-
-/**
- * @brief Clears a Stall condition on an endpoint of the Low Level Driver.
- * @param pdev: Device handle
- * @param ep_addr: Endpoint Number
- * @retval USBD Status
- */
-USBD_StatusTypeDef USBD_LL_ClearStallEP(USBD_HandleTypeDef *pdev,
- uint8_t ep_addr)
-{
- UNUSED(pdev);
- UNUSED(ep_addr);
-
- return USBD_OK;
-}
-
-/**
- * @brief Returns Stall condition.
- * @param pdev: Device handle
- * @param ep_addr: Endpoint Number
- * @retval Stall (1: Yes, 0: No)
- */
-uint8_t USBD_LL_IsStallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr)
-{
- UNUSED(pdev);
- UNUSED(ep_addr);
-
- return 0U;
-}
-
-/**
- * @brief Assigns a USB address to the device.
- * @param pdev: Device handle
- * @param ep_addr: Endpoint Number
- * @retval USBD Status
- */
-USBD_StatusTypeDef USBD_LL_SetUSBAddress(USBD_HandleTypeDef *pdev,
- uint8_t dev_addr)
-{
- UNUSED(pdev);
- UNUSED(ep_addr);
-
- return USBD_OK;
-}
-
-/**
- * @brief Transmits data over an endpoint.
- * @param pdev: Device handle
- * @param ep_addr: Endpoint Number
- * @param pbuf: Pointer to data to be sent
- * @param size: Data size
- * @retval USBD Status
- */
-USBD_StatusTypeDef USBD_LL_Transmit(USBD_HandleTypeDef *pdev, uint8_t ep_addr,
- uint8_t *pbuf, uint32_t size)
-{
- UNUSED(pdev);
- UNUSED(ep_addr);
- UNUSED(pbuf);
- UNUSED(size);
-
- return USBD_OK;
-}
-
-/**
- * @brief Prepares an endpoint for reception.
- * @param pdev: Device handle
- * @param ep_addr: Endpoint Number
- * @param pbuf: Pointer to data to be received
- * @param size: Data size
- * @retval USBD Status
- */
-USBD_StatusTypeDef USBD_LL_PrepareReceive(USBD_HandleTypeDef *pdev,
- uint8_t ep_addr, uint8_t *pbuf,
- uint32_t size)
-{
- UNUSED(pdev);
- UNUSED(ep_addr);
- UNUSED(pbuf);
- UNUSED(size);
-
- return USBD_OK;
-}
-
-/**
- * @brief Returns the last transferred packet size.
- * @param pdev: Device handle
- * @param ep_addr: Endpoint Number
- * @retval Recived Data Size
- */
-uint32_t USBD_LL_GetRxDataSize(USBD_HandleTypeDef *pdev, uint8_t ep_addr)
-{
- UNUSED(pdev);
- UNUSED(ep_addr);
-
- return 0U;
-}
-
-/**
- * @brief Delays routine for the USB Device Library.
- * @param Delay: Delay in ms
- * @retval None
- */
-void USBD_LL_Delay(uint32_t Delay)
-{
- UNUSED(Delay);
-}
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
-
diff --git a/lib/STM32_USB_Device_Library/Core/Src/usbd_core.c b/lib/STM32_USB_Device_Library/Core/Src/usbd_core.c
deleted file mode 100644
index ad89ab2ef..000000000
--- a/lib/STM32_USB_Device_Library/Core/Src/usbd_core.c
+++ /dev/null
@@ -1,663 +0,0 @@
-/**
- ******************************************************************************
- * @file usbd_core.c
- * @author MCD Application Team
- * @brief This file provides all the USBD core functions.
- ******************************************************************************
- * @attention
- *
- * © Copyright (c) 2015 STMicroelectronics.
- * All rights reserved.
- *
- * This software component is licensed by ST under Ultimate Liberty license
- * SLA0044, the "License"; You may not use this file except in compliance with
- * the License. You may obtain a copy of the License at:
- * www.st.com/SLA0044
- *
- ******************************************************************************
- */
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_core.h"
-
-/** @addtogroup STM32_USBD_DEVICE_LIBRARY
-* @{
-*/
-
-
-/** @defgroup USBD_CORE
-* @brief usbd core module
-* @{
-*/
-
-/** @defgroup USBD_CORE_Private_TypesDefinitions
-* @{
-*/
-
-/**
-* @}
-*/
-
-
-/** @defgroup USBD_CORE_Private_Defines
-* @{
-*/
-
-/**
-* @}
-*/
-
-
-/** @defgroup USBD_CORE_Private_Macros
-* @{
-*/
-
-/**
-* @}
-*/
-
-
-/** @defgroup USBD_CORE_Private_FunctionPrototypes
-* @{
-*/
-
-/**
-* @}
-*/
-
-/** @defgroup USBD_CORE_Private_Variables
-* @{
-*/
-
-/**
-* @}
-*/
-
-
-/** @defgroup USBD_CORE_Private_Functions
-* @{
-*/
-
-/**
-* @brief USBD_Init
-* Initializes the device stack and load the class driver
-* @param pdev: device instance
-* @param pdesc: Descriptor structure address
-* @param id: Low level core index
-* @retval None
-*/
-USBD_StatusTypeDef USBD_Init(USBD_HandleTypeDef *pdev,
- USBD_DescriptorsTypeDef *pdesc, uint8_t id)
-{
- USBD_StatusTypeDef ret;
-
- /* Check whether the USB Host handle is valid */
- if (pdev == NULL)
- {
- return USBD_FAIL;
- }
-
- /* Unlink previous class */
- if (pdev->pClass != NULL)
- {
- pdev->pClass = NULL;
- }
-
- if (pdev->pConfDesc != NULL)
- {
- pdev->pConfDesc = NULL;
- }
-
- /* Assign USBD Descriptors */
- if (pdesc != NULL)
- {
- pdev->pDesc = pdesc;
- }
-
- /* Set Device initial State */
- pdev->dev_state = USBD_STATE_DEFAULT;
- pdev->id = id;
-
- /* Initialize low level driver */
- ret = USBD_LL_Init(pdev);
-
- return ret;
-}
-
-/**
-* @brief USBD_DeInit
-* Re-Initialize th device library
-* @param pdev: device instance
-* @retval status: status
-*/
-USBD_StatusTypeDef USBD_DeInit(USBD_HandleTypeDef *pdev)
-{
- USBD_StatusTypeDef ret;
-
- /* Set Default State */
- pdev->dev_state = USBD_STATE_DEFAULT;
-
- /* Free Class Resources */
- if (pdev->pClass != NULL)
- {
- pdev->pClass->DeInit(pdev, (uint8_t)pdev->dev_config);
- }
-
- if (pdev->pConfDesc != NULL)
- {
- pdev->pConfDesc = NULL;
- }
-
- /* Stop the low level driver */
- ret = USBD_LL_Stop(pdev);
-
- if (ret != USBD_OK)
- {
- return ret;
- }
-
- /* Initialize low level driver */
- ret = USBD_LL_DeInit(pdev);
-
- return ret;
-}
-
-/**
- * @brief USBD_RegisterClass
- * Link class driver to Device Core.
- * @param pDevice : Device Handle
- * @param pclass: Class handle
- * @retval USBD Status
- */
-USBD_StatusTypeDef USBD_RegisterClass(USBD_HandleTypeDef *pdev, USBD_ClassTypeDef *pclass)
-{
- uint16_t len = 0U;
-
- if (pclass == NULL)
- {
- return USBD_FAIL;
- }
-
- /* link the class to the USB Device handle */
- pdev->pClass = pclass;
-
- /* Get Device Configuration Descriptor */
-#ifdef USE_USB_FS
- pdev->pConfDesc = (void *)pdev->pClass->GetFSConfigDescriptor(&len);
-#else /* USE_USB_HS */
- pdev->pConfDesc = (void *)pdev->pClass->GetHSConfigDescriptor(&len);
-#endif /* USE_USB_FS */
-
-
- return USBD_OK;
-}
-
-/**
- * @brief USBD_Start
- * Start the USB Device Core.
- * @param pdev: Device Handle
- * @retval USBD Status
- */
-USBD_StatusTypeDef USBD_Start(USBD_HandleTypeDef *pdev)
-{
- /* Start the low level driver */
- return USBD_LL_Start(pdev);
-}
-
-/**
- * @brief USBD_Stop
- * Stop the USB Device Core.
- * @param pdev: Device Handle
- * @retval USBD Status
- */
-USBD_StatusTypeDef USBD_Stop(USBD_HandleTypeDef *pdev)
-{
- USBD_StatusTypeDef ret;
-
- /* Free Class Resources */
- if (pdev->pClass != NULL)
- {
- pdev->pClass->DeInit(pdev, (uint8_t)pdev->dev_config);
- }
-
- if (pdev->pConfDesc != NULL)
- {
- pdev->pConfDesc = NULL;
- }
-
- /* Stop the low level driver */
- ret = USBD_LL_Stop(pdev);
-
- return ret;
-}
-
-/**
-* @brief USBD_RunTestMode
-* Launch test mode process
-* @param pdev: device instance
-* @retval status
-*/
-USBD_StatusTypeDef USBD_RunTestMode(USBD_HandleTypeDef *pdev)
-{
- /* Prevent unused argument compilation warning */
- UNUSED(pdev);
-
- return USBD_OK;
-}
-
-/**
-* @brief USBD_SetClassConfig
-* Configure device and start the interface
-* @param pdev: device instance
-* @param cfgidx: configuration index
-* @retval status
-*/
-
-USBD_StatusTypeDef USBD_SetClassConfig(USBD_HandleTypeDef *pdev, uint8_t cfgidx)
-{
- USBD_StatusTypeDef ret = USBD_FAIL;
-
- if (pdev->pClass != NULL)
- {
- /* Set configuration and Start the Class */
- ret = (USBD_StatusTypeDef)pdev->pClass->Init(pdev, cfgidx);
- }
-
- return ret;
-}
-
-/**
-* @brief USBD_ClrClassConfig
-* Clear current configuration
-* @param pdev: device instance
-* @param cfgidx: configuration index
-* @retval status: USBD_StatusTypeDef
-*/
-USBD_StatusTypeDef USBD_ClrClassConfig(USBD_HandleTypeDef *pdev, uint8_t cfgidx)
-{
- /* Clear configuration and De-initialize the Class process */
- if (pdev->pClass != NULL)
- {
- pdev->pClass->DeInit(pdev, cfgidx);
- }
-
- return USBD_OK;
-}
-
-
-/**
-* @brief USBD_SetupStage
-* Handle the setup stage
-* @param pdev: device instance
-* @retval status
-*/
-USBD_StatusTypeDef USBD_LL_SetupStage(USBD_HandleTypeDef *pdev, uint8_t *psetup)
-{
- USBD_StatusTypeDef ret;
-
- USBD_ParseSetupRequest(&pdev->request, psetup);
-
- pdev->ep0_state = USBD_EP0_SETUP;
-
- pdev->ep0_data_len = pdev->request.wLength;
-
- switch (pdev->request.bmRequest & 0x1FU)
- {
- case USB_REQ_RECIPIENT_DEVICE:
- ret = USBD_StdDevReq(pdev, &pdev->request);
- break;
-
- case USB_REQ_RECIPIENT_INTERFACE:
- ret = USBD_StdItfReq(pdev, &pdev->request);
- break;
-
- case USB_REQ_RECIPIENT_ENDPOINT:
- ret = USBD_StdEPReq(pdev, &pdev->request);
- break;
-
- default:
- ret = USBD_LL_StallEP(pdev, (pdev->request.bmRequest & 0x80U));
- break;
- }
-
- return ret;
-}
-
-/**
-* @brief USBD_DataOutStage
-* Handle data OUT stage
-* @param pdev: device instance
-* @param epnum: endpoint index
-* @retval status
-*/
-USBD_StatusTypeDef USBD_LL_DataOutStage(USBD_HandleTypeDef *pdev,
- uint8_t epnum, uint8_t *pdata)
-{
- USBD_EndpointTypeDef *pep;
- USBD_StatusTypeDef ret;
-
- if (epnum == 0U)
- {
- pep = &pdev->ep_out[0];
-
- if (pdev->ep0_state == USBD_EP0_DATA_OUT)
- {
- if (pep->rem_length > pep->maxpacket)
- {
- pep->rem_length -= pep->maxpacket;
-
- (void)USBD_CtlContinueRx(pdev, pdata, MIN(pep->rem_length, pep->maxpacket));
- }
- else
- {
- if ((pdev->pClass->EP0_RxReady != NULL) &&
- (pdev->dev_state == USBD_STATE_CONFIGURED))
- {
- pdev->pClass->EP0_RxReady(pdev);
- }
- (void)USBD_CtlSendStatus(pdev);
- }
- }
- else
- {
-#if 0
- if (pdev->ep0_state == USBD_EP0_STATUS_OUT)
- {
- /*
- * STATUS PHASE completed, update ep0_state to idle
- */
- pdev->ep0_state = USBD_EP0_IDLE;
- (void)USBD_LL_StallEP(pdev, 0U);
- }
-#endif
- }
- }
- else if ((pdev->pClass->DataOut != NULL) &&
- (pdev->dev_state == USBD_STATE_CONFIGURED))
- {
- ret = (USBD_StatusTypeDef)pdev->pClass->DataOut(pdev, epnum);
-
- if (ret != USBD_OK)
- {
- return ret;
- }
- }
- else
- {
- /* should never be in this condition */
- return USBD_FAIL;
- }
-
- return USBD_OK;
-}
-
-/**
-* @brief USBD_DataInStage
-* Handle data in stage
-* @param pdev: device instance
-* @param epnum: endpoint index
-* @retval status
-*/
-USBD_StatusTypeDef USBD_LL_DataInStage(USBD_HandleTypeDef *pdev,
- uint8_t epnum, uint8_t *pdata)
-{
- USBD_EndpointTypeDef *pep;
- USBD_StatusTypeDef ret;
-
- if (epnum == 0U)
- {
- pep = &pdev->ep_in[0];
-
- if (pdev->ep0_state == USBD_EP0_DATA_IN)
- {
- if (pep->rem_length > pep->maxpacket)
- {
- pep->rem_length -= pep->maxpacket;
-
- (void)USBD_CtlContinueSendData(pdev, pdata, pep->rem_length);
-
- /* Prepare endpoint for premature end of transfer */
- (void)USBD_LL_PrepareReceive(pdev, 0U, NULL, 0U);
- }
- else
- {
- /* last packet is MPS multiple, so send ZLP packet */
- if ((pep->maxpacket == pep->rem_length) &&
- (pep->total_length >= pep->maxpacket) &&
- (pep->total_length < pdev->ep0_data_len))
- {
- (void)USBD_CtlContinueSendData(pdev, NULL, 0U);
- pdev->ep0_data_len = 0U;
-
- /* Prepare endpoint for premature end of transfer */
- (void)USBD_LL_PrepareReceive(pdev, 0U, NULL, 0U);
- }
- else
- {
- if ((pdev->pClass->EP0_TxSent != NULL) &&
- (pdev->dev_state == USBD_STATE_CONFIGURED))
- {
- pdev->pClass->EP0_TxSent(pdev);
- }
- (void)USBD_LL_StallEP(pdev, 0x80U);
- (void)USBD_CtlReceiveStatus(pdev);
- }
- }
- }
- else
- {
-#if 0
- if ((pdev->ep0_state == USBD_EP0_STATUS_IN) ||
- (pdev->ep0_state == USBD_EP0_IDLE))
- {
- (void)USBD_LL_StallEP(pdev, 0x80U);
- }
-#endif
- }
-
- if (pdev->dev_test_mode == 1U)
- {
- (void)USBD_RunTestMode(pdev);
- pdev->dev_test_mode = 0U;
- }
- }
- else if ((pdev->pClass->DataIn != NULL) &&
- (pdev->dev_state == USBD_STATE_CONFIGURED))
- {
- ret = (USBD_StatusTypeDef)pdev->pClass->DataIn(pdev, epnum);
-
- if (ret != USBD_OK)
- {
- return ret;
- }
- }
- else
- {
- /* should never be in this condition */
- return USBD_FAIL;
- }
-
- return USBD_OK;
-}
-
-/**
-* @brief USBD_LL_Reset
-* Handle Reset event
-* @param pdev: device instance
-* @retval status
-*/
-
-USBD_StatusTypeDef USBD_LL_Reset(USBD_HandleTypeDef *pdev)
-{
- /* Upon Reset call user call back */
- pdev->dev_state = USBD_STATE_DEFAULT;
- pdev->ep0_state = USBD_EP0_IDLE;
- pdev->dev_config = 0U;
- pdev->dev_remote_wakeup = 0U;
-
- if (pdev->pClassData != NULL)
- {
- pdev->pClass->DeInit(pdev, (uint8_t)pdev->dev_config);
- }
-
- /* Open EP0 OUT */
- (void)USBD_LL_OpenEP(pdev, 0x00U, USBD_EP_TYPE_CTRL, USB_MAX_EP0_SIZE);
- pdev->ep_out[0x00U & 0xFU].is_used = 1U;
-
- pdev->ep_out[0].maxpacket = USB_MAX_EP0_SIZE;
-
- /* Open EP0 IN */
- (void)USBD_LL_OpenEP(pdev, 0x80U, USBD_EP_TYPE_CTRL, USB_MAX_EP0_SIZE);
- pdev->ep_in[0x80U & 0xFU].is_used = 1U;
-
- pdev->ep_in[0].maxpacket = USB_MAX_EP0_SIZE;
-
- return USBD_OK;
-}
-
-/**
-* @brief USBD_LL_Reset
-* Handle Reset event
-* @param pdev: device instance
-* @retval status
-*/
-USBD_StatusTypeDef USBD_LL_SetSpeed(USBD_HandleTypeDef *pdev,
- USBD_SpeedTypeDef speed)
-{
- pdev->dev_speed = speed;
-
- return USBD_OK;
-}
-
-/**
-* @brief USBD_Suspend
-* Handle Suspend event
-* @param pdev: device instance
-* @retval status
-*/
-
-USBD_StatusTypeDef USBD_LL_Suspend(USBD_HandleTypeDef *pdev)
-{
- pdev->dev_old_state = pdev->dev_state;
- pdev->dev_state = USBD_STATE_SUSPENDED;
-
- return USBD_OK;
-}
-
-/**
-* @brief USBD_Resume
-* Handle Resume event
-* @param pdev: device instance
-* @retval status
-*/
-
-USBD_StatusTypeDef USBD_LL_Resume(USBD_HandleTypeDef *pdev)
-{
- if (pdev->dev_state == USBD_STATE_SUSPENDED)
- {
- pdev->dev_state = pdev->dev_old_state;
- }
-
- return USBD_OK;
-}
-
-/**
-* @brief USBD_SOF
-* Handle SOF event
-* @param pdev: device instance
-* @retval status
-*/
-
-USBD_StatusTypeDef USBD_LL_SOF(USBD_HandleTypeDef *pdev)
-{
- if (pdev->dev_state == USBD_STATE_CONFIGURED)
- {
- if (pdev->pClass->SOF != NULL)
- {
- pdev->pClass->SOF(pdev);
- }
- }
-
- return USBD_OK;
-}
-
-/**
-* @brief USBD_IsoINIncomplete
-* Handle iso in incomplete event
-* @param pdev: device instance
-* @retval status
-*/
-USBD_StatusTypeDef USBD_LL_IsoINIncomplete(USBD_HandleTypeDef *pdev,
- uint8_t epnum)
-{
- /* Prevent unused arguments compilation warning */
- UNUSED(pdev);
- UNUSED(epnum);
-
- return USBD_OK;
-}
-
-/**
-* @brief USBD_IsoOUTIncomplete
-* Handle iso out incomplete event
-* @param pdev: device instance
-* @retval status
-*/
-USBD_StatusTypeDef USBD_LL_IsoOUTIncomplete(USBD_HandleTypeDef *pdev,
- uint8_t epnum)
-{
- /* Prevent unused arguments compilation warning */
- UNUSED(pdev);
- UNUSED(epnum);
-
- return USBD_OK;
-}
-
-/**
-* @brief USBD_DevConnected
-* Handle device connection event
-* @param pdev: device instance
-* @retval status
-*/
-USBD_StatusTypeDef USBD_LL_DevConnected(USBD_HandleTypeDef *pdev)
-{
- /* Prevent unused argument compilation warning */
- UNUSED(pdev);
-
- return USBD_OK;
-}
-
-/**
-* @brief USBD_DevDisconnected
-* Handle device disconnection event
-* @param pdev: device instance
-* @retval status
-*/
-USBD_StatusTypeDef USBD_LL_DevDisconnected(USBD_HandleTypeDef *pdev)
-{
- /* Free Class Resources */
- pdev->dev_state = USBD_STATE_DEFAULT;
-
- if (pdev->pClass != NULL)
- {
- pdev->pClass->DeInit(pdev, (uint8_t)pdev->dev_config);
- }
-
- return USBD_OK;
-}
-/**
-* @}
-*/
-
-
-/**
-* @}
-*/
-
-
-/**
-* @}
-*/
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
-
diff --git a/lib/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c b/lib/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c
deleted file mode 100644
index c31d40e0a..000000000
--- a/lib/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c
+++ /dev/null
@@ -1,944 +0,0 @@
-/**
- ******************************************************************************
- * @file usbd_req.c
- * @author MCD Application Team
- * @brief This file provides the standard USB requests following chapter 9.
- ******************************************************************************
- * @attention
- *
- * © Copyright (c) 2015 STMicroelectronics.
- * All rights reserved.
- *
- * This software component is licensed by ST under Ultimate Liberty license
- * SLA0044, the "License"; You may not use this file except in compliance with
- * the License. You may obtain a copy of the License at:
- * www.st.com/SLA0044
- *
- ******************************************************************************
- */
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_ctlreq.h"
-#include "usbd_ioreq.h"
-
-
-/** @addtogroup STM32_USBD_STATE_DEVICE_LIBRARY
- * @{
- */
-
-
-/** @defgroup USBD_REQ
- * @brief USB standard requests module
- * @{
- */
-
-/** @defgroup USBD_REQ_Private_TypesDefinitions
- * @{
- */
-
-/**
- * @}
- */
-
-
-/** @defgroup USBD_REQ_Private_Defines
- * @{
- */
-
-/**
- * @}
- */
-
-
-/** @defgroup USBD_REQ_Private_Macros
- * @{
- */
-
-/**
- * @}
- */
-
-
-/** @defgroup USBD_REQ_Private_Variables
- * @{
- */
-
-/**
- * @}
- */
-
-
-/** @defgroup USBD_REQ_Private_FunctionPrototypes
- * @{
- */
-static void USBD_GetDescriptor(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
-static void USBD_SetAddress(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
-static USBD_StatusTypeDef USBD_SetConfig(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
-static void USBD_GetConfig(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
-static void USBD_GetStatus(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
-static void USBD_SetFeature(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
-static void USBD_ClrFeature(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
-static uint8_t USBD_GetLen(uint8_t *buf);
-
-/**
- * @}
- */
-
-
-/** @defgroup USBD_REQ_Private_Functions
- * @{
- */
-
-
-/**
-* @brief USBD_StdDevReq
-* Handle standard usb device requests
-* @param pdev: device instance
-* @param req: usb request
-* @retval status
-*/
-USBD_StatusTypeDef USBD_StdDevReq(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
-{
- USBD_StatusTypeDef ret = USBD_OK;
-
- switch (req->bmRequest & USB_REQ_TYPE_MASK)
- {
- case USB_REQ_TYPE_CLASS:
- case USB_REQ_TYPE_VENDOR:
- ret = (USBD_StatusTypeDef)pdev->pClass->Setup(pdev, req);
- break;
-
- case USB_REQ_TYPE_STANDARD:
- switch (req->bRequest)
- {
- case USB_REQ_GET_DESCRIPTOR:
- USBD_GetDescriptor(pdev, req);
- break;
-
- case USB_REQ_SET_ADDRESS:
- USBD_SetAddress(pdev, req);
- break;
-
- case USB_REQ_SET_CONFIGURATION:
- ret = USBD_SetConfig(pdev, req);
- break;
-
- case USB_REQ_GET_CONFIGURATION:
- USBD_GetConfig(pdev, req);
- break;
-
- case USB_REQ_GET_STATUS:
- USBD_GetStatus(pdev, req);
- break;
-
- case USB_REQ_SET_FEATURE:
- USBD_SetFeature(pdev, req);
- break;
-
- case USB_REQ_CLEAR_FEATURE:
- USBD_ClrFeature(pdev, req);
- break;
-
- default:
- USBD_CtlError(pdev, req);
- break;
- }
- break;
-
- default:
- USBD_CtlError(pdev, req);
- break;
- }
-
- return ret;
-}
-
-/**
-* @brief USBD_StdItfReq
-* Handle standard usb interface requests
-* @param pdev: device instance
-* @param req: usb request
-* @retval status
-*/
-USBD_StatusTypeDef USBD_StdItfReq(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
-{
- USBD_StatusTypeDef ret = USBD_OK;
-
- switch (req->bmRequest & USB_REQ_TYPE_MASK)
- {
- case USB_REQ_TYPE_CLASS:
- case USB_REQ_TYPE_VENDOR:
- case USB_REQ_TYPE_STANDARD:
- switch (pdev->dev_state)
- {
- case USBD_STATE_DEFAULT:
- case USBD_STATE_ADDRESSED:
- case USBD_STATE_CONFIGURED:
-
- if (LOBYTE(req->wIndex) <= USBD_MAX_NUM_INTERFACES)
- {
- ret = (USBD_StatusTypeDef)pdev->pClass->Setup(pdev, req);
-
- if ((req->wLength == 0U) && (ret == USBD_OK))
- {
- (void)USBD_CtlSendStatus(pdev);
- }
- }
- else
- {
- USBD_CtlError(pdev, req);
- }
- break;
-
- default:
- USBD_CtlError(pdev, req);
- break;
- }
- break;
-
- default:
- USBD_CtlError(pdev, req);
- break;
- }
-
- return ret;
-}
-
-/**
-* @brief USBD_StdEPReq
-* Handle standard usb endpoint requests
-* @param pdev: device instance
-* @param req: usb request
-* @retval status
-*/
-USBD_StatusTypeDef USBD_StdEPReq(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
-{
- USBD_EndpointTypeDef *pep;
- uint8_t ep_addr;
- USBD_StatusTypeDef ret = USBD_OK;
- ep_addr = LOBYTE(req->wIndex);
-
- switch (req->bmRequest & USB_REQ_TYPE_MASK)
- {
- case USB_REQ_TYPE_CLASS:
- case USB_REQ_TYPE_VENDOR:
- ret = (USBD_StatusTypeDef)pdev->pClass->Setup(pdev, req);
- break;
-
- case USB_REQ_TYPE_STANDARD:
- switch (req->bRequest)
- {
- case USB_REQ_SET_FEATURE:
- switch (pdev->dev_state)
- {
- case USBD_STATE_ADDRESSED:
- if ((ep_addr != 0x00U) && (ep_addr != 0x80U))
- {
- (void)USBD_LL_StallEP(pdev, ep_addr);
- (void)USBD_LL_StallEP(pdev, 0x80U);
- }
- else
- {
- USBD_CtlError(pdev, req);
- }
- break;
-
- case USBD_STATE_CONFIGURED:
- if (req->wValue == USB_FEATURE_EP_HALT)
- {
- if ((ep_addr != 0x00U) && (ep_addr != 0x80U) && (req->wLength == 0x00U))
- {
- (void)USBD_LL_StallEP(pdev, ep_addr);
- }
- }
- (void)USBD_CtlSendStatus(pdev);
-
- break;
-
- default:
- USBD_CtlError(pdev, req);
- break;
- }
- break;
-
- case USB_REQ_CLEAR_FEATURE:
-
- switch (pdev->dev_state)
- {
- case USBD_STATE_ADDRESSED:
- if ((ep_addr != 0x00U) && (ep_addr != 0x80U))
- {
- (void)USBD_LL_StallEP(pdev, ep_addr);
- (void)USBD_LL_StallEP(pdev, 0x80U);
- }
- else
- {
- USBD_CtlError(pdev, req);
- }
- break;
-
- case USBD_STATE_CONFIGURED:
- if (req->wValue == USB_FEATURE_EP_HALT)
- {
- if ((ep_addr & 0x7FU) != 0x00U)
- {
- (void)USBD_LL_ClearStallEP(pdev, ep_addr);
- }
- (void)USBD_CtlSendStatus(pdev);
- (USBD_StatusTypeDef)pdev->pClass->Setup(pdev, req);
- }
- break;
-
- default:
- USBD_CtlError(pdev, req);
- break;
- }
- break;
-
- case USB_REQ_GET_STATUS:
- switch (pdev->dev_state)
- {
- case USBD_STATE_ADDRESSED:
- if ((ep_addr != 0x00U) && (ep_addr != 0x80U))
- {
- USBD_CtlError(pdev, req);
- break;
- }
- pep = ((ep_addr & 0x80U) == 0x80U) ? &pdev->ep_in[ep_addr & 0x7FU] : \
- &pdev->ep_out[ep_addr & 0x7FU];
-
- pep->status = 0x0000U;
-
- (void)USBD_CtlSendData(pdev, (uint8_t *)&pep->status, 2U);
- break;
-
- case USBD_STATE_CONFIGURED:
- if ((ep_addr & 0x80U) == 0x80U)
- {
- if (pdev->ep_in[ep_addr & 0xFU].is_used == 0U)
- {
- USBD_CtlError(pdev, req);
- break;
- }
- }
- else
- {
- if (pdev->ep_out[ep_addr & 0xFU].is_used == 0U)
- {
- USBD_CtlError(pdev, req);
- break;
- }
- }
-
- pep = ((ep_addr & 0x80U) == 0x80U) ? &pdev->ep_in[ep_addr & 0x7FU] : \
- &pdev->ep_out[ep_addr & 0x7FU];
-
- if ((ep_addr == 0x00U) || (ep_addr == 0x80U))
- {
- pep->status = 0x0000U;
- }
- else if (USBD_LL_IsStallEP(pdev, ep_addr) != 0U)
- {
- pep->status = 0x0001U;
- }
- else
- {
- pep->status = 0x0000U;
- }
-
- (void)USBD_CtlSendData(pdev, (uint8_t *)&pep->status, 2U);
- break;
-
- default:
- USBD_CtlError(pdev, req);
- break;
- }
- break;
-
- default:
- USBD_CtlError(pdev, req);
- break;
- }
- break;
-
- default:
- USBD_CtlError(pdev, req);
- break;
- }
-
- return ret;
-}
-
-
-/**
-* @brief USBD_GetDescriptor
-* Handle Get Descriptor requests
-* @param pdev: device instance
-* @param req: usb request
-* @retval status
-*/
-static void USBD_GetDescriptor(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
-{
- uint16_t len = 0U;
- uint8_t *pbuf = NULL;
- uint8_t err = 0U;
-
- switch (req->wValue >> 8)
- {
-#if ((USBD_LPM_ENABLED == 1U) || (USBD_CLASS_BOS_ENABLED == 1U))
- case USB_DESC_TYPE_BOS:
- if (pdev->pDesc->GetBOSDescriptor != NULL)
- {
- pbuf = pdev->pDesc->GetBOSDescriptor(pdev->dev_speed, &len);
- }
- else
- {
- USBD_CtlError(pdev, req);
- err++;
- }
- break;
-#endif
- case USB_DESC_TYPE_DEVICE:
- pbuf = pdev->pDesc->GetDeviceDescriptor(pdev->dev_speed, &len);
- break;
-
- case USB_DESC_TYPE_CONFIGURATION:
- if (pdev->dev_speed == USBD_SPEED_HIGH)
- {
- pbuf = pdev->pClass->GetHSConfigDescriptor(&len);
- pbuf[1] = USB_DESC_TYPE_CONFIGURATION;
- }
- else
- {
- pbuf = pdev->pClass->GetFSConfigDescriptor(&len);
- pbuf[1] = USB_DESC_TYPE_CONFIGURATION;
- }
- break;
-
- case USB_DESC_TYPE_STRING:
- switch ((uint8_t)(req->wValue))
- {
- case USBD_IDX_LANGID_STR:
- if (pdev->pDesc->GetLangIDStrDescriptor != NULL)
- {
- pbuf = pdev->pDesc->GetLangIDStrDescriptor(pdev->dev_speed, &len);
- }
- else
- {
- USBD_CtlError(pdev, req);
- err++;
- }
- break;
-
- case USBD_IDX_MFC_STR:
- if (pdev->pDesc->GetManufacturerStrDescriptor != NULL)
- {
- pbuf = pdev->pDesc->GetManufacturerStrDescriptor(pdev->dev_speed, &len);
- }
- else
- {
- USBD_CtlError(pdev, req);
- err++;
- }
- break;
-
- case USBD_IDX_PRODUCT_STR:
- if (pdev->pDesc->GetProductStrDescriptor != NULL)
- {
- pbuf = pdev->pDesc->GetProductStrDescriptor(pdev->dev_speed, &len);
- }
- else
- {
- USBD_CtlError(pdev, req);
- err++;
- }
- break;
-
- case USBD_IDX_SERIAL_STR:
- if (pdev->pDesc->GetSerialStrDescriptor != NULL)
- {
- pbuf = pdev->pDesc->GetSerialStrDescriptor(pdev->dev_speed, &len);
- }
- else
- {
- USBD_CtlError(pdev, req);
- err++;
- }
- break;
-
- case USBD_IDX_CONFIG_STR:
- if (pdev->pDesc->GetConfigurationStrDescriptor != NULL)
- {
- pbuf = pdev->pDesc->GetConfigurationStrDescriptor(pdev->dev_speed, &len);
- }
- else
- {
- USBD_CtlError(pdev, req);
- err++;
- }
- break;
-
- case USBD_IDX_INTERFACE_STR:
- if (pdev->pDesc->GetInterfaceStrDescriptor != NULL)
- {
- pbuf = pdev->pDesc->GetInterfaceStrDescriptor(pdev->dev_speed, &len);
- }
- else
- {
- USBD_CtlError(pdev, req);
- err++;
- }
- break;
-
- default:
-#if (USBD_SUPPORT_USER_STRING_DESC == 1U)
- if (pdev->pClass->GetUsrStrDescriptor != NULL)
- {
- pbuf = pdev->pClass->GetUsrStrDescriptor(pdev, (req->wValue), &len);
- }
- else
- {
- USBD_CtlError(pdev, req);
- err++;
- }
-#elif (USBD_CLASS_USER_STRING_DESC == 1U)
- if (pdev->pDesc->GetUserStrDescriptor != NULL)
- {
- pbuf = pdev->pDesc->GetUserStrDescriptor(pdev->dev_speed, (req->wValue), &len);
- }
- else
- {
- USBD_CtlError(pdev, req);
- err++;
- }
-#else
- USBD_CtlError(pdev, req);
- err++;
-#endif
- break;
- }
- break;
-
- case USB_DESC_TYPE_DEVICE_QUALIFIER:
- if (pdev->dev_speed == USBD_SPEED_HIGH)
- {
- pbuf = pdev->pClass->GetDeviceQualifierDescriptor(&len);
- }
- else
- {
- USBD_CtlError(pdev, req);
- err++;
- }
- break;
-
- case USB_DESC_TYPE_OTHER_SPEED_CONFIGURATION:
- if (pdev->dev_speed == USBD_SPEED_HIGH)
- {
- pbuf = pdev->pClass->GetOtherSpeedConfigDescriptor(&len);
- pbuf[1] = USB_DESC_TYPE_OTHER_SPEED_CONFIGURATION;
- }
- else
- {
- USBD_CtlError(pdev, req);
- err++;
- }
- break;
-
- default:
- USBD_CtlError(pdev, req);
- err++;
- break;
- }
-
- if (err != 0U)
- {
- return;
- }
- else
- {
- if (req->wLength != 0U)
- {
- if (len != 0U)
- {
- len = MIN(len, req->wLength);
- (void)USBD_CtlSendData(pdev, pbuf, len);
- }
- else
- {
- USBD_CtlError(pdev, req);
- }
- }
- else
- {
- (void)USBD_CtlSendStatus(pdev);
- }
- }
-}
-
-/**
-* @brief USBD_SetAddress
-* Set device address
-* @param pdev: device instance
-* @param req: usb request
-* @retval status
-*/
-static void USBD_SetAddress(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
-{
- uint8_t dev_addr;
-
- if ((req->wIndex == 0U) && (req->wLength == 0U) && (req->wValue < 128U))
- {
- dev_addr = (uint8_t)(req->wValue) & 0x7FU;
-
- if (pdev->dev_state == USBD_STATE_CONFIGURED)
- {
- USBD_CtlError(pdev, req);
- }
- else
- {
- pdev->dev_address = dev_addr;
- (void)USBD_LL_SetUSBAddress(pdev, dev_addr);
- (void)USBD_CtlSendStatus(pdev);
-
- if (dev_addr != 0U)
- {
- pdev->dev_state = USBD_STATE_ADDRESSED;
- }
- else
- {
- pdev->dev_state = USBD_STATE_DEFAULT;
- }
- }
- }
- else
- {
- USBD_CtlError(pdev, req);
- }
-}
-
-/**
-* @brief USBD_SetConfig
-* Handle Set device configuration request
-* @param pdev: device instance
-* @param req: usb request
-* @retval status
-*/
-static USBD_StatusTypeDef USBD_SetConfig(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
-{
- USBD_StatusTypeDef ret = USBD_OK;
- static uint8_t cfgidx;
-
- cfgidx = (uint8_t)(req->wValue);
-
- if (cfgidx > USBD_MAX_NUM_CONFIGURATION)
- {
- USBD_CtlError(pdev, req);
- return USBD_FAIL;
- }
-
- switch (pdev->dev_state)
- {
- case USBD_STATE_ADDRESSED:
- if (cfgidx != 0U)
- {
- pdev->dev_config = cfgidx;
-
- ret = USBD_SetClassConfig(pdev, cfgidx);
-
- if (ret != USBD_OK)
- {
- USBD_CtlError(pdev, req);
- }
- else
- {
- (void)USBD_CtlSendStatus(pdev);
- pdev->dev_state = USBD_STATE_CONFIGURED;
- }
- }
- else
- {
- (void)USBD_CtlSendStatus(pdev);
- }
- break;
-
- case USBD_STATE_CONFIGURED:
- if (cfgidx == 0U)
- {
- pdev->dev_state = USBD_STATE_ADDRESSED;
- pdev->dev_config = cfgidx;
- (void)USBD_ClrClassConfig(pdev, cfgidx);
- (void)USBD_CtlSendStatus(pdev);
- }
- else if (cfgidx != pdev->dev_config)
- {
- /* Clear old configuration */
- (void)USBD_ClrClassConfig(pdev, (uint8_t)pdev->dev_config);
-
- /* set new configuration */
- pdev->dev_config = cfgidx;
-
- ret = USBD_SetClassConfig(pdev, cfgidx);
-
- if (ret != USBD_OK)
- {
- USBD_CtlError(pdev, req);
- (void)USBD_ClrClassConfig(pdev, (uint8_t)pdev->dev_config);
- pdev->dev_state = USBD_STATE_ADDRESSED;
- }
- else
- {
- (void)USBD_CtlSendStatus(pdev);
- }
- }
- else
- {
- (void)USBD_CtlSendStatus(pdev);
- }
- break;
-
- default:
- USBD_CtlError(pdev, req);
- (void)USBD_ClrClassConfig(pdev, cfgidx);
- ret = USBD_FAIL;
- break;
- }
-
- return ret;
-}
-
-/**
-* @brief USBD_GetConfig
-* Handle Get device configuration request
-* @param pdev: device instance
-* @param req: usb request
-* @retval status
-*/
-static void USBD_GetConfig(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
-{
- if (req->wLength != 1U)
- {
- USBD_CtlError(pdev, req);
- }
- else
- {
- switch (pdev->dev_state)
- {
- case USBD_STATE_DEFAULT:
- case USBD_STATE_ADDRESSED:
- pdev->dev_default_config = 0U;
- (void)USBD_CtlSendData(pdev, (uint8_t *)&pdev->dev_default_config, 1U);
- break;
-
- case USBD_STATE_CONFIGURED:
- (void)USBD_CtlSendData(pdev, (uint8_t *)&pdev->dev_config, 1U);
- break;
-
- default:
- USBD_CtlError(pdev, req);
- break;
- }
- }
-}
-
-/**
-* @brief USBD_GetStatus
-* Handle Get Status request
-* @param pdev: device instance
-* @param req: usb request
-* @retval status
-*/
-static void USBD_GetStatus(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
-{
- switch (pdev->dev_state)
- {
- case USBD_STATE_DEFAULT:
- case USBD_STATE_ADDRESSED:
- case USBD_STATE_CONFIGURED:
- if (req->wLength != 0x2U)
- {
- USBD_CtlError(pdev, req);
- break;
- }
-
-#if (USBD_SELF_POWERED == 1U)
- pdev->dev_config_status = USB_CONFIG_SELF_POWERED;
-#else
- pdev->dev_config_status = 0U;
-#endif
-
- if (pdev->dev_remote_wakeup != 0U)
- {
- pdev->dev_config_status |= USB_CONFIG_REMOTE_WAKEUP;
- }
-
- (void)USBD_CtlSendData(pdev, (uint8_t *)&pdev->dev_config_status, 2U);
- break;
-
- default:
- USBD_CtlError(pdev, req);
- break;
- }
-}
-
-
-/**
-* @brief USBD_SetFeature
-* Handle Set device feature request
-* @param pdev: device instance
-* @param req: usb request
-* @retval status
-*/
-static void USBD_SetFeature(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
-{
- if (req->wValue == USB_FEATURE_REMOTE_WAKEUP)
- {
- pdev->dev_remote_wakeup = 1U;
- (void)USBD_CtlSendStatus(pdev);
- }
-}
-
-
-/**
-* @brief USBD_ClrFeature
-* Handle clear device feature request
-* @param pdev: device instance
-* @param req: usb request
-* @retval status
-*/
-static void USBD_ClrFeature(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
-{
- switch (pdev->dev_state)
- {
- case USBD_STATE_DEFAULT:
- case USBD_STATE_ADDRESSED:
- case USBD_STATE_CONFIGURED:
- if (req->wValue == USB_FEATURE_REMOTE_WAKEUP)
- {
- pdev->dev_remote_wakeup = 0U;
- (void)USBD_CtlSendStatus(pdev);
- }
- break;
-
- default:
- USBD_CtlError(pdev, req);
- break;
- }
-}
-
-/**
-* @brief USBD_ParseSetupRequest
-* Copy buffer into setup structure
-* @param pdev: device instance
-* @param req: usb request
-* @retval None
-*/
-
-void USBD_ParseSetupRequest(USBD_SetupReqTypedef *req, uint8_t *pdata)
-{
- uint8_t *pbuff = pdata;
-
- req->bmRequest = *(uint8_t *)(pbuff);
-
- pbuff++;
- req->bRequest = *(uint8_t *)(pbuff);
-
- pbuff++;
- req->wValue = SWAPBYTE(pbuff);
-
- pbuff++;
- pbuff++;
- req->wIndex = SWAPBYTE(pbuff);
-
- pbuff++;
- pbuff++;
- req->wLength = SWAPBYTE(pbuff);
-}
-
-/**
-* @brief USBD_CtlError
-* Handle USB low level Error
-* @param pdev: device instance
-* @param req: usb request
-* @retval None
-*/
-
-void USBD_CtlError(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
-{
- UNUSED(req);
-
- (void)USBD_LL_StallEP(pdev, 0x80U);
- (void)USBD_LL_StallEP(pdev, 0U);
-}
-
-
-/**
- * @brief USBD_GetString
- * Convert Ascii string into unicode one
- * @param desc : descriptor buffer
- * @param unicode : Formatted string buffer (unicode)
- * @param len : descriptor length
- * @retval None
- */
-void USBD_GetString(uint8_t *desc, uint8_t *unicode, uint16_t *len)
-{
- uint8_t idx = 0U;
- uint8_t *pdesc;
-
- if (desc == NULL)
- {
- return;
- }
-
- pdesc = desc;
- *len = ((uint16_t)USBD_GetLen(pdesc) * 2U) + 2U;
-
- unicode[idx] = *(uint8_t *)len;
- idx++;
- unicode[idx] = USB_DESC_TYPE_STRING;
- idx++;
-
- while (*pdesc != (uint8_t)'\0')
- {
- unicode[idx] = *pdesc;
- pdesc++;
- idx++;
-
- unicode[idx] = 0U;
- idx++;
- }
-}
-
-/**
- * @brief USBD_GetLen
- * return the string length
- * @param buf : pointer to the ascii string buffer
- * @retval string length
- */
-static uint8_t USBD_GetLen(uint8_t *buf)
-{
- uint8_t len = 0U;
- uint8_t *pbuff = buf;
-
- while (*pbuff != (uint8_t)'\0')
- {
- len++;
- pbuff++;
- }
-
- return len;
-}
-/**
- * @}
- */
-
-
-/**
- * @}
- */
-
-
-/**
- * @}
- */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/lib/STM32_USB_Device_Library/Core/Src/usbd_desc_template.c b/lib/STM32_USB_Device_Library/Core/Src/usbd_desc_template.c
deleted file mode 100644
index 403936ddb..000000000
--- a/lib/STM32_USB_Device_Library/Core/Src/usbd_desc_template.c
+++ /dev/null
@@ -1,451 +0,0 @@
-/**
- ******************************************************************************
- * @file usbd_desc_template.c
- * @author MCD Application Team
- * @brief This file provides the USBD descriptors and string formatting method.
- * This template should be copied to the user folder,
- * renamed and customized following user needs.
- ******************************************************************************
- * @attention
- *
- * © Copyright (c) 2015 STMicroelectronics.
- * All rights reserved.
- *
- * This software component is licensed by ST under Ultimate Liberty license
- * SLA0044, the "License"; You may not use this file except in compliance with
- * the License. You may obtain a copy of the License at:
- * www.st.com/SLA0044
- *
- ******************************************************************************
- */
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_core.h"
-#include "usbd_desc.h"
-#include "usbd_conf.h"
-
-/* Private typedef -----------------------------------------------------------*/
-/* Private define ------------------------------------------------------------*/
-#define USBD_VID 0x0483
-#define USBD_PID 0xaaaa /* Replace '0xaaaa' with your device product ID */
-#define USBD_LANGID_STRING 0xbbb /* Replace '0xbbb' with your device language ID */
-#define USBD_MANUFACTURER_STRING "xxxxx" /* Add your manufacturer string */
-#define USBD_PRODUCT_HS_STRING "xxxxx" /* Add your product High Speed string */
-#define USBD_PRODUCT_FS_STRING "xxxxx" /* Add your product Full Speed string */
-#define USBD_CONFIGURATION_HS_STRING "xxxxx" /* Add your configuration High Speed string */
-#define USBD_INTERFACE_HS_STRING "xxxxx" /* Add your Interface High Speed string */
-#define USBD_CONFIGURATION_FS_STRING "xxxxx" /* Add your configuration Full Speed string */
-#define USBD_INTERFACE_FS_STRING "xxxxx" /* Add your Interface Full Speed string */
-
-/* Private macro -------------------------------------------------------------*/
-/* Private function prototypes -----------------------------------------------*/
-uint8_t *USBD_Class_DeviceDescriptor(USBD_SpeedTypeDef speed, uint16_t *length);
-uint8_t *USBD_Class_LangIDStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length);
-uint8_t *USBD_Class_ManufacturerStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length);
-uint8_t *USBD_Class_ProductStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length);
-uint8_t *USBD_Class_SerialStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length);
-uint8_t *USBD_Class_ConfigStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length);
-uint8_t *USBD_Class_InterfaceStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length);
-
-#if (USBD_CLASS_USER_STRING_DESC == 1)
-uint8_t *USBD_Class_UserStrDescriptor(USBD_SpeedTypeDef speed, uint8_t idx, uint16_t *length);
-#endif /* USB_CLASS_USER_STRING_DESC */
-
-#if ((USBD_LPM_ENABLED == 1) || (USBD_CLASS_BOS_ENABLED == 1))
-uint8_t *USBD_USR_BOSDescriptor(USBD_SpeedTypeDef speed , uint16_t *length);
-#endif
-
-/* Private variables ---------------------------------------------------------*/
-USBD_DescriptorsTypeDef Class_Desc =
-{
- USBD_Class_DeviceDescriptor,
- USBD_Class_LangIDStrDescriptor,
- USBD_Class_ManufacturerStrDescriptor,
- USBD_Class_ProductStrDescriptor,
- USBD_Class_SerialStrDescriptor,
- USBD_Class_ConfigStrDescriptor,
- USBD_Class_InterfaceStrDescriptor,
-#if (USBD_CLASS_USER_STRING_DESC == 1)
- USBD_CLASS_UserStrDescriptor,
-#endif
-
-#if ((USBD_LPM_ENABLED == 1) || (USBD_CLASS_BOS_ENABLED == 1))
- USBD_USR_BOSDescriptor,
-#endif
-};
-
-/* USB Standard Device Descriptor */
-#if defined ( __ICCARM__ ) /*!< IAR Compiler */
-#pragma data_alignment=4
-#endif
-__ALIGN_BEGIN uint8_t USBD_DeviceDesc[USB_LEN_DEV_DESC] __ALIGN_END =
-{
- 0x12, /* bLength */
- USB_DESC_TYPE_DEVICE, /* bDescriptorType */
-#if ((USBD_LPM_ENABLED == 1) || (USBD_CLASS_BOS_ENABLED == 1))
- 0x01, /*bcdUSB */ /* changed to USB version 2.01
- in order to support BOS Desc */
-#else
- 0x00, /* bcdUSB */
-#endif
- 0x02,
- 0x00, /* bDeviceClass */
- 0x00, /* bDeviceSubClass */
- 0x00, /* bDeviceProtocol */
- USB_MAX_EP0_SIZE, /* bMaxPacketSize */
- LOBYTE(USBD_VID), /* idVendor */
- HIBYTE(USBD_VID), /* idVendor */
- LOBYTE(USBD_PID), /* idVendor */
- HIBYTE(USBD_PID), /* idVendor */
- 0x00, /* bcdDevice rel. 2.00 */
- 0x02,
- USBD_IDX_MFC_STR, /* Index of manufacturer string */
- USBD_IDX_PRODUCT_STR, /* Index of product string */
- USBD_IDX_SERIAL_STR, /* Index of serial number string */
- USBD_MAX_NUM_CONFIGURATION /* bNumConfigurations */
-}; /* USB_DeviceDescriptor */
-
-
-/* USB Device LPM BOS descriptor */
-#if (USBD_LPM_ENABLED == 1)
-#if defined ( __ICCARM__ ) /*!< IAR Compiler */
- #pragma data_alignment=4
-#endif
-__ALIGN_BEGIN uint8_t USBD_BOSDesc[USB_SIZ_BOS_DESC] __ALIGN_END =
-{
- 0x5,
- USB_DESC_TYPE_BOS,
- 0xC,
- 0x0,
- 0x1, /* 1 device capability */
- /* device capability */
- 0x7,
- USB_DEVICE_CAPABITY_TYPE,
- 0x2,
- 0x6, /*LPM capability bit set */
- 0x0,
- 0x0,
- 0x0
-};
-#endif
-
-/* USB Device Billboard BOS descriptor Template */
-#if (USBD_CLASS_BOS_ENABLED == 1)
-#if defined ( __ICCARM__ ) /*!< IAR Compiler */
- #pragma data_alignment=4
-#endif
-__ALIGN_BEGIN uint8_t USBD_BOSDesc[USB_SIZ_BOS_DESC] __ALIGN_END =
-{
-0x05, /* bLength */
-USB_DESC_TYPE_BOS, /* Device Descriptor Type */
-USB_SIZ_BOS_DESC, /* Total length of BOS descriptor and all of its sub descs */
-0x00,
-0x04, /* The number of separate device capability descriptors in the BOS */
-
- /* ----------- Device Capability Descriptor: CONTAINER_ID ---------- */
-0x14, /* bLength */
-0x10, /* bDescriptorType: DEVICE CAPABILITY Type */
-0x04, /* bDevCapabilityType: CONTAINER_ID */
-0x00, /* bReserved */
-0xa7, 0xd6, 0x1b, 0xfa, /* ContainerID: This is a Unique 128-bit number GUID */
-0x91, 0xa6, 0xa8, 0x4e,
-0xa8, 0x21, 0x9f, 0x2b,
-0xaf, 0xf7, 0x94, 0xd4,
-
- /* ----------- Device Capability Descriptor: BillBoard ---------- */
-0x34, /* bLength */
-0x10, /* bDescriptorType: DEVICE CAPABILITY Type */
-0x0D, /* bDevCapabilityType: BILLBOARD_CAPABILITY */
-USBD_BB_URL_STRING_INDEX, /* iAddtionalInfoURL: Index of string descriptor providing a URL where the user can go to get more
- detailed information about the product and the various Alternate Modes it supports */
-
-0x02, /* bNumberOfAlternateModes: Number of Alternate modes supported. The
- maximum value that this field can be set to is MAX_NUM_ALT_MODE. */
-
-0x00, /* bPreferredAlternateMode: Index of the preferred Alternate Mode. System
- software may use this information to provide the user with a better user experience. */
-
-0x00, 0x00, /* VCONN Power needed by the adapter for full functionality 000b = 1W */
-
-0x01,0x00,0x00,0x00, /* bmConfigured. 01b: Alternate Mode configuration not attempted or exited */
-0x00,0x00,0x00,0x00,
-0x00,0x00,0x00,0x00,
-0x00,0x00,0x00,0x00,
-0x00,0x00,0x00,0x00,
-0x00,0x00,0x00,0x00,
-0x00,0x00,0x00,0x00,
-0x00,0x00,0x00,0x00,
-0x21, 0x01, /* bcdVersion = 0x0121 */
-0x00, /* bAdditionalFailureInfo */
-0x00, /* bReserved */
-LOBYTE(USBD_VID),
-HIBYTE(USBD_VID), /* wSVID[0]: Standard or Vendor ID. This shall match one of the SVIDs
- returned in response to a USB PD Discover SVIDs command */
-
-0x00, /* bAlternateMode[0] Index of the Alternate Mode within the SVID as
- returned in response to a Discover Modes command. Example:
- 0 � first Mode entry
- 1 � second mode entry */
-
-USBD_BB_ALTMODE0_STRING_INDEX, /* iAlternateModeString[0]: Index of string descriptor describing protocol.
- It is optional to support this string. */
-LOBYTE(USBD_VID),
-HIBYTE(USBD_VID), /* wSVID[1]: Standard or Vendor ID. This shall match one of the SVIDs
- returned in response to a USB PD Discover SVIDs command */
-
-0x01, /* bAlternateMode[1] Index of the Alternate Mode within the SVID as
- returned in response to a Discover Modes command. Example:
- 0 � first Mode entry
- 1 � second Mode entry */
-
-USBD_BB_ALTMODE1_STRING_INDEX, /* iAlternateModeString[1]: Index of string descriptor describing protocol.
- It is optional to support this string. */
- /* Alternate Mode Desc */
- /* ----------- Device Capability Descriptor: BillBoard Alternate Mode Desc ---------- */
-0x08, /* bLength */
-0x10, /* bDescriptorType: Device Descriptor Type */
-0x0F, /* bDevCapabilityType: BILLBOARD ALTERNATE MODE CAPABILITY */
-0x00, /* bIndex: Index of Alternate Mode described in the Billboard Capability Desc */
-0x10, 0x00, 0x00, 0x00, /* dwAlternateModeVdo: contents of the Mode VDO for the alternate mode identified by bIndex */
-
-0x08, /* bLength */
-0x10, /* bDescriptorType: Device Descriptor Type */
-0x0F, /* bDevCapabilityType: BILLBOARD ALTERNATE MODE CAPABILITY */
-0x01, /* bIndex: Index of Alternate Mode described in the Billboard Capability Desc */
-0x20, 0x00, 0x00, 0x00, /* dwAlternateModeVdo: contents of the Mode VDO for the alternate mode identified by bIndex */
-};
-#endif
-
-
-/* USB Standard Device Descriptor */
-#if defined ( __ICCARM__ ) /*!< IAR Compiler */
-#pragma data_alignment=4
-#endif
-__ALIGN_BEGIN uint8_t USBD_LangIDDesc[USB_LEN_LANGID_STR_DESC] __ALIGN_END =
-{
- USB_LEN_LANGID_STR_DESC,
- USB_DESC_TYPE_STRING,
- LOBYTE(USBD_LANGID_STRING),
- HIBYTE(USBD_LANGID_STRING),
-};
-
-#if defined ( __ICCARM__ ) /*!< IAR Compiler */
-#pragma data_alignment=4
-#endif
-__ALIGN_BEGIN uint8_t USBD_StringSerial[USB_SIZ_STRING_SERIAL] =
-{
- USB_SIZ_STRING_SERIAL,
- USB_DESC_TYPE_STRING,
-};
-
-#if defined ( __ICCARM__ ) /*!< IAR Compiler */
-#pragma data_alignment=4
-#endif
-__ALIGN_BEGIN uint8_t USBD_StrDesc[USBD_MAX_STR_DESC_SIZ] __ALIGN_END;
-
-/* Private functions ---------------------------------------------------------*/
-static void IntToUnicode(uint32_t value, uint8_t *pbuf, uint8_t len);
-static void Get_SerialNum(void);
-
-/**
- * @brief Returns the device descriptor.
- * @param speed: Current device speed
- * @param length: Pointer to data length variable
- * @retval Pointer to descriptor buffer
- */
-uint8_t *USBD_Class_DeviceDescriptor(USBD_SpeedTypeDef speed, uint16_t *length)
-{
- UNUSED(speed);
-
- *length = sizeof(USBD_DeviceDesc);
- return (uint8_t *)USBD_DeviceDesc;
-}
-
-/**
- * @brief Returns the LangID string descriptor.
- * @param speed: Current device speed
- * @param length: Pointer to data length variable
- * @retval Pointer to descriptor buffer
- */
-uint8_t *USBD_Class_LangIDStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length)
-{
- UNUSED(speed);
-
- *length = sizeof(USBD_LangIDDesc);
- return (uint8_t *)USBD_LangIDDesc;
-}
-
-/**
- * @brief Returns the product string descriptor.
- * @param speed: Current device speed
- * @param length: Pointer to data length variable
- * @retval Pointer to descriptor buffer
- */
-uint8_t *USBD_Class_ProductStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length)
-{
- if (speed == USBD_SPEED_HIGH)
- {
- USBD_GetString((uint8_t *)USBD_PRODUCT_HS_STRING, USBD_StrDesc, length);
- }
- else
- {
- USBD_GetString((uint8_t *)USBD_PRODUCT_FS_STRING, USBD_StrDesc, length);
- }
- return USBD_StrDesc;
-}
-
-/**
- * @brief Returns the manufacturer string descriptor.
- * @param speed: Current device speed
- * @param length: Pointer to data length variable
- * @retval Pointer to descriptor buffer
- */
-uint8_t *USBD_Class_ManufacturerStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length)
-{
- UNUSED(speed);
-
- USBD_GetString((uint8_t *)USBD_MANUFACTURER_STRING, USBD_StrDesc, length);
- return USBD_StrDesc;
-}
-
-/**
- * @brief Returns the serial number string descriptor.
- * @param speed: Current device speed
- * @param length: Pointer to data length variable
- * @retval Pointer to descriptor buffer
- */
-uint8_t *USBD_Class_SerialStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length)
-{
- UNUSED(speed);
-
- *length = USB_SIZ_STRING_SERIAL;
-
- /* Update the serial number string descriptor with the data from the unique ID*/
- Get_SerialNum();
-
- return (uint8_t *)USBD_StringSerial;
-}
-
-/**
- * @brief Returns the configuration string descriptor.
- * @param speed: Current device speed
- * @param length: Pointer to data length variable
- * @retval Pointer to descriptor buffer
- */
-uint8_t *USBD_Class_ConfigStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length)
-{
- if (speed == USBD_SPEED_HIGH)
- {
- USBD_GetString((uint8_t *)USBD_CONFIGURATION_HS_STRING, USBD_StrDesc, length);
- }
- else
- {
- USBD_GetString((uint8_t *)USBD_CONFIGURATION_FS_STRING, USBD_StrDesc, length);
- }
- return USBD_StrDesc;
-}
-
-/**
- * @brief Returns the interface string descriptor.
- * @param speed: Current device speed
- * @param length: Pointer to data length variable
- * @retval Pointer to descriptor buffer
- */
-uint8_t *USBD_Class_InterfaceStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length)
-{
- if (speed == USBD_SPEED_HIGH)
- {
- USBD_GetString((uint8_t *)USBD_INTERFACE_HS_STRING, USBD_StrDesc, length);
- }
- else
- {
- USBD_GetString((uint8_t *)USBD_INTERFACE_FS_STRING, USBD_StrDesc, length);
- }
- return USBD_StrDesc;
-}
-
-/**
- * @brief Create the serial number string descriptor
- * @param None
- * @retval None
- */
-static void Get_SerialNum(void)
-{
- uint32_t deviceserial0, deviceserial1, deviceserial2;
-
- deviceserial0 = *(uint32_t *)DEVICE_ID1;
- deviceserial1 = *(uint32_t *)DEVICE_ID2;
- deviceserial2 = *(uint32_t *)DEVICE_ID3;
-
- deviceserial0 += deviceserial2;
-
- if (deviceserial0 != 0U)
- {
- IntToUnicode(deviceserial0, &USBD_StringSerial[2], 8U);
- IntToUnicode(deviceserial1, &USBD_StringSerial[18], 4U);
- }
-}
-
-
-#if ((USBD_LPM_ENABLED == 1) || (USBD_CLASS_BOS_ENABLED == 1))
-/**
- * @brief USBD_USR_BOSDescriptor
- * return the BOS descriptor
- * @param speed : current device speed
- * @param length : pointer to data length variable
- * @retval pointer to descriptor buffer
- */
-uint8_t *USBD_USR_BOSDescriptor(USBD_SpeedTypeDef speed , uint16_t *length)
-{
- *length = sizeof(USBD_BOSDesc);
- return (uint8_t*)USBD_BOSDesc;
-}
-#endif
-
-
-#if (USBD_CLASS_USER_STRING_DESC == 1)
-/**
- * @brief Returns the Class User string descriptor.
- * @param speed: Current device speed
- * @param idx: index of string descriptor
- * @param length: Pointer to data length variable
- * @retval Pointer to descriptor buffer
- */
-uint8_t *USBD_Class_UserStrDescriptor(USBD_SpeedTypeDef speed, uint8_t idx, uint16_t *length)
-{
- static uint8_t USBD_StrDesc[255];
-
- return USBD_StrDesc;
-}
-#endif
-
-
-/**
- * @brief Convert Hex 32Bits value into char
- * @param value: value to convert
- * @param pbuf: pointer to the buffer
- * @param len: buffer length
- * @retval None
- */
-static void IntToUnicode(uint32_t value, uint8_t *pbuf, uint8_t len)
-{
- uint8_t idx = 0U;
-
- for (idx = 0U ; idx < len ; idx ++)
- {
- if (((value >> 28)) < 0xAU)
- {
- pbuf[ 2U * idx] = (value >> 28) + '0';
- }
- else
- {
- pbuf[2U * idx] = (value >> 28) + 'A' - 10U;
- }
-
- value = value << 4;
-
- pbuf[2U * idx + 1] = 0U;
- }
-}
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/lib/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c b/lib/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c
deleted file mode 100644
index 8ac5491ff..000000000
--- a/lib/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c
+++ /dev/null
@@ -1,216 +0,0 @@
-/**
- ******************************************************************************
- * @file usbd_ioreq.c
- * @author MCD Application Team
- * @brief This file provides the IO requests APIs for control endpoints.
- ******************************************************************************
- * @attention
- *
- * © Copyright (c) 2015 STMicroelectronics.
- * All rights reserved.
- *
- * This software component is licensed by ST under Ultimate Liberty license
- * SLA0044, the "License"; You may not use this file except in compliance with
- * the License. You may obtain a copy of the License at:
- * www.st.com/SLA0044
- *
- ******************************************************************************
- */
-
-/* Includes ------------------------------------------------------------------*/
-#include "usbd_ioreq.h"
-
-/** @addtogroup STM32_USB_DEVICE_LIBRARY
- * @{
- */
-
-
-/** @defgroup USBD_IOREQ
- * @brief control I/O requests module
- * @{
- */
-
-/** @defgroup USBD_IOREQ_Private_TypesDefinitions
- * @{
- */
-/**
- * @}
- */
-
-
-/** @defgroup USBD_IOREQ_Private_Defines
- * @{
- */
-
-/**
- * @}
- */
-
-
-/** @defgroup USBD_IOREQ_Private_Macros
- * @{
- */
-/**
- * @}
- */
-
-
-/** @defgroup USBD_IOREQ_Private_Variables
- * @{
- */
-
-/**
- * @}
- */
-
-
-/** @defgroup USBD_IOREQ_Private_FunctionPrototypes
- * @{
- */
-/**
- * @}
- */
-
-
-/** @defgroup USBD_IOREQ_Private_Functions
- * @{
- */
-
-/**
-* @brief USBD_CtlSendData
-* send data on the ctl pipe
-* @param pdev: device instance
-* @param buff: pointer to data buffer
-* @param len: length of data to be sent
-* @retval status
-*/
-USBD_StatusTypeDef USBD_CtlSendData(USBD_HandleTypeDef *pdev,
- uint8_t *pbuf, uint32_t len)
-{
- /* Set EP0 State */
- pdev->ep0_state = USBD_EP0_DATA_IN;
- pdev->ep_in[0].total_length = len;
- pdev->ep_in[0].rem_length = len;
-
- /* Start the transfer */
- (void)USBD_LL_Transmit(pdev, 0x00U, pbuf, len);
-
- return USBD_OK;
-}
-
-/**
-* @brief USBD_CtlContinueSendData
-* continue sending data on the ctl pipe
-* @param pdev: device instance
-* @param buff: pointer to data buffer
-* @param len: length of data to be sent
-* @retval status
-*/
-USBD_StatusTypeDef USBD_CtlContinueSendData(USBD_HandleTypeDef *pdev,
- uint8_t *pbuf, uint32_t len)
-{
- /* Start the next transfer */
- (void)USBD_LL_Transmit(pdev, 0x00U, pbuf, len);
-
- return USBD_OK;
-}
-
-/**
-* @brief USBD_CtlPrepareRx
-* receive data on the ctl pipe
-* @param pdev: device instance
-* @param buff: pointer to data buffer
-* @param len: length of data to be received
-* @retval status
-*/
-USBD_StatusTypeDef USBD_CtlPrepareRx(USBD_HandleTypeDef *pdev,
- uint8_t *pbuf, uint32_t len)
-{
- /* Set EP0 State */
- pdev->ep0_state = USBD_EP0_DATA_OUT;
- pdev->ep_out[0].total_length = len;
- pdev->ep_out[0].rem_length = len;
-
- /* Start the transfer */
- (void)USBD_LL_PrepareReceive(pdev, 0U, pbuf, len);
-
- return USBD_OK;
-}
-
-/**
-* @brief USBD_CtlContinueRx
-* continue receive data on the ctl pipe
-* @param pdev: device instance
-* @param buff: pointer to data buffer
-* @param len: length of data to be received
-* @retval status
-*/
-USBD_StatusTypeDef USBD_CtlContinueRx(USBD_HandleTypeDef *pdev,
- uint8_t *pbuf, uint32_t len)
-{
- (void)USBD_LL_PrepareReceive(pdev, 0U, pbuf, len);
-
- return USBD_OK;
-}
-
-/**
-* @brief USBD_CtlSendStatus
-* send zero lzngth packet on the ctl pipe
-* @param pdev: device instance
-* @retval status
-*/
-USBD_StatusTypeDef USBD_CtlSendStatus(USBD_HandleTypeDef *pdev)
-{
- /* Set EP0 State */
- pdev->ep0_state = USBD_EP0_STATUS_IN;
-
- /* Start the transfer */
- (void)USBD_LL_Transmit(pdev, 0x00U, NULL, 0U);
-
- return USBD_OK;
-}
-
-/**
-* @brief USBD_CtlReceiveStatus
-* receive zero lzngth packet on the ctl pipe
-* @param pdev: device instance
-* @retval status
-*/
-USBD_StatusTypeDef USBD_CtlReceiveStatus(USBD_HandleTypeDef *pdev)
-{
- /* Set EP0 State */
- pdev->ep0_state = USBD_EP0_STATUS_OUT;
-
- /* Start the transfer */
- (void)USBD_LL_PrepareReceive(pdev, 0U, NULL, 0U);
-
- return USBD_OK;
-}
-
-/**
-* @brief USBD_GetRxCount
-* returns the received data length
-* @param pdev: device instance
-* @param ep_addr: endpoint address
-* @retval Rx Data blength
-*/
-uint32_t USBD_GetRxCount(USBD_HandleTypeDef *pdev, uint8_t ep_addr)
-{
- return USBD_LL_GetRxDataSize(pdev, ep_addr);
-}
-
-/**
- * @}
- */
-
-
-/**
- * @}
- */
-
-
-/**
- * @}
- */
-
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/lib/STM32_USB_Device_Library/Release_Notes.html b/lib/STM32_USB_Device_Library/Release_Notes.html
deleted file mode 100644
index c1432a6b6..000000000
--- a/lib/STM32_USB_Device_Library/Release_Notes.html
+++ /dev/null
@@ -1,1420 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Release Notes for STM32 USB Device Library
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Back to Release page
-
-
-
-
- Release Notes for STM32 USB Device Library
- Copyright
- 2015 STMicroelectronics
-
-
-
-
-
-
-
-
- Update History
- V2.6.0 / 27-December-2019 Main
-Changes
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Integration of three new USB device Class drivers: USB CDC ECM Class driver USB CDC RNDIS Microsoft Class driver USB Billboard Class driver Fix mondatory misra-c 2012 violations update user core and class template files USB Core: Fix unexpected EP0 stall during enumeration phase Improve APIs error management and prevent accessing NULL pointers USB MSC Class: Fix USBCV specific class tests Fix mutliple error with SCSI commands handling Protect medium access when host ask for medium ejection USB CDC Class: Add new function to inform user that current IN transfer is completed update transmit and receive APIs to transfer up to 64KB USB AUDIO Class: Fix audio sync start buffer size update user callback periodicTC args by adding pointer to user buffer and size USB CustomHID Class: Rework the OUT transfer complete and prevent automaticly re-enabling the OUT EP Add new user API to restart the OUT transfer: USBD_CUSTOM_HID_ReceivePacket() V2.5.3 / 30-April-2019 Main
-Changes
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Fix misra-c 2012 high severity violations Core driver: protect shared macros __ALIGN_BEGIN, __ALIGN_END with C directive #ifndef update Core driver and DFU Class driver to use USBD_SUPPORT_USER_STRING_DESC insead of USBD_SUPPORT_USER_STRING prevent accessing to NULL pointer if the get descriptor functions are not defined Update on USBD_LL_Resume(), restore the device state only if the current state is USBD_STATE_SUSPENDED V2.5.2 / 27-Mars-2019 Main
-Changes
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- DFU Class: fix compilation warning due to unreachable
- instruction code introduced with CMSIS V5.4.0 NVIC_SystemReset() prototype changeV2.5.1 / 03-August-2018
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Main
-Changes
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Update license section by adding path to get copy of ST Ultimate Liberty license Core: Fix unexpected stall during status OUT phase DFU Class: rework hdfu struct to prevent unaligned addresses MSC Class: fix lba address overflow during large file transfers > 4Go Template Class: add missing Switch case Break on USBD_Template_Setup API V2.5.0 / 15-December-2017
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Main
-Changes
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Update license section Update some functions to be MISRAC 2004 compliant Add HS and OtherSpeed configuration descriptor for HID and CustomHID classes Correct error handling in all class setup function Add usbd_desc_template.c/ usbd_desc_template.h templates files Add support of class and vendor request CDC Class: fix zero-length packet issue in bulk IN transfer Fix compilation warning with unused arguments for some functions Improve USB Core enumeration state machine V2.4.2 / 11-December-2015
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Main
-Changes
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-CDC Class usbd_cdc.c: change #include "USBD_CDC.h" by #include "usbd_cdc.h"
-
-
-
- V2.4.1 / 19-June-2015
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Main
-Changes
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- CDC Class
-
- usbd_cdc.c: comments update
-
- MSC Class
-
- usbd_msc_bot.h: update to be C++ compliant
-
- AUDIO Class
-
- usbd_audio.c: fix issue when Host sends GetInterface command it gets a wrong value
-
-
- usbd_audio.c: remove useless management of DMA half transfer
-
-
-
-
-
-
- V2.4.0 / 28-February-2015
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Main
-Changes
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Core Driver
-
- Add support of Link Power Management (LPM) : add new API GetBOSDescriptor() , that is used only if USBD_LPM_ENABLED switch is enabled in usbd_conf.h file usbd_core.c:
-Fix bug of unsupported premature Host Out stage during data In stage
-(ie. when endpoint 0 maximum data size is 8 and Host requests
-GetDeviceDescriptor for the first time) usbd_ctlreq.c: Fix bug of unsupported Endpoint Class requests (ie. Audio SetCurrent request for endpoint sampling rate setting)
-
- HID Class
-
- Updating Polling time API USBD_HID_GetPollingInterval() to query this period for HS and FS usbd_hid.c: Fix USBD_LL_CloseEP() function call in USBD_HID_DeInit() replacing endpoint size by endpoint address.
- CDC Class usbd_cdc.c: Add missing GetInterface request management in USBD_CDC_Setup() function Update
-USBD_CDC_Setup() function to allow correct user implementation of
-CDC_SET_CONTROL_LINE_STATE and similar no-data setup requests.
-
-
- V2.3.0 / 04-November-2014
-
-
-
-
-
-
-
-
-
-
-
-
- Main
-Changes
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Update all drivers to be C++ compliant
-
- CDC Class
-
- usbd_cdc.c: fix clear flag issue in USBD_CDC_TransmitPacket() function
-
-
- usbd_cdc_if_template.c: update TEMPLATE_Receive() function header comment
-
-
-Miscellaneous source code comments update
-
-V2.2.0 / 13-June-2014
-
-
-
-
-
-
-
-
-
- Main
-Changes
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Source code comments review and update
- HID class
-
- Remove unused API USBD_HID_DeviceQualifierDescriptor()
- Add a new API in the HID class to query the poll time USBD_HID_GetPollingInterval()
-
-
-
- CDC class
-
-Bug fix: missing handling ZeroLength Setup request
-
- All classes
-
-
-
- Add alias for the class definition, it's defined as macro with capital letter
-
-
- ex. for the HID, the USBD_HID_CLASS macro is defined this way #define USBD_HID_CLASS &USBD_HID and the application code can use the previous definition: &USBD_HID ex. USBD_RegisterClass(&USBD_Device, &USBD_HID) or the new USBD_HID_CLASS ex. USBD_RegisterClass(&USBD_Device, USBD_HID_CLASS)
- V2.1.0 / 22-April-2014
-
-
-
-
-
-
-
-
- Main
-Changes
-
-
-
-
-
-
-
-
-
-
-
-
-usbd_conf_template.c: update file with the right content (it was using MSC memory management layer)
-
- usbd_conf_template.h: change include of stm32f4xx.h by stm32xxx.h and add comment to inform user to adapt it to the device used
- Several enhancements in CustomHID class
-
- Update the Custom HID class driver to simplify the link with user processes
- Optimize the Custom HID class driver and reduce footprint
- Add USBD_CUSTOM_HID_RegisterInterface() API to link user process to custom HID class
- Add Custom HID interface template file usbd_customhid_if_template.c/h
-
- Miscellaneous comments update
-
-
-
-
- V2.0.0 / 18-February-2014
-
-
-
-
-
- Main
-Changes
-
-
-
-
-
-
-
-
-
-
-Major update
-based on STM32Cube specification: Library Core, Classes architecture and APIs
-modified vs. V1.1.0, and thus the 2 versions are not compatible.
- This version has to be used only with STM32Cube based development
-
-
-
-V1.1.0 / 19-March-2012
- Main
-Changes
-
- Official support of STM32F4xx devicesAll source files: license disclaimer text update and add link to the License file on ST Internet. Handle test mode in the set feature request Handle dynamically the USB SELF POWERED feature Handle correctly the USBD_CtlError process to take into account error during Control OUT stage Miscellaneous bug fix V1.0.0 / 22-July-2011 Main
-Changes
-First official version for STM32F105/7xx and STM32F2xx devices
- License This
-software component is licensed by ST under Ultimate Liberty license
-SLA0044, the "License"; You may not use this component except in
-compliance with the License. You may obtain a copy of the License at:
http://www.st.com/SLA0044
-
-
-
-
- For
- complete documentation on STM32
- Microcontrollers visit www.st.com/STM32
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/lib/lego/lego_usb.h b/lib/lego/lego_usb.h
new file mode 100644
index 000000000..91474363c
--- /dev/null
+++ b/lib/lego/lego_usb.h
@@ -0,0 +1,23 @@
+// SPDX-License-Identifier: MIT
+// Copyright (c) 2023 The Pybricks Authors
+
+// LEGO USB stuff
+// https://github.com/pybricks/technical-info/blob/master/assigned-numbers.md#usb
+
+
+#ifndef _LEGO_USB_H_
+#define _LEGO_USB_H_
+
+#define LEGO_USB_VID 0x0694
+#define LEGO_USB_PID_SPIKE_PRIME_DFU 0x0008
+#define LEGO_USB_PID_SPIKE_PRIME 0x0009
+#define LEGO_USB_PID_SPIKE_ESSENTIAL_DFU 0x000C
+#define LEGO_USB_PID_SPIKE_ESSENTIAL 0x000D
+#define LEGO_USB_PID_ROBOT_INVENTOR_DFU 0x0010
+#define LEGO_USB_PID_ROBOT_INVENTOR 0x0011
+
+#define LEGO_USB_MFG_STR "LEGO System A/S"
+#define LEGO_USB_PROD_STR_TECHNIC_LARGE_HUB "LEGO Technic Large Hub"
+#define LEGO_USB_PROD_STR_TECHNIC_SMALL_HUB "LEGO Technic Small Hub"
+
+#endif // _LEGO_USB_H_
diff --git a/lib/pbio/drv/usb/stm32_usbd/usbd_conf.h b/lib/pbio/drv/usb/stm32_usbd/usbd_conf.h
index d74e585bd..bae1dd807 100644
--- a/lib/pbio/drv/usb/stm32_usbd/usbd_conf.h
+++ b/lib/pbio/drv/usb/stm32_usbd/usbd_conf.h
@@ -10,5 +10,6 @@
#define USBD_MAX_NUM_CONFIGURATION 1
#define USBD_MAX_STR_DESC_SIZ 0x100
#define USBD_SELF_POWERED 1
+#define USBD_CLASS_BOS_ENABLED 1
#endif /* _USBD_CONF_H_ */
diff --git a/lib/pbio/drv/usb/stm32_usbd/usbd_desc.c b/lib/pbio/drv/usb/stm32_usbd/usbd_desc.c
index a92c8ae94..8f1ed0e90 100644
--- a/lib/pbio/drv/usb/stm32_usbd/usbd_desc.c
+++ b/lib/pbio/drv/usb/stm32_usbd/usbd_desc.c
@@ -43,39 +43,61 @@
******************************************************************************
*/
/* Includes ------------------------------------------------------------------*/
+#include
+
#include "usbd_core.h"
#include "usbd_conf.h"
+#include "usbd_pybricks.h"
+
+#include "pbdrv/config.h"
+#include "pbio/protocol.h"
+#include "pbio/version.h"
+#include "pbsys/app.h"
+#include "pbsys/program_load.h"
+
+#include "lego_usb.h"
/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
-#define USBD_VID 0x0483
-#define USBD_PID 0x5740
#define USBD_LANGID_STRING 0x409
-#define USBD_MANUFACTURER_STRING "STMicroelectronics"
-#define USBD_PRODUCT_FS_STRING "Pybricks Hub"
-#define USBD_CONFIGURATION_FS_STRING "VCP Config"
-#define USBD_INTERFACE_FS_STRING "VCP Interface"
+#define USBD_CONFIGURATION_FS_STRING "Pybricks Config"
+#define USBD_INTERFACE_FS_STRING "Pybricks Interface"
+
+static const char firmware_version[] = PBIO_VERSION_STR;
+static const char software_version[] = PBIO_PROTOCOL_VERSION_STR;
#define DEVICE_ID1 (0x1FFF7A10)
#define DEVICE_ID2 (0x1FFF7A14)
#define DEVICE_ID3 (0x1FFF7A18)
#define USB_SIZ_STRING_SERIAL 0x1A
+#define USB_SIZ_BOS_DESC_CONST (5 + 28)
+#define USB_SIZ_UUID (128 / 8)
+#define USB_SIZ_PLATFORM_HDR (4 + USB_SIZ_UUID)
+#define USB_SIZ_BOS_DESC (USB_SIZ_BOS_DESC_CONST + \
+ USB_SIZ_PLATFORM_HDR + sizeof(firmware_version) + \
+ USB_SIZ_PLATFORM_HDR + sizeof(software_version) + \
+ USB_SIZ_PLATFORM_HDR + PBIO_PYBRICKS_HUB_CAPABILITIES_VALUE_SIZE)
/* USB Standard Device Descriptor */
__ALIGN_BEGIN uint8_t USBD_DeviceDesc[USB_LEN_DEV_DESC] __ALIGN_END = {
0x12, /* bLength */
USB_DESC_TYPE_DEVICE, /* bDescriptorType */
+ #if ((USBD_LPM_ENABLED == 1) || (USBD_CLASS_BOS_ENABLED == 1))
+ 0x01, /* bcdUSB */ /* changed to USB version 2.01
+ in order to support BOS Desc */
+ #else
0x00, /* bcdUSB */
+ #endif /* (USBD_LPM_ENABLED == 1) || (USBD_CLASS_BOS_ENABLED == 1) */
0x02,
- 0x02, /* bDeviceClass */
- 0x02, /* bDeviceSubClass */
- 0x00, /* bDeviceProtocol */
+ PBIO_PYBRICKS_USB_DEVICE_CLASS, /* bDeviceClass */
+ PBIO_PYBRICKS_USB_DEVICE_SUBCLASS, /* bDeviceSubClass */
+ PBIO_PYBRICKS_USB_DEVICE_PROTOCOL, /* bDeviceProtocol */
USB_MAX_EP0_SIZE, /* bMaxPacketSize */
- LOBYTE(USBD_VID), /* idVendor */
- HIBYTE(USBD_VID), /* idVendor */
- LOBYTE(USBD_PID), /* idVendor */
- HIBYTE(USBD_PID), /* idVendor */
+ LOBYTE(PBDRV_CONFIG_USB_VID), /* idVendor */
+ HIBYTE(PBDRV_CONFIG_USB_VID), /* idVendor */
+ LOBYTE(PBDRV_CONFIG_USB_PID), /* idProduct */
+ HIBYTE(PBDRV_CONFIG_USB_PID), /* idProduct */
0x00, /* bcdDevice rel. 2.00 */
0x02,
USBD_IDX_MFC_STR, /* Index of manufacturer string */
@@ -84,6 +106,136 @@ __ALIGN_BEGIN uint8_t USBD_DeviceDesc[USB_LEN_DEV_DESC] __ALIGN_END = {
USBD_MAX_NUM_CONFIGURATION /* bNumConfigurations */
}; /* USB_DeviceDescriptor */
+/** BOS descriptor. */
+#if ((USBD_LPM_ENABLED == 1) || (USBD_CLASS_BOS_ENABLED == 1))
+#if defined(__ICCARM__) /* IAR Compiler */
+ #pragma data_alignment=4
+#endif /* defined ( __ICCARM__ ) */
+__ALIGN_BEGIN uint8_t USBD_BOSDesc[USB_SIZ_BOS_DESC] __ALIGN_END =
+{
+ 5, /* bLength */
+ USB_DESC_TYPE_BOS, /* bDescriptorType = BOS */
+ LOBYTE(USB_SIZ_BOS_DESC), /* wTotalLength */
+ HIBYTE(USB_SIZ_BOS_DESC), /* wTotalLength */
+ 0x01, /* bNumDeviceCaps = 1 */
+
+ 28, /* bLength */
+ USB_DEVICE_CAPABITY_TYPE, /* bDescriptorType = Device Capability */
+ 0x05, /* bDevCapabilityType = Platform */
+ 0x00, /* bReserved */
+
+ /*
+ * PlatformCapabilityUUID
+ * Microsoft OS 2.0 descriptor platform capability ID
+ * D8DD60DF-4589-4CC7-9CD2-659D9E648A9F
+ * RFC 4122 explains the correct byte ordering
+ */
+ 0xDF, 0x60, 0xDD, 0xD8, /* 32-bit value */
+ 0x89, 0x45, /* 16-bit value */
+ 0xC7, 0x4C, /* 16-bit value */
+ 0x9C, 0xD2,
+ 0x65, 0x9D, 0x9E, 0x64, 0x8A, 0x9F,
+
+ 0x00, 0x00, 0x03, 0x06, /* dwWindowsVersion = 0x06030000 for Windows 8.1 Build */
+ LOBYTE(USBD_SIZ_MS_OS_DSCRPTR_SET), /* wMSOSDescriptorSetTotalLength */
+ HIBYTE(USBD_SIZ_MS_OS_DSCRPTR_SET), /* wMSOSDescriptorSetTotalLength */
+ USBD_MS_VENDOR_CODE, /* bMS_VendorCode */
+ 0x00 /* bAltEnumCode = Does not support alternate enumeration */
+};
+#endif /* (USBD_LPM_ENABLED == 1) || (USBD_CLASS_BOS_ENABLED == 1) */
+
+#if ((USBD_LPM_ENABLED == 1) || (USBD_CLASS_BOS_ENABLED == 1))
+#if defined(__ICCARM__) /* IAR Compiler */
+ #pragma data_alignment=4
+#endif /* defined ( __ICCARM__ ) */
+__ALIGN_BEGIN uint8_t USBD_OSDescSet[USBD_SIZ_MS_OS_DSCRPTR_SET] __ALIGN_END =
+{
+ 0x0A, 0x00, /* wLength = 10 */
+ 0x00, 0x00, /* wDescriptorType = MS_OS_20_SET_HEADER_DESCRIPTOR */
+ 0x00, 0x00, 0x03, 0x06, /* dwWindowsVersion = 0x06030000 for Windows 8.1 Build */
+ LOBYTE(USBD_SIZ_MS_OS_DSCRPTR_SET), /* wTotalLength */
+ HIBYTE(USBD_SIZ_MS_OS_DSCRPTR_SET), /* wTotalLength (cont.) */
+
+ 0x14, 0x00, /* wLength = 20 */
+ 0x03, 0x00, /* wDescriptorType = MS_OS_20_FEATURE_COMPATBLE_ID */
+ 'W', 'I', 'N', 'U', 'S', 'B', /* CompatibleID */
+ 0x00, 0x00, /* CompatibleID (cont.) */
+ 0x00, 0x00, 0x00, 0x00, /* SubCompatibleID */
+ 0x00, 0x00, 0x00, 0x00, /* SubCompatibleID (cont.) */
+
+ 0x82, 0x00, /* wLength = 130 */
+ 0x04, 0x00, /* wDescriptorType = MS_OS_20_FEATURE_REG_PROPERTY */
+ 0x07, 0x00, /* wStringType = REG_MULTI_SZ */
+ /* wPropertyNameLength = 42 */
+ 0x2A, 0x00,
+ /* PropertyName = DeviceInterfaceGUIDs */
+ 'D', '\0',
+ 'e', '\0',
+ 'v', '\0',
+ 'i', '\0',
+ 'c', '\0',
+ 'e', '\0',
+ 'I', '\0',
+ 'n', '\0',
+ 't', '\0',
+ 'e', '\0',
+ 'r', '\0',
+ 'f', '\0',
+ 'a', '\0',
+ 'c', '\0',
+ 'e', '\0',
+ 'G', '\0',
+ 'U', '\0',
+ 'I', '\0',
+ 'D', '\0',
+ 's', '\0',
+ '\0', '\0',
+
+ /* wPropertyDataLength = 78 */
+ 0x4E, 0x00,
+ /* PropertyData = {A5C44A4C-53D4-4389-9821-AE95051908A1} */
+ '{', '\0',
+ 'A', '\0',
+ '5', '\0',
+ 'C', '\0',
+ '4', '\0',
+ '4', '\0',
+ 'A', '\0',
+ '4', '\0',
+ 'C', '\0',
+ '-', '\0',
+ '5', '\0',
+ '3', '\0',
+ 'D', '\0',
+ '4', '\0',
+ '-', '\0',
+ '4', '\0',
+ '3', '\0',
+ '8', '\0',
+ '9', '\0',
+ '-', '\0',
+ '9', '\0',
+ '8', '\0',
+ '2', '\0',
+ '1', '\0',
+ '-', '\0',
+ 'A', '\0',
+ 'E', '\0',
+ '9', '\0',
+ '5', '\0',
+ '0', '\0',
+ '5', '\0',
+ '1', '\0',
+ '9', '\0',
+ '0', '\0',
+ '8', '\0',
+ 'A', '\0',
+ '1', '\0',
+ '}', '\0',
+ '\0', '\0'
+};
+#endif /* (USBD_LPM_ENABLED == 1) || (USBD_CLASS_BOS_ENABLED == 1) */
+
/* USB Standard Device Descriptor */
__ALIGN_BEGIN uint8_t USBD_LangIDDesc[USB_LEN_LANGID_STR_DESC] __ALIGN_END = {
USB_LEN_LANGID_STR_DESC,
@@ -149,10 +301,23 @@ static void Get_SerialNum(void) {
* @param length: Pointer to data length variable
* @retval Pointer to descriptor buffer
*/
-uint8_t *USBD_VCP_DeviceDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) {
+static uint8_t *USBD_Pybricks_DeviceDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) {
/* Prevent unused argument(s) compilation warning */
UNUSED(speed);
+ // the same firmware runs on both SPIKE Prime and Robot Inventor so we need
+ // to dynamically set the PID based on the variant
+ #ifdef PBDRV_CONFIG_USB_STM32F4_HUB_VARIANT_ADDR
+ #define VARIANT (*(uint32_t *)PBDRV_CONFIG_USB_STM32F4_HUB_VARIANT_ADDR)
+ if (VARIANT == 0) {
+ USBD_DeviceDesc[10] = LOBYTE(PBDRV_CONFIG_USB_PID_0);
+ USBD_DeviceDesc[11] = HIBYTE(PBDRV_CONFIG_USB_PID_0);
+ } else if (VARIANT == 1) {
+ USBD_DeviceDesc[10] = LOBYTE(PBDRV_CONFIG_USB_PID_1);
+ USBD_DeviceDesc[11] = HIBYTE(PBDRV_CONFIG_USB_PID_1);
+ }
+ #endif
+
*length = sizeof(USBD_DeviceDesc);
return (uint8_t *)USBD_DeviceDesc;
}
@@ -163,7 +328,7 @@ uint8_t *USBD_VCP_DeviceDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) {
* @param length: Pointer to data length variable
* @retval Pointer to descriptor buffer
*/
-uint8_t *USBD_VCP_LangIDStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) {
+static uint8_t *USBD_Pybricks_LangIDStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) {
/* Prevent unused argument(s) compilation warning */
UNUSED(speed);
@@ -177,8 +342,8 @@ uint8_t *USBD_VCP_LangIDStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length)
* @param length: Pointer to data length variable
* @retval Pointer to descriptor buffer
*/
-uint8_t *USBD_VCP_ProductStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) {
- USBD_GetString((uint8_t *)USBD_PRODUCT_FS_STRING, USBD_StrDesc, length);
+static uint8_t *USBD_Pybricks_ProductStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) {
+ USBD_GetString((uint8_t *)PBDRV_CONFIG_USB_PROD_STR, USBD_StrDesc, length);
return USBD_StrDesc;
}
@@ -188,11 +353,11 @@ uint8_t *USBD_VCP_ProductStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length
* @param length: Pointer to data length variable
* @retval Pointer to descriptor buffer
*/
-uint8_t *USBD_VCP_ManufacturerStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) {
+static uint8_t *USBD_Pybricks_ManufacturerStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) {
/* Prevent unused argument(s) compilation warning */
UNUSED(speed);
- USBD_GetString((uint8_t *)USBD_MANUFACTURER_STRING, USBD_StrDesc, length);
+ USBD_GetString((uint8_t *)PBDRV_CONFIG_USB_MFG_STR, USBD_StrDesc, length);
return USBD_StrDesc;
}
@@ -202,7 +367,7 @@ uint8_t *USBD_VCP_ManufacturerStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *l
* @param length: Pointer to data length variable
* @retval Pointer to descriptor buffer
*/
-uint8_t *USBD_VCP_SerialStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) {
+static uint8_t *USBD_Pybricks_SerialStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) {
/* Prevent unused argument(s) compilation warning */
UNUSED(speed);
@@ -220,7 +385,7 @@ uint8_t *USBD_VCP_SerialStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length)
* @param length: Pointer to data length variable
* @retval Pointer to descriptor buffer
*/
-uint8_t *USBD_VCP_ConfigStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) {
+static uint8_t *USBD_Pybricks_ConfigStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) {
USBD_GetString((uint8_t *)USBD_CONFIGURATION_FS_STRING, USBD_StrDesc, length);
return USBD_StrDesc;
}
@@ -231,17 +396,81 @@ uint8_t *USBD_VCP_ConfigStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length)
* @param length: Pointer to data length variable
* @retval Pointer to descriptor buffer
*/
-uint8_t *USBD_VCP_InterfaceStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) {
+static uint8_t *USBD_Pybricks_InterfaceStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) {
USBD_GetString((uint8_t *)USBD_INTERFACE_FS_STRING, USBD_StrDesc, length);
return USBD_StrDesc;
}
-USBD_DescriptorsTypeDef VCP_Desc = {
- USBD_VCP_DeviceDescriptor,
- USBD_VCP_LangIDStrDescriptor,
- USBD_VCP_ManufacturerStrDescriptor,
- USBD_VCP_ProductStrDescriptor,
- USBD_VCP_SerialStrDescriptor,
- USBD_VCP_ConfigStrDescriptor,
- USBD_VCP_InterfaceStrDescriptor,
+#if ((USBD_LPM_ENABLED == 1) || (USBD_CLASS_BOS_ENABLED == 1))
+static uint8_t *USBD_Pybricks_BOSDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) {
+ /* Prevent unused argument(s) compilation warning */
+ UNUSED(speed);
+
+ static uint8_t created = 0;
+ uint8_t *ptr;
+
+ /* Generate BOS Descriptor on first attempt */
+ if (!created) {
+ created = 1;
+ ptr = &USBD_BOSDesc[USB_SIZ_BOS_DESC_CONST];
+
+ /* Add firmware version */
+ *ptr++ = USB_SIZ_PLATFORM_HDR + sizeof(firmware_version);
+ *ptr++ = USB_DEVICE_CAPABITY_TYPE;
+ *ptr++ = 0x05;
+ *ptr++ = 0x00;
+
+ pbio_uuid128_le_copy(ptr, pbio_gatt_firmware_version_char_uuid_128);
+ ptr += USB_SIZ_UUID;
+
+ memcpy(ptr, firmware_version, sizeof(firmware_version));
+ ptr += sizeof(firmware_version);
+
+ /* Add software (protocol) version */
+ *ptr++ = USB_SIZ_PLATFORM_HDR + sizeof(software_version);
+ *ptr++ = USB_DEVICE_CAPABITY_TYPE;
+ *ptr++ = 0x05;
+ *ptr++ = 0x00;
+
+ pbio_uuid128_le_copy(ptr, pbio_gatt_software_version_char_uuid_128);
+ ptr += USB_SIZ_UUID;
+
+ memcpy(ptr, software_version, sizeof(software_version));
+ ptr += sizeof(software_version);
+
+ /* Add hub capabilities */
+ *ptr++ = USB_SIZ_PLATFORM_HDR + PBIO_PYBRICKS_HUB_CAPABILITIES_VALUE_SIZE;
+ *ptr++ = USB_DEVICE_CAPABITY_TYPE;
+ *ptr++ = 0x05;
+ *ptr++ = 0x00;
+
+ pbio_uuid128_le_copy(ptr, pbio_pybricks_hub_capabilities_char_uuid);
+ ptr += USB_SIZ_UUID;
+
+ pbio_pybricks_hub_capabilities(ptr,
+ USBD_PYBRICKS_MAX_PACKET_SIZE - USB_SIZ_UUID,
+ PBSYS_APP_HUB_FEATURE_FLAGS,
+ PBSYS_PROGRAM_LOAD_MAX_PROGRAM_SIZE);
+ ptr += PBIO_PYBRICKS_HUB_CAPABILITIES_VALUE_SIZE;
+
+ /* Update bNumDeviceCaps field in BOS Descriptor */
+ USBD_BOSDesc[4] += 3;
+ }
+
+ *length = sizeof(USBD_BOSDesc);
+ return (uint8_t *)USBD_BOSDesc;
+}
+#endif /* (USBD_LPM_ENABLED == 1) || (USBD_CLASS_BOS_ENABLED == 1) */
+
+USBD_DescriptorsTypeDef Pybricks_Desc = {
+ .GetDeviceDescriptor = USBD_Pybricks_DeviceDescriptor,
+ .GetLangIDStrDescriptor = USBD_Pybricks_LangIDStrDescriptor,
+ .GetManufacturerStrDescriptor = USBD_Pybricks_ManufacturerStrDescriptor,
+ .GetProductStrDescriptor = USBD_Pybricks_ProductStrDescriptor,
+ .GetSerialStrDescriptor = USBD_Pybricks_SerialStrDescriptor,
+ .GetConfigurationStrDescriptor = USBD_Pybricks_ConfigStrDescriptor,
+ .GetInterfaceStrDescriptor = USBD_Pybricks_InterfaceStrDescriptor,
+ #if ((USBD_LPM_ENABLED == 1) || (USBD_CLASS_BOS_ENABLED == 1))
+ .GetBOSDescriptor = USBD_Pybricks_BOSDescriptor,
+ #endif
};
diff --git a/lib/pbio/drv/usb/stm32_usbd/usbd_pybricks.c b/lib/pbio/drv/usb/stm32_usbd/usbd_pybricks.c
new file mode 100644
index 000000000..62169dca2
--- /dev/null
+++ b/lib/pbio/drv/usb/stm32_usbd/usbd_pybricks.c
@@ -0,0 +1,512 @@
+/**
+ ******************************************************************************
+ * @file usbd_pybricks.c
+ * @author MCD Application Team
+ * @brief This file provides the HID 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
+ *
+ * ===================================================================
+ * Pybricks 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
+ *
+ ******************************************************************************
+ */
+
+/* Includes ------------------------------------------------------------------*/
+#include "usbd_ctlreq.h"
+#include "usbd_pybricks.h"
+
+
+/** @addtogroup STM32_USB_DEVICE_LIBRARY
+ * @{
+ */
+
+
+/** @defgroup USBD_Pybricks
+ * @brief usbd core module
+ * @{
+ */
+
+/** @defgroup USBD_Pybricks_Private_TypesDefinitions
+ * @{
+ */
+/**
+ * @}
+ */
+
+
+/** @defgroup USBD_Pybricks_Private_Defines
+ * @{
+ */
+
+/**
+ * @}
+ */
+
+
+/** @defgroup USBD_Pybricks_Private_Macros
+ * @{
+ */
+
+/**
+ * @}
+ */
+
+
+/** @defgroup USBD_Pybricks_Private_FunctionPrototypes
+ * @{
+ */
+
+static uint8_t USBD_Pybricks_Init(USBD_HandleTypeDef *pdev, uint8_t cfgidx);
+static uint8_t USBD_Pybricks_DeInit(USBD_HandleTypeDef *pdev, uint8_t cfgidx);
+static uint8_t USBD_Pybricks_Setup(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
+static uint8_t USBD_Pybricks_DataIn(USBD_HandleTypeDef *pdev, uint8_t epnum);
+static uint8_t USBD_Pybricks_DataOut(USBD_HandleTypeDef *pdev, uint8_t epnum);
+static uint8_t USBD_Pybricks_EP0_RxReady(USBD_HandleTypeDef *pdev);
+static uint8_t *USBD_Pybricks_GetCfgDesc(uint16_t *length);
+
+/**
+ * @}
+ */
+
+/** @defgroup USBD_Pybricks_Private_Variables
+ * @{
+ */
+
+USBD_ClassTypeDef USBD_Pybricks_ClassDriver =
+{
+ .Init = USBD_Pybricks_Init,
+ .DeInit = USBD_Pybricks_DeInit,
+ .Setup = USBD_Pybricks_Setup,
+ .EP0_RxReady = USBD_Pybricks_EP0_RxReady,
+ .DataIn = USBD_Pybricks_DataIn,
+ .DataOut = USBD_Pybricks_DataOut,
+ .GetFSConfigDescriptor = USBD_Pybricks_GetCfgDesc,
+};
+
+#if defined(__ICCARM__) /*!< IAR Compiler */
+#pragma data_alignment=4
+#endif /* __ICCARM__ */
+/* USB Pybricks device Configuration Descriptor */
+__ALIGN_BEGIN static uint8_t USBD_Pybricks_CfgDesc[USBD_PYBRICKS_CONFIG_DESC_SIZ] __ALIGN_END =
+{
+ /* Configuration Descriptor */
+ 0x09, /* bLength: Configuration Descriptor size */
+ USB_DESC_TYPE_CONFIGURATION, /* bDescriptorType: Configuration */
+ LOBYTE(USBD_PYBRICKS_CONFIG_DESC_SIZ), /* wTotalLength:no of returned bytes */
+ HIBYTE(USBD_PYBRICKS_CONFIG_DESC_SIZ),
+ 0x01, /* bNumInterfaces: 1 interface */
+ 0x01, /* bConfigurationValue: Configuration value */
+ 0x00, /* iConfiguration: Index of string descriptor describing the configuration */
+ 0xC0, /* bmAttributes: self powered */
+ 0x32, /* MaxPower 0 mA */
+
+ /*---------------------------------------------------------------------------*/
+
+ /* Data class interface descriptor */
+ 0x09, /* bLength: Endpoint Descriptor size */
+ USB_DESC_TYPE_INTERFACE, /* bDescriptorType: */
+ 0x00, /* bInterfaceNumber: Number of Interface */
+ 0x00, /* bAlternateSetting: Alternate setting */
+ 0x02, /* bNumEndpoints: Two endpoints used */
+ 0xFF, /* bInterfaceClass: vendor */
+ 0x00, /* bInterfaceSubClass: */
+ 0x00, /* bInterfaceProtocol: */
+ 0x00, /* iInterface: */
+
+ /* Endpoint OUT Descriptor */
+ 0x07, /* bLength: Endpoint Descriptor size */
+ USB_DESC_TYPE_ENDPOINT, /* bDescriptorType: Endpoint */
+ USBD_PYBRICKS_OUT_EP, /* bEndpointAddress */
+ 0x02, /* bmAttributes: Bulk */
+ LOBYTE(USBD_PYBRICKS_MAX_PACKET_SIZE), /* wMaxPacketSize: */
+ HIBYTE(USBD_PYBRICKS_MAX_PACKET_SIZE),
+ 0x00, /* bInterval: ignore for Bulk transfer */
+
+ /* Endpoint IN Descriptor */
+ 0x07, /* bLength: Endpoint Descriptor size */
+ USB_DESC_TYPE_ENDPOINT, /* bDescriptorType: Endpoint */
+ USBD_PYBRICKS_IN_EP, /* bEndpointAddress */
+ 0x02, /* bmAttributes: Bulk */
+ LOBYTE(USBD_PYBRICKS_MAX_PACKET_SIZE), /* wMaxPacketSize: */
+ HIBYTE(USBD_PYBRICKS_MAX_PACKET_SIZE),
+ 0x00 /* bInterval */
+};
+
+/**
+ * @}
+ */
+
+/** @defgroup USBD_Pybricks_Private_Functions
+ * @{
+ */
+
+/**
+ * @brief USBD_Pybricks_Init
+ * Initialize the Pybricks interface
+ * @param pdev: device instance
+ * @param cfgidx: Configuration index
+ * @retval status
+ */
+static uint8_t USBD_Pybricks_Init(USBD_HandleTypeDef *pdev, uint8_t cfgidx) {
+ UNUSED(cfgidx);
+ static USBD_Pybricks_HandleTypeDef hPybricks;
+
+ pdev->pClassData = &hPybricks;
+
+ (void)USBD_LL_OpenEP(pdev, USBD_PYBRICKS_IN_EP, USBD_EP_TYPE_INTR, USBD_PYBRICKS_MAX_PACKET_SIZE);
+ pdev->ep_in[USBD_PYBRICKS_IN_EP & 0xFU].is_used = 1U;
+
+ (void)USBD_LL_OpenEP(pdev, USBD_PYBRICKS_OUT_EP, USBD_EP_TYPE_INTR, USBD_PYBRICKS_MAX_PACKET_SIZE);
+ pdev->ep_out[USBD_PYBRICKS_OUT_EP & 0xFU].is_used = 1U;
+
+ /* Init physical Interface components */
+ ((USBD_Pybricks_ItfTypeDef *)pdev->pUserData[pdev->classId])->Init();
+
+ /* Init Xfer states */
+ hPybricks.TxState = 0U;
+ hPybricks.RxState = 0U;
+
+ (void)USBD_LL_PrepareReceive(pdev, USBD_PYBRICKS_OUT_EP, hPybricks.RxBuffer, USBD_PYBRICKS_MAX_PACKET_SIZE);
+
+ return (uint8_t)USBD_OK;
+}
+
+/**
+ * @brief USBD_Pybricks_DeInit
+ * DeInitialize the Pybricks layer
+ * @param pdev: device instance
+ * @param cfgidx: Configuration index
+ * @retval status
+ */
+static uint8_t USBD_Pybricks_DeInit(USBD_HandleTypeDef *pdev, uint8_t cfgidx) {
+ UNUSED(cfgidx);
+ uint8_t ret = 0U;
+
+ /* Close EP IN */
+ (void)USBD_LL_CloseEP(pdev, USBD_PYBRICKS_IN_EP);
+ pdev->ep_in[USBD_PYBRICKS_IN_EP & 0xFU].is_used = 0U;
+
+ /* Close EP OUT */
+ (void)USBD_LL_CloseEP(pdev, USBD_PYBRICKS_OUT_EP);
+ pdev->ep_out[USBD_PYBRICKS_OUT_EP & 0xFU].is_used = 0U;
+
+ /* DeInit physical Interface components */
+ if (pdev->pClassData != NULL) {
+ ((USBD_Pybricks_ItfTypeDef *)pdev->pUserData[pdev->classId])->DeInit();
+ pdev->pClassData = NULL;
+ }
+
+ return ret;
+}
+
+/**
+ * @brief USBD_Pybricks_Setup
+ * Handle the Pybricks specific requests
+ * @param pdev: instance
+ * @param req: usb requests
+ * @retval status
+ */
+static uint8_t USBD_Pybricks_Setup(USBD_HandleTypeDef *pdev,
+ USBD_SetupReqTypedef *req) {
+ USBD_Pybricks_HandleTypeDef *hPybricks = (USBD_Pybricks_HandleTypeDef *)pdev->pClassData;
+ uint8_t ifalt = 0U;
+ uint16_t status_info = 0U;
+ USBD_StatusTypeDef ret = USBD_OK;
+
+ switch (req->bmRequest & USB_REQ_TYPE_MASK)
+ {
+ case USB_REQ_TYPE_CLASS:
+ if (req->wLength != 0U) {
+ if ((req->bmRequest & 0x80U) != 0U) {
+ (void)USBD_CtlSendData(pdev, (uint8_t *)hPybricks->data, req->wLength);
+ } else {
+ hPybricks->CmdOpCode = req->bRequest;
+ hPybricks->CmdLength = (uint8_t)req->wLength;
+
+ (void)USBD_CtlPrepareRx(pdev, (uint8_t *)hPybricks->data, req->wLength);
+ }
+ }
+ break;
+
+ case USB_REQ_TYPE_VENDOR:
+ switch (req->bRequest)
+ {
+ case USBD_MS_VENDOR_CODE:
+ (void)USBD_CtlSendData(pdev,
+ (uint8_t *)USBD_OSDescSet,
+ MIN(sizeof(USBD_OSDescSet), req->wLength));
+ 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_INTERFACE:
+ if (pdev->dev_state == USBD_STATE_CONFIGURED) {
+ (void)USBD_CtlSendData(pdev, &ifalt, 1U);
+ } else {
+ USBD_CtlError(pdev, req);
+ ret = USBD_FAIL;
+ }
+ break;
+
+ case USB_REQ_SET_INTERFACE:
+ if (pdev->dev_state != USBD_STATE_CONFIGURED) {
+ 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;
+}
+
+/**
+ * @brief USBD_Pybricks_GetCfgDesc
+ * return configuration descriptor
+ * @param length : pointer data length
+ * @retval pointer to descriptor buffer
+ */
+static uint8_t *USBD_Pybricks_GetCfgDesc(uint16_t *length) {
+ *length = (uint16_t)sizeof(USBD_Pybricks_CfgDesc);
+ return USBD_Pybricks_CfgDesc;
+}
+
+/**
+ * @brief USBD_Pybricks_DataIn
+ * Data sent on non-control IN endpoint
+ * @param pdev: device instance
+ * @param epnum: endpoint number
+ * @retval status
+ */
+static uint8_t USBD_Pybricks_DataIn(USBD_HandleTypeDef *pdev, uint8_t epnum) {
+ USBD_Pybricks_HandleTypeDef *hPybricks;
+ PCD_HandleTypeDef *hpcd = pdev->pData;
+
+ if (pdev->pClassData == NULL) {
+ return (uint8_t)USBD_FAIL;
+ }
+
+ hPybricks = (USBD_Pybricks_HandleTypeDef *)pdev->pClassData;
+
+ if ((pdev->ep_in[epnum].total_length > 0U) &&
+ ((pdev->ep_in[epnum].total_length % hpcd->IN_ep[epnum].maxpacket) == 0U)) {
+ /* Update the packet total length */
+ pdev->ep_in[epnum].total_length = 0U;
+
+ /* Send ZLP */
+ (void)USBD_LL_Transmit(pdev, epnum, NULL, 0U);
+ } else {
+ hPybricks->TxState = 0U;
+ ((USBD_Pybricks_ItfTypeDef *)pdev->pUserData[pdev->classId])->TransmitCplt(hPybricks->TxBuffer, &hPybricks->TxLength, epnum);
+ }
+
+ return (uint8_t)USBD_OK;
+}
+
+/**
+ * @brief USBD_Pybricks_DataOut
+ * Data received on non-control Out endpoint
+ * @param pdev: device instance
+ * @param epnum: endpoint number
+ * @retval status
+ */
+static uint8_t USBD_Pybricks_DataOut(USBD_HandleTypeDef *pdev, uint8_t epnum) {
+ USBD_Pybricks_HandleTypeDef *hPybricks = (USBD_Pybricks_HandleTypeDef *)pdev->pClassData;
+
+ if (pdev->pClassData == NULL) {
+ return (uint8_t)USBD_FAIL;
+ }
+
+ /* Get the received data length */
+ hPybricks->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 */
+
+ ((USBD_Pybricks_ItfTypeDef *)pdev->pUserData[pdev->classId])->Receive(hPybricks->RxBuffer, &hPybricks->RxLength);
+
+ return (uint8_t)USBD_OK;
+}
+
+/**
+ * @brief USBD_Pybricks_EP0_RxReady
+ * Handle EP0 Rx Ready event
+ * @param pdev: device instance
+ * @retval status
+ */
+static uint8_t USBD_Pybricks_EP0_RxReady(USBD_HandleTypeDef *pdev) {
+ USBD_Pybricks_HandleTypeDef *hPybricks = (USBD_Pybricks_HandleTypeDef *)pdev->pClassData;
+
+ if ((pdev->pUserData != NULL) && (pdev->pUserData[pdev->classId] != NULL) && (hPybricks->CmdOpCode != 0xFFU)) {
+ hPybricks->CmdOpCode = 0xFFU;
+ }
+
+ return (uint8_t)USBD_OK;
+}
+
+/**
+* @brief USBD_Pybricks_RegisterInterface
+ * @param pdev: device instance
+ * @param fops: CD Interface callback
+ * @retval status
+ */
+uint8_t USBD_Pybricks_RegisterInterface(USBD_HandleTypeDef *pdev,
+ USBD_Pybricks_ItfTypeDef *fops) {
+ if (fops == NULL) {
+ return (uint8_t)USBD_FAIL;
+ }
+
+ pdev->pUserData[pdev->classId] = fops;
+
+ return (uint8_t)USBD_OK;
+}
+
+/**
+ * @brief USBD_Pybricks_SetTxBuffer
+ * @param pdev: device instance
+ * @param pbuff: Tx Buffer
+ * @retval status
+ */
+uint8_t USBD_Pybricks_SetTxBuffer(USBD_HandleTypeDef *pdev,
+ uint8_t *pbuff, uint32_t length) {
+ USBD_Pybricks_HandleTypeDef *hPybricks = (USBD_Pybricks_HandleTypeDef *)pdev->pClassData;
+
+ hPybricks->TxBuffer = pbuff;
+ hPybricks->TxLength = length;
+
+ return (uint8_t)USBD_OK;
+}
+
+
+/**
+ * @brief USBD_Pybricks_SetRxBuffer
+ * @param pdev: device instance
+ * @param pbuff: Rx Buffer
+ * @retval status
+ */
+uint8_t USBD_Pybricks_SetRxBuffer(USBD_HandleTypeDef *pdev, uint8_t *pbuff) {
+ USBD_Pybricks_HandleTypeDef *hPybricks = (USBD_Pybricks_HandleTypeDef *)pdev->pClassData;
+
+ hPybricks->RxBuffer = pbuff;
+
+ return (uint8_t)USBD_OK;
+}
+
+/**
+ * @brief USBD_Pybricks_TransmitPacket
+ * Transmit packet on IN endpoint
+ * @param pdev: device instance
+ * @retval status
+ */
+uint8_t USBD_Pybricks_TransmitPacket(USBD_HandleTypeDef *pdev) {
+ USBD_Pybricks_HandleTypeDef *hPybricks = (USBD_Pybricks_HandleTypeDef *)pdev->pClassData;
+ USBD_StatusTypeDef ret = USBD_BUSY;
+
+ if (pdev->pClassData == NULL) {
+ return (uint8_t)USBD_FAIL;
+ }
+
+ if (hPybricks->TxState == 0U) {
+ /* Tx Transfer in progress */
+ hPybricks->TxState = 1U;
+
+ /* Update the packet total length */
+ pdev->ep_in[USBD_PYBRICKS_IN_EP & 0xFU].total_length = hPybricks->TxLength;
+
+ /* Transmit next packet */
+ (void)USBD_LL_Transmit(pdev, USBD_PYBRICKS_IN_EP, hPybricks->TxBuffer, hPybricks->TxLength);
+
+ ret = USBD_OK;
+ }
+
+ return (uint8_t)ret;
+}
+
+
+/**
+ * @brief USBD_Pybricks_ReceivePacket
+ * prepare OUT Endpoint for reception
+ * @param pdev: device instance
+ * @retval status
+ */
+uint8_t USBD_Pybricks_ReceivePacket(USBD_HandleTypeDef *pdev) {
+ USBD_Pybricks_HandleTypeDef *hPybricks = (USBD_Pybricks_HandleTypeDef *)pdev->pClassData;
+
+ if (pdev->pClassData == NULL) {
+ return (uint8_t)USBD_FAIL;
+ }
+
+ /* Prepare Out endpoint to receive next packet */
+ (void)USBD_LL_PrepareReceive(pdev, USBD_PYBRICKS_OUT_EP, hPybricks->RxBuffer, USBD_PYBRICKS_MAX_PACKET_SIZE);
+
+ return (uint8_t)USBD_OK;
+}
+
+/**
+ * @}
+ */
+
+
+/**
+ * @}
+ */
+
+
+/**
+ * @}
+ */
diff --git a/lib/pbio/drv/usb/stm32_usbd/usbd_pybricks.h b/lib/pbio/drv/usb/stm32_usbd/usbd_pybricks.h
new file mode 100644
index 000000000..f10ac21bf
--- /dev/null
+++ b/lib/pbio/drv/usb/stm32_usbd/usbd_pybricks.h
@@ -0,0 +1,133 @@
+/**
+ ******************************************************************************
+ * @file usbd_pybricks.h
+ * @author MCD Application Team
+ * @brief Header file for the usbd_pybricks.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_PYBRICKS_H
+#define __USB_PYBRICKS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Includes ------------------------------------------------------------------*/
+#include "usbd_ioreq.h"
+
+/** @addtogroup STM32_USB_DEVICE_LIBRARY
+ * @{
+ */
+
+/** @defgroup USBD_Pybricks
+ * @brief This file is the header file for usbd_pybricks.c
+ * @{
+ */
+
+
+/** @defgroup USBD_Pybricks_Exported_Defines
+ * @{
+ */
+#define USBD_MS_VENDOR_CODE 0xCC
+#define USBD_SIZ_MS_OS_DSCRPTR_SET (10 + 20 + 130)
+
+#define USBD_PYBRICKS_CONFIG_DESC_SIZ (9 + 9 + 7 + 7)
+
+#define USBD_PYBRICKS_IN_EP 0x81U /* EP1 for data IN */
+#define USBD_PYBRICKS_OUT_EP 0x01U /* EP1 for data OUT */
+
+#define USBD_PYBRICKS_MAX_PACKET_SIZE 64U
+
+/**
+ * @}
+ */
+
+
+/** @defgroup USBD_Pybricks_Exported_TypesDefinitions
+ * @{
+ */
+
+/**
+ * @}
+ */
+typedef struct
+{
+ int8_t (*Init)(void);
+ int8_t (*DeInit)(void);
+ int8_t (*Receive)(uint8_t *Buf, uint32_t *Len);
+ int8_t (*TransmitCplt)(uint8_t *Buf, uint32_t *Len, uint8_t epnum);
+} USBD_Pybricks_ItfTypeDef;
+
+
+typedef struct
+{
+ uint32_t data[USBD_PYBRICKS_MAX_PACKET_SIZE / 4U]; /* 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_Pybricks_HandleTypeDef;
+
+
+
+/** @defgroup USBD_Pybricks_Exported_Macros
+ * @{
+ */
+
+/**
+ * @}
+ */
+
+/** @defgroup USBD_Pybricks_Exported_Variables
+ * @{
+ */
+
+extern USBD_ClassTypeDef USBD_Pybricks_ClassDriver;
+
+extern USBD_DescriptorsTypeDef Pybricks_Desc;
+extern uint8_t USBD_OSDescSet[USBD_SIZ_MS_OS_DSCRPTR_SET];
+/**
+ * @}
+ */
+
+/** @defgroup USB_Pybricks_Exported_Functions
+ * @{
+ */
+uint8_t USBD_Pybricks_RegisterInterface(USBD_HandleTypeDef *pdev, USBD_Pybricks_ItfTypeDef *fops);
+uint8_t USBD_Pybricks_SetTxBuffer(USBD_HandleTypeDef *pdev, uint8_t *pbuf, uint32_t length);
+uint8_t USBD_Pybricks_SetRxBuffer(USBD_HandleTypeDef *pdev, uint8_t *pbuf);
+uint8_t USBD_Pybricks_ReceivePacket(USBD_HandleTypeDef *pdev);
+uint8_t USBD_Pybricks_TransmitPacket(USBD_HandleTypeDef *pdev);
+/**
+ * @}
+ */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __USB_PYBRICKS_H */
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
diff --git a/lib/pbio/drv/usb/usb_stm32.c b/lib/pbio/drv/usb/usb_stm32.c
index e7ab1fd5b..1817a25fd 100644
--- a/lib/pbio/drv/usb/usb_stm32.c
+++ b/lib/pbio/drv/usb/usb_stm32.c
@@ -8,22 +8,33 @@
#if PBDRV_CONFIG_USB_STM32F4
#include
+#include
#include
#include
#include
#include
+#include
#include
#include
+#include
#include "../charger/charger.h"
#include "./usb_stm32.h"
+#define UUID_SZ (128 / 8)
+
PROCESS(pbdrv_usb_process, "USB");
+static uint8_t usb_in_buf[USBD_PYBRICKS_MAX_PACKET_SIZE];
+static uint8_t usb_out_buf[USBD_PYBRICKS_MAX_PACKET_SIZE];
+static volatile uint32_t usb_in_sz;
+static volatile uint32_t usb_out_sz;
+
static USBD_HandleTypeDef husbd;
static PCD_HandleTypeDef hpcd;
+
static volatile bool vbus_active;
static pbdrv_usb_bcd_t pbdrv_usb_bcd;
@@ -121,6 +132,75 @@ void pbdrv_usb_stm32_handle_vbus_irq(bool active) {
process_poll(&pbdrv_usb_process);
}
+/**
+ * @brief Pybricks_Itf_Init
+ * Initializes the Pybricks media low layer
+ * @param None
+ * @retval Result of the operation: USBD_OK if all operations are OK else USBD_FAIL
+ */
+static int8_t Pybricks_Itf_Init(void) {
+ USBD_Pybricks_SetTxBuffer(&husbd, usb_out_buf, sizeof(usb_out_buf));
+ USBD_Pybricks_SetRxBuffer(&husbd, usb_in_buf);
+ usb_in_sz = 0;
+ usb_out_sz = 0;
+
+ return USBD_OK;
+}
+
+/**
+ * @brief Pybricks_Itf_DeInit
+ * DeInitializes the Pybricks media low layer
+ * @param None
+ * @retval Result of the operation: USBD_OK if all operations are OK else USBD_FAIL
+ */
+static int8_t Pybricks_Itf_DeInit(void) {
+ return USBD_OK;
+}
+
+/**
+ * @brief Pybricks_Itf_DataRx
+ * Data received over USB OUT endpoint are sent over CDC interface
+ * through this function.
+ * @param Buf: Buffer of data to be transmitted
+ * @param Len: Number of data received (in bytes)
+ * @retval Result of the operation: USBD_OK if all operations are OK else USBD_FAIL
+ */
+static int8_t Pybricks_Itf_Receive(uint8_t *Buf, uint32_t *Len) {
+ if (*Len > sizeof(usb_in_buf)) {
+ return USBD_FAIL;
+ }
+
+ memcpy(usb_in_buf, Buf, *Len);
+ usb_in_sz = *Len;
+ process_poll(&pbdrv_usb_process);
+ return USBD_OK;
+}
+
+/**
+ * @brief Pybricks_Itf_TransmitCplt
+ * Data transmitted callback
+ *
+ * @note
+ * This function is IN transfer complete callback used to inform user that
+ * the submitted Data is successfully sent over USB.
+ *
+ * @param Buf: Buffer of data to be received
+ * @param Len: Number of data received (in bytes)
+ * @retval Result of the operation: USBD_OK if all operations are OK else USBD_FAIL
+ */
+static int8_t Pybricks_Itf_TransmitCplt(uint8_t *Buf, uint32_t *Len, uint8_t epnum) {
+ usb_out_sz = 0;
+ process_poll(&pbdrv_usb_process);
+ return USBD_OK;
+}
+
+static USBD_Pybricks_ItfTypeDef USBD_Pybricks_fops = {
+ .Init = Pybricks_Itf_Init,
+ .DeInit = Pybricks_Itf_DeInit,
+ .Receive = Pybricks_Itf_Receive,
+ .TransmitCplt = Pybricks_Itf_TransmitCplt,
+};
+
// Common USB driver implementation.
void pbdrv_usb_init(void) {
@@ -128,7 +208,11 @@ void pbdrv_usb_init(void) {
husbd.pData = &hpcd;
hpcd.pData = &husbd;
- USBD_Init(&husbd, NULL, 0);
+ USBD_Init(&husbd, &Pybricks_Desc, 0);
+ USBD_RegisterClass(&husbd, &USBD_Pybricks_ClassDriver);
+ USBD_Pybricks_RegisterInterface(&husbd, &USBD_Pybricks_fops);
+ USBD_Start(&husbd);
+
process_start(&pbdrv_usb_process);
// VBUS may already be active
@@ -164,12 +248,27 @@ PROCESS_THREAD(pbdrv_usb_process, ev, data) {
PROCESS_BEGIN();
+ // Prepare to receive the first packet
+ USBD_Pybricks_ReceivePacket(&husbd);
+
for (;;) {
PROCESS_WAIT_EVENT();
if (bcd_busy) {
bcd_busy = PT_SCHEDULE(pbdrv_usb_stm32_bcd_detect(&bcd_pt));
}
+
+ if (usb_in_sz) {
+ if ((usb_in_sz >= UUID_SZ) &&
+ pbio_uuid128_le_compare(usb_in_buf, pbio_pybricks_command_event_char_uuid)) {
+ pbsys_command(usb_in_buf + UUID_SZ, usb_in_sz - UUID_SZ);
+ }
+
+ usb_in_sz = 0;
+
+ // Prepare to receive the next packet
+ USBD_Pybricks_ReceivePacket(&husbd);
+ }
}
PROCESS_END();
diff --git a/lib/pbio/drv/usb/usb_stm32_serial.c b/lib/pbio/drv/usb/usb_stm32_serial.c
deleted file mode 100644
index 202ea2e6e..000000000
--- a/lib/pbio/drv/usb/usb_stm32_serial.c
+++ /dev/null
@@ -1,265 +0,0 @@
-// SPDX-License-Identifier: MIT
-// Copyright (c) 2020 The Pybricks Authors
-
-// USB serial port driver (CDC/ACM) for STM32 MCUs.
-
-#include
-
-#if PBDRV_CONFIG_USB_STM32F4_CDC
-
-#include
-#include
-
-#include
-#include
-
-#include
-#include
-
-#include
-#include
-
-PROCESS(pbdrv_usb_process, "USB");
-
-static uint8_t usb_in_buf[CDC_DATA_FS_MAX_PACKET_SIZE];
-static uint8_t usb_out_buf[CDC_DATA_FS_MAX_PACKET_SIZE - 1];
-static volatile bool usb_in_busy;
-static volatile bool usb_out_busy;
-
-static volatile bool usb_connected;
-
-// size must be power of 2 for ringbuf! also can't be > 255!
-static uint8_t stdout_data[128];
-static uint8_t stdin_data[128];
-static struct ringbuf stdout_buf;
-static struct ringbuf stdin_buf;
-
-static USBD_CDC_LineCodingTypeDef LineCoding = {
- .bitrate = 115200,
- .format = CDC_STOP_BITS_1,
- .paritytype = CDC_PARITY_NONE,
- .datatype = 8,
-};
-
-// moved to usb_stm32.c
-// static USBD_HandleTypeDef USBD_Device;
-extern USBD_DescriptorsTypeDef VCP_Desc;
-
-/**
- * @brief CDC_Itf_Init
- * Initializes the CDC media low layer
- * @param None
- * @retval Result of the operation: USBD_OK if all operations are OK else USBD_FAIL
- */
-static int8_t CDC_Itf_Init(void) {
- ringbuf_init(&stdin_buf, stdin_data, (uint8_t)PBIO_ARRAY_SIZE(stdin_data));
- ringbuf_init(&stdout_buf, stdout_data, (uint8_t)PBIO_ARRAY_SIZE(stdout_data));
- USBD_CDC_SetTxBuffer(&USBD_Device, usb_out_buf, 0);
- USBD_CDC_SetRxBuffer(&USBD_Device, usb_in_buf);
- usb_in_busy = false;
- usb_out_busy = false;
- usb_connected = false;
-
- return USBD_OK;
-}
-
-/**
- * @brief CDC_Itf_DeInit
- * DeInitializes the CDC media low layer
- * @param None
- * @retval Result of the operation: USBD_OK if all operations are OK else USBD_FAIL
- */
-static int8_t CDC_Itf_DeInit(void) {
- usb_connected = false;
- return USBD_OK;
-}
-
-/**
- * @brief CDC_Itf_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 operation: USBD_OK if all operations are OK else USBD_FAIL
- */
-static int8_t CDC_Itf_Control(uint8_t cmd, uint8_t *pbuf, uint16_t length) {
- switch (cmd) {
- case CDC_SEND_ENCAPSULATED_COMMAND:
- break;
-
- case CDC_GET_ENCAPSULATED_RESPONSE:
- break;
-
- case CDC_SET_COMM_FEATURE:
- break;
-
- case CDC_GET_COMM_FEATURE:
- break;
-
- case CDC_CLEAR_COMM_FEATURE:
- break;
-
- case CDC_SET_LINE_CODING:
- LineCoding.bitrate = pbuf[0] | (pbuf[1] << 8) | (pbuf[2] << 16) | (pbuf[3] << 24);
- LineCoding.format = pbuf[4];
- LineCoding.paritytype = pbuf[5];
- LineCoding.datatype = pbuf[6];
- 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;
- break;
-
- case CDC_SET_CONTROL_LINE_STATE: {
- USBD_SetupReqTypedef *req = (void *)pbuf;
- // REVISIT: MicroPython defers the connection state here to allow
- // some time to disable local echo on the remote terminal
- usb_connected = !!(req->wValue & CDC_CONTROL_LINE_DTR);
- break;
- }
- case CDC_SEND_BREAK:
- break;
- }
-
- return USBD_OK;
-}
-
-/**
- * @brief CDC_Itf_DataRx
- * Data received over USB OUT endpoint are sent over CDC interface
- * through this function.
- * @param Buf: Buffer of data to be transmitted
- * @param Len: Number of data received (in bytes)
- * @retval Result of the operation: USBD_OK if all operations are OK else USBD_FAIL
- */
-static int8_t CDC_Itf_Receive(uint8_t *Buf, uint32_t *Len) {
- for (int i = 0; i < *Len; i++) {
- ringbuf_put(&stdin_buf, Buf[i]);
- }
- usb_in_busy = false;
- // process_poll(&pbdrv_usb_process);
- return USBD_OK;
-}
-
-/**
- * @brief CDC_Itf_TransmitCplt
- * Data transmitted callback
- *
- * @note
- * This function is IN transfer complete callback used to inform user that
- * the submitted Data is successfully sent over USB.
- *
- * @param Buf: Buffer of data to be received
- * @param Len: Number of data received (in bytes)
- * @retval Result of the operation: USBD_OK if all operations are OK else USBD_FAIL
- */
-static int8_t CDC_Itf_TransmitCplt(uint8_t *Buf, uint32_t *Len, uint8_t epnum) {
- usb_out_busy = false;
- // process_poll(&pbdrv_usb_process);
- return USBD_OK;
-}
-
-static USBD_CDC_ItfTypeDef USBD_CDC_fops = {
- .Init = CDC_Itf_Init,
- .DeInit = CDC_Itf_DeInit,
- .Control = CDC_Itf_Control,
- .Receive = CDC_Itf_Receive,
- .TransmitCplt = CDC_Itf_TransmitCplt,
-};
-
-static void pbdrv_stm32_usb_serial_init(void) {
- // This is now done in usb_stm32.c
- // USBD_Init(&USBD_Device, &VCP_Desc, 0);
- USBD_RegisterClass(&USBD_Device, USBD_CDC_CLASS);
- USBD_CDC_RegisterInterface(&USBD_Device, &USBD_CDC_fops);
- USBD_Start(&USBD_Device);
-}
-
-static void pbdrv_stm32_usb_serial_transmit(void) {
- static int tx_size = 0;
-
- if (usb_out_busy) {
- return;
- }
-
- // If tx_size > 0 it means we have a pending retry, otherwise we get as
- // much as we can from the stdout buffer.
- if (tx_size == 0) {
- tx_size = ringbuf_elements(&stdout_buf);
- if (tx_size > PBIO_ARRAY_SIZE(usb_out_buf)) {
- tx_size = PBIO_ARRAY_SIZE(usb_out_buf);
- }
- if (tx_size > 0) {
- for (int i = 0; i < tx_size; i++) {
- usb_out_buf[i] = ringbuf_get(&stdout_buf);
- }
- }
- }
-
- if (tx_size > 0) {
- USBD_CDC_SetTxBuffer(&USBD_Device, usb_out_buf, tx_size);
- if (USBD_CDC_TransmitPacket(&USBD_Device) == USBD_OK) {
- usb_out_busy = true;
- tx_size = 0;
- }
- }
-}
-
-static void pbdrv_stm32_usb_serial_receive(void) {
- if (usb_in_busy) {
- return;
- }
-
- if (USBD_CDC_ReceivePacket(&USBD_Device) == USBD_OK) {
- usb_in_busy = true;
- }
-}
-
-// TODO: need to multiplex stdin/stdout with Bluetooth or remove USB serial
-
-// pbio_error_t pbsys_stdout_put_char(uint8_t c) {
-// if (!usb_connected) {
-// // don't lock up print() when USB not connected - data is discarded
-// return PBIO_SUCCESS;
-// }
-// if (ringbuf_put(&stdout_buf, c) == 0) {
-// return PBIO_SUCCESS;
-// }
-// return PBIO_SUCCESS;
-// }
-
-// pbio_error_t pbsys_stdin_get_char(uint8_t *c) {
-// if (ringbuf_elements(&stdin_buf) == 0) {
-// return PBIO_ERROR_AGAIN;
-// }
-// *c = ringbuf_get(&stdin_buf);
-// return PBIO_SUCCESS;
-// }
-
-// TODO: This process needs to be started by the main USB code (we still want
-// a separate process for serial since it can be polled quite frequently).
-PROCESS_THREAD(pbdrv_usb_process, ev, data) {
- static struct etimer timer;
-
- PROCESS_BEGIN();
-
- pbdrv_stm32_usb_serial_init();
- etimer_set(&timer, 5);
-
- for (;;) {
- PROCESS_WAIT_EVENT_UNTIL(ev == PROCESS_EVENT_POLL || (ev == PROCESS_EVENT_TIMER && etimer_expired(&timer)));
- etimer_reset(&timer);
- pbdrv_stm32_usb_serial_transmit();
- pbdrv_stm32_usb_serial_receive();
- }
-
- PROCESS_END();
-}
-
-#endif // PBDRV_CONFIG_USB_STM32F4_CDC
diff --git a/lib/pbio/include/pbio/protocol.h b/lib/pbio/include/pbio/protocol.h
index 48e65685f..51b54b58a 100644
--- a/lib/pbio/include/pbio/protocol.h
+++ b/lib/pbio/include/pbio/protocol.h
@@ -301,7 +301,9 @@ extern const uint8_t pbio_pybricks_hub_capabilities_char_uuid[];
extern const uint16_t pbio_gatt_device_info_service_uuid;
extern const uint16_t pbio_gatt_firmware_version_char_uuid;
+extern const uint8_t pbio_gatt_firmware_version_char_uuid_128[];
extern const uint16_t pbio_gatt_software_version_char_uuid;
+extern const uint8_t pbio_gatt_software_version_char_uuid_128[];
extern const uint16_t pbio_gatt_pnp_id_char_uuid;
extern const uint8_t pbio_lwp3_hub_service_uuid[];
@@ -311,6 +313,13 @@ extern const uint8_t pbio_nus_service_uuid[];
extern const uint8_t pbio_nus_rx_char_uuid[];
extern const uint8_t pbio_nus_tx_char_uuid[];
+/** USB bDeviceClass for Pybricks hubs */
+#define PBIO_PYBRICKS_USB_DEVICE_CLASS 0xFF
+/** USB bDeviceSubClass for Pybricks hubs */
+#define PBIO_PYBRICKS_USB_DEVICE_SUBCLASS 0xC5
+/** USB bDeviceProtocol for Pybricks hubs */
+#define PBIO_PYBRICKS_USB_DEVICE_PROTOCOL 0xF5
+
#endif // _PBIO_PROTOCOL_H_
/** @} */
diff --git a/lib/pbio/include/pbio/util.h b/lib/pbio/include/pbio/util.h
index cf9227bfb..ad4e7cd9b 100644
--- a/lib/pbio/include/pbio/util.h
+++ b/lib/pbio/include/pbio/util.h
@@ -118,6 +118,8 @@ void pbio_set_uint32_be(uint8_t *buf, uint32_t value) {
buf[3] = value;
}
+bool pbio_uuid128_le_compare(const uint8_t *le, const uint8_t *uuid);
+void pbio_uuid128_le_copy(uint8_t *dst, const uint8_t *src);
bool pbio_uuid128_reverse_compare(const uint8_t *uuid1, const uint8_t *uuid2);
void pbio_uuid128_reverse_copy(uint8_t *dst, const uint8_t *src);
diff --git a/lib/pbio/platform/essential_hub/pbdrvconfig.h b/lib/pbio/platform/essential_hub/pbdrvconfig.h
index af8892045..3880052cb 100644
--- a/lib/pbio/platform/essential_hub/pbdrvconfig.h
+++ b/lib/pbio/platform/essential_hub/pbdrvconfig.h
@@ -104,6 +104,10 @@
#define PBDRV_CONFIG_UART_STM32F4_LL_IRQ_NUM_UART (2)
#define PBDRV_CONFIG_USB (1)
+#define PBDRV_CONFIG_USB_VID LEGO_USB_VID
+#define PBDRV_CONFIG_USB_PID LEGO_USB_PID_SPIKE_ESSENTIAL
+#define PBDRV_CONFIG_USB_MFG_STR LEGO_USB_MFG_STR
+#define PBDRV_CONFIG_USB_PROD_STR LEGO_USB_PROD_STR_TECHNIC_SMALL_HUB " + Pybricks"
#define PBDRV_CONFIG_USB_STM32F4 (1)
#define PBDRV_CONFIG_WATCHDOG (1)
diff --git a/lib/pbio/platform/prime_hub/pbdrvconfig.h b/lib/pbio/platform/prime_hub/pbdrvconfig.h
index 025f96553..83c713cb1 100644
--- a/lib/pbio/platform/prime_hub/pbdrvconfig.h
+++ b/lib/pbio/platform/prime_hub/pbdrvconfig.h
@@ -118,7 +118,14 @@
#define PBDRV_CONFIG_UART_STM32F4_LL_IRQ_NUM_UART (6)
#define PBDRV_CONFIG_USB (1)
+#define PBDRV_CONFIG_USB_VID LEGO_USB_VID
+#define PBDRV_CONFIG_USB_PID 0xFFFF
+#define PBDRV_CONFIG_USB_PID_0 LEGO_USB_PID_SPIKE_PRIME
+#define PBDRV_CONFIG_USB_PID_1 LEGO_USB_PID_ROBOT_INVENTOR
+#define PBDRV_CONFIG_USB_MFG_STR LEGO_USB_MFG_STR
+#define PBDRV_CONFIG_USB_PROD_STR LEGO_USB_PROD_STR_TECHNIC_LARGE_HUB " + Pybricks"
#define PBDRV_CONFIG_USB_STM32F4 (1)
+#define PBDRV_CONFIG_USB_STM32F4_HUB_VARIANT_ADDR 0x08007d80
#define PBDRV_CONFIG_WATCHDOG (1)
#define PBDRV_CONFIG_WATCHDOG_STM32 (1)
diff --git a/lib/pbio/src/protocol/pybricks.c b/lib/pbio/src/protocol/pybricks.c
index 6bf2ec9e4..e23055281 100644
--- a/lib/pbio/src/protocol/pybricks.c
+++ b/lib/pbio/src/protocol/pybricks.c
@@ -87,9 +87,17 @@ const uint16_t pbio_gatt_device_info_service_uuid = 0x180A;
/** Bluetooth Firmware Version Characteristic UUID. */
const uint16_t pbio_gatt_firmware_version_char_uuid = 0x2A26;
+const uint8_t pbio_gatt_firmware_version_char_uuid_128[] = {
+ 0x00, 0x00, 0x2A, 0x26, 0x00, 0x00, 0x10, 0x00,
+ 0x80, 0x00, 0x00, 0x80, 0x5F, 0x9B, 0x34, 0xFB,
+};
/** Bluetooth Software Version Characteristic UUID (Pybricks protocol version). */
const uint16_t pbio_gatt_software_version_char_uuid = 0x2A28;
+const uint8_t pbio_gatt_software_version_char_uuid_128[] = {
+ 0x00, 0x00, 0x2A, 0x28, 0x00, 0x00, 0x10, 0x00,
+ 0x80, 0x00, 0x00, 0x80, 0x5F, 0x9B, 0x34, 0xFB,
+};
/** Bluetooth PnP ID Characteristic UUID. */
const uint16_t pbio_gatt_pnp_id_char_uuid = 0x2A50;
diff --git a/lib/pbio/src/util.c b/lib/pbio/src/util.c
index 1da0067af..6e50018ef 100644
--- a/lib/pbio/src/util.c
+++ b/lib/pbio/src/util.c
@@ -3,6 +3,58 @@
#include
#include
+#include
+
+/**
+ * Compares a 128-bit UUID from @p le in little endian format with
+ * the given uuid @p uuid.
+ *
+ * According to RFC 4122, the UUID is grouped into the following:
+ * 1) One 32-bit
+ * 2) Two 16-bit
+ * 3) Eight 8-bit
+ *
+ * @param [in] le The little endian UUID.
+ * @param [in] uuid The UUID to compare against.
+ */
+bool pbio_uuid128_le_compare(const uint8_t *le, const uint8_t *uuid) {
+ return (le[0] == uuid[3]) &&
+ (le[1] == uuid[2]) &&
+ (le[2] == uuid[1]) &&
+ (le[3] == uuid[0]) &&
+ (le[4] == uuid[5]) &&
+ (le[5] == uuid[4]) &&
+ (le[6] == uuid[7]) &&
+ (le[7] == uuid[6]) &&
+ (memcmp(&le[8], &uuid[8], 8) == 0);
+}
+
+/**
+ * Copies a 128-bit UUID from @p src to a buffer @p dst,
+ * which is a buffer used by a little endian medium.
+ *
+ * According to RFC 4122, the UUID is grouped into the following:
+ * 1) One 32-bit
+ * 2) Two 16-bit
+ * 3) Eight 8-bit
+ *
+ * @param [in] dst The destination array.
+ * @param [in] src The UUID to reverse and copy.
+ */
+void pbio_uuid128_le_copy(uint8_t *dst, const uint8_t *src) {
+ dst[0] = src[3];
+ dst[1] = src[2];
+ dst[2] = src[1];
+ dst[3] = src[0];
+
+ dst[4] = src[5];
+ dst[5] = src[4];
+
+ dst[6] = src[7];
+ dst[7] = src[6];
+
+ memcpy(&dst[8], &src[8], 8);
+}
/**
* Compares two 128-bit UUIDs with opposite byte ordering for equality.