libusb: dynamically set alternate setting for interface #1

This commit is contained in:
Matthias Ringwald 2017-01-19 17:55:42 +01:00
parent 56e558dbc2
commit 2117d3a5b1

View File

@ -788,6 +788,13 @@ static int usb_sco_start(void){
sco_state_machine_init(); sco_state_machine_init();
sco_ring_init(); sco_ring_init();
log_info("Switching to setting %u on interface 1..", ALT_SETTING);
int r = libusb_set_interface_alt_setting(handle, 1, ALT_SETTING);
if (r < 0) {
log_error("Error setting alternative setting %u for interface 1: %s\n", ALT_SETTING, libusb_error_name(r));
return r;
}
// incoming // incoming
int c; int c;
for (c = 0 ; c < SCO_IN_BUFFER_COUNT ; c++) { for (c = 0 ; c < SCO_IN_BUFFER_COUNT ; c++) {
@ -800,7 +807,7 @@ static int usb_sco_start(void){
libusb_fill_iso_transfer(sco_in_transfer[c], handle, sco_in_addr, libusb_fill_iso_transfer(sco_in_transfer[c], handle, sco_in_addr,
hci_sco_in_buffer[c], SCO_PACKET_SIZE, NUM_ISO_PACKETS, async_callback, NULL, 0); hci_sco_in_buffer[c], SCO_PACKET_SIZE, NUM_ISO_PACKETS, async_callback, NULL, 0);
libusb_set_iso_packet_lengths(sco_in_transfer[c], ISO_PACKET_SIZE); libusb_set_iso_packet_lengths(sco_in_transfer[c], ISO_PACKET_SIZE);
int r = libusb_submit_transfer(sco_in_transfer[c]); r = libusb_submit_transfer(sco_in_transfer[c]);
if (r) { if (r) {
log_error("Error submitting isochronous in transfer %d", r); log_error("Error submitting isochronous in transfer %d", r);
usb_close(); usb_close();
@ -867,6 +874,14 @@ static void usb_sco_stop(void){
} }
sco_shutdown = 0; sco_shutdown = 0;
libusb_set_debug(NULL, LIBUSB_LOG_LEVEL_WARNING); libusb_set_debug(NULL, LIBUSB_LOG_LEVEL_WARNING);
log_info("Switching to setting %u on interface 1..", 0);
int r = libusb_set_interface_alt_setting(handle, 1, 0);
if (r < 0) {
log_error("Error setting alternative setting %u for interface 1: %s", 0, libusb_error_name(r));
return;
}
printf("usb_sco_stop done\n"); printf("usb_sco_stop done\n");
} }