diff options
author | AJM <poslathian@poslathian.(none)> | 2010-04-22 23:27:09 -0400 |
---|---|---|
committer | bnewbold <bnewbold@robocracy.org> | 2010-05-20 22:09:15 -0400 |
commit | a86ec7c81d7ad2037e900899a0b32c5592cae7c0 (patch) | |
tree | 391e3abb0ce95ec6901399bdce628aadf8a0c339 /core/usb/descriptors.h | |
parent | a082defb795cc4495139c8b05de4fd48bd66dacd (diff) | |
download | librambutan-a86ec7c81d7ad2037e900899a0b32c5592cae7c0.tar.gz librambutan-a86ec7c81d7ad2037e900899a0b32c5592cae7c0.zip |
c++ ified all of the usb_core files, added the auto-reset feature to the virtual com port, got the descriptors in functional although not pretty order that can be fixed using the attribute packing
Diffstat (limited to 'core/usb/descriptors.h')
-rw-r--r-- | core/usb/descriptors.h | 125 |
1 files changed, 105 insertions, 20 deletions
diff --git a/core/usb/descriptors.h b/core/usb/descriptors.h index 45d791d..f15221a 100644 --- a/core/usb/descriptors.h +++ b/core/usb/descriptors.h @@ -3,12 +3,8 @@ #define __DESCRIPTORS_H +#include "libmaple.h" #include "usb_lib.h" -#include "config.h" - -#if defined(__cplusplus) - extern "C" { -#endif #define USB_DESCRIPTOR_TYPE_DEVICE 0x01 #define USB_DESCRIPTOR_TYPE_CONFIGURATION 0x02 @@ -16,8 +12,11 @@ #define USB_DESCRIPTOR_TYPE_INTERFACE 0x04 #define USB_DESCRIPTOR_TYPE_ENDPOINT 0x05 +#define USB_DEVICE_CLASS_CDC 0x02 +#define USB_DEVICE_SUBCLASS_CDC 0x00 + #define USB_CONFIG_ATTR_BUSPOWERED 0b10000000 -#define USB_CONFIG_ATTR_SELFPOWERED 0b11000000 +#define USB_CONFIG_ATTR_SELF_POWERED 0b11000000 #define EP_TYPE_INTERRUPT 0x03 #define EP_TYPE_BULK 0x02 @@ -27,6 +26,18 @@ #define USB_DESCRIPTOR_STRING_LEN(x) (2 + (x << 1)) + +#if defined(__cplusplus) +extern "C" { +#endif + +#define USB_DESCRIPTOR_STRING(len) \ + struct { \ + uint8 bLength; \ + uint8 bDescriptorType; \ + uint16 bString[len]; \ + } + #define CDC_FUCNTIONAL_DESCRIPTOR(DataSize) \ struct \ { \ @@ -86,29 +97,103 @@ typedef struct { } USB_Descriptor_Endpoint; typedef struct { - USB_Descriptor_Config_Header Header; + /* config header */ + 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_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; + struct { + uint8 bLength; + uint8 bDescriptorType; + uint8 SubType; + uint8 Data[2]; + } CDC_Functional_IntHeader; + struct { + uint8 bLength; + uint8 bDescriptorType; + uint8 SubType; + uint8 Data[2]; + } CDC_Functional_CallManagement; + struct { + uint8 bLength; + uint8 bDescriptorType; + uint8 SubType; + uint8 Data[1]; + } CDC_Functional_ACM; + struct { + uint8 bLength; + uint8 bDescriptorType; + uint8 SubType; + uint8 Data[2]; + } CDC_Functional_Union; + + /* USB_Descriptor_Endpoint ManagementEndpoint; + */ + uint8_t EP1_bLength; + uint8_t EP1_bDescriptorType; + uint8_t EP1_bEndpointAddress; + uint8_t EP1_bmAttributes; + uint8_t EP1_wMaxPacketSize0; + uint8_t EP1_wMaxPacketSize1; + uint8_t EP1_bInterval; + + /* USB_Descriptor_Interface DCI_Interface; + */ + + uint8_t DCI_bLength; + uint8_t DCI_bDescriptorType; + uint8_t DCI_bInterfaceNumber; + uint8_t DCI_bAlternateSetting; + uint8_t DCI_bNumEndpoints; + uint8_t DCI_bInterfaceClass; + uint8_t DCI_bInterfaceSubClass; + uint8_t DCI_bInterfaceProtocol; + uint8_t DCI_iInterface; + + /* USB_Descriptor_Endpoint DataOutEndpoint; USB_Descriptor_Endpoint DataInEndpoint; -}USB_Descriptor_Configuration; + */ + + uint8_t EP2_bLength; + uint8_t EP2_bDescriptorType; + uint8_t EP2_bEndpointAddress; + uint8_t EP2_bmAttributes; + uint8_t EP2_wMaxPacketSize0; + uint8_t EP2_wMaxPacketSize1; + uint8_t EP2_bInterval; + + uint8_t EP3_bLength; + uint8_t EP3_bDescriptorType; + uint8_t EP3_bEndpointAddress; + uint8_t EP3_bmAttributes; + uint8_t EP3_wMaxPacketSize0; + uint8_t EP3_wMaxPacketSize1; + uint8_t EP3_bInterval; + + +}USB_Descriptor_Config; -typedef struct { - uint8 bLength; - uint8 bDescriptorType; - uint16 bString[]; -} USB_Descriptor_String; + typedef struct { + uint8 bLength; + uint8 bDescriptorType; + uint16 bString[]; + } USB_Descriptor_String; extern const USB_Descriptor_Device usbVcomDescriptor_Device; extern const USB_Descriptor_Config usbVcomDescriptor_Config; -extern const USB_Descriptor_String usbVcomDescriptor_LandID; -extern const USB_Descriptor_String usbVcomDescriptor_iManufacturer; -extern const USB_Descriptor_String usbVcomDescriptor_iProduct; + +extern uint8 usbVcomDescriptor_LangID[USB_DESCRIPTOR_STRING_LEN(1)]; +extern uint8 usbVcomDescriptor_iManufacturer[USB_DESCRIPTOR_STRING_LEN(8)]; +extern uint8 usbVcomDescriptor_iProduct[USB_DESCRIPTOR_STRING_LEN(8)]; #if defined(__cplusplus) } |