Set iInterface==serprog

Now this and pico-serprog are both compatible an udev rule like:

DRIVERS=="cdc_acm", ATTRS{interface}=="serprog", SYMLINK+="serprog%n"

Signed-off-by: Riku Viitanen <riku.viitanen@protonmail.com>
This commit is contained in:
Riku Viitanen 2023-09-07 00:32:35 +03:00
parent 5ee17e4a71
commit 60c6274f7f
1 changed files with 7 additions and 4 deletions

View File

@ -18,6 +18,7 @@
#define STR_MAN 0x01
#define STR_PROD 0x02
#define STR_SER 0x03
#define STR_IFACE 0x04
#include "usbcdc.h"
@ -111,7 +112,7 @@ static const struct usb_interface_descriptor comm_iface[] = {{
.bInterfaceClass = USB_CLASS_CDC,
.bInterfaceSubClass = USB_CDC_SUBCLASS_ACM,
.bInterfaceProtocol = USB_CDC_PROTOCOL_AT,
.iInterface = 0,
.iInterface = STR_IFACE,
.endpoint = comm_endp,
@ -128,7 +129,7 @@ static const struct usb_interface_descriptor data_iface[] = {{
.bInterfaceClass = USB_CLASS_DATA,
.bInterfaceSubClass = 0,
.bInterfaceProtocol = 0,
.iInterface = 0,
.iInterface = STR_IFACE,
.endpoint = data_endp,
}};
@ -218,15 +219,17 @@ static const char *usb_strings[] = {
"dword1511.info",
"STM32 virtual serprog for flashrom",
serial,
"serprog",
};
#define N_USB_STRS sizeof(usb_strings)/sizeof(usb_strings[0])
void usbcdc_init(void) {
desig_get_unique_id_as_string(serial, UID_LEN);
#ifdef STM32F0
usbd_dev = usbd_init(&st_usbfs_v2_usb_driver, &dev, &config, usb_strings, 3, usbd_control_buffer, sizeof(usbd_control_buffer));
usbd_dev = usbd_init(&st_usbfs_v2_usb_driver, &dev, &config, usb_strings, N_USB_STRS, usbd_control_buffer, sizeof(usbd_control_buffer));
#else
usbd_dev = usbd_init(&st_usbfs_v1_usb_driver, &dev, &config, usb_strings, 3, usbd_control_buffer, sizeof(usbd_control_buffer));
usbd_dev = usbd_init(&st_usbfs_v1_usb_driver, &dev, &config, usb_strings, N_USB_STRS, usbd_control_buffer, sizeof(usbd_control_buffer));
#endif /* STM32F0 */
usbd_register_set_config_callback(usbd_dev, cdcacm_set_config);
usbd_register_reset_callback(usbd_dev, cdcacm_reset);