52
52
53
53
using namespace std ::chrono_literals;
54
54
55
- #define MAX_RETRIES 2
55
+ #define MAX_RETRIES 5
56
56
57
57
/* Timeout in seconds for usb_wait_for_disconnect.
58
58
* It doesn't usually take long for a device to disconnect (almost always
@@ -91,21 +91,18 @@ struct usb_handle
91
91
unsigned char ep_out;
92
92
};
93
93
94
- class LinuxUsbTransport : public UsbTransport {
94
+ class LinuxUsbTransport : public Transport {
95
95
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)) {}
98
97
~LinuxUsbTransport () override = default ;
99
98
100
99
ssize_t Read (void * data, size_t len) override ;
101
100
ssize_t Write (const void * data, size_t len) override ;
102
101
int Close () override ;
103
- int Reset () override ;
104
102
int WaitForDisconnect () override ;
105
103
106
104
private:
107
105
std::unique_ptr<usb_handle> handle_;
108
- const uint32_t ms_timeout_;
109
106
110
107
DISALLOW_COPY_AND_ASSIGN (LinuxUsbTransport);
111
108
};
@@ -405,7 +402,7 @@ ssize_t LinuxUsbTransport::Write(const void* _data, size_t len)
405
402
bulk.ep = handle_->ep_out ;
406
403
bulk.len = xfer;
407
404
bulk.data = data;
408
- bulk.timeout = ms_timeout_ ;
405
+ bulk.timeout = 0 ;
409
406
410
407
n = ioctl (handle_->desc , USBDEVFS_BULK, &bulk);
411
408
if (n != xfer) {
@@ -439,7 +436,7 @@ ssize_t LinuxUsbTransport::Read(void* _data, size_t len)
439
436
bulk.ep = handle_->ep_in ;
440
437
bulk.len = xfer;
441
438
bulk.data = data;
442
- bulk.timeout = ms_timeout_ ;
439
+ bulk.timeout = 0 ;
443
440
retry = 0 ;
444
441
445
442
do {
@@ -450,7 +447,7 @@ ssize_t LinuxUsbTransport::Read(void* _data, size_t len)
450
447
if (n < 0 ) {
451
448
DBG1 (" ERROR: n = %d, errno = %d (%s)\n " ,n, errno, strerror (errno));
452
449
if (++retry > MAX_RETRIES) return -1 ;
453
- std::this_thread::sleep_for (100ms );
450
+ std::this_thread::sleep_for (1s );
454
451
}
455
452
} while (n < 0 );
456
453
@@ -480,19 +477,10 @@ int LinuxUsbTransport::Close()
480
477
return 0 ;
481
478
}
482
479
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
+ {
494
482
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 ;
496
484
}
497
485
498
486
/* Wait for the system to notice the device is gone, so that a subsequent
0 commit comments