From 14d6e16bcc209f4810bfc0c6a6f737f892dbd301 Mon Sep 17 00:00:00 2001 From: MCUdude Date: Sun, 11 Aug 2024 23:10:14 +0200 Subject: [PATCH] Make usbproduct available to programmers --- src/libavrdude.h | 1 + src/stk500v2.c | 10 +++++++--- src/usb_hidapi.c | 13 +++++++++++++ src/usb_libusb.c | 2 ++ 4 files changed, 23 insertions(+), 3 deletions(-) diff --git a/src/libavrdude.h b/src/libavrdude.h index 9b3ec593..115baf45 100644 --- a/src/libavrdude.h +++ b/src/libavrdude.h @@ -889,6 +889,7 @@ struct serial_device { int (*set_dtr_rts)(const union filedescriptor *fd, int is_on); const char *usbsn; + const char *usbproduct; int flags; #define SERDEV_FL_NONE 0x0000 /* no flags */ #define SERDEV_FL_CANSETSPEED 0x0001 /* device can change speed */ diff --git a/src/stk500v2.c b/src/stk500v2.c index b07829c2..e344867b 100644 --- a/src/stk500v2.c +++ b/src/stk500v2.c @@ -2156,9 +2156,13 @@ static int stk500v2_open(PROGRAMMER *pgm, const char *port) { return -1; } - // Make USB serial number available to programmer - if (serdev && serdev->usbsn) - pgm->usbsn = serdev->usbsn; + // Make USB serial number and USB product name available to programmer + if (serdev) { + if (serdev->usbsn) + pgm->usbsn = serdev->usbsn; + if (serdev->usbproduct) + pgm->usbproduct = serdev->usbproduct; + } // Drain any extraneous input, synchronise and drain again if(stk500v2_drain(pgm, 0) < 0 || stk500v2_getsync(pgm) < 0 || stk500v2_drain(pgm, 0) < 0) diff --git a/src/usb_hidapi.c b/src/usb_hidapi.c index fea15f40..9714ea25 100644 --- a/src/usb_hidapi.c +++ b/src/usb_hidapi.c @@ -147,6 +147,19 @@ static int usbhid_open(const char *port, union pinfo pinfo, union filedescriptor } } + // Store USB product string to prod_str + wchar_t prodstr[256]; + if (hid_get_product_string(dev, prodstr, sizeof(prodstr)/sizeof(*prodstr)) == 0) { + size_t n = wcstombs(NULL, prodstr, 0) + 1; + if (n) { + char *cn = mmt_malloc(n); + if (wcstombs(cn, prodstr, n) != (size_t) -1) + if(serdev) + serdev->usbproduct = cache_string(cn); + mmt_free(cn); + } + } + fd->usb.handle = dev; /* diff --git a/src/usb_libusb.c b/src/usb_libusb.c index 25d6246d..9062fa67 100644 --- a/src/usb_libusb.c +++ b/src/usb_libusb.c @@ -128,6 +128,8 @@ static int usbdev_open(const char *port, union pinfo pinfo, union filedescriptor pmsg_warning("reading product name, %s\n", usb_strerror()); strcpy(product, "[unnamed product]"); } + if(serdev) + serdev->usbproduct = cache_string(product); /* We need to write to endpoint 2 to switch the PICkit4 and SNAP * from PIC to AVR mode