From 0a883973a2cfa7305a4032725c8bae3c0faa7b24 Mon Sep 17 00:00:00 2001 From: Stefan Rueger Date: Mon, 2 Jan 2023 16:55:33 +0000 Subject: [PATCH 1/2] Move static usbsn into serdev structure, remove serno access function --- src/jtag3.c | 6 +++--- src/libavrdude.h | 3 +-- src/stk500v2.c | 6 +++--- src/usb_hidapi.c | 10 ++-------- src/usb_libusb.c | 11 ++--------- 5 files changed, 11 insertions(+), 25 deletions(-) diff --git a/src/jtag3.c b/src/jtag3.c index bab35032..2d2eedd1 100644 --- a/src/jtag3.c +++ b/src/jtag3.c @@ -1569,9 +1569,9 @@ int jtag3_open_common(PROGRAMMER *pgm, const char *port) { pmsg_notice("found CMSIS-DAP compliant device, using EDBG protocol\n"); } - // Get USB serial number function if function pointer is present - if (serial_serno) - pgm->usbsn = serial_serno(); + // Copy over pointer to USB serial number function + if (serdev && serdev->usbsn) + pgm->usbsn = serdev->usbsn; /* * drain any extraneous input diff --git a/src/libavrdude.h b/src/libavrdude.h index 70347037..b5ba9234 100644 --- a/src/libavrdude.h +++ b/src/libavrdude.h @@ -649,7 +649,6 @@ union pinfo struct serial_device { // open should return -1 on error, other values on success int (*open)(const char *port, union pinfo pinfo, union filedescriptor *fd); - const char *(*serno)(); int (*setparams)(const union filedescriptor *fd, long baud, unsigned long cflags); void (*close)(union filedescriptor *fd); @@ -659,6 +658,7 @@ struct serial_device { int (*set_dtr_rts)(const union filedescriptor *fd, int is_on); + const char *usbsn; int flags; #define SERDEV_FL_NONE 0x0000 /* no flags */ #define SERDEV_FL_CANSETSPEED 0x0001 /* device can change speed */ @@ -672,7 +672,6 @@ extern struct serial_device avrdoper_serdev; extern struct serial_device usbhid_serdev; #define serial_open (serdev->open) -#define serial_serno (serdev->serno) #define serial_setparams (serdev->setparams) #define serial_close (serdev->close) #define serial_send (serdev->send) diff --git a/src/stk500v2.c b/src/stk500v2.c index beecf4c1..a60fe666 100644 --- a/src/stk500v2.c +++ b/src/stk500v2.c @@ -1578,9 +1578,9 @@ static int stk500v2_open(PROGRAMMER *pgm, const char *port) { return -1; } - // Get USB serial number function if function pointer is present - if (serial_serno) - pgm->usbsn = serial_serno(); + // Copy over pointer to USB serial number function + if (serdev && serdev->usbsn) + pgm->usbsn = serdev->usbsn; /* * drain any extraneous input diff --git a/src/usb_hidapi.c b/src/usb_hidapi.c index a48f39d8..4a08c1f5 100644 --- a/src/usb_hidapi.c +++ b/src/usb_hidapi.c @@ -42,12 +42,6 @@ #include "usbdevs.h" -static const char *usbsn = ""; - -const char *usbhid_get_serno() { - return usbsn; -} - /* * The "baud" parameter is meaningless for USB devices, so we reuse it * to pass the desired USB device ID. @@ -142,7 +136,8 @@ static int usbhid_open(const char *port, union pinfo pinfo, union filedescriptor if (n) { char *cn = cfg_malloc(__func__, n); if (wcstombs(cn, sn, n) != (size_t) -1) - usbsn = cache_string(cn); + if(serdev) + serdev->usbsn = cache_string(cn); free(cn); } } @@ -319,7 +314,6 @@ static int usbhid_drain(const union filedescriptor *fd, int display) { */ struct serial_device usbhid_serdev = { .open = usbhid_open, - .serno = usbhid_get_serno, .close = usbhid_close, .send = usbhid_send, .recv = usbhid_recv, diff --git a/src/usb_libusb.c b/src/usb_libusb.c index 8e7f81bc..605828ee 100644 --- a/src/usb_libusb.c +++ b/src/usb_libusb.c @@ -58,12 +58,6 @@ static int buflen = -1, bufptr; static int usb_interface; -static const char *usbsn = ""; - -const char *usbdev_get_serno() { - return usbsn; -} - /* * The "baud" parameter is meaningless for USB devices, so we reuse it * to pass the desired USB device ID. @@ -144,7 +138,8 @@ static int usbdev_open(const char *port, union pinfo pinfo, union filedescriptor else strcpy(string, "[unknown]"); } - usbsn = cache_string(string); + if(serdev) + serdev->usbsn = cache_string(string); if (usb_get_string_simple(udev, dev->descriptor.iProduct, product, sizeof(product)) < 0) @@ -582,7 +577,6 @@ static int usbdev_drain(const union filedescriptor *fd, int display) struct serial_device usb_serdev = { .open = usbdev_open, - .serno = usbdev_get_serno, .close = usbdev_close, .send = usbdev_send, .recv = usbdev_recv, @@ -596,7 +590,6 @@ struct serial_device usb_serdev = struct serial_device usb_serdev_frame = { .open = usbdev_open, - .serno = usbdev_get_serno, .close = usbdev_close, .send = usbdev_send, .recv = usbdev_recv_frame, From 74cbb51ef528d968076120840b3f7dcb2b951069 Mon Sep 17 00:00:00 2001 From: Stefan Rueger Date: Mon, 2 Jan 2023 17:10:15 +0000 Subject: [PATCH 2/2] Clarify comment on copying usbsn --- src/jtag3.c | 2 +- src/stk500v2.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/jtag3.c b/src/jtag3.c index 2d2eedd1..62b95779 100644 --- a/src/jtag3.c +++ b/src/jtag3.c @@ -1569,7 +1569,7 @@ int jtag3_open_common(PROGRAMMER *pgm, const char *port) { pmsg_notice("found CMSIS-DAP compliant device, using EDBG protocol\n"); } - // Copy over pointer to USB serial number function + // Make USB serial number available to programmer if (serdev && serdev->usbsn) pgm->usbsn = serdev->usbsn; diff --git a/src/stk500v2.c b/src/stk500v2.c index a60fe666..49a331f3 100644 --- a/src/stk500v2.c +++ b/src/stk500v2.c @@ -1578,7 +1578,7 @@ static int stk500v2_open(PROGRAMMER *pgm, const char *port) { return -1; } - // Copy over pointer to USB serial number function + // Make USB serial number available to programmer if (serdev && serdev->usbsn) pgm->usbsn = serdev->usbsn;