diff --git a/firmware/export/usb_drv.h b/firmware/export/usb_drv.h index b5b5a7f065..7ef7c8b7ee 100644 --- a/firmware/export/usb_drv.h +++ b/firmware/export/usb_drv.h @@ -80,4 +80,11 @@ bool usb_drv_connected(void); int usb_drv_request_endpoint(int type, int dir); void usb_drv_release_endpoint(int ep); +/* USB_STRING_INITIALIZER(u"Example String") */ +#define USB_STRING_INITIALIZER(S) { \ + sizeof(struct usb_string_descriptor) + sizeof(S) - sizeof(*S), \ + USB_DT_STRING, \ + S \ +} + #endif /* _USB_DRV_H */ diff --git a/firmware/usbstack/usb_core.c b/firmware/usbstack/usb_core.c index 038aef241f..3d187c8cab 100644 --- a/firmware/usbstack/usb_core.c +++ b/firmware/usbstack/usb_core.c @@ -120,43 +120,22 @@ static const struct usb_qualifier_descriptor __attribute__((aligned(2))) static const struct usb_string_descriptor __attribute__((aligned(2))) usb_string_iManufacturer = -{ - 24, - USB_DT_STRING, - {'R', 'o', 'c', 'k', 'b', 'o', 'x', '.', 'o', 'r', 'g'} -}; +USB_STRING_INITIALIZER(u"Rockbox.org"); static const struct usb_string_descriptor __attribute__((aligned(2))) usb_string_iProduct = -{ - 42, - USB_DT_STRING, - {'R', 'o', 'c', 'k', 'b', 'o', 'x', ' ', - 'm', 'e', 'd', 'i', 'a', ' ', - 'p', 'l', 'a', 'y', 'e', 'r'} -}; +USB_STRING_INITIALIZER(u"Rockbox media player"); static struct usb_string_descriptor __attribute__((aligned(2))) usb_string_iSerial = -{ - 84, - USB_DT_STRING, - {'0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', - '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', - '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', - '0', '0', '0', '0', '0', '0', '0', '0'} -}; +USB_STRING_INITIALIZER(u"00000000000000000000000000000000000000000"); /* Generic for all targets */ /* this is stringid #0: languages supported */ static const struct usb_string_descriptor __attribute__((aligned(2))) lang_descriptor = -{ - 4, - USB_DT_STRING, - {0x0409} /* LANGID US English */ -}; +USB_STRING_INITIALIZER(u"\x0409"); /* LANGID US English */ static const struct usb_string_descriptor* const usb_strings[] = { diff --git a/utils/hwstub/stub/main.c b/utils/hwstub/stub/main.c index 7b6b02b83a..9e2e7116df 100644 --- a/utils/hwstub/stub/main.c +++ b/utils/hwstub/stub/main.c @@ -95,35 +95,17 @@ static struct usb_interface_descriptor interface_descriptor = }; static const struct usb_string_descriptor usb_string_iManufacturer = -{ - 24, - USB_DT_STRING, - {'R', 'o', 'c', 'k', 'b', 'o', 'x', '.', 'o', 'r', 'g'} -}; +USB_STRING_INITIALIZER(u"Rockbox.org"); static const struct usb_string_descriptor usb_string_iProduct = -{ - 44, - USB_DT_STRING, - {'R', 'o', 'c', 'k', 'b', 'o', 'x', ' ', - 'h', 'a', 'r', 'd', 'w', 'a', 'r', 'e', ' ', - 's', 't', 'u', 'b'} -}; +USB_STRING_INITIALIZER(u"Rockbox hardware stub"); static const struct usb_string_descriptor usb_string_iInterface = -{ - 14, - USB_DT_STRING, - {'H', 'W', 'S', 't', 'u', 'b'} -}; +USB_STRING_INITIALIZER(u"HWStub"); /* this is stringid #0: languages supported */ static const struct usb_string_descriptor lang_descriptor = -{ - 4, - USB_DT_STRING, - {0x0409} /* LANGID US English */ -}; +USB_STRING_INITIALIZER(u"\x0409"); /* LANGID US English */ static struct hwstub_version_desc_t version_descriptor = { diff --git a/utils/hwstub/stub/usb_drv.h b/utils/hwstub/stub/usb_drv.h index 00f22d8e1a..ef032f52a3 100644 --- a/utils/hwstub/stub/usb_drv.h +++ b/utils/hwstub/stub/usb_drv.h @@ -43,5 +43,12 @@ void usb_drv_set_address(int address); int usb_drv_port_speed(void); void usb_drv_configure_endpoint(int ep_num, int type); +/* USB_STRING_INITIALIZER(u"Example String") */ +#define USB_STRING_INITIALIZER(S) { \ + sizeof(struct usb_string_descriptor) + sizeof(S) - sizeof(*S), \ + USB_DT_STRING, \ + S \ +} + #endif /* _USB_DRV_H */