From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lukasz Majewski Date: Wed, 24 Sep 2014 14:19:41 +0200 Subject: [U-Boot] [PATCH v2] usb: gadget: fastboot: improve download progress bar In-Reply-To: <1411107312-12461-1-git-send-email-voice.shen@atmel.com> References: <1411107312-12461-1-git-send-email-voice.shen@atmel.com> Message-ID: <20140924141941.3207a669@amdc2363> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Hi Bo, > When download is ongoing, if the actual size of one transfer > is not the same as BTYES_PER_DOT, which will cause the dot > won't print anymore. Then it will let the user thinking it > is stuck, actually it is transfering without dot printed. > > So, improve the method to show the progress bar (print dot). Applied to u-boot-dfu tree Thanks for support! > > Signed-off-by: Bo Shen > --- > Changes in v2: > - get rid of the global variable. > - avoid the dot print after showing the total download length. > > drivers/usb/gadget/f_fastboot.c | 14 +++++++++----- > 1 file changed, 9 insertions(+), 5 deletions(-) > > diff --git a/drivers/usb/gadget/f_fastboot.c > b/drivers/usb/gadget/f_fastboot.c index 7a1acb9..dda9d1c 100644 > --- a/drivers/usb/gadget/f_fastboot.c > +++ b/drivers/usb/gadget/f_fastboot.c > @@ -380,6 +380,7 @@ static void rx_handler_dl_image(struct usb_ep > *ep, struct usb_request *req) unsigned int transfer_size = > download_size - download_bytes; const unsigned char *buffer = > req->buf; unsigned int buffer_size = req->actual; > + unsigned int pre_dot_num, now_dot_num; > > if (req->status != 0) { > printf("Bad status: %d\n", req->status); > @@ -392,7 +393,15 @@ static void rx_handler_dl_image(struct usb_ep > *ep, struct usb_request *req) memcpy((void > *)CONFIG_USB_FASTBOOT_BUF_ADDR + download_bytes, buffer, > transfer_size); > + pre_dot_num = download_bytes / BYTES_PER_DOT; > download_bytes += transfer_size; > + now_dot_num = download_bytes / BYTES_PER_DOT; > + > + if (pre_dot_num != now_dot_num) { > + putc('.'); > + if (!(now_dot_num % 74)) > + putc('\n'); > + } > > /* Check if transfer is done */ > if (download_bytes >= download_size) { > @@ -414,11 +423,6 @@ static void rx_handler_dl_image(struct usb_ep > *ep, struct usb_request *req) req->length = ep->maxpacket; > } > > - if (download_bytes && !(download_bytes % BYTES_PER_DOT)) { > - putc('.'); > - if (!(download_bytes % (74 * BYTES_PER_DOT))) > - putc('\n'); > - } > req->actual = 0; > usb_ep_queue(ep, req, 0); > } -- Best regards, Lukasz Majewski Samsung R&D Institute Poland (SRPOL) | Linux Platform Group