mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-03-26 02:37:41 +00:00
winusb: extract usb_sco_[un]register_buffers, make sure to call after setting alternative setting
This commit is contained in:
parent
99fc8027cd
commit
c4cea4ae2b
@ -328,6 +328,30 @@ static void sco_ring_init(void){
|
|||||||
static int sco_ring_have_space(void){
|
static int sco_ring_have_space(void){
|
||||||
return sco_ring_transfers_active < SCO_RING_BUFFER_COUNT;
|
return sco_ring_transfers_active < SCO_RING_BUFFER_COUNT;
|
||||||
}
|
}
|
||||||
|
static void usb_sco_register_buffers(void){
|
||||||
|
BOOL result;
|
||||||
|
result = WinUsb_RegisterIsochBuffer(usb_interface_1_handle, sco_in_addr, hci_sco_in_buffer, sizeof(hci_sco_in_buffer), &hci_sco_in_buffer_handle);
|
||||||
|
if (!result) {
|
||||||
|
log_error("usb_sco_register_buffers: register in buffer failed, error %lu", GetLastError());
|
||||||
|
}
|
||||||
|
log_info("hci_sco_in_buffer_handle %p", hci_sco_in_buffer_handle);
|
||||||
|
|
||||||
|
result = WinUsb_RegisterIsochBuffer(usb_interface_1_handle, sco_out_addr, sco_ring_buffer, sizeof(sco_ring_buffer), &hci_sco_out_buffer_handle);
|
||||||
|
if (!result) {
|
||||||
|
log_error("usb_sco_unregister_buffers: register out buffer failed, error %lu", GetLastError());
|
||||||
|
}
|
||||||
|
log_info("hci_sco_out_buffer_handle %p", hci_sco_out_buffer_handle);
|
||||||
|
}
|
||||||
|
static void usb_sco_unregister_buffers(void){
|
||||||
|
if (hci_sco_in_buffer_handle){
|
||||||
|
WinUsb_UnregisterIsochBuffer(hci_sco_in_buffer_handle);
|
||||||
|
hci_sco_in_buffer_handle = NULL;
|
||||||
|
}
|
||||||
|
if (hci_sco_out_buffer_handle){
|
||||||
|
WinUsb_UnregisterIsochBuffer(hci_sco_out_buffer_handle);
|
||||||
|
hci_sco_out_buffer_handle = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void usb_register_packet_handler(void (*handler)(uint8_t packet_type, uint8_t *packet, uint16_t size)){
|
static void usb_register_packet_handler(void (*handler)(uint8_t packet_type, uint8_t *packet, uint16_t size)){
|
||||||
@ -358,14 +382,7 @@ static void usb_free_resources(void){
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef ENABLE_SCO_OVER_HCI
|
#ifdef ENABLE_SCO_OVER_HCI
|
||||||
if (hci_sco_in_buffer_handle){
|
usb_sco_unregister_buffers();
|
||||||
WinUsb_UnregisterIsochBuffer(hci_sco_in_buffer_handle);
|
|
||||||
hci_sco_in_buffer_handle = NULL;
|
|
||||||
}
|
|
||||||
if (hci_sco_out_buffer_handle){
|
|
||||||
WinUsb_UnregisterIsochBuffer(hci_sco_out_buffer_handle);
|
|
||||||
hci_sco_out_buffer_handle = NULL;
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -786,6 +803,7 @@ exit_on_error:
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef ENABLE_SCO_OVER_HCI
|
#ifdef ENABLE_SCO_OVER_HCI
|
||||||
|
|
||||||
static int usb_sco_start(void){
|
static int usb_sco_start(void){
|
||||||
printf("usb_sco_start\n");
|
printf("usb_sco_start\n");
|
||||||
log_info("usb_sco_start");
|
log_info("usb_sco_start");
|
||||||
@ -899,10 +917,10 @@ static int usb_try_open_device(const char * device_path){
|
|||||||
if (!result) goto exit_on_error;
|
if (!result) goto exit_on_error;
|
||||||
log_info("Claiming interface 1: success");
|
log_info("Claiming interface 1: success");
|
||||||
|
|
||||||
log_info("Switching to setting %u on interface 1..", ALT_SETTING);
|
// log_info("Switching to setting %u on interface 1..", ALT_SETTING);
|
||||||
// WinUsb_SetCurrentAlternateSetting returns TRUE if the operation succeeds.
|
// // WinUsb_SetCurrentAlternateSetting returns TRUE if the operation succeeds.
|
||||||
result = WinUsb_SetCurrentAlternateSetting(usb_interface_1_handle, ALT_SETTING);
|
// result = WinUsb_SetCurrentAlternateSetting(usb_interface_1_handle, ALT_SETTING);
|
||||||
if (!result) goto exit_on_error;
|
// if (!result) goto exit_on_error;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
result = usb_scan_for_bluetooth_endpoints();
|
result = usb_scan_for_bluetooth_endpoints();
|
||||||
@ -918,14 +936,6 @@ static int usb_try_open_device(const char * device_path){
|
|||||||
memset(hci_sco_packet_descriptors, 0, sizeof(hci_sco_packet_descriptors));
|
memset(hci_sco_packet_descriptors, 0, sizeof(hci_sco_packet_descriptors));
|
||||||
log_info("Size of packet descriptors for SCO IN%u", (int) sizeof(hci_sco_packet_descriptors));
|
log_info("Size of packet descriptors for SCO IN%u", (int) sizeof(hci_sco_packet_descriptors));
|
||||||
|
|
||||||
result = WinUsb_RegisterIsochBuffer(usb_interface_1_handle, sco_in_addr, hci_sco_in_buffer, sizeof(hci_sco_in_buffer), &hci_sco_in_buffer_handle);
|
|
||||||
if (!result) goto exit_on_error;
|
|
||||||
log_info("hci_sco_in_buffer_handle %p", hci_sco_in_buffer_handle);
|
|
||||||
|
|
||||||
result = WinUsb_RegisterIsochBuffer(usb_interface_1_handle, sco_out_addr, sco_ring_buffer, sizeof(sco_ring_buffer), &hci_sco_out_buffer_handle);
|
|
||||||
if (!result) goto exit_on_error;
|
|
||||||
log_info("hci_sco_out_buffer_handle %p", hci_sco_out_buffer_handle);
|
|
||||||
|
|
||||||
// setup async io && btstack handler
|
// setup async io && btstack handler
|
||||||
memset(&usb_overlapped_sco_in, 0, sizeof(usb_overlapped_sco_in));
|
memset(&usb_overlapped_sco_in, 0, sizeof(usb_overlapped_sco_in));
|
||||||
for (i=0;i<ISOC_BUFFERS;i++){
|
for (i=0;i<ISOC_BUFFERS;i++){
|
||||||
@ -977,6 +987,16 @@ static int usb_try_open_device(const char * device_path){
|
|||||||
// submit all incoming transfers
|
// submit all incoming transfers
|
||||||
usb_submit_event_in_transfer();
|
usb_submit_event_in_transfer();
|
||||||
usb_submit_acl_in_transfer();
|
usb_submit_acl_in_transfer();
|
||||||
|
|
||||||
|
#ifdef ENABLE_SCO_OVER_HCI
|
||||||
|
log_info("Switching to setting %u on interface 1..", ALT_SETTING);
|
||||||
|
// WinUsb_SetCurrentAlternateSetting returns TRUE if the operation succeeds.
|
||||||
|
result = WinUsb_SetCurrentAlternateSetting(usb_interface_1_handle, ALT_SETTING);
|
||||||
|
if (!result) goto exit_on_error;
|
||||||
|
|
||||||
|
usb_sco_register_buffers();
|
||||||
|
#endif
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
exit_on_error:
|
exit_on_error:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user