usb_updater: close connection when no data is transferred

When usb_updater is invoked with the '-f' option and without
specifying the binary file to transmit, the cr50 still enters the data
transfer mode, even though the host is not transferring anything.

As a result cr50 stays in the 'rx_outside_block' state until timeout
expires. Another usb_updater invocation fails if attempted before
timeout expiration.

The UPGRADE_DONE PDU sent by the host causes the state machine to
switch to the idle state immediately.

BRANCH=none
BUG=none
TEST=ran the following commands:
   usb_updater -f && usb_updater -f

  the second invocation used to fail before this change, now it succeeds.

Change-Id: Iceafeb30de6011975fbf47dabc7c6c494177c0f7
Signed-off-by: Vadim Bendebury <vbendeb@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/415554
Reviewed-by: Bill Richardson <wfrichar@chromium.org>
This commit is contained in:
Vadim Bendebury
2016-12-01 18:56:29 +08:00
committed by chrome-bot
parent 57d8666fa1
commit 35c5e0fa42

View File

@@ -1280,7 +1280,10 @@ int main(int argc, char *argv[])
transferred_sections = transfer_and_reboot(&td, data, data_len);
free(data);
}
if (td.ep_type == usb_xfer) {
if (!data)
send_done(&td.uep);
libusb_close(td.uep.devh);
libusb_exit(NULL);
}