Changeset 1189


Ignore:
Timestamp:
03/01/07 16:31:44 (10 years ago)
Author:
laforge
Message:
  • correctly call dfu_download with NULL data buffer at the end
  • add scaled progress bar instead of hash printing
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/host/dfu-util/src/sam7dfu.c

    r1152 r1189  
    6363} 
    6464 
     65#define PROGRESS_BAR_WIDTH 50 
     66 
    6567int sam7dfu_do_dnload(struct usb_dev_handle *usb_handle, int interface, 
    6668                      int xfer_size, const char *fname) 
    6769{ 
    6870        int ret, fd, bytes_sent = 0; 
     71        unsigned int bytes_per_hash, hashes = 0; 
    6972        char *buf = malloc(xfer_size); 
    7073        struct stat st; 
     
    9497        } 
    9598 
     99        bytes_per_hash = st.st_size / PROGRESS_BAR_WIDTH; 
     100        printf("bytes_per_hash=%u\n", bytes_per_hash); 
    96101#if 0 
    97102        read(fd, DFU_HDR); 
    98103#endif 
    99104        printf("Starting download: ["); 
     105        fflush(stdout); 
    100106        while (bytes_sent < st.st_size /* - DFU_HDR */) { 
     107                int hashes_todo; 
     108 
    101109                ret = read(fd, buf, xfer_size); 
    102110                if (ret < 0) { 
     
    104112                        goto out_close; 
    105113                } 
    106                 ret = dfu_download(usb_handle, interface, ret, buf); 
    107                 if (ret < 0) 
     114                ret = dfu_download(usb_handle, interface, ret, ret ? buf : NULL); 
     115                if (ret < 0) { 
     116                        printf(stderr, "Error during download\n"); 
    108117                        goto out_close; 
     118                } 
    109119                bytes_sent += ret; 
     120 
    110121                do { 
    111122                        ret = dfu_get_status(usb_handle, interface, &dst); 
    112                         if (ret < 0) 
     123                        if (ret < 0) { 
     124                                fprintf(stderr, "Error during download get_status\n"); 
    113125                                goto out_close; 
     126                        } 
     127                        usleep(5000); 
    114128                } while (dst.bState != DFU_STATE_dfuDNLOAD_IDLE || 
    115129                         dst.bStatus != DFU_STATUS_OK); 
    116                 putchar('#'); 
    117                 usleep(5000); 
     130 
     131                hashes_todo = (bytes_sent / bytes_per_hash) - hashes; 
     132                hashes += hashes_todo; 
     133                while (hashes_todo--) 
     134                        putchar('#'); 
    118135                fflush(stdout); 
    119136        } 
     
    125142         
    126143        printf("] finished!\n"); 
     144        fflush(stdout); 
    127145 
    128146get_status: 
Note: See TracChangeset for help on using the changeset viewer.