Skip to content

Commit b85947e

Browse files
committed
extract fnusb_reset_subdevice()
1 parent 1e03018 commit b85947e

File tree

1 file changed

+18
-24
lines changed

1 file changed

+18
-24
lines changed

src/usb_libusb10.c

Lines changed: 18 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -393,19 +393,28 @@ FN_INTERNAL int fnusb_keep_alive_led(freenect_context* ctx, libusb_device* audio
393393
return res;
394394
}
395395

396+
FN_INTERNAL void fnusb_reset_subdevice(fnusb_dev* dev, freenect_device* parent)
397+
{
398+
if (dev->dev_handle) {
399+
libusb_release_interface(dev->dev_handle, 0);
400+
libusb_attach_kernel_driver(dev->dev_handle, 0);
401+
libusb_close(dev->dev_handle);
402+
dev->dev_handle = NULL;
403+
}
404+
405+
dev->parent = parent;
406+
}
407+
396408
FN_INTERNAL int fnusb_open_subdevices(freenect_device *dev, int index)
397409
{
398410
freenect_context *ctx = dev->parent;
399411

400412
dev->device_does_motor_control_with_audio = 0;
401413
dev->motor_control_with_audio_enabled = 0;
402414

403-
dev->usb_cam.parent = dev;
404-
dev->usb_cam.dev_handle = NULL;
405-
dev->usb_motor.parent = dev;
406-
dev->usb_motor.dev_handle = NULL;
407-
dev->usb_audio.parent = dev;
408-
dev->usb_audio.dev_handle = NULL;
415+
fnusb_reset_subdevice(&dev->usb_cam, dev);
416+
fnusb_reset_subdevice(&dev->usb_motor, dev);
417+
fnusb_reset_subdevice(&dev->usb_audio, dev);
409418

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

714723
FN_INTERNAL int fnusb_close_subdevices(freenect_device *dev)
715724
{
716-
if (dev->usb_cam.dev_handle) {
717-
libusb_release_interface(dev->usb_cam.dev_handle, 0);
718-
#ifndef _WIN32
719-
libusb_attach_kernel_driver(dev->usb_cam.dev_handle, 0);
720-
#endif
721-
libusb_close(dev->usb_cam.dev_handle);
722-
dev->usb_cam.dev_handle = NULL;
723-
}
724-
if (dev->usb_motor.dev_handle) {
725-
libusb_release_interface(dev->usb_motor.dev_handle, 0);
726-
libusb_close(dev->usb_motor.dev_handle);
727-
dev->usb_motor.dev_handle = NULL;
728-
}
729-
if (dev->usb_audio.dev_handle) {
730-
libusb_release_interface(dev->usb_audio.dev_handle, 0);
731-
libusb_close(dev->usb_audio.dev_handle);
732-
dev->usb_audio.dev_handle = NULL;
733-
}
725+
fnusb_reset_subdevice(&dev->usb_cam, dev);
726+
fnusb_reset_subdevice(&dev->usb_motor, dev);
727+
fnusb_reset_subdevice(&dev->usb_audio, dev);
734728
return 0;
735729
}
736730

0 commit comments

Comments
 (0)