From 87cc83070f985060aa5d324e060c0724a2b78aef Mon Sep 17 00:00:00 2001 From: "Brian S. Dean" Date: Sun, 14 Jan 2001 01:55:08 +0000 Subject: [PATCH] Correctly produce and handle "end of record" for intel hex files. git-svn-id: svn://svn.savannah.nongnu.org/avrdude/trunk@29 81a1dc3b-b13d-400b-aceb-764788c761c2 --- avrdude/avrprog.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/avrdude/avrprog.c b/avrdude/avrprog.c index b2591278..af00d821 100644 --- a/avrdude/avrprog.c +++ b/avrdude/avrprog.c @@ -640,6 +640,7 @@ int avr_write ( int fd, struct avrpart * p, AVRMEM memtype ) return 0; } + /* * issue the 'program enable' command to the AVR device */ @@ -725,7 +726,7 @@ int avr_initialize ( int fd, struct avrpart * p ) ppi_clr(fd, PPIDATA, AVR_RESET); ppi_pulse(fd, PPIDATA, AVR_RESET); - usleep(20000); /* 20 ms */ + usleep(20000); /* 20 ms XXX should be a per-chip parameter */ /* * Enable programming mode. If we are programming an AT90S1200, we @@ -791,13 +792,11 @@ int ppi_sense_test ( int fd ) */ void usage ( void ) { - fprintf ( stderr, "%s", usage_text ); fprintf(stderr, " Valid Parts for the -p option are:\n"); list_valid_parts(stderr, " "); fprintf(stderr, "\n"); - } @@ -858,11 +857,12 @@ int b2ihex ( unsigned char * inbuf, int bufsize, } /*----------------------------------------------------------------- - add the trailing zero data line + add the end of record data line -----------------------------------------------------------------*/ cksum = 0; n = 0; - fprintf ( outf, ":%02X%04X00", n, nextaddr ); + nextaddr = 0; + fprintf ( outf, ":%02X%04X01", n, nextaddr ); cksum += n + ((nextaddr >> 8) & 0x0ff) + (nextaddr & 0x0ff); cksum = -cksum; fprintf ( outf, "%02X\n", cksum ); @@ -898,7 +898,7 @@ int ihex2b ( char * infile, FILE * inf, exit(1); } - if (rectype != 0) { + if ((rectype != 0) && (rectype != 1)) { fprintf(stderr, "%s: don't know how to deal with rectype=%d " "at line %d of %s\n", @@ -957,6 +957,11 @@ int ihex2b ( char * infile, FILE * inf, return -1; } + if (rectype == 1) { + /* end of record */ + return 0; + } + prevaddr = nextaddr + n; } @@ -1602,7 +1607,7 @@ int main ( int argc, char * argv [] ) */ fprintf(stderr, "%s: writing %s:\n", progname, memtypestr(memtype)); -#if 1 +#if 0 rc = avr_write ( fd, p, memtype ); #else /*