aboutsummaryrefslogtreecommitdiff
path: root/ports/stm32/usbdev/class/src
diff options
context:
space:
mode:
authorAndrew Leech2019-04-26 16:31:49 +1000
committerDamien George2019-04-28 21:31:47 +1000
commit70a28e3ad9a251e77f0fa2da643f014044035a36 (patch)
tree3cc127f8344c68c4395fefcdc1e8ed9ab6b89062 /ports/stm32/usbdev/class/src
parent0646e607b537b43901db53c743ec2011a375f5e2 (diff)
stm32/usb: Add USB device mode for VCP+VCP without MSC.
Selectable via pyb.usb_mode('VCP+VCP').
Diffstat (limited to 'ports/stm32/usbdev/class/src')
-rw-r--r--ports/stm32/usbdev/class/src/usbd_cdc_msc_hid.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/ports/stm32/usbdev/class/src/usbd_cdc_msc_hid.c b/ports/stm32/usbdev/class/src/usbd_cdc_msc_hid.c
index 78ad72056..47436a4b6 100644
--- a/ports/stm32/usbdev/class/src/usbd_cdc_msc_hid.c
+++ b/ports/stm32/usbdev/class/src/usbd_cdc_msc_hid.c
@@ -62,6 +62,7 @@
#define CDC_IFACE_NUM_ALONE (0)
#define CDC_IFACE_NUM_WITH_MSC (1)
+#define CDC2_IFACE_NUM_WITH_CDC (2)
#define CDC2_IFACE_NUM_WITH_MSC (3)
#define CDC_IFACE_NUM_WITH_HID (1)
#define MSC_IFACE_NUM_WITH_CDC (0)
@@ -474,6 +475,18 @@ int USBD_SelectMode(usbd_cdc_msc_hid_state_t *usbd, uint32_t mode, USBD_HID_Mode
break;
#if MICROPY_HW_USB_ENABLE_CDC2
+ case USBD_MODE_CDC2: {
+ // Ensure the first interface is also enabled
+ usbd->usbd_mode |= USBD_MODE_CDC;
+
+ n += make_cdc_desc(d + n, 1, CDC_IFACE_NUM_ALONE);
+ n += make_cdc_desc_ep(d + n, 1, CDC2_IFACE_NUM_WITH_CDC, CDC2_CMD_EP, CDC2_OUT_EP, CDC2_IN_EP);
+ usbd->cdc->iface_num = CDC_IFACE_NUM_ALONE;
+ usbd->cdc2->iface_num = CDC2_IFACE_NUM_WITH_CDC;
+ num_itf = 4;
+ break;
+ }
+
case USBD_MODE_CDC2_MSC: {
n += make_msc_desc(d + n);
n += make_cdc_desc(d + n, 1, CDC_IFACE_NUM_WITH_MSC);