aboutsummaryrefslogtreecommitdiffstats
path: root/libmaple/usb/descriptors.c
diff options
context:
space:
mode:
Diffstat (limited to 'libmaple/usb/descriptors.c')
-rw-r--r--libmaple/usb/descriptors.c168
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
+};