Loading fastboot/usb.h +1 −8 Original line number Diff line number Diff line Loading @@ -52,13 +52,6 @@ struct usb_ifc_info { char device_path[256]; }; class UsbTransport : public Transport { // Resets the underlying transport. Returns 0 on success. // This effectively simulates unplugging and replugging virtual int Reset() = 0; }; typedef int (*ifc_match_func)(usb_ifc_info *ifc); // 0 is non blocking UsbTransport* usb_open(ifc_match_func callback, uint32_t timeout_ms = 0); Transport* usb_open(ifc_match_func callback); fastboot/usb_linux.cpp +9 −21 Original line number Diff line number Diff line Loading @@ -52,7 +52,7 @@ using namespace std::chrono_literals; #define MAX_RETRIES 2 #define MAX_RETRIES 5 /* Timeout in seconds for usb_wait_for_disconnect. * It doesn't usually take long for a device to disconnect (almost always Loading Loading @@ -91,21 +91,18 @@ struct usb_handle unsigned char ep_out; }; class LinuxUsbTransport : public UsbTransport { class LinuxUsbTransport : public Transport { public: explicit LinuxUsbTransport(std::unique_ptr<usb_handle> handle, uint32_t ms_timeout = 0) : handle_(std::move(handle)), ms_timeout_(ms_timeout) {} explicit LinuxUsbTransport(std::unique_ptr<usb_handle> handle) : handle_(std::move(handle)) {} ~LinuxUsbTransport() override = default; ssize_t Read(void* data, size_t len) override; ssize_t Write(const void* data, size_t len) override; int Close() override; int Reset() override; int WaitForDisconnect() override; private: std::unique_ptr<usb_handle> handle_; const uint32_t ms_timeout_; DISALLOW_COPY_AND_ASSIGN(LinuxUsbTransport); }; Loading Loading @@ -405,7 +402,7 @@ ssize_t LinuxUsbTransport::Write(const void* _data, size_t len) bulk.ep = handle_->ep_out; bulk.len = xfer; bulk.data = data; bulk.timeout = ms_timeout_; bulk.timeout = 0; n = ioctl(handle_->desc, USBDEVFS_BULK, &bulk); if(n != xfer) { Loading Loading @@ -439,7 +436,7 @@ ssize_t LinuxUsbTransport::Read(void* _data, size_t len) bulk.ep = handle_->ep_in; bulk.len = xfer; bulk.data = data; bulk.timeout = ms_timeout_; bulk.timeout = 0; retry = 0; do { Loading @@ -450,7 +447,7 @@ ssize_t LinuxUsbTransport::Read(void* _data, size_t len) if (n < 0) { DBG1("ERROR: n = %d, errno = %d (%s)\n",n, errno, strerror(errno)); if (++retry > MAX_RETRIES) return -1; std::this_thread::sleep_for(100ms); std::this_thread::sleep_for(1s); } } while (n < 0); Loading Loading @@ -480,19 +477,10 @@ int LinuxUsbTransport::Close() return 0; } int LinuxUsbTransport::Reset() { int ret = 0; // We reset the USB connection if ((ret = ioctl(handle_->desc, USBDEVFS_RESET, 0))) { return ret; } return 0; } UsbTransport* usb_open(ifc_match_func callback, uint32_t timeout_ms) { Transport* usb_open(ifc_match_func callback) { std::unique_ptr<usb_handle> handle = find_usb_device("/sys/bus/usb/devices", callback); return handle ? new LinuxUsbTransport(std::move(handle), timeout_ms) : nullptr; return handle ? new LinuxUsbTransport(std::move(handle)) : nullptr; } /* Wait for the system to notice the device is gone, so that a subsequent Loading fastboot/usb_osx.cpp +5 −21 Original line number Diff line number Diff line Loading @@ -65,20 +65,17 @@ struct usb_handle unsigned int zero_mask; }; class OsxUsbTransport : public UsbTransport { class OsxUsbTransport : public Transport { public: OsxUsbTransport(std::unique_ptr<usb_handle> handle, uint32_t ms_timeout) : handle_(std::move(handle)), ms_timeout_(ms_timeout) {} OsxUsbTransport(std::unique_ptr<usb_handle> handle) : handle_(std::move(handle)) {} ~OsxUsbTransport() override = default; ssize_t Read(void* data, size_t len) override; ssize_t Write(const void* data, size_t len) override; int Close() override; int Reset() override; private: std::unique_ptr<usb_handle> handle_; const uint32_t ms_timeout_; DISALLOW_COPY_AND_ASSIGN(OsxUsbTransport); }; Loading Loading @@ -459,7 +456,7 @@ static int init_usb(ifc_match_func callback, std::unique_ptr<usb_handle>* handle * Definitions of this file's public functions. */ UsbTransport* usb_open(ifc_match_func callback, uint32_t timeout_ms) { Transport* usb_open(ifc_match_func callback) { std::unique_ptr<usb_handle> handle; if (init_usb(callback, &handle) < 0) { Loading @@ -467,7 +464,7 @@ UsbTransport* usb_open(ifc_match_func callback, uint32_t timeout_ms) { return nullptr; } return new OsxUsbTransport(std::move(handle), timeout_ms); return new OsxUsbTransport(std::move(handle)); } int OsxUsbTransport::Close() { Loading @@ -475,17 +472,6 @@ int OsxUsbTransport::Close() { return 0; } int OsxUsbTransport::Reset() { IOReturn result = (*handle_->interface)->ResetDevice(handle_->interface); if (result == 0) { return 0; } else { ERR("usb_reset failed with status %x\n", result); return -1; } } ssize_t OsxUsbTransport::Read(void* data, size_t len) { IOReturn result; UInt32 numBytes = len; Loading @@ -508,9 +494,7 @@ ssize_t OsxUsbTransport::Read(void* data, size_t len) { return -1; } result = (*handle_->interface) ->ReadPipeTO(handle_->interface, handle_->bulkIn, data, &numBytes, USB_TRANSACTION_TIMEOUT, USB_TRANSACTION_TIMEOUT); result = (*handle_->interface)->ReadPipe(handle_->interface, handle_->bulkIn, data, &numBytes); if (result == 0) { return (int) numBytes; Loading fastboot/usb_windows.cpp +3 −9 Original line number Diff line number Diff line Loading @@ -66,7 +66,7 @@ struct usb_handle { std::string interface_name; }; class WindowsUsbTransport : public UsbTransport { class WindowsUsbTransport : public Transport { public: WindowsUsbTransport(std::unique_ptr<usb_handle> handle) : handle_(std::move(handle)) {} ~WindowsUsbTransport() override = default; Loading @@ -74,7 +74,6 @@ class WindowsUsbTransport : public UsbTransport { ssize_t Read(void* data, size_t len) override; ssize_t Write(const void* data, size_t len) override; int Close() override; int Reset() override; private: std::unique_ptr<usb_handle> handle_; Loading Loading @@ -262,12 +261,6 @@ int WindowsUsbTransport::Close() { return 0; } int WindowsUsbTransport::Reset() { DBG("usb_reset currently unsupported\n\n"); // TODO, this is a bit complicated since it is using ADB return -1; } int recognized_device(usb_handle* handle, ifc_match_func callback) { struct usb_ifc_info info; USB_DEVICE_DESCRIPTOR device_desc; Loading Loading @@ -373,7 +366,8 @@ static std::unique_ptr<usb_handle> find_usb_device(ifc_match_func callback) { return handle; } UsbTransport* usb_open(ifc_match_func callback, uint32_t) { Transport* usb_open(ifc_match_func callback) { std::unique_ptr<usb_handle> handle = find_usb_device(callback); return handle ? new WindowsUsbTransport(std::move(handle)) : nullptr; } Loading
fastboot/usb.h +1 −8 Original line number Diff line number Diff line Loading @@ -52,13 +52,6 @@ struct usb_ifc_info { char device_path[256]; }; class UsbTransport : public Transport { // Resets the underlying transport. Returns 0 on success. // This effectively simulates unplugging and replugging virtual int Reset() = 0; }; typedef int (*ifc_match_func)(usb_ifc_info *ifc); // 0 is non blocking UsbTransport* usb_open(ifc_match_func callback, uint32_t timeout_ms = 0); Transport* usb_open(ifc_match_func callback);
fastboot/usb_linux.cpp +9 −21 Original line number Diff line number Diff line Loading @@ -52,7 +52,7 @@ using namespace std::chrono_literals; #define MAX_RETRIES 2 #define MAX_RETRIES 5 /* Timeout in seconds for usb_wait_for_disconnect. * It doesn't usually take long for a device to disconnect (almost always Loading Loading @@ -91,21 +91,18 @@ struct usb_handle unsigned char ep_out; }; class LinuxUsbTransport : public UsbTransport { class LinuxUsbTransport : public Transport { public: explicit LinuxUsbTransport(std::unique_ptr<usb_handle> handle, uint32_t ms_timeout = 0) : handle_(std::move(handle)), ms_timeout_(ms_timeout) {} explicit LinuxUsbTransport(std::unique_ptr<usb_handle> handle) : handle_(std::move(handle)) {} ~LinuxUsbTransport() override = default; ssize_t Read(void* data, size_t len) override; ssize_t Write(const void* data, size_t len) override; int Close() override; int Reset() override; int WaitForDisconnect() override; private: std::unique_ptr<usb_handle> handle_; const uint32_t ms_timeout_; DISALLOW_COPY_AND_ASSIGN(LinuxUsbTransport); }; Loading Loading @@ -405,7 +402,7 @@ ssize_t LinuxUsbTransport::Write(const void* _data, size_t len) bulk.ep = handle_->ep_out; bulk.len = xfer; bulk.data = data; bulk.timeout = ms_timeout_; bulk.timeout = 0; n = ioctl(handle_->desc, USBDEVFS_BULK, &bulk); if(n != xfer) { Loading Loading @@ -439,7 +436,7 @@ ssize_t LinuxUsbTransport::Read(void* _data, size_t len) bulk.ep = handle_->ep_in; bulk.len = xfer; bulk.data = data; bulk.timeout = ms_timeout_; bulk.timeout = 0; retry = 0; do { Loading @@ -450,7 +447,7 @@ ssize_t LinuxUsbTransport::Read(void* _data, size_t len) if (n < 0) { DBG1("ERROR: n = %d, errno = %d (%s)\n",n, errno, strerror(errno)); if (++retry > MAX_RETRIES) return -1; std::this_thread::sleep_for(100ms); std::this_thread::sleep_for(1s); } } while (n < 0); Loading Loading @@ -480,19 +477,10 @@ int LinuxUsbTransport::Close() return 0; } int LinuxUsbTransport::Reset() { int ret = 0; // We reset the USB connection if ((ret = ioctl(handle_->desc, USBDEVFS_RESET, 0))) { return ret; } return 0; } UsbTransport* usb_open(ifc_match_func callback, uint32_t timeout_ms) { Transport* usb_open(ifc_match_func callback) { std::unique_ptr<usb_handle> handle = find_usb_device("/sys/bus/usb/devices", callback); return handle ? new LinuxUsbTransport(std::move(handle), timeout_ms) : nullptr; return handle ? new LinuxUsbTransport(std::move(handle)) : nullptr; } /* Wait for the system to notice the device is gone, so that a subsequent Loading
fastboot/usb_osx.cpp +5 −21 Original line number Diff line number Diff line Loading @@ -65,20 +65,17 @@ struct usb_handle unsigned int zero_mask; }; class OsxUsbTransport : public UsbTransport { class OsxUsbTransport : public Transport { public: OsxUsbTransport(std::unique_ptr<usb_handle> handle, uint32_t ms_timeout) : handle_(std::move(handle)), ms_timeout_(ms_timeout) {} OsxUsbTransport(std::unique_ptr<usb_handle> handle) : handle_(std::move(handle)) {} ~OsxUsbTransport() override = default; ssize_t Read(void* data, size_t len) override; ssize_t Write(const void* data, size_t len) override; int Close() override; int Reset() override; private: std::unique_ptr<usb_handle> handle_; const uint32_t ms_timeout_; DISALLOW_COPY_AND_ASSIGN(OsxUsbTransport); }; Loading Loading @@ -459,7 +456,7 @@ static int init_usb(ifc_match_func callback, std::unique_ptr<usb_handle>* handle * Definitions of this file's public functions. */ UsbTransport* usb_open(ifc_match_func callback, uint32_t timeout_ms) { Transport* usb_open(ifc_match_func callback) { std::unique_ptr<usb_handle> handle; if (init_usb(callback, &handle) < 0) { Loading @@ -467,7 +464,7 @@ UsbTransport* usb_open(ifc_match_func callback, uint32_t timeout_ms) { return nullptr; } return new OsxUsbTransport(std::move(handle), timeout_ms); return new OsxUsbTransport(std::move(handle)); } int OsxUsbTransport::Close() { Loading @@ -475,17 +472,6 @@ int OsxUsbTransport::Close() { return 0; } int OsxUsbTransport::Reset() { IOReturn result = (*handle_->interface)->ResetDevice(handle_->interface); if (result == 0) { return 0; } else { ERR("usb_reset failed with status %x\n", result); return -1; } } ssize_t OsxUsbTransport::Read(void* data, size_t len) { IOReturn result; UInt32 numBytes = len; Loading @@ -508,9 +494,7 @@ ssize_t OsxUsbTransport::Read(void* data, size_t len) { return -1; } result = (*handle_->interface) ->ReadPipeTO(handle_->interface, handle_->bulkIn, data, &numBytes, USB_TRANSACTION_TIMEOUT, USB_TRANSACTION_TIMEOUT); result = (*handle_->interface)->ReadPipe(handle_->interface, handle_->bulkIn, data, &numBytes); if (result == 0) { return (int) numBytes; Loading
fastboot/usb_windows.cpp +3 −9 Original line number Diff line number Diff line Loading @@ -66,7 +66,7 @@ struct usb_handle { std::string interface_name; }; class WindowsUsbTransport : public UsbTransport { class WindowsUsbTransport : public Transport { public: WindowsUsbTransport(std::unique_ptr<usb_handle> handle) : handle_(std::move(handle)) {} ~WindowsUsbTransport() override = default; Loading @@ -74,7 +74,6 @@ class WindowsUsbTransport : public UsbTransport { ssize_t Read(void* data, size_t len) override; ssize_t Write(const void* data, size_t len) override; int Close() override; int Reset() override; private: std::unique_ptr<usb_handle> handle_; Loading Loading @@ -262,12 +261,6 @@ int WindowsUsbTransport::Close() { return 0; } int WindowsUsbTransport::Reset() { DBG("usb_reset currently unsupported\n\n"); // TODO, this is a bit complicated since it is using ADB return -1; } int recognized_device(usb_handle* handle, ifc_match_func callback) { struct usb_ifc_info info; USB_DEVICE_DESCRIPTOR device_desc; Loading Loading @@ -373,7 +366,8 @@ static std::unique_ptr<usb_handle> find_usb_device(ifc_match_func callback) { return handle; } UsbTransport* usb_open(ifc_match_func callback, uint32_t) { Transport* usb_open(ifc_match_func callback) { std::unique_ptr<usb_handle> handle = find_usb_device(callback); return handle ? new WindowsUsbTransport(std::move(handle)) : nullptr; }