aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAJM <poslathian@poslathian.(none)>2010-04-19 16:44:20 -0400
committerbnewbold <bnewbold@robocracy.org>2010-05-20 22:09:15 -0400
commita81a7475f55feb33116a9101c9c24f9568f28678 (patch)
treebc48860fc3dae624a184106ae3de3e81fd889306
parent85fb99616fee3b1973ac760ce3b5143686c9dfc5 (diff)
downloadlibrambutan-a81a7475f55feb33116a9101c9c24f9568f28678.tar.gz
librambutan-a81a7475f55feb33116a9101c9c24f9568f28678.zip
Added the virtual com port descriptors based on the LUFA/MYUsb model (which was great). Still need to flesh out quite a few macros that were referenced but never defined.
-rw-r--r--core/usb/descriptors.c122
-rw-r--r--core/usb/descriptors.h88
2 files changed, 210 insertions, 0 deletions
diff --git a/core/usb/descriptors.c b/core/usb/descriptors.c
new file mode 100644
index 0000000..eca3f3f
--- /dev/null
+++ b/core/usb/descriptors.c
@@ -0,0 +1,122 @@
+/* insert license */
+
+#include "descriptors.h"
+
+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: 0x00,
+ iProduct: 0x00,
+ iSerialNumber: 0x00,
+ bNumConfigurations: 0x01
+};
+
+USB_Descriptor_Configuration usbVcomDescriptor_Config = {
+ Header:
+ {
+ bLength: sizeof(USB_Descriptor_Config_Header),
+ bDescriptorType: USB_DESCRIPTOR_TYPE_CONFIGURATION,
+ wTotalLength: sizeof(USB_Descriptor_Configuration),
+ bNumInterfaces: 0x02,
+ bConfigurationValue: 0x01,
+ iConfiguration: 0x00,
+ bmAttributes: (USB_CONFIG_ATTR_BUSPOWERED | USB_CONFIG_ATT_SELF_POWERED),
+ bMaxPower: USB_CONFIG_POWER_MA(100)
+ },
+
+ CCI_Interface:
+ {
+ bLength: 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: sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)),
+ bDescriptorType: 0x24,
+ SubType: 0x00,
+ Data: {0x01, 0x10}
+ },
+
+ CDC_Functional_CallManagement:
+ {
+ bLength: sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)),
+ bDescriptorType: 0x24,
+ SubType: 0x01,
+ Data: {0x03, 0x01}
+ },
+
+ CDC_Functional_ACM:
+ {
+ bLength: sizeof(CDC_FUNCTIONAL_DESCRIPTOR(1)),
+ bDescriptorType: 0x24,
+ SubType: 0x02,
+ Data: {0x06}
+ },
+
+ CDC_Functional_Union:
+ {
+ bLength: sizeof(CDC_FUNCTIONAL_DESCRIPTOR(2)),
+ bDescriptorType: 0x24,
+ SubType: 0x06,
+ Data: {0x00, 0x01}
+ },
+
+ ManagementEndpoint:
+ {
+ bLength: sizeof(USB_Descriptor_Endpoint),
+ bDescriptorType: USB_DESCRIPTOR_TYPE_ENDPOINT,
+ bEndpointAddress: CDC_NOTIFICATION_EPNUM,
+ bmAttributes: EP_TYPE_INTERRUPT,
+ wMaxPacketSize: CDC_NOTIFICATION_EPSIZE,
+ bInterval: 0xFF
+ },
+
+ DCI_Interface:
+ {
+ bLength: sizeof(USB_Descriptor_Interface),
+ bDescriptorType: USB_DESCRIPTOR_TYPE_INTERFACE,
+ bInterfaceNumber: 0x01,
+ bAlternateSetting: 0x00,
+ bNumEndpoints: 0x02,
+ bInterfaceClass: 0x0A,
+ bInterfaceSubClass: 0x00,
+ bInterfaceProtocol: 0x00,
+ iInterface: 0x00
+ }.
+
+ DataOutEndpoint:
+ {
+ bLength: sizeof(USB_Descriptor_Endpoint),
+ bDescriptorType: USB_DESCRIPTOR_TYPE_ENDPOINT,
+ bEndpointAddress: VCOM_RX_EPNUM,
+ bmAttributes: EP_TYPE_BULK,
+ wMaxPacketSize: VCOM_RX_EPSIZE,
+ bInterval: 0x00
+ },
+
+ DataInPoiint:
+ {
+ bLength: sizeof(USB_Descriptor_Endpoint),
+ bDescriptorType: USB_DESCRIPTOR_TYPE_ENDPOINT,
+ bEndpointAddress: VCOM_TX_EPNUM,
+ bmAttributes: EP_TYPE_BULK,
+ wMaxPacketSize: VCOM_TX_EPSIZE,
+ bInterval: 0x00
+ },
+};
diff --git a/core/usb/descriptors.h b/core/usb/descriptors.h
new file mode 100644
index 0000000..1463221
--- /dev/null
+++ b/core/usb/descriptors.h
@@ -0,0 +1,88 @@
+/* insert license */
+#ifndef __DESCRIPTORS_H
+#define __DESCRIPTORS_H
+
+
+#include "usb_lib.h"
+
+#if defined(__cplusplus)
+ extern "C" {
+#endif
+
+#define CDC_FUCNTIONAL_DESCRIPTOR(DataSize) \
+ struct \
+ { \
+ uint8 bLength; \
+ uint8 bDescriptorType; \
+ uint8 SubType; \
+ uint8 Data[DataSize]; \
+ }
+
+typedef struct {
+ uint8 bLength;
+ uint8 bDescriptorType;
+ uint16 bcdUSB;
+ uint8 bDeviceClass;
+ uint8 bDeviceSubClass;
+ uint8 bDeviceProtocol;
+ uint8 bMaxPacketSize0;
+ uint16 idVendor;
+ uint16 idProduct;
+ uint16 bcdDevice;
+ uint8 iManufacturer;
+ uint8 iProduct;
+ uint8 iSerialNumber;
+ uint8 bNumConfigurations;
+} USB_Descriptor_Device;
+
+typedef struct {
+ uint8_t bLength;
+ uint8_t bDescriptorType;
+ uint16_t wTotalLength;
+ uint8_t bNumInterfaces;
+ uint8_t bConfigurationValue;
+ uint8_t iConfiguration;
+ uint8_t bmAttributes;
+ uint8_t bMaxPower;
+} USB_Descriptor_Config_Header;
+
+typedef struct {
+ uint8_t bLength;
+ uint8_t bDescriptorType;
+ uint8_t bInterfaceNumber;
+ uint8_t bAlternateSetting;
+ uint8_t bNumEndpoints;
+ uint8_t bInterfaceClass;
+ uint8_t bInterfaceSubClass;
+ uint8_t bInterfaceProtocol;
+ uint8_t iInterface;
+} USB_Descriptor_Interface;
+
+typedef struct {
+ uint8_t bLength;
+ uint8_t bDescriptorType;
+ uint8_t bEndpointAddress;
+ uint8_t bmAttributes;
+ uint16_t wMaxPacketSize;
+ uint8_t bInterval;
+} USB_Descriptor_Endpoint;
+
+typedef struct {
+ USB_Descriptor_Config_Header Header;
+ USB_Descriptor_Interface CCI_Interface;
+ CDC_FUNCTIONAL_DESCRIPTOR(2) CDC_Functional_IntHeader;
+ CDC_FUNCTIONAL_DESCRIPTOR(2) CDC_Functional_CallManagement;
+ CDC_FUNCTIONAL_DESCRIPTOR(1) CDC_Functional_ACM;
+ CDC_FUNCTIONAL_DESCRIPTOR(2) CDC_Functional_Union;
+ USB_Descriptor_Endpoint ManagementEndpoint;
+ USB_Descriptor_Interface DCI_Interface;
+ USB_Descriptor_Endpoint DataOutEndpoint;
+ USB_Descriptor_Endpoint DataInEndpoint;
+} USB_Descriptor_Configuration;
+
+
+#if defined(__cplusplus)
+ }
+#endif
+
+#endif // __DESCRIPTORS_H