Percolate LIBAVRDUDE_EXIT_* return value to caller

This commit is contained in:
Stefan Rueger
2026-06-18 14:07:49 +01:00
parent 37178df389
commit 73d8a49c7a
15 changed files with 83 additions and 72 deletions

View File

@@ -119,9 +119,9 @@ static int arduino_open(PROGRAMMER *pgm, const char *port) {
union pinfo pinfo;
pinfo.serialinfo.baud = pgm->baudrate? pgm->baudrate: 115200;
pinfo.serialinfo.cflags = SERIAL_8N1;
if(serial_open(port, pinfo, &pgm->fd) == -1) {
return -1;
}
int rc;
if((rc = serial_open(port, pinfo, &pgm->fd)) < 0)
return rc;
if(my.autoreset) {
// This code assumes a negative-logic USB to TTL serial adapter

View File

@@ -328,8 +328,9 @@ static int avr910_open(PROGRAMMER *pgm, const char *port) {
pgm->port = port;
pinfo.serialinfo.baud = pgm->baudrate? pgm->baudrate: 19200;
pinfo.serialinfo.cflags = SERIAL_8N1;
if(serial_open(port, pinfo, &pgm->fd) < 0)
return -1;
int rc;
if((rc = serial_open(port, pinfo, &pgm->fd)) < 0)
return rc;
(void) avr910_drain(pgm, 0);

View File

@@ -448,9 +448,9 @@ static int buspirate_open(PROGRAMMER *pgm, const char *port) {
pinfo.serialinfo.baud = pgm->baudrate? pgm->baudrate: 115200;
pinfo.serialinfo.cflags = SERIAL_8N1;
pgm->port = port;
if(serial_open(port, pinfo, &pgm->fd) == -1) {
return -1;
}
int rc;
if((rc = serial_open(port, pinfo, &pgm->fd)) < 0)
return rc;
// Drain any extraneous input
serial_drain(&pgm->fd, 0);

View File

@@ -329,8 +329,9 @@ static int butterfly_open(PROGRAMMER *pgm, const char *port) {
union pinfo pinfo;
pinfo.serialinfo.baud = pgm->baudrate? pgm->baudrate: 19200;
pinfo.serialinfo.cflags = SERIAL_8N1;
if(serial_open(port, pinfo, &pgm->fd) == -1)
return -1;
int rc;
if((rc = serial_open(port, pinfo, &pgm->fd)) < 0)
return rc;
if(my.autoreset) {
// This code assumes a negative-logic USB to TTL serial adapter

View File

@@ -1673,6 +1673,8 @@ int jtag3_open_common(PROGRAMMER *pgm, const char *port, int mode_switch) {
pgm->port = port;
rv = serial_open(port, pinfo, &pgm->fd);
if(rv == LIBAVRDUDE_EXIT_FAIL || rv == LIBAVRDUDE_EXIT_OK)
return rv;
}
if(rv < 0) {
#endif // HAVE_LIBHIDAPI
@@ -1689,6 +1691,8 @@ int jtag3_open_common(PROGRAMMER *pgm, const char *port, int mode_switch) {
pgm->port = port;
rv = serial_open(port, pinfo, &pgm->fd);
if(rv == LIBAVRDUDE_EXIT_FAIL || rv == LIBAVRDUDE_EXIT_OK)
return rv;
}
#endif // HAVE_LIBUSB
@@ -1714,9 +1718,13 @@ int jtag3_open_common(PROGRAMMER *pgm, const char *port, int mode_switch) {
int pic_mode = serial_open(port, pinfo, &pgm->fd);
if(pic_mode < 0) {
if(pic_mode == LIBAVRDUDE_EXIT_FAIL || pic_mode == LIBAVRDUDE_EXIT_OK)
return pic_mode;
// Retry with bootloader USB PID
pinfo.usbinfo.pid = bl_pid;
pic_mode = serial_open(port, pinfo, &pgm->fd);
if(pic_mode == LIBAVRDUDE_EXIT_FAIL || pic_mode == LIBAVRDUDE_EXIT_OK)
return pic_mode;
}
if(pic_mode >= 0) {
const char *partsdesc_flag = partdesc? " -p ": "";

View File

@@ -522,9 +522,9 @@ static int jtagmkI_open(PROGRAMMER *pgm, const char *port) {
pinfo.serialinfo.baud = baudtab[i].baud;
pinfo.serialinfo.cflags = SERIAL_8N1;
pmsg_notice2("%s(): trying to sync at baud rate %ld:\n", __func__, pinfo.serialinfo.baud);
if(serial_open(port, pinfo, &pgm->fd) == -1) {
return -1;
}
int rc;
if((rc = serial_open(port, pinfo, &pgm->fd)) < 0)
return rc;
// Drain any extraneous input
jtagmkI_drain(pgm, 0);

View File

@@ -1417,9 +1417,9 @@ static int jtagmkII_open(PROGRAMMER *pgm, const char *port) {
}
pgm->port = port;
if(serial_open(port, pinfo, &pgm->fd) == -1) {
return -1;
}
int rc;
if((rc = serial_open(port, pinfo, &pgm->fd)) < 0)
return rc;
// Drain any extraneous input
jtagmkII_drain(pgm, 0);
@@ -1467,9 +1467,9 @@ static int jtagmkII_open_dw(PROGRAMMER *pgm, const char *port) {
}
pgm->port = port;
if(serial_open(port, pinfo, &pgm->fd) == -1) {
return -1;
}
int rc;
if((rc = serial_open(port, pinfo, &pgm->fd)) < 0)
return rc;
// Drain any extraneous input
jtagmkII_drain(pgm, 0);
@@ -1517,9 +1517,9 @@ static int jtagmkII_open_pdi(PROGRAMMER *pgm, const char *port) {
}
pgm->port = port;
if(serial_open(port, pinfo, &pgm->fd) == -1) {
return -1;
}
int rc;
if((rc = serial_open(port, pinfo, &pgm->fd)) < 0)
return rc;
// Drain any extraneous input
jtagmkII_drain(pgm, 0);
@@ -1573,9 +1573,9 @@ static int jtagmkII_dragon_open(PROGRAMMER *pgm, const char *port) {
}
pgm->port = port;
if(serial_open(port, pinfo, &pgm->fd) == -1) {
return -1;
}
int rc;
if((rc = serial_open(port, pinfo, &pgm->fd)) < 0)
return rc;
// Drain any extraneous input
jtagmkII_drain(pgm, 0);
@@ -1623,9 +1623,9 @@ static int jtagmkII_dragon_open_dw(PROGRAMMER *pgm, const char *port) {
}
pgm->port = port;
if(serial_open(port, pinfo, &pgm->fd) == -1) {
return -1;
}
int rc;
if((rc = serial_open(port, pinfo, &pgm->fd)) < 0)
return rc;
// Drain any extraneous input
jtagmkII_drain(pgm, 0);
@@ -1650,11 +1650,7 @@ static int jtagmkII_dragon_open_pdi(PROGRAMMER *pgm, const char *port) {
pinfo.serialinfo.baud = 19200;
pinfo.serialinfo.cflags = SERIAL_8N1;
/*
* If the port name starts with "usb", divert the serial routines to the USB
* ones. The serial_open() function for USB overrides the meaning of the
* "baud" parameter to be the USB device ID to search for.
*/
// If the port name starts with "usb", divert the serial routines to the USB ones
if(str_casestarts(port, "usb")) {
#if defined(HAVE_LIBUSB)
@@ -1673,9 +1669,9 @@ static int jtagmkII_dragon_open_pdi(PROGRAMMER *pgm, const char *port) {
}
pgm->port = port;
if(serial_open(port, pinfo, &pgm->fd) == -1) {
return -1;
}
int rc;
if((rc = serial_open(port, pinfo, &pgm->fd)) < 0)
return rc;
// Drain any extraneous input
jtagmkII_drain(pgm, 0);
@@ -3255,9 +3251,9 @@ static int jtagmkII_open32(PROGRAMMER *pgm, const char *port) {
}
pgm->port = port;
if(serial_open(port, pinfo, &pgm->fd) == -1) {
return -1;
}
int rc;
if((rc = serial_open(port, pinfo, &pgm->fd)) < 0)
return rc;
// Drain any extraneous input
jtagmkII_drain(pgm, 0);

View File

@@ -331,9 +331,10 @@ int touch_serialport(char **portp, int baudrate, int nwaits) {
pinfo.serialinfo.baud = baudrate;
pinfo.serialinfo.cflags = SERIAL_8N1;
if(serial_open(*portp, pinfo, &fd) == -1) {
int rc;
if((rc = serial_open(*portp, pinfo, &fd)) < 0) {
pmsg_error("%s() failed to open port %s at %d baud\n", __func__, *portp, baudrate);
return -1;
return rc;
}
serial_set_dtr_rts(&fd, 1);
usleep(100);

View File

@@ -169,8 +169,9 @@ static int serprog_open(PROGRAMMER *pgm, const char *port) {
pgm->port = port;
pinfo.serialinfo.baud = pgm->baudrate? pgm->baudrate: 115200;
pinfo.serialinfo.cflags = SERIAL_8N1;
if(serial_open(port, pinfo, &pgm->fd) == -1)
return -1;
int rc;
if((rc = serial_open(port, pinfo, &pgm->fd)) < 0)
return rc;
unsigned char buf[32];

View File

@@ -854,9 +854,9 @@ static int stk500_open(PROGRAMMER *pgm, const char *port) {
pgm->port = port;
pinfo.serialinfo.baud = pgm->baudrate? pgm->baudrate: 115200;
pinfo.serialinfo.cflags = SERIAL_8N1;
if(serial_open(port, pinfo, &pgm->fd) == -1) {
return -1;
}
int rc;
if((rc = serial_open(port, pinfo, &pgm->fd)) < 0)
return rc;
// Drain any extraneous input
stk500_drain(pgm, 0);

View File

@@ -1365,7 +1365,7 @@ static int stk500v2_jtag3_initialize(const PROGRAMMER *pgm, const AVRPART *p) {
if(my.vtarg_switch_get) {
pmsg_info("Vtarg switch setting read as %u: target power is switched %s\n",
my.vtarg_switch_data[0], my.vtarg_switch_data[0]? "on": "off");
}
}
// Write Vtarg switch value
if(my.vtarg_switch_set) {
if(jtag3_setparm(pgmcp, SCOPE_EDBG, EDBG_CTXT_CONTROL,
@@ -1504,7 +1504,7 @@ static int stk500hv_initialize(const PROGRAMMER *pgm, const AVRPART *p, enum hvm
my.varef_channel, (varef_read/100.0));
}
// STK600: Write target voltage value for channel n
if(my.varef_set) {
if(my.varef_set) {
msg_info("Changing analog reference channel %d voltage from %.2f V to %.2f V\n",
my.varef_channel, (varef_read/100.0), my.varef_data);
if(pgm->set_varef(pgm, my.varef_channel, my.varef_data) < 0)
@@ -2148,9 +2148,9 @@ static int stk500v2_open(PROGRAMMER *pgm, const char *port) {
}
pgm->port = port;
if(serial_open(port, pinfo, &pgm->fd) == -1) {
return -1;
}
int rc;
if((rc = serial_open(port, pinfo, &pgm->fd)) < 0)
return rc;
// Make USB serial number and USB product name available to programmer
if(serdev) {
@@ -2216,9 +2216,9 @@ static int stk600_open(PROGRAMMER *pgm, const char *port) {
}
pgm->port = port;
if(serial_open(port, pinfo, &pgm->fd) == -1) {
return -1;
}
int rc;
if((rc = serial_open(port, pinfo, &pgm->fd)) < 0)
return rc;
// Drain any extraneous input, synchronise and drain again
if(stk500v2_drain(pgm, 0) < 0 || stk500v2_getsync(pgm) < 0 || stk500v2_drain(pgm, 0) < 0)
@@ -3927,9 +3927,9 @@ static int stk500v2_jtagmkII_open(PROGRAMMER *pgm, const char *port) {
}
pgm->port = port;
if(serial_open(port, pinfo, &pgm->fd) == -1) {
return -1;
}
int rc;
if((rc = serial_open(port, pinfo, &pgm->fd)) < 0)
return rc;
// Drain any extraneous input
stk500v2_drain(pgm, 0);
@@ -4025,9 +4025,9 @@ static int stk500v2_dragon_isp_open(PROGRAMMER *pgm, const char *port) {
}
pgm->port = port;
if(serial_open(port, pinfo, &pgm->fd) == -1) {
return -1;
}
int rc;
if((rc = serial_open(port, pinfo, &pgm->fd)) < 0)
return rc;
// Drain any extraneous input
stk500v2_drain(pgm, 0);
@@ -4098,9 +4098,9 @@ static int stk500v2_dragon_hv_open(PROGRAMMER *pgm, const char *port) {
}
pgm->port = port;
if(serial_open(port, pinfo, &pgm->fd) == -1) {
return -1;
}
int rc;
if((rc = serial_open(port, pinfo, &pgm->fd)) < 0)
return rc;
// Drain any extraneous input
stk500v2_drain(pgm, 0);

View File

@@ -57,10 +57,10 @@ static int updi_physical_open(PROGRAMMER *pgm, int baudrate, unsigned long cflag
pmsg_debug("opening serial port ...\n");
if(serial_open(pgm->port, pinfo, &pgm->fd) == -1) {
int rc;
if((rc = serial_open(pgm->port, pinfo, &pgm->fd)) < 0) {
pmsg_debug("serial port open failed!\n");
return -1;
return rc;
}
// Drain any extraneous input

View File

@@ -2249,8 +2249,9 @@ static int urclock_open(PROGRAMMER *pgm, const char *port) {
pinfo.serialinfo.cflags = SERIAL_8N1;
pmsg_debug("%s(\"%s\")\n", __func__, port);
if(serial_open(port, pinfo, &pgm->fd) == -1)
return -1;
int rc;
if((rc = serial_open(port, pinfo, &pgm->fd)) < 0)
return rc;
if(!ur.noautoreset) {
// This code assumes a negative-logic USB to TTL serial adapter

View File

@@ -144,7 +144,9 @@ static int wiring_open(PROGRAMMER *pgm, const char *port) {
pgm->port = port;
pinfo.serialinfo.baud = pgm->baudrate? pgm->baudrate: 115200;
pinfo.serialinfo.cflags = SERIAL_8N1;
serial_open(port, pinfo, &pgm->fd);
int rc;
if((rc = serial_open(port, pinfo, &pgm->fd)) < 0)
return rc;
// If we have a snoozetime, then we wait and do NOT toggle DTR/RTS
if(mywiring.snoozetime > 0) {

View File

@@ -1438,9 +1438,9 @@ static int xbee_open(PROGRAMMER *pgm, const char *port) {
serdev->set_dtr_rts = xbeedev_set_dtr_rts;
serdev->flags = SERDEV_FL_NONE;
if(serial_open(port, pinfo, &pgm->fd) == -1) {
return -1;
}
int rc;
if((rc = serial_open(port, pinfo, &pgm->fd)) < 0)
return rc;
xbeedev_setresetpin(&pgm->fd, my.xbeeResetPin);