void updateDeviceList() { device_serials_.clear(); freenect_device_attributes* attr_list; freenect_device_attributes* item; freenect_list_device_attributes(driver_, &attr_list); for (item = attr_list; item != NULL; item = item->next) { device_serials_.push_back(std::string(item->camera_serial)); } freenect_free_device_attributes(attr_list); }
FREENECTAPI int freenect_open_device_by_camera_serial(freenect_context *ctx, freenect_device **dev, const char* camera_serial) { // This is implemented by listing the devices and seeing which index (if // any) has a camera with a matching serial number, and then punting to // freenect_open_device with that index. struct freenect_device_attributes* attrlist; struct freenect_device_attributes* item; int count = fnusb_list_device_attributes(&ctx->usb, &attrlist); if (count < 0) { FN_ERROR("freenect_open_device_by_camera_serial: Couldn't enumerate serial numbers\n"); return -1; } int index = 0; for(item = attrlist ; item != NULL; item = item->next , index++) { if (strlen(item->camera_serial) == strlen(camera_serial) && strcmp(item->camera_serial, camera_serial) == 0) { freenect_free_device_attributes(attrlist); return freenect_open_device(ctx, dev, index); } } freenect_free_device_attributes(attrlist); FN_ERROR("freenect_open_device_by_camera_serial: Couldn't find a device with serial %s\n", camera_serial); return -1; }
//--------------------------------------------------------------------------- void ofxKinectContext::buildDeviceList() { deviceList.clear(); // build the device list from freenect freenect_device_attributes * devAttrib; int numDevices = freenect_list_device_attributes(kinectContext, &devAttrib); // save bus ids ... for(int i = 0; i < numDevices; i++){ KinectPair kp; kp.id = i; kp.serial = (string) devAttrib->camera_serial; deviceList.push_back(kp); devAttrib = devAttrib->next; } freenect_free_device_attributes(devAttrib); // sort devices by serial number sort(deviceList.begin(), deviceList.end(), sortKinectPairs); }