@@ -393,19 +393,28 @@ FN_INTERNAL int fnusb_keep_alive_led(freenect_context* ctx, libusb_device* audio
393
393
return res ;
394
394
}
395
395
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
+
396
408
FN_INTERNAL int fnusb_open_subdevices (freenect_device * dev , int index )
397
409
{
398
410
freenect_context * ctx = dev -> parent ;
399
411
400
412
dev -> device_does_motor_control_with_audio = 0 ;
401
413
dev -> motor_control_with_audio_enabled = 0 ;
402
414
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 );
409
418
410
419
libusb_device * * devs ; // pointer to pointer of device, used to retrieve a list of devices
411
420
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)
713
722
714
723
FN_INTERNAL int fnusb_close_subdevices (freenect_device * dev )
715
724
{
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 );
734
728
return 0 ;
735
729
}
736
730
0 commit comments