Skip to content

Commit 2bbf9e0

Browse files
committed
refactor: extract fnusb_reset_subdevice()
Signed-off-by: Benn Snyder <[email protected]>
1 parent 0dc3507 commit 2bbf9e0

File tree

1 file changed

+19
-24
lines changed

1 file changed

+19
-24
lines changed

src/usb_libusb10.c

Lines changed: 19 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -400,19 +400,29 @@ FN_INTERNAL int fnusb_keep_alive_led(freenect_context* ctx, libusb_device* audio
400400
return res;
401401
}
402402

403+
FN_INTERNAL void fnusb_reset_subdevice(fnusb_dev* dev, freenect_device* parent)
404+
{
405+
if (dev) {
406+
if (dev->dev) {
407+
libusb_release_interface(dev->dev, 0);
408+
libusb_attach_kernel_driver(dev->dev, 0);
409+
libusb_close(dev->dev);
410+
dev->dev = NULL;
411+
}
412+
dev->parent = parent;
413+
}
414+
}
415+
403416
FN_INTERNAL int fnusb_open_subdevices(freenect_device *dev, int index)
404417
{
405418
freenect_context *ctx = dev->parent;
406419

407420
dev->device_does_motor_control_with_audio = 0;
408421
dev->motor_control_with_audio_enabled = 0;
409422

410-
dev->usb_cam.parent = dev;
411-
dev->usb_cam.dev = NULL;
412-
dev->usb_motor.parent = dev;
413-
dev->usb_motor.dev = NULL;
414-
dev->usb_audio.parent = dev;
415-
dev->usb_audio.dev = NULL;
423+
fnusb_reset_subdevice(&dev->usb_cam, dev);
424+
fnusb_reset_subdevice(&dev->usb_motor, dev);
425+
fnusb_reset_subdevice(&dev->usb_audio, dev);
416426

417427
libusb_device **devs; // pointer to pointer of device, used to retrieve a list of devices
418428
ssize_t count = libusb_get_device_list (dev->parent->usb.ctx, &devs); //get the list of devices
@@ -724,24 +734,9 @@ FN_INTERNAL int fnusb_open_subdevices(freenect_device *dev, int index)
724734

725735
FN_INTERNAL int fnusb_close_subdevices(freenect_device *dev)
726736
{
727-
if (dev->usb_cam.dev) {
728-
libusb_release_interface(dev->usb_cam.dev, 0);
729-
#ifndef _WIN32
730-
libusb_attach_kernel_driver(dev->usb_cam.dev, 0);
731-
#endif
732-
libusb_close(dev->usb_cam.dev);
733-
dev->usb_cam.dev = NULL;
734-
}
735-
if (dev->usb_motor.dev) {
736-
libusb_release_interface(dev->usb_motor.dev, 0);
737-
libusb_close(dev->usb_motor.dev);
738-
dev->usb_motor.dev = NULL;
739-
}
740-
if (dev->usb_audio.dev) {
741-
libusb_release_interface(dev->usb_audio.dev, 0);
742-
libusb_close(dev->usb_audio.dev);
743-
dev->usb_audio.dev = NULL;
744-
}
737+
fnusb_reset_subdevice(&dev->usb_cam, dev);
738+
fnusb_reset_subdevice(&dev->usb_motor, dev);
739+
fnusb_reset_subdevice(&dev->usb_audio, dev);
745740
return 0;
746741
}
747742

0 commit comments

Comments
 (0)