From 11059e765298d6c4b0d88b9c65d3a4d2437927cf Mon Sep 17 00:00:00 2001 From: "Brian S. Dean" Date: Mon, 7 Aug 2000 01:48:53 +0000 Subject: [PATCH] Add ppi_pulse() function and fix ppi_toggle() to actully toggle instead of pulse. Make all abnormal returns after the parallel port has been opened go through a single exit point at the bottom of 'main()'. git-svn-id: svn://svn.savannah.nongnu.org/avrdude/trunk/avrdude@9 81a1dc3b-b13d-400b-aceb-764788c761c2 --- avrprog.c | 86 ++++++++++++++++++++++++++----------------------------- 1 file changed, 41 insertions(+), 45 deletions(-) diff --git a/avrprog.c b/avrprog.c index 18e67d34..da4d7676 100644 --- a/avrprog.c +++ b/avrprog.c @@ -209,11 +209,20 @@ int ppi_toggle ( int fd, int reg, int bit ) return -1; ioctl(fd, get, &v); - v |= bit; + v ^= bit; ioctl(fd, set, &v); - v &= ~bit; - ioctl(fd, set, &v); + return 0; +} + + +/* + * pulse the indicated bit of the specified register. + */ +int ppi_pulse ( int fd, int reg, int bit ) +{ + ppi_toggle(fd, reg, bit); + ppi_toggle(fd, reg, bit); return 0; } @@ -236,7 +245,7 @@ int avr_txrx_bit ( int fd, int bit ) else ppi_clr(fd, PPIDATA, AVR_INSTR); - ppi_toggle(fd, PPIDATA, AVR_CLOCK); + ppi_pulse(fd, PPIDATA, AVR_CLOCK); return r; } @@ -569,7 +578,7 @@ int avr_initialize ( int fd ) ppi_clr(fd, PPIDATA, AVR_CLOCK); ppi_clr(fd, PPIDATA, AVR_RESET); - ppi_toggle(fd, PPIDATA, AVR_RESET); + ppi_pulse(fd, PPIDATA, AVR_RESET); usleep(20000); /* 20 ms */ @@ -582,7 +591,7 @@ int avr_initialize ( int fd ) rc = avr_program_enable ( fd ); if (rc == 0) break; - ppi_toggle(fd, PPIDATA, AVR_CLOCK); + ppi_pulse(fd, PPIDATA, AVR_CLOCK); tries++; } while (tries < 32); @@ -648,7 +657,7 @@ void usage ( void ) int main ( int argc, char * argv [] ) { int fd; - int rc; + int rc, exitrc; int i; unsigned char buf[2048]; unsigned char sig[4]; @@ -801,8 +810,8 @@ int main ( int argc, char * argv [] ) rc = avr_initialize(fd); if (rc < 0) { fprintf ( stderr, "%s: initialization failed, rc=%d\n", progname, rc ); - avr_powerdown(fd); - return 1; + exitrc = 1; + goto main_exit; } fprintf ( stderr, "%s: AVR device initialized and ready to accept instructions\n", @@ -844,9 +853,8 @@ int main ( int argc, char * argv [] ) fprintf(stderr, "%s: you must specify an input or an output file\n", progname); } - avr_powerdown(fd); - close(fd); - return 1; + exitrc = 1; + goto main_exit; } @@ -858,10 +866,8 @@ int main ( int argc, char * argv [] ) fprintf(stderr, "%s: please specify either the eeprom (-e) or the flash (-f) memory\n", progname); - avr_powerdown(fd); - close(fd); - close(iofd); - return 1; + exitrc = 1; + goto main_exit; } @@ -876,10 +882,8 @@ int main ( int argc, char * argv [] ) if (rc) { fprintf ( stderr, "%s: failed to read all of flash memory, rc=%d\n", progname, rc ); - avr_powerdown(fd); - close(fd); - close(iofd); - return 1; + exitrc = 1; + goto main_exit; } } else if (eeprom) { @@ -889,10 +893,8 @@ int main ( int argc, char * argv [] ) if (rc) { fprintf ( stderr, "%s: failed to read all of eeprom memory, rc=%d\n", progname, rc ); - avr_powerdown(fd); - close(fd); - close(iofd); - return 1; + exitrc = 1; + goto main_exit; } } @@ -902,18 +904,14 @@ int main ( int argc, char * argv [] ) rc = write ( iofd, buf, size ); if (rc < 0) { fprintf(stderr, "%s: write error: %s\n", progname, strerror(errno)); - avr_powerdown(fd); - close(fd); - close(iofd); - return 1; + exitrc = 1; + goto main_exit; } else if (rc != size) { fprintf(stderr, "%s: wrote only %d bytes of the expected %d\n", progname, rc, size); - avr_powerdown(fd); - close(fd); - close(iofd); - return 1; + exitrc = 1; + goto main_exit; } } else { @@ -934,10 +932,8 @@ int main ( int argc, char * argv [] ) if (rc < 0) { fprintf(stderr, "%s: read error from \"%s\": %s\n", progname, inputf, strerror(errno)); - avr_powerdown(fd); - close(fd); - close(iofd); - return 1; + exitrc = 1; + goto main_exit; } size = rc; @@ -952,10 +948,8 @@ int main ( int argc, char * argv [] ) if (rc) { fprintf ( stderr, "%s: failed to write flash memory, rc=%d\n", progname, rc ); - avr_powerdown(fd); - close(fd); - close(iofd); - return 1; + exitrc = 1; + goto main_exit; } } else if (eeprom) { @@ -965,22 +959,24 @@ int main ( int argc, char * argv [] ) if (rc) { fprintf ( stderr, "%s: failed to write eeprom memory, rc=%d\n", progname, rc ); - avr_powerdown(fd); - close(fd); - close(iofd); - return 1; + exitrc = 1; + goto main_exit; } } } + main_exit: /* - * normal program completion + * program complete */ + avr_powerdown(fd); close(fd); close(iofd); + fprintf(stderr, "\n" ); + return 0; }