summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--nuttx/Documentation/NuttX.html4
-rw-r--r--nuttx/Documentation/NuttxPortingGuide.html42
-rw-r--r--nuttx/configs/README.txt23
-rw-r--r--nuttx/drivers/usbdev/cdcacm.c1
-rw-r--r--nuttx/drivers/usbdev/composite.c72
-rw-r--r--nuttx/drivers/usbdev/composite.h28
-rw-r--r--nuttx/drivers/usbdev/usbmsc.c1
-rw-r--r--nuttx/include/nuttx/usb/cdcacm.h22
-rw-r--r--nuttx/include/nuttx/usb/composite.h186
-rw-r--r--nuttx/include/nuttx/usb/pl2303.h91
-rw-r--r--nuttx/include/nuttx/usb/usbdev.h157
-rw-r--r--nuttx/include/nuttx/usb/usbhost.h8
-rw-r--r--nuttx/include/nuttx/usb/usbmsc.h257
13 files changed, 702 insertions, 190 deletions
diff --git a/nuttx/Documentation/NuttX.html b/nuttx/Documentation/NuttX.html
index 86ee51a75..bf0647b25 100644
--- a/nuttx/Documentation/NuttX.html
+++ b/nuttx/Documentation/NuttX.html
@@ -8,7 +8,7 @@
<tr align="center" bgcolor="#e4e4e4">
<td>
<h1><big><font color="#3c34ec"><i>NuttX RTOS</i></font></big></h1>
- <p>Last Updated: January 15, 2012</p>
+ <p>Last Updated: January 16, 2012</p>
</td>
</tr>
</table>
@@ -644,7 +644,7 @@
<td><br></td>
<td>
<p>
- <li>Device-dependent USB class drivers available for USB serial and for USB mass storage.</li>
+ <li>Device-dependent USB class drivers available for USB serial (CDC/ACM and a PL2303 emulation), for USB mass storage, and for a composite CDC/ACM and mass storage device.</li>
</p>
</tr>
<tr>
diff --git a/nuttx/Documentation/NuttxPortingGuide.html b/nuttx/Documentation/NuttxPortingGuide.html
index 676e6a2e8..941599b1a 100644
--- a/nuttx/Documentation/NuttxPortingGuide.html
+++ b/nuttx/Documentation/NuttxPortingGuide.html
@@ -5026,6 +5026,48 @@ build
</li>
</ul>
+<h3>USB Composite Device Configuration</h3>
+<ul>
+ <li>
+ <code>CONFIG_USBDEV_COMPOSITE</code>:
+ Enables USB composite device support
+ </li>
+ <li>
+ <code>CONFIG_CDCACM_COMPOSITE</code>:
+ Configure the CDC serial driver as part of a composite driver
+ (only if CONFIG_USBDEV_COMPOSITE is also defined)
+ </li>
+ <li>
+ <code>CONFIG_COMPOSITE_COMPOSITE</code>:
+ Configure the mass storage driver as part of a composite driver
+ (only if CONFIG_USBDEV_COMPOSITE is also defined)
+ </li>
+ <li>
+ <code>CONFIG_COMPOSITE_EP0MAXPACKET</code>:
+ Max packet size for endpoint 0
+ </li>
+ <li>
+ <code>CONFIG_COMPOSITE_VENDORID</code> and <code>CONFIG_COMPOSITE_VENDORSTR</code>:
+ The vendor ID code/string
+ </li>
+ <li>
+ <code>CONFIG_COMPOSITE_PRODUCTID</code> and <code>CONFIG_COMPOSITE_PRODUCTSTR</code>:
+ The product ID code/string
+ </li>
+ <li>
+ <code>CONFIG_COMPOSITE_SERIALSTR</code>:
+ Device serial number string
+ </li>
+ <li>
+ <code>CONFIG_COMPOSITE_CONFIGSTR</code>:
+ Configuration string
+ </li>
+ <li>
+ <code>CONFIG_COMPOSITE_VERSIONNO</code>:
+ Interface version number.
+ </li>
+</ul>
+
<h2>USB Host-Side Support</h2>
<h3>USB Host Controller Driver</h3>
<ul>
diff --git a/nuttx/configs/README.txt b/nuttx/configs/README.txt
index 12db2e5ef..76790e169 100644
--- a/nuttx/configs/README.txt
+++ b/nuttx/configs/README.txt
@@ -1075,6 +1075,29 @@ defconfig -- This is a configuration file similar to the Linux
CONFIG_USBMSC_REMOVABLE
Select if the media is removable
+ USB Composite Device Configuration
+
+ CONFIG_USBDEV_COMPOSITE
+ Enables USB composite device support
+ CONFIG_CDCACM_COMPOSITE
+ Configure the CDC serial driver as part of a composite driver
+ (only if CONFIG_USBDEV_COMPOSITE is also defined)
+ CONFIG_COMPOSITE_COMPOSITE
+ Configure the mass storage driver as part of a composite driver
+ (only if CONFIG_USBDEV_COMPOSITE is also defined)
+ CONFIG_COMPOSITE_EP0MAXPACKET
+ Max packet size for endpoint 0
+ CONFIG_COMPOSITE_VENDORID and CONFIG_COMPOSITE_VENDORSTR
+ The vendor ID code/string
+ CONFIG_COMPOSITE_PRODUCTID and CONFIG_COMPOSITE_PRODUCTSTR
+ The product ID code/string
+ CONFIG_COMPOSITE_SERIALSTR
+ Device serial number string
+ CONFIG_COMPOSITE_CONFIGSTR
+ Configuration string
+ CONFIG_COMPOSITE_VERSIONNO
+ Interface version number.
+
Graphics related configuration settings
CONFIG_NX
diff --git a/nuttx/drivers/usbdev/cdcacm.c b/nuttx/drivers/usbdev/cdcacm.c
index 4023d2f2d..530572408 100644
--- a/nuttx/drivers/usbdev/cdcacm.c
+++ b/nuttx/drivers/usbdev/cdcacm.c
@@ -64,6 +64,7 @@
#include "cdcacm.h"
#ifdef CONFIG_USBMSC_COMPOSITE
+# include <nuttx/composite.h>
# include "composite.h"
#endif
diff --git a/nuttx/drivers/usbdev/composite.c b/nuttx/drivers/usbdev/composite.c
index c689f1b66..69313f821 100644
--- a/nuttx/drivers/usbdev/composite.c
+++ b/nuttx/drivers/usbdev/composite.c
@@ -743,18 +743,25 @@ static void composite_resume(FAR struct usbdevclass_driver_s *driver,
* Name: composite_initialize
*
* Description:
- * Register USB composite port (and USB composite console if so configured).
+ * Register USB composite device as configured. This function will call
+ * board-specific implementations in order to obtain the class objects for
+ * each of the members of the composite (see board_mscclassobject(),
+ * board_cdcclassobjec(), ...)
*
* Input Parameter:
- * Device minor number. E.g., minor 0 would correspond to /dev/ttyUSB0.
+ * None
*
* Returned Value:
- * Zero (OK) means that the driver was successfully registered. On any
- * failure, a negated errno value is retured.
+ * A non-NULL "handle" is returned on success. This handle may be used
+ * later with composite_uninitialize() in order to removed the composite
+ * device. This handle is the (untyped) internal representation of the
+ * the class driver instance.
+ *
+ * NULL is returned on any failure.
*
****************************************************************************/
-int composite_initialize(int minor)
+FAR void *composite_initialize(void)
{
FAR struct composite_alloc_s *alloc;
FAR struct composite_dev_s *priv;
@@ -767,7 +774,7 @@ int composite_initialize(int minor)
if (!alloc)
{
usbtrace(TRACE_CLSERROR(USBCOMPOSITE_TRACEERR_ALLOCDEVSTRUCT), 0);
- return -ENOMEM;
+ return NULL;
}
/* Convenience pointers into the allocated blob */
@@ -814,11 +821,60 @@ int composite_initialize(int minor)
goto errout_with_alloc;
}
- return OK;
+ return (FAR void *)priv;
errout_with_alloc:
kfree(alloc);
- return ret;
+ return NULL;
+}
+
+/****************************************************************************
+ * Name: usbmsc_uninitialize
+ *
+ * Description:
+ * Un-initialize the USB composite driver. The handle is the USB composite
+ * class' device object as was returned by composite_initialize(). This
+ * function will call board-specific implementations in order to free the
+ * class objects for each of the members of the composite (see
+ * board_mscuninitialize(), board_cdcuninitialize(), ...)
+ *
+ * Input Parameters:
+ * handle - The handle returned by a previous call to composite_initialize().
+ *
+ * Returned Value:
+ * None
+ *
+ ***************************************************************************/
+
+void usbmsc_uninitialize(FAR void *handle)
+{
+ FAR struct composite_dev_s *priv = (FAR struct composite_dev_s *)handle;
+
+ DEBUGASSERT(priv != NULL);
+
+ /* Uninitialize each of the member classes */
+
+ if (priv->dev1)
+ {
+ DEV1_UNINITIALIZE(priv->dev1);
+ priv->dev1 = NULL;
+ }
+
+ if (priv->dev2)
+ {
+ DEV1_UNINITIALIZE(priv->dev2);
+ priv->dev2 = NULL;
+ }
+
+ /* Then unregister and destroy the composite class */
+
+ usbdev_unregister(&priv->drvr.drvr);
+
+ /* Free any resources used by the composite driver */
+
+ /* Then free the composite driver state structure itself */
+
+ kfree(priv);
}
/****************************************************************************
diff --git a/nuttx/drivers/usbdev/composite.h b/nuttx/drivers/usbdev/composite.h
index 4cd3ac606..2e8476500 100644
--- a/nuttx/drivers/usbdev/composite.h
+++ b/nuttx/drivers/usbdev/composite.h
@@ -63,15 +63,6 @@
* Pre-processor Definitions
****************************************************************************/
/* Configuration ************************************************************/
-
-#ifndef CONFIG_USBDEV_TRACE_NRECORDS
-# define CONFIG_USBDEV_TRACE_NRECORDS 128
-#endif
-
-#ifndef CONFIG_USBDEV_TRACE_INITIALIDSET
-# define CONFIG_USBDEV_TRACE_INITIALIDSET 0
-#endif
-
/* Packet sizes */
#ifndef CONFIG_COMPOSITE_EP0MAXPACKET
@@ -128,6 +119,7 @@
# define DEV1_IS_CDCACM 1
# define DEV1_MKCFGDESC cdcacm_mkcfgdesc
# define DEV1_CLASSOBJECT board_cdcclassobject
+# define DEV1_UNINITIALIZE board_cdcuninitialize
# define DEV1_NCONFIGS CDCACM_NCONFIGS
# define DEV1_CONFIGID CDCACM_CONFIGID
# define DEV1_FIRSTINTERFACE CONFIG_CDCACM_IFNOBASE
@@ -139,6 +131,7 @@
# define DEV1_IS_USBMSC 1
# define DEV1_MKCFGDESC usbmsc_mkcfgdesc
# define DEV1_CLASSOBJECT board_mscclassobject
+# define DEV1_UNINITIALIZE board_mscuninitialize
# define DEV1_NCONFIGS USBMSC_NCONFIGS
# define DEV1_CONFIGID USBMSC_CONFIGID
# define DEV1_FIRSTINTERFACE CONFIG_USBMSC_IFNOBASE
@@ -158,6 +151,7 @@
# define DEV2_IS_CDCACM 1
# define DEV2_MKCFGDESC cdcacm_mkcfgdesc
# define DEV2_CLASSOBJECT board_cdcclassobject
+# define DEV2_UNINITIALIZE board_cdcuninitialize
# define DEV2_NCONFIGS CDCACM_NCONFIGS
# define DEV2_CONFIGID CDCACM_CONFIGID
# define DEV2_FIRSTINTERFACE CONFIG_CDCACM_IFNOBASE
@@ -168,6 +162,7 @@
#elif defined(CONFIG_CDCACM_COMPOSITE) && !defined(DEV1_IS_USBMSC)
# define DEV2_IS_USBMSC 1
# define DEV2_MKCFGDESC usbmsc_mkcfgdesc
+# define DEV1_UNINITIALIZE board_mscuninitialize
# define DEV2_CLASSOBJECT board_mscclassobject
# define DEV2_NCONFIGS USBMSC_NCONFIGS
# define DEV2_CONFIGID USBMSC_CONFIGID
@@ -253,21 +248,6 @@ extern const char g_compserialstr[];
****************************************************************************/
/****************************************************************************
- * Name: composite_ep0submit
- *
- * Description:
- * Members of the composite cannot send on EP0 directly because EP0 is
- * is "owned" by the composite device. Instead, when configured as members
- * of a composite device, those classes should call this method so that
- * the composite device can send on EP0 onbehalf of the class.
- *
- ****************************************************************************/
-
-int composite_ep0submit(FAR struct usbdevclass_driver_s *driver,
- FAR struct usbdev_s *dev,
- FAR struct usbdev_req_s *ctrlreq);
-
-/****************************************************************************
* Name: composite_mkstrdesc
*
* Description:
diff --git a/nuttx/drivers/usbdev/usbmsc.c b/nuttx/drivers/usbdev/usbmsc.c
index 3efa1e3db..a264ab232 100644
--- a/nuttx/drivers/usbdev/usbmsc.c
+++ b/nuttx/drivers/usbdev/usbmsc.c
@@ -83,6 +83,7 @@
#include "usbmsc.h"
#ifdef CONFIG_USBMSC_COMPOSITE
+# include <nuttx/composite.h>
# include "composite.h"
#endif
diff --git a/nuttx/include/nuttx/usb/cdcacm.h b/nuttx/include/nuttx/usb/cdcacm.h
index 3ca6f52f1..7c0e260bb 100644
--- a/nuttx/include/nuttx/usb/cdcacm.h
+++ b/nuttx/include/nuttx/usb/cdcacm.h
@@ -313,6 +313,28 @@ EXTERN int board_cdcclassobject(FAR struct usbdevclass_driver_s **classdev);
#endif
/****************************************************************************
+ * Name: board_cdcuninitialize
+ *
+ * Description:
+ * Un-initialize the USB serial class driver. This is just an application-
+ * specific wrapper aboutn cdcadm_unitialize() that is called form the composite
+ * device logic.
+ *
+ * Input Parameters:
+ * classdev - The class driver instrance previously give to the composite
+ * driver by board_cdcclassobject().
+ *
+ * Returned Value:
+ * None
+ *
+ ****************************************************************************/
+
+#if defined(CONFIG_USBMSC_COMPOSITE) && defined(CONFIG_USBMSC_COMPOSITE)
+struct usbdevclass_driver_s;
+EXTERN void board_cdcuninitialize(FAR struct usbdevclass_driver_s *classdev);
+#endif
+
+/****************************************************************************
* Name: cdcacm_classobject
*
* Description:
diff --git a/nuttx/include/nuttx/usb/composite.h b/nuttx/include/nuttx/usb/composite.h
new file mode 100644
index 000000000..53bedc34f
--- /dev/null
+++ b/nuttx/include/nuttx/usb/composite.h
@@ -0,0 +1,186 @@
+/************************************************************************************
+ * include/nuttx/usb/composite.h
+ *
+ * Copyright (C) 2008-2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
+#ifndef __NUTTX_USB_COMPOSITE_H
+#define __NUTTX_USB_COMPOSITE_H
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#ifdef CONFIG_USBDEV_COMPOSITE
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+/* Configuration ************************************************************/
+/* CONFIG_USBDEV_COMPOSITE
+ * Enables USB composite device support
+ * CONFIG_CDCACM_COMPOSITE
+ * Configure the CDC serial driver as part of a composite driver
+ * (only if CONFIG_USBDEV_COMPOSITE is also defined)
+ * CONFIG_COMPOSITE_COMPOSITE
+ * Configure the mass storage driver as part of a composite driver
+ * (only if CONFIG_USBDEV_COMPOSITE is also defined)
+ * CONFIG_COMPOSITE_EP0MAXPACKET
+ * Max packet size for endpoint 0
+ * CONFIG_COMPOSITE_VENDORID and CONFIG_COMPOSITE_VENDORSTR
+ * The vendor ID code/string
+ * CONFIG_COMPOSITE_PRODUCTID and CONFIG_COMPOSITE_PRODUCTSTR
+ * The product ID code/string
+ * CONFIG_COMPOSITE_SERIALSTR
+ * Device serial number string
+ * CONFIG_COMPOSITE_CONFIGSTR
+ * Configuration string
+ * CONFIG_COMPOSITE_VERSIONNO
+ * Interface version number.
+ */
+
+/****************************************************************************
+ * Public Types
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+#undef EXTERN
+#if defined(__cplusplus)
+#define EXTERN extern "C"
+extern "C" {
+#else
+#define EXTERN extern
+#endif
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: composite_initialize
+ *
+ * Description:
+ * Register USB composite device as configured. This function will call
+ * board-specific implementations in order to obtain the class objects for
+ * each of the members of the composite (see board_mscclassobject(),
+ * board_cdcclassobjec(), ...)
+ *
+ * Input Parameter:
+ * None
+ *
+ * Returned Value:
+ * A non-NULL "handle" is returned on success. This handle may be used
+ * later with composite_uninitialize() in order to removed the composite
+ * device. This handle is the (untyped) internal representation of the
+ * the class driver instance.
+ *
+ * NULL is returned on any failure.
+ *
+ ****************************************************************************/
+
+EXTERN FAR void *composite_initialize(void);
+
+/****************************************************************************
+ * Name: usbmsc_uninitialize
+ *
+ * Description:
+ * Un-initialize the USB composite driver. The handle is the USB composite
+ * class' device object as was returned by composite_initialize(). This
+ * function will call board-specific implementations in order to free the
+ * class objects for each of the members of the composite (see
+ * board_mscuninitialize(), board_cdcuninitialize(), ...)
+ *
+ * Input Parameters:
+ * handle - The handle returned by a previous call to composite_initialize().
+ *
+ * Returned Value:
+ * None
+ *
+ ***************************************************************************/
+
+EXTERN void usbmsc_uninitialize(FAR void *handle);
+
+/****************************************************************************
+ * Name: composite_initialize
+ *
+ * Description:
+ * Register USB composite device as configured. This function will call
+ * board-specific implementations in order to obtain the class objects for
+ * each of the members of the composite (see board_mscclassobject(),
+ * board_cdcclassobjec(), ...)
+ *
+ * Input Parameter:
+ * None
+ *
+ * Returned Value:
+ * A non-NULL "handle" is returned on success. This handle may be used
+ * later with composite_uninitialize() in order to removed the composite
+ * device. This handle is the (untyped) internal representation of the
+ * the class driver instance.
+ *
+ * NULL is returned on any failure.
+ *
+ ****************************************************************************/
+
+EXTERN FAR void *composite_initialize(void);
+
+/****************************************************************************
+ * Name: composite_ep0submit
+ *
+ * Description:
+ * Members of the composite cannot send on EP0 directly because EP0 is
+ * is "owned" by the composite device. Instead, when configured as members
+ * of a composite device, those classes should call this method so that
+ * the composite device can send on EP0 onbehalf of the class.
+ *
+ ****************************************************************************/
+
+struct usbdevclass_driver_s;
+struct usbdev_s;
+struct usbdev_req_s;
+
+EXTERN int composite_ep0submit(FAR struct usbdevclass_driver_s *driver,
+ FAR struct usbdev_s *dev,
+ FAR struct usbdev_req_s *ctrlreq);
+
+#undef EXTERN
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* CONFIG_USBDEV_COMPOSITE */
+#endif /* __NUTTX_USB_COMPOSITE_H */
diff --git a/nuttx/include/nuttx/usb/pl2303.h b/nuttx/include/nuttx/usb/pl2303.h
new file mode 100644
index 000000000..4e755d10d
--- /dev/null
+++ b/nuttx/include/nuttx/usb/pl2303.h
@@ -0,0 +1,91 @@
+/************************************************************************************
+ * include/nuttx/usb/pl2303.h
+ *
+ * Copyright (C) 2008-2010, 2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * NOTE: This interface was inspired by the Linux gadget interface by
+ * David Brownell. That work was very helpful in determining a usable
+ * partitioning of functionality between standard class drivers and various
+ * implementations of USB controller drivers. This work, however, does
+ * not derive directly from that work and is licensed differently.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ************************************************************************************/
+
+#ifndef _INCLUDE_NUTTX_USB_PL2303_H
+#define _INCLUDE_NUTTX_USB_PL2303_H
+
+/************************************************************************************
+ * Included Files
+ ************************************************************************************/
+
+#include <nuttx/config.h>
+
+/************************************************************************************
+ * Pre-processor Definitions
+ ************************************************************************************/
+
+/************************************************************************************
+ * Public Types
+ ************************************************************************************/
+
+ /************************************************************************************
+ * Public Data
+ ************************************************************************************/
+
+#undef EXTERN
+#if defined(__cplusplus)
+# define EXTERN extern "C"
+extern "C"
+{
+#else
+# define EXTERN extern
+#endif
+
+/************************************************************************************
+ * Public Functions
+ ************************************************************************************/
+
+/************************************************************************************
+ * Name: usbdev_serialinit
+ *
+ * Description:
+ * Register PL2303 USB serial port (and USB serial console if so configured).
+ *
+ ************************************************************************************/
+
+EXTERN int usbdev_serialinitialize(int minor);
+
+#undef EXTERN
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* _INCLUDE_NUTTX_USB_PL2303_H */
diff --git a/nuttx/include/nuttx/usb/usbdev.h b/nuttx/include/nuttx/usb/usbdev.h
index a727573c3..b799272d3 100644
--- a/nuttx/include/nuttx/usb/usbdev.h
+++ b/nuttx/include/nuttx/usb/usbdev.h
@@ -52,6 +52,11 @@
#include <stdint.h>
#include <stdbool.h>
+#include <nuttx/usb/pl2303.h>
+#include <nuttx/usb/cdcacm.h>
+#include <nuttx/usb/usbmsc.h>
+#include <nuttx/usb/composite.h>
+
/************************************************************************************
* Pre-processor Definitions
************************************************************************************/
@@ -348,158 +353,6 @@ EXTERN int usbdev_register(FAR struct usbdevclass_driver_s *driver);
EXTERN int usbdev_unregister(FAR struct usbdevclass_driver_s *driver);
-/****************************************************************************
- * Name: usbdev_serialinit
- *
- * Description:
- * Register USB serial port (and USB serial console if so configured).
- *
- ****************************************************************************/
-
-EXTERN int usbdev_serialinitialize(int minor);
-
-/****************************************************************************
- * Name: board_mscclassobject
- *
- * Description:
- * If the mass storage class driver is part of composite device, then
- * its instantiation and configuration is a multi-step, board-specific,
- * process (See comments for usbmsc_configure below). In this case,
- * board-specific logic must provide board_mscclassobject().
- *
- * board_mscclassobject() is called from the composite driver. It must
- * encapsulate the instantiation and configuration of the mass storage
- * class and the return the mass storage device's class driver instance
- * to the composite dirver.
- *
- * Input Parameters:
- * classdev - The location to return the mass storage class' device
- * instance.
- *
- * Returned Value:
- * 0 on success; a negated errno on failure
- *
- ****************************************************************************/
-
-#if defined(CONFIG_USBDEV_COMPOSITE) && defined(CONFIG_USBMSC_COMPOSITE)
-EXTERN int board_mscclassobject(FAR struct usbdevclass_driver_s **classdev);
-#endif
-
-/****************************************************************************
- * Name: usbmsc_configure
- *
- * Description:
- * One-time initialization of the USB storage driver. The initialization
- * sequence is as follows:
- *
- * 1. Call usbmsc_configure to perform one-time initialization specifying
- * the number of luns.
- * 2. Call usbmsc_bindlun to configure each supported LUN
- * 3. Call usbmsc_exportluns when all LUNs are configured
- *
- * Input Parameters:
- * nluns - the number of LUNs that will be registered
- * handle - Location to return a handle that is used in other API calls.
- *
- * Returned Value:
- * 0 on success; a negated errno on failure
- *
- ****************************************************************************/
-
-EXTERN int usbmsc_configure(unsigned int nluns, void **handle);
-
-/****************************************************************************
- * Name: usbmsc_bindlun
- *
- * Description:
- * Bind the block driver specified by drvrpath to a USB storage LUN.
- *
- * Input Parameters:
- * handle - The handle returned by a previous call to usbmsc_configure().
- * drvrpath - the full path to the block driver
- * startsector - A sector offset into the block driver to the start of the
- * partition on drvrpath (0 if no partitions)
- * nsectors - The number of sectors in the partition (if 0, all sectors
- * to the end of the media will be exported).
- * lunno - the LUN to bind to
- *
- * Returned Value:
- * 0 on success; a negated errno on failure.
- *
- ****************************************************************************/
-
-EXTERN int usbmsc_bindlun(FAR void *handle, FAR const char *drvrpath,
- unsigned int lunno, off_t startsector, size_t nsectors,
- bool readonly);
-
-/****************************************************************************
- * Name: usbmsc_unbindlun
- *
- * Description:
- * Un-bind the block driver for the specified LUN
- *
- * Input Parameters:
- * handle - The handle returned by a previous call to usbmsc_configure().
- * lun - the LUN to unbind from
- *
- * Returned Value:
- * 0 on success; a negated errno on failure.
- *
- ****************************************************************************/
-
-EXTERN int usbmsc_unbindlun(FAR void *handle, unsigned int lunno);
-
-/****************************************************************************
- * Name: usbmsc_exportluns
- *
- * Description:
- * After all of the LUNs have been bound, this function may be called
- * in order to export those LUNs in the USB storage device.
- *
- * Input Parameters:
- * handle - The handle returned by a previous call to usbmsc_configure().
- *
- * Returned Value:
- * 0 on success; a negated errno on failure
- *
- ****************************************************************************/
-
-EXTERN int usbmsc_exportluns(FAR void *handle);
-
-/****************************************************************************
- * Name: usbmsc_classobject
- *
- * Description:
- * .
- *
- * Input Parameters:
- * handle - The handle returned by a previous call to usbmsc_configure().
- *
- * Returned Value:
- * 0 on success; a negated errno on failure
- *
- ****************************************************************************/
-
-#if defined(CONFIG_USBDEV_COMPOSITE) && defined(CONFIG_USBMSC_COMPOSITE)
-EXTERN int usbmsc_classobject(FAR void *handle, FAR struct usbdevclass_driver_s **classdev);
-#endif
-
-/****************************************************************************
- * Name: usbmsc_uninitialize
- *
- * Description:
- * Un-initialize the USB storage class driver
- *
- * Input Parameters:
- * handle - The handle returned by a previous call to usbmsc_configure().
- *
- * Returned Value:
- * None
- *
- ****************************************************************************/
-
-EXTERN void usbmsc_uninitialize(FAR void *handle);
-
#undef EXTERN
#if defined(__cplusplus)
}
diff --git a/nuttx/include/nuttx/usb/usbhost.h b/nuttx/include/nuttx/usb/usbhost.h
index 923e26307..5bf1d45a4 100644
--- a/nuttx/include/nuttx/usb/usbhost.h
+++ b/nuttx/include/nuttx/usb/usbhost.h
@@ -680,10 +680,6 @@ struct usbhost_driver_s
* Public Data
************************************************************************************/
-/************************************************************************************
- * Public Functions
- ************************************************************************************/
-
#undef EXTERN
#if defined(__cplusplus)
#define EXTERN extern "C"
@@ -693,6 +689,10 @@ extern "C" {
#endif
/************************************************************************************
+ * Public Functions
+ ************************************************************************************/
+
+/************************************************************************************
* Name: usbhost_registerclass
*
* Description:
diff --git a/nuttx/include/nuttx/usb/usbmsc.h b/nuttx/include/nuttx/usb/usbmsc.h
new file mode 100644
index 000000000..dd2740a21
--- /dev/null
+++ b/nuttx/include/nuttx/usb/usbmsc.h
@@ -0,0 +1,257 @@
+/************************************************************************************
+ * include/nuttx/usb/usbmsc.h
+ *
+ * Copyright (C) 2008-2010, 2012 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * NOTE: This interface was inspired by the Linux gadget interface by
+ * David Brownell. That work was very helpful in determining a usable
+ * partitioning of functionality between standard class drivers and various
+ * implementations of USB controller drivers. This work, however, does
+ * not derive directly from that work and is licensed differently.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ************************************************************************************/
+
+#ifndef _INCLUDE_NUTTX_USB_USBMSC_H
+#define _INCLUDE_NUTTX_USB_USBMSC_H
+
+/************************************************************************************
+ * Included Files
+ ************************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <sys/types.h>
+#include <stdint.h>
+#include <stdbool.h>
+
+/************************************************************************************
+ * Pre-processor Definitions
+ ************************************************************************************/
+
+/************************************************************************************
+ * Public Types
+ ************************************************************************************/
+
+ /************************************************************************************
+ * Public Data
+ ************************************************************************************/
+
+#undef EXTERN
+#if defined(__cplusplus)
+# define EXTERN extern "C"
+extern "C"
+{
+#else
+# define EXTERN extern
+#endif
+
+/************************************************************************************
+ * Public Functions
+ ************************************************************************************/
+
+/************************************************************************************
+ * Name: board_mscclassobject
+ *
+ * Description:
+ * If the mass storage class driver is part of composite device, then
+ * its instantiation and configuration is a multi-step, board-specific,
+ * process (See comments for usbmsc_configure below). In this case,
+ * board-specific logic must provide board_mscclassobject().
+ *
+ * board_mscclassobject() is called from the composite driver. It must
+ * encapsulate the instantiation and configuration of the mass storage
+ * class and the return the mass storage device's class driver instance
+ * to the composite dirver.
+ *
+ * Input Parameters:
+ * classdev - The location to return the mass storage class' device
+ * instance.
+ *
+ * Returned Value:
+ * 0 on success; a negated errno on failure
+ *
+ ************************************************************************************/
+
+#if defined(CONFIG_USBMSC_COMPOSITE) && defined(CONFIG_USBMSC_COMPOSITE)
+struct usbdevclass_driver_s;
+EXTERN int board_mscclassobject(FAR struct usbdevclass_driver_s **classdev);
+#endif
+
+/****************************************************************************
+ * Name: board_mscuninitialize
+ *
+ * Description:
+ * Un-initialize the USB storage class driver. This is just an application-
+ * specific wrapper aboutn usbmsc_unitialize() that is called form the composite
+ * device logic.
+ *
+ * Input Parameters:
+ * classdev - The class driver instrance previously give to the composite
+ * driver by board_mscclassobject().
+ *
+ * Returned Value:
+ * None
+ *
+ ****************************************************************************/
+
+#if defined(CONFIG_USBMSC_COMPOSITE) && defined(CONFIG_USBMSC_COMPOSITE)
+struct usbdevclass_driver_s;
+EXTERN void board_mscuninitialize(FAR struct usbdevclass_driver_s *classdev);
+#endif
+
+/************************************************************************************
+ * Name: usbmsc_configure
+ *
+ * Description:
+ * One-time initialization of the USB storage driver. The initialization
+ * sequence is as follows:
+ *
+ * 1. Call usbmsc_configure to perform one-time initialization specifying
+ * the number of luns.
+ * 2. Call usbmsc_bindlun to configure each supported LUN
+ * 3. Call usbmsc_exportluns when all LUNs are configured
+ *
+ * Input Parameters:
+ * nluns - the number of LUNs that will be registered
+ * handle - Location to return a handle that is used in other API calls.
+ *
+ * Returned Value:
+ * 0 on success; a negated errno on failure. The returned handle value is
+ * an untyped equivalent to the usbmsc_classobject() or board_mscclassobject().
+ *
+ ************************************************************************************/
+
+EXTERN int usbmsc_configure(unsigned int nluns, void **handle);
+
+/************************************************************************************
+ * Name: usbmsc_bindlun
+ *
+ * Description:
+ * Bind the block driver specified by drvrpath to a USB storage LUN.
+ *
+ * Input Parameters:
+ * handle - The handle returned by a previous call to usbmsc_configure().
+ * drvrpath - the full path to the block driver
+ * startsector - A sector offset into the block driver to the start of the
+ * partition on drvrpath (0 if no partitions)
+ * nsectors - The number of sectors in the partition (if 0, all sectors
+ * to the end of the media will be exported).
+ * lunno - the LUN to bind to
+ *
+ * Returned Value:
+ * 0 on success; a negated errno on failure.
+ *
+ ************************************************************************************/
+
+EXTERN int usbmsc_bindlun(FAR void *handle, FAR const char *drvrpath,
+ unsigned int lunno, off_t startsector, size_t nsectors,
+ bool readonly);
+
+/************************************************************************************
+ * Name: usbmsc_unbindlun
+ *
+ * Description:
+ * Un-bind the block driver for the specified LUN
+ *
+ * Input Parameters:
+ * handle - The handle returned by a previous call to usbmsc_configure().
+ * lun - the LUN to unbind from
+ *
+ * Returned Value:
+ * 0 on success; a negated errno on failure.
+ *
+ ************************************************************************************/
+
+EXTERN int usbmsc_unbindlun(FAR void *handle, unsigned int lunno);
+
+/************************************************************************************
+ * Name: usbmsc_exportluns
+ *
+ * Description:
+ * After all of the LUNs have been bound, this function may be called in order to
+ * export those LUNs in the USB storage device.
+ *
+ * Input Parameters:
+ * handle - The handle returned by a previous call to usbmsc_configure().
+ *
+ * Returned Value:
+ * 0 on success; a negated errno on failure
+ *
+ ************************************************************************************/
+
+EXTERN int usbmsc_exportluns(FAR void *handle);
+
+/************************************************************************************
+ * Name: usbmsc_classobject
+ *
+ * Description:
+ * Register USB mass storage device and return the class object.
+ *
+ * Input Parameters:
+ * classdev - The location to return the CDC serial class' device
+ * instance.
+ *
+ * Returned Value:
+ * 0 on success; a negated errno on failure
+
+ *
+ ************************************************************************************/
+
+#if defined(CONFIG_USBMSC_COMPOSITE) && defined(CONFIG_USBMSC_COMPOSITE)
+struct usbdevclass_driver_s;
+EXTERN int usbmsc_classobject(FAR void *handle, FAR struct usbdevclass_driver_s **classdev);
+#endif
+
+/************************************************************************************
+ * Name: usbmsc_uninitialize
+ *
+ * Description:
+ * Un-initialize the USB storage class driver. The handle is the USB MSC
+ * class' device object. This is the same value as returned by usbmsc_classobject
+ * (typed) or by usbmsc_configure (untyped).
+ *
+ * Input Parameters:
+ * handle - The handle returned by a previous call to usbmsc_configure()
+ * (or usbmsc_classobject()).
+ *
+ * Returned Value:
+ * None
+ *
+ ***********************************************************************************/
+
+EXTERN void usbmsc_uninitialize(FAR void *handle);
+
+#undef EXTERN
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* _INCLUDE_NUTTX_USB_USBMSC_H */