diff --git a/drivers/usbhost/usbhost_storage.c b/drivers/usbhost/usbhost_storage.c new file mode 100644 index 0000000000000000000000000000000000000000..a26a8b37b8b3091abd40360670851404c2fcf360 --- /dev/null +++ b/drivers/usbhost/usbhost_storage.c @@ -0,0 +1,128 @@ +/**************************************************************************** + * drivers/usbhost/usbhost_storage.c + * + * Copyright (C) 2010 Gregory Nutt. All rights reserved. + * Author: Gregory Nutt <spudmonkey@racsa.co.cr> + * + * 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. + * + ****************************************************************************/ + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include <nuttx/config.h> + +#include <nuttx/usb/usb.h> +#include <nuttx/usb/usbhost.h> + +/**************************************************************************** + * Private Function Prototypes + ****************************************************************************/ + +static struct usbhost_class_s *usbhost_create(struct usbhost_driver_s *drvr); + +/**************************************************************************** + * Private Data + ****************************************************************************/ + +struct usbhost_registry_s g_storage = +{ + NULL, /* flink */ + usbhost_create, /* create */ + { + USB_CLASS_MASS_STORAGE, /* id.class */ + 0, /* id.vid */ + 0 /* id.pid */ + } +}; + +/**************************************************************************** + * Private Functions + ****************************************************************************/ + +/**************************************************************************** + * Name: usbhost_create + * + * Description: + * This function implements the create() method of struct usb_registry_s. + * The create() method is a callback into the class implementation. It is + * used to (1) create a new instance of the USB host class state and to (2) + * bind a USB host driver "session" to the class instance. Use of this + * create() method will support environments where there may be multiple + * USB ports and multiple USB devices simultaneously connected. + * + * Input Parameters: + * drvr - An instance of struct usbhost_driver_s that the class + * implementation will "bind" to its state structure and will + * subsequently use to communicate with the USB host driver. + * + * Returned Values: + * On success, this function will return a non-NULL instance of struct + * usbhost_class_s that can be used by the USB host driver to communicate + * with the USB host class. NULL is returned on failure; this function + * will fail only if the drvr input parameter is NULL or if there are + * insufficient resources to create another USB host class instance. + * + ****************************************************************************/ + +static struct usbhost_class_s *usbhost_create(struct usbhost_driver_s *drvr) +{ +#warning "Not implemented" + return NULL; +} + +/**************************************************************************** + * Public Functions + ****************************************************************************/ + +/**************************************************************************** + * Name: usbhost_storageinit + * + * Description: + * Initialize the USB host storage class. This function should be called + * be platform-specific code in order to initialize and register support + * for the USB host storage class. + * + * Input Parameters: + * None + * + * Returned Values: + * On success this function will return zero (OK); A negated errno value + * will be returned on failure. + * + ****************************************************************************/ + +int usbhost_storageinit(void) +{ + /* Advertise our availability to support mass storage devices */ + + return usbhost_registerclass(&g_storage); +} + diff --git a/include/nuttx/usb/usbhost.h b/include/nuttx/usb/usbhost.h index 8678431705695d9c97f7c108d8c4bfb3896806e0..972584fd1c0e6da2abdbf5112134eddd509a9075 100644 --- a/include/nuttx/usb/usbhost.h +++ b/include/nuttx/usb/usbhost.h @@ -113,7 +113,7 @@ struct usbhost_registry_s * provide those instances in write-able memory (RAM). */ - struct usbhsot_registry_s flink; + struct usbhost_registry_s flink; /* This is a callback into the class implementation. It is used to (1) create * a new instance of the USB host class state and to (2) bind a USB host driver @@ -122,7 +122,7 @@ struct usbhost_registry_s * simultaneously connected (see the CLASS_CREATE() macro above). */ - struct usbhost_class_s *(*create)(struct usbhost_driver_s *drvr); + struct usbhost_class_s *(*create)(struct usbhost_driver_s *drvr); /* This information uniquely identifies the USB host class implementation that * goes with a specific USB device. @@ -191,6 +191,25 @@ EXTERN int usbhost_registerclass(struct usbhost_registry_s *class); EXTERN const struct usbhost_registry_s *usbhost_findclass(const struct usbhost_id_s *id); +/**************************************************************************** + * Name: usbhost_storageinit + * + * Description: + * Initialize the USB host storage class. This function should be called + * be platform-specific code in order to initialize and register support + * for the USB host storage class. + * + * Input Parameters: + * None + * + * Returned Values: + * On success this function will return zero (OK); A negated errno value + * will be returned on failure. + * + ****************************************************************************/ + +EXTERN int usbhost_storageinit(void); + #undef EXTERN #if defined(__cplusplus) }