getDeviceDescription method
Implementation
@override
Future<UsbDeviceDescription> getDeviceDescription(UsbDevice usbDevice, {bool requestPermission = true}) async {
String? manufacturer;
String? product;
String? serialNumber;
var descPtr = ffi.calloc<libusb_device_descriptor>();
try {
var handle = _libusb.libusb_open_device_with_vid_pid(
nullptr, usbDevice.vendorId, usbDevice.productId);
if (handle != nullptr) {
var device = _libusb.libusb_get_device(handle);
if (device != nullptr) {
var getDesc = _libusb.libusb_get_device_descriptor(device, descPtr) ==
libusb_error.LIBUSB_SUCCESS;
if (getDesc) {
if (descPtr.ref.iManufacturer > 0) {
manufacturer =
_getStringDescriptorASCII(handle, descPtr.ref.iManufacturer);
}
if (descPtr.ref.iProduct > 0) {
product = _getStringDescriptorASCII(handle, descPtr.ref.iProduct);
}
if (descPtr.ref.iSerialNumber > 0) {
serialNumber =
_getStringDescriptorASCII(handle, descPtr.ref.iSerialNumber);
}
}
}
_libusb.libusb_close(handle);
}
} finally {
ffi.calloc.free(descPtr);
}
return UsbDeviceDescription(
device: usbDevice,
manufacturer: manufacturer,
product: product,
serialNumber: serialNumber);
}