diff options
-rw-r--r-- | firmware/export/usb_core.h | 8 | ||||
-rw-r--r-- | firmware/usbstack/usb_core.c | 19 |
2 files changed, 17 insertions, 10 deletions
diff --git a/firmware/export/usb_core.h b/firmware/export/usb_core.h index 75fafc06a8..78a80435e1 100644 --- a/firmware/export/usb_core.h +++ b/firmware/export/usb_core.h | |||
@@ -39,6 +39,14 @@ | |||
39 | 39 | ||
40 | extern int usb_max_pkt_size; | 40 | extern int usb_max_pkt_size; |
41 | 41 | ||
42 | enum { | ||
43 | USB_STRING_INDEX_LANGUAGE, | ||
44 | USB_STRING_INDEX_MANUFACTURER, | ||
45 | USB_STRING_INDEX_PRODUCT, | ||
46 | USB_STRING_INDEX_SERIAL, | ||
47 | USB_STRING_INDEX_MAX, | ||
48 | }; | ||
49 | |||
42 | struct usb_class_driver; | 50 | struct usb_class_driver; |
43 | 51 | ||
44 | void usb_core_init(void); | 52 | void usb_core_init(void); |
diff --git a/firmware/usbstack/usb_core.c b/firmware/usbstack/usb_core.c index 65bf7293c8..50d93f7561 100644 --- a/firmware/usbstack/usb_core.c +++ b/firmware/usbstack/usb_core.c | |||
@@ -90,9 +90,9 @@ static struct usb_device_descriptor __attribute__((aligned(2))) | |||
90 | .idVendor = USB_VENDOR_ID, | 90 | .idVendor = USB_VENDOR_ID, |
91 | .idProduct = USB_PRODUCT_ID, | 91 | .idProduct = USB_PRODUCT_ID, |
92 | .bcdDevice = 0x0100, | 92 | .bcdDevice = 0x0100, |
93 | .iManufacturer = 1, | 93 | .iManufacturer = USB_STRING_INDEX_MANUFACTURER, |
94 | .iProduct = 2, | 94 | .iProduct = USB_STRING_INDEX_PRODUCT, |
95 | .iSerialNumber = 3, | 95 | .iSerialNumber = USB_STRING_INDEX_SERIAL, |
96 | .bNumConfigurations = 1 | 96 | .bNumConfigurations = 1 |
97 | } ; | 97 | } ; |
98 | 98 | ||
@@ -141,12 +141,12 @@ static const struct usb_string_descriptor __attribute__((aligned(2))) | |||
141 | lang_descriptor = | 141 | lang_descriptor = |
142 | USB_STRING_INITIALIZER(u"\x0409"); /* LANGID US English */ | 142 | USB_STRING_INITIALIZER(u"\x0409"); /* LANGID US English */ |
143 | 143 | ||
144 | static const struct usb_string_descriptor* const usb_strings[] = | 144 | static const struct usb_string_descriptor* const usb_strings[USB_STRING_INDEX_MAX] = |
145 | { | 145 | { |
146 | &lang_descriptor, | 146 | [USB_STRING_INDEX_LANGUAGE] = &lang_descriptor, |
147 | &usb_string_iManufacturer, | 147 | [USB_STRING_INDEX_MANUFACTURER] = &usb_string_iManufacturer, |
148 | &usb_string_iProduct, | 148 | [USB_STRING_INDEX_PRODUCT] = &usb_string_iProduct, |
149 | &usb_string_iSerial | 149 | [USB_STRING_INDEX_SERIAL] = &usb_string_iSerial, |
150 | }; | 150 | }; |
151 | 151 | ||
152 | static int usb_address = 0; | 152 | static int usb_address = 0; |
@@ -637,8 +637,7 @@ static void request_handler_device_get_descriptor(struct usb_ctrlrequest* req) | |||
637 | 637 | ||
638 | case USB_DT_STRING: | 638 | case USB_DT_STRING: |
639 | logf("STRING %d", index); | 639 | logf("STRING %d", index); |
640 | if((unsigned)index < (sizeof(usb_strings) / | 640 | if((unsigned)index < USB_STRING_INDEX_MAX) { |
641 | sizeof(struct usb_string_descriptor*))) { | ||
642 | size = usb_strings[index]->bLength; | 641 | size = usb_strings[index]->bLength; |
643 | ptr = usb_strings[index]; | 642 | ptr = usb_strings[index]; |
644 | } | 643 | } |