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': 'Handle inválido'};
  }

  final handle = handleNullable;

  // Probar con múltiples interfaces
  for (int interfaceNumber = 0; interfaceNumber < 5; interfaceNumber++) {
    // Intentar desconectar el kernel driver para esta interfaz
    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; // Probar con la siguiente interfaz
        }
      } catch (e) {
        continue; // Probar con la siguiente interfaz
      }
    }

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

  return {'success': false, 'error': 'No se encontró una interfaz válida'};
}