diff options
Diffstat (limited to 'heimdall/source/BridgeManager.cpp')
-rw-r--r-- | heimdall/source/BridgeManager.cpp | 70 |
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; } |