From dde5e942338322117fa8e30f2531369ce0046f91 Mon Sep 17 00:00:00 2001 From: dylad Date: Sat, 5 Dec 2020 11:51:46 +0100 Subject: [PATCH] usbus: add optional string descriptor for alt interface --- sys/include/usb/usbus.h | 1 + sys/usb/usbus/usbus_fmt.c | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/sys/include/usb/usbus.h b/sys/include/usb/usbus.h index 1e5a8c727f..aaa9fbd4cb 100644 --- a/sys/include/usb/usbus.h +++ b/sys/include/usb/usbus.h @@ -294,6 +294,7 @@ typedef struct usbus_interface_alt { descriptor generators */ usbus_endpoint_t *ep; /**< List of associated endpoints for this alternative setting */ + usbus_string_t *descr; /**< Descriptor string */ } usbus_interface_alt_t; /** diff --git a/sys/usb/usbus/usbus_fmt.c b/sys/usb/usbus/usbus_fmt.c index aced79cc11..5584de185f 100644 --- a/sys/usb/usbus/usbus_fmt.c +++ b/sys/usb/usbus/usbus_fmt.c @@ -205,6 +205,13 @@ static size_t _fmt_descriptors_iface_alts(usbus_t *usbus, len += sizeof(usb_descriptor_interface_t); usb_iface.alternate_setting = alts++; usb_iface.num_endpoints = _num_endpoints_alt(alt); + if (alt->descr) { + usb_iface.idx = alt->descr->idx; + } else { + /* If there is no string descriptor for a given alt interface + set the index to 0 to advertise it */ + usb_iface.idx = 0; + } usbus_control_slicer_put_bytes(usbus, (uint8_t *)&usb_iface, sizeof(usb_descriptor_interface_t)); len += _fmt_descriptors_post(usbus, alt->descr_gen);