diff options
Diffstat (limited to 'libmaple/usb/descriptors.c')
-rw-r--r-- | libmaple/usb/descriptors.c | 168 |
1 files changed, 168 insertions, 0 deletions
diff --git a/libmaple/usb/descriptors.c b/libmaple/usb/descriptors.c new file mode 100644 index 0000000..5038709 --- /dev/null +++ b/libmaple/usb/descriptors.c @@ -0,0 +1,168 @@ +/* insert license */ + + +#include "descriptors.h" +#include "libmaple.h" +#include "usb_config.h" + +const USB_Descriptor_Device usbVcomDescriptor_Device = { + bLength: sizeof(USB_Descriptor_Device), + bDescriptorType: USB_DESCRIPTOR_TYPE_DEVICE, + bcdUSB: 0x0200, + bDeviceClass: USB_DEVICE_CLASS_CDC, + bDeviceSubClass: USB_DEVICE_SUBCLASS_CDC, + bDeviceProtocol: 0x00, + bMaxPacketSize0: 0x40, + idVendor: VCOM_ID_VENDOR, + idProduct: VCOM_ID_PRODUCT, + bcdDevice: 0x0200, + iManufacturer: 0x01, + iProduct: 0x02, + iSerialNumber: 0x00, + bNumConfigurations: 0x01 +}; + +const USB_Descriptor_Config usbVcomDescriptor_Config = { + bLength: 0x09,//sizeof(USB_Descriptor_Config_Header), + bDescriptorType: USB_DESCRIPTOR_TYPE_CONFIGURATION, + wTotalLength: 0x43,//sizeof(USB_Descriptor_Config), + bNumInterfaces: 0x02, + bConfigurationValue: 0x01, + iConfiguration: 0x00, + bmAttributes: (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATTR_SELF_POWERED), + bMaxPower: USB_CONFIG_MAX_POWER, + + CCI_Interface: + { + bLength: 0x09,//sizeof(USB_Descriptor_Interface), + bDescriptorType: USB_DESCRIPTOR_TYPE_INTERFACE, + bInterfaceNumber: 0x00, + bAlternateSetting: 0x00, + bNumEndpoints: 0x01, + bInterfaceClass: 0x02, + bInterfaceSubClass: 0x02, + bInterfaceProtocol: 0x01, + iInterface: 0x00 + }, + + CDC_Functional_IntHeader: + { + bLength: 0x05,//sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), + bDescriptorType: 0x24, + SubType: 0x00, + Data: {0x01, 0x10} + }, + + CDC_Functional_CallManagement: + { + bLength: 0x05,//sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), + bDescriptorType: 0x24, + SubType: 0x01, + Data: {0x03, 0x01} + }, + + CDC_Functional_ACM: + { + bLength: 0x04,//sizeof(CDC_FUNCTIONAL_DESCRIPTOR(1)), + bDescriptorType: 0x24, + SubType: 0x02, + Data: {0x06} + }, + + CDC_Functional_Union: + { + bLength: 0x05,//sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)), + bDescriptorType: 0x24, + SubType: 0x06, + Data: {0x00, 0x01} + }, + + // ManagementEndpoint: + // { + EP1_bLength: 0x07,//sizeof(USB_Descriptor_Endpoint), + EP1_bDescriptorType: USB_DESCRIPTOR_TYPE_ENDPOINT, + EP1_bEndpointAddress: (USB_DESCRIPTOR_ENDPOINT_IN | VCOM_NOTIFICATION_EPNUM), + EP1_bmAttributes: EP_TYPE_INTERRUPT, + EP1_wMaxPacketSize0: VCOM_NOTIFICATION_EPSIZE, + EP1_wMaxPacketSize1: 0x00, + EP1_bInterval: 0xFF, + // }, + + // DCI_Interface: + // { + DCI_bLength: 0x09,//sizeof(USB_Descriptor_Interface), + DCI_bDescriptorType: USB_DESCRIPTOR_TYPE_INTERFACE, + DCI_bInterfaceNumber: 0x01, + DCI_bAlternateSetting: 0x00, + DCI_bNumEndpoints: 0x02, + DCI_bInterfaceClass: 0x0A, + DCI_bInterfaceSubClass: 0x00, + DCI_bInterfaceProtocol: 0x00, + DCI_iInterface: 0x00, + // }, + + //DataOutEndpoint: + // { + // }, + EP2_bLength: 0x07,//sizeof(USB_Descriptor_Endpoint), + EP2_bDescriptorType: USB_DESCRIPTOR_TYPE_ENDPOINT, + EP2_bEndpointAddress: (USB_DESCRIPTOR_ENDPOINT_OUT | VCOM_RX_EPNUM), + EP2_bmAttributes: EP_TYPE_BULK, + EP2_wMaxPacketSize0: VCOM_RX_EPSIZE, + EP2_wMaxPacketSize1: 0x00, + EP2_bInterval: 0x00, + + + // DataInEndpoint: + // { + EP3_bLength: 0x07,//sizeof(USB_Descriptor_Endpoint), + EP3_bDescriptorType: USB_DESCRIPTOR_TYPE_ENDPOINT, + EP3_bEndpointAddress: (USB_DESCRIPTOR_ENDPOINT_IN | VCOM_TX_EPNUM), + EP3_bmAttributes: EP_TYPE_BULK, + EP3_wMaxPacketSize0: VCOM_TX_EPSIZE, + EP3_wMaxPacketSize1: 0x00, + EP3_bInterval: 0x00 + + // } +}; + +/* + String Identifiers: + + we may choose to specify any or none of the following string + identifiers: + + iManufacturer: LeafLabs + iProduct: Maple R3 + iSerialNumber: NONE + iConfiguration: NONE + iInterface(CCI): NONE + iInterface(DCI): NONE + + additionally we must provide the unicode language identifier, + which is 0x0409 for US English +*/ + +const uint8 usbVcomDescriptor_LangID[USB_DESCRIPTOR_STRING_LEN(1)] = +{ + USB_DESCRIPTOR_STRING_LEN(1), + USB_DESCRIPTOR_TYPE_STRING, + 0x09, + 0x04 +}; + +const uint8 usbVcomDescriptor_iManufacturer[USB_DESCRIPTOR_STRING_LEN(8)] = +{ + USB_DESCRIPTOR_STRING_LEN(8), + USB_DESCRIPTOR_TYPE_STRING, + 'L', 0, 'e', 0, 'a', 0, 'f', 0, + 'L', 0, 'a', 0, 'b', 0, 's', 0 +}; + +const uint8 usbVcomDescriptor_iProduct[USB_DESCRIPTOR_STRING_LEN(8)] = +{ + USB_DESCRIPTOR_STRING_LEN(8), + USB_DESCRIPTOR_TYPE_STRING, + 'M', 0, 'a', 0, 'p', 0, 'l', 0, + 'e', 0, ' ', 0, 'R', 0, '3', 0 +}; |