findAndClaimValidInterface method

Future<Map<String, dynamic>> findAndClaimValidInterface(
  1. Pointer<libusb_device_handle>? handleNullable
)

Implementation

Future<Map<String, dynamic>> findAndClaimValidInterface(
    Pointer<libusb_device_handle>? handleNullable) async {
  if (handleNullable == nullptr || handleNullable == null) {
    return {'success': false, 'error': 'Invalid handle'};
  }

  final handle = handleNullable;

  for (int interfaceNumber = 0; interfaceNumber < 5; interfaceNumber++) {
    if (Platform.isLinux || Platform.isMacOS) {
      try {
        final hasKernelDriver =
            _bindings.libusb_kernel_driver_active(handle, interfaceNumber);
        if (hasKernelDriver == 1) {
          final detachResult =
              _bindings.libusb_detach_kernel_driver(handle, interfaceNumber);
          if (detachResult < 0) continue;
        }
      } catch (e) {
        continue;
      }
    }

    final claimResult =
        _bindings.libusb_claim_interface(handle, interfaceNumber);
    if (claimResult == 0) {
      return {'success': true, 'interfaceNumber': interfaceNumber};
    }
  }

  return {'success': false, 'error': 'No valid interface found'};
}