static int linux_probe(struct bladerf_devinfo_list *info_list) { int status = 0; struct dirent **matches; int num_matches, i; struct bladerf *dev; struct bladerf_devinfo devinfo; num_matches = scandir(BLADERF_DEV_DIR, &matches, device_filter, alphasort); if (num_matches > 0) { for (i = 0; i < num_matches; i++) { status = 0; /* Open this specific instance. */ bladerf_init_devinfo(&devinfo); devinfo.instance = str2instance(matches[i]->d_name); status = linux_open(&dev, &devinfo); if (status < 0) { log_error("Failed to open instance=%d\n", devinfo.instance); } else { /* Since this device was opened by instance, it will have * had it's device info (dev->ident) filled out already */ bladerf_devinfo_list_add(info_list, &dev->ident); linux_close(dev); } } } free_dirents(matches, num_matches); return (!status && num_matches > 0) ? status : BLADERF_ERR_NODEV; }
static int lusb_probe(backend_probe_target probe_target, struct bladerf_devinfo_list *info_list) { int status, i, n; ssize_t count; libusb_device **list; struct bladerf_devinfo info; libusb_context *context; /* Initialize libusb for device tree walking */ status = libusb_init(&context); if (status) { log_error("Could not initialize libusb: %s\n", libusb_error_name(status)); goto lusb_probe_done; } count = libusb_get_device_list(context, &list); /* Iterate through all the USB devices */ for (i = 0, n = 0; i < count && status == 0; i++) { if (device_is_probe_target(probe_target, list[i])) { /* Open the USB device and get some information */ status = get_devinfo(list[i], &info); if (status) { /* We may not be able to open the device if another * driver (e.g., CyUSB3) is associated with it. Therefore, * just log to the debug level and carry on. */ status = 0; log_debug("Could not open device: %s\n", libusb_error_name(status) ); } else { info.instance = n++; status = bladerf_devinfo_list_add(info_list, &info); if( status ) { log_error("Could not add device to list: %s\n", bladerf_strerror(status) ); } else { log_verbose("Added instance %d to device list\n", info.instance); } } } } libusb_free_device_list(list, 1); libusb_exit(context); lusb_probe_done: return status; }
static int cyapi_probe(backend_probe_target probe_target, struct bladerf_devinfo_list *info_list) { CCyUSBDevice *dev = new CCyUSBDevice(NULL, driver_guid); if (dev == NULL) { return BLADERF_ERR_MEM; } for (int i = 0; i < dev->DeviceCount(); i++) { struct bladerf_devinfo info; bool opened; int status; opened = dev->Open(i); if (opened) { if (device_matches_target(dev, probe_target)) { const size_t max_serial = sizeof(info.serial) - 1; info.instance = i; memset(info.serial, 0, sizeof(info.serial)); wcstombs(info.serial, dev->SerialNumber, max_serial); info.usb_addr = dev->USBAddress; info.usb_bus = 0; /* CyAPI doesn't provide this */ info.backend = BLADERF_BACKEND_CYPRESS; status = bladerf_devinfo_list_add(info_list, &info); if (status != 0) { log_error("Could not add device to list: %s\n", bladerf_strerror(status)); } else { log_verbose("Added instance %d to device list\n", info.instance); } } dev->Close(); } } delete dev; return 0; }
static int lusb_probe(backend_probe_target probe_target, struct bladerf_devinfo_list *info_list) { int status, i, n; ssize_t count; libusb_device **list; struct bladerf_devinfo info; bool printed_access_warning = false; libusb_context *context; /* Initialize libusb for device tree walking */ status = libusb_init(&context); if (status) { log_error("Could not initialize libusb: %s\n", libusb_error_name(status)); goto lusb_probe_done; } count = libusb_get_device_list(context, &list); /* Iterate through all the USB devices */ for (i = 0, n = 0; i < count && status == 0; i++) { if (device_is_probe_target(probe_target, list[i])) { /* Open the USB device and get some information */ status = get_devinfo(list[i], &info); if (status) { /* We may not be able to open the device if another * driver (e.g., CyUSB3) is associated with it. Therefore, * just log to the debug level and carry on. */ log_debug("Could not open device: %s\n", libusb_error_name(status) ); if (status == LIBUSB_ERROR_ACCESS && !printed_access_warning) { printed_access_warning = true; log_warning("Found a bladeRF via VID/PID, but could not " "open it due to insufficient permissions.\n"); } /* Don't stop probing because one device was "problematic" */ status = 0; } else { info.instance = n++; status = bladerf_devinfo_list_add(info_list, &info); if( status ) { log_error("Could not add device to list: %s\n", bladerf_strerror(status) ); } else { log_verbose("Added instance %d to device list\n", info.instance); } } } } libusb_free_device_list(list, 1); libusb_exit(context); lusb_probe_done: return status; }
static int lusb_probe(struct bladerf_devinfo_list *info_list) { int status, i, n; ssize_t count; libusb_device **list; struct bladerf_devinfo info; libusb_context *context; /* Initialize libusb for device tree walking */ status = libusb_init(&context); if (status) { log_error("Could not initialize libusb: %s\n", libusb_error_name(status)); goto lusb_probe_done; } count = libusb_get_device_list(context, &list); /* Iterate through all the USB devices */ for (i = 0, n = 0; i < count && status == 0; i++) { if (device_is_bladerf(list[i])) { log_verbose("Found bladeRF (based upon VID/PID)\n"); /* Open the USB device and get some information */ status = get_devinfo(list[i], &info); if (status) { log_error("Could not open bladeRF device: %s\n", libusb_error_name(status) ); } else { info.instance = n++; status = bladerf_devinfo_list_add(info_list, &info); if( status ) { log_error("Could not add device to list: %s\n", bladerf_strerror(status) ); } else { log_verbose("Added instance %d to device list\n", info.instance); } } } if (device_is_fx3_bootloader(list[i])) { status = get_devinfo(list[i], &info); if (status) { log_error("Could not open bladeRF device: %s\n", libusb_error_name(status) ); continue; } log_info("Found FX3 bootloader device on bus=%d addr=%d. This may " "be a bladeRF.\nUse the bladeRF-cli command \"recover" " %d %d <FX3 firmware>\" to boot the bladeRF firmware.\n", info.usb_bus, info.usb_addr, info.usb_bus, info.usb_addr); } } libusb_free_device_list(list, 1); libusb_exit(context); lusb_probe_done: return status; }