FREENECTAPI int freenect_open_device(freenect_context *ctx, freenect_device **dev, int index) { int res; freenect_device *pdev = (freenect_device*)malloc(sizeof(freenect_device)); if (!pdev) return -1; memset(pdev, 0, sizeof(*pdev)); pdev->parent = ctx; res = fnusb_open_subdevices(pdev, index); if (res < 0) { free(pdev); return res; } if (!ctx->first) { ctx->first = pdev; } else { freenect_device *prev = ctx->first; while (prev->next) prev = prev->next; prev->next = pdev; } *dev = pdev; // Do device-specific initialization if (pdev->usb_cam.dev) { if (freenect_camera_init(pdev) < 0) { return -1; } } return 0; }
FREENECTAPI int freenect_open_device(freenect_context *ctx, freenect_device **dev, int index) { int res; freenect_device *pdev = (freenect_device*)malloc(sizeof(freenect_device)); if (!pdev) return -1; memset(pdev, 0, sizeof(*pdev)); pdev->parent = ctx; res = fnusb_open_subdevices(pdev, index); if (res < 0) { free(pdev); return res; } #ifdef BUILD_AUDIO if (pdev->usb_audio.dev) { res = fnusb_num_interfaces(&pdev->usb_audio); if (res == 1) { // Upload audio firmware, release devices, and reopen them res = upload_firmware(&pdev->usb_audio); if (res < 0) { FN_ERROR("upload_firmware failed: %d\n", res); free(pdev); return res; } res = fnusb_close_subdevices(pdev); if (res < 0) { FN_ERROR("fnusb_close_subdevices failed: %d\n", res); free(pdev); return res; } sleep(1); // Give time for the device to reenumerate before trying to open it res = fnusb_open_subdevices(pdev, index); if (res < 0) { free(pdev); return res; } } } #endif if (!ctx->first) { ctx->first = pdev; } else { freenect_device *prev = ctx->first; while (prev->next) prev = prev->next; prev->next = pdev; } *dev = pdev; // Do device-specific initialization if (pdev->usb_cam.dev) { if (freenect_camera_init(pdev) < 0) { return -1; } } return 0; }