Document changes since the previous version in the CHANGELOG.

Cleanup stk500.c a bit.


git-svn-id: svn://svn.savannah.nongnu.org/avrdude/trunk/avrdude@164 81a1dc3b-b13d-400b-aceb-764788c761c2
This commit is contained in:
bsd 2002-12-01 20:09:38 +00:00
parent b2c1b19017
commit 992ffd6758
2 changed files with 103 additions and 84 deletions

View File

@ -4,6 +4,20 @@ Approximate change log for AVRPROG by version
---------------------------------------------------------------------- ----------------------------------------------------------------------
Version 3.0.0
* Rewrite parts of the code to make it easy to support other types
of programmers besides the directly connected parallel port
programmer (PPI).
* Add support for Atmel's STK500 programmer/development board. The
STK500's "paged mode" read/write is supported which makes this
programmer very fast. This is sorely needed on parts with large
memories such as the ATmega128. My 12K test program burns in
about 5 seconds, add another 5 to read it back out for
verification.
Version 2.1.5: Version 2.1.5:
* When getting ready to initiate communications with the AVR device, * When getting ready to initiate communications with the AVR device,

173
stk500.c
View File

@ -57,7 +57,7 @@ extern int do_cycles;
char * stk500_version = "$Id$"; char * stk500_version = "$Id$";
int static send(PROGRAMMER * pgm, char * buf, int buflen) int static stk500_send(PROGRAMMER * pgm, char * buf, int buflen)
{ {
struct timeval timeout; struct timeval timeout;
fd_set wfds; fd_set wfds;
@ -77,7 +77,8 @@ int static send(PROGRAMMER * pgm, char * buf, int buflen)
reselect: reselect:
nfds = select(pgm->fd+1, NULL, &wfds, NULL, &timeout); nfds = select(pgm->fd+1, NULL, &wfds, NULL, &timeout);
if (nfds == 0) { if (nfds == 0) {
fprintf(stderr, "%s: send(): programmer is not responding on %s\n", fprintf(stderr,
"%s: stk500_send(): programmer is not responding on %s\n",
progname, pgm->port); progname, pgm->port);
exit(1); exit(1);
} }
@ -86,7 +87,7 @@ int static send(PROGRAMMER * pgm, char * buf, int buflen)
goto reselect; goto reselect;
} }
else { else {
fprintf(stderr, "%s: send(): select(): %s\n", fprintf(stderr, "%s: stk500_send(): select(): %s\n",
progname, strerror(errno)); progname, strerror(errno));
exit(1); exit(1);
} }
@ -94,7 +95,7 @@ int static send(PROGRAMMER * pgm, char * buf, int buflen)
rc = write(pgm->fd, buf, 1); rc = write(pgm->fd, buf, 1);
if (rc < 0) { if (rc < 0) {
fprintf(stderr, "%s: send(): write error: %s\n", fprintf(stderr, "%s: stk500_send(): write error: %s\n",
progname, strerror(errno)); progname, strerror(errno));
exit(1); exit(1);
} }
@ -107,7 +108,7 @@ int static send(PROGRAMMER * pgm, char * buf, int buflen)
int static recv(PROGRAMMER * pgm, char * buf, int n) int static stk500_recv(PROGRAMMER * pgm, char * buf, int n)
{ {
struct timeval timeout; struct timeval timeout;
fd_set rfds; fd_set rfds;
@ -124,7 +125,8 @@ int static recv(PROGRAMMER * pgm, char * buf, int n)
reselect: reselect:
nfds = select(pgm->fd+1, &rfds, NULL, NULL, &timeout); nfds = select(pgm->fd+1, &rfds, NULL, NULL, &timeout);
if (nfds == 0) { if (nfds == 0) {
fprintf(stderr, "%s: recv(): programmer is not responding on %s\n", fprintf(stderr,
"%s: stk500_recv(): programmer is not responding on %s\n",
progname, pgm->port); progname, pgm->port);
exit(1); exit(1);
} }
@ -133,7 +135,7 @@ int static recv(PROGRAMMER * pgm, char * buf, int n)
goto reselect; goto reselect;
} }
else { else {
fprintf(stderr, "%s: recv(): select(): %s\n", fprintf(stderr, "%s: stk500_recv(): select(): %s\n",
progname, strerror(errno)); progname, strerror(errno));
exit(1); exit(1);
} }
@ -141,7 +143,7 @@ int static recv(PROGRAMMER * pgm, char * buf, int n)
rc = read(pgm->fd, buf, 1); rc = read(pgm->fd, buf, 1);
if (rc < 0) { if (rc < 0) {
fprintf(stderr, "%s: recv(): read error: %s\n", fprintf(stderr, "%s: stk500_recv(): read error: %s\n",
progname, strerror(errno)); progname, strerror(errno));
exit(1); exit(1);
} }
@ -153,7 +155,7 @@ int static recv(PROGRAMMER * pgm, char * buf, int n)
} }
int static drain(PROGRAMMER * pgm, int display) int static stk500_drain(PROGRAMMER * pgm, int display)
{ {
struct timeval timeout; struct timeval timeout;
fd_set rfds; fd_set rfds;
@ -186,7 +188,7 @@ int static drain(PROGRAMMER * pgm, int display)
goto reselect; goto reselect;
} }
else { else {
fprintf(stderr, "%s: drain(): select(): %s\n", fprintf(stderr, "%s: stk500_drain(): select(): %s\n",
progname, strerror(errno)); progname, strerror(errno));
exit(1); exit(1);
} }
@ -194,7 +196,7 @@ int static drain(PROGRAMMER * pgm, int display)
rc = read(pgm->fd, &buf, 1); rc = read(pgm->fd, &buf, 1);
if (rc < 0) { if (rc < 0) {
fprintf(stderr, "%s: drain(): read error: %s\n", fprintf(stderr, "%s: stk500_drain(): read error: %s\n",
progname, strerror(errno)); progname, strerror(errno));
exit(1); exit(1);
} }
@ -205,7 +207,7 @@ int static drain(PROGRAMMER * pgm, int display)
} }
static int getsync(PROGRAMMER * pgm) static int stk500_getsync(PROGRAMMER * pgm)
{ {
unsigned char buf[32], resp[32]; unsigned char buf[32], resp[32];
@ -213,20 +215,21 @@ static int getsync(PROGRAMMER * pgm)
* get in sync */ * get in sync */
buf[0] = Cmnd_STK_GET_SYNC; buf[0] = Cmnd_STK_GET_SYNC;
buf[1] = Sync_CRC_EOP; buf[1] = Sync_CRC_EOP;
send(pgm, buf, 2); stk500_send(pgm, buf, 2);
recv(pgm, resp, 1); stk500_recv(pgm, resp, 1);
if (resp[0] != Resp_STK_INSYNC) { if (resp[0] != Resp_STK_INSYNC) {
fprintf(stderr, fprintf(stderr,
"%s: stk500_open(): not in sync: resp=0x%02x\n", "%s: stk500_getsync(): not in sync: resp=0x%02x\n",
progname, resp[0]); progname, resp[0]);
drain(pgm, 0); stk500_drain(pgm, 0);
exit(1); exit(1);
} }
recv(pgm, resp, 1); stk500_recv(pgm, resp, 1);
if (resp[0] != Resp_STK_OK) { if (resp[0] != Resp_STK_OK) {
fprintf(stderr, fprintf(stderr,
"%s: stk500_open(): can't communicate with device: resp=0x%02x\n", "%s: stk500_getsync(): can't communicate with device: "
"resp=0x%02x\n",
progname, resp[0]); progname, resp[0]);
exit(1); exit(1);
} }
@ -271,22 +274,22 @@ int stk500_cmd(PROGRAMMER * pgm, unsigned char cmd[4], unsigned char res[4])
buf[4] = cmd[3]; buf[4] = cmd[3];
buf[5] = Sync_CRC_EOP; buf[5] = Sync_CRC_EOP;
send(pgm, buf, 6); stk500_send(pgm, buf, 6);
recv(pgm, buf, 1); stk500_recv(pgm, buf, 1);
if (buf[0] != Resp_STK_INSYNC) { if (buf[0] != Resp_STK_INSYNC) {
fprintf(stderr, "%s: programmer is out of sync\n", progname); fprintf(stderr, "%s: stk500_cmd(): programmer is out of sync\n", progname);
exit(1); exit(1);
} }
res[0] = cmd[1]; res[0] = cmd[1];
res[1] = cmd[2]; res[1] = cmd[2];
res[2] = cmd[3]; res[2] = cmd[3];
recv(pgm, &res[3], 1); stk500_recv(pgm, &res[3], 1);
recv(pgm, buf, 1); stk500_recv(pgm, buf, 1);
if (buf[0] != Resp_STK_OK) { if (buf[0] != Resp_STK_OK) {
fprintf(stderr, "%s: protocol error\n", progname); fprintf(stderr, "%s: stk500_cmd(): protocol error\n", progname);
exit(1); exit(1);
} }
@ -363,26 +366,26 @@ int stk500_program_enable(PROGRAMMER * pgm, AVRPART * p)
buf[0] = Cmnd_STK_ENTER_PROGMODE; buf[0] = Cmnd_STK_ENTER_PROGMODE;
buf[1] = Sync_CRC_EOP; buf[1] = Sync_CRC_EOP;
send(pgm, buf, 2); stk500_send(pgm, buf, 2);
recv(pgm, buf, 1); stk500_recv(pgm, buf, 1);
if (buf[0] == Resp_STK_NOSYNC) { if (buf[0] == Resp_STK_NOSYNC) {
if (tries > 33) { if (tries > 33) {
fprintf(stderr, "%s: stk500_program_enable(): can't get into sync\n", fprintf(stderr, "%s: stk500_program_enable(): can't get into sync\n",
progname); progname);
return -1; return -1;
} }
getsync(pgm); stk500_getsync(pgm);
goto retry; goto retry;
} }
else if (buf[0] != Resp_STK_INSYNC) { else if (buf[0] != Resp_STK_INSYNC) {
fprintf(stderr, fprintf(stderr,
"%s: stk500_initialize(): (a) protocol error, " "%s: stk500_program_enable(): protocol error, "
"expect=0x%02x, resp=0x%02x\n", "expect=0x%02x, resp=0x%02x\n",
progname, Resp_STK_INSYNC, buf[0]); progname, Resp_STK_INSYNC, buf[0]);
return -1; return -1;
} }
recv(pgm, buf, 1); stk500_recv(pgm, buf, 1);
if (buf[0] == Resp_STK_OK) { if (buf[0] == Resp_STK_OK) {
return 0; return 0;
} }
@ -426,6 +429,11 @@ int stk500_initialize(PROGRAMMER * pgm, AVRPART * p)
AVRMEM * m; AVRMEM * m;
int tries; int tries;
tries = 0;
retry:
tries++;
/* /*
* set device programming parameters * set device programming parameters
*/ */
@ -501,18 +509,15 @@ int stk500_initialize(PROGRAMMER * pgm, AVRPART * p)
buf[21] = Sync_CRC_EOP; buf[21] = Sync_CRC_EOP;
tries = 0; stk500_send(pgm, buf, 22);
retry: stk500_recv(pgm, buf, 1);
tries++;
send(pgm, buf, 22);
recv(pgm, buf, 1);
if (buf[0] == Resp_STK_NOSYNC) { if (buf[0] == Resp_STK_NOSYNC) {
fprintf(stderr, fprintf(stderr,
"%s: stk500_initialize(): programmer not in sync, resp=0x%02x\n", "%s: stk500_initialize(): programmer not in sync, resp=0x%02x\n",
progname, buf[0]); progname, buf[0]);
if (tries > 33) if (tries > 33)
return -1; return -1;
getsync(pgm); stk500_getsync(pgm);
goto retry; goto retry;
return -1; return -1;
} }
@ -524,7 +529,7 @@ int stk500_initialize(PROGRAMMER * pgm, AVRPART * p)
return -1; return -1;
} }
recv(pgm, buf, 1); stk500_recv(pgm, buf, 1);
if (buf[0] != Resp_STK_OK) { if (buf[0] != Resp_STK_OK) {
fprintf(stderr, fprintf(stderr,
"%s: stk500_initialize(): (b) protocol error, " "%s: stk500_initialize(): (b) protocol error, "
@ -559,15 +564,15 @@ void stk500_disable(PROGRAMMER * pgm)
buf[0] = Cmnd_STK_LEAVE_PROGMODE; buf[0] = Cmnd_STK_LEAVE_PROGMODE;
buf[1] = Sync_CRC_EOP; buf[1] = Sync_CRC_EOP;
send(pgm, buf, 2); stk500_send(pgm, buf, 2);
recv(pgm, buf, 1); stk500_recv(pgm, buf, 1);
if (buf[0] == Resp_STK_NOSYNC) { if (buf[0] == Resp_STK_NOSYNC) {
if (tries > 33) { if (tries > 33) {
fprintf(stderr, "%s: stk500_program_enable(): can't get into sync\n", fprintf(stderr, "%s: stk500_program_enable(): can't get into sync\n",
progname); progname);
return; return;
} }
getsync(pgm); stk500_getsync(pgm);
goto retry; goto retry;
} }
else if (buf[0] != Resp_STK_INSYNC) { else if (buf[0] != Resp_STK_INSYNC) {
@ -578,7 +583,7 @@ void stk500_disable(PROGRAMMER * pgm)
return; return;
} }
recv(pgm, buf, 1); stk500_recv(pgm, buf, 1);
if (buf[0] == Resp_STK_OK) { if (buf[0] == Resp_STK_OK) {
return; return;
} }
@ -600,7 +605,7 @@ void stk500_enable(PROGRAMMER * pgm)
} }
int static set_tty_attr(int fd) int static stk500_setattr(int fd)
{ {
int rc; int rc;
struct termios termios; struct termios termios;
@ -613,12 +618,12 @@ int static set_tty_attr(int fd)
*/ */
rc = tcgetattr(fd, &termios); rc = tcgetattr(fd, &termios);
if (rc < 0) { if (rc < 0) {
fprintf(stderr, "%s: tcgetattr() failed, %s", fprintf(stderr, "%s: stk500_setattr(): tcgetattr() failed, %s",
progname, strerror(errno)); progname, strerror(errno));
return -errno; return -errno;
} }
#if 1 #if 0
termios.c_iflag &= ~(INPCK | IXOFF | IXON); termios.c_iflag &= ~(INPCK | IXOFF | IXON);
termios.c_cflag &= ~(HUPCL | CSTOPB | CRTSCTS); termios.c_cflag &= ~(HUPCL | CSTOPB | CRTSCTS);
termios.c_cflag |= (CLOCAL | CREAD); termios.c_cflag |= (CLOCAL | CREAD);
@ -628,7 +633,7 @@ int static set_tty_attr(int fd)
termios.c_iflag = 0; termios.c_iflag = 0;
termios.c_oflag = 0; termios.c_oflag = 0;
termios.c_cflag &= ~ (PARENB | CSIZE | CSTOPB); termios.c_cflag &= ~ (PARENB | CSIZE | CSTOPB);
termios.c_cflag |= (CS8 | HUPCL | CREAD | CLOCAL); termios.c_cflag |= (CS8 | CREAD | CLOCAL);
termios.c_lflag = 0; termios.c_lflag = 0;
termios.c_cc[VMIN] = 1; termios.c_cc[VMIN] = 1;
termios.c_cc[VTIME] = 0; termios.c_cc[VTIME] = 0;
@ -639,7 +644,8 @@ int static set_tty_attr(int fd)
rc = tcsetattr(fd, TCSANOW, &termios); rc = tcsetattr(fd, TCSANOW, &termios);
if (rc < 0) { if (rc < 0) {
fprintf(stderr, "%s: tcsetattr() failed, %s", progname, strerror(errno)); fprintf(stderr, "%s: stk500_setattr(): tcsetattr() failed, %s",
progname, strerror(errno));
return -errno; return -errno;
} }
@ -658,7 +664,7 @@ void stk500_open(PROGRAMMER * pgm, char * port)
*/ */
pgm->fd = open(port, O_RDWR | O_NOCTTY /*| O_NONBLOCK*/); pgm->fd = open(port, O_RDWR | O_NOCTTY /*| O_NONBLOCK*/);
if (pgm->fd < 0) { if (pgm->fd < 0) {
fprintf(stderr, "%s: can't open device \"%s\": %s\n", fprintf(stderr, "%s: stk500_open(): can't open device \"%s\": %s\n",
progname, port, strerror(errno)); progname, port, strerror(errno));
exit(1); exit(1);
} }
@ -666,9 +672,10 @@ void stk500_open(PROGRAMMER * pgm, char * port)
/* /*
* set serial line attributes * set serial line attributes
*/ */
rc = set_tty_attr(pgm->fd); rc = stk500_setattr(pgm->fd);
if (rc) { if (rc) {
fprintf(stderr, "%s: can't set attributes for device \"%s\"\n", fprintf(stderr,
"%s: stk500_open(): can't set attributes for device \"%s\"\n",
progname, port); progname, port);
exit(1); exit(1);
} }
@ -676,11 +683,11 @@ void stk500_open(PROGRAMMER * pgm, char * port)
/* /*
* drain any extraneous input * drain any extraneous input
*/ */
drain(pgm, 0); stk500_drain(pgm, 0);
getsync(pgm); stk500_getsync(pgm);
drain(pgm, 0); stk500_drain(pgm, 0);
} }
@ -691,7 +698,7 @@ void stk500_close(PROGRAMMER * pgm)
} }
static int loadaddr(PROGRAMMER * pgm, uint16_t addr) static int stk500_loadaddr(PROGRAMMER * pgm, uint16_t addr)
{ {
unsigned char buf[16]; unsigned char buf[16];
int tries; int tries;
@ -704,35 +711,36 @@ static int loadaddr(PROGRAMMER * pgm, uint16_t addr)
buf[2] = (addr >> 8) & 0xff; buf[2] = (addr >> 8) & 0xff;
buf[3] = Sync_CRC_EOP; buf[3] = Sync_CRC_EOP;
send(pgm, buf, 4); stk500_send(pgm, buf, 4);
recv(pgm, buf, 1); stk500_recv(pgm, buf, 1);
if (buf[0] == Resp_STK_NOSYNC) { if (buf[0] == Resp_STK_NOSYNC) {
if (tries > 33) { if (tries > 33) {
fprintf(stderr, "%s: loadaddr(): can't get into sync\n", fprintf(stderr, "%s: stk500_loadaddr(): can't get into sync\n",
progname); progname);
return -1; return -1;
} }
getsync(pgm); stk500_getsync(pgm);
goto retry; goto retry;
} }
else if (buf[0] != Resp_STK_INSYNC) { else if (buf[0] != Resp_STK_INSYNC) {
fprintf(stderr, fprintf(stderr,
"%s: loadaddr(): (a) protocol error, " "%s: stk500_loadaddr(): (a) protocol error, "
"expect=0x%02x, resp=0x%02x\n", "expect=0x%02x, resp=0x%02x\n",
progname, Resp_STK_INSYNC, buf[0]); progname, Resp_STK_INSYNC, buf[0]);
return -1; return -1;
} }
recv(pgm, buf, 1); stk500_recv(pgm, buf, 1);
if (buf[0] == Resp_STK_OK) { if (buf[0] == Resp_STK_OK) {
return 0; return 0;
} }
fprintf(stderr, fprintf(stderr,
"%s: loadaddr(): (a) protocol error, " "%s: loadaddr(): (b) protocol error, "
"expect=0x%02x, resp=0x%02x\n", "expect=0x%02x, resp=0x%02x\n",
progname, Resp_STK_INSYNC, buf[0]); progname, Resp_STK_INSYNC, buf[0]);
return -1; return -1;
} }
@ -781,27 +789,27 @@ int stk500_paged_write(PROGRAMMER * pgm, AVRPART * p, AVRMEM * m,
tries = 0; tries = 0;
retry: retry:
tries++; tries++;
loadaddr(pgm, addr/a_div); stk500_loadaddr(pgm, addr/a_div);
buf[0] = Cmnd_STK_PROG_PAGE; buf[0] = Cmnd_STK_PROG_PAGE;
buf[1] = (page_size >> 8) & 0xff; buf[1] = (page_size >> 8) & 0xff;
buf[2] = page_size & 0xff; buf[2] = page_size & 0xff;
buf[3] = memtype; buf[3] = memtype;
send(pgm, buf, 4); stk500_send(pgm, buf, 4);
for (i=0; i<page_size; i++) { for (i=0; i<page_size; i++) {
buf[0] = m->buf[addr + i]; buf[0] = m->buf[addr + i];
send(pgm, buf, 1); stk500_send(pgm, buf, 1);
} }
buf[0] = Sync_CRC_EOP; buf[0] = Sync_CRC_EOP;
send(pgm, buf, 1); stk500_send(pgm, buf, 1);
recv(pgm, buf, 1); stk500_recv(pgm, buf, 1);
if (buf[0] == Resp_STK_NOSYNC) { if (buf[0] == Resp_STK_NOSYNC) {
if (tries > 33) { if (tries > 33) {
fprintf(stderr, "\n%s: stk500_paged_write(): can't get into sync\n", fprintf(stderr, "\n%s: stk500_paged_write(): can't get into sync\n",
progname); progname);
return -3; return -3;
} }
getsync(pgm); stk500_getsync(pgm);
goto retry; goto retry;
} }
else if (buf[0] != Resp_STK_INSYNC) { else if (buf[0] != Resp_STK_INSYNC) {
@ -812,7 +820,7 @@ int stk500_paged_write(PROGRAMMER * pgm, AVRPART * p, AVRMEM * m,
return -4; return -4;
} }
recv(pgm, buf, 1); stk500_recv(pgm, buf, 1);
if (buf[0] != Resp_STK_OK) { if (buf[0] != Resp_STK_OK) {
fprintf(stderr, fprintf(stderr,
"\n%s: stk500_paged_write(): (a) protocol error, " "\n%s: stk500_paged_write(): (a) protocol error, "
@ -866,30 +874,27 @@ int stk500_paged_load(PROGRAMMER * pgm, AVRPART * p, AVRMEM * m,
} }
} }
fprintf(stderr, "%s: stk500_paged_load(): n=%d, a_div=%d\n",
progname, n, a_div);
for (addr = 0; addr < n; addr += page_size) { for (addr = 0; addr < n; addr += page_size) {
fprintf(stderr, "\r \r%6u", addr); fprintf(stderr, "\r \r%6u", addr);
tries = 0; tries = 0;
retry: retry:
tries++; tries++;
loadaddr(pgm, addr/a_div); stk500_loadaddr(pgm, addr/a_div);
buf[0] = Cmnd_STK_READ_PAGE; buf[0] = Cmnd_STK_READ_PAGE;
buf[1] = (page_size >> 8) & 0xff; buf[1] = (page_size >> 8) & 0xff;
buf[2] = page_size & 0xff; buf[2] = page_size & 0xff;
buf[3] = memtype; buf[3] = memtype;
buf[4] = Sync_CRC_EOP; buf[4] = Sync_CRC_EOP;
send(pgm, buf, 5); stk500_send(pgm, buf, 5);
recv(pgm, buf, 1); stk500_recv(pgm, buf, 1);
if (buf[0] == Resp_STK_NOSYNC) { if (buf[0] == Resp_STK_NOSYNC) {
if (tries > 33) { if (tries > 33) {
fprintf(stderr, "\n%s: stk500_paged_load(): can't get into sync\n", fprintf(stderr, "\n%s: stk500_paged_load(): can't get into sync\n",
progname); progname);
return -3; return -3;
} }
getsync(pgm); stk500_getsync(pgm);
goto retry; goto retry;
} }
else if (buf[0] != Resp_STK_INSYNC) { else if (buf[0] != Resp_STK_INSYNC) {
@ -900,9 +905,9 @@ int stk500_paged_load(PROGRAMMER * pgm, AVRPART * p, AVRMEM * m,
return -4; return -4;
} }
recv(pgm, &m->buf[addr], page_size); stk500_recv(pgm, &m->buf[addr], page_size);
recv(pgm, buf, 1); stk500_recv(pgm, buf, 1);
if (buf[0] != Resp_STK_OK) { if (buf[0] != Resp_STK_OK) {
fprintf(stderr, fprintf(stderr,
"\n%s: stk500_paged_load(): (a) protocol error, " "\n%s: stk500_paged_load(): (a) protocol error, "
@ -918,7 +923,7 @@ int stk500_paged_load(PROGRAMMER * pgm, AVRPART * p, AVRMEM * m,
} }
static int getparm(PROGRAMMER * pgm, unsigned parm, unsigned * value) static int stk500_getparm(PROGRAMMER * pgm, unsigned parm, unsigned * value)
{ {
unsigned char buf[16]; unsigned char buf[16];
unsigned v; unsigned v;
@ -930,16 +935,16 @@ static int getparm(PROGRAMMER * pgm, unsigned parm, unsigned * value)
buf[1] = parm; buf[1] = parm;
buf[2] = Sync_CRC_EOP; buf[2] = Sync_CRC_EOP;
send(pgm, buf, 3); stk500_send(pgm, buf, 3);
recv(pgm, buf, 1); stk500_recv(pgm, buf, 1);
if (buf[0] == Resp_STK_NOSYNC) { if (buf[0] == Resp_STK_NOSYNC) {
if (tries > 33) { if (tries > 33) {
fprintf(stderr, "\n%s: getparm(): can't get into sync\n", fprintf(stderr, "\n%s: getparm(): can't get into sync\n",
progname); progname);
return -1; return -1;
} }
getsync(pgm); stk500_getsync(pgm);
goto retry; goto retry;
} }
else if (buf[0] != Resp_STK_INSYNC) { else if (buf[0] != Resp_STK_INSYNC) {
@ -950,10 +955,10 @@ static int getparm(PROGRAMMER * pgm, unsigned parm, unsigned * value)
return -2; return -2;
} }
recv(pgm, buf, 1); stk500_recv(pgm, buf, 1);
v = buf[0]; v = buf[0];
recv(pgm, buf, 1); stk500_recv(pgm, buf, 1);
if (buf[0] == Resp_STK_FAILED) { if (buf[0] == Resp_STK_FAILED) {
fprintf(stderr, fprintf(stderr,
"\n%s: getparm(): parameter 0x%02x failed\n", "\n%s: getparm(): parameter 0x%02x failed\n",
@ -978,9 +983,9 @@ void stk500_display(PROGRAMMER * pgm, char * p)
{ {
unsigned maj, min, hdw; unsigned maj, min, hdw;
getparm(pgm, Parm_STK_HW_VER, &hdw); stk500_getparm(pgm, Parm_STK_HW_VER, &hdw);
getparm(pgm, Parm_STK_SW_MAJOR, &maj); stk500_getparm(pgm, Parm_STK_SW_MAJOR, &maj);
getparm(pgm, Parm_STK_SW_MINOR, &min); stk500_getparm(pgm, Parm_STK_SW_MINOR, &min);
fprintf(stderr, "%sHardware Version: %d\n", p, hdw); fprintf(stderr, "%sHardware Version: %d\n", p, hdw);
fprintf(stderr, "%sFirmware Version: %d.%d\n", p, maj, min); fprintf(stderr, "%sFirmware Version: %d.%d\n", p, maj, min);