diff options
| author | hathach <[email protected]> | 2019-09-13 13:14:18 +0700 |
|---|---|---|
| committer | GitHub <[email protected]> | 2019-09-13 13:14:18 +0700 |
| commit | 9e96c100146e4a09806d587545cd3929714f1314 (patch) | |
| tree | 799cb93dd695349a7a486409743a0b9ac7351a7d /src | |
| parent | a00ea9a11d4817e4e15e22e35d11920170e08111 (diff) | |
| parent | c3598f030158cf32f571a3c11b833a3a910d63c8 (diff) | |
Merge pull request #151 from hathach/develop
fix #139, correct usbd request intepreting, Non-STD request to Interf… … …ace must be forward to class driver
Diffstat (limited to 'src')
| -rw-r--r-- | src/device/usbd.c | 51 | ||||
| -rw-r--r-- | src/portable/st/synopsys/dcd_synopsys.c | 30 | ||||
| -rw-r--r-- | src/tusb_option.h | 10 |
3 files changed, 61 insertions, 30 deletions
diff --git a/src/device/usbd.c b/src/device/usbd.c index a6eda79de..53f0226bc 100644 --- a/src/device/usbd.c +++ b/src/device/usbd.c @@ -439,33 +439,44 @@ static bool process_control_request(uint8_t rhport, tusb_control_request_t const TU_VERIFY(drvid < USBD_CLASS_DRIVER_COUNT);
- switch ( p_request->bRequest )
+ if (p_request->bmRequestType_bit.type == TUSB_REQ_TYPE_STANDARD)
{
- case TUSB_REQ_GET_INTERFACE:
+ switch ( p_request->bRequest )
{
- // TODO not support alternate interface yet
- uint8_t alternate = 0;
- tud_control_xfer(rhport, p_request, &alternate, 1);
- }
- break;
+ case TUSB_REQ_GET_INTERFACE:
+ {
+ // TODO not support alternate interface yet
+ uint8_t alternate = 0;
+ tud_control_xfer(rhport, p_request, &alternate, 1);
+ }
+ break;
- case TUSB_REQ_SET_INTERFACE:
- {
- uint8_t alternate = (uint8_t) p_request->wValue;
+ case TUSB_REQ_SET_INTERFACE:
+ {
+ uint8_t const alternate = (uint8_t) p_request->wValue;
- // TODO not support alternate interface yet
- TU_ASSERT(alternate == 0);
+ // TODO not support alternate interface yet
+ TU_ASSERT(alternate == 0);
+ tud_control_status(rhport, p_request);
+ }
+ break;
- tud_control_status(rhport, p_request);
+ default:
+ // forward to class driver: "STD request to Interface"
+ // GET HID REPORT DESCRIPTOR falls into this case
+ usbd_control_set_complete_callback(usbd_class_drivers[drvid].control_complete);
+
+ // stall control endpoint if driver return false
+ TU_ASSERT(usbd_class_drivers[drvid].control_request(rhport, p_request));
+ break;
}
- break;
+ }else
+ {
+ // forward to class driver: "non-STD request to Interface"
+ usbd_control_set_complete_callback(usbd_class_drivers[drvid].control_complete);
- default:
- // forward to class driver
- // stall control endpoint if driver return false
- usbd_control_set_complete_callback(usbd_class_drivers[drvid].control_complete);
- TU_ASSERT(usbd_class_drivers[drvid].control_request(rhport, p_request));
- break;
+ // stall control endpoint if driver return false
+ TU_ASSERT(usbd_class_drivers[drvid].control_request(rhport, p_request));
}
}
break;
diff --git a/src/portable/st/synopsys/dcd_synopsys.c b/src/portable/st/synopsys/dcd_synopsys.c index 71c691223..b0e7e04bd 100644 --- a/src/portable/st/synopsys/dcd_synopsys.c +++ b/src/portable/st/synopsys/dcd_synopsys.c @@ -27,10 +27,20 @@ #include "tusb_option.h" -#if TUSB_OPT_DEVICE_ENABLED && ( CFG_TUSB_MCU == OPT_MCU_STM32F2 || \ - CFG_TUSB_MCU == OPT_MCU_STM32F4 || \ - CFG_TUSB_MCU == OPT_MCU_STM32H7 || \ - CFG_TUSB_MCU == OPT_MCU_STM32F7) +#define STM32L4_SYNOPSYS ( \ + defined (STM32L475xx) || defined (STM32L476xx) || \ + defined (STM32L485xx) || defined (STM32L486xx) || defined (STM32L496xx) || \ + defined (STM32L4R5xx) || defined (STM32L4R7xx) || defined (STM32L4R9xx) || \ + defined (STM32L4S5xx) || defined (STM32L4S7xx) || defined (STM32L4S9xx) \ +) + +#if TUSB_OPT_DEVICE_ENABLED && \ + ( CFG_TUSB_MCU == OPT_MCU_STM32F2 || \ + CFG_TUSB_MCU == OPT_MCU_STM32F4 || \ + CFG_TUSB_MCU == OPT_MCU_STM32F7 || \ + CFG_TUSB_MCU == OPT_MCU_STM32H7 || \ + (CFG_TUSB_MCU == OPT_MCU_STM32L4 && STM32L4_SYNOPSYS) \ + ) // TODO Support OTG_HS // EP_MAX : Max number of bi-directional endpoints including EP0 @@ -52,6 +62,10 @@ #include "stm32f7xx.h" #define EP_MAX 6 #define EP_FIFO_SIZE 1280 +#elif CFG_TUSB_MCU == OPT_MCU_STM32L4 + #include "stm32l4xx.h" + #define EP_MAX 6 + #define EP_FIFO_SIZE 1280 #else #error "Unsupported MCUs" #endif @@ -61,10 +75,10 @@ /*------------------------------------------------------------------*/ /* MACRO TYPEDEF CONSTANT ENUM *------------------------------------------------------------------*/ -#define DEVICE_BASE (USB_OTG_DeviceTypeDef *) (USB_OTG_FS_PERIPH_BASE + USB_OTG_DEVICE_BASE) -#define OUT_EP_BASE (USB_OTG_OUTEndpointTypeDef *) (USB_OTG_FS_PERIPH_BASE + USB_OTG_OUT_ENDPOINT_BASE) -#define IN_EP_BASE (USB_OTG_INEndpointTypeDef *) (USB_OTG_FS_PERIPH_BASE + USB_OTG_IN_ENDPOINT_BASE) -#define FIFO_BASE(_x) (volatile uint32_t *) (USB_OTG_FS_PERIPH_BASE + USB_OTG_FIFO_BASE + (_x) * USB_OTG_FIFO_SIZE) +#define DEVICE_BASE (USB_OTG_DeviceTypeDef *) (USB_OTG_FS_PERIPH_BASE + USB_OTG_DEVICE_BASE) +#define OUT_EP_BASE (USB_OTG_OUTEndpointTypeDef *) (USB_OTG_FS_PERIPH_BASE + USB_OTG_OUT_ENDPOINT_BASE) +#define IN_EP_BASE (USB_OTG_INEndpointTypeDef *) (USB_OTG_FS_PERIPH_BASE + USB_OTG_IN_ENDPOINT_BASE) +#define FIFO_BASE(_x) ((volatile uint32_t *) (USB_OTG_FS_PERIPH_BASE + USB_OTG_FIFO_BASE + (_x) * USB_OTG_FIFO_SIZE)) static TU_ATTR_ALIGNED(4) uint32_t _setup_packet[6]; static uint8_t _setup_offs; // We store up to 3 setup packets. diff --git a/src/tusb_option.h b/src/tusb_option.h index eccb4245c..9aacb558f 100644 --- a/src/tusb_option.h +++ b/src/tusb_option.h @@ -35,6 +35,8 @@ /** \defgroup group_mcu Supported MCU
* \ref CFG_TUSB_MCU must be defined to one of these
* @{ */
+
+// LPC
#define OPT_MCU_LPC11UXX 1 ///< NXP LPC11Uxx
#define OPT_MCU_LPC13XX 3 ///< NXP LPC13xx
#define OPT_MCU_LPC175X_6X 4 ///< NXP LPC175x, LPC176x
@@ -46,12 +48,14 @@ #define OPT_MCU_LPC54XXX 10 ///< NXP LPC54xxx
#define OPT_MCU_LPC55XX 11 ///< NXP LPC55xx
+// NRF
#define OPT_MCU_NRF5X 100 ///< Nordic nRF5x series
+// SAM
#define OPT_MCU_SAMD21 200 ///< MicroChip SAMD21
#define OPT_MCU_SAMD51 201 ///< MicroChip SAMD51
-// ST Synopsis OTG devices
+// STM32
#define OPT_MCU_STM32F0 300 ///< ST STM32F0
#define OPT_MCU_STM32F1 301 ///< ST STM32F1
#define OPT_MCU_STM32F2 302 ///< ST STM32F2
@@ -59,7 +63,9 @@ #define OPT_MCU_STM32F4 304 ///< ST STM32F4
#define OPT_MCU_STM32F7 305 ///< ST STM32F7
#define OPT_MCU_STM32H7 306 ///< ST STM32H7
-
+#define OPT_MCU_STM32L0 307 ///< ST STM32L0
+#define OPT_MCU_STM32L1 308 ///< ST STM32L1
+#define OPT_MCU_STM32L4 309 ///< ST STM32L4
/** @} */
|
