Package: dfu-util Version: 0.0+r4880-1 Severity: normal Tags: patch The output on stdout looks odd in 'upload' mode because the upload loop never actually breaks properly; it always exits through the 'out_close' path so doesn't print "finished" or terminate the line. Changing one 'goto out_close' to a 'break' fixes this problem.
The download waits until dfu_get_status returns DFU_STATE_dfuDNLOAD_IDLE, but if there is a verify or format error, the device will transition to DFU_STATE_dfuERROR instead, which will result in an infinite loop. The attached patch fixes both of these problems. -- System Information: Debian Release: squeeze/sid APT prefers unstable APT policy: (500, 'unstable') Architecture: i386 (i686) Kernel: Linux 2.6.32-3-686 (SMP w/2 CPU cores) Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/bash Versions of packages dfu-util depends on: ii libc6 2.10.2-8 Embedded GNU C Library: Shared lib ii libusb-0.1-4 2:0.1.12-14 userspace USB programming library dfu-util recommends no packages. dfu-util suggests no packages. -- no debconf information
diff -ru dfu-util-0.0+r4880.orig/src/sam7dfu.c dfu-util-0.0+r4880/src/sam7dfu.c --- dfu-util-0.0+r4880.orig/src/sam7dfu.c 2010-05-20 17:19:07.000000000 -0400 +++ dfu-util-0.0+r4880/src/sam7dfu.c 2010-05-20 17:24:41.000000000 -0400 @@ -60,7 +60,7 @@ if (rc < xfer_size) { /* last block, return */ ret = total_bytes; - goto out_close; + break; } putchar('#'); fflush(stdout); @@ -143,7 +143,8 @@ goto out_close; } usleep(5000); - } while (dst.bState != DFU_STATE_dfuDNLOAD_IDLE); + } while (dst.bState != DFU_STATE_dfuDNLOAD_IDLE && + dst.bState != DFU_STATE_dfuERROR); if (dst.bStatus != DFU_STATUS_OK) { printf(" failed!\n"); printf("state(%u) = %s, status(%u) = %s\n", dst.bState, Only in dfu-util-0.0+r4880/src: sam7dfu.c~