openDevice method
Implementation
Pointer<libusb_device_handle>? openDevice(int vendorId, int productId) {
final deviceListPtr = calloc<Pointer<Pointer<libusb_device>>>();
final ctxPtr = calloc<Pointer<libusb_context>>();
if (_bindings.libusb_init(ctxPtr) < 0) {
return null;
}
int deviceCount =
_bindings.libusb_get_device_list(ctxPtr.value, deviceListPtr);
if (deviceCount < 0) {
return null;
}
for (int i = 0; i < deviceCount; i++) {
final device = deviceListPtr.value[i];
final descriptor = calloc<libusb_device_descriptor>();
if (_bindings.libusb_get_device_descriptor(device, descriptor) == 0) {
if (descriptor.ref.idVendor == vendorId &&
descriptor.ref.idProduct == productId) {
final handlePtr = calloc<Pointer<libusb_device_handle>>();
int openResult = _bindings.libusb_open(device, handlePtr);
if (openResult < 0) {
final errorMsg = _bindings
.libusb_error_name(openResult)
.cast<Utf8>()
.toDartString();
log("Error open device: $errorMsg (Code: $openResult)");
calloc.free(descriptor);
continue;
}
//log("Open device Ok");
calloc.free(descriptor);
return handlePtr.value;
}
}
calloc.free(descriptor);
}
_bindings.libusb_free_device_list(deviceListPtr.value, 1);
return null;
}