diff --git a/firmware/hackrf_usb/usb_queue.c b/firmware/hackrf_usb/usb_queue.c index ed0e4a6e..91511885 100644 --- a/firmware/hackrf_usb/usb_queue.c +++ b/firmware/hackrf_usb/usb_queue.c @@ -131,10 +131,12 @@ static usb_transfer_t* endpoint_pop_transfer( void usb_transfer_schedule_wait( const usb_endpoint_t* const endpoint, void* const data, - const uint32_t maximum_length + const uint32_t maximum_length, + const transfer_completion_cb completion_cb ) { usb_transfer_t* const transfer = allocate_transfer(); fill_in_transfer(transfer, data, maximum_length); + transfer->completion_cb = completion_cb; endpoint_add_transfer(endpoint, transfer); usb_endpoint_schedule_wait(endpoint, &transfer->td); } @@ -142,11 +144,13 @@ void usb_transfer_schedule_wait( void usb_transfer_schedule_append( const usb_endpoint_t* const endpoint, void* const data, - const uint32_t maximum_length + const uint32_t maximum_length, + const transfer_completion_cb completion_cb ) { usb_transfer_t* const transfer = allocate_transfer(); uint_fast8_t index = USB_ENDPOINT_INDEX(endpoint->address); fill_in_transfer(transfer, data, maximum_length); + transfer->completion_cb = completion_cb; // TODO: disable_interrupts(); usb_transfer_t* tail = endpoint_transfers[index]; for (; tail->next != NULL; tail = tail->next); @@ -158,7 +162,7 @@ void usb_transfer_schedule_append( void usb_transfer_schedule_ack( const usb_endpoint_t* const endpoint ) { - usb_transfer_schedule_wait(endpoint, 0, 0); + usb_transfer_schedule_wait(endpoint, 0, 0, NULL); } void usb_queue_transfer_complete(usb_endpoint_t* const endpoint) diff --git a/firmware/hackrf_usb/usb_queue.h b/firmware/hackrf_usb/usb_queue.h index 3963f15d..cec51fb3 100644 --- a/firmware/hackrf_usb/usb_queue.h +++ b/firmware/hackrf_usb/usb_queue.h @@ -40,13 +40,15 @@ void usb_endpoint_schedule( void usb_transfer_schedule_wait( const usb_endpoint_t* const endpoint, void* const data, - const uint32_t maximum_length + const uint32_t maximum_length, + const transfer_completion_cb completion_cb ); void usb_transfer_schedule_append( const usb_endpoint_t* const endpoint, void* const data, - const uint32_t maximum_length + const uint32_t maximum_length, + const transfer_completion_cb completion_cb ); void usb_transfer_schedule_ack(