From fbf9a9f539976837995908c409cb614df5f50dca Mon Sep 17 00:00:00 2001 From: Stefan Rueger Date: Fri, 10 May 2024 14:12:54 +0100 Subject: [PATCH] Move static variables into PDATA in serbb_posix.c --- src/serbb_posix.c | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/serbb_posix.c b/src/serbb_posix.c index b4306df1..877fc1a5 100644 --- a/src/serbb_posix.c +++ b/src/serbb_posix.c @@ -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;