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)
|
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)
|
static int butterfly_recv(PROGRAMMER * pgm, char * buf, size_t len)
|
||||||
{
|
{
|
||||||
|
int rv;
|
||||||
|
|
||||||
no_show_func_info();
|
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)
|
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;
|
tstart = tv.tv_sec;
|
||||||
|
|
||||||
while ( (state != sDONE ) && (!timeout) ) {
|
while ( (state != sDONE ) && (!timeout) ) {
|
||||||
serial_recv(pgm->fd, &c, 1);
|
if (serial_recv(pgm->fd, &c, 1) < 0)
|
||||||
|
goto timedout;
|
||||||
DEBUG("0x%02x ",c);
|
DEBUG("0x%02x ",c);
|
||||||
checksum ^= c;
|
checksum ^= c;
|
||||||
|
|
||||||
|
@ -203,6 +204,7 @@ static int stk500v2_recv(PROGRAMMER * pgm, unsigned char msg[], size_t maxsize)
|
||||||
gettimeofday(&tv, NULL);
|
gettimeofday(&tv, NULL);
|
||||||
tnow = tv.tv_sec;
|
tnow = tv.tv_sec;
|
||||||
if (tnow-tstart > timeoutval) { // wuff - signed/unsigned/overflow
|
if (tnow-tstart > timeoutval) { // wuff - signed/unsigned/overflow
|
||||||
|
timedout:
|
||||||
fprintf(stderr, "%s: stk500_2_ReceiveMessage(): timeout\n",
|
fprintf(stderr, "%s: stk500_2_ReceiveMessage(): timeout\n",
|
||||||
progname);
|
progname);
|
||||||
return -1;
|
return -1;
|
||||||
|
|
Loading…
Reference in New Issue