Move static variables into PDATA in serbb_posix.c

This commit is contained in:
Stefan Rueger
2024-05-10 14:12:54 +01:00
parent b4ed989c99
commit fbf9a9f539

View File

@@ -44,7 +44,13 @@
#undef DEBUG
static struct termios oldmode;
struct pdata {
struct termios oldmode;
};
// Use private programmer data as if they were a global structure my
#define my (*(struct pdata *)(pgm->cookie))
/*
serial port/pin mapping
@@ -243,7 +249,7 @@ static int serbb_open(PROGRAMMER *pgm, const char *port) {
pmsg_ext_error("%s, tcgetattr(): %s\n", port, strerror(errno));
return(-1);
}
oldmode = mode;
my.oldmode = mode;
mode.c_iflag = IGNBRK | IGNPAR;
mode.c_oflag = 0;
@@ -277,13 +283,22 @@ static int serbb_open(PROGRAMMER *pgm, const char *port) {
static void serbb_close(PROGRAMMER *pgm) {
if (pgm->fd.ifd != -1)
{
(void)tcsetattr(pgm->fd.ifd, TCSANOW, &oldmode);
(void) tcsetattr(pgm->fd.ifd, TCSANOW, &my.oldmode);
pgm->setpin(pgm, PIN_AVR_RESET, 1);
close(pgm->fd.ifd);
}
return;
}
static void serbb_setup(PROGRAMMER *pgm) {
pgm->cookie = mmt_malloc(sizeof(struct pdata));
}
static void serbb_teardown(PROGRAMMER *pgm) {
mmt_free(pgm->cookie);
pgm->cookie = NULL;
}
const char serbb_desc[] = "Serial port bitbanging";
void serbb_initpgm(PROGRAMMER *pgm) {
@@ -291,6 +306,8 @@ void serbb_initpgm(PROGRAMMER *pgm) {
pgm_fill_old_pins(pgm); // TODO to be removed if old pin data no longer needed
pgm->setup = serbb_setup;
pgm->teardown = serbb_teardown;
pgm->rdy_led = bitbang_rdy_led;
pgm->err_led = bitbang_err_led;
pgm->pgm_led = bitbang_pgm_led;