From 7cf1118831e71670dc237b5256a54856f6fdf0c2 Mon Sep 17 00:00:00 2001 From: Damien George Date: Wed, 20 Sep 2023 19:07:45 +1000 Subject: [PATCH] stm32/usbdev: Optionally pass through vendor requests to Setup function. Signed-off-by: Damien George --- ports/stm32/usbd_conf.h | 5 +++++ ports/stm32/usbdev/core/src/usbd_ctlreq.c | 8 ++++++++ 2 files changed, 13 insertions(+) diff --git a/ports/stm32/usbd_conf.h b/ports/stm32/usbd_conf.h index 83805a6e4d..e61e7ce7ef 100644 --- a/ports/stm32/usbd_conf.h +++ b/ports/stm32/usbd_conf.h @@ -49,6 +49,11 @@ #endif #define USBD_DEBUG_LEVEL 0 +// Whether the core USBD driver passes through vendor device requests to the class implementation. +#ifndef USBD_ENABLE_VENDOR_DEVICE_REQUESTS +#define USBD_ENABLE_VENDOR_DEVICE_REQUESTS (0) +#endif + // For MCUs with a device-only USB peripheral #define USBD_PMA_RESERVE (64) #define USBD_PMA_NUM_FIFO (16) // Maximum 8 endpoints, 2 FIFOs each diff --git a/ports/stm32/usbdev/core/src/usbd_ctlreq.c b/ports/stm32/usbdev/core/src/usbd_ctlreq.c index f25f252d64..97888918a8 100644 --- a/ports/stm32/usbdev/core/src/usbd_ctlreq.c +++ b/ports/stm32/usbdev/core/src/usbd_ctlreq.c @@ -120,6 +120,14 @@ USBD_StatusTypeDef USBD_StdDevReq (USBD_HandleTypeDef *pdev , USBD_SetupReqType { USBD_StatusTypeDef ret = USBD_OK; + #if USBD_ENABLE_VENDOR_DEVICE_REQUESTS + // Pass through vendor device requests directly to the implementation. + // It must call `USBD_CtlError(pdev, req);` if it does not respond to the request. + if ((req->bmRequest & 0xe0) == 0xc0) { + return pdev->pClass->Setup (pdev, req); + } + #endif + switch (req->bRequest) { case USB_REQ_GET_DESCRIPTOR: