@@ -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+
396408FN_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
714723FN_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