From 35c5e0fa42b44a54f665d01db25e93edc8f0f2b2 Mon Sep 17 00:00:00 2001 From: Vadim Bendebury Date: Thu, 1 Dec 2016 18:56:29 +0800 Subject: [PATCH] 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 Reviewed-on: https://chromium-review.googlesource.com/415554 Reviewed-by: Bill Richardson --- extra/usb_updater/usb_updater.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/extra/usb_updater/usb_updater.c b/extra/usb_updater/usb_updater.c index 71ca80a822..a6371b2cf4 100644 --- a/extra/usb_updater/usb_updater.c +++ b/extra/usb_updater/usb_updater.c @@ -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); }