aboutsummaryrefslogtreecommitdiffstats
path: root/heimdall/source/BridgeManager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'heimdall/source/BridgeManager.cpp')
-rw-r--r--heimdall/source/BridgeManager.cpp70
1 files changed, 47 insertions, 23 deletions
diff --git a/heimdall/source/BridgeManager.cpp b/heimdall/source/BridgeManager.cpp
index b7bff3d..d9e6f06 100644
--- a/heimdall/source/BridgeManager.cpp
+++ b/heimdall/source/BridgeManager.cpp
@@ -366,7 +366,7 @@ BridgeManager::BridgeManager(bool verbose)
fileTransferPacketSize = kFileTransferPacketSizeDefault;
fileTransferSequenceTimeout = kFileTransferSequenceTimeoutDefault;
- usbLogLevel = UsbLogLevel::Default;
+ usbLogLevel = Default;
}
BridgeManager::~BridgeManager()
@@ -398,23 +398,23 @@ bool BridgeManager::DetectDevice(void)
// Setup libusb log level.
switch (usbLogLevel)
{
- case UsbLogLevel::None:
+ case None:
libusb_set_debug(libusbContext, LIBUSB_LOG_LEVEL_NONE);
break;
- case UsbLogLevel::Error:
+ case Error:
libusb_set_debug(libusbContext, LIBUSB_LOG_LEVEL_ERROR);
break;
- case UsbLogLevel::Warning:
+ case Warning:
libusb_set_debug(libusbContext, LIBUSB_LOG_LEVEL_WARNING);
break;
- case UsbLogLevel::Info:
+ case Info:
libusb_set_debug(libusbContext, LIBUSB_LOG_LEVEL_INFO);
break;
- case UsbLogLevel::Debug:
+ case Debug:
libusb_set_debug(libusbContext, LIBUSB_LOG_LEVEL_DEBUG);
break;
}
@@ -423,27 +423,51 @@ bool BridgeManager::DetectDevice(void)
struct libusb_device **devices;
int deviceCount = libusb_get_device_list(libusbContext, &devices);
+ bool detected = false;
for (int deviceIndex = 0; deviceIndex < deviceCount; deviceIndex++)
{
libusb_device_descriptor descriptor;
libusb_get_device_descriptor(devices[deviceIndex], &descriptor);
+ libusb_device *heimdallDevice = devices[deviceIndex];
+ libusb_ref_device(heimdallDevice);
+
for (int i = 0; i < BridgeManager::kSupportedDeviceCount; i++)
{
if (descriptor.idVendor == supportedDevices[i].vendorId && descriptor.idProduct == supportedDevices[i].productId)
{
- libusb_free_device_list(devices, deviceCount);
-
- Interface::Print("Device detected\n");
- return (true);
+ detected = true;
+ if (verbose)
+ {
+ unsigned char stringBuffer[128];
+ libusb_device_handle *deviceHandle;
+ int result = libusb_open(heimdallDevice, &deviceHandle);
+ if (result == LIBUSB_SUCCESS) {
+ if (libusb_get_string_descriptor_ascii(deviceHandle, descriptor.iSerialNumber,
+ stringBuffer, 128) >= 0)
+ {
+ Interface::Print("%s\n", stringBuffer);
+ }
+ else {
+ Interface::Print("unknown\n", stringBuffer);
+ }
+ libusb_close(deviceHandle);
+ }
+ }
}
}
+
+ libusb_unref_device(heimdallDevice);
}
libusb_free_device_list(devices, deviceCount);
- Interface::PrintDeviceDetectionFailed();
- return (false);
+ if (!detected)
+ Interface::PrintDeviceDetectionFailed();
+ else if (!verbose)
+ Interface::Print("Device detected\n");
+
+ return (detected);
}
int BridgeManager::Initialise(bool resume)
@@ -463,23 +487,23 @@ int BridgeManager::Initialise(bool resume)
// Setup libusb log level.
switch (usbLogLevel)
{
- case UsbLogLevel::None:
+ case None:
libusb_set_debug(libusbContext, LIBUSB_LOG_LEVEL_NONE);
break;
- case UsbLogLevel::Error:
+ case Error:
libusb_set_debug(libusbContext, LIBUSB_LOG_LEVEL_ERROR);
break;
- case UsbLogLevel::Warning:
+ case Warning:
libusb_set_debug(libusbContext, LIBUSB_LOG_LEVEL_WARNING);
break;
- case UsbLogLevel::Info:
+ case Info:
libusb_set_debug(libusbContext, LIBUSB_LOG_LEVEL_INFO);
break;
- case UsbLogLevel::Debug:
+ case Debug:
libusb_set_debug(libusbContext, LIBUSB_LOG_LEVEL_DEBUG);
break;
}
@@ -1235,7 +1259,7 @@ bool BridgeManager::SendFile(FILE *file, unsigned int destination, unsigned int
return (true);
}
-void BridgeManager::SetUsbLogLevel(UsbLogLevel usbLogLevel)
+void BridgeManager::SetUsbLogLevel(int usbLogLevel)
{
this->usbLogLevel = usbLogLevel;
@@ -1243,23 +1267,23 @@ void BridgeManager::SetUsbLogLevel(UsbLogLevel usbLogLevel)
{
switch (usbLogLevel)
{
- case UsbLogLevel::None:
+ case None:
libusb_set_debug(libusbContext, LIBUSB_LOG_LEVEL_NONE);
break;
- case UsbLogLevel::Error:
+ case Error:
libusb_set_debug(libusbContext, LIBUSB_LOG_LEVEL_ERROR);
break;
- case UsbLogLevel::Warning:
+ case Warning:
libusb_set_debug(libusbContext, LIBUSB_LOG_LEVEL_WARNING);
break;
- case UsbLogLevel::Info:
+ case Info:
libusb_set_debug(libusbContext, LIBUSB_LOG_LEVEL_INFO);
break;
- case UsbLogLevel::Debug:
+ case Debug:
libusb_set_debug(libusbContext, LIBUSB_LOG_LEVEL_DEBUG);
break;
}