| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- #include "include.h"
- #include "usb_com.h"
- #include "usb_desc.h"
- AT(.rodata.usb.desc)
- const uint8_t usb_device_desc[] = {
- 0x12, /* Num bytes of the descriptor */
- DEVICE_DESCRIPTOR, /* Device Descriptor type */
- 0x10, /* Revision of USB Spec. LSB (in BCD) */
- 0x01, /* Revision of USB Spec. MSB (in BCD) */
- 0x00, /* Device class code */
- 0x00, /* Subclass code */
- 0x00, /* Device protocol */
- 0x40, /* Max packet size of Endpoint 0: only valid 8, 16, 32 or 64 */
- BYTE0(USB_DEV_VID), /* idVendor */
- BYTE1(USB_DEV_VID), /* idVendor */
- BYTE0(USB_DEV_PID), /* idProduct */
- BYTE1(USB_DEV_PID), /* idProduct */
- 0x00, /* Device Revision LSB (in BCD) */
- 0x01, /* Device Revision MSB (in BCD) */
- STR_MANUFACTURER, /* Index of Manufacture string descriptor */
- STR_PRODUCT, /* Index of Product string descriptor */
- STR_SERIAL_NUM, /* Index of Serial No. string descriptor */
- 0x01, /* NumConfigurations*/
- };
- AT(.rodata.usb.desc)
- const uint8_t usb_cfg_desc[] = {
- 0x09, /* Num bytes of this descriptor */
- CONFIGURATION_DESCRIPTOR, /* Configuration descriptor type */
- 0x00, /* Total size of configuration LSB*/
- 0x00, /* Total size of configuration MSB*/
- USB_ITF_NUM, /* Total Interface number*/
- 0x01, /* Configuration number */
- 0x00, /* Index of Configuration string descriptor */
- 0xA0, /* Configuration characteristics: BusPowerd */
- /* D7: reserved and should be one in historical version
- D6: self-powered device
- D5: remote wakeup
- D4...D0: reserved and should be set to zero */
- 0x32, /* Max current, unit is 2mA */
- };
- AT(.rodata.usb.desc)
- const uint8_t usb_lang_desc[] = {
- 4,
- 3,
- BYTE0(USB_DEV_LANG_ID),
- BYTE1(USB_DEV_LANG_ID),
- };
- AT(.usb_buf.desc)
- uint8_t usb_str_desc_buf[USB_MAX_STR_DESC_SIZE];
- static void usb_desc_swapper(u8 *dest, char *src, u8 *length)
- {
- u8 str_length = 0;
- u8 idx = 0;
- if (src != NULL) {
- while (src[str_length] != '\0' && str_length < USB_MAX_STR_DESC_SIZE) {
- str_length++;
- }
- *length = str_length * 2 + 2;
- dest[idx++] = *length;
- dest[idx++] = 0x03;
- while (*src != '\0') {
- dest[idx++] = *src++;
- dest[idx++] = 0x00;
- }
- }
- }
- uint8_t *usb_get_device_descriptor(uint8_t *length)
- {
- *length = sizeof(usb_device_desc);
- return (u8 *)usb_device_desc;
- }
- uint8_t *usb_get_cfg_descriptor(uint8_t *length)
- {
- *length = sizeof(usb_cfg_desc);
- return (u8 *)usb_cfg_desc;
- }
- uint8_t *usb_get_lang_id_str_descriptor(uint8_t *length)
- {
- *length = sizeof(usb_lang_desc);
- return (u8 *)usb_lang_desc;
- }
- uint8_t *usb_get_manufacturer_str_descriptor(uint8_t *length)
- {
- usb_desc_swapper(usb_str_desc_buf, USB_DESC_MANUF, length);
- return usb_str_desc_buf;
- }
- uint8_t *usb_get_product_str_descriptor(uint8_t *length)
- {
- usb_desc_swapper(usb_str_desc_buf, USB_DESC_PRODUCT, length);
- return usb_str_desc_buf;
- }
- uint8_t *usb_get_serial_str_descriptor(uint8_t *length)
- {
- usb_desc_swapper(usb_str_desc_buf, USB_DESC_SERIAL, length);
- return usb_str_desc_buf;
- }
|