Skip to content

USB reviews and Device library update #1374

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 10 commits into from
Apr 29, 2021
538 changes: 297 additions & 241 deletions cores/arduino/stm32/usb/cdc/usbd_cdc.c

Large diffs are not rendered by default.

24 changes: 13 additions & 11 deletions cores/arduino/stm32/usb/cdc/usbd_cdc.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ extern "C" {
* @{
*/


/** @defgroup usbd_cdc_Exported_Defines
* @{
*/
Expand All @@ -58,6 +59,7 @@ extern "C" {
#define CDC_DATA_FS_IN_PACKET_SIZE CDC_DATA_FS_MAX_PACKET_SIZE
#define CDC_DATA_FS_OUT_PACKET_SIZE CDC_DATA_FS_MAX_PACKET_SIZE

#define CDC_REQ_MAX_DATA_SIZE 0x7U
/*---------------------------------------------------------------------*/
/* CDC definitions */
/*---------------------------------------------------------------------*/
Expand Down Expand Up @@ -100,7 +102,7 @@ typedef struct _USBD_CDC_Itf {


typedef struct {
uint32_t data[CDC_DATA_HS_MAX_PACKET_SIZE / 4U]; /* Force 32bits alignment */
uint32_t data[CDC_DATA_HS_MAX_PACKET_SIZE / 4U]; /* Force 32-bit alignment */
uint8_t CmdOpCode;
uint8_t CmdLength;
uint8_t *RxBuffer;
Expand All @@ -126,25 +128,25 @@ typedef struct {
* @{
*/

extern USBD_ClassTypeDef USBD_CDC;
#define USBD_CDC_CLASS &USBD_CDC
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_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_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_ClearBuffer(USBD_HandleTypeDef *pdev);
uint8_t USBD_CDC_TransmitPacket(USBD_HandleTypeDef *pdev);
uint8_t USBD_CDC_SetRxBuffer(USBD_HandleTypeDef *pdev, uint8_t *pbuff);
uint8_t USBD_CDC_ReceivePacket(USBD_HandleTypeDef *pdev);
uint8_t USBD_CDC_ClearBuffer(USBD_HandleTypeDef *pdev);
uint8_t USBD_CDC_TransmitPacket(USBD_HandleTypeDef *pdev);
/**
* @}
*/
Expand Down
2 changes: 1 addition & 1 deletion cores/arduino/stm32/usb/cdc/usbd_cdc_if.c
Original file line number Diff line number Diff line change
Expand Up @@ -243,7 +243,7 @@ static int8_t USBD_CDC_Receive(uint8_t *Buf, uint32_t *Len)

/**
* @brief USBD_CDC_TransmitCplt
* Data transmited callback
* Data transmitted callback
*
* @note
* This function is IN transfer complete callback used to inform user that
Expand Down
514 changes: 268 additions & 246 deletions cores/arduino/stm32/usb/hid/usbd_hid_composite.c

Large diffs are not rendered by default.

59 changes: 24 additions & 35 deletions cores/arduino/stm32/usb/usbd_conf.c
Original file line number Diff line number Diff line change
Expand Up @@ -73,23 +73,22 @@ void HAL_PCD_MspInit(PCD_HandleTypeDef *hpcd)
/* Enable USB FS Clock */
__HAL_RCC_USB_CLK_ENABLE();

#if defined (USE_USB_INTERRUPT_REMAPPED)
/*USB interrupt remapping enable */
#if defined(SYSCFG_CFGR1_USB_IT_RMP) && defined(USE_USB_INTERRUPT_REMAPPED)
/* USB interrupt remapping enable */
__HAL_REMAPINTERRUPT_USB_ENABLE();
#endif

#if defined(STM32G4xx) || defined(STM32WBxx)
#if defined(USB_H_IRQn)
/* Set USB High priority Interrupt priority */
HAL_NVIC_SetPriority(USB_HP_IRQn, USBD_IRQ_PRIO, USBD_IRQ_SUBPRIO);
/* Enable USB High priority Interrupt */
HAL_NVIC_EnableIRQ(USB_HP_IRQn);
HAL_NVIC_SetPriority(USB_LP_IRQn, USBD_IRQ_PRIO, USBD_IRQ_SUBPRIO);
HAL_NVIC_EnableIRQ(USB_LP_IRQn);
#else
/* Set USB FS Interrupt priority */
#endif
/* Set USB Interrupt priority */
HAL_NVIC_SetPriority(USB_IRQn, USBD_IRQ_PRIO, USBD_IRQ_SUBPRIO);

/* Enable USB FS Interrupt */
/* Enable USB Interrupt */
HAL_NVIC_EnableIRQ(USB_IRQn);
#endif /* STM32WBxx */

if (hpcd->Init.low_power_enable == 1) {
/* Enable EXTI for USB wakeup */
Expand All @@ -100,12 +99,12 @@ void HAL_PCD_MspInit(PCD_HandleTypeDef *hpcd)
__HAL_USB_WAKEUP_EXTI_ENABLE_RISING_EDGE();
#endif
__HAL_USB_WAKEUP_EXTI_ENABLE_IT();
#if defined(STM32F1xx) || defined(STM32F3xx)
#if defined(USB_WKUP_IRQn)
/* USB Wakeup Interrupt */
HAL_NVIC_EnableIRQ(USBWakeUp_IRQn);
HAL_NVIC_EnableIRQ(USB_WKUP_IRQn);

/* Enable USB Wake-up interrupt */
HAL_NVIC_SetPriority(USBWakeUp_IRQn, 0, 0);
HAL_NVIC_SetPriority(USB_WKUP_IRQn, 0, 0);
#endif
}
}
Expand Down Expand Up @@ -163,7 +162,7 @@ void HAL_PCD_MspInit(PCD_HandleTypeDef *hpcd)
/* Enable USB HS Clocks */
__HAL_RCC_USB_OTG_HS_CLK_ENABLE();

/* Set USBHS Interrupt priority */
/* Set USB HS Interrupt priority */
HAL_NVIC_SetPriority(OTG_HS_IRQn, USBD_IRQ_PRIO, USBD_IRQ_SUBPRIO);

/* Enable USB HS Interrupt */
Expand Down Expand Up @@ -318,7 +317,7 @@ void HAL_PCD_SuspendCallback(PCD_HandleTypeDef *hpcd)
void HAL_PCD_ResumeCallback(PCD_HandleTypeDef *hpcd)
{
if (hpcd->Init.low_power_enable) {
SystemClock_Config();
USBD_SystemClockConfigFromResume();

/* Reset SLEEPDEEP bit of Cortex System Control Register */
SCB->SCR &= (uint32_t)~((uint32_t)(SCB_SCR_SLEEPDEEP_Msk | SCB_SCR_SLEEPONEXIT_Msk));
Expand Down Expand Up @@ -369,8 +368,6 @@ void HAL_PCD_DisconnectCallback(PCD_HandleTypeDef *hpcd)
USBD_LL_DevDisconnected(hpcd->pData);
}



/**
* @brief This function handles USB-On-The-Go FS/HS global interrupt request.
* @param None
Expand All @@ -387,47 +384,39 @@ void HAL_PCD_DisconnectCallback(PCD_HandleTypeDef *hpcd)
HAL_PCD_IRQHandler(&g_hpcd);
}

#if defined(STM32WBxx)
#if defined(USB_H_IRQn)
/**
* @brief This function handles USB high priority interrupt.
* @param None
* @retval None
*/
void USB_HP_IRQHandler(void)
void USB_H_IRQHandler(void)
{
HAL_PCD_IRQHandler(&g_hpcd);
}
#endif /* USB_H_IRQn */

/**
* @brief This function handles USB low priority interrupt, USB wake-up interrupt through EXTI line 28.
* @param None
* @retval None
*/
void USB_LP_IRQHandler(void)
{
HAL_PCD_IRQHandler(&g_hpcd);
}
#else
/**
* @brief This function handles USB OTG FS Wakeup IRQ Handler.
* @brief This function handles USB Wakeup IRQ Handler.
* @param None
* @retval None
*/
#ifdef USE_USB_HS
void OTG_HS_WKUP_IRQHandler(void)
#elif defined(USB_OTG_FS)
void OTG_FS_WKUP_IRQHandler(void)
#elif defined(USB_WKUP_IRQHandler)
void USB_WKUP_IRQHandler(void)
#else
void USBWakeUp_IRQHandler(void)
void USBWakeUp_IRQHandler_dummy(void)
#endif
{
if ((&g_hpcd)->Init.low_power_enable) {
/* Reset SLEEPDEEP bit of Cortex System Control Register */
SCB->SCR &= (uint32_t)~((uint32_t)(SCB_SCR_SLEEPDEEP_Msk | SCB_SCR_SLEEPONEXIT_Msk));

/* Configures system clock after wake-up from STOP: enable HSE, PLL and select
PLL as system clock source (HSE and PLL are disabled in STOP mode) */
SystemClock_Config();
/* Configures system clock after wake-up */
USBD_SystemClockConfigFromResume();

/* ungate PHY clock */
__HAL_PCD_UNGATE_PHYCLOCK((&g_hpcd));
Expand All @@ -442,7 +431,7 @@ void USB_LP_IRQHandler(void)
__HAL_USB_WAKEUP_EXTI_CLEAR_FLAG();
#endif
}
#endif

/*******************************************************************************
LL Driver Interface (USB Device Library --> PCD)
*******************************************************************************/
Expand Down Expand Up @@ -644,7 +633,7 @@ uint8_t USBD_LL_IsStallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr)
/**
* @brief Assigns a USB address to the device.
* @param pdev: Device handle
* @param ep_addr: Endpoint Number
* @param dev_addr: Endpoint Number
* @retval USBD Status
*/
USBD_StatusTypeDef USBD_LL_SetUSBAddress(USBD_HandleTypeDef *pdev, uint8_t dev_addr)
Expand Down
Loading