Loading ...
Sorry, an error occurred while loading the content.

NuttX-5.16 Released

Expand Messages
  • Gregory N
    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
    Message 1 of 1 , Jan 10, 2011
    • 0 Attachment
      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

      * include/nuttx/usb/usbhost.h. All structures and APIs needed to
      work with USB host-side drivers are provided in this header file.
      * 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.
      * 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
      * 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,
      * 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):
      o int (wait)(FAR struct usbhost_driver_s drvr, bool connected);
      Wait for a device to be connected or disconnected.
      o 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.
      * 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 initialization 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 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.

      ChangeLog

      5.16 2011-01-10 Gregory Nutt <spudmonkey AT racsa.co.cr>

      * include/nuttx/usb -- Created new directory. Moved all
      usb-related header files to this new directory. Created a
      skeleton for a new USB host header file
      * drivers/usbhost -- Add USB host "registry" where connect
      devices can be matched with the correct USB class driver.
      * arc/arc/src/lpc17xx/lpc17_usbhost.c -- Add a simple USB host
      driver for the NXP lpc17xx.
      * drivers/usbhost -- Add generic USB device enumeration logic.
      * drivers/usbhost -- Add a USB host class driver for the
      (Bulk-Only) USB Mass Storage Class.
    Your message has been successfully submitted and would be delivered to recipients shortly.