mirror of
https://github.com/apache/nuttx.git
synced 2026-06-06 00:14:22 +08:00
Prep for 5.16 release
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@3241 42af7a65-404d-4744-a932-0658087f49c3
This commit is contained in:
@@ -1572,3 +1572,85 @@ And feature enhancements:
|
||||
configuration for the Olimex LPC1766-STK have been added. However,
|
||||
neither the LCD driver nor the NX configuration have been verified
|
||||
as of the this release.
|
||||
|
||||
nuttx-5.16
|
||||
^^^^^^^^^^
|
||||
|
||||
The 63rd release of NuttX, Version 5.16, was made on January 10, 2010 and is
|
||||
available for download from the SourceForge website. This release includes
|
||||
initial support for USB host in NuttX. The USB host infrstruture is new to
|
||||
NuttX. This initial USB host release is probably only beta quality; it is
|
||||
expected the some bugs remain in the logic and that the functionality
|
||||
requires extension.
|
||||
|
||||
Below is a summary of the NuttX USB host implementation as extracted from
|
||||
the NuttX Porting Guide:
|
||||
|
||||
6.3.9 USB Host-Side Drivers
|
||||
o include/nuttx/usb/usbhost.h. All structures and APIs needed to work
|
||||
with USB host-side drivers are provided in this header file.
|
||||
o struct usbhost_driver_s. Each USB host controller driver must
|
||||
implement an instance of struct usbhost_driver_s. This structure is
|
||||
defined in include/nuttx/usb/usbhost.h.
|
||||
Examples: arch/arm/src/lpc17xx/lpc17_usbhost.c.
|
||||
o struct usbhost_class_s. Each USB host class driver must implement
|
||||
an instance of struct usbhost_class_s. This structure is also defined
|
||||
in include/nuttx/usb/usbhost.h.
|
||||
Examples: drivers/usbhost/usbhost_storage.c
|
||||
o USB Host Class Driver Registry. The NuttX USB host infrastructure
|
||||
includes a registry. During its initialization, each USB host class
|
||||
driver must call the interface, usbhost_registerclass() in order add
|
||||
its interface to the registery. Later, when a USB device is connected,
|
||||
the USB host controller will look up the USB host class driver that
|
||||
is needed to support the connected device in this registry.
|
||||
Examples: drivers/usbhost/usbhost_registry.c,
|
||||
drivers/usbhost/usbhost_registerclass.c, and
|
||||
drivers/usbhost/usbhost_findclass.c,
|
||||
o Detection and Enumeration of Connected Devices. Each USB host device
|
||||
controller supports two methods that are used to detect and enumeration
|
||||
newly connected devices (and also detect disconnected devices):
|
||||
+ int (*wait)(FAR struct usbhost_driver_s *drvr, bool connected);
|
||||
Wait for a device to be connected or disconnected.
|
||||
+ int (*enumerate)(FAR struct usbhost_driver_s *drvr);
|
||||
Enumerate the connected device. As part of this enumeration process,
|
||||
the driver will (1) get the device's configuration descriptor, (2)
|
||||
extract the class ID info from the configuration descriptor, (3)
|
||||
call usbhost_findclass() to find the class that supports this device,
|
||||
(4) call the create() method on the struct usbhost_registry_s
|
||||
interface to get a class instance, and finally (5) call the connect()
|
||||
method of the struct usbhost_class_s interface. After that, the class
|
||||
is in charge of the sequence of operations.
|
||||
o Binding USB Host-Side Drivers. USB host-side controller drivers are not
|
||||
normally directly accessed by user code, but are usually bound to another,
|
||||
higher level USB host class driver. The class driver exports the standard
|
||||
NuttX device interface so that the connected USB device can be accessed
|
||||
just as with other, similar, on-board devices. For example, the USB host
|
||||
mass storage class driver (drivers/usbhost/usbhost_storage.c) will
|
||||
register a standard, NuttX block driver interface (like /dev/sda) that
|
||||
can be used to mount a file system just as with any other other block
|
||||
driver instance. In general, the binding sequence is:
|
||||
|
||||
1. Each USB host class driver includes an intialization entry point
|
||||
that is called from the application at initialization time. This
|
||||
driver calls usbhost_registerclass() during this initialization in
|
||||
order to makes itself available in the event the the device that it
|
||||
supports is connected.
|
||||
Examples: The function usbhost_storageinit() in the file
|
||||
drivers/usbhost/usbhost_storage.c
|
||||
2. Each application must include a waiter thread thread that (1) calls
|
||||
the USB host controller driver's wait() to detect the connection of a
|
||||
device, and then (2) call the USB host controller driver's enumerate
|
||||
method to bind the registered USB host class driver to the USB host
|
||||
controller driver.
|
||||
Examples: The function nsh_waiter() in the file
|
||||
configs/nucleus2g/src/up_nsh.c and the function nsh_waiter() in the
|
||||
file configs/olimex-lpc1766stk/src/up_nsh.c.
|
||||
3. As part of its operation during the binding operation, the USB host
|
||||
class driver will register an instances of a standard NuttX driver
|
||||
under the /dev directory. To repeat the above example, the USB host
|
||||
mass storage class driver (drivers/usbhost/usbhost_storage.c) will
|
||||
register a standard, NuttX block driver interface (like /dev/sda)
|
||||
that can be used to mount a file system just as with any other other
|
||||
block driver instance.
|
||||
Examples: See the call to register_blockdriver() in the function
|
||||
usbhost_initvolume() in the file drivers/usbhost/usbhost_storage.c.
|
||||
|
||||
Reference in New Issue
Block a user