summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ports/stm32/usb.c18
-rw-r--r--ports/stm32/usbd_hid_interface.h2
2 files changed, 20 insertions, 0 deletions
diff --git a/ports/stm32/usb.c b/ports/stm32/usb.c
index 9a9600f89..cf9faed11 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 5d2c9ad87..b97d273f1 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;
}