summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorhathach <[email protected]>2019-09-13 13:14:18 +0700
committerGitHub <[email protected]>2019-09-13 13:14:18 +0700
commit9e96c100146e4a09806d587545cd3929714f1314 (patch)
tree799cb93dd695349a7a486409743a0b9ac7351a7d /src
parenta00ea9a11d4817e4e15e22e35d11920170e08111 (diff)
parentc3598f030158cf32f571a3c11b833a3a910d63c8 (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.c51
-rw-r--r--src/portable/st/synopsys/dcd_synopsys.c30
-rw-r--r--src/tusb_option.h10
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
/** @} */