Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7199051a authored by Chris Sarbora's avatar Chris Sarbora
Browse files

Wait for disconnect when rebooting to userspace FB

Wait for the device to disconnect when rebooting to userspace fastboot.
This is a particular problem for USB-over-IP devices, which must tunnel
the USB commands over a relatively-slow network and thus will not
disconnect as quickly as local ones.

Only currently effective for Linux hosts, since LinuxUsbTransport is the
only transport that implements WaitForDisconnect().

Test Plan:
provision with a usbip-attached device, see flash succeed

Change-Id: Ia8903dfa6e40755377870fbeaef9162934f992a0
parent 7cf49320
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -1547,9 +1547,14 @@ bool is_userspace_fastboot() {

void reboot_to_userspace_fastboot() {
    fb->RebootTo("fastboot");
    if (fb->WaitForDisconnect() != fastboot::SUCCESS) {
        die("Error waiting for USB disconnect.");
    }
    fb->set_transport(nullptr);

    // Give the current connection time to close.
    // Not all platforms support WaitForDisconnect. There also isn't a great way to tell whether
    // or not WaitForDisconnect is supported. So, just wait a bit extra for everyone, in order to
    // make sure that the device has had time to initiate its reboot and disconnect itself.
    std::this_thread::sleep_for(std::chrono::seconds(1));

    fb->set_transport(open_device());