2003-09-04 Theodore A. Roth * avr.c (avr_read_byte): If pgm->read_byte method fails, retry with avr_read_byte_default. * avr.c (avr_write_byte): If pgm->write_byte method fails, retry with avr_write_byte_default. [Contributed by Jan-Hinnerk Reichert ] * avr910.c (avr910_cmd): Implement using universal command. Index: avr.c =================================================================== RCS file: /cvsroot/avrdude/avrdude/avr.c,v retrieving revision 1.57 diff -u -r1.57 avr.c --- avr.c 29 Jul 2003 22:08:21 -0000 1.57 +++ avr.c 5 Sep 2003 05:54:53 -0000 @@ -343,12 +343,17 @@ int avr_read_byte(PROGRAMMER * pgm, AVRPART * p, AVRMEM * mem, unsigned long addr, unsigned char * value) { + int rc; + if (pgm->read_byte) { - return pgm->read_byte(pgm, p, mem, addr, value); - } - else { - return avr_read_byte_default(pgm, p, mem, addr, value); + rc = pgm->read_byte(pgm, p, mem, addr, value); + if (rc == 0) { + return rc; + } + /* read_byte() method failed, try again with default. */ } + + return avr_read_byte_default(pgm, p, mem, addr, value); } @@ -699,12 +704,17 @@ int avr_write_byte(PROGRAMMER * pgm, AVRPART * p, AVRMEM * mem, unsigned long addr, unsigned char data) { + int rc; + if (pgm->write_byte) { - return pgm->write_byte(pgm, p, mem, addr, data); - } - else { - return avr_write_byte_default(pgm, p, mem, addr, data); + rc = pgm->write_byte(pgm, p, mem, addr, data); + if (rc == 0) { + return rc; + } + /* write_byte() method failed, try again with default. */ } + + return avr_write_byte_default(pgm, p, mem, addr, data); } Index: avr910.c =================================================================== RCS file: /cvsroot/avrdude/avrdude/avr910.c,v retrieving revision 1.10 diff -u -r1.10 avr910.c --- avr910.c 28 Aug 2003 23:02:25 -0000 1.10 +++ avr910.c 5 Sep 2003 05:54:54 -0000 @@ -324,13 +324,25 @@ static int avr910_cmd(PROGRAMMER * pgm, unsigned char cmd[4], unsigned char res[4]) { - int i; + unsigned char buf[5]; no_show_func_info(); - for (i=0; i<4; i++) { - fprintf(stderr, "cmd[%d] = 0x%02x\n", i, cmd[i]); - } + /* FIXME: Insert version check here */ + + buf[0] = '.'; /* New Universal Command */ + buf[1] = cmd[0]; + buf[2] = cmd[1]; + buf[3] = cmd[2]; + buf[4] = cmd[3]; + + avr910_send (pgm, buf, 5); + avr910_recv (pgm, buf, 2); + + res[0] = 0x00; /* Dummy value */ + res[1] = cmd[0]; + res[2] = cmd[1]; + res[3] = buf[0]; return 0; }