From 432b65f17849fdc94a96df4fd7db490257bd0a2c Mon Sep 17 00:00:00 2001 From: Koen De Vleeschauwer Date: Thu, 15 Oct 2020 12:51:52 +0200 Subject: [PATCH] stm32/usb: Expose USB HID device instance via usbd_hid_get(). This is needed to implement a HID device in user C modules. --- ports/stm32/usb.c | 18 ++++++++++++++++++ ports/stm32/usbd_hid_interface.h | 2 ++ 2 files changed, 20 insertions(+) diff --git a/ports/stm32/usb.c b/ports/stm32/usb.c index 9a9600f89d..cf9faed112 100644 --- a/ports/stm32/usb.c +++ b/ports/stm32/usb.c @@ -367,6 +367,24 @@ usbd_cdc_itf_t *usb_vcp_get(int idx) { return &usb_device.usbd_cdc_itf[idx]; } +#if MICROPY_HW_USB_HID + +// return hid interface if hid is configured, NULL otherwise +usbd_hid_itf_t *usbd_hid_get(void) { + #if defined(USE_HOST_MODE) + return NULL; + #else + uint8_t usb_mode = USBD_GetMode(&usb_device.usbd_cdc_msc_hid_state) & USBD_MODE_IFACE_MASK; + if (usb_mode == USBD_MODE_HID || usb_mode == USBD_MODE_CDC_HID || usb_mode == USBD_MODE_MSC_HID) { + return &usb_device.usbd_hid_itf; + } else { + return NULL; + } + #endif +} + +#endif + /******************************************************************************/ // MicroPython bindings for USB diff --git a/ports/stm32/usbd_hid_interface.h b/ports/stm32/usbd_hid_interface.h index 5d2c9ad870..b97d273f15 100644 --- a/ports/stm32/usbd_hid_interface.h +++ b/ports/stm32/usbd_hid_interface.h @@ -16,6 +16,8 @@ typedef struct _usbd_hid_itf_t { uint8_t report_in_buf[HID_DATA_FS_MAX_PACKET_SIZE]; } usbd_hid_itf_t; +usbd_hid_itf_t *usbd_hid_get(void); + static inline int usbd_hid_rx_num(usbd_hid_itf_t *hid) { return hid->report_in_len != USBD_HID_REPORT_INVALID; }