Expose function to find a USB device
The device was automatically found by sc_usb_connect(). Instead, expose a function to find a device from a serial, and let the caller connect to the device found (if any). This will allow to list all devices first, then select one device to connect to. PR #2974 <https://github.com/Genymobile/scrcpy/pull/2974>
This commit is contained in:
parent
1ab3692f3d
commit
0ee9e2ff51
3 changed files with 19 additions and 14 deletions
|
@ -431,7 +431,17 @@ scrcpy(struct scrcpy_options *options) {
|
||||||
goto aoa_hid_end;
|
goto aoa_hid_end;
|
||||||
}
|
}
|
||||||
|
|
||||||
ok = sc_usb_connect(&s->usb, serial);
|
assert(serial);
|
||||||
|
libusb_device *device = sc_usb_find_device(&s->usb, serial);
|
||||||
|
if (!device) {
|
||||||
|
LOGE("Could not find USB device %s", serial);
|
||||||
|
sc_usb_destroy(&s->usb);
|
||||||
|
sc_acksync_destroy(&s->acksync);
|
||||||
|
goto aoa_hid_end;
|
||||||
|
}
|
||||||
|
|
||||||
|
ok = sc_usb_connect(&s->usb, device);
|
||||||
|
libusb_unref_device(device);
|
||||||
if (!ok) {
|
if (!ok) {
|
||||||
LOGE("Failed to connect to USB device %s", serial);
|
LOGE("Failed to connect to USB device %s", serial);
|
||||||
sc_usb_destroy(&s->usb);
|
sc_usb_destroy(&s->usb);
|
||||||
|
|
|
@ -57,8 +57,10 @@ accept_device(libusb_device *device, const char *serial) {
|
||||||
return matches;
|
return matches;
|
||||||
}
|
}
|
||||||
|
|
||||||
static libusb_device *
|
libusb_device *
|
||||||
sc_usb_find_device(struct sc_usb *usb, const char *serial) {
|
sc_usb_find_device(struct sc_usb *usb, const char *serial) {
|
||||||
|
assert(serial);
|
||||||
|
|
||||||
libusb_device **list;
|
libusb_device **list;
|
||||||
libusb_device *result = NULL;
|
libusb_device *result = NULL;
|
||||||
ssize_t count = libusb_get_device_list(usb->context, &list);
|
ssize_t count = libusb_get_device_list(usb->context, &list);
|
||||||
|
@ -103,19 +105,9 @@ sc_usb_destroy(struct sc_usb *usb) {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
sc_usb_connect(struct sc_usb *usb, const char *serial) {
|
sc_usb_connect(struct sc_usb *usb, libusb_device *device) {
|
||||||
assert(serial);
|
|
||||||
|
|
||||||
libusb_device *device = sc_usb_find_device(usb, serial);
|
|
||||||
if (!device) {
|
|
||||||
LOGW("USB device %s not found", serial);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
usb->handle = sc_usb_open_handle(device);
|
usb->handle = sc_usb_open_handle(device);
|
||||||
libusb_unref_device(device);
|
|
||||||
if (!usb->handle) {
|
if (!usb->handle) {
|
||||||
LOGW("Could not open USB device %s", serial);
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -17,8 +17,11 @@ sc_usb_init(struct sc_usb *usb);
|
||||||
void
|
void
|
||||||
sc_usb_destroy(struct sc_usb *usb);
|
sc_usb_destroy(struct sc_usb *usb);
|
||||||
|
|
||||||
|
libusb_device *
|
||||||
|
sc_usb_find_device(struct sc_usb *usb, const char *serial);
|
||||||
|
|
||||||
bool
|
bool
|
||||||
sc_usb_connect(struct sc_usb *usb, const char *serial);
|
sc_usb_connect(struct sc_usb *usb, libusb_device *device);
|
||||||
|
|
||||||
void
|
void
|
||||||
sc_usb_disconnect(struct sc_usb *usb);
|
sc_usb_disconnect(struct sc_usb *usb);
|
||||||
|
|
Loading…
Reference in a new issue