summaryrefslogtreecommitdiff
path: root/nuttx/drivers/usbdev
diff options
context:
space:
mode:
authorpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2011-09-13 19:04:13 +0000
committerpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2011-09-13 19:04:13 +0000
commit18d4d71fbd502bffaaadacb4ab9087426cce7047 (patch)
tree8b5feff5e248672c6f5eb77960459e66ab05a85c /nuttx/drivers/usbdev
parent911a1d2fafcd6eff4c99765b184a6e82f816b312 (diff)
downloadpx4-nuttx-18d4d71fbd502bffaaadacb4ab9087426cce7047.tar.gz
px4-nuttx-18d4d71fbd502bffaaadacb4ab9087426cce7047.tar.bz2
px4-nuttx-18d4d71fbd502bffaaadacb4ab9087426cce7047.zip
Add CDC ACM serial class device driver
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@3953 42af7a65-404d-4744-a932-0658087f49c3
Diffstat (limited to 'nuttx/drivers/usbdev')
-rw-r--r--nuttx/drivers/usbdev/Make.defs4
-rw-r--r--nuttx/drivers/usbdev/cdc_serial.c554
-rw-r--r--nuttx/drivers/usbdev/usbdev_serial.c10
3 files changed, 329 insertions, 239 deletions
diff --git a/nuttx/drivers/usbdev/Make.defs b/nuttx/drivers/usbdev/Make.defs
index 2a1c51625..1a0a8d412 100644
--- a/nuttx/drivers/usbdev/Make.defs
+++ b/nuttx/drivers/usbdev/Make.defs
@@ -41,6 +41,10 @@ ifeq ($(CONFIG_USBSER),y)
CSRCS += usbdev_serial.c
endif
+ifeq ($(CONFIG_CDCSER),y)
+ CSRCS += cdc_serial.c
+endif
+
ifeq ($(CONFIG_USBSTRG),y)
CSRCS += usbdev_storage.c usbdev_scsi.c
endif
diff --git a/nuttx/drivers/usbdev/cdc_serial.c b/nuttx/drivers/usbdev/cdc_serial.c
index 21f3680db..6e14ca6e8 100644
--- a/nuttx/drivers/usbdev/cdc_serial.c
+++ b/nuttx/drivers/usbdev/cdc_serial.c
@@ -56,6 +56,7 @@
#include <nuttx/serial.h>
#include <nuttx/usb/usb.h>
+#include <nuttx/usb/cdc.h>
#include <nuttx/usb/usbdev.h>
#include <nuttx/usb/cdc_serial.h>
#include <nuttx/usb/usbdev_trace.h>
@@ -102,6 +103,8 @@
#define CDCSER_PRODUCTSTRID (2)
#define CDCSER_SERIALSTRID (3)
#define CDCSER_CONFIGSTRID (4)
+#define CDCSER_NOTIFSTRID (5)
+#define CDCSER_DATAIFSTRID (6)
/* Number of individual descriptors in the configuration descriptor */
@@ -131,18 +134,18 @@
/* Trace values *************************************************************/
-#define CDCSER_CLASSAPI_SETUP TRACE_EVENT(TRACE_CLASSAPI_ID, CDCSER_TRACECLASSAPI_SETUP)
-#define CDCSER_CLASSAPI_SHUTDOWN TRACE_EVENT(TRACE_CLASSAPI_ID, CDCSER_TRACECLASSAPI_SHUTDOWN)
-#define CDCSER_CLASSAPI_ATTACH TRACE_EVENT(TRACE_CLASSAPI_ID, CDCSER_TRACECLASSAPI_ATTACH)
-#define CDCSER_CLASSAPI_DETACH TRACE_EVENT(TRACE_CLASSAPI_ID, CDCSER_TRACECLASSAPI_DETACH)
-#define CDCSER_CLASSAPI_IOCTL TRACE_EVENT(TRACE_CLASSAPI_ID, CDCSER_TRACECLASSAPI_IOCTL)
-#define CDCSER_CLASSAPI_RECEIVE TRACE_EVENT(TRACE_CLASSAPI_ID, CDCSER_TRACECLASSAPI_RECEIVE)
-#define CDCSER_CLASSAPI_RXINT TRACE_EVENT(TRACE_CLASSAPI_ID, CDCSER_TRACECLASSAPI_RXINT)
-#define CDCSER_CLASSAPI_RXAVAILABLE TRACE_EVENT(TRACE_CLASSAPI_ID, CDCSER_TRACECLASSAPI_RXAVAILABLE)
-#define CDCSER_CLASSAPI_SEND TRACE_EVENT(TRACE_CLASSAPI_ID, CDCSER_TRACECLASSAPI_SEND)
-#define CDCSER_CLASSAPI_TXINT TRACE_EVENT(TRACE_CLASSAPI_ID, CDCSER_TRACECLASSAPI_TXINT)
-#define CDCSER_CLASSAPI_TXREADY TRACE_EVENT(TRACE_CLASSAPI_ID, CDCSER_TRACECLASSAPI_TXREADY)
-#define CDCSER_CLASSAPI_TXEMPTY TRACE_EVENT(TRACE_CLASSAPI_ID, CDCSER_TRACECLASSAPI_TXEMPTY)
+#define CDCSER_CLASSAPI_SETUP TRACE_EVENT(TRACE_CLASSAPI_ID, USBSER_TRACECLASSAPI_SETUP)
+#define CDCSER_CLASSAPI_SHUTDOWN TRACE_EVENT(TRACE_CLASSAPI_ID, USBSER_TRACECLASSAPI_SHUTDOWN)
+#define CDCSER_CLASSAPI_ATTACH TRACE_EVENT(TRACE_CLASSAPI_ID, USBSER_TRACECLASSAPI_ATTACH)
+#define CDCSER_CLASSAPI_DETACH TRACE_EVENT(TRACE_CLASSAPI_ID, USBSER_TRACECLASSAPI_DETACH)
+#define CDCSER_CLASSAPI_IOCTL TRACE_EVENT(TRACE_CLASSAPI_ID, USBSER_TRACECLASSAPI_IOCTL)
+#define CDCSER_CLASSAPI_RECEIVE TRACE_EVENT(TRACE_CLASSAPI_ID, USBSER_TRACECLASSAPI_RECEIVE)
+#define CDCSER_CLASSAPI_RXINT TRACE_EVENT(TRACE_CLASSAPI_ID, USBSER_TRACECLASSAPI_RXINT)
+#define CDCSER_CLASSAPI_RXAVAILABLE TRACE_EVENT(TRACE_CLASSAPI_ID, USBSER_TRACECLASSAPI_RXAVAILABLE)
+#define CDCSER_CLASSAPI_SEND TRACE_EVENT(TRACE_CLASSAPI_ID, USBSER_TRACECLASSAPI_SEND)
+#define CDCSER_CLASSAPI_TXINT TRACE_EVENT(TRACE_CLASSAPI_ID, USBSER_TRACECLASSAPI_TXINT)
+#define CDCSER_CLASSAPI_TXREADY TRACE_EVENT(TRACE_CLASSAPI_ID, USBSER_TRACECLASSAPI_TXREADY)
+#define CDCSER_CLASSAPI_TXEMPTY TRACE_EVENT(TRACE_CLASSAPI_ID, USBSER_TRACECLASSAPI_TXEMPTY)
/****************************************************************************
* Private Types
@@ -152,29 +155,31 @@
struct usbser_req_s
{
- FAR struct usbser_req_s *flink; /* Implements a singly linked list */
- FAR struct usbdev_req_s *req; /* The contained request */
+ FAR struct usbser_req_s *flink; /* Implements a singly linked list */
+ FAR struct usbdev_req_s *req; /* The contained request */
};
/* This structure describes the internal state of the driver */
struct usbser_dev_s
{
- FAR struct uart_dev_s serdev; /* Serial device structure */
- FAR struct usbdev_s *usbdev; /* usbdev driver pointer */
-
- uint8_t config; /* Configuration number */
- uint8_t nwrq; /* Number of queue write requests (in reqlist)*/
- uint8_t nrdq; /* Number of queue read requests (in epbulkout) */
- bool rxenabled; /* true: UART RX "interrupts" enabled */
- uint8_t linest[7]; /* Fake line status */
- int16_t rxhead; /* Working head; used when rx int disabled */
-
- FAR struct usbdev_ep_s *epintin; /* Interrupt IN endpoint structure */
- FAR struct usbdev_ep_s *epbulkin; /* Bulk IN endpoint structure */
- FAR struct usbdev_ep_s *epbulkout; /* Bulk OUT endpoint structure */
- FAR struct usbdev_req_s *ctrlreq; /* Control request */
- struct sq_queue_s reqlist; /* List of write request containers */
+ FAR struct uart_dev_s serdev; /* Serial device structure */
+ FAR struct usbdev_s *usbdev; /* usbdev driver pointer */
+
+ uint8_t config; /* Configuration number */
+ uint8_t nwrq; /* Number of queue write requests (in reqlist)*/
+ uint8_t nrdq; /* Number of queue read requests (in epbulkout) */
+ bool rxenabled; /* true: UART RX "interrupts" enabled */
+ int16_t rxhead; /* Working head; used when rx int disabled */
+
+ uint8_t ctrlline; /* Buffered control line state */
+ struct cdc_linecoding_s linecoding; /* Buffered line status */
+
+ FAR struct usbdev_ep_s *epintin; /* Interrupt IN endpoint structure */
+ FAR struct usbdev_ep_s *epbulkin; /* Bulk IN endpoint structure */
+ FAR struct usbdev_ep_s *epbulkout; /* Bulk OUT endpoint structure */
+ FAR struct usbdev_req_s *ctrlreq; /* Control request */
+ struct sq_queue_s reqlist; /* List of write request containers */
/* Pre-allocated write request containers. The write requests will
* be linked in a free list (reqlist), and used to send requests to
@@ -212,8 +217,9 @@ struct usbser_alloc_s
struct cfgdecsc_group_s
{
- FAR void *desc;
- unsigned int size;
+ uint16_t descsize; /* Size of the descriptor in bytes */
+ uint16_t hsepsize; /* High speed max packet size */
+ FAR void *desc; /* A pointer to the descriptor */
};
/****************************************************************************
@@ -239,13 +245,18 @@ static void usbclass_freereq(FAR struct usbdev_ep_s *ep,
static int usbclass_mkstrdesc(uint8_t id, struct usb_strdesc_s *strdesc);
#ifdef CONFIG_USBDEV_DUALSPEED
-static void usbclass_mkepbulkdesc(const struct usb_epdesc_s *indesc,
- uint16_t mxpacket, struct usb_epdesc_s *outdesc);
-static int16_t usbclass_mkcfgdesc(uint8_t *buf, uint8_t speed, uint8_t type);
+static void usbclass_mkepdesc(FAR const struct usb_epdesc_s *indesc,
+ uint16_t mxpacket, FAR struct usb_epdesc_s *outdesc);
+static int16_t usbclass_mkcfgdesc(FAR uint8_t *buf, uint8_t speed, uint8_t type);
#else
-static int16_t usbclass_mkcfgdesc(uint8_t *buf);
+static int16_t usbclass_mkcfgdesc(FAR uint8_t *buf);
#endif
static void usbclass_resetconfig(FAR struct usbser_dev_s *priv);
+#ifdef CONFIG_USBDEV_DUALSPEED
+static int usbclass_epconfigure(FAR struct usbdev_ep_s *ep,
+ FAR const struct usb_epdesc_s *indesc, uint16_t mxpacket,
+ bool last);
+#endif
static int usbclass_setconfig(FAR struct usbser_dev_s *priv,
uint8_t config);
@@ -336,7 +347,7 @@ static const struct usb_devdesc_s g_devdesc =
/* Configuration descriptor */
-static const struct usb_cfgdesc_s g_cfgdesc;
+static const struct usb_cfgdesc_s g_cfgdesc =
{
USB_SIZEOF_CFGDESC, /* len */
USB_DESC_TYPE_CONFIG, /* type */
@@ -363,7 +374,11 @@ static const struct usb_ifdesc_s g_notifdesc =
USB_CLASS_CDC, /* class */
CDC_SUBCLASS_ACM, /* subclass */
CDC_PROTO_ATM, /* proto */
+#ifdef CONFIG_CDCSER_NOTIFSTR
CDCSER_NOTIFSTRID /* iif */
+#else
+ 0 /* iif */
+#endif
};
/* Header functional descriptor */
@@ -397,7 +412,7 @@ static const struct cdc_union_funcdesc_s g_unionfunc =
USB_DESC_TYPE_CSINTERFACE, /* type */
CDC_DSUBTYPE_UNION, /* subtype */
0, /* master */
- 1 /* slave[0] */
+ {1} /* slave[0] */
};
/* Interrupt IN endpoint descriptor */
@@ -408,8 +423,9 @@ static const struct usb_epdesc_s g_epintindesc =
USB_DESC_TYPE_ENDPOINT, /* type */
CDCSER_EPINTIN_ADDR, /* addr */
CDCSER_EPINTIN_ATTR, /* attr */
- { LSBYTE(CONFIG_CDCSER_EPINTIN_SIZE), /* maxpacket */
- MSBYTE(CONFIG_CDCSER_EPINTIN_SIZE)
+ {
+ LSBYTE(CONFIG_CDCSER_EPINTIN_FSSIZE), /* maxpacket (full speed) */
+ MSBYTE(CONFIG_CDCSER_EPINTIN_FSSIZE)
},
0xff /* interval */
};
@@ -426,7 +442,11 @@ static const struct usb_ifdesc_s g_dataifdesc =
USB_CLASS_CDC_DATA, /* class */
CDC_DATA_SUBCLASS_NONE, /* subclass */
CDC_DATA_PROTO_NONE, /* proto */
+#ifdef CONFIG_CDCSER_DATAIFSTR
CDCSER_DATAIFSTRID /* iif */
+#else
+ 0 /* iif */
+#endif
};
/* Bulk OUT endpoint descriptor */
@@ -437,8 +457,9 @@ static const struct usb_epdesc_s g_epbulkoutdesc =
USB_DESC_TYPE_ENDPOINT, /* type */
CDCSER_EPOUTBULK_ADDR, /* addr */
CDCSER_EPINTIN_ATTR, /* attr */
- { LSBYTE(CONFIG_CDCSER_BULKOUT_EPSIZE), /* maxpacket */
- MSBYTE(CONFIG_CDCSER_BULKOUT_EPSIZE)
+ {
+ LSBYTE(CONFIG_CDCSER_EPBULKOUT_FSSIZE), /* maxpacket (full speed) */
+ MSBYTE(CONFIG_CDCSER_EPBULKOUT_FSSIZE)
},
1 /* interval */
};
@@ -451,8 +472,9 @@ static const struct usb_epdesc_s g_epbulkindesc =
USB_DESC_TYPE_ENDPOINT, /* type */
CDCSER_EPINBULK_ADDR, /* addr */
CDCSER_EPINBULK_ATTR, /* attr */
- { LSBYTE(CONFIG_CDCSER_BULKIN_EPSIZE), /* maxpacket */
- MSBYTE(CONFIG_CDCSER_BULKIN_EPSIZE)
+ {
+ LSBYTE(CONFIG_CDCSER_EPBULKIN_FSSIZE), /* maxpacket (full speed) */
+ MSBYTE(CONFIG_CDCSER_EPBULKIN_FSSIZE)
},
1 /* interval */
};
@@ -469,40 +491,49 @@ static const struct usb_epdesc_s g_epbulkindesc =
static const struct cfgdecsc_group_s g_cfggroup[CDCSER_CFGGROUP_SIZE] = {
{
- (FAR void *)&g_cfgdesc, /* 1. Configuration descriptor */
- USB_SIZEOF_CFGDESC
+ USB_SIZEOF_CFGDESC, /* 1. Configuration descriptor */
+ 0,
+ (FAR void *)&g_cfgdesc
},
{
- (FAR void *)&g_notifdesc, /* 2. Notification interface */
- USB_SIZEOF_IFDESC
+ USB_SIZEOF_IFDESC, /* 2. Notification interface */
+ 0,
+ (FAR void *)&g_notifdesc
},
{
- (FAR void *)&g_funchdr, /* 3. Header functional descriptor */
- SIZEOF_HDR_FUNCDESC
+ SIZEOF_HDR_FUNCDESC, /* 3. Header functional descriptor */
+ 0,
+ (FAR void *)&g_funchdr
},
{
- (FAR void *)&g_acmfunc, /* 4. ACM functional descriptor */
- SIZEOF_ACM_FUNCDESC
+ SIZEOF_ACM_FUNCDESC, /* 4. ACM functional descriptor */
+ 0,
+ (FAR void *)&g_acmfunc
},
{
- (FAR void *)&g_unionfunc, /* 5. Union functional descriptor */
- SIZEOF_UNION_FUNCDESC(1)
+ SIZEOF_UNION_FUNCDESC(1), /* 5. Union functional descriptor */
+ 0,
+ (FAR void *)&g_unionfunc
},
{
- (FAR void *)&g_epintindesc, /* 6. Interrupt IN endpoint descriptor */
- USB_SIZEOF_EPDESC
+ USB_SIZEOF_EPDESC, /* 6. Interrupt IN endpoint descriptor */
+ CONFIG_CDCSER_EPINTIN_HSSIZE,
+ (FAR void *)&g_epintindesc
},
{
- (FAR void *)&g_dataifdesc, /* 7. Data interface descriptor */
- USB_SIZEOF_IFDESC
+ USB_SIZEOF_IFDESC, /* 7. Data interface descriptor */
+ 0,
+ (FAR void *)&g_dataifdesc
},
{
- (FAR void *)&g_epbulkoutdesc, /* 8. Bulk OUT endpoint descriptor */
- USB_SIZEOF_EPDESC
+ USB_SIZEOF_EPDESC, /* 8. Bulk OUT endpoint descriptor */
+ CONFIG_CDCSER_EPBULKOUT_HSSIZE,
+ (FAR void *)&g_epbulkoutdesc
},
{
- (FAR void *)&g_epbulkindesc, /* 9. Bulk OUT endpoint descriptor */
- USB_SIZEOF_EPDESC
+ USB_SIZEOF_EPDESC, /* 9. Bulk OUT endpoint descriptor */
+ CONFIG_CDCSER_EPBULKIN_HSSIZE,
+ (FAR void *)&g_epbulkindesc
}
};
@@ -613,7 +644,7 @@ static int usbclass_sndpacket(FAR struct usbser_dev_s *priv)
#ifdef CONFIG_DEBUG
if (priv == NULL)
{
- usbtrace(TRACE_CLSERROR(CDCSER_TRACEERR_INVALIDARG), 0);
+ usbtrace(TRACE_CLSERROR(USBSER_TRACEERR_INVALIDARG), 0);
return -ENODEV;
}
#endif
@@ -658,7 +689,7 @@ static int usbclass_sndpacket(FAR struct usbser_dev_s *priv)
ret = EP_SUBMIT(ep, req);
if (ret != OK)
{
- usbtrace(TRACE_CLSERROR(CDCSER_TRACEERR_SUBMITFAIL), (uint16_t)-ret);
+ usbtrace(TRACE_CLSERROR(USBSER_TRACEERR_SUBMITFAIL), (uint16_t)-ret);
break;
}
}
@@ -774,7 +805,7 @@ static inline int usbclass_recvpacket(FAR struct usbser_dev_s *priv,
if (nbytes < reqlen)
{
- usbtrace(TRACE_CLSERROR(CDCSER_TRACEERR_RXOVERRUN), 0);
+ usbtrace(TRACE_CLSERROR(USBSER_TRACEERR_RXOVERRUN), 0);
return -ENOSPC;
}
return OK;
@@ -872,6 +903,18 @@ static int usbclass_mkstrdesc(uint8_t id, struct usb_strdesc_s *strdesc)
str = CONFIG_CDCSER_CONFIGSTR;
break;
+#ifdef CONFIG_CDCSER_NOTIFSTR
+ case CDCSER_NOTIFSTRID:
+ str = CONFIG_CDCSER_NOTIFSTR;
+ break;
+#endif
+
+#ifdef CONFIG_CDCSER_DATAIFSTR
+ case CDCSER_DATAIFSTRID:
+ str = CONFIG_CDCSER_DATAIFSTR;
+ break;
+#endif
+
default:
return -EINVAL;
}
@@ -893,19 +936,19 @@ static int usbclass_mkstrdesc(uint8_t id, struct usb_strdesc_s *strdesc)
}
/****************************************************************************
- * Name: usbclass_mkepbulkdesc
+ * Name: usbclass_mkepdesc
*
* Description:
- * Construct the endpoint descriptor
+ * Construct the endpoint descriptor using the correct max packet size.
*
****************************************************************************/
#ifdef CONFIG_USBDEV_DUALSPEED
-static inline void usbclass_mkepbulkdesc(const FAR struct usb_epdesc_s *indesc,
- uint16_t mxpacket,
- FAR struct usb_epdesc_s *outdesc)
+static inline void usbclass_mkepdesc(FAR const FAR struct usb_epdesc_s *indesc,
+ uint16_t mxpacket,
+ FAR struct usb_epdesc_s *outdesc)
{
- /* Copy the canned descriptor */
+ /* Copy the "canned" descriptor */
memcpy(outdesc, indesc, USB_SIZEOF_EPDESC);
@@ -925,74 +968,63 @@ static inline void usbclass_mkepbulkdesc(const FAR struct usb_epdesc_s *indesc,
****************************************************************************/
#ifdef CONFIG_USBDEV_DUALSPEED
-static int16_t usbclass_mkcfgdesc(uint8_t *buf, uint8_t speed, uint8_t type)
+static int16_t usbclass_mkcfgdesc(FAR uint8_t *buf, uint8_t speed, uint8_t type)
#else
-static int16_t usbclass_mkcfgdesc(uint8_t *buf)
+static int16_t usbclass_mkcfgdesc(FAR uint8_t *buf)
#endif
{
- FAR struct usb_cfgdesc_s *cfgdesc = (struct usb_cfgdesc_s*)buf;
+ FAR const struct cfgdecsc_group_s *group;
+ FAR uint8_t *dest = buf;
+ int i;
+
#ifdef CONFIG_USBDEV_DUALSPEED
bool hispeed = (speed == USB_SPEED_HIGH);
- uint16_t bulkmxpacket;
-#endif
- uint16_t totallen;
-
- /* This is the total length of the configuration (not necessarily the
- * size that we will be sending now.
- */
- totallen = USB_SIZEOF_CFGDESC + USB_SIZEOF_IFDESC + CDCSER_NENDPOINTS * USB_SIZEOF_EPDESC;
+ /* Check for switches between high and full speed */
- /* Configuration descriptor -- Copy the canned descriptor and fill in the
- * type (we'll also need to update the size below
- */
-
- memcpy(cfgdesc, &g_cfgdesc, USB_SIZEOF_CFGDESC);
- buf += USB_SIZEOF_CFGDESC;
-
- /* Copy the canned interface descriptor */
-
- memcpy(buf, &g_ifdesc, USB_SIZEOF_IFDESC);
- buf += USB_SIZEOF_IFDESC;
-
- /* Make the three endpoint configurations. First, check for switches
- * between high and full speed
- */
-
-#ifdef CONFIG_USBDEV_DUALSPEED
if (type == USB_DESC_TYPE_OTHERSPEEDCONFIG)
{
hispeed = !hispeed;
}
#endif
- memcpy(buf, &g_epintindesc, USB_SIZEOF_EPDESC);
- buf += USB_SIZEOF_EPDESC;
+ /* Copy all of the descriptors in the group */
-#ifdef CONFIG_USBDEV_DUALSPEED
- if (hispeed)
- {
- bulkmxpacket = 512;
- }
- else
+ for (i = 0, dest = buf; i < CDCSER_CFGGROUP_SIZE; i++)
{
- bulkmxpacket = 64;
- }
+ group = &g_cfggroup[i];
- usbclass_mkepbulkdesc(&g_epbulkoutdesc, bulkmxpacket, (struct usb_epdesc_s*)buf);
- buf += USB_SIZEOF_EPDESC;
- usbclass_mkepbulkdesc(&g_epbulkindesc, bulkmxpacket, (struct usb_epdesc_s*)buf);
-#else
- memcpy(buf, &g_epbulkoutdesc, USB_SIZEOF_EPDESC);
- buf += USB_SIZEOF_EPDESC;
- memcpy(buf, &g_epbulkindesc, USB_SIZEOF_EPDESC);
+ /* The "canned" descriptors all have full speed endpoint maxpacket
+ * sizes. If high speed is selected, we will have to change the
+ * endpoint maxpacket size.
+ *
+ * Is there a alternative high speed maxpacket size in the table?
+ * If so, that is sufficient proof that the descriptor that we
+ * just copied is an endpoint descriptor and needs the fixup
+ */
+
+#ifdef CONFIG_USBDEV_DUALSPEED
+ if (highspeed && group->hsepsize != 0)
+ {
+ usbclass_mkepdesc(group->desc, group->hsepsize,
+ (FAR struct usb_epdesc_s*)dest);
+ }
+ else
#endif
+ /* Copy the "canned" descriptor with the full speed max packet
+ * size
+ */
+
+ {
+ memcpy(dest, group->desc, group->descsize);
+ }
+
+ /* Advance to the destination location for the next descriptor */
- /* Finally, fill in the total size of the configuration descriptor */
+ dest += group->descsize;
+ }
- cfgdesc->totallen[0] = LSBYTE(totallen);
- cfgdesc->totallen[1] = MSBYTE(totallen);
- return totallen;
+ return SIZEOF_CDCSER_CFGDESC;
}
/****************************************************************************
@@ -1024,6 +1056,25 @@ static void usbclass_resetconfig(FAR struct usbser_dev_s *priv)
}
/****************************************************************************
+ * Name: usbclass_epconfigure
+ *
+ * Description:
+ * Configure one endpoint.
+ *
+ ****************************************************************************/
+
+#ifdef CONFIG_USBDEV_DUALSPEED
+static int usbclass_epconfigure(FAR struct usbdev_ep_s *ep,
+ FAR const struct usb_epdesc_s *indesc,
+ uint16_t mxpacket, bool last)
+{
+ struct usb_epdesc_s epdesc;
+ usbclass_mkepdesc(indesc, mxpacket, &epdesc);
+ return EP_CONFIGURE(ep, &epdesc, last);
+}
+#endif
+
+/****************************************************************************
* Name: usbclass_setconfig
*
* Description:
@@ -1035,17 +1086,13 @@ static void usbclass_resetconfig(FAR struct usbser_dev_s *priv)
static int usbclass_setconfig(FAR struct usbser_dev_s *priv, uint8_t config)
{
FAR struct usbdev_req_s *req;
-#ifdef CONFIG_USBDEV_DUALSPEED
- struct usb_epdesc_s epdesc;
- uint16_t bulkmxpacket;
-#endif
int i;
int ret = 0;
#if CONFIG_DEBUG
if (priv == NULL)
{
- usbtrace(TRACE_CLSERROR(CDCSER_TRACEERR_INVALIDARG), 0);
+ usbtrace(TRACE_CLSERROR(USBSER_TRACEERR_INVALIDARG), 0);
return -EIO;
}
#endif
@@ -1054,7 +1101,7 @@ static int usbclass_setconfig(FAR struct usbser_dev_s *priv, uint8_t config)
{
/* Already configured -- Do nothing */
- usbtrace(TRACE_CLSERROR(CDCSER_TRACEERR_ALREADYCONFIGURED), 0);
+ usbtrace(TRACE_CLSERROR(USBSER_TRACEERR_ALREADYCONFIGURED), 0);
return 0;
}
@@ -1066,7 +1113,7 @@ static int usbclass_setconfig(FAR struct usbser_dev_s *priv, uint8_t config)
if (config == CDCSER_CONFIGIDNONE)
{
- usbtrace(TRACE_CLSERROR(CDCSER_TRACEERR_CONFIGNONE), 0);
+ usbtrace(TRACE_CLSERROR(USBSER_TRACEERR_CONFIGNONE), 0);
return 0;
}
@@ -1074,16 +1121,27 @@ static int usbclass_setconfig(FAR struct usbser_dev_s *priv, uint8_t config)
if (config != CDCSER_CONFIGID)
{
- usbtrace(TRACE_CLSERROR(CDCSER_TRACEERR_CONFIGIDBAD), 0);
+ usbtrace(TRACE_CLSERROR(USBSER_TRACEERR_CONFIGIDBAD), 0);
return -EINVAL;
}
/* Configure the IN interrupt endpoint */
- ret = EP_CONFIGURE(priv->epintin, &g_epintindesc, false);
+#ifdef CONFIG_USBDEV_DUALSPEED
+ if (priv->usbdev->speed == USB_SPEED_HIGH)
+ {
+ ret = usbclass_epconfigure(priv->epintin, &g_epintindesc,
+ CONFIG_CDCSER_EPINTIN_HSSIZE, false);
+ }
+ else
+#endif
+ {
+ ret = EP_CONFIGURE(priv->epintin, &g_epintindesc, false);
+ }
+
if (ret < 0)
{
- usbtrace(TRACE_CLSERROR(CDCSER_TRACEERR_EPINTINCONFIGFAIL), 0);
+ usbtrace(TRACE_CLSERROR(USBSER_TRACEERR_EPINTINCONFIGFAIL), 0);
goto errout;
}
priv->epintin->priv = priv;
@@ -1093,21 +1151,18 @@ static int usbclass_setconfig(FAR struct usbser_dev_s *priv, uint8_t config)
#ifdef CONFIG_USBDEV_DUALSPEED
if (priv->usbdev->speed == USB_SPEED_HIGH)
{
- bulkmxpacket = 512;
+ ret = usbclass_epconfigure(priv->epbulkin, &g_epbulkindesc,
+ CONFIG_CDCSER_EPBULKIN_HSSIZE, false);
}
else
+#endif
{
- bulkmxpacket = 64;
+ ret = EP_CONFIGURE(priv->epbulkin, &g_epbulkindesc, false);
}
- usbclass_mkepbulkdesc(&g_epbulkindesc, bulkmxpacket, &epdesc);
- ret = EP_CONFIGURE(priv->epbulkin, &epdesc, false);
-#else
- ret = EP_CONFIGURE(priv->epbulkin, &g_epbulkindesc, false);
-#endif
if (ret < 0)
{
- usbtrace(TRACE_CLSERROR(CDCSER_TRACEERR_EPBULKINCONFIGFAIL), 0);
+ usbtrace(TRACE_CLSERROR(USBSER_TRACEERR_EPBULKINCONFIGFAIL), 0);
goto errout;
}
@@ -1116,14 +1171,20 @@ static int usbclass_setconfig(FAR struct usbser_dev_s *priv, uint8_t config)
/* Configure the OUT bulk endpoint */
#ifdef CONFIG_USBDEV_DUALSPEED
- usbclass_mkepbulkdesc(&g_epbulkoutdesc, bulkmxpacket, &epdesc);
- ret = EP_CONFIGURE(priv->epbulkout, &epdesc, true);
-#else
- ret = EP_CONFIGURE(priv->epbulkout, &g_epbulkoutdesc, true);
+ if (priv->usbdev->speed == USB_SPEED_HIGH)
+ {
+ ret = usbclass_epconfigure(priv->epbulkout, &g_epbulkoutdesc,
+ CONFIG_CDCSER_EPBULKOUT_HSSIZE, true);
+ }
+ else
#endif
+ {
+ ret = EP_CONFIGURE(priv->epbulkout, &g_epbulkoutdesc, true);
+ }
+
if (ret < 0)
{
- usbtrace(TRACE_CLSERROR(CDCSER_TRACEERR_EPBULKOUTCONFIGFAIL), 0);
+ usbtrace(TRACE_CLSERROR(USBSER_TRACEERR_EPBULKOUTCONFIGFAIL), 0);
goto errout;
}
@@ -1139,7 +1200,7 @@ static int usbclass_setconfig(FAR struct usbser_dev_s *priv, uint8_t config)
ret = EP_SUBMIT(priv->epbulkout, req);
if (ret != OK)
{
- usbtrace(TRACE_CLSERROR(CDCSER_TRACEERR_RDSUBMIT), (uint16_t)-ret);
+ usbtrace(TRACE_CLSERROR(USBSER_TRACEERR_RDSUBMIT), (uint16_t)-ret);
goto errout;
}
priv->nrdq++;
@@ -1166,7 +1227,7 @@ static void usbclass_ep0incomplete(FAR struct usbdev_ep_s *ep,
{
if (req->result || req->xfrd != req->len)
{
- usbtrace(TRACE_CLSERROR(CDCSER_TRACEERR_REQRESULT), (uint16_t)-req->result);
+ usbtrace(TRACE_CLSERROR(USBSER_TRACEERR_REQRESULT), (uint16_t)-req->result);
}
}
@@ -1191,7 +1252,7 @@ static void usbclass_rdcomplete(FAR struct usbdev_ep_s *ep,
#ifdef CONFIG_DEBUG
if (!ep || !ep->priv || !req)
{
- usbtrace(TRACE_CLSERROR(CDCSER_TRACEERR_INVALIDARG), 0);
+ usbtrace(TRACE_CLSERROR(USBSER_TRACEERR_INVALIDARG), 0);
return;
}
#endif
@@ -1211,13 +1272,13 @@ static void usbclass_rdcomplete(FAR struct usbdev_ep_s *ep,
break;
case -ESHUTDOWN: /* Disconnection */
- usbtrace(TRACE_CLSERROR(CDCSER_TRACEERR_RDSHUTDOWN), 0);
+ usbtrace(TRACE_CLSERROR(USBSER_TRACEERR_RDSHUTDOWN), 0);
priv->nrdq--;
irqrestore(flags);
return;
default: /* Some other error occurred */
- usbtrace(TRACE_CLSERROR(CDCSER_TRACEERR_RDUNEXPECTED), (uint16_t)-req->result);
+ usbtrace(TRACE_CLSERROR(USBSER_TRACEERR_RDUNEXPECTED), (uint16_t)-req->result);
break;
};
@@ -1232,7 +1293,7 @@ static void usbclass_rdcomplete(FAR struct usbdev_ep_s *ep,
ret = EP_SUBMIT(ep, req);
if (ret != OK)
{
- usbtrace(TRACE_CLSERROR(CDCSER_TRACEERR_RDSUBMIT), (uint16_t)-req->result);
+ usbtrace(TRACE_CLSERROR(USBSER_TRACEERR_RDSUBMIT), (uint16_t)-req->result);
}
irqrestore(flags);
}
@@ -1258,7 +1319,7 @@ static void usbclass_wrcomplete(FAR struct usbdev_ep_s *ep,
#ifdef CONFIG_DEBUG
if (!ep || !ep->priv || !req || !req->priv)
{
- usbtrace(TRACE_CLSERROR(CDCSER_TRACEERR_INVALIDARG), 0);
+ usbtrace(TRACE_CLSERROR(USBSER_TRACEERR_INVALIDARG), 0);
return;
}
#endif
@@ -1287,11 +1348,11 @@ static void usbclass_wrcomplete(FAR struct usbdev_ep_s *ep,
break;
case -ESHUTDOWN: /* Disconnection */
- usbtrace(TRACE_CLSERROR(CDCSER_TRACEERR_WRSHUTDOWN), priv->nwrq);
+ usbtrace(TRACE_CLSERROR(USBSER_TRACEERR_WRSHUTDOWN), priv->nwrq);
break;
default: /* Some other error occurred */
- usbtrace(TRACE_CLSERROR(CDCSER_TRACEERR_WRUNEXPECTED), (uint16_t)-req->result);
+ usbtrace(TRACE_CLSERROR(USBSER_TRACEERR_WRUNEXPECTED), (uint16_t)-req->result);
break;
}
}
@@ -1329,7 +1390,7 @@ static int usbclass_bind(FAR struct usbdev_s *dev, FAR struct usbdevclass_driver
priv->ctrlreq = usbclass_allocreq(dev->ep0, CDCSER_MXDESCLEN);
if (priv->ctrlreq == NULL)
{
- usbtrace(TRACE_CLSERROR(CDCSER_TRACEERR_ALLOCCTRLREQ), 0);
+ usbtrace(TRACE_CLSERROR(USBSER_TRACEERR_ALLOCCTRLREQ), 0);
ret = -ENOMEM;
goto errout;
}
@@ -1347,7 +1408,7 @@ static int usbclass_bind(FAR struct usbdev_s *dev, FAR struct usbdevclass_driver
priv->epintin = DEV_ALLOCEP(dev, CDCSER_EPINTIN_ADDR, true, USB_EP_ATTR_XFER_INT);
if (!priv->epintin)
{
- usbtrace(TRACE_CLSERROR(CDCSER_TRACEERR_EPINTINALLOCFAIL), 0);
+ usbtrace(TRACE_CLSERROR(USBSER_TRACEERR_EPINTINALLOCFAIL), 0);
ret = -ENODEV;
goto errout;
}
@@ -1358,7 +1419,7 @@ static int usbclass_bind(FAR struct usbdev_s *dev, FAR struct usbdevclass_driver
priv->epbulkin = DEV_ALLOCEP(dev, CDCSER_EPINBULK_ADDR, true, USB_EP_ATTR_XFER_BULK);
if (!priv->epbulkin)
{
- usbtrace(TRACE_CLSERROR(CDCSER_TRACEERR_EPBULKINALLOCFAIL), 0);
+ usbtrace(TRACE_CLSERROR(USBSER_TRACEERR_EPBULKINALLOCFAIL), 0);
ret = -ENODEV;
goto errout;
}
@@ -1369,7 +1430,7 @@ static int usbclass_bind(FAR struct usbdev_s *dev, FAR struct usbdevclass_driver
priv->epbulkout = DEV_ALLOCEP(dev, CDCSER_EPOUTBULK_ADDR, false, USB_EP_ATTR_XFER_BULK);
if (!priv->epbulkout)
{
- usbtrace(TRACE_CLSERROR(CDCSER_TRACEERR_EPBULKOUTALLOCFAIL), 0);
+ usbtrace(TRACE_CLSERROR(USBSER_TRACEERR_EPBULKOUTALLOCFAIL), 0);
ret = -ENODEV;
goto errout;
}
@@ -1389,7 +1450,7 @@ static int usbclass_bind(FAR struct usbdev_s *dev, FAR struct usbdevclass_driver
reqcontainer->req = usbclass_allocreq(priv->epbulkout, reqlen);
if (reqcontainer->req == NULL)
{
- usbtrace(TRACE_CLSERROR(CDCSER_TRACEERR_RDALLOCREQ), -ENOMEM);
+ usbtrace(TRACE_CLSERROR(USBSER_TRACEERR_RDALLOCREQ), -ENOMEM);
ret = -ENOMEM;
goto errout;
}
@@ -1411,7 +1472,7 @@ static int usbclass_bind(FAR struct usbdev_s *dev, FAR struct usbdevclass_driver
reqcontainer->req = usbclass_allocreq(priv->epbulkin, reqlen);
if (reqcontainer->req == NULL)
{
- usbtrace(TRACE_CLSERROR(CDCSER_TRACEERR_WRALLOCREQ), -ENOMEM);
+ usbtrace(TRACE_CLSERROR(USBSER_TRACEERR_WRALLOCREQ), -ENOMEM);
ret = -ENOMEM;
goto errout;
}
@@ -1460,7 +1521,7 @@ static void usbclass_unbind(FAR struct usbdev_s *dev)
#ifdef CONFIG_DEBUG
if (!dev || !dev->ep0)
{
- usbtrace(TRACE_CLSERROR(CDCSER_TRACEERR_INVALIDARG), 0);
+ usbtrace(TRACE_CLSERROR(USBSER_TRACEERR_INVALIDARG), 0);
return;
}
#endif
@@ -1472,7 +1533,7 @@ static void usbclass_unbind(FAR struct usbdev_s *dev)
#ifdef CONFIG_DEBUG
if (!priv)
{
- usbtrace(TRACE_CLSERROR(CDCSER_TRACEERR_EP0NOTBOUND), 0);
+ usbtrace(TRACE_CLSERROR(USBSER_TRACEERR_EP0NOTBOUND), 0);
return;
}
#endif
@@ -1584,7 +1645,7 @@ static int usbclass_setup(FAR struct usbdev_s *dev, const struct usb_ctrlreq_s *
#ifdef CONFIG_DEBUG
if (!dev || !dev->ep0 || !ctrl)
{
- usbtrace(TRACE_CLSERROR(CDCSER_TRACEERR_INVALIDARG), 0);
+ usbtrace(TRACE_CLSERROR(USBSER_TRACEERR_INVALIDARG), 0);
return -EIO;
}
#endif
@@ -1597,7 +1658,7 @@ static int usbclass_setup(FAR struct usbdev_s *dev, const struct usb_ctrlreq_s *
#ifdef CONFIG_DEBUG
if (!priv || !priv->ctrlreq)
{
- usbtrace(TRACE_CLSERROR(CDCSER_TRACEERR_EP0NOTBOUND), 0);
+ usbtrace(TRACE_CLSERROR(USBSER_TRACEERR_EP0NOTBOUND), 0);
return -ENODEV;
}
#endif
@@ -1668,7 +1729,7 @@ static int usbclass_setup(FAR struct usbdev_s *dev, const struct usb_ctrlreq_s *
default:
{
- usbtrace(TRACE_CLSERROR(CDCSER_TRACEERR_GETUNKNOWNDESC), value);
+ usbtrace(TRACE_CLSERROR(USBSER_TRACEERR_GETUNKNOWNDESC), value);
}
break;
}
@@ -1729,78 +1790,109 @@ static int usbclass_setup(FAR struct usbdev_s *dev, const struct usb_ctrlreq_s *
break;
default:
- usbtrace(TRACE_CLSERROR(CDCSER_TRACEERR_UNSUPPORTEDSTDREQ), ctrl->req);
+ usbtrace(TRACE_CLSERROR(USBSER_TRACEERR_UNSUPPORTEDSTDREQ), ctrl->req);
break;
}
}
break;
- /***********************************************************************
- * PL2303 Vendor-Specific Requests
- ***********************************************************************/
+ /************************************************************************
+ * CDC ACM-Specific Requests
+ ************************************************************************/
- case CDC_CONTROL_TYPE:
+ /* ACM_GET_LINE_CODING requests current DTE rate, stop-bits, parity, and
+ * number-of-character bits. (Optional)
+ */
+
+ case ACM_GET_LINE_CODING:
{
- if ((ctrl->type & USB_REQ_RECIPIENT_MASK) == USB_REQ_RECIPIENT_INTERFACE)
+ if (ctrl->type == (USB_DIR_IN|USB_REQ_TYPE_CLASS|USB_REQ_RECIPIENT_INTERFACE))
{
- switch (ctrl->req)
- {
- case CDC_SETLINEREQUEST:
- {
- memcpy(priv->linest, ctrlreq->buf, min(len, 7));
- ret = 0;
- }
- break;
+ /* Return the current line status from the private data structure */
+
+ memcpy(ctrlreq->buf, &priv->linecoding, SIZEOF_CDC_LINECODING);
+ ret = SIZEOF_CDC_LINECODING;
+ }
+ else
+ {
+ usbtrace(TRACE_CLSERROR(USBSER_TRACEERR_UNSUPPORTEDCLASSREQ), ctrl->type);
+ }
+ }
+ break;
+ /* ACM_SET_LINE_CODING configures DTE rate, stop-bits, parity, and
+ * number-of-character bits. (Optional)
+ */
- case CDC_GETLINEREQUEST:
- {
- memcpy(ctrlreq->buf, priv->linest, 7);
- ret = 7;
- }
- break;
+ case ACM_SET_LINE_CODING:
+ {
+ if (ctrl->type == (USB_DIR_OUT|USB_REQ_TYPE_CLASS|USB_REQ_RECIPIENT_INTERFACE))
+ {
+ /* Save the new line status in the private data structure */
- case CDC_SETCONTROLREQUEST:
- case CDC_BREAKREQUEST:
- {
- ret = 0;
- }
- break;
+ memcpy(&priv->linecoding, ctrlreq->buf, min(len, 7));
+ ret = 0;
- default:
- usbtrace(TRACE_CLSERROR(CDCSER_TRACEERR_UNSUPPORTEDCTRLREQ), ctrl->type);
- break;
- }
+ /* If there is a registered callback to receive line status info, then
+ * callout now.
+ */
+#warning "Missing logic"
+ }
+ else
+ {
+ usbtrace(TRACE_CLSERROR(USBSER_TRACEERR_UNSUPPORTEDCLASSREQ), ctrl->type);
}
}
break;
- case CDC_RWREQUEST_TYPE:
+ /* ACM_SET_CTRL_LINE_STATE: RS-232 signal used to tell the DCE device the
+ * DTE device is now present. (Optional)
+ */
+
+ case ACM_SET_CTRL_LINE_STATE:
{
- if ((ctrl->type & USB_REQ_RECIPIENT_MASK) == USB_REQ_RECIPIENT_DEVICE)
+ if (ctrl->type == (USB_DIR_OUT|USB_REQ_TYPE_CLASS|USB_REQ_RECIPIENT_INTERFACE))
{
- if (ctrl->req == CDC_RWREQUEST)
- {
- if ((ctrl->type & USB_DIR_IN) != 0)
- {
- *(uint32_t*)ctrlreq->buf = 0xdeadbeef;
- ret = 4;
- }
- else
- {
- ret = 0;
- }
- }
- else
- {
- usbtrace(TRACE_CLSERROR(CDCSER_TRACEERR_UNSUPPORTEDRWREQ), ctrl->type);
- }
+ /* Save the control line state in the private data structure. Only bits
+ * 0 and 1 have meaning.
+ */
+
+ priv->ctrlline = value & 3;
+ ret = 0;
+
+ /* If there is a registered callback to receive control line status info,
+ * then callout now.
+ */
+#warning "Missing logic"
+ }
+ else
+ {
+ usbtrace(TRACE_CLSERROR(USBSER_TRACEERR_UNSUPPORTEDCLASSREQ), ctrl->type);
+ }
+ }
+ break;
+
+ /* Sends special carrier*/
+
+ case ACM_SEND_BREAK:
+ {
+ if (ctrl->type == (USB_DIR_OUT|USB_REQ_TYPE_CLASS|USB_REQ_RECIPIENT_INTERFACE))
+ {
+ /* If there is a registered callback to handle the SendBreak request,
+ * then callout now.
+ */
+#warning "Missing logic"
+ ret = 0;
+ }
+ else
+ {
+ usbtrace(TRACE_CLSERROR(USBSER_TRACEERR_UNSUPPORTEDCLASSREQ), ctrl->type);
}
}
break;
default:
- usbtrace(TRACE_CLSERROR(CDCSER_TRACEERR_UNSUPPORTEDTYPE), ctrl->type);
+ usbtrace(TRACE_CLSERROR(USBSER_TRACEERR_UNSUPPORTEDTYPE), ctrl->type);
break;
}
@@ -1815,7 +1907,7 @@ static int usbclass_setup(FAR struct usbdev_s *dev, const struct usb_ctrlreq_s *
ret = EP_SUBMIT(dev->ep0, ctrlreq);
if (ret < 0)
{
- usbtrace(TRACE_CLSERROR(CDCSER_TRACEERR_EPRESPQ), (uint16_t)-ret);
+ usbtrace(TRACE_CLSERROR(USBSER_TRACEERR_EPRESPQ), (uint16_t)-ret);
ctrlreq->result = OK;
usbclass_ep0incomplete(dev->ep0, ctrlreq);
}
@@ -1844,7 +1936,7 @@ static void usbclass_disconnect(FAR struct usbdev_s *dev)
#ifdef CONFIG_DEBUG
if (!dev || !dev->ep0)
{
- usbtrace(TRACE_CLSERROR(CDCSER_TRACEERR_INVALIDARG), 0);
+ usbtrace(TRACE_CLSERROR(USBSER_TRACEERR_INVALIDARG), 0);
return;
}
#endif
@@ -1856,7 +1948,7 @@ static void usbclass_disconnect(FAR struct usbdev_s *dev)
#ifdef CONFIG_DEBUG
if (!priv)
{
- usbtrace(TRACE_CLSERROR(CDCSER_TRACEERR_EP0NOTBOUND), 0);
+ usbtrace(TRACE_CLSERROR(USBSER_TRACEERR_EP0NOTBOUND), 0);
return;
}
#endif
@@ -1902,7 +1994,7 @@ static int usbser_setup(FAR struct uart_dev_s *dev)
#if CONFIG_DEBUG
if (!dev || !dev->priv)
{
- usbtrace(TRACE_CLSERROR(CDCSER_TRACEERR_INVALIDARG), 0);
+ usbtrace(TRACE_CLSERROR(USBSER_TRACEERR_INVALIDARG), 0);
return -EIO;
}
#endif
@@ -1915,7 +2007,7 @@ static int usbser_setup(FAR struct uart_dev_s *dev)
if (priv->config == CDCSER_CONFIGIDNONE)
{
- usbtrace(TRACE_CLSERROR(CDCSER_TRACEERR_SETUPNOTCONNECTED), 0);
+ usbtrace(TRACE_CLSERROR(USBSER_TRACEERR_SETUPNOTCONNECTED), 0);
return -ENOTCONN;
}
@@ -1943,7 +2035,7 @@ static void usbser_shutdown(FAR struct uart_dev_s *dev)
#if CONFIG_DEBUG
if (!dev || !dev->priv)
{
- usbtrace(TRACE_CLSERROR(CDCSER_TRACEERR_INVALIDARG), 0);
+ usbtrace(TRACE_CLSERROR(USBSER_TRACEERR_INVALIDARG), 0);
}
#endif
}
@@ -2005,7 +2097,7 @@ static void usbser_rxint(FAR struct uart_dev_s *dev, bool enable)
#if CONFIG_DEBUG
if (!dev || !dev->priv)
{
- usbtrace(TRACE_CLSERROR(CDCSER_TRACEERR_INVALIDARG), 0);
+ usbtrace(TRACE_CLSERROR(USBSER_TRACEERR_INVALIDARG), 0);
return;
}
#endif
@@ -2096,7 +2188,7 @@ static void usbser_txint(FAR struct uart_dev_s *dev, bool enable)
#if CONFIG_DEBUG
if (!dev || !dev->priv)
{
- usbtrace(TRACE_CLSERROR(CDCSER_TRACEERR_INVALIDARG), 0);
+ usbtrace(TRACE_CLSERROR(USBSER_TRACEERR_INVALIDARG), 0);
return;
}
#endif
@@ -2139,7 +2231,7 @@ static bool usbser_txempty(FAR struct uart_dev_s *dev)
#if CONFIG_DEBUG
if (!priv)
{
- usbtrace(TRACE_CLSERROR(CDCSER_TRACEERR_INVALIDARG), 0);
+ usbtrace(TRACE_CLSERROR(USBSER_TRACEERR_INVALIDARG), 0);
return true;
}
#endif
@@ -2176,7 +2268,7 @@ int usbdev_serialinitialize(int minor)
alloc = (FAR struct usbser_alloc_s*)kmalloc(sizeof(struct usbser_alloc_s));
if (!alloc)
{
- usbtrace(TRACE_CLSERROR(CDCSER_TRACEERR_ALLOCDEVSTRUCT), 0);
+ usbtrace(TRACE_CLSERROR(USBSER_TRACEERR_ALLOCDEVSTRUCT), 0);
return -ENOMEM;
}
@@ -2192,13 +2284,13 @@ int usbdev_serialinitialize(int minor)
/* Fake line status */
- priv->linest[0] = (115200) & 0xff; /* Baud=115200 */
- priv->linest[1] = (115200 >> 8) & 0xff;
- priv->linest[2] = (115200 >> 16) & 0xff;
- priv->linest[3] = (115200 >> 24) & 0xff;
- priv->linest[4] = 0; /* One stop bit */
- priv->linest[5] = 0; /* No parity */
- priv->linest[6] = 8; /*8 data bits */
+ priv->linecoding.baud[0] = (115200) & 0xff; /* Baud=115200 */
+ priv->linecoding.baud[1] = (115200 >> 8) & 0xff;
+ priv->linecoding.baud[2] = (115200 >> 16) & 0xff;
+ priv->linecoding.baud[3] = (115200 >> 24) & 0xff;
+ priv->linecoding.stop = CDC_CHFMT_STOP1; /* One stop bit */
+ priv->linecoding.parity = CDC_PARITY_NONE; /* No parity */
+ priv->linecoding.nbits = 8; /* 8 data bits */
/* Initialize the serial driver sub-structure */
@@ -2224,7 +2316,7 @@ int usbdev_serialinitialize(int minor)
ret = usbdev_register(&drvr->drvr);
if (ret)
{
- usbtrace(TRACE_CLSERROR(CDCSER_TRACEERR_DEVREGISTER), (uint16_t)-ret);
+ usbtrace(TRACE_CLSERROR(USBSER_TRACEERR_DEVREGISTER), (uint16_t)-ret);
goto errout_with_alloc;
}
@@ -2235,7 +2327,7 @@ int usbdev_serialinitialize(int minor)
ret = uart_register("/dev/console", &pri->serdev);
if (ret < 0)
{
- usbtrace(TRACE_CLSERROR(CDCSER_TRACEERR_CONSOLEREGISTER), (uint16_t)-ret);
+ usbtrace(TRACE_CLSERROR(USBSER_TRACEERR_CONSOLEREGISTER), (uint16_t)-ret);
goto errout_with_class;
}
#endif
@@ -2246,7 +2338,7 @@ int usbdev_serialinitialize(int minor)
ret = uart_register(devname, &priv->serdev);
if (ret)
{
- usbtrace(TRACE_CLSERROR(CDCSER_TRACEERR_UARTREGISTER), (uint16_t)-ret);
+ usbtrace(TRACE_CLSERROR(USBSER_TRACEERR_UARTREGISTER), (uint16_t)-ret);
goto errout_with_class;
}
return OK;
diff --git a/nuttx/drivers/usbdev/usbdev_serial.c b/nuttx/drivers/usbdev/usbdev_serial.c
index 68c39200f..bef02ed73 100644
--- a/nuttx/drivers/usbdev/usbdev_serial.c
+++ b/nuttx/drivers/usbdev/usbdev_serial.c
@@ -78,12 +78,6 @@
# define CONFIG_USBSER_NRDREQS 4
#endif
-/* Write buffer size */
-
-#ifndef CONFIG_USBSER_WRBUFFERSIZE
-# define CONFIG_USBSER_WRBUFFERSIZE 1024
-#endif
-
/* Logical endpoint numbers / max packet sizes */
#ifndef CONFIG_USBSER_EPINTIN
@@ -1731,7 +1725,7 @@ static int usbclass_setup(FAR struct usbdev_s *dev, const struct usb_ctrlreq_s *
break;
default:
- usbtrace(TRACE_CLSERROR(USBSER_TRACEERR_UNSUPPORTEDCTRLREQ), ctrl->type);
+ usbtrace(TRACE_CLSERROR(USBSER_TRACEERR_UNSUPPORTEDCLASSREQ), ctrl->type);
break;
}
}
@@ -1756,7 +1750,7 @@ static int usbclass_setup(FAR struct usbdev_s *dev, const struct usb_ctrlreq_s *
}
else
{
- usbtrace(TRACE_CLSERROR(USBSER_TRACEERR_UNSUPPORTEDRWREQ), ctrl->type);
+ usbtrace(TRACE_CLSERROR(USBSER_TRACEERR_UNSUPPORTEDCLASSREQ), ctrl->type);
}
}
}