Make libhackrf honour the valid_length set by TX callback.

This commit is contained in:
Martin Ling
2022-09-14 15:44:48 +01:00
parent 9905e960a4
commit 22846b5682

View File

@ -359,6 +359,8 @@ static int prepare_transfers(
.tx_ctx = device->tx_ctx, .tx_ctx = device->tx_ctx,
}; };
if (device->callback(&transfer) == 0) { if (device->callback(&transfer) == 0) {
device->transfers[transfer_index]->length =
transfer.valid_length;
ready_transfers++; ready_transfers++;
} else { } else {
break; break;
@ -1791,7 +1793,7 @@ hackrf_libusb_transfer_callback(struct libusb_transfer* usb_transfer)
hackrf_transfer transfer = { hackrf_transfer transfer = {
.device = device, .device = device,
.buffer = usb_transfer->buffer, .buffer = usb_transfer->buffer,
.buffer_length = usb_transfer->length, .buffer_length = TRANSFER_BUFFER_SIZE,
.valid_length = usb_transfer->actual_length, .valid_length = usb_transfer->actual_length,
.rx_ctx = device->rx_ctx, .rx_ctx = device->rx_ctx,
.tx_ctx = device->tx_ctx}; .tx_ctx = device->tx_ctx};
@ -1803,6 +1805,9 @@ hackrf_libusb_transfer_callback(struct libusb_transfer* usb_transfer)
pthread_mutex_lock(&device->transfer_lock); pthread_mutex_lock(&device->transfer_lock);
if ((resubmit = device->transfers_setup)) { if ((resubmit = device->transfers_setup)) {
if (usb_transfer->endpoint == TX_ENDPOINT_ADDRESS) {
usb_transfer->length = transfer.valid_length;
}
result = libusb_submit_transfer(usb_transfer); result = libusb_submit_transfer(usb_transfer);
} }