@@ -400,19 +400,29 @@ FN_INTERNAL int fnusb_keep_alive_led(freenect_context* ctx, libusb_device* audio
400
400
return res ;
401
401
}
402
402
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
+
403
416
FN_INTERNAL int fnusb_open_subdevices (freenect_device * dev , int index )
404
417
{
405
418
freenect_context * ctx = dev -> parent ;
406
419
407
420
dev -> device_does_motor_control_with_audio = 0 ;
408
421
dev -> motor_control_with_audio_enabled = 0 ;
409
422
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 );
416
426
417
427
libusb_device * * devs ; // pointer to pointer of device, used to retrieve a list of devices
418
428
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)
724
734
725
735
FN_INTERNAL int fnusb_close_subdevices (freenect_device * dev )
726
736
{
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 );
745
740
return 0 ;
746
741
}
747
742
0 commit comments