5252
5353using namespace std ::chrono_literals;
5454
55- #define MAX_RETRIES 2
55+ #define MAX_RETRIES 5
5656
5757/* Timeout in seconds for usb_wait_for_disconnect.
5858 * It doesn't usually take long for a device to disconnect (almost always
@@ -91,21 +91,18 @@ struct usb_handle
9191 unsigned char ep_out;
9292};
9393
94- class LinuxUsbTransport : public UsbTransport {
94+ class LinuxUsbTransport : public Transport {
9595 public:
96- explicit LinuxUsbTransport (std::unique_ptr<usb_handle> handle, uint32_t ms_timeout = 0 )
97- : handle_(std::move(handle)), ms_timeout_(ms_timeout) {}
96+ explicit LinuxUsbTransport (std::unique_ptr<usb_handle> handle) : handle_(std::move(handle)) {}
9897 ~LinuxUsbTransport () override = default ;
9998
10099 ssize_t Read (void * data, size_t len) override ;
101100 ssize_t Write (const void * data, size_t len) override ;
102101 int Close () override ;
103- int Reset () override ;
104102 int WaitForDisconnect () override ;
105103
106104 private:
107105 std::unique_ptr<usb_handle> handle_;
108- const uint32_t ms_timeout_;
109106
110107 DISALLOW_COPY_AND_ASSIGN (LinuxUsbTransport);
111108};
@@ -405,7 +402,7 @@ ssize_t LinuxUsbTransport::Write(const void* _data, size_t len)
405402 bulk.ep = handle_->ep_out ;
406403 bulk.len = xfer;
407404 bulk.data = data;
408- bulk.timeout = ms_timeout_ ;
405+ bulk.timeout = 0 ;
409406
410407 n = ioctl (handle_->desc , USBDEVFS_BULK, &bulk);
411408 if (n != xfer) {
@@ -439,7 +436,7 @@ ssize_t LinuxUsbTransport::Read(void* _data, size_t len)
439436 bulk.ep = handle_->ep_in ;
440437 bulk.len = xfer;
441438 bulk.data = data;
442- bulk.timeout = ms_timeout_ ;
439+ bulk.timeout = 0 ;
443440 retry = 0 ;
444441
445442 do {
@@ -450,7 +447,7 @@ ssize_t LinuxUsbTransport::Read(void* _data, size_t len)
450447 if (n < 0 ) {
451448 DBG1 (" ERROR: n = %d, errno = %d (%s)\n " ,n, errno, strerror (errno));
452449 if (++retry > MAX_RETRIES) return -1 ;
453- std::this_thread::sleep_for (100ms );
450+ std::this_thread::sleep_for (1s );
454451 }
455452 } while (n < 0 );
456453
@@ -480,19 +477,10 @@ int LinuxUsbTransport::Close()
480477 return 0 ;
481478}
482479
483- int LinuxUsbTransport::Reset () {
484- int ret = 0 ;
485- // We reset the USB connection
486- if ((ret = ioctl (handle_->desc , USBDEVFS_RESET, 0 ))) {
487- return ret;
488- }
489-
490- return 0 ;
491- }
492-
493- UsbTransport* usb_open (ifc_match_func callback, uint32_t timeout_ms) {
480+ Transport* usb_open (ifc_match_func callback)
481+ {
494482 std::unique_ptr<usb_handle> handle = find_usb_device (" /sys/bus/usb/devices" , callback);
495- return handle ? new LinuxUsbTransport (std::move (handle), timeout_ms ) : nullptr ;
483+ return handle ? new LinuxUsbTransport (std::move (handle)) : nullptr ;
496484}
497485
498486/* Wait for the system to notice the device is gone, so that a subsequent
0 commit comments