getDeviceDescription method

  1. @override
Future<UsbDeviceDescription> getDeviceDescription(
  1. UsbDevice usbDevice, {
  2. bool requestPermission = true,
})
inherited

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);
}