Revert the serial_recv() timeout handling as it used to be before my
yesterday's changes (i.e. before rev. 1.10 of ser_posix.c), that is, exit(1) in case of a timeout. Previously, the upper layers didn't see the timeout at all. Quite possible that some of these drivers could handle a timeout more intelligently though. At least for the rather sophisticated STK500v2 protocol, I think it should be possible to retry the request. git-svn-id: svn://svn.savannah.nongnu.org/avrdude/trunk@460 81a1dc3b-b13d-400b-aceb-764788c761c2
This commit is contained in:
parent
5cc4ed40bd
commit
6757ebee57
|
@ -52,7 +52,16 @@ static int avr910_send(PROGRAMMER * pgm, char * buf, size_t len)
|
|||
|
||||
static int avr910_recv(PROGRAMMER * pgm, char * buf, size_t len)
|
||||
{
|
||||
return serial_recv(pgm->fd, buf, len);
|
||||
int rv;
|
||||
|
||||
rv = serial_recv(pgm->fd, buf, len);
|
||||
if (rv < 0) {
|
||||
fprintf(stderr,
|
||||
"%s: avr910_recv(): programmer is not responding\n",
|
||||
progname);
|
||||
exit(1);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -66,9 +66,18 @@ static int butterfly_send(PROGRAMMER * pgm, char * buf, size_t len)
|
|||
|
||||
static int butterfly_recv(PROGRAMMER * pgm, char * buf, size_t len)
|
||||
{
|
||||
int rv;
|
||||
|
||||
no_show_func_info();
|
||||
|
||||
return serial_recv(pgm->fd, buf, len);
|
||||
rv = serial_recv(pgm->fd, buf, len);
|
||||
if (rv < 0) {
|
||||
fprintf(stderr,
|
||||
"%s: butterfly_recv(): programmer is not responding\n",
|
||||
progname);
|
||||
exit(1);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -63,7 +63,16 @@ static int stk500_send(PROGRAMMER * pgm, char * buf, size_t len)
|
|||
|
||||
static int stk500_recv(PROGRAMMER * pgm, char * buf, size_t len)
|
||||
{
|
||||
return serial_recv(pgm->fd, buf, len);
|
||||
int rv;
|
||||
|
||||
rv = serial_recv(pgm->fd, buf, len);
|
||||
if (rv < 0) {
|
||||
fprintf(stderr,
|
||||
"%s: stk500_recv(): programmer is not responding\n",
|
||||
progname);
|
||||
exit(1);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -128,7 +128,8 @@ static int stk500v2_recv(PROGRAMMER * pgm, unsigned char msg[], size_t maxsize)
|
|||
tstart = tv.tv_sec;
|
||||
|
||||
while ( (state != sDONE ) && (!timeout) ) {
|
||||
serial_recv(pgm->fd, &c, 1);
|
||||
if (serial_recv(pgm->fd, &c, 1) < 0)
|
||||
goto timedout;
|
||||
DEBUG("0x%02x ",c);
|
||||
checksum ^= c;
|
||||
|
||||
|
@ -203,6 +204,7 @@ static int stk500v2_recv(PROGRAMMER * pgm, unsigned char msg[], size_t maxsize)
|
|||
gettimeofday(&tv, NULL);
|
||||
tnow = tv.tv_sec;
|
||||
if (tnow-tstart > timeoutval) { // wuff - signed/unsigned/overflow
|
||||
timedout:
|
||||
fprintf(stderr, "%s: stk500_2_ReceiveMessage(): timeout\n",
|
||||
progname);
|
||||
return -1;
|
||||
|
|
Loading…
Reference in New Issue