Merge pull request #1766 from stefanrueger/xbee

Make programmer xbee libavrdude ready
This commit is contained in:
Stefan Rueger
2024-04-25 16:41:47 +00:00
committed by GitHub
2 changed files with 16 additions and 26 deletions

View File

@@ -42,6 +42,7 @@ struct pdata {
unsigned char ext_addr_byte; // Record ext-addr byte set in the target device (if used)
int retry_attempts; // Number of connection attempts provided by the user
int xbeeResetPin; // Piggy back variable used by xbee programmmer
struct serial_device xbee_serdev; // Piggy back device descriptor for XBee framing
// Get/set flags for adjustable target voltage
bool vtarg_get;

View File

@@ -160,7 +160,7 @@ struct XBeeStaticticsSummary {
#define XBEE_STATS_TRANSMIT 2
#define XBEE_STATS_RECEIVE 3
static const char* groupNames[] =
static const char * const groupNames[] =
{
"FRAME_LOCAL",
"FRAME_REMOTE",
@@ -1036,7 +1036,7 @@ static int xbeeATError(int rc) {
static void xbeedev_free(struct XBeeBootSession *xbs)
{
xbs->serialDevice->close(&xbs->serialDescriptor);
free(xbs);
mmt_free(xbs);
}
static void xbeedev_close(union filedescriptor *fdp)
@@ -1065,12 +1065,7 @@ static int xbeedev_open(const char *port, union pinfo pinfo,
return -1;
}
struct XBeeBootSession *xbs = malloc(sizeof(struct XBeeBootSession));
if (xbs == NULL) {
pmsg_error("out of memory\n");
return -1;
}
struct XBeeBootSession *xbs = mmt_malloc(sizeof(struct XBeeBootSession));
XBeeBootSessionInit(xbs);
char *tty = &ttySeparator[1];
@@ -1107,7 +1102,7 @@ static int xbeedev_open(const char *port, union pinfo pinfo,
if (addrIndex != 8 || address != ttySeparator || nybble != -1) {
pmsg_error("XBee: bad XBee address, require 16-character hexadecimal address\n");
free(xbs);
mmt_free(xbs);
return -1;
}
@@ -1174,7 +1169,7 @@ static int xbeedev_open(const char *port, union pinfo pinfo,
const int rc = xbs->serialDevice->open(tty, pinfo,
&xbs->serialDescriptor);
if (rc < 0) {
free(xbs);
mmt_free(xbs);
return rc;
}
}
@@ -1499,20 +1494,6 @@ static int xbeedev_set_dtr_rts(const union filedescriptor *fdp, int is_on)
return 0;
}
/*
* Device descriptor for XBee framing.
*/
static struct serial_device xbee_serdev_frame = {
.open = xbeedev_open,
.close = xbeedev_close,
.rawclose = xbeedev_close,
.send = xbeedev_send,
.recv = xbeedev_recv,
.drain = xbeedev_drain,
.set_dtr_rts = xbeedev_set_dtr_rts,
.flags = SERDEV_FL_NONE,
};
static int xbee_getsync(const PROGRAMMER *pgm) {
unsigned char buf[2], resp[2];
@@ -1562,7 +1543,15 @@ static int xbee_open(PROGRAMMER *pgm, const char *port) {
/* Wireless is lossier than normal serial */
serial_recv_timeout = 1000;
serdev = &xbee_serdev_frame;
serdev = &PDATA(pgm)->xbee_serdev;
serdev->open = xbeedev_open;
serdev->close = xbeedev_close;
serdev->rawclose = xbeedev_close;
serdev->send = xbeedev_send;
serdev->recv = xbeedev_recv;
serdev->drain = xbeedev_drain;
serdev->set_dtr_rts = xbeedev_set_dtr_rts;
serdev->flags = SERDEV_FL_NONE;
if (serial_open(port, pinfo, &pgm->fd) == -1) {
return -1;
@@ -1656,7 +1645,7 @@ static int xbee_parseextparms(const PROGRAMMER *pgm, const LISTID extparms) {
msg_error("%s -c %s extended options:\n", progname, pgmid);
msg_error(" -xxbeeresetpin=<1..7> Set XBee pin DIO<1..7> as reset pin\n");
msg_error(" -xhelp Show this help menu and exit\n");
exit(0);
return LIBAVRDUDE_EXIT;;
}
pmsg_error("invalid extended parameter '%s'\n", extended_param);