aboutsummaryrefslogtreecommitdiffstats
path: root/core/usb/descriptors.h
diff options
context:
space:
mode:
Diffstat (limited to 'core/usb/descriptors.h')
-rw-r--r--core/usb/descriptors.h125
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)
}