enum libusb_error uhd_dev_open(libusb_device *lusb_dev, uhd_dev **pdev) { enum libusb_error err; uhd_dev *dev; assert(lusb_dev != NULL); dev = malloc(sizeof(*dev)); if (dev == NULL) return LIBUSB_ERROR_NO_MEM; dev->next = NULL; err = libusb_open(lusb_dev, &dev->handle); if (err != LIBUSB_SUCCESS) { free(dev); return err; } assert(uhd_dev_valid(dev)); if (pdev != NULL) *pdev = dev; else { libusb_close(dev->handle); free(dev); } return LIBUSB_SUCCESS; }
bool uhd_iface_valid(const uhd_iface *iface) { return iface != NULL && uhd_dev_valid(iface->dev) && iface->number < UINT8_MAX && strlen(iface->addr_str) == (sizeof(iface->addr_str) - 1); }
void uhd_dev_close(uhd_dev *dev) { if (dev == NULL) return; assert(uhd_dev_valid(dev)); libusb_close(dev->handle); dev->handle = NULL; free(dev); }