From 7b8feef3268eed1a5b9ec9e4f79382b95071d4cf Mon Sep 17 00:00:00 2001 From: dylad Date: Fri, 4 Dec 2020 21:54:36 +0100 Subject: [PATCH 1/2] usbus: add usbus_add_interface_alt helper function --- sys/include/usb/usbus.h | 9 +++++++++ sys/usb/usbus/usbus.c | 10 ++++++++++ 2 files changed, 19 insertions(+) diff --git a/sys/include/usb/usbus.h b/sys/include/usb/usbus.h index 1e5a8c727f..ec62f868d5 100644 --- a/sys/include/usb/usbus.h +++ b/sys/include/usb/usbus.h @@ -449,6 +449,15 @@ uint16_t usbus_add_string_descriptor(usbus_t *usbus, usbus_string_t *desc, */ uint16_t usbus_add_interface(usbus_t *usbus, usbus_interface_t *iface); +/** + * @brief Add alternate settings to a given interface + * + * @param[in] iface USB interface + * @param[in] alt alternate settings interface to add + */ +void usbus_add_interface_alt(usbus_interface_t *iface, + usbus_interface_alt_t *alt); + /** * @brief Find an endpoint from an interface based on the endpoint properties * diff --git a/sys/usb/usbus/usbus.c b/sys/usb/usbus/usbus.c index 84a5437e1b..8304134815 100644 --- a/sys/usb/usbus/usbus.c +++ b/sys/usb/usbus/usbus.c @@ -121,6 +121,16 @@ uint16_t usbus_add_interface(usbus_t *usbus, usbus_interface_t *iface) return idx; } +void usbus_add_interface_alt(usbus_interface_t *iface, + usbus_interface_alt_t *alt) +{ + usbus_interface_alt_t **last = &iface->alts; + while (*last) { + last = &(*last)->next; + } + *last = alt; +} + void usbus_register_event_handler(usbus_t *usbus, usbus_handler_t *handler) { /* See note above for reasons against clist.h */ From 4b438c2cc01f38efda08e4578e9b2cb6dc5ed136 Mon Sep 17 00:00:00 2001 From: dylad Date: Fri, 4 Dec 2020 21:59:33 +0100 Subject: [PATCH 2/2] usb/cdc_ecm: use add_interface_alt helper function --- sys/usb/usbus/cdc/ecm/cdc_ecm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sys/usb/usbus/cdc/ecm/cdc_ecm.c b/sys/usb/usbus/cdc/ecm/cdc_ecm.c index f4da67efb9..f580209e03 100644 --- a/sys/usb/usbus/cdc/ecm/cdc_ecm.c +++ b/sys/usb/usbus/cdc/ecm/cdc_ecm.c @@ -229,7 +229,7 @@ static void _init(usbus_t *usbus, usbus_handler_t *handler) usbus_add_interface(usbus, &cdcecm->iface_ctrl); usbus_add_interface(usbus, &cdcecm->iface_data); - cdcecm->iface_data.alts = &cdcecm->iface_data_alt; + usbus_add_interface_alt(&cdcecm->iface_data, &cdcecm->iface_data_alt); usbus_enable_endpoint(cdcecm->ep_out); usbus_enable_endpoint(cdcecm->ep_in);