diff options
-rw-r--r-- | nuttx/Documentation/NuttX.html | 4 | ||||
-rw-r--r-- | nuttx/Documentation/NuttxPortingGuide.html | 42 | ||||
-rw-r--r-- | nuttx/configs/README.txt | 23 | ||||
-rw-r--r-- | nuttx/drivers/usbdev/cdcacm.c | 1 | ||||
-rw-r--r-- | nuttx/drivers/usbdev/composite.c | 72 | ||||
-rw-r--r-- | nuttx/drivers/usbdev/composite.h | 28 | ||||
-rw-r--r-- | nuttx/drivers/usbdev/usbmsc.c | 1 | ||||
-rw-r--r-- | nuttx/include/nuttx/usb/cdcacm.h | 22 | ||||
-rw-r--r-- | nuttx/include/nuttx/usb/composite.h | 186 | ||||
-rw-r--r-- | nuttx/include/nuttx/usb/pl2303.h | 91 | ||||
-rw-r--r-- | nuttx/include/nuttx/usb/usbdev.h | 157 | ||||
-rw-r--r-- | nuttx/include/nuttx/usb/usbhost.h | 8 | ||||
-rw-r--r-- | nuttx/include/nuttx/usb/usbmsc.h | 257 |
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 */ |