diff options
Diffstat (limited to 'heimdall/source')
-rw-r--r-- | heimdall/source/Android.mk | 37 | ||||
-rw-r--r-- | heimdall/source/BridgeManager.cpp | 36 |
2 files changed, 67 insertions, 6 deletions
diff --git a/heimdall/source/Android.mk b/heimdall/source/Android.mk new file mode 100644 index 0000000..9d015b9 --- /dev/null +++ b/heimdall/source/Android.mk @@ -0,0 +1,37 @@ +LOCAL_PATH := $(call my-dir) + +include $(CLEAR_VARS) + +LOCAL_SRC_FILES := \ + Arguments.cpp \ + ClosePcScreenAction.cpp \ + DownloadPitAction.cpp \ + FlashAction.cpp \ + InfoAction.cpp \ + PrintPitAction.cpp \ + VersionAction.cpp \ + BridgeManager.cpp \ + DetectAction.cpp \ + DumpAction.cpp \ + HelpAction.cpp \ + Interface.cpp \ + Utility.cpp \ + main.cpp \ + ../../libpit/Source/libpit.cpp + +LOCAL_C_INCLUDES := \ + external/heimdall/libpit/Source \ + external/libusbx/libusb + +LOCAL_STATIC_LIBRARIES := libusbx + +ifeq ($(HOST_OS),darwin) +LOCAL_LDFLAGS := -framework CoreFoundation -framework IOKit +endif + +ifeq ($(HOST_OS),linux) +LOCAL_LDFLAGS := -lpthread -lrt +endif + +LOCAL_MODULE := heimdall +include $(BUILD_HOST_EXECUTABLE) diff --git a/heimdall/source/BridgeManager.cpp b/heimdall/source/BridgeManager.cpp index ed12b87..5150788 100644 --- a/heimdall/source/BridgeManager.cpp +++ b/heimdall/source/BridgeManager.cpp @@ -524,27 +524,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) |