summaryrefslogtreecommitdiff
path: root/nuttx/drivers/usbdev
diff options
context:
space:
mode:
authorpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2012-04-12 16:30:48 +0000
committerpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2012-04-12 16:30:48 +0000
commit2619c717f868fc9cb7af456d3bb6dad1a07aa69d (patch)
tree29911295627033d1ea30476d26b87286cf10f111 /nuttx/drivers/usbdev
parent5abae0f25e1093b498415562d1e289305cde6750 (diff)
downloadpx4-nuttx-2619c717f868fc9cb7af456d3bb6dad1a07aa69d.tar.gz
px4-nuttx-2619c717f868fc9cb7af456d3bb6dad1a07aa69d.tar.bz2
px4-nuttx-2619c717f868fc9cb7af456d3bb6dad1a07aa69d.zip
Extend the USB device/class interface: Add parameters to pass the EP0 OUT data that should accompany the OUT SETUP request
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@4595 42af7a65-404d-4744-a932-0658087f49c3
Diffstat (limited to 'nuttx/drivers/usbdev')
-rw-r--r--nuttx/drivers/usbdev/cdcacm.c23
-rw-r--r--nuttx/drivers/usbdev/composite.c22
-rw-r--r--nuttx/drivers/usbdev/pl2303.c6
-rw-r--r--nuttx/drivers/usbdev/usbmsc.c6
4 files changed, 36 insertions, 21 deletions
diff --git a/nuttx/drivers/usbdev/cdcacm.c b/nuttx/drivers/usbdev/cdcacm.c
index b8b7d0653..2065b5433 100644
--- a/nuttx/drivers/usbdev/cdcacm.c
+++ b/nuttx/drivers/usbdev/cdcacm.c
@@ -184,7 +184,8 @@ static void cdcacm_unbind(FAR struct usbdevclass_driver_s *driver,
FAR struct usbdev_s *dev);
static int cdcacm_setup(FAR struct usbdevclass_driver_s *driver,
FAR struct usbdev_s *dev,
- FAR const struct usb_ctrlreq_s *ctrl);
+ FAR const struct usb_ctrlreq_s *ctrl, FAR uint8_t *dataout,
+ size_t outlen);
static void cdcacm_disconnect(FAR struct usbdevclass_driver_s *driver,
FAR struct usbdev_s *dev);
@@ -1168,7 +1169,8 @@ static void cdcacm_unbind(FAR struct usbdevclass_driver_s *driver,
static int cdcacm_setup(FAR struct usbdevclass_driver_s *driver,
FAR struct usbdev_s *dev,
- FAR const struct usb_ctrlreq_s *ctrl)
+ FAR const struct usb_ctrlreq_s *ctrl,
+ FAR uint8_t *dataout, size_t outlen)
{
FAR struct cdcacm_dev_s *priv;
FAR struct usbdev_req_s *ctrlreq;
@@ -1398,14 +1400,19 @@ static int cdcacm_setup(FAR struct usbdevclass_driver_s *driver,
case ACM_SET_LINE_CODING:
{
if (ctrl->type == (USB_DIR_OUT|USB_REQ_TYPE_CLASS|USB_REQ_RECIPIENT_INTERFACE) &&
- len == SIZEOF_CDC_LINECODING && index == CDCACM_NOTIFID)
+ len == SIZEOF_CDC_LINECODING && /* dataout && len == outlen && */
+ index == CDCACM_NOTIFID)
{
- /* Save the new line coding in the private data structure */
+ /* Save the new line coding in the private data structure. NOTE:
+ * that this is conditional now because not all device controller
+ * drivers supported provisioni of EP0 OUT data with the setup
+ * command.
+ */
-#warning "There is no mechanism now for the class driver to receive EP0 SETUP OUT data"
-#if 0
- memcpy(&priv->linecoding, ctrlreq->buf, MIN(len, 7));
-#endif
+ if (dataout && len <= SIZEOF_CDC_LINECODING) /* REVISIT */
+ {
+ memcpy(&priv->linecoding, dataout, SIZEOF_CDC_LINECODING);
+ }
ret = 0;
/* If there is a registered callback to receive line status info, then
diff --git a/nuttx/drivers/usbdev/composite.c b/nuttx/drivers/usbdev/composite.c
index aae4f4581..4cad8af86 100644
--- a/nuttx/drivers/usbdev/composite.c
+++ b/nuttx/drivers/usbdev/composite.c
@@ -99,7 +99,8 @@ static void composite_ep0incomplete(FAR struct usbdev_ep_s *ep,
FAR struct usbdev_req_s *req);
static int composite_classsetup(FAR struct composite_dev_s *priv,
FAR struct usbdev_s *dev,
- FAR const struct usb_ctrlreq_s *ctrl);
+ FAR const struct usb_ctrlreq_s *ctrl, FAR uint8_t *dataout,
+ size_t outlen);
static struct usbdev_req_s *composite_allocreq(FAR struct usbdev_ep_s *ep,
uint16_t len);
static void composite_freereq(FAR struct usbdev_ep_s *ep,
@@ -113,7 +114,8 @@ static void composite_unbind(FAR struct usbdevclass_driver_s *driver,
FAR struct usbdev_s *dev);
static int composite_setup(FAR struct usbdevclass_driver_s *driver,
FAR struct usbdev_s *dev,
- FAR const struct usb_ctrlreq_s *ctrl);
+ FAR const struct usb_ctrlreq_s *ctrl, FAR uint8_t *dataout,
+ size_t outlen);
static void composite_disconnect(FAR struct usbdevclass_driver_s *driver,
FAR struct usbdev_s *dev);
static void composite_suspend(FAR struct usbdevclass_driver_s *driver,
@@ -180,7 +182,8 @@ static void composite_ep0incomplete(FAR struct usbdev_ep_s *ep,
static int composite_classsetup(FAR struct composite_dev_s *priv,
FAR struct usbdev_s *dev,
- FAR const struct usb_ctrlreq_s *ctrl)
+ FAR const struct usb_ctrlreq_s *ctrl,
+ FAR uint8_t *dataout, size_t outlen)
{
uint16_t index;
uint8_t interface;
@@ -191,11 +194,11 @@ static int composite_classsetup(FAR struct composite_dev_s *priv,
if (interface >= DEV1_FIRSTINTERFACE && interface < (DEV1_FIRSTINTERFACE + DEV1_NINTERFACES))
{
- ret = CLASS_SETUP(priv->dev1, dev, ctrl);
+ ret = CLASS_SETUP(priv->dev1, dev, ctrl, dataout, outlen);
}
else if (interface >= DEV2_FIRSTINTERFACE && interface < (DEV2_FIRSTINTERFACE + DEV2_NINTERFACES))
{
- ret = CLASS_SETUP(priv->dev2, dev, ctrl);
+ ret = CLASS_SETUP(priv->dev2, dev, ctrl, dataout, outlen);
}
return ret;
@@ -392,7 +395,8 @@ static void composite_unbind(FAR struct usbdevclass_driver_s *driver,
static int composite_setup(FAR struct usbdevclass_driver_s *driver,
FAR struct usbdev_s *dev,
- FAR const struct usb_ctrlreq_s *ctrl)
+ FAR const struct usb_ctrlreq_s *ctrl,
+ FAR uint8_t *dataout, size_t outlen)
{
FAR struct composite_dev_s *priv;
FAR struct usbdev_req_s *ctrlreq;
@@ -549,7 +553,7 @@ static int composite_setup(FAR struct usbdevclass_driver_s *driver,
if (ctrl->type == USB_REQ_RECIPIENT_INTERFACE &&
priv->config == COMPOSITE_CONFIGID)
{
- ret = composite_classsetup(priv, dev, ctrl);
+ ret = composite_classsetup(priv, dev, ctrl, dataout, outlen);
dispatched = true;
}
}
@@ -560,7 +564,7 @@ static int composite_setup(FAR struct usbdevclass_driver_s *driver,
if (ctrl->type == (USB_DIR_IN|USB_REQ_RECIPIENT_INTERFACE) &&
priv->config == COMPOSITE_CONFIGIDNONE)
{
- ret = composite_classsetup(priv, dev, ctrl);
+ ret = composite_classsetup(priv, dev, ctrl, dataout, outlen);
dispatched = true;
}
}
@@ -586,7 +590,7 @@ static int composite_setup(FAR struct usbdevclass_driver_s *driver,
recipient = ctrl->type & USB_REQ_RECIPIENT_MASK;
if (recipient == USB_REQ_RECIPIENT_INTERFACE || recipient == USB_REQ_RECIPIENT_ENDPOINT)
{
- ret = composite_classsetup(priv, dev, ctrl);
+ ret = composite_classsetup(priv, dev, ctrl, dataout, outlen);
dispatched = true;
}
}
diff --git a/nuttx/drivers/usbdev/pl2303.c b/nuttx/drivers/usbdev/pl2303.c
index 48db77c8a..a1ba667f5 100644
--- a/nuttx/drivers/usbdev/pl2303.c
+++ b/nuttx/drivers/usbdev/pl2303.c
@@ -339,7 +339,8 @@ static void usbclass_unbind(FAR struct usbdevclass_driver_s *driver,
FAR struct usbdev_s *dev);
static int usbclass_setup(FAR struct usbdevclass_driver_s *driver,
FAR struct usbdev_s *dev,
- FAR const struct usb_ctrlreq_s *ctrl);
+ FAR const struct usb_ctrlreq_s *ctrl, FAR uint8_t *dataout,
+ size_t outlen);
static void usbclass_disconnect(FAR struct usbdevclass_driver_s *driver,
FAR struct usbdev_s *dev);
@@ -1543,7 +1544,8 @@ static void usbclass_unbind(FAR struct usbdevclass_driver_s *driver,
static int usbclass_setup(FAR struct usbdevclass_driver_s *driver,
FAR struct usbdev_s *dev,
- FAR const struct usb_ctrlreq_s *ctrl)
+ FAR const struct usb_ctrlreq_s *ctrl,
+ FAR uint8_t *dataout, size_t outlen)
{
FAR struct pl2303_dev_s *priv;
FAR struct usbdev_req_s *ctrlreq;
diff --git a/nuttx/drivers/usbdev/usbmsc.c b/nuttx/drivers/usbdev/usbmsc.c
index 3c17bfd66..68b61814a 100644
--- a/nuttx/drivers/usbdev/usbmsc.c
+++ b/nuttx/drivers/usbdev/usbmsc.c
@@ -132,7 +132,8 @@ static void usbmsc_unbind(FAR struct usbdevclass_driver_s *driver,
FAR struct usbdev_s *dev);
static int usbmsc_setup(FAR struct usbdevclass_driver_s *driver,
FAR struct usbdev_s *dev,
- FAR const struct usb_ctrlreq_s *ctrl);
+ FAR const struct usb_ctrlreq_s *ctrl, FAR uint8_t *dataout,
+ size_t outlen);
static void usbmsc_disconnect(FAR struct usbdevclass_driver_s *driver,
FAR struct usbdev_s *dev);
@@ -501,7 +502,8 @@ static void usbmsc_unbind(FAR struct usbdevclass_driver_s *driver,
static int usbmsc_setup(FAR struct usbdevclass_driver_s *driver,
FAR struct usbdev_s *dev,
- FAR const struct usb_ctrlreq_s *ctrl)
+ FAR const struct usb_ctrlreq_s *ctrl,
+ FAR uint8_t *dataout, size_t outlen)
{
FAR struct usbmsc_dev_s *priv;
FAR struct usbdev_req_s *ctrlreq;