aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libmaple/include/libmaple/usb_cdcacm.h19
-rw-r--r--libmaple/usb/stm32f1/usb_cdcacm.c44
-rw-r--r--libmaple/usb/stm32f1/usb_descriptors.h84
3 files changed, 84 insertions, 63 deletions
diff --git a/libmaple/include/libmaple/usb_cdcacm.h b/libmaple/include/libmaple/usb_cdcacm.h
index 6649854..1c46b56 100644
--- a/libmaple/include/libmaple/usb_cdcacm.h
+++ b/libmaple/include/libmaple/usb_cdcacm.h
@@ -53,6 +53,25 @@ extern "C" {
#define USB_CDCACM_CONTROL_LINE_RTS (0x02)
/*
+ * Descriptors, etc.
+ */
+
+#define CDC_FUNCTIONAL_DESCRIPTOR_SIZE(DataSize) (3 + DataSize)
+#define CDC_FUNCTIONAL_DESCRIPTOR(DataSize) \
+ struct { \
+ uint8 bLength; \
+ uint8 bDescriptorType; \
+ uint8 SubType; \
+ uint8 Data[DataSize]; \
+ } __packed
+
+#define USB_DEVICE_CLASS_CDC 0x02
+#define USB_DEVICE_SUBCLASS_CDC 0x00
+#define USB_INTERFACE_CLASS_CDC 0x02
+#define USB_INTERFACE_SUBCLASS_CDC_ACM 0x02
+#define USB_INTERFACE_CLASS_DIC 0x0A
+
+/*
* CDC ACM interface
*/
diff --git a/libmaple/usb/stm32f1/usb_cdcacm.c b/libmaple/usb/stm32f1/usb_cdcacm.c
index ca63b19..ba3c268 100644
--- a/libmaple/usb/stm32f1/usb_cdcacm.c
+++ b/libmaple/usb/stm32f1/usb_cdcacm.c
@@ -111,8 +111,8 @@ static void usbSetDeviceAddress(void);
#define USB_DEVICE_SUBCLASS_CDC 0x00
#define LEAFLABS_ID_VENDOR 0x1EAF
#define MAPLE_ID_PRODUCT 0x0004
-static const USB_Descriptor_Device usbVcomDescriptor_Device = {
- .bLength = sizeof(USB_Descriptor_Device),
+static const usb_descriptor_device usbVcomDescriptor_Device = {
+ .bLength = sizeof(usb_descriptor_device),
.bDescriptorType = USB_DESCRIPTOR_TYPE_DEVICE,
.bcdUSB = 0x0200,
.bDeviceClass = USB_DEVICE_CLASS_CDC,
@@ -129,24 +129,24 @@ static const USB_Descriptor_Device usbVcomDescriptor_Device = {
};
typedef struct {
- USB_Descriptor_Config_Header Config_Header;
- USB_Descriptor_Interface CCI_Interface;
+ usb_descriptor_config_header Config_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;
-} __packed USB_Descriptor_Config;
+ usb_descriptor_endpoint ManagementEndpoint;
+ usb_descriptor_interface DCI_Interface;
+ usb_descriptor_endpoint DataOutEndpoint;
+ usb_descriptor_endpoint DataInEndpoint;
+} __packed usb_descriptor_config;
#define MAX_POWER (100 >> 1)
-static const USB_Descriptor_Config usbVcomDescriptor_Config = {
+static const usb_descriptor_config usbVcomDescriptor_Config = {
.Config_Header = {
- .bLength = sizeof(USB_Descriptor_Config_Header),
+ .bLength = sizeof(usb_descriptor_config_header),
.bDescriptorType = USB_DESCRIPTOR_TYPE_CONFIGURATION,
- .wTotalLength = sizeof(USB_Descriptor_Config),
+ .wTotalLength = sizeof(usb_descriptor_config),
.bNumInterfaces = 0x02,
.bConfigurationValue = 0x01,
.iConfiguration = 0x00,
@@ -156,7 +156,7 @@ static const USB_Descriptor_Config usbVcomDescriptor_Config = {
},
.CCI_Interface = {
- .bLength = sizeof(USB_Descriptor_Interface),
+ .bLength = sizeof(usb_descriptor_interface),
.bDescriptorType = USB_DESCRIPTOR_TYPE_INTERFACE,
.bInterfaceNumber = 0x00,
.bAlternateSetting = 0x00,
@@ -196,17 +196,17 @@ static const USB_Descriptor_Config usbVcomDescriptor_Config = {
},
.ManagementEndpoint = {
- .bLength = sizeof(USB_Descriptor_Endpoint),
+ .bLength = sizeof(usb_descriptor_endpoint),
.bDescriptorType = USB_DESCRIPTOR_TYPE_ENDPOINT,
.bEndpointAddress = (USB_DESCRIPTOR_ENDPOINT_IN |
USB_CDCACM_MANAGEMENT_ENDP),
- .bmAttributes = EP_TYPE_INTERRUPT,
+ .bmAttributes = USB_EP_TYPE_INTERRUPT,
.wMaxPacketSize = USB_CDCACM_MANAGEMENT_EPSIZE,
.bInterval = 0xFF,
},
.DCI_Interface = {
- .bLength = sizeof(USB_Descriptor_Interface),
+ .bLength = sizeof(usb_descriptor_interface),
.bDescriptorType = USB_DESCRIPTOR_TYPE_INTERFACE,
.bInterfaceNumber = 0x01,
.bAlternateSetting = 0x00,
@@ -218,20 +218,20 @@ static const USB_Descriptor_Config usbVcomDescriptor_Config = {
},
.DataOutEndpoint = {
- .bLength = sizeof(USB_Descriptor_Endpoint),
+ .bLength = sizeof(usb_descriptor_endpoint),
.bDescriptorType = USB_DESCRIPTOR_TYPE_ENDPOINT,
.bEndpointAddress = (USB_DESCRIPTOR_ENDPOINT_OUT |
USB_CDCACM_RX_ENDP),
- .bmAttributes = EP_TYPE_BULK,
+ .bmAttributes = USB_EP_TYPE_BULK,
.wMaxPacketSize = USB_CDCACM_RX_EPSIZE,
.bInterval = 0x00,
},
.DataInEndpoint = {
- .bLength = sizeof(USB_Descriptor_Endpoint),
+ .bLength = sizeof(usb_descriptor_endpoint),
.bDescriptorType = USB_DESCRIPTOR_TYPE_ENDPOINT,
.bEndpointAddress = (USB_DESCRIPTOR_ENDPOINT_IN | USB_CDCACM_TX_ENDP),
- .bmAttributes = EP_TYPE_BULK,
+ .bmAttributes = USB_EP_TYPE_BULK,
.wMaxPacketSize = USB_CDCACM_TX_EPSIZE,
.bInterval = 0x00,
},
@@ -277,12 +277,12 @@ static const uint8 usbVcomDescriptor_iProduct[USB_DESCRIPTOR_STRING_LEN(8)] = {
static ONE_DESCRIPTOR Device_Descriptor = {
(uint8*)&usbVcomDescriptor_Device,
- sizeof(USB_Descriptor_Device)
+ sizeof(usb_descriptor_device)
};
static ONE_DESCRIPTOR Config_Descriptor = {
(uint8*)&usbVcomDescriptor_Config,
- sizeof(USB_Descriptor_Config)
+ sizeof(usb_descriptor_config)
};
static ONE_DESCRIPTOR String_Descriptor[3] = {
diff --git a/libmaple/usb/stm32f1/usb_descriptors.h b/libmaple/usb/stm32f1/usb_descriptors.h
index 0732e73..9807f36 100644
--- a/libmaple/usb/stm32f1/usb_descriptors.h
+++ b/libmaple/usb/stm32f1/usb_descriptors.h
@@ -24,10 +24,24 @@
* SOFTWARE.
*****************************************************************************/
-#ifndef _USB_DESCRIPTORS_H_
-#define _USB_DESCRIPTORS_H_
+#ifndef _LIBMAPLE_USB_DESCRIPTORS_H_
+#define _LIBMAPLE_USB_DESCRIPTORS_H_
-#include <libmaple/libmaple.h>
+/*
+ * USB descriptors and associated paraphernalia.
+ *
+ * IMPORTANT: this API is unstable, and may change without notice.
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <libmaple/libmaple_types.h>
+
+/*
+ * Descriptor types
+ */
#define USB_DESCRIPTOR_TYPE_DEVICE 0x01
#define USB_DESCRIPTOR_TYPE_CONFIGURATION 0x02
@@ -35,28 +49,12 @@
#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_INTERFACE_CLASS_CDC 0x02
-/* CDC Abstract Control Model */
-#define USB_INTERFACE_SUBCLASS_CDC_ACM 0x02
-#define USB_INTERFACE_CLASS_DIC 0x0A
-
-#define USB_CONFIG_ATTR_BUSPOWERED 0b10000000
-#define USB_CONFIG_ATTR_SELF_POWERED 0b11000000
-
-#define EP_TYPE_INTERRUPT 0x03
-#define EP_TYPE_BULK 0x02
-
-#define USB_DESCRIPTOR_ENDPOINT_IN 0x80
-#define USB_DESCRIPTOR_ENDPOINT_OUT 0x00
+/*
+ * Descriptors and declaration helpers
+ */
#define USB_DESCRIPTOR_STRING_LEN(x) (2 + (x << 1))
-#if defined(__cplusplus)
-extern "C" {
-#endif
-
#define USB_DESCRIPTOR_STRING(len) \
struct { \
uint8 bLength; \
@@ -64,16 +62,7 @@ extern "C" {
uint16 bString[len]; \
} __packed
-#define CDC_FUNCTIONAL_DESCRIPTOR_SIZE(DataSize) (3 + DataSize)
-#define CDC_FUNCTIONAL_DESCRIPTOR(DataSize) \
- struct { \
- uint8 bLength; \
- uint8 bDescriptorType; \
- uint8 SubType; \
- uint8 Data[DataSize]; \
- } __packed
-
-typedef struct {
+typedef struct usb_descriptor_device {
uint8 bLength;
uint8 bDescriptorType;
uint16 bcdUSB;
@@ -88,9 +77,9 @@ typedef struct {
uint8 iProduct;
uint8 iSerialNumber;
uint8 bNumConfigurations;
-} __packed USB_Descriptor_Device;
+} __packed usb_descriptor_device;
-typedef struct {
+typedef struct usb_descriptor_config_header {
uint8 bLength;
uint8 bDescriptorType;
uint16 wTotalLength;
@@ -99,9 +88,9 @@ typedef struct {
uint8 iConfiguration;
uint8 bmAttributes;
uint8 bMaxPower;
-} __packed USB_Descriptor_Config_Header;
+} __packed usb_descriptor_config_header;
-typedef struct {
+typedef struct usb_descriptor_interface {
uint8 bLength;
uint8 bDescriptorType;
uint8 bInterfaceNumber;
@@ -111,22 +100,35 @@ typedef struct {
uint8 bInterfaceSubClass;
uint8 bInterfaceProtocol;
uint8 iInterface;
-} __packed USB_Descriptor_Interface;
+} __packed usb_descriptor_interface;
-typedef struct {
+typedef struct usb_descriptor_endpoint {
uint8 bLength;
uint8 bDescriptorType;
uint8 bEndpointAddress;
uint8 bmAttributes;
uint16 wMaxPacketSize;
uint8 bInterval;
-} __packed USB_Descriptor_Endpoint;
+} __packed usb_descriptor_endpoint;
-typedef struct {
+typedef struct usb_descriptor_string {
uint8 bLength;
uint8 bDescriptorType;
uint16 bString[];
-} USB_Descriptor_String;
+} usb_descriptor_string;
+
+/*
+ * Common values that go inside descriptors
+ */
+
+#define USB_CONFIG_ATTR_BUSPOWERED 0b10000000
+#define USB_CONFIG_ATTR_SELF_POWERED 0b11000000
+
+#define USB_EP_TYPE_INTERRUPT 0x03
+#define USB_EP_TYPE_BULK 0x02
+
+#define USB_DESCRIPTOR_ENDPOINT_IN 0x80
+#define USB_DESCRIPTOR_ENDPOINT_OUT 0x00
#if defined(__cplusplus)
}