diff --git a/firmware/common/usb.c b/firmware/common/usb.c index 0a36af42..6cbb3296 100644 --- a/firmware/common/usb.c +++ b/firmware/common/usb.c @@ -44,7 +44,7 @@ usb_queue_head_t* usb_queue_head( return &usb_qh[USB_QH_INDEX(endpoint_address)]; } -static usb_endpoint_t* usb_endpoint_from_address( +usb_endpoint_t* usb_endpoint_from_address( const uint_fast8_t endpoint_address ) { return (usb_endpoint_t*)usb_queue_head(endpoint_address)->_reserved_0; diff --git a/firmware/common/usb.h b/firmware/common/usb.h index dcc2d876..69190517 100644 --- a/firmware/common/usb.h +++ b/firmware/common/usb.h @@ -58,6 +58,10 @@ void usb_set_address_deferred( const uint_fast8_t address ); +usb_endpoint_t* usb_endpoint_from_address( + const uint_fast8_t endpoint_address +); + void usb_endpoint_init( const usb_endpoint_t* const endpoint ); diff --git a/firmware/common/usb_standard_request.c b/firmware/common/usb_standard_request.c index 7444368b..b9e1e9fd 100644 --- a/firmware/common/usb_standard_request.c +++ b/firmware/common/usb_standard_request.c @@ -369,9 +369,12 @@ static usb_request_status_t usb_standard_request_get_status( static usb_request_status_t usb_standard_request_clear_feature_setup( usb_endpoint_t* const endpoint) { + switch (endpoint->setup.value) { case USB_FEATURE_SELECTOR_ENDPOINT_HALT: - usb_endpoint_reset_data_toggle(endpoint); + usb_endpoint_reset_data_toggle( + usb_endpoint_from_address(endpoint->setup.index) + ); return USB_REQUEST_STATUS_OK; default: return USB_REQUEST_STATUS_STALL;