getConfiguration method

  1. @override
Future<UsbConfiguration> getConfiguration(
  1. int index
)
inherited

Implementation

@override
Future<UsbConfiguration> getConfiguration(int index) async {
  assert(_devHandle != null, 'Device not open');

  var configDescPtrPtr = ffi.calloc<Pointer<libusb_config_descriptor>>();
  try {
    var device = _libusb.libusb_get_device(_devHandle!);
    var getConfigDesc =
        _libusb.libusb_get_config_descriptor(device, index, configDescPtrPtr);
    if (getConfigDesc != libusb_error.LIBUSB_SUCCESS) {
      throw 'getConfigDesc error: ${_libusb.describeError(getConfigDesc)}';
    }

    var configDescPtr = configDescPtrPtr.value;
    var usbConfiguration = UsbConfiguration(
      id: configDescPtr.ref.bConfigurationValue,
      index: configDescPtr.ref.iConfiguration,
      interfaces: _iterateInterface(
              configDescPtr.ref.interface_1, configDescPtr.ref.bNumInterfaces)
          .toList(),
    );
    _libusb.libusb_free_config_descriptor(configDescPtr);

    return usbConfiguration;
  } finally {
    ffi.calloc.free(configDescPtrPtr);
  }
}