From 2a40bfa446a1410912ff842ceb60020cf90de847 Mon Sep 17 00:00:00 2001 From: kauwua <66674723+kauwua@users.noreply.github.com> Date: Tue, 14 Jan 2025 15:31:07 +0100 Subject: [PATCH 1/2] Fix wrong bit set for IN transfers --- hydradancer/firmware_hydradancer/User/usb_control_handlers.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hydradancer/firmware_hydradancer/User/usb_control_handlers.h b/hydradancer/firmware_hydradancer/User/usb_control_handlers.h index 647026d..ce60429 100644 --- a/hydradancer/firmware_hydradancer/User/usb_control_handlers.h +++ b/hydradancer/firmware_hydradancer/User/usb_control_handlers.h @@ -96,7 +96,7 @@ static bool _usb_control_endp_rx_callback(uint8_t* data) break; } endp_tx_set_new_buffer(&usb_device_0, endpoint_mapping_reverse[ep_queue_member->ep_num], ep_queue_member->ptr, ep_queue_member->size); - hydradancer_status_set_in(endpoint_mapping_reverse[ep_queue_member->ep_num]); + hydradancer_status_clear_in(endpoint_mapping_reverse[ep_queue_member->ep_num]); return true; } From ef5b27ef61ed1d439b4bbd3524e9ce63213cc043 Mon Sep 17 00:00:00 2001 From: kauwua <66674723+kauwua@users.noreply.github.com> Date: Tue, 14 Jan 2025 15:31:07 +0100 Subject: [PATCH 2/2] Handle CLEAR_HALT --- .../firmware_hydradancer/User/definitions.h | 1 + .../User/usb_control_handlers.h | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/hydradancer/firmware_hydradancer/User/definitions.h b/hydradancer/firmware_hydradancer/User/definitions.h index 3d7fa8f..2cc20ae 100644 --- a/hydradancer/firmware_hydradancer/User/definitions.h +++ b/hydradancer/firmware_hydradancer/User/definitions.h @@ -31,6 +31,7 @@ #define CHECK_HYDRADANCER_READY 57 #define DO_BUS_RESET 58 #define CONFIGURED 59 +#define CLEAR_HALT 60 #define EVENT_BUS_RESET 0x0 #define EVENT_IN_BUFFER_AVAILABLE 0x1 diff --git a/hydradancer/firmware_hydradancer/User/usb_control_handlers.h b/hydradancer/firmware_hydradancer/User/usb_control_handlers.h index ce60429..541a275 100644 --- a/hydradancer/firmware_hydradancer/User/usb_control_handlers.h +++ b/hydradancer/firmware_hydradancer/User/usb_control_handlers.h @@ -198,6 +198,22 @@ uint16_t usb_control_endp0_user_handled_control_request(USB_SETUP* request, uint } return 0; } + else if (request->bRequest == CLEAR_HALT) + { + LOG("CLEAR_HALT ep %d dir %d \r\n", request->wValue.bw.bb1, request->wValue.bw.bb0); + + uint32_t ep = 0; + if (request->wValue.bw.bb0 == 0) + { + ep = 1U << ((request->wValue.bw.bb1 - 1) * 2 + 1); + } + else + { + ep = 1U << ((request->wValue.bw.bb1 - 1) * 2); + } + usb2_setup_endpoints_in_mask(ep); + return 0; + } else if (request->bRequest == CHECK_HYDRADANCER_READY) { *buf = (uint8_t*)&boards_ready;