getDeviceEndpoints method
Implementation
List<int> getDeviceEndpoints(Pointer<libusb_device> device) {
log("📌 Starting endpoint search...");
final configDescriptor = calloc<Pointer<libusb_config_descriptor>>();
//log("📌 Memoria asignada para configDescriptor");
// 🔹 Cambiamos `nullptr` por el `device` correcto
final result =
_bindings.libusb_get_active_config_descriptor(device, configDescriptor);
//log("📌 Resultado de get_active_config_descriptor: $result");
if (result < 0) {
//log("❌ Error al obtener configuración: ${_bindings.libusb_error_name(result).cast<Utf8>().toDartString()}");
calloc.free(configDescriptor);
return [];
}
final config = configDescriptor.value;
//log("📌 Configuración obtenida con éxito");
List<int> endpoints = [];
//log("📌 Número de interfaces: ${config.ref.bNumInterfaces}");
for (int i = 0; i < config.ref.bNumInterfaces; i++) {
final interfacePointer = config.ref.interface1;
if (interfacePointer.address == 0) {
//log("❌ No se encontraron interfaces en la configuración.");
_bindings.libusb_free_config_descriptor(config);
return [];
}
final interface = (interfacePointer + i).ref;
//log("📌 Interfaz $i: número de configuraciones ${interface.num_altsetting}");
for (int j = 0; j < interface.num_altsetting; j++) {
final altsetting = (interface.altsetting + j).ref;
//log("📌 Configuración alternativa $j con ${altsetting.bNumEndpoints} endpoints");
for (int k = 0; k < altsetting.bNumEndpoints; k++) {
final endpoint = (altsetting.endpoint + k).ref;
endpoints.add(endpoint.bEndpointAddress);
//log("✔️ Endpoint encontrado: ${endpoint.bEndpointAddress.toRadixString(16)}");
}
}
}
_bindings.libusb_free_config_descriptor(config);
log("📌 Configuration released successfully");
return endpoints;
}