usb: implement macro for initializing USB strings

This uses the new unicode string literal feature that is available
now to greatly simplify the initialization of these special string
types. This makes them much more readable at a quick glance.

Change-Id: Iad8b49aa763486608e3bb7e83fb8abfb48ce0a7b
This commit is contained in:
James Buren 2021-03-25 13:10:50 -05:00
parent 7652e6f8df
commit 018372bf39
4 changed files with 22 additions and 47 deletions

View File

@ -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 */

View File

@ -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[] =
{

View File

@ -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 =
{

View File

@ -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 */