You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by gi...@apache.org on 2020/09/08 16:14:55 UTC

[incubator-nuttx-website] branch asf-site updated: Publishing web: 36f9d16d072aff843aeea6047e41d15a3c4fcaec docs: 835d394856090e7e6ba1f14e58b29593bb4396c7

This is an automated email from the ASF dual-hosted git repository.

github-bot pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx-website.git


The following commit(s) were added to refs/heads/asf-site by this push:
     new c34be54  Publishing web: 36f9d16d072aff843aeea6047e41d15a3c4fcaec docs: 835d394856090e7e6ba1f14e58b29593bb4396c7
c34be54 is described below

commit c34be5477d108ba711c52dafff6ed05fbc5856b0
Author: Brennan <ba...@brennanashton.com>
AuthorDate: Tue Sep 8 16:14:25 2020 +0000

    Publishing web: 36f9d16d072aff843aeea6047e41d15a3c4fcaec docs: 835d394856090e7e6ba1f14e58b29593bb4396c7
---
 content/docs/latest/_images/menuconfig-debug.png   | Bin 0 -> 309633 bytes
 content/docs/latest/_images/menuconfig.png         | Bin 0 -> 124925 bytes
 .../components/drivers/block/index.rst.txt         |  41 +
 .../components/drivers/character/analog.rst.txt    |  55 ++
 .../components/drivers/character/can.rst.txt       |  36 +
 .../components/drivers/character/index.rst.txt     |  64 ++
 .../components/drivers/character/keypad.rst.txt    | 143 +++
 .../components/drivers/character/pwm.rst.txt       |  34 +
 .../drivers/character/quadrature.rst.txt           |  29 +
 .../components/drivers/character/rtc.rst.txt       |  25 +
 .../components/drivers/character/serial.rst.txt    |  29 +
 .../components/drivers/character/timer.rst.txt     |  18 +
 .../drivers/character/touchscreen.rst.txt          |  38 +
 .../components/drivers/character/watchdog.rst.txt  |  29 +
 .../_sources/components/drivers/index.rst.txt      | 963 +--------------------
 .../components/drivers/special/ethernet.rst.txt    |  17 +
 .../components/drivers/special/framebuffer.rst.txt |  34 +
 .../components/drivers/special/i2c.rst.txt         |  22 +
 .../components/drivers/special/index.rst.txt       |  34 +
 .../components/drivers/special/lcd.rst.txt         |  47 +
 .../components/drivers/special/mtd.rst.txt         |  47 +
 .../components/drivers/special/sdio.rst.txt        |  33 +
 .../components/drivers/special/spi.rst.txt         |  25 +
 .../components/drivers/special/usbdev.rst.txt      |  50 ++
 .../components/drivers/special/usbhost.rst.txt     | 108 +++
 .../docs/latest/_sources/guides/drivers.rst.txt    |   2 +-
 .../_sources/quickstart/build_and_make.rst.txt     |   7 +-
 .../latest/_sources/quickstart/configuring.rst.txt |   4 +-
 .../latest/_sources/quickstart/debugging.rst.txt   | 121 ++-
 .../docs/latest/_sources/quickstart/index.rst.txt  |   2 -
 .../latest/_sources/quickstart/install.rst.txt     | 121 ++-
 .../_sources/quickstart/organization.rst.txt       |   2 +
 .../latest/_sources/quickstart/quickstart.rst.txt  |  19 +-
 .../latest/_sources/quickstart/running.rst.txt     |   4 +-
 .../latest/_static/images/menuconfig-debug.png     | Bin 0 -> 309633 bytes
 content/docs/latest/_static/images/menuconfig.png  | Bin 0 -> 124925 bytes
 .../latest/components/drivers/block/index.html     | 289 +++++++
 .../components/drivers/character/analog.html       | 330 +++++++
 .../latest/components/drivers/character/can.html   | 305 +++++++
 .../latest/components/drivers/character/index.html | 332 +++++++
 .../components/drivers/character/keypad.html       | 398 +++++++++
 .../latest/components/drivers/character/pwm.html   | 303 +++++++
 .../components/drivers/character/quadrature.html   | 299 +++++++
 .../latest/components/drivers/character/rtc.html   | 296 +++++++
 .../components/drivers/character/serial.html       | 295 +++++++
 .../latest/components/drivers/character/timer.html | 289 +++++++
 .../components/drivers/character/touchscreen.html  | 308 +++++++
 .../components/drivers/character/watchdog.html     | 299 +++++++
 content/docs/latest/components/drivers/index.html  | 941 +-------------------
 .../components/drivers/special/ethernet.html       | 285 ++++++
 .../components/drivers/special/framebuffer.html    | 301 +++++++
 .../latest/components/drivers/special/i2c.html     | 291 +++++++
 .../latest/components/drivers/special/index.html   | 300 +++++++
 .../latest/components/drivers/special/lcd.html     | 310 +++++++
 .../latest/components/drivers/special/mtd.html     | 312 +++++++
 .../latest/components/drivers/special/sdio.html    | 298 +++++++
 .../latest/components/drivers/special/spi.html     | 294 +++++++
 .../latest/components/drivers/special/usbdev.html  | 316 +++++++
 .../latest/components/drivers/special/usbhost.html | 374 ++++++++
 content/docs/latest/components/filesystem.html     |   2 +-
 content/docs/latest/components/index.html          |   7 +-
 content/docs/latest/guides/drivers.html            |   2 +-
 content/docs/latest/index.html                     |   2 +-
 content/docs/latest/objects.inv                    | Bin 19270 -> 19654 bytes
 content/docs/latest/quickstart/build_and_make.html |   6 +-
 content/docs/latest/quickstart/configuring.html    |   6 +-
 content/docs/latest/quickstart/debugging.html      | 113 +--
 content/docs/latest/quickstart/install.html        | 140 ++-
 content/docs/latest/quickstart/organization.html   |  14 +-
 content/docs/latest/quickstart/quickstart.html     |  25 +-
 content/docs/latest/quickstart/running.html        |   4 +-
 content/docs/latest/searchindex.js                 |   2 +-
 content/feed.xml                                   |   4 +-
 73 files changed, 8110 insertions(+), 2185 deletions(-)

diff --git a/content/docs/latest/_images/menuconfig-debug.png b/content/docs/latest/_images/menuconfig-debug.png
new file mode 100644
index 0000000..23828c2
Binary files /dev/null and b/content/docs/latest/_images/menuconfig-debug.png differ
diff --git a/content/docs/latest/_images/menuconfig.png b/content/docs/latest/_images/menuconfig.png
new file mode 100644
index 0000000..c16c234
Binary files /dev/null and b/content/docs/latest/_images/menuconfig.png differ
diff --git a/content/docs/latest/_sources/components/drivers/block/index.rst.txt b/content/docs/latest/_sources/components/drivers/block/index.rst.txt
new file mode 100644
index 0000000..51a09ec
--- /dev/null
+++ b/content/docs/latest/_sources/components/drivers/block/index.rst.txt
@@ -0,0 +1,41 @@
+====================
+Block Device Drivers
+====================
+
+Block device drivers have these properties:
+
+-  ``include/nuttx/fs/fs.h``. All structures and APIs needed
+   to work with block drivers are provided in this header file.
+
+-  ``struct block_operations``. Each block device driver must
+   implement an instance of ``struct block_operations``. That
+   structure defines a call table with the following methods:
+
+-  ``int register_blockdriver(const char *path, const struct block_operations *bops, mode_t mode, void *priv);``.
+   Each block driver registers itself by calling
+   ``register_blockdriver()``, passing it the ``path`` where it
+   will appear in the `pseudo-file-system <#NxFileSystem>`__ and
+   it's initialized instance of ``struct block_operations``.
+
+-  **User Access**. Users do not normally access block drivers
+   directly, rather, they access block drivers indirectly through
+   the ``mount()`` API. The ``mount()`` API binds a block driver
+   instance with a file system and with a mountpoint. Then the
+   user may use the block driver to access the file system on the
+   underlying media. *Example*: See the ``cmd_mount()``
+   implementation in ``apps/nshlib/nsh_fscmds.c``.
+
+-  **Accessing a Character Driver as a Block Device**. See the
+   loop device at ``drivers/loop.c``. *Example*: See the
+   ``cmd_losetup()`` implementation in
+   ``apps/nshlib/nsh_fscmds.c``.
+
+-  **Accessing a Block Driver as Character Device**. See the
+   Block-to-Character (BCH) conversion logic in ``drivers/bch/``.
+   *Example*: See the ``cmd_dd()`` implementation in
+   ``apps/nshlib/nsh_ddcmd.c``.
+
+-  **Examples**. ``drivers/loop.c``,
+   ``drivers/mmcsd/mmcsd_spi.c``, ``drivers/ramdisk.c``, etc.
+
+
diff --git a/content/docs/latest/_sources/components/drivers/character/analog.rst.txt b/content/docs/latest/_sources/components/drivers/character/analog.rst.txt
new file mode 100644
index 0000000..f4714d8
--- /dev/null
+++ b/content/docs/latest/_sources/components/drivers/character/analog.rst.txt
@@ -0,0 +1,55 @@
+========================
+Analog (ADC/DAC) Drivers
+========================
+
+The NuttX analog drivers are split into two parts:
+
+#. An "upper half", generic driver that provides the common analog
+   interface to application level code, and
+#. A "lower half", platform-specific driver that implements the
+   low-level controls to implement the analog functionality.
+
+-  General header files for the NuttX analog drivers reside in
+   ``include/nuttx/analog/``. These header files includes both the
+   application level interface to the analog driver as well as the
+   interface between the "upper half" and "lower half" drivers.
+-  Common analog logic and share-able analog drivers reside in the
+   ``drivers/analog/``.
+-  Platform-specific drivers reside in
+   ``arch/``\ *<architecture>*\ ``/src/``\ *<hardware>* directory
+   for the specific processor *<architecture>* and for the
+   specific *<chip>* analog peripheral devices.
+
+ADC Drivers
+-----------
+
+-  ``include/nuttx/analog/adc.h``. All structures and APIs needed
+   to work with ADC drivers are provided in this header file. This
+   header file includes:
+
+   #. Structures and interface descriptions needed to develop a
+      low-level, architecture-specific, ADC driver.
+   #. To register the ADC driver with a common ADC character
+      driver.
+   #. Interfaces needed for interfacing user programs with the
+      common ADC character driver.
+
+-  ``drivers/analog/adc.c``. The implementation of the common ADC
+   character driver.
+
+DAC Drivers
+-----------
+
+-  ``include/nuttx/analog/dac.h``. All structures and APIs needed
+   to work with DAC drivers are provided in this header file. This
+   header file includes:
+
+   #. Structures and interface descriptions needed to develop a
+      low-level, architecture-specific, DAC driver.
+   #. To register the DAC driver with a common DAC character
+      driver.
+   #. Interfaces needed for interfacing user programs with the
+      common DAC character driver.
+
+-  ``drivers/analog/dac.c``. The implementation of the common DAC
+   character driver.
diff --git a/content/docs/latest/_sources/components/drivers/character/can.rst.txt b/content/docs/latest/_sources/components/drivers/character/can.rst.txt
new file mode 100644
index 0000000..b08ebb0
--- /dev/null
+++ b/content/docs/latest/_sources/components/drivers/character/can.rst.txt
@@ -0,0 +1,36 @@
+===========
+CAN Drivers
+===========
+
+NuttX supports only a very low-level CAN driver. This driver
+supports only the data exchange and does not include any
+high-level CAN protocol. The NuttX CAN driver is split into two
+parts:
+
+#. An "upper half", generic driver that provides the common CAN
+   interface to application level code, and
+#. A "lower half", platform-specific driver that implements the
+   low-level timer controls to implement the CAN functionality.
+
+Files supporting CAN can be found in the following locations:
+
+-  **Interface Definition**. The header file for the NuttX CAN
+   driver resides at ``include/nuttx/can/can.h``. This header file
+   includes both the application level interface to the CAN driver
+   as well as the interface between the "upper half" and "lower
+   half" drivers. The CAN module uses a standard character driver
+   framework.
+-  **"Upper Half" Driver**. The generic, "upper half" CAN driver
+   resides at ``drivers/can.c``.
+-  **"Lower Half" Drivers**. Platform-specific CAN drivers reside
+   in ``arch/``\ *<architecture>*\ ``/src/``\ *<hardware>*
+   directory for the specific processor *<architecture>* and for
+   the specific *<chip>* CAN peripheral devices.
+
+**Usage Note**: When reading from the CAN driver multiple messages
+may be returned, depending on (1) the size the returned can
+messages, and (2) the size of the buffer provided to receive CAN
+messages. *Never assume that a single message will be returned*...
+if you do this, *you will lose CAN data* under conditions where
+your read buffer can hold more than one small message. Below is an
+example about how you should think of the CAN read operation:
diff --git a/content/docs/latest/_sources/components/drivers/character/index.rst.txt b/content/docs/latest/_sources/components/drivers/character/index.rst.txt
new file mode 100644
index 0000000..e50dc89
--- /dev/null
+++ b/content/docs/latest/_sources/components/drivers/character/index.rst.txt
@@ -0,0 +1,64 @@
+========================
+Character Device Drivers
+========================
+
+Character device drivers have these properties:
+
+-  ``include/nuttx/fs/fs.h``. All structures and APIs needed
+   to work with character drivers are provided in this header
+   file.
+
+-  ``struct file_operations``. Each character device driver
+   must implement an instance of ``struct file_operations``. That
+   structure defines a call table with the following methods:
+
+-  ``int register_driver(const char *path, const struct file_operations *fops, mode_t mode, void *priv);``.
+   Each character driver registers itself by calling
+   ``register_driver()``, passing it the ``path`` where it will
+   appear in the `pseudo-file-system <#NxFileSystem>`__ and it's
+   initialized instance of ``struct file_operations``.
+
+-  **User Access**. After it has been registered, the character
+   driver can be accessed by user code using the standard `driver
+   operations <NuttxUserGuide.html#driveroperations>`__ including
+   ``open()``, ``close()``, ``read()``, ``write()``, etc.
+
+-  **Specialized Character Drivers**. Within the common character
+   driver framework, there are different specific varieties of
+   *specialized* character drivers. The unique requirements of the
+   underlying device hardware often mandates some customization of
+   the character driver. These customizations tend to take the
+   form of:
+
+   -  Device-specific ``ioctl()`` commands used to performed
+      specialized operations on the device. These ``ioctl()`` will
+      be documented in header files under ``include/nuttx`` that
+      detail the specific device interface.
+   -  Specialized I/O formats. Some devices will require that
+      ``read()`` and/or ``write()`` operations use data conforming
+      to a specific format, rather than a plain stream of bytes.
+      These specialized I/O formats will be documented in header
+      files under ``include/nuttx`` that detail the specific
+      device interface. The typical representation of the I/O
+      format will be a C structure definition.
+
+   The specialized character drivers support by NuttX are
+   documented in the following paragraphs.
+
+-  **Examples**: ``drivers/dev_null.c``, ``drivers/fifo.c``,
+   ``drivers/serial.c``, etc.
+
+.. toctree::
+  :caption: Supported Drivers
+  
+  serial.rst
+  touchscreen.rst
+  analog.rst
+  pwm.rst
+  can.rst
+  quadrature.rst
+  timer.rst
+  rtc.rst
+  watchdog.rst
+  keypad.rst
+
diff --git a/content/docs/latest/_sources/components/drivers/character/keypad.rst.txt b/content/docs/latest/_sources/components/drivers/character/keypad.rst.txt
new file mode 100644
index 0000000..63e0446
--- /dev/null
+++ b/content/docs/latest/_sources/components/drivers/character/keypad.rst.txt
@@ -0,0 +1,143 @@
+=======================
+Keyboard/Keypad Drivers
+=======================
+
+**Keypads vs. Keyboards** Keyboards and keypads are really the
+same devices for NuttX. A keypad is thought of as simply a
+keyboard with fewer keys.
+
+**Special Commands**. In NuttX, a keyboard/keypad driver is simply
+a character driver that may have an (optional) encoding/decoding
+layer on the data returned by the character driver. A keyboard may
+return simple text data (alphabetic, numeric, and punctuation) or
+control characters (enter, control-C, etc.) when a key is pressed.
+We can think about this the "normal" keyboard data stream.
+However, in addition, most keyboards support actions that cannot
+be represented as text or control data. Such actions include
+things like cursor controls (home, up arrow, page down, etc.),
+editing functions (insert, delete, etc.), volume controls, (mute,
+volume up, etc.) and other special functions. In this case, some
+special encoding may be required to multiplex the normal text data
+and special command key press data streams.
+
+**Key Press and Release Events** Sometimes the time that a key is
+released is needed by applications as well. Thus, in addition to
+normal and special key press events, it may also be necessary to
+encode normal and special key release events.
+
+**Encoding/Decoding** Layer. An optional encoding/decoding layer
+can be used with the basic character driver to encode the keyboard
+events into the text data stream. The function interfaces that
+comprise that encoding/decoding layer are defined in the header
+file ``include/nuttx/input/kbd_code.h``. These functions provide
+an matched set of (a) driver encoding interfaces, and (b)
+application decoding interfaces.
+
+#. **Driver Encoding Interfaces**. These are interfaces used by
+   the keyboard/keypad driver to encode keyboard events and data.
+
+   -  ``kbd_press()``
+
+      **Function Prototype:**
+
+      **Description:**
+
+      **Input Parameters:**
+
+      -  ``ch``: The character to be added to the output stream.
+      -  ``stream``: An instance of ``lib_outstream_s`` to perform
+         the actual low-level put operation.
+
+      **Returned Value:**
+
+   -  ``kbd_release()``
+
+      **Function Prototype:**
+
+      **Description:**
+
+      **Input Parameters:**
+
+      -  ``ch``: The character associated with the key that was
+         released.
+      -  ``stream``: An instance of ``lib_outstream_s`` to perform
+         the actual low-level put operation.
+
+      **Returned Value:**
+
+   -  ``kbd_specpress()``
+
+      **Function Prototype:**
+
+      **Description:**
+
+      **Input Parameters:**
+
+      -  ``keycode``: The command to be added to the output
+         stream. The enumeration ``enum kbd_keycode_e keycode``
+         identifies all commands known to the system.
+      -  ``stream``: An instance of ``lib_outstream_s`` to perform
+         the actual low-level put operation.
+
+      **Returned Value:**
+
+   -  ``kbd_specrel()``
+
+      **Function Prototype:**
+
+      **Description:**
+
+      **Input Parameters:**
+
+      -  ``keycode``: The command to be added to the output
+         stream. The enumeration ``enum kbd_keycode_e keycode``
+         identifies all commands known to the system.
+      -  ``stream``: An instance of ``lib_outstream_s`` to perform
+         the actual low-level put operation.
+
+      **Returned Value:**
+
+#. **Application Decoding Interfaces**. These are user interfaces
+   to decode the values returned by the keyboard/keypad driver.
+
+   -  ``kbd_decode()``
+
+      **Function Prototype:**
+
+      **Description:**
+
+      **Input Parameters:**
+
+      -  ``stream``: An instance of ``lib_instream_s`` to perform
+         the actual low-level get operation.
+      -  ``pch``: The location to save the returned value. This
+         may be either a normal, character code or a special
+         command (i.e., a value from ``enum kbd_getstate_s``.
+      -  ``state``: A user provided buffer to support parsing.
+         This structure should be cleared the first time that
+         ``kbd_decode()`` is called.
+
+      **Returned Value:**
+
+      -  ``KBD_PRESS`` (0)**: Indicates the successful receipt
+         of normal, keyboard data. This corresponds to a keypress
+         event. The returned value in ``pch`` is a simple byte of
+         text or control data.
+      -  ``KBD_RELEASE`` (1)**: Indicates a key release event.
+         The returned value in ``pch`` is the byte of text or
+         control data corresponding to the released key.
+      -  ``KBD_SPECPRESS`` (2)**: Indicates the successful
+         receipt of a special keyboard command. The returned value
+         in ``pch`` is a value from ``enum kbd_getstate_s``.
+      -  ``KBD_SPECREL`` (3)**: Indicates a special command key
+         release event. The returned value in ``pch`` is a value
+         from ``enum kbd_getstate_s``.
+      -  ``KBD_ERROR`` (``EOF``)**: An error has getting the
+         next character (reported by the ``stream``). Normally
+         indicates the end of file.
+
+**I/O Streams**. Notice the use of the abstract I/O streams in
+these interfaces. These stream interfaces are defined in
+``include/nuttx/streams.h``.
+
+
diff --git a/content/docs/latest/_sources/components/drivers/character/pwm.rst.txt b/content/docs/latest/_sources/components/drivers/character/pwm.rst.txt
new file mode 100644
index 0000000..918c0c1
--- /dev/null
+++ b/content/docs/latest/_sources/components/drivers/character/pwm.rst.txt
@@ -0,0 +1,34 @@
+===========
+PWM Drivers
+===========
+
+For the purposes of this driver, a PWM device is any device that
+generates periodic output pulses of controlled frequency and pulse
+width. Such a device might be used, for example, to perform
+pulse-width modulated output or frequency/pulse-count modulated
+output (such as might be needed to control a stepper motor).
+
+The NuttX PWM driver is split into two parts:
+
+#. An "upper half", generic driver that provides the common PWM
+   interface to application level code, and
+#. A "lower half", platform-specific driver that implements the
+   low-level timer controls to implement the PWM functionality.
+
+Files supporting PWM can be found in the following locations:
+
+-  **Interface Definition**. The header file for the NuttX PWM
+   driver reside at ``include/nuttx/timers/pwm.h``. This header
+   file includes both the application level interface to the PWM
+   driver as well as the interface between the "upper half" and
+   "lower half" drivers. The PWM module uses a standard character
+   driver framework. However, since the PWM driver is a devices
+   control interface and not a data transfer interface, the
+   majority of the functionality available to the application is
+   implemented in driver ioctl calls.
+-  **"Upper Half" Driver**. The generic, "upper half" PWM driver
+   resides at ``drivers/pwm.c``.
+-  **"Lower Half" Drivers**. Platform-specific PWM drivers reside
+   in ``arch/``\ *<architecture>*\ ``/src/``\ *<hardware>*
+   directory for the specific processor *<architecture>* and for
+   the specific *<chip>* PWM peripheral devices.
diff --git a/content/docs/latest/_sources/components/drivers/character/quadrature.rst.txt b/content/docs/latest/_sources/components/drivers/character/quadrature.rst.txt
new file mode 100644
index 0000000..51d5372
--- /dev/null
+++ b/content/docs/latest/_sources/components/drivers/character/quadrature.rst.txt
@@ -0,0 +1,29 @@
+Quadrature Encoder Drivers
+==========================
+
+NuttX supports a low-level, two-part Quadrature Encoder driver.
+
+#. An "upper half", generic driver that provides the common
+   Quadrature Encoder interface to application level code, and
+#. A "lower half", platform-specific driver that implements the
+   low-level timer controls to implement the Quadrature Encoder
+   functionality.
+
+Files supporting the Quadrature Encoder can be found in the
+following locations:
+
+-  **Interface Definition**. The header file for the NuttX
+   Quadrature Encoder driver reside at
+   ``include/nuttx/sensors/qencoder.h``. This header file includes
+   both the application level interface to the Quadrature Encoder
+   driver as well as the interface between the "upper half" and
+   "lower half" drivers. The Quadrature Encoder module uses a
+   standard character driver framework.
+-  **"Upper Half" Driver**. The generic, "upper half" Quadrature
+   Encoder driver resides at ``drivers/sensors/qencoder.c``.
+-  **"Lower Half" Drivers**. Platform-specific Quadrature Encoder
+   drivers reside in
+   ``arch/``\ *<architecture>*\ ``/src/``\ *<hardware>* directory
+   for the specific processor *<architecture>* and for the
+   specific *<chip>* Quadrature Encoder peripheral devices.
+
diff --git a/content/docs/latest/_sources/components/drivers/character/rtc.rst.txt b/content/docs/latest/_sources/components/drivers/character/rtc.rst.txt
new file mode 100644
index 0000000..f913e45
--- /dev/null
+++ b/content/docs/latest/_sources/components/drivers/character/rtc.rst.txt
@@ -0,0 +1,25 @@
+RTC Drivers
+===========
+
+NuttX supports a low-level, two-part RealTime Clock (RTC) driver.
+
+#. An "upper half", generic driver that provides the common RTC
+   interface to application level code, and
+#. A "lower half", platform-specific driver that implements the
+   low-level timer controls to implement the RTC functionality.
+
+Files supporting the RTC driver can be found in the following
+locations:
+
+-  **Interface Definition**. The header file for the NuttX RTC
+   driver reside at ``include/nuttx/timers/rtc.h``. This header
+   file includes both the application level interface to the RTC
+   driver as well as the interface between the "upper half" and
+   "lower half" drivers. The RTC driver uses a standard character
+   driver framework.
+-  **"Upper Half" Driver**. The generic, "upper half" RTC driver
+   resides at ``drivers/timers/rtc.c``.
+-  **"Lower Half" Drivers**. Platform-specific RTC drivers reside
+   in ``arch/``\ *<architecture>*\ ``/src/``\ *<hardware>*
+   directory for the specific processor *<architecture>* and for
+   the specific *<chip>* RTC peripheral devices.
diff --git a/content/docs/latest/_sources/components/drivers/character/serial.rst.txt b/content/docs/latest/_sources/components/drivers/character/serial.rst.txt
new file mode 100644
index 0000000..2d1f5eb
--- /dev/null
+++ b/content/docs/latest/_sources/components/drivers/character/serial.rst.txt
@@ -0,0 +1,29 @@
+=====================
+Serial Device Drivers
+=====================
+
+-  ``include/nuttx/serial/serial.h``. All structures and APIs
+   needed to work with serial drivers are provided in this header
+   file.
+
+-  ``struct uart_ops_s``. Each serial device driver must
+   implement an instance of ``struct uart_ops_s``. That structure
+   defines a call table with the following methods:
+
+-  ``int uart_register(FAR const char *path, FAR uart_dev_t *dev);``.
+   A serial driver may register itself by calling
+   ``uart_register()``, passing it the ``path`` where it will
+   appear in the `pseudo-file-system <#NxFileSystem>`__ and it's
+   initialized instance of ``struct uart_ops_s``. By convention,
+   serial device drivers are registered at paths like
+   ``/dev/ttyS0``, ``/dev/ttyS1``, etc. See the
+   ``uart_register()`` implementation in ``drivers/serial.c``.
+
+-  **User Access**. Serial drivers are, ultimately, normal
+   `character drivers <#chardrivers>`__ and are accessed as other
+   character drivers.
+
+-  **Examples**: ``arch/arm/src/stm32/stm32_serial.c``,
+   ``arch/arm/src/lpc214x/lpc214x_serial.c``,
+   ``arch/z16/src/z16f/z16f_serial.c``, etc.
+
diff --git a/content/docs/latest/_sources/components/drivers/character/timer.rst.txt b/content/docs/latest/_sources/components/drivers/character/timer.rst.txt
new file mode 100644
index 0000000..6f2a90e
--- /dev/null
+++ b/content/docs/latest/_sources/components/drivers/character/timer.rst.txt
@@ -0,0 +1,18 @@
+Timer Drivers
+=============
+
+Files supporting the timer driver can be found in the following
+locations:
+
+-  **Interface Definition**. The header file for the NuttX timer
+   driver reside at ``include/nuttx/timers/timer.h``. This header
+   file includes both the application level interface to the timer
+   driver as well as the interface between the "upper half" and
+   "lower half" drivers. The timer driver uses a standard
+   character driver framework.
+-  **"Upper Half" Driver**. The generic, "upper half" timer driver
+   resides at ``drivers/timers/timer.c``.
+-  **"Lower Half" Drivers**. Platform-specific timer drivers
+   reside in ``arch/``\ *<architecture>*\ ``/src/``\ *<hardware>*
+   directory for the specific processor *<architecture>* and for
+   the specific *<chip>* timer peripheral devices.
diff --git a/content/docs/latest/_sources/components/drivers/character/touchscreen.rst.txt b/content/docs/latest/_sources/components/drivers/character/touchscreen.rst.txt
new file mode 100644
index 0000000..70876d5
--- /dev/null
+++ b/content/docs/latest/_sources/components/drivers/character/touchscreen.rst.txt
@@ -0,0 +1,38 @@
+==========================
+Touchscreen Device Drivers
+==========================
+
+NuttX supports a two-part touchscreen driver architecture.
+
+#. An "upper half", generic driver that provides the common
+   touchscreen interface to application level code, and
+#. A "lower half", platform-specific driver that implements the
+   low-level touchscreen controls to implement the touchscreen
+   functionality.
+
+Files supporting the touchscreen controller (TSC) driver can be
+found in the following locations:
+
+-  **Interface Definition**. The header files for NuttX
+   touchscreen drivers reside in the
+   ``include/nuttx/include/input`` directory. The interface
+   between the touchscreen controller "upper half" and "lower
+   half" drivers are *not* common, but vary from
+   controller-to-controller. Because of this, each touchscreen
+   driver has its own unique header file that describes the "upper
+   half"/"lower half" interface in that directory. The application
+   level interface to each touchscreen driver, on the other hand,
+   *is* the same for each touchscreen driver and is described
+   ``include/nuttx/include/input/touchscreen.h``. The touchscreen
+   driver uses a standard character driver framework but read
+   operations return specially formatted data.
+-  **"Upper Half" Driver**. The controller-specific, "upper half"
+   touchscreen drivers reside in the directory ``drivers/input``.
+-  **"Lower Half" Drivers**. Platform-specific touchscreen drivers
+   reside in either: (1) The
+   ``arch/``\ *<architecture>*\ ``/src/``\ *<hardware>* directory
+   for the processor architectures that have build in touchscreen
+   controllers or (2) the
+   ``boards/``\ *<arch>*\ ``/``\ *<chip>*\ ``/``\ *<board>*\ ``/src/``
+   directory for boards that use an external touchscreen
+   controller chip.
diff --git a/content/docs/latest/_sources/components/drivers/character/watchdog.rst.txt b/content/docs/latest/_sources/components/drivers/character/watchdog.rst.txt
new file mode 100644
index 0000000..94a28c9
--- /dev/null
+++ b/content/docs/latest/_sources/components/drivers/character/watchdog.rst.txt
@@ -0,0 +1,29 @@
+======================
+Watchdog Timer Drivers
+======================
+
+NuttX supports a low-level, two-part watchdog timer driver.
+
+#. An "upper half", generic driver that provides the common
+   watchdog timer interface to application level code, and
+#. A "lower half", platform-specific driver that implements the
+   low-level timer controls to implement the watchdog timer
+   functionality.
+
+Files supporting the watchdog timer driver can be found in the
+following locations:
+
+-  **Interface Definition**. The header file for the NuttX
+   watchdog timer driver reside at
+   ``include/nuttx/timers/watchdog.h``. This header file includes
+   both the application level interface to the watchdog timer
+   driver as well as the interface between the "upper half" and
+   "lower half" drivers. The watchdog timer driver uses a standard
+   character driver framework.
+-  **"Upper Half" Driver**. The generic, "upper half" watchdog
+   timer driver resides at ``drivers/timers/watchdog.c``.
+-  **"Lower Half" Drivers**. Platform-specific watchdog timer
+   drivers reside in
+   ``arch/``\ *<architecture>*\ ``/src/``\ *<hardware>* directory
+   for the specific processor *<architecture>* and for the
+   specific *<chip>* watchdog timer peripheral devices.
diff --git a/content/docs/latest/_sources/components/drivers/index.rst.txt b/content/docs/latest/_sources/components/drivers/index.rst.txt
index 28af15d..5ccc1f0 100644
--- a/content/docs/latest/_sources/components/drivers/index.rst.txt
+++ b/content/docs/latest/_sources/components/drivers/index.rst.txt
@@ -2,940 +2,31 @@
 Device Drivers
 ==============
     
-NuttX supports a variety of device drivers including:
-
-  -  *Character* Device Drivers,
-  -  *Block* Device Drivers, and
-  -  Other *Specialized* Drivers.
-
-These different device driver types are discussed in the following
-paragraphs. Note: device driver support depends on the
-*in-memory*, *pseudo* file system that is enabled by default.
-
-Character Device Drivers
-************************
-
-Character device drivers have these properties:
-
--  ``include/nuttx/fs/fs.h``. All structures and APIs needed
-   to work with character drivers are provided in this header
-   file.
-
--  ``struct file_operations``. Each character device driver
-   must implement an instance of ``struct file_operations``. That
-   structure defines a call table with the following methods:
-
--  ``int register_driver(const char *path, const struct file_operations *fops, mode_t mode, void *priv);``.
-   Each character driver registers itself by calling
-   ``register_driver()``, passing it the ``path`` where it will
-   appear in the `pseudo-file-system <#NxFileSystem>`__ and it's
-   initialized instance of ``struct file_operations``.
-
--  **User Access**. After it has been registered, the character
-   driver can be accessed by user code using the standard `driver
-   operations <NuttxUserGuide.html#driveroperations>`__ including
-   ``open()``, ``close()``, ``read()``, ``write()``, etc.
-
--  **Specialized Character Drivers**. Within the common character
-   driver framework, there are different specific varieties of
-   *specialized* character drivers. The unique requirements of the
-   underlying device hardware often mandates some customization of
-   the character driver. These customizations tend to take the
-   form of:
-
-   -  Device-specific ``ioctl()`` commands used to performed
-      specialized operations on the device. These ``ioctl()`` will
-      be documented in header files under ``include/nuttx`` that
-      detail the specific device interface.
-   -  Specialized I/O formats. Some devices will require that
-      ``read()`` and/or ``write()`` operations use data conforming
-      to a specific format, rather than a plain stream of bytes.
-      These specialized I/O formats will be documented in header
-      files under ``include/nuttx`` that detail the specific
-      device interface. The typical representation of the I/O
-      format will be a C structure definition.
-
-   The specialized character drivers support by NuttX are
-   documented in the following paragraphs.
-
--  **Examples**: ``drivers/dev_null.c``, ``drivers/fifo.c``,
-   ``drivers/serial.c``, etc.
-
-Serial Device Drivers
-=====================
-
--  ``include/nuttx/serial/serial.h``. All structures and APIs
-   needed to work with serial drivers are provided in this header
-   file.
-
--  ``struct uart_ops_s``. Each serial device driver must
-   implement an instance of ``struct uart_ops_s``. That structure
-   defines a call table with the following methods:
-
--  ``int uart_register(FAR const char *path, FAR uart_dev_t *dev);``.
-   A serial driver may register itself by calling
-   ``uart_register()``, passing it the ``path`` where it will
-   appear in the `pseudo-file-system <#NxFileSystem>`__ and it's
-   initialized instance of ``struct uart_ops_s``. By convention,
-   serial device drivers are registered at paths like
-   ``/dev/ttyS0``, ``/dev/ttyS1``, etc. See the
-   ``uart_register()`` implementation in ``drivers/serial.c``.
-
--  **User Access**. Serial drivers are, ultimately, normal
-   `character drivers <#chardrivers>`__ and are accessed as other
-   character drivers.
-
--  **Examples**: ``arch/arm/src/stm32/stm32_serial.c``,
-   ``arch/arm/src/lpc214x/lpc214x_serial.c``,
-   ``arch/z16/src/z16f/z16f_serial.c``, etc.
-
-Touchscreen Device Drivers
-==========================
-
-NuttX supports a two-part touchscreen driver architecture.
-
-#. An "upper half", generic driver that provides the common
-   touchscreen interface to application level code, and
-#. A "lower half", platform-specific driver that implements the
-   low-level touchscreen controls to implement the touchscreen
-   functionality.
-
-Files supporting the touchscreen controller (TSC) driver can be
-found in the following locations:
-
--  **Interface Definition**. The header files for NuttX
-   touchscreen drivers reside in the
-   ``include/nuttx/include/input`` directory. The interface
-   between the touchscreen controller "upper half" and "lower
-   half" drivers are *not* common, but vary from
-   controller-to-controller. Because of this, each touchscreen
-   driver has its own unique header file that describes the "upper
-   half"/"lower half" interface in that directory. The application
-   level interface to each touchscreen driver, on the other hand,
-   *is* the same for each touchscreen driver and is described
-   ``include/nuttx/include/input/touchscreen.h``. The touchscreen
-   driver uses a standard character driver framework but read
-   operations return specially formatted data.
--  **"Upper Half" Driver**. The controller-specific, "upper half"
-   touchscreen drivers reside in the directory ``drivers/input``.
--  **"Lower Half" Drivers**. Platform-specific touchscreen drivers
-   reside in either: (1) The
-   ``arch/``\ *<architecture>*\ ``/src/``\ *<hardware>* directory
-   for the processor architectures that have build in touchscreen
-   controllers or (2) the
-   ``boards/``\ *<arch>*\ ``/``\ *<chip>*\ ``/``\ *<board>*\ ``/src/``
-   directory for boards that use an external touchscreen
-   controller chip.
-
-Analog (ADC/DAC) Drivers
-========================
-
-The NuttX analog drivers are split into two parts:
-
-#. An "upper half", generic driver that provides the common analog
-   interface to application level code, and
-#. A "lower half", platform-specific driver that implements the
-   low-level controls to implement the analog functionality.
-
--  General header files for the NuttX analog drivers reside in
-   ``include/nuttx/analog/``. These header files includes both the
-   application level interface to the analog driver as well as the
-   interface between the "upper half" and "lower half" drivers.
--  Common analog logic and share-able analog drivers reside in the
-   ``drivers/analog/``.
--  Platform-specific drivers reside in
-   ``arch/``\ *<architecture>*\ ``/src/``\ *<hardware>* directory
-   for the specific processor *<architecture>* and for the
-   specific *<chip>* analog peripheral devices.
-
-ADC Drivers
------------
-
--  ``include/nuttx/analog/adc.h``. All structures and APIs needed
-   to work with ADC drivers are provided in this header file. This
-   header file includes:
-
-   #. Structures and interface descriptions needed to develop a
-      low-level, architecture-specific, ADC driver.
-   #. To register the ADC driver with a common ADC character
-      driver.
-   #. Interfaces needed for interfacing user programs with the
-      common ADC character driver.
-
--  ``drivers/analog/adc.c``. The implementation of the common ADC
-   character driver.
-
-DAC Drivers
------------
-
--  ``include/nuttx/analog/dac.h``. All structures and APIs needed
-   to work with DAC drivers are provided in this header file. This
-   header file includes:
-
-   #. Structures and interface descriptions needed to develop a
-      low-level, architecture-specific, DAC driver.
-   #. To register the DAC driver with a common DAC character
-      driver.
-   #. Interfaces needed for interfacing user programs with the
-      common DAC character driver.
-
--  ``drivers/analog/dac.c``. The implementation of the common DAC
-   character driver.
-
-PWM Drivers
-===========
-
-For the purposes of this driver, a PWM device is any device that
-generates periodic output pulses of controlled frequency and pulse
-width. Such a device might be used, for example, to perform
-pulse-width modulated output or frequency/pulse-count modulated
-output (such as might be needed to control a stepper motor).
-
-The NuttX PWM driver is split into two parts:
-
-#. An "upper half", generic driver that provides the common PWM
-   interface to application level code, and
-#. A "lower half", platform-specific driver that implements the
-   low-level timer controls to implement the PWM functionality.
-
-Files supporting PWM can be found in the following locations:
-
--  **Interface Definition**. The header file for the NuttX PWM
-   driver reside at ``include/nuttx/timers/pwm.h``. This header
-   file includes both the application level interface to the PWM
-   driver as well as the interface between the "upper half" and
-   "lower half" drivers. The PWM module uses a standard character
-   driver framework. However, since the PWM driver is a devices
-   control interface and not a data transfer interface, the
-   majority of the functionality available to the application is
-   implemented in driver ioctl calls.
--  **"Upper Half" Driver**. The generic, "upper half" PWM driver
-   resides at ``drivers/pwm.c``.
--  **"Lower Half" Drivers**. Platform-specific PWM drivers reside
-   in ``arch/``\ *<architecture>*\ ``/src/``\ *<hardware>*
-   directory for the specific processor *<architecture>* and for
-   the specific *<chip>* PWM peripheral devices.
-
-CAN Drivers
-===========
-
-NuttX supports only a very low-level CAN driver. This driver
-supports only the data exchange and does not include any
-high-level CAN protocol. The NuttX CAN driver is split into two
-parts:
-
-#. An "upper half", generic driver that provides the common CAN
-   interface to application level code, and
-#. A "lower half", platform-specific driver that implements the
-   low-level timer controls to implement the CAN functionality.
-
-Files supporting CAN can be found in the following locations:
-
--  **Interface Definition**. The header file for the NuttX CAN
-   driver resides at ``include/nuttx/can/can.h``. This header file
-   includes both the application level interface to the CAN driver
-   as well as the interface between the "upper half" and "lower
-   half" drivers. The CAN module uses a standard character driver
-   framework.
--  **"Upper Half" Driver**. The generic, "upper half" CAN driver
-   resides at ``drivers/can.c``.
--  **"Lower Half" Drivers**. Platform-specific CAN drivers reside
-   in ``arch/``\ *<architecture>*\ ``/src/``\ *<hardware>*
-   directory for the specific processor *<architecture>* and for
-   the specific *<chip>* CAN peripheral devices.
-
-**Usage Note**: When reading from the CAN driver multiple messages
-may be returned, depending on (1) the size the returned can
-messages, and (2) the size of the buffer provided to receive CAN
-messages. *Never assume that a single message will be returned*...
-if you do this, *you will lose CAN data* under conditions where
-your read buffer can hold more than one small message. Below is an
-example about how you should think of the CAN read operation:
-
-Quadrature Encoder Drivers
-==========================
-
-NuttX supports a low-level, two-part Quadrature Encoder driver.
-
-#. An "upper half", generic driver that provides the common
-   Quadrature Encoder interface to application level code, and
-#. A "lower half", platform-specific driver that implements the
-   low-level timer controls to implement the Quadrature Encoder
-   functionality.
-
-Files supporting the Quadrature Encoder can be found in the
-following locations:
-
--  **Interface Definition**. The header file for the NuttX
-   Quadrature Encoder driver reside at
-   ``include/nuttx/sensors/qencoder.h``. This header file includes
-   both the application level interface to the Quadrature Encoder
-   driver as well as the interface between the "upper half" and
-   "lower half" drivers. The Quadrature Encoder module uses a
-   standard character driver framework.
--  **"Upper Half" Driver**. The generic, "upper half" Quadrature
-   Encoder driver resides at ``drivers/sensors/qencoder.c``.
--  **"Lower Half" Drivers**. Platform-specific Quadrature Encoder
-   drivers reside in
-   ``arch/``\ *<architecture>*\ ``/src/``\ *<hardware>* directory
-   for the specific processor *<architecture>* and for the
-   specific *<chip>* Quadrature Encoder peripheral devices.
-
-Timer Drivers
-=============
-
-NuttX supports a low-level, two-part timer driver.
-
-#. An "upper half", generic driver that provides the common timer
-   interface to application level code, and
-#. A "lower half", platform-specific driver that implements the
-   low-level timer controls to implement the timer functionality.
-
-Files supporting the timer driver can be found in the following
-locations:
-
--  **Interface Definition**. The header file for the NuttX timer
-   driver reside at ``include/nuttx/timers/timer.h``. This header
-   file includes both the application level interface to the timer
-   driver as well as the interface between the "upper half" and
-   "lower half" drivers. The timer driver uses a standard
-   character driver framework.
--  **"Upper Half" Driver**. The generic, "upper half" timer driver
-   resides at ``drivers/timers/timer.c``.
--  **"Lower Half" Drivers**. Platform-specific timer drivers
-   reside in ``arch/``\ *<architecture>*\ ``/src/``\ *<hardware>*
-   directory for the specific processor *<architecture>* and for
-   the specific *<chip>* timer peripheral devices.
-
-RTC Drivers
-===========
-
-NuttX supports a low-level, two-part RealTime Clock (RTC) driver.
-
-#. An "upper half", generic driver that provides the common RTC
-   interface to application level code, and
-#. A "lower half", platform-specific driver that implements the
-   low-level timer controls to implement the RTC functionality.
-
-Files supporting the RTC driver can be found in the following
-locations:
-
--  **Interface Definition**. The header file for the NuttX RTC
-   driver reside at ``include/nuttx/timers/rtc.h``. This header
-   file includes both the application level interface to the RTC
-   driver as well as the interface between the "upper half" and
-   "lower half" drivers. The RTC driver uses a standard character
-   driver framework.
--  **"Upper Half" Driver**. The generic, "upper half" RTC driver
-   resides at ``drivers/timers/rtc.c``.
--  **"Lower Half" Drivers**. Platform-specific RTC drivers reside
-   in ``arch/``\ *<architecture>*\ ``/src/``\ *<hardware>*
-   directory for the specific processor *<architecture>* and for
-   the specific *<chip>* RTC peripheral devices.
-
-Watchdog Timer Drivers
-======================
-
-NuttX supports a low-level, two-part watchdog timer driver.
-
-#. An "upper half", generic driver that provides the common
-   watchdog timer interface to application level code, and
-#. A "lower half", platform-specific driver that implements the
-   low-level timer controls to implement the watchdog timer
-   functionality.
-
-Files supporting the watchdog timer driver can be found in the
-following locations:
-
--  **Interface Definition**. The header file for the NuttX
-   watchdog timer driver reside at
-   ``include/nuttx/timers/watchdog.h``. This header file includes
-   both the application level interface to the watchdog timer
-   driver as well as the interface between the "upper half" and
-   "lower half" drivers. The watchdog timer driver uses a standard
-   character driver framework.
--  **"Upper Half" Driver**. The generic, "upper half" watchdog
-   timer driver resides at ``drivers/timers/watchdog.c``.
--  **"Lower Half" Drivers**. Platform-specific watchdog timer
-   drivers reside in
-   ``arch/``\ *<architecture>*\ ``/src/``\ *<hardware>* directory
-   for the specific processor *<architecture>* and for the
-   specific *<chip>* watchdog timer peripheral devices.
-
-Keyboard/Keypad Drivers
-=======================
-
-**Keypads vs. Keyboards** Keyboards and keypads are really the
-same devices for NuttX. A keypad is thought of as simply a
-keyboard with fewer keys.
-
-**Special Commands**. In NuttX, a keyboard/keypad driver is simply
-a character driver that may have an (optional) encoding/decoding
-layer on the data returned by the character driver. A keyboard may
-return simple text data (alphabetic, numeric, and punctuation) or
-control characters (enter, control-C, etc.) when a key is pressed.
-We can think about this the "normal" keyboard data stream.
-However, in addition, most keyboards support actions that cannot
-be represented as text or control data. Such actions include
-things like cursor controls (home, up arrow, page down, etc.),
-editing functions (insert, delete, etc.), volume controls, (mute,
-volume up, etc.) and other special functions. In this case, some
-special encoding may be required to multiplex the normal text data
-and special command key press data streams.
-
-**Key Press and Release Events** Sometimes the time that a key is
-released is needed by applications as well. Thus, in addition to
-normal and special key press events, it may also be necessary to
-encode normal and special key release events.
-
-**Encoding/Decoding** Layer. An optional encoding/decoding layer
-can be used with the basic character driver to encode the keyboard
-events into the text data stream. The function interfaces that
-comprise that encoding/decoding layer are defined in the header
-file ``include/nuttx/input/kbd_code.h``. These functions provide
-an matched set of (a) driver encoding interfaces, and (b)
-application decoding interfaces.
-
-#. **Driver Encoding Interfaces**. These are interfaces used by
-   the keyboard/keypad driver to encode keyboard events and data.
-
-   -  ``kbd_press()``
-
-      **Function Prototype:**
-
-      **Description:**
-
-      **Input Parameters:**
-
-      -  ``ch``: The character to be added to the output stream.
-      -  ``stream``: An instance of ``lib_outstream_s`` to perform
-         the actual low-level put operation.
-
-      **Returned Value:**
-
-   -  ``kbd_release()``
-
-      **Function Prototype:**
-
-      **Description:**
-
-      **Input Parameters:**
-
-      -  ``ch``: The character associated with the key that was
-         released.
-      -  ``stream``: An instance of ``lib_outstream_s`` to perform
-         the actual low-level put operation.
-
-      **Returned Value:**
-
-   -  ``kbd_specpress()``
-
-      **Function Prototype:**
-
-      **Description:**
-
-      **Input Parameters:**
-
-      -  ``keycode``: The command to be added to the output
-         stream. The enumeration ``enum kbd_keycode_e keycode``
-         identifies all commands known to the system.
-      -  ``stream``: An instance of ``lib_outstream_s`` to perform
-         the actual low-level put operation.
-
-      **Returned Value:**
-
-   -  ``kbd_specrel()``
-
-      **Function Prototype:**
-
-      **Description:**
-
-      **Input Parameters:**
-
-      -  ``keycode``: The command to be added to the output
-         stream. The enumeration ``enum kbd_keycode_e keycode``
-         identifies all commands known to the system.
-      -  ``stream``: An instance of ``lib_outstream_s`` to perform
-         the actual low-level put operation.
-
-      **Returned Value:**
-
-#. **Application Decoding Interfaces**. These are user interfaces
-   to decode the values returned by the keyboard/keypad driver.
-
-   -  ``kbd_decode()``
-
-      **Function Prototype:**
-
-      **Description:**
-
-      **Input Parameters:**
-
-      -  ``stream``: An instance of ``lib_instream_s`` to perform
-         the actual low-level get operation.
-      -  ``pch``: The location to save the returned value. This
-         may be either a normal, character code or a special
-         command (i.e., a value from ``enum kbd_getstate_s``.
-      -  ``state``: A user provided buffer to support parsing.
-         This structure should be cleared the first time that
-         ``kbd_decode()`` is called.
-
-      **Returned Value:**
-
-      -  ``KBD_PRESS`` (0)**: Indicates the successful receipt
-         of normal, keyboard data. This corresponds to a keypress
-         event. The returned value in ``pch`` is a simple byte of
-         text or control data.
-      -  ``KBD_RELEASE`` (1)**: Indicates a key release event.
-         The returned value in ``pch`` is the byte of text or
-         control data corresponding to the released key.
-      -  ``KBD_SPECPRESS`` (2)**: Indicates the successful
-         receipt of a special keyboard command. The returned value
-         in ``pch`` is a value from ``enum kbd_getstate_s``.
-      -  ``KBD_SPECREL`` (3)**: Indicates a special command key
-         release event. The returned value in ``pch`` is a value
-         from ``enum kbd_getstate_s``.
-      -  ``KBD_ERROR`` (``EOF``)**: An error has getting the
-         next character (reported by the ``stream``). Normally
-         indicates the end of file.
-
-**I/O Streams**. Notice the use of the abstract I/O streams in
-these interfaces. These stream interfaces are defined in
-``include/nuttx/streams.h``.
-
-Block Device Drivers
-********************
-
-Block device drivers have these properties:
-
--  ``include/nuttx/fs/fs.h``. All structures and APIs needed
-   to work with block drivers are provided in this header file.
-
--  ``struct block_operations``. Each block device driver must
-   implement an instance of ``struct block_operations``. That
-   structure defines a call table with the following methods:
-
--  ``int register_blockdriver(const char *path, const struct block_operations *bops, mode_t mode, void *priv);``.
-   Each block driver registers itself by calling
-   ``register_blockdriver()``, passing it the ``path`` where it
-   will appear in the `pseudo-file-system <#NxFileSystem>`__ and
-   it's initialized instance of ``struct block_operations``.
-
--  **User Access**. Users do not normally access block drivers
-   directly, rather, they access block drivers indirectly through
-   the ``mount()`` API. The ``mount()`` API binds a block driver
-   instance with a file system and with a mountpoint. Then the
-   user may use the block driver to access the file system on the
-   underlying media. *Example*: See the ``cmd_mount()``
-   implementation in ``apps/nshlib/nsh_fscmds.c``.
-
--  **Accessing a Character Driver as a Block Device**. See the
-   loop device at ``drivers/loop.c``. *Example*: See the
-   ``cmd_losetup()`` implementation in
-   ``apps/nshlib/nsh_fscmds.c``.
-
--  **Accessing a Block Driver as Character Device**. See the
-   Block-to-Character (BCH) conversion logic in ``drivers/bch/``.
-   *Example*: See the ``cmd_dd()`` implementation in
-   ``apps/nshlib/nsh_ddcmd.c``.
-
--  **Examples**. ``drivers/loop.c``,
-   ``drivers/mmcsd/mmcsd_spi.c``, ``drivers/ramdisk.c``, etc.
-
-Specialized Device Drivers
-**************************
-
-All device drivers that are accessible to application logic are
-either: (1) Character device drivers that can be accessed via the
-standard driver operations (``open()``, ``close()``, ``read()``,
-``write()``, etc.), or (2) block drivers that can be accessing
-only as part of mounting a file system or other special use cases
-as described in the preceding paragraph.
-
-In addition to this, there are also specialized "drivers" that can
-be used only within the OS logic itself and are not accessible to
-application logic. These specialized drivers are discussed in the
-following paragraphs.
-
-Ethernet Device Drivers
-=======================
-
--  ``include/nuttx/net/netdev.h``. All structures and APIs
-   needed to work with Ethernet drivers are provided in this
-   header file. The structure ``struct net_driver_s`` defines the
-   interface and is passed to the network via
-   ``netdev_register()``.
-
--  ``int netdev_register(FAR struct net_driver_s *dev, enum net_lltype_e lltype);``.
-   Each Ethernet driver registers itself by calling
-   ``netdev_register()``.
-
--  **Examples**: ``drivers/net/dm90x0.c``,
-   ``arch/drivers/arm/src/c5471/c5471_ethernet.c``,
-   ``arch/z80/src/ez80/ez80_emac.c``, etc.
-
-SPI Device Drivers
-==================
-
--  ``include/nuttx/spi/spi.h``. All structures and APIs needed
-   to work with SPI drivers are provided in this header file.
-
--  ``struct spi_ops_s``. Each SPI device driver must implement
-   an instance of ``struct spi_ops_s``. That structure defines a
-   call table with the following methods:
-
--  **Binding SPI Drivers**. SPI drivers are not normally directly
-   accessed by user code, but are usually bound to another, higher
-   level device driver. See for example,
-   ``int mmcsd_spislotinitialize(int minor, int slotno, FAR struct spi_dev_s *spi)``
-   in ``drivers/mmcsd/mmcsd_spi.c``. In general, the binding
-   sequence is:
-
-   #. Get an instance of ``struct spi_dev_s`` from the
-      hardware-specific SPI device driver, and
-   #. Provide that instance to the initialization method of the
-      higher level device driver.
-
--  **Examples**: ``drivers/loop.c``,
-   ``drivers/mmcsd/mmcsd_spi.c``, ``drivers/ramdisk.c``, etc.
-
-I2C Device Drivers
-==================
-
--  ``include/nuttx/i2c/i2c.h``. All structures and APIs needed
-   to work with I2C drivers are provided in this header file.
-
--  ``struct i2c_ops_s``. Each I2C device driver must implement
-   an instance of ``struct i2c_ops_s``. That structure defines a
-   call table with the following methods:
-
--  **Binding I2C Drivers**. I2C drivers are not normally directly
-   accessed by user code, but are usually bound to another, higher
-   level device driver. In general, the binding sequence is:
-
-   #. Get an instance of ``struct i2c_master_s`` from the
-      hardware-specific I2C device driver, and
-   #. Provide that instance to the initialization method of the
-      higher level device driver.
-
--  **Examples**: ``arch/z80/src/ez80/ez80_i2c.c``,
-   ``arch/z80/src/z8/z8_i2c.c``, etc.
-
-Frame Buffer Drivers
-====================
-
--  ``include/nuttx/video/fb.h``. All structures and APIs
-   needed to work with frame buffer drivers are provided in this
-   header file.
-
--  ``struct fb_vtable_s``. Each frame buffer device driver
-   must implement an instance of ``struct fb_vtable_s``. That
-   structure defines a call table with the following methods:
-
-   Get information about the video controller configuration and
-   the configuration of each color plane.
-
-   The following are provided only if the video hardware supports
-   RGB color mapping:
-
-   The following are provided only if the video hardware supports
-   a hardware cursor:
-
--  **Binding Frame Buffer Drivers**. Frame buffer drivers are not
-   normally directly accessed by user code, but are usually bound
-   to another, higher level device driver. In general, the binding
-   sequence is:
-
-   #. Get an instance of ``struct fb_vtable_s`` from the
-      hardware-specific frame buffer device driver, and
-   #. Provide that instance to the initialization method of the
-      higher level device driver.
-
--  **Examples**: ``arch/sim/src/up_framebuffer.c``. See also the
-   usage of the frame buffer driver in the ``graphics/``
-   directory.
-
-LCD Drivers
-===========
-
--  ``include/nuttx/lcd/lcd.h``. Structures and APIs needed to
-   work with LCD drivers are provided in this header file. This
-   header file also depends on some of the same definitions used
-   for the frame buffer driver as provided in
-   ``include/nuttx/video/fb.h``.
-
--  ``struct lcd_dev_s``. Each LCD device driver must implement
-   an instance of ``struct lcd_dev_s``. That structure defines a
-   call table with the following methods:
-
-   Get information about the LCD video controller configuration
-   and the configuration of each LCD color plane.
-
-   The following are provided only if the video hardware supports
-   RGB color mapping:
-
-   The following are provided only if the video hardware supports
-   a hardware cursor:
-
-   Get the LCD panel power status (0: full off -
-   ``CONFIG_LCD_MAXPOWER``: full on). On backlit LCDs, this
-   setting may correspond to the backlight setting.
-
-   Enable/disable LCD panel power (0: full off -
-   ``CONFIG_LCD_MAXPOWER``: full on). On backlit LCDs, this
-   setting may correspond to the backlight setting.
-
-   Get the current contrast setting (0-CONFIG_LCD_MAXCONTRAST) \*/
-
-   Set LCD panel contrast (0-CONFIG_LCD_MAXCONTRAST)
-
--  **Binding LCD Drivers**. LCD drivers are not normally directly
-   accessed by user code, but are usually bound to another, higher
-   level device driver. In general, the binding sequence is:
-
-   #. Get an instance of ``struct lcd_dev_s`` from the
-      hardware-specific LCD device driver, and
-   #. Provide that instance to the initialization method of the
-      higher level device driver.
-
--  **Examples**: ``drivers/lcd/p14201.c``,
-   ``boards/arm/sam34/sam3u-ek/src/up_lcd.c.`` See also the usage
-   of the LCD driver in the ``graphics/`` directory.
-
-Memory Technology Device Drivers
-================================
-
--  ``include/nuttx/mtd/mtd.h``. All structures and APIs needed
-   to work with MTD drivers are provided in this header file.
-
--  ``struct mtd_dev_s``. Each MTD device driver must implement
-   an instance of ``struct mtd_dev_s``. That structure defines a
-   call table with the following methods:
-
-   Erase the specified erase blocks (units are erase blocks):
-
-   Read/write from the specified read/write blocks:
-
-   Some devices may support byte oriented reads (optional). Most
-   MTD devices are inherently block oriented so byte-oriented
-   accesses are not supported. It is recommended that low-level
-   drivers not support read() if it requires buffering.
-
-   Some devices may also support byte oriented writes (optional).
-   Most MTD devices are inherently block oriented so byte-oriented
-   accesses are not supported. It is recommended that low-level
-   drivers not support read() if it requires buffering. This
-   interface is only available if ``CONFIG_MTD_BYTE_WRITE`` is
-   defined.
-
-   Support other, less frequently used commands:
-
-   -  ``MTDIOC_GEOMETRY``: Get MTD geometry
-   -  ``MTDIOC_XIPBASE:``: Convert block to physical address for
-      eXecute-In-Place
-   -  ``MTDIOC_BULKERASE``: Erase the entire device
-
-   is provided via a single ``ioctl`` method (see
-   ``include/nuttx/fs/ioctl.h``):
-
--  **Binding MTD Drivers**. MTD drivers are not normally directly
-   accessed by user code, but are usually bound to another, higher
-   level device driver. In general, the binding sequence is:
-
-   #. Get an instance of ``struct mtd_dev_s`` from the
-      hardware-specific MTD device driver, and
-   #. Provide that instance to the initialization method of the
-      higher level device driver.
-
--  **Examples**: ``drivers/mtd/m25px.c`` and ``drivers/mtd/ftl.c``
-
-SDIO Device Drivers
-===================
-
--  ``include/nuttx/sdio.h``. All structures and APIs needed to
-   work with SDIO drivers are provided in this header file.
-
--  ``struct sdio_dev_s``. Each SDIO device driver must
-   implement an instance of ``struct sdio_dev_s``. That structure
-   defines a call table with the following methods:
-
-   Mutual exclusion:
-
-   Initialization/setup:
-
-   Command/Status/Data Transfer:
-
-   Event/Callback support:
-
-   DMA support:
-
--  **Binding SDIO Drivers**. SDIO drivers are not normally
-   directly accessed by user code, but are usually bound to
-   another, higher level device driver. In general, the binding
-   sequence is:
-
-   #. Get an instance of ``struct sdio_dev_s`` from the
-      hardware-specific SDIO device driver, and
-   #. Provide that instance to the initialization method of the
-      higher level device driver.
-
--  **Examples**: ``arch/arm/src/stm32/stm32_sdio.c`` and
-   ``drivers/mmcsd/mmcsd_sdio.c``
-
-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`` and
-   ``struct usbhost_connection_s``. Each USB host controller
-   driver must implement an instance of
-   ``struct usbhost_driver_s`` and
-   ``struct usbhost_connection_s``: ``struct usbhost_driver_s``
-   provides the interface between the USB host driver and the USB
-   class driver; ``struct usbhost_connection_s`` provides the
-   interface between the USB host driver and platform-specific
-   connection management and device enumeration logic. These
-   structures are defined in ``include/nuttx/usb/usbhost.h``.
-
-   **Examples**: ``arch/arm/src/lpc17xx_40xx/lpc17_40_usbhost.c``,
-   ``arch/arm/src/stm32/stm32_otgfshost.c``,
-   ``arch/arm/src/sama5/sam_ohci.c``, and
-   ``arch/arm/src/sama5/sam_ehci.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 registry. 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):
-
-   -  ``int (*wait)(FAR struct usbhost_connection_s *drvr, FAR const bool *connected);``
-
-      Wait for a device to be connected or disconnected.
-
-   -  ``int (*enumerate)(FAR struct usbhost_connection_s *drvr, int rhpndx);``
-
-      Enumerate the device connected to a root hub port. 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:
-
-   #. 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_msc_initialize()`` in
-      the file ``drivers/usbhost/usbhost_storage.c``
-
-   #. 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
-      ``boards/arm/lpc17xx_40xx/olimex-lpc1766stk/src/lpc17_40_appinit.c``.
-
-   #. 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``.
-
-USB Device-Side Drivers
-=======================
-
--  ``include/nuttx/usb/usbdev.h``. All structures and APIs
-   needed to work with USB device-side drivers are provided in
-   this header file.
-
--  ``include/nuttx/usb/usbdev_trace.h``. Declarations needed
-   to work with the NuttX USB device driver trace capability. That
-   USB trace capability is detailed in `separate
-   document <UsbTrace.html>`__.
-
--  ``struct usbdev_s``. Each USB device controller driver must
-   implement an instance of ``struct usbdev_s``. This structure is
-   defined in ``include/nuttx/usb/usbdev.h``.
-
-   **Examples**: ``arch/arm/src/dm320/dm320_usbdev.c``,
-   ``arch/arm/src/lpc17xx_40xx/lpc17_40_usbdev.c``,
-   ``arch/arm/src/lpc214x/lpc214x_usbdev.c``,
-   ``arch/arm/src/lpc313x/lpc313x_usbdev.c``, and
-   ``arch/arm/src/stm32/stm32_usbdev.c``.
-
--  ``struct usbdevclass_driver_s``. Each USB device class
-   driver must implement an instance of
-   ``struct usbdevclass_driver_s``. This structure is also defined
-   in ``include/nuttx/usb/usbdev.h``.
-
-   **Examples**: ``drivers/usbdev/pl2303.c`` and
-   ``drivers/usbdev/usbmsc.c``
-
--  **Binding USB Device-Side Drivers**. USB device-side controller
-   drivers are not normally directly accessed by user code, but
-   are usually bound to another, higher level USB device class
-   driver. The class driver is then configured to export the USB
-   device functionality. In general, the binding sequence is:
-
-   #. Each USB device class driver includes an initialization
-      entry point that is called from the application at
-      initialization time.
-
-      **Examples**: The function ``usbdev_serialinitialize()`` in
-      the file ``drivers/usbdev/pl2303.c`` and the function
-      in the file ``drivers/usbdev/usbmsc.c``
-
-   #. These initialization functions called the driver API,
-      ``usbdev_register()``. This driver function will *bind* the
-      USB class driver to the USB device controller driver,
-      completing the initialization.
+NuttX supports a variety of device drivers, which can be broadly
+divided in three classes:
+
+.. toctree::
+  :maxdepth: 1
+
+  character/index.rst
+  block/index.rst
+  special/index.rst  
+  
+.. note::
+  Device driver support depends on the *in-memory*, *pseudo*
+  file system that is enabled by default.
+
+Lower-half and upper-half
+=========================
+
+Drivers in NuttX generally work in two distinct layers:
+
+  * An *upper half* which registers itself to NuttX using
+    a call such as :c:func:`register_driver` or
+    :c:func:`register_blockdriver` and implements the corresponding
+    high-level interface (`read`, `write`, `close`, etc.).
+    implements the interface. This *upper half* calls into
+    the *lower half* via callbacks.
+  * A "lower half" which is typically hardware-specific. This is
+    usually implemented at the architecture or board level.
 
diff --git a/content/docs/latest/_sources/components/drivers/special/ethernet.rst.txt b/content/docs/latest/_sources/components/drivers/special/ethernet.rst.txt
new file mode 100644
index 0000000..a8f371a
--- /dev/null
+++ b/content/docs/latest/_sources/components/drivers/special/ethernet.rst.txt
@@ -0,0 +1,17 @@
+=======================
+Ethernet Device Drivers
+=======================
+
+-  ``include/nuttx/net/netdev.h``. All structures and APIs
+   needed to work with Ethernet drivers are provided in this
+   header file. The structure ``struct net_driver_s`` defines the
+   interface and is passed to the network via
+   ``netdev_register()``.
+
+-  ``int netdev_register(FAR struct net_driver_s *dev, enum net_lltype_e lltype);``.
+   Each Ethernet driver registers itself by calling
+   ``netdev_register()``.
+
+-  **Examples**: ``drivers/net/dm90x0.c``,
+   ``arch/drivers/arm/src/c5471/c5471_ethernet.c``,
+   ``arch/z80/src/ez80/ez80_emac.c``, etc.
diff --git a/content/docs/latest/_sources/components/drivers/special/framebuffer.rst.txt b/content/docs/latest/_sources/components/drivers/special/framebuffer.rst.txt
new file mode 100644
index 0000000..aefa7d1
--- /dev/null
+++ b/content/docs/latest/_sources/components/drivers/special/framebuffer.rst.txt
@@ -0,0 +1,34 @@
+====================
+Frame Buffer Drivers
+====================
+
+-  ``include/nuttx/video/fb.h``. All structures and APIs
+   needed to work with frame buffer drivers are provided in this
+   header file.
+
+-  ``struct fb_vtable_s``. Each frame buffer device driver
+   must implement an instance of ``struct fb_vtable_s``. That
+   structure defines a call table with the following methods:
+
+   Get information about the video controller configuration and
+   the configuration of each color plane.
+
+   The following are provided only if the video hardware supports
+   RGB color mapping:
+
+   The following are provided only if the video hardware supports
+   a hardware cursor:
+
+-  **Binding Frame Buffer Drivers**. Frame buffer drivers are not
+   normally directly accessed by user code, but are usually bound
+   to another, higher level device driver. In general, the binding
+   sequence is:
+
+   #. Get an instance of ``struct fb_vtable_s`` from the
+      hardware-specific frame buffer device driver, and
+   #. Provide that instance to the initialization method of the
+      higher level device driver.
+
+-  **Examples**: ``arch/sim/src/up_framebuffer.c``. See also the
+   usage of the frame buffer driver in the ``graphics/``
+   directory.
diff --git a/content/docs/latest/_sources/components/drivers/special/i2c.rst.txt b/content/docs/latest/_sources/components/drivers/special/i2c.rst.txt
new file mode 100644
index 0000000..a284468
--- /dev/null
+++ b/content/docs/latest/_sources/components/drivers/special/i2c.rst.txt
@@ -0,0 +1,22 @@
+==================
+I2C Device Drivers
+==================
+
+-  ``include/nuttx/i2c/i2c.h``. All structures and APIs needed
+   to work with I2C drivers are provided in this header file.
+
+-  ``struct i2c_ops_s``. Each I2C device driver must implement
+   an instance of ``struct i2c_ops_s``. That structure defines a
+   call table with the following methods:
+
+-  **Binding I2C Drivers**. I2C drivers are not normally directly
+   accessed by user code, but are usually bound to another, higher
+   level device driver. In general, the binding sequence is:
+
+   #. Get an instance of ``struct i2c_master_s`` from the
+      hardware-specific I2C device driver, and
+   #. Provide that instance to the initialization method of the
+      higher level device driver.
+
+-  **Examples**: ``arch/z80/src/ez80/ez80_i2c.c``,
+   ``arch/z80/src/z8/z8_i2c.c``, etc.
diff --git a/content/docs/latest/_sources/components/drivers/special/index.rst.txt b/content/docs/latest/_sources/components/drivers/special/index.rst.txt
new file mode 100644
index 0000000..1e8d445
--- /dev/null
+++ b/content/docs/latest/_sources/components/drivers/special/index.rst.txt
@@ -0,0 +1,34 @@
+==========================
+Specialized Device Drivers
+==========================
+
+All device drivers that are accessible to application logic are
+either: (1) Character device drivers that can be accessed via the
+standard driver operations (``open()``, ``close()``, ``read()``,
+``write()``, etc.), or (2) block drivers that can be accessing
+only as part of mounting a file system or other special use cases
+as described in the preceding paragraph.
+
+In addition to this, there are also specialized "drivers" that can
+be used only within the OS logic itself and are not accessible to
+application logic. These specialized drivers are discussed in the
+following section.
+
+.. note::
+  While special drivers are *internal*, in some cases there are also
+  character/block drivers that sit on top of these special drivers
+  and thus expose them to applications.
+
+.. toctree::
+  :caption: Supported Drivers
+  
+  spi.rst
+  i2c.rst
+  ethernet.rst
+  framebuffer.rst
+  lcd.rst
+  mtd.rst
+  sdio.rst
+  usbhost.rst
+  usbdev.rst
+
diff --git a/content/docs/latest/_sources/components/drivers/special/lcd.rst.txt b/content/docs/latest/_sources/components/drivers/special/lcd.rst.txt
new file mode 100644
index 0000000..63da835
--- /dev/null
+++ b/content/docs/latest/_sources/components/drivers/special/lcd.rst.txt
@@ -0,0 +1,47 @@
+===========
+LCD Drivers
+===========
+
+-  ``include/nuttx/lcd/lcd.h``. Structures and APIs needed to
+   work with LCD drivers are provided in this header file. This
+   header file also depends on some of the same definitions used
+   for the frame buffer driver as provided in
+   ``include/nuttx/video/fb.h``.
+
+-  ``struct lcd_dev_s``. Each LCD device driver must implement
+   an instance of ``struct lcd_dev_s``. That structure defines a
+   call table with the following methods:
+
+   Get information about the LCD video controller configuration
+   and the configuration of each LCD color plane.
+
+   The following are provided only if the video hardware supports
+   RGB color mapping:
+
+   The following are provided only if the video hardware supports
+   a hardware cursor:
+
+   Get the LCD panel power status (0: full off -
+   ``CONFIG_LCD_MAXPOWER``: full on). On backlit LCDs, this
+   setting may correspond to the backlight setting.
+
+   Enable/disable LCD panel power (0: full off -
+   ``CONFIG_LCD_MAXPOWER``: full on). On backlit LCDs, this
+   setting may correspond to the backlight setting.
+
+   Get the current contrast setting (0-CONFIG_LCD_MAXCONTRAST) \*/
+
+   Set LCD panel contrast (0-CONFIG_LCD_MAXCONTRAST)
+
+-  **Binding LCD Drivers**. LCD drivers are not normally directly
+   accessed by user code, but are usually bound to another, higher
+   level device driver. In general, the binding sequence is:
+
+   #. Get an instance of ``struct lcd_dev_s`` from the
+      hardware-specific LCD device driver, and
+   #. Provide that instance to the initialization method of the
+      higher level device driver.
+
+-  **Examples**: ``drivers/lcd/p14201.c``,
+   ``boards/arm/sam34/sam3u-ek/src/up_lcd.c.`` See also the usage
+   of the LCD driver in the ``graphics/`` directory.
diff --git a/content/docs/latest/_sources/components/drivers/special/mtd.rst.txt b/content/docs/latest/_sources/components/drivers/special/mtd.rst.txt
new file mode 100644
index 0000000..5e6e556
--- /dev/null
+++ b/content/docs/latest/_sources/components/drivers/special/mtd.rst.txt
@@ -0,0 +1,47 @@
+================================
+Memory Technology Device Drivers
+================================
+
+-  ``include/nuttx/mtd/mtd.h``. All structures and APIs needed
+   to work with MTD drivers are provided in this header file.
+
+-  ``struct mtd_dev_s``. Each MTD device driver must implement
+   an instance of ``struct mtd_dev_s``. That structure defines a
+   call table with the following methods:
+
+   Erase the specified erase blocks (units are erase blocks):
+
+   Read/write from the specified read/write blocks:
+
+   Some devices may support byte oriented reads (optional). Most
+   MTD devices are inherently block oriented so byte-oriented
+   accesses are not supported. It is recommended that low-level
+   drivers not support read() if it requires buffering.
+
+   Some devices may also support byte oriented writes (optional).
+   Most MTD devices are inherently block oriented so byte-oriented
+   accesses are not supported. It is recommended that low-level
+   drivers not support read() if it requires buffering. This
+   interface is only available if ``CONFIG_MTD_BYTE_WRITE`` is
+   defined.
+
+   Support other, less frequently used commands:
+
+   -  ``MTDIOC_GEOMETRY``: Get MTD geometry
+   -  ``MTDIOC_XIPBASE:``: Convert block to physical address for
+      eXecute-In-Place
+   -  ``MTDIOC_BULKERASE``: Erase the entire device
+
+   is provided via a single ``ioctl`` method (see
+   ``include/nuttx/fs/ioctl.h``):
+
+-  **Binding MTD Drivers**. MTD drivers are not normally directly
+   accessed by user code, but are usually bound to another, higher
+   level device driver. In general, the binding sequence is:
+
+   #. Get an instance of ``struct mtd_dev_s`` from the
+      hardware-specific MTD device driver, and
+   #. Provide that instance to the initialization method of the
+      higher level device driver.
+
+-  **Examples**: ``drivers/mtd/m25px.c`` and ``drivers/mtd/ftl.c``
diff --git a/content/docs/latest/_sources/components/drivers/special/sdio.rst.txt b/content/docs/latest/_sources/components/drivers/special/sdio.rst.txt
new file mode 100644
index 0000000..d03f8ec
--- /dev/null
+++ b/content/docs/latest/_sources/components/drivers/special/sdio.rst.txt
@@ -0,0 +1,33 @@
+===================
+SDIO Device Drivers
+===================
+
+-  ``include/nuttx/sdio.h``. All structures and APIs needed to
+   work with SDIO drivers are provided in this header file.
+
+-  ``struct sdio_dev_s``. Each SDIO device driver must
+   implement an instance of ``struct sdio_dev_s``. That structure
+   defines a call table with the following methods:
+
+   Mutual exclusion:
+
+   Initialization/setup:
+
+   Command/Status/Data Transfer:
+
+   Event/Callback support:
+
+   DMA support:
+
+-  **Binding SDIO Drivers**. SDIO drivers are not normally
+   directly accessed by user code, but are usually bound to
+   another, higher level device driver. In general, the binding
+   sequence is:
+
+   #. Get an instance of ``struct sdio_dev_s`` from the
+      hardware-specific SDIO device driver, and
+   #. Provide that instance to the initialization method of the
+      higher level device driver.
+
+-  **Examples**: ``arch/arm/src/stm32/stm32_sdio.c`` and
+   ``drivers/mmcsd/mmcsd_sdio.c``
diff --git a/content/docs/latest/_sources/components/drivers/special/spi.rst.txt b/content/docs/latest/_sources/components/drivers/special/spi.rst.txt
new file mode 100644
index 0000000..55560ea
--- /dev/null
+++ b/content/docs/latest/_sources/components/drivers/special/spi.rst.txt
@@ -0,0 +1,25 @@
+==================
+SPI Device Drivers
+==================
+
+-  ``include/nuttx/spi/spi.h``. All structures and APIs needed
+   to work with SPI drivers are provided in this header file.
+
+-  ``struct spi_ops_s``. Each SPI device driver must implement
+   an instance of ``struct spi_ops_s``. That structure defines a
+   call table with the following methods:
+
+-  **Binding SPI Drivers**. SPI drivers are not normally directly
+   accessed by user code, but are usually bound to another, higher
+   level device driver. See for example,
+   ``int mmcsd_spislotinitialize(int minor, int slotno, FAR struct spi_dev_s *spi)``
+   in ``drivers/mmcsd/mmcsd_spi.c``. In general, the binding
+   sequence is:
+
+   #. Get an instance of ``struct spi_dev_s`` from the
+      hardware-specific SPI device driver, and
+   #. Provide that instance to the initialization method of the
+      higher level device driver.
+
+-  **Examples**: ``drivers/loop.c``,
+   ``drivers/mmcsd/mmcsd_spi.c``, ``drivers/ramdisk.c``, etc.
diff --git a/content/docs/latest/_sources/components/drivers/special/usbdev.rst.txt b/content/docs/latest/_sources/components/drivers/special/usbdev.rst.txt
new file mode 100644
index 0000000..23c0a6a
--- /dev/null
+++ b/content/docs/latest/_sources/components/drivers/special/usbdev.rst.txt
@@ -0,0 +1,50 @@
+=======================
+USB Device-Side Drivers
+=======================
+
+-  ``include/nuttx/usb/usbdev.h``. All structures and APIs
+   needed to work with USB device-side drivers are provided in
+   this header file.
+
+-  ``include/nuttx/usb/usbdev_trace.h``. Declarations needed
+   to work with the NuttX USB device driver trace capability. That
+   USB trace capability is detailed in `separate
+   document <UsbTrace.html>`__.
+
+-  ``struct usbdev_s``. Each USB device controller driver must
+   implement an instance of ``struct usbdev_s``. This structure is
+   defined in ``include/nuttx/usb/usbdev.h``.
+
+   **Examples**: ``arch/arm/src/dm320/dm320_usbdev.c``,
+   ``arch/arm/src/lpc17xx_40xx/lpc17_40_usbdev.c``,
+   ``arch/arm/src/lpc214x/lpc214x_usbdev.c``,
+   ``arch/arm/src/lpc313x/lpc313x_usbdev.c``, and
+   ``arch/arm/src/stm32/stm32_usbdev.c``.
+
+-  ``struct usbdevclass_driver_s``. Each USB device class
+   driver must implement an instance of
+   ``struct usbdevclass_driver_s``. This structure is also defined
+   in ``include/nuttx/usb/usbdev.h``.
+
+   **Examples**: ``drivers/usbdev/pl2303.c`` and
+   ``drivers/usbdev/usbmsc.c``
+
+-  **Binding USB Device-Side Drivers**. USB device-side controller
+   drivers are not normally directly accessed by user code, but
+   are usually bound to another, higher level USB device class
+   driver. The class driver is then configured to export the USB
+   device functionality. In general, the binding sequence is:
+
+   #. Each USB device class driver includes an initialization
+      entry point that is called from the application at
+      initialization time.
+
+      **Examples**: The function ``usbdev_serialinitialize()`` in
+      the file ``drivers/usbdev/pl2303.c`` and the function
+      in the file ``drivers/usbdev/usbmsc.c``
+
+   #. These initialization functions called the driver API,
+      ``usbdev_register()``. This driver function will *bind* the
+      USB class driver to the USB device controller driver,
+      completing the initialization.
+
diff --git a/content/docs/latest/_sources/components/drivers/special/usbhost.rst.txt b/content/docs/latest/_sources/components/drivers/special/usbhost.rst.txt
new file mode 100644
index 0000000..7c91c1d
--- /dev/null
+++ b/content/docs/latest/_sources/components/drivers/special/usbhost.rst.txt
@@ -0,0 +1,108 @@
+=====================
+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`` and
+   ``struct usbhost_connection_s``. Each USB host controller
+   driver must implement an instance of
+   ``struct usbhost_driver_s`` and
+   ``struct usbhost_connection_s``: ``struct usbhost_driver_s``
+   provides the interface between the USB host driver and the USB
+   class driver; ``struct usbhost_connection_s`` provides the
+   interface between the USB host driver and platform-specific
+   connection management and device enumeration logic. These
+   structures are defined in ``include/nuttx/usb/usbhost.h``.
+
+   **Examples**: ``arch/arm/src/lpc17xx_40xx/lpc17_40_usbhost.c``,
+   ``arch/arm/src/stm32/stm32_otgfshost.c``,
+   ``arch/arm/src/sama5/sam_ohci.c``, and
+   ``arch/arm/src/sama5/sam_ehci.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 registry. 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):
+
+   -  ``int (*wait)(FAR struct usbhost_connection_s *drvr, FAR const bool *connected);``
+
+      Wait for a device to be connected or disconnected.
+
+   -  ``int (*enumerate)(FAR struct usbhost_connection_s *drvr, int rhpndx);``
+
+      Enumerate the device connected to a root hub port. 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:
+
+   #. 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_msc_initialize()`` in
+      the file ``drivers/usbhost/usbhost_storage.c``
+
+   #. 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
+      ``boards/arm/lpc17xx_40xx/olimex-lpc1766stk/src/lpc17_40_appinit.c``.
+
+   #. 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``.
diff --git a/content/docs/latest/_sources/guides/drivers.rst.txt b/content/docs/latest/_sources/guides/drivers.rst.txt
index d458ed8..983c701 100644
--- a/content/docs/latest/_sources/guides/drivers.rst.txt
+++ b/content/docs/latest/_sources/guides/drivers.rst.txt
@@ -80,7 +80,7 @@ modification.
       * stack frame printf
       * thread printf
 
-    * `GDB — the Gnu Debugger <https://www.gnu.org/software/gdb/>`_
+    * `GDB — the GNU Debugger <https://www.gnu.org/software/gdb/>`_
 
       GDB is a great tool. In this guide we've already used it to load our program and run it. But it can do a lot
       more. You can single-step through code, examine variables and memory, set breakpoints, and more. I generally use
diff --git a/content/docs/latest/_sources/quickstart/build_and_make.rst.txt b/content/docs/latest/_sources/quickstart/build_and_make.rst.txt
index d1809af..e69bd09 100644
--- a/content/docs/latest/_sources/quickstart/build_and_make.rst.txt
+++ b/content/docs/latest/_sources/quickstart/build_and_make.rst.txt
@@ -19,9 +19,9 @@ The ``$(TOPDIR)`` directory holds:
 
 That directory also holds:
 
--  The makefile fragment ```.config`` <#boardconfigsubdirs>`__
+-  The makefile fragment :ref:`.config <nuttx_boards>`
    that describes the current configuration, and
--  The makefile fragment ```Make.defs`` <#boardconfigsubdirs>`__
+-  The makefile fragment :ref:`Make.defs <nuttx_boards>`
    that provides customized build targets.
 
 Environment Variables
@@ -31,8 +31,7 @@ The specific environmental definitions
 are unique for each board but should include, as a minimum,
 updates to the ``PATH`` variable to include the full path to the
 architecture-specific toolchain identified in
-```Make.defs`` <#boardconfigsubdirs>`__.
-
+:ref:`Make.defs <nuttx_boards>`.
 
 First Time Make
 ---------------
diff --git a/content/docs/latest/_sources/quickstart/configuring.rst.txt b/content/docs/latest/_sources/quickstart/configuring.rst.txt
index 19fa3a7..c70c536 100644
--- a/content/docs/latest/_sources/quickstart/configuring.rst.txt
+++ b/content/docs/latest/_sources/quickstart/configuring.rst.txt
@@ -70,7 +70,7 @@ has your configuration options selected.
 
    Here's what you should see:
 
-   .. image:: ../images/menuconfig.png
+   .. image:: ../_static/images/menuconfig.png
        :width: 800px
        :align: center
        :alt: Screenshot of menuconfig system main screen
@@ -88,8 +88,6 @@ has your configuration options selected.
    Now let's save. Use the right and left arrow keys to select the ``Exit`` menu item at the
    bottom of the screen. Hit ``<return>`` to select it, hit ``<return>`` again, and again, finally
    hitting ``<return>`` in the ``Save Configuration`` dialog box.
-   |br|
-   |br|
 
 #. Make the New Configuration
 
diff --git a/content/docs/latest/_sources/quickstart/debugging.rst.txt b/content/docs/latest/_sources/quickstart/debugging.rst.txt
index 94aa29e..061c468 100644
--- a/content/docs/latest/_sources/quickstart/debugging.rst.txt
+++ b/content/docs/latest/_sources/quickstart/debugging.rst.txt
@@ -6,38 +6,49 @@ Debugging
 
 Finding and fixing bugs is an important part of the hardware and software development process. Sometimes you also need
 to use debugging techniques to understand how the system works. Two tools that are helpful are debug logging and
-debugging using the Gnu Debugger (gdb).
+debugging using the GNU Debugger (gdb).
 
 Debug Logging
 -------------
 
-NuttX has a powerful logging facility with ``info``, ``warn``, and ``error`` levels. You can enable debugging for your
-build for the ``net`` feature (TCP/IP stack) by putting the following lines in your ``.config`` file:
+NuttX has a powerful system logging facility (syslog) with ``info``, ``warn``, and ``error`` levels. You can enable
+debugging for your build for the subsystem or feature by using the ``menuconfig`` system.
 
-    ::
+.. code-block:: console
 
-       CONFIG_DEBUG_ALERT=y
-       CONFIG_DEBUG_FEATURES=y
-       CONFIG_DEBUG_ERROR=y
-       CONFIG_DEBUG_WARN=y
-       CONFIG_DEBUG_INFO=y
-       CONFIG_DEBUG_ASSERTIONS=y
-       CONFIG_DEBUG_NET=y
-       CONFIG_DEBUG_NET_ERROR=y
-       CONFIG_DEBUG_NET_WARN=y
-       CONFIG_DEBUG_NET_INFO=y
-       CONFIG_DEBUG_SYMBOLS=y
-       CONFIG_DEBUG_NOOPT=y
-       CONFIG_SYSLOG_TIMESTAMP=y
+   $ make menuconfig
 
-Note that turning all these to ``y`` will produce an incredible amount of logging output. Set the level you want and
-the area you're interested in to ``y``, and the rest to ``n``, and then recompile. You can see the full list of
-debug feature areas in the file `debug.h <https://github.com/apache/incubator-nuttx/blob/master/include/debug.h>`__.
+The debug options are available under ``Build Setup`` > ``Debug Options``. You will most likely have to enable the
+following options:
 
-Timestamps can be enabled by setting ``CONFIG_SYSLOG_TIMESTAMP=y``.
+* ``Enable Debug Features`` — selecting this will turn on subsystem-level debugging options, they will become visible
+  on the page below. You can then select the ones you want.
+* ``Enable Error Output`` — this will only log errors.
+* ``Enable Warnings Output`` — this will log warnings and errors.
+* ``Enable Informational Debug Output`` — this will produce informational output, warnings, and errors.
+
+You can then select from the subsystems that are available, Network, Scheduler, USB, etc. Note that you will need to
+separately enable the subsystem elsewhere in the ``menuconfig`` system. To see the ``CONFIG`` define that is set,
+use the arrow keys to highlight the subsystem (for instance, ``Network Debug Features``) and type '?'. This will show
+you that the C macro that is set is called ``CONFIG_DEBUG_NET``. ``debug.h`` defines the ``netinfo()`` logging
+function that will log output if this macro is set. You can search the source code for ``netinfo`` to see how it is
+used.
+
+.. image:: ../_static/images/menuconfig-debug.png
+    :width: 800px
+    :align: center
+    :alt: Screenshot of menuconfig system main screen
+
+Note that enabling all these will produce an incredible amount of logging output. Enable the level you want and
+the area you're interested in, and leave the rest disabled, save the config, and then recompile. You can see the full
+list of debug feature logging functions in the file
+`debug.h <https://github.com/apache/incubator-nuttx/blob/master/include/debug.h>`__.
+
+Syslog timestamps can be enabled in the ``menuconfig`` system using ``Device Drivers`` > ``System Logging`` > ``Prepend
+timestamp to syslog message`` (``CONFIG_SYSLOG_TIMESTAMP``).
 
 You may need to do a little bit of experimenting to find the combination of logging settings that work for the problem
-you're trying to solve. See the file `debug.h <https://github.com/starcat-io/incubator-nuttx/blob/master/include/debug.h>`_
+you're trying to solve. See the file `debug.h <https://github.com/apache/incubator-nuttx/blob/master/include/debug.h>`_
 for available debug settings that are available. This can also be configured via the ``menuconfig`` system.
 
 There are also subsystems that enable USB trace debugging, and you can log to memory too, if you need the logging to be
@@ -49,63 +60,33 @@ Changing Debug Settings Quickly
 You can use the ``kconfig-tweak`` script that comes with the ``kconfig-frontends`` tools to quickly change debug settings,
 for instance turning them on or off before doing a build:
 
-.. code-block:: bash
+.. code-block:: console
 
    $ kconfig-tweak --disable CONFIG_DEBUG_NET
+   $ make olddefconfig  # needed to have the kconfig system check the config
    $ kconfig-tweak --enable CONFIG_DEBUG_NET
+   $ make olddefconfig
 
 You can put a bunch of these into a simple script to configure the logging the way you want:
 
-.. code-block:: bash
+.. code-block:: console
 
    #!/bin/bash
 
-   $ kconfig-tweak --disable CONFIG_DEBUG_ALERT
-   $ kconfig-tweak --disable CONFIG_DEBUG_FEATURES
-   $ kconfig-tweak --disable CONFIG_DEBUG_ERROR
-   $ kconfig-tweak --disable CONFIG_DEBUG_WARN
-   $ kconfig-tweak --disable CONFIG_DEBUG_INFO
-   $ kconfig-tweak --disable CONFIG_DEBUG_ASSERTIONS
-   $ kconfig-tweak --disable CONFIG_DEBUG_NET
-   $ kconfig-tweak --disable CONFIG_DEBUG_NET_ERROR
-   $ kconfig-tweak --disable CONFIG_DEBUG_NET_WARN
-   $ kconfig-tweak --disable CONFIG_DEBUG_NET_INFO
-   $ kconfig-tweak --disable CONFIG_DEBUG_SYMBOLS
-   $ kconfig-tweak --disable CONFIG_DEBUG_NOOPT
-   $ kconfig-tweak --disable CONFIG_SYSLOG_TIMESTAMP
-
-Custom Debug Logging
---------------------
-
-Sometimes you need to see debug logs specific to your feature, and you don't want the rest of the built-in logs
-because they're either not relevant or have too much information. Debugging using logs is surprisingly powerful.
-
-
-You can add your own custom debug logging by adding the following lines to
-`debug.h <https://github.com/apache/incubator-nuttx/blob/master/include/debug.h>`__:
-
-.. code-block:: c
-
-   /* after the CONFIG_DEBUG_WATCHDOG_INFO block near line 721 */
-   #ifdef CONFIG_DEBUG_CUSTOM_INFO
-   #  define custinfo    _info
-   #else
-   #  define custinfo    _none
-   #endif
-
-You need to add the following line to your ``.config`` file:
-
-.. code-block:: c
-
-   CONFIG_DEBUG_CUSTOM_INFO=y
-
-You would use it like this:
-
-.. code-block:: c
-
-   /* Custom debug logging */
-   custinfo("This is a custom log message.");
-   custinfo("Custom log data: %d", my-integer-variable);
+   kconfig-tweak --disable CONFIG_DEBUG_ALERT
+   kconfig-tweak --disable CONFIG_DEBUG_FEATURES
+   kconfig-tweak --disable CONFIG_DEBUG_ERROR
+   kconfig-tweak --disable CONFIG_DEBUG_WARN
+   kconfig-tweak --disable CONFIG_DEBUG_INFO
+   kconfig-tweak --disable CONFIG_DEBUG_ASSERTIONS
+   kconfig-tweak --disable CONFIG_DEBUG_NET
+   kconfig-tweak --disable CONFIG_DEBUG_NET_ERROR
+   kconfig-tweak --disable CONFIG_DEBUG_NET_WARN
+   kconfig-tweak --disable CONFIG_DEBUG_NET_INFO
+   kconfig-tweak --disable CONFIG_DEBUG_SYMBOLS
+   kconfig-tweak --disable CONFIG_DEBUG_NOOPT
+   kconfig-tweak --disable CONFIG_SYSLOG_TIMESTAMP
+   make oldconfig
 
 
 JTAG Debugging
diff --git a/content/docs/latest/_sources/quickstart/index.rst.txt b/content/docs/latest/_sources/quickstart/index.rst.txt
index aab8cf2..a6c6a26 100644
--- a/content/docs/latest/_sources/quickstart/index.rst.txt
+++ b/content/docs/latest/_sources/quickstart/index.rst.txt
@@ -1,5 +1,3 @@
-.. todo::
-
 ===============
 Getting Started
 ===============
diff --git a/content/docs/latest/_sources/quickstart/install.rst.txt b/content/docs/latest/_sources/quickstart/install.rst.txt
index a844a9e..1fded37 100644
--- a/content/docs/latest/_sources/quickstart/install.rst.txt
+++ b/content/docs/latest/_sources/quickstart/install.rst.txt
@@ -16,24 +16,23 @@ Install prerequisites for building using Linux
 
 #. Install system packages
 
- .. code-block:: bash
+    .. code-block:: bash
 
-    $ sudo apt install \
+        $ sudo apt install \
         bison flex gettext texinfo libncurses5-dev libncursesw5-dev \
         gperf automake libtool pkg-config build-essential gperf \
         libgmp-dev libmpc-dev libmpfr-dev libisl-dev binutils-dev libelf-dev \
         libexpat-dev gcc-multilib g++-multilib picocom u-boot-tools util-linux
 
-
 #. Give yourself access to the serial console device
 
    This is done by adding your Linux user to the ``dialout`` group:
 
- .. code-block:: bash
+    .. code-block:: console
 
-    $ sudo usermod -a -G dialout $USER
-    $ # now get a login shell that knows we're in the dialout group:
-    $ su - $USER
+       $ sudo usermod -a -G dialout $USER
+       $ # now get a login shell that knows we're in the dialout group:
+       $ su - $USER
 
 Install prerequisites for building and using Apache NuttX (macOS)
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -82,48 +81,48 @@ There are a collection of required tools that need to be built to build most Apa
 
 *NOTE:* You will need to add ``NUTTXTOOLS_PATH`` to your environment ``PATH``
 
-#. Install kconfig-frontends tool
+#. Install gperf tool
 
-This is necessary to run the ``./nuttx/tools/configure.sh`` script as well as using the ncurses-based menuconfig system.
+   This required to build ``kconfig-frontends``.
 
- .. code-block:: bash
+   .. code-block:: console
 
-    $ cd tools/
-    $ cd kconfig-frontends
-    $ # on MacOS do the following:
-    $ patch < ../kconfig-macos.diff -p 1
-    $ ./configure --prefix=$NUTTXTOOLS --enable-mconf --disable-shared --enable-static --disable-gconf --disable-qconf --disable-nconf
-    $ # on Linux do the following:
-    $ ./configure --prefix=$NUTTXTOOLS --enable-mconf --disable-gconf --disable-qconf
-    $ touch aclocal.m4 Makefile.in
-    $ make
-    $ make install
+      $ cd tools/
+      $ wget http://ftp.gnu.org/pub/gnu/gperf/gperf-3.1.tar.gz
+      $ tar zxf gperf-3.1.tar.gz
+      $ cd gperf-3.1
+      $ ./configure --prefix=$NUTTXTOOLS
+      $ make
+      $ make install
 
-#. Install gperf tool
+#. Install kconfig-frontends tool
 
-   This required to build ``kconfig-frontends``.
+   This is necessary to run the ``./nuttx/tools/configure.sh`` script as well as using the ncurses-based menuconfig system.
 
- .. code-block:: bash
+   .. code-block:: console
 
-    $ cd tools/
-    $ wget http://ftp.gnu.org/pub/gnu/gperf/gperf-3.1.tar.gz
-    $ tar zxf gperf-3.1.tar.gz
-    $ cd gperf-3.1
-    $ ./configure --prefix=$NUTTXTOOLS
-    $ make
-    $ make install
+      $ cd tools/
+      $ cd kconfig-frontends
+      $ # on MacOS do the following:
+      $ patch < ../kconfig-macos.diff -p 1
+      $ ./configure --prefix=$NUTTXTOOLS --enable-mconf --disable-shared --enable-static --disable-gconf --disable-qconf --disable-nconf
+      $ # on Linux do the following:
+      $ ./configure --prefix=$NUTTXTOOLS --enable-mconf --disable-gconf --disable-qconf
+      $ touch aclocal.m4 Makefile.in
+      $ make
+      $ make install
 
 #. Install gen-romfs (optional)
 
 
    This is required if you want to build ROM-based file systems.
 
- .. code-block:: bash
+   .. code-block:: console
 
-    $ cd tools/
-    $ tar zxf genromfs-0.5.2.tar.gz
-    $ cd genromfs-0.5.2
-    $ make install PREFIX=$NUTTXTOOLS
+      $ cd tools/
+      $ tar zxf genromfs-0.5.2.tar.gz
+      $ cd genromfs-0.5.2
+      $ make install PREFIX=$NUTTXTOOLS
 
 Get Source Code (Stable)
 ------------------------
@@ -138,20 +137,20 @@ to use it, modify it or help develop it, you'll need the source code.
 
 You can either clone the public repositories:
 
-    .. code-block:: bash
+.. code-block:: console
 
-       $ mkdir nuttx
-       $ cd nuttx
-       $ git clone https://github.com/apache/incubator-nuttx.git nuttx
-       $ git clone https://github.com/apache/incubator-nuttx-apps apps
+   $ mkdir nuttx
+   $ cd nuttx
+   $ git clone https://github.com/apache/incubator-nuttx.git nuttx
+   $ git clone https://github.com/apache/incubator-nuttx-apps apps
 
 Or, download the `tarball <https://github.com/apache/incubator-nuttx/tarball/master>`_:
 
-    .. code-block:: bash
+.. code-block:: console
 
-       $ curl -OL https://github.com/apache/incubator-nuttx/tarball/master
-       $ curl -OL https://github.com/apache/incubator-nuttx-apps/tarball/master
-       # optionally, zipball is also available (for Windows users).
+   $ curl -OL https://github.com/apache/incubator-nuttx/tarball/master
+   $ curl -OL https://github.com/apache/incubator-nuttx-apps/tarball/master
+   # optionally, zipball is also available (for Windows users).
 
 Later if we want to make modifications (for instance, to improve NuttX and save them in our own branch,
 or submit them back to the project), we can do that easily using git to track our changes and submit them
@@ -168,27 +167,27 @@ binary file on your embedded computer. This guide assumes your computer is an
    `script <https://github.com/apache/incubator-nuttx-testing/blob/master/cibuild.sh>`_ and Docker `container <https://github.com/apache/incubator-nuttx-testing/blob/master/docker/linux/Dockerfile>`_
 
 Download the right flavor of the
-`ARM Embedded Gnu Toolchain <https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm>`_
+`ARM Embedded GNU Toolchain <https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm>`_
 for your embedded processor's CPU.
 
 Unpack it into ``/opt/gcc`` and add the bin directory to your path. For instance:
 
- .. code-block:: bash
-
-    $ usermod -a -G users $USER
-    $ # get a login shell that knows we're in this group:
-    $ su - $USER
-    $ sudo mkdir /opt/gcc
-    $ sudo chgrp -R users /opt/gcc
-    $ sudo chmod -R u+rw /opt/gcc
-    $ cd /opt/gcc
-    $ HOST_PLATFORM=x86_64-linux   # use "mac" for macOS.
-    $ # For windows there is a zip instead (gcc-arm-none-eabi-9-2019-q4-major-win32.zip)
-    $ curl -L -o gcc-arm-none-eabi-9-2019-q4-major-${HOST_PLATFORM}.tar.bz2 https://developer.arm.com/-/media/Files/downloads/gnu-rm/9-2019q4/gcc-arm-none-eabi-9-2019-q4-major-${HOST_PLATFORM}.tar.bz2
-    $ tar xf gcc-arm-none-eabi-9-2019-q4-major-${HOST_PLATFORM}.tar.bz2
-    $ # add the toolchain bin/ dir to your path...
-    $ # you can edit your shell's rc files if you don't use bash
-    $ echo "export PATH=/opt/gcc/gcc-arm-none-eabi-9-2019-q4-major/bin:$PATH" >> ~/.bashrc
+.. code-block:: console
+
+   $ usermod -a -G users $USER
+   $ # get a login shell that knows we're in this group:
+   $ su - $USER
+   $ sudo mkdir /opt/gcc
+   $ sudo chgrp -R users /opt/gcc
+   $ sudo chmod -R u+rw /opt/gcc
+   $ cd /opt/gcc
+   $ HOST_PLATFORM=x86_64-linux   # use "mac" for macOS.
+   $ # For windows there is a zip instead (gcc-arm-none-eabi-9-2019-q4-major-win32.zip)
+   $ curl -L -o gcc-arm-none-eabi-9-2019-q4-major-${HOST_PLATFORM}.tar.bz2 https://developer.arm.com/-/media/Files/downloads/gnu-rm/9-2019q4/gcc-arm-none-eabi-9-2019-q4-major-${HOST_PLATFORM}.tar.bz2
+   $ tar xf gcc-arm-none-eabi-9-2019-q4-major-${HOST_PLATFORM}.tar.bz2
+   $ # add the toolchain bin/ dir to your path...
+   $ # you can edit your shell's rc files if you don't use bash
+   $ echo "export PATH=/opt/gcc/gcc-arm-none-eabi-9-2019-q4-major/bin:$PATH" >> ~/.bashrc
 
 ----
 
diff --git a/content/docs/latest/_sources/quickstart/organization.rst.txt b/content/docs/latest/_sources/quickstart/organization.rst.txt
index 82a5a15..d084693 100644
--- a/content/docs/latest/_sources/quickstart/organization.rst.txt
+++ b/content/docs/latest/_sources/quickstart/organization.rst.txt
@@ -241,6 +241,8 @@ execute them.
 
 The ``audio/`` subdirectory contains the NuttX audio sub-system.
 
+.. _nuttx_boards:
+
 ``nuttx/boards``
 ================
 
diff --git a/content/docs/latest/_sources/quickstart/quickstart.rst.txt b/content/docs/latest/_sources/quickstart/quickstart.rst.txt
index be38a07..5f84221 100644
--- a/content/docs/latest/_sources/quickstart/quickstart.rst.txt
+++ b/content/docs/latest/_sources/quickstart/quickstart.rst.txt
@@ -15,11 +15,10 @@ computer, you're using an ARM microcontroller on your embedded board, and you're
    `ARM <https://en.wikipedia.org/wiki/ARM_architecture>`_ CPU. If it isn't, you'll need a different tool chain.
 
    You can download a toolchain from
-   `ARM Embedded Gnu Toolchain <https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm>`_
+   `ARM Embedded GNU Toolchain <https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm>`_
    for your embedded processor's CPU. You can also use a toolchain shipped with your OS for the `none-eabi` target, such as `gcc-arm-none-eabi` in Linux.
 
-
-In the following example, we download ``gcc-arm-none-eabi`` version 9.0 and unpack it into ``/opt/gcc`:
+   In the following example, we download ``gcc-arm-none-eabi`` version 9.0 and unpack it into ``/opt/gcc``:
 
    .. code-block:: console
 
@@ -28,17 +27,19 @@ In the following example, we download ``gcc-arm-none-eabi`` version 9.0 and unpa
       $ cd /opt/gcc
       $ wget https://developer.arm.com/-/media/Files/downloads/gnu-rm/9-2019q4/gcc-arm-none-eabi-9-2019-q4-major-x86_64-linux.tar.bz2
       $ tar xf gcc-arm-none-eabi-9-2019-q4-major-x86_64-linux.tar.bz2
-      
-Then, add the toolchain ``bin/`` directory to your path:
 
-.. code-block:: console
+   Then, add the toolchain ``bin/`` directory to your path:
+
+   .. code-block:: console
 
       $ echo "export PATH=/opt/gcc/gcc-arm-none-eabi-9-2019-q4-major/bin:$PATH" >> ~/.bashrc
 
-If you are using any other shell, the procedure is similar by editing the corresponding rc file.
+   If you are using any other shell, the procedure is similar by editing the corresponding rc file.
 
 #. Download Apache NuttX
-The next step is to download NuttX main repository along the application repository. The latter is technically optional in a very minimal configurations but should be included in normal configuration since it includes the NuttX shell.
+
+   The next step is to download NuttX main repository along the application repository. The latter is technically optional in a very minimal configurations but should be included in normal configuration since it includes the NuttX shell.
+
    .. code-block:: console
 
       $ mkdir nuttx
@@ -105,7 +106,7 @@ The next step is to download NuttX main repository along the application reposit
 
       $ make menuconfig
 
-Use your arrows to navigate the menu and ``ENTER`` key to enable/disable options. To exit and save your configuration, go back to the main menu, choose ``<Exit>`` and select "yes" when asked if you want to save.
+   Use your arrows to navigate the menu and ``ENTER`` key to enable/disable options. To exit and save your configuration, go back to the main menu, choose ``<Exit>`` and select "yes" when asked if you want to save.
 
 #. Compile Apache NuttX
 
diff --git a/content/docs/latest/_sources/quickstart/running.rst.txt b/content/docs/latest/_sources/quickstart/running.rst.txt
index 9bbbf1e..d04a383 100644
--- a/content/docs/latest/_sources/quickstart/running.rst.txt
+++ b/content/docs/latest/_sources/quickstart/running.rst.txt
@@ -22,10 +22,10 @@ You can load code, start, stop, step through the program, and examine variables
 
        $ JLinkGDBServer -device ATSAMA5D27 -if JTAG -speed 1000 -JTAGConf -1,-1
 
-#. Launch the Gnu Debugger
+#. Launch the GNU Debugger
 
    In another terminal window, launch the GDB for your platform. In the case of this guide, this came with the
-   ARM Embedded Gnu Toolchain we downloaded in the Install step.
+   ARM Embedded GNU Toolchain we downloaded in the Install step.
 
     .. code-block:: bash
 
diff --git a/content/docs/latest/_static/images/menuconfig-debug.png b/content/docs/latest/_static/images/menuconfig-debug.png
new file mode 100644
index 0000000..23828c2
Binary files /dev/null and b/content/docs/latest/_static/images/menuconfig-debug.png differ
diff --git a/content/docs/latest/_static/images/menuconfig.png b/content/docs/latest/_static/images/menuconfig.png
new file mode 100644
index 0000000..c16c234
Binary files /dev/null and b/content/docs/latest/_static/images/menuconfig.png differ
diff --git a/content/docs/latest/components/drivers/block/index.html b/content/docs/latest/components/drivers/block/index.html
new file mode 100644
index 0000000..85f5580
--- /dev/null
+++ b/content/docs/latest/components/drivers/block/index.html
@@ -0,0 +1,289 @@
+<!--
+ Documentation/_templates/layout.html
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements.  See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.  The
+ ASF licenses this file to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance with the
+ License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ License for the specific language governing permissions and limitations
+ under the License.
+-->
+
+
+
+<!DOCTYPE html>
+<html class="writer-html5" lang="en" >
+<head>
+  <meta charset="utf-8">
+  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  
+  <title>Block Device Drivers &mdash; NuttX latest documentation</title>
+  
+
+  
+  <link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
+  <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
+  <link rel="stylesheet" href="../../../_static/custom.css" type="text/css" />
+
+  
+  
+    <link rel="shortcut icon" href="../../../_static/favicon.ico"/>
+  
+  
+  
+
+  
+  <!--[if lt IE 9]>
+    <script src="../../../_static/js/html5shiv.min.js"></script>
+  <![endif]-->
+  
+    
+      <script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
+        <script src="../../../_static/jquery.js"></script>
+        <script src="../../../_static/underscore.js"></script>
+        <script src="../../../_static/doctools.js"></script>
+        <script src="../../../_static/language_data.js"></script>
+    
+    <script type="text/javascript" src="../../../_static/js/theme.js"></script>
+
+    
+    <link rel="index" title="Index" href="../../../genindex.html" />
+    <link rel="search" title="Search" href="../../../search.html" />
+    <link rel="next" title="Specialized Device Drivers" href="../special/index.html" />
+    <link rel="prev" title="Keyboard/Keypad Drivers" href="../character/keypad.html" /> 
+</head>
+
+<body class="wy-body-for-nav">
+
+   
+  <div class="wy-grid-for-nav">
+    
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
+          
+  
+    <a href="../../../index.html" class="icon icon-home"> NuttX
+  
+
+  
+    
+    <img src="../../../_static/NuttX.png" class="logo" alt="Logo"/>
+  
+  </a>
+  
+  <!-- this version selector is quite ugly, should be probably replaced by something
+       more modern -->
+       
+  <div class="version-selector">
+    <select>
+    
+      <option value="latest" selected="selected">latest</option>
+    
+    </select>
+  </div>
+  
+  
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+
+        </div>
+
+        
+        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
+          
+            
+            
+              
+            
+            
+              <p class="caption"><span class="caption-text">Table of Contents</span></p>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="../../../index.html">Home</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../introduction/index.html">Introduction</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../introduction/inviolables.html">The Inviolable Principles of NuttX</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../quickstart/index.html">Getting Started</a></li>
+<li class="toctree-l1 current"><a class="reference internal" href="../../index.html">OS Components</a><ul class="current">
+<li class="toctree-l2"><a class="reference internal" href="../../nsh/index.html">NuttShell (NSH)</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../power.html">Power Management</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../socketcan.html">SocketCAN Device Drivers</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../syslog.html">SYSLOG</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../binfmt.html">Binary Loader</a></li>
+<li class="toctree-l2 current"><a class="reference internal" href="../index.html">Device Drivers</a><ul class="current">
+<li class="toctree-l3"><a class="reference internal" href="../character/index.html">Character Device Drivers</a></li>
+<li class="toctree-l3 current"><a class="current reference internal" href="#">Block Device Drivers</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../special/index.html">Specialized Device Drivers</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../index.html#lower-half-and-upper-half">Lower-half and upper-half</a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="../../filesystem.html">NuttX File System</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../nxflat.html">NXFLAT</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../nxgraphics/index.html">NX Graphics Subsystem</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../nxwidgets.html">NxWidgets</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../paging.html">On-Demand Paging</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="../../../applications/index.html">Applications</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../boards/index.html">Supported Boards</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../reference/index.html">API Reference</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../guides/index.html">Guides</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../releases/index.html">Releases</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../contributing/index.html">Contributing</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../glossary.html">Glossary</a></li>
+</ul>
+
+            
+          
+        </div>
+        
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
+
+      
+      <nav class="wy-nav-top" aria-label="top navigation">
+        
+          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+          <a href="../../../index.html">NuttX</a>
+        
+      </nav>
+
+
+      <div class="wy-nav-content">
+        
+        <div class="rst-content">
+        
+          
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<div role="navigation" aria-label="breadcrumbs navigation">
+
+  <ul class="wy-breadcrumbs">
+    
+      <li><a href="../../../index.html" class="icon icon-home"></a> &raquo;</li>
+        
+          <li><a href="../../index.html">OS Components</a> &raquo;</li>
+        
+          <li><a href="../index.html">Device Drivers</a> &raquo;</li>
+        
+      <li>Block Device Drivers</li>
+    
+    
+      <li class="wy-breadcrumbs-aside">
+        
+            
+            <a href="../../../_sources/components/drivers/block/index.rst.txt" rel="nofollow"> View page source</a>
+          
+        
+      </li>
+    
+  </ul>
+
+  
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+            
+  <div class="section" id="block-device-drivers">
+<h1>Block Device Drivers<a class="headerlink" href="#block-device-drivers" title="Permalink to this headline">¶</a></h1>
+<p>Block device drivers have these properties:</p>
+<ul class="simple">
+<li><p><code class="docutils literal notranslate"><span class="pre">include/nuttx/fs/fs.h</span></code>. All structures and APIs needed
+to work with block drivers are provided in this header file.</p></li>
+<li><p><code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">block_operations</span></code>. Each block device driver must
+implement an instance of <code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">block_operations</span></code>. That
+structure defines a call table with the following methods:</p></li>
+<li><p><code class="docutils literal notranslate"><span class="pre">int</span> <span class="pre">register_blockdriver(const</span> <span class="pre">char</span> <span class="pre">*path,</span> <span class="pre">const</span> <span class="pre">struct</span> <span class="pre">block_operations</span> <span class="pre">*bops,</span> <span class="pre">mode_t</span> <span class="pre">mode,</span> <span class="pre">void</span> <span class="pre">*priv);</span></code>.
+Each block driver registers itself by calling
+<code class="docutils literal notranslate"><span class="pre">register_blockdriver()</span></code>, passing it the <code class="docutils literal notranslate"><span class="pre">path</span></code> where it
+will appear in the <a class="reference external" href="#NxFileSystem">pseudo-file-system</a> and
+it’s initialized instance of <code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">block_operations</span></code>.</p></li>
+<li><p><strong>User Access</strong>. Users do not normally access block drivers
+directly, rather, they access block drivers indirectly through
+the <code class="docutils literal notranslate"><span class="pre">mount()</span></code> API. The <code class="docutils literal notranslate"><span class="pre">mount()</span></code> API binds a block driver
+instance with a file system and with a mountpoint. Then the
+user may use the block driver to access the file system on the
+underlying media. <em>Example</em>: See the <code class="docutils literal notranslate"><span class="pre">cmd_mount()</span></code>
+implementation in <code class="docutils literal notranslate"><span class="pre">apps/nshlib/nsh_fscmds.c</span></code>.</p></li>
+<li><p><strong>Accessing a Character Driver as a Block Device</strong>. See the
+loop device at <code class="docutils literal notranslate"><span class="pre">drivers/loop.c</span></code>. <em>Example</em>: See the
+<code class="docutils literal notranslate"><span class="pre">cmd_losetup()</span></code> implementation in
+<code class="docutils literal notranslate"><span class="pre">apps/nshlib/nsh_fscmds.c</span></code>.</p></li>
+<li><p><strong>Accessing a Block Driver as Character Device</strong>. See the
+Block-to-Character (BCH) conversion logic in <code class="docutils literal notranslate"><span class="pre">drivers/bch/</span></code>.
+<em>Example</em>: See the <code class="docutils literal notranslate"><span class="pre">cmd_dd()</span></code> implementation in
+<code class="docutils literal notranslate"><span class="pre">apps/nshlib/nsh_ddcmd.c</span></code>.</p></li>
+<li><p><strong>Examples</strong>. <code class="docutils literal notranslate"><span class="pre">drivers/loop.c</span></code>,
+<code class="docutils literal notranslate"><span class="pre">drivers/mmcsd/mmcsd_spi.c</span></code>, <code class="docutils literal notranslate"><span class="pre">drivers/ramdisk.c</span></code>, etc.</p></li>
+</ul>
+</div>
+
+
+           </div>
+           
+          </div>
+          <footer>
+  
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>
+        
+        &copy; Copyright 2020, The Apache Software Foundation
+
+    </p>
+  </div> 
+
+</footer>
+
+        </div>
+      </div>
+
+    </section>
+
+  </div>
+  
+
+  <script type="text/javascript">
+      jQuery(function () {
+          SphinxRtdTheme.Navigation.enable(true);
+      });
+  </script>
+
+  
+  
+    
+   
+
+</body>
+</html>
\ No newline at end of file
diff --git a/content/docs/latest/components/drivers/character/analog.html b/content/docs/latest/components/drivers/character/analog.html
new file mode 100644
index 0000000..72b0354
--- /dev/null
+++ b/content/docs/latest/components/drivers/character/analog.html
@@ -0,0 +1,330 @@
+<!--
+ Documentation/_templates/layout.html
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements.  See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.  The
+ ASF licenses this file to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance with the
+ License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ License for the specific language governing permissions and limitations
+ under the License.
+-->
+
+
+
+<!DOCTYPE html>
+<html class="writer-html5" lang="en" >
+<head>
+  <meta charset="utf-8">
+  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  
+  <title>Analog (ADC/DAC) Drivers &mdash; NuttX latest documentation</title>
+  
+
+  
+  <link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
+  <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
+  <link rel="stylesheet" href="../../../_static/custom.css" type="text/css" />
+
+  
+  
+    <link rel="shortcut icon" href="../../../_static/favicon.ico"/>
+  
+  
+  
+
+  
+  <!--[if lt IE 9]>
+    <script src="../../../_static/js/html5shiv.min.js"></script>
+  <![endif]-->
+  
+    
+      <script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
+        <script src="../../../_static/jquery.js"></script>
+        <script src="../../../_static/underscore.js"></script>
+        <script src="../../../_static/doctools.js"></script>
+        <script src="../../../_static/language_data.js"></script>
+    
+    <script type="text/javascript" src="../../../_static/js/theme.js"></script>
+
+    
+    <link rel="index" title="Index" href="../../../genindex.html" />
+    <link rel="search" title="Search" href="../../../search.html" />
+    <link rel="next" title="PWM Drivers" href="pwm.html" />
+    <link rel="prev" title="Touchscreen Device Drivers" href="touchscreen.html" /> 
+</head>
+
+<body class="wy-body-for-nav">
+
+   
+  <div class="wy-grid-for-nav">
+    
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
+          
+  
+    <a href="../../../index.html" class="icon icon-home"> NuttX
+  
+
+  
+    
+    <img src="../../../_static/NuttX.png" class="logo" alt="Logo"/>
+  
+  </a>
+  
+  <!-- this version selector is quite ugly, should be probably replaced by something
+       more modern -->
+       
+  <div class="version-selector">
+    <select>
+    
+      <option value="latest" selected="selected">latest</option>
+    
+    </select>
+  </div>
+  
+  
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+
+        </div>
+
+        
+        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
+          
+            
+            
+              
+            
+            
+              <p class="caption"><span class="caption-text">Table of Contents</span></p>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="../../../index.html">Home</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../introduction/index.html">Introduction</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../introduction/inviolables.html">The Inviolable Principles of NuttX</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../quickstart/index.html">Getting Started</a></li>
+<li class="toctree-l1 current"><a class="reference internal" href="../../index.html">OS Components</a><ul class="current">
+<li class="toctree-l2"><a class="reference internal" href="../../nsh/index.html">NuttShell (NSH)</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../power.html">Power Management</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../socketcan.html">SocketCAN Device Drivers</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../syslog.html">SYSLOG</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../binfmt.html">Binary Loader</a></li>
+<li class="toctree-l2 current"><a class="reference internal" href="../index.html">Device Drivers</a><ul class="current">
+<li class="toctree-l3 current"><a class="reference internal" href="index.html">Character Device Drivers</a><ul class="current">
+<li class="toctree-l4"><a class="reference internal" href="serial.html">Serial Device Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="touchscreen.html">Touchscreen Device Drivers</a></li>
+<li class="toctree-l4 current"><a class="current reference internal" href="#">Analog (ADC/DAC) Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="pwm.html">PWM Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="can.html">CAN Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="quadrature.html">Quadrature Encoder Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="timer.html">Timer Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="rtc.html">RTC Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="watchdog.html">Watchdog Timer Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="keypad.html">Keyboard/Keypad Drivers</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="../block/index.html">Block Device Drivers</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../special/index.html">Specialized Device Drivers</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../index.html#lower-half-and-upper-half">Lower-half and upper-half</a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="../../filesystem.html">NuttX File System</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../nxflat.html">NXFLAT</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../nxgraphics/index.html">NX Graphics Subsystem</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../nxwidgets.html">NxWidgets</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../paging.html">On-Demand Paging</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="../../../applications/index.html">Applications</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../boards/index.html">Supported Boards</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../reference/index.html">API Reference</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../guides/index.html">Guides</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../releases/index.html">Releases</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../contributing/index.html">Contributing</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../glossary.html">Glossary</a></li>
+</ul>
+
+            
+          
+        </div>
+        
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
+
+      
+      <nav class="wy-nav-top" aria-label="top navigation">
+        
+          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+          <a href="../../../index.html">NuttX</a>
+        
+      </nav>
+
+
+      <div class="wy-nav-content">
+        
+        <div class="rst-content">
+        
+          
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<div role="navigation" aria-label="breadcrumbs navigation">
+
+  <ul class="wy-breadcrumbs">
+    
+      <li><a href="../../../index.html" class="icon icon-home"></a> &raquo;</li>
+        
+          <li><a href="../../index.html">OS Components</a> &raquo;</li>
+        
+          <li><a href="../index.html">Device Drivers</a> &raquo;</li>
+        
+          <li><a href="index.html">Character Device Drivers</a> &raquo;</li>
+        
+      <li>Analog (ADC/DAC) Drivers</li>
+    
+    
+      <li class="wy-breadcrumbs-aside">
+        
+            
+            <a href="../../../_sources/components/drivers/character/analog.rst.txt" rel="nofollow"> View page source</a>
+          
+        
+      </li>
+    
+  </ul>
+
+  
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+            
+  <div class="section" id="analog-adc-dac-drivers">
+<h1>Analog (ADC/DAC) Drivers<a class="headerlink" href="#analog-adc-dac-drivers" title="Permalink to this headline">¶</a></h1>
+<p>The NuttX analog drivers are split into two parts:</p>
+<ol class="arabic simple">
+<li><p>An “upper half”, generic driver that provides the common analog
+interface to application level code, and</p></li>
+<li><p>A “lower half”, platform-specific driver that implements the
+low-level controls to implement the analog functionality.</p></li>
+</ol>
+<ul class="simple">
+<li><p>General header files for the NuttX analog drivers reside in
+<code class="docutils literal notranslate"><span class="pre">include/nuttx/analog/</span></code>. These header files includes both the
+application level interface to the analog driver as well as the
+interface between the “upper half” and “lower half” drivers.</p></li>
+<li><p>Common analog logic and share-able analog drivers reside in the
+<code class="docutils literal notranslate"><span class="pre">drivers/analog/</span></code>.</p></li>
+<li><p>Platform-specific drivers reside in
+<code class="docutils literal notranslate"><span class="pre">arch/</span></code><em>&lt;architecture&gt;</em><code class="docutils literal notranslate"><span class="pre">/src/</span></code><em>&lt;hardware&gt;</em> directory
+for the specific processor <em>&lt;architecture&gt;</em> and for the
+specific <em>&lt;chip&gt;</em> analog peripheral devices.</p></li>
+</ul>
+<div class="section" id="adc-drivers">
+<h2>ADC Drivers<a class="headerlink" href="#adc-drivers" title="Permalink to this headline">¶</a></h2>
+<ul class="simple">
+<li><p><code class="docutils literal notranslate"><span class="pre">include/nuttx/analog/adc.h</span></code>. All structures and APIs needed
+to work with ADC drivers are provided in this header file. This
+header file includes:</p>
+<ol class="arabic simple">
+<li><p>Structures and interface descriptions needed to develop a
+low-level, architecture-specific, ADC driver.</p></li>
+<li><p>To register the ADC driver with a common ADC character
+driver.</p></li>
+<li><p>Interfaces needed for interfacing user programs with the
+common ADC character driver.</p></li>
+</ol>
+</li>
+<li><p><code class="docutils literal notranslate"><span class="pre">drivers/analog/adc.c</span></code>. The implementation of the common ADC
+character driver.</p></li>
+</ul>
+</div>
+<div class="section" id="dac-drivers">
+<h2>DAC Drivers<a class="headerlink" href="#dac-drivers" title="Permalink to this headline">¶</a></h2>
+<ul class="simple">
+<li><p><code class="docutils literal notranslate"><span class="pre">include/nuttx/analog/dac.h</span></code>. All structures and APIs needed
+to work with DAC drivers are provided in this header file. This
+header file includes:</p>
+<ol class="arabic simple">
+<li><p>Structures and interface descriptions needed to develop a
+low-level, architecture-specific, DAC driver.</p></li>
+<li><p>To register the DAC driver with a common DAC character
+driver.</p></li>
+<li><p>Interfaces needed for interfacing user programs with the
+common DAC character driver.</p></li>
+</ol>
+</li>
+<li><p><code class="docutils literal notranslate"><span class="pre">drivers/analog/dac.c</span></code>. The implementation of the common DAC
+character driver.</p></li>
+</ul>
+</div>
+</div>
+
+
+           </div>
+           
+          </div>
+          <footer>
+  
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>
+        
+        &copy; Copyright 2020, The Apache Software Foundation
+
+    </p>
+  </div> 
+
+</footer>
+
+        </div>
+      </div>
+
+    </section>
+
+  </div>
+  
+
+  <script type="text/javascript">
+      jQuery(function () {
+          SphinxRtdTheme.Navigation.enable(true);
+      });
+  </script>
+
+  
+  
+    
+   
+
+</body>
+</html>
\ No newline at end of file
diff --git a/content/docs/latest/components/drivers/character/can.html b/content/docs/latest/components/drivers/character/can.html
new file mode 100644
index 0000000..9d26d18
--- /dev/null
+++ b/content/docs/latest/components/drivers/character/can.html
@@ -0,0 +1,305 @@
+<!--
+ Documentation/_templates/layout.html
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements.  See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.  The
+ ASF licenses this file to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance with the
+ License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ License for the specific language governing permissions and limitations
+ under the License.
+-->
+
+
+
+<!DOCTYPE html>
+<html class="writer-html5" lang="en" >
+<head>
+  <meta charset="utf-8">
+  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  
+  <title>CAN Drivers &mdash; NuttX latest documentation</title>
+  
+
+  
+  <link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
+  <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
+  <link rel="stylesheet" href="../../../_static/custom.css" type="text/css" />
+
+  
+  
+    <link rel="shortcut icon" href="../../../_static/favicon.ico"/>
+  
+  
+  
+
+  
+  <!--[if lt IE 9]>
+    <script src="../../../_static/js/html5shiv.min.js"></script>
+  <![endif]-->
+  
+    
+      <script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
+        <script src="../../../_static/jquery.js"></script>
+        <script src="../../../_static/underscore.js"></script>
+        <script src="../../../_static/doctools.js"></script>
+        <script src="../../../_static/language_data.js"></script>
+    
+    <script type="text/javascript" src="../../../_static/js/theme.js"></script>
+
+    
+    <link rel="index" title="Index" href="../../../genindex.html" />
+    <link rel="search" title="Search" href="../../../search.html" />
+    <link rel="next" title="Quadrature Encoder Drivers" href="quadrature.html" />
+    <link rel="prev" title="PWM Drivers" href="pwm.html" /> 
+</head>
+
+<body class="wy-body-for-nav">
+
+   
+  <div class="wy-grid-for-nav">
+    
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
+          
+  
+    <a href="../../../index.html" class="icon icon-home"> NuttX
+  
+
+  
+    
+    <img src="../../../_static/NuttX.png" class="logo" alt="Logo"/>
+  
+  </a>
+  
+  <!-- this version selector is quite ugly, should be probably replaced by something
+       more modern -->
+       
+  <div class="version-selector">
+    <select>
+    
+      <option value="latest" selected="selected">latest</option>
+    
+    </select>
+  </div>
+  
+  
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+
+        </div>
+
+        
+        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
+          
+            
+            
+              
+            
+            
+              <p class="caption"><span class="caption-text">Table of Contents</span></p>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="../../../index.html">Home</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../introduction/index.html">Introduction</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../introduction/inviolables.html">The Inviolable Principles of NuttX</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../quickstart/index.html">Getting Started</a></li>
+<li class="toctree-l1 current"><a class="reference internal" href="../../index.html">OS Components</a><ul class="current">
+<li class="toctree-l2"><a class="reference internal" href="../../nsh/index.html">NuttShell (NSH)</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../power.html">Power Management</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../socketcan.html">SocketCAN Device Drivers</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../syslog.html">SYSLOG</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../binfmt.html">Binary Loader</a></li>
+<li class="toctree-l2 current"><a class="reference internal" href="../index.html">Device Drivers</a><ul class="current">
+<li class="toctree-l3 current"><a class="reference internal" href="index.html">Character Device Drivers</a><ul class="current">
+<li class="toctree-l4"><a class="reference internal" href="serial.html">Serial Device Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="touchscreen.html">Touchscreen Device Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="analog.html">Analog (ADC/DAC) Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="pwm.html">PWM Drivers</a></li>
+<li class="toctree-l4 current"><a class="current reference internal" href="#">CAN Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="quadrature.html">Quadrature Encoder Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="timer.html">Timer Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="rtc.html">RTC Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="watchdog.html">Watchdog Timer Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="keypad.html">Keyboard/Keypad Drivers</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="../block/index.html">Block Device Drivers</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../special/index.html">Specialized Device Drivers</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../index.html#lower-half-and-upper-half">Lower-half and upper-half</a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="../../filesystem.html">NuttX File System</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../nxflat.html">NXFLAT</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../nxgraphics/index.html">NX Graphics Subsystem</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../nxwidgets.html">NxWidgets</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../paging.html">On-Demand Paging</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="../../../applications/index.html">Applications</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../boards/index.html">Supported Boards</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../reference/index.html">API Reference</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../guides/index.html">Guides</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../releases/index.html">Releases</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../contributing/index.html">Contributing</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../glossary.html">Glossary</a></li>
+</ul>
+
+            
+          
+        </div>
+        
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
+
+      
+      <nav class="wy-nav-top" aria-label="top navigation">
+        
+          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+          <a href="../../../index.html">NuttX</a>
+        
+      </nav>
+
+
+      <div class="wy-nav-content">
+        
+        <div class="rst-content">
+        
+          
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<div role="navigation" aria-label="breadcrumbs navigation">
+
+  <ul class="wy-breadcrumbs">
+    
+      <li><a href="../../../index.html" class="icon icon-home"></a> &raquo;</li>
+        
+          <li><a href="../../index.html">OS Components</a> &raquo;</li>
+        
+          <li><a href="../index.html">Device Drivers</a> &raquo;</li>
+        
+          <li><a href="index.html">Character Device Drivers</a> &raquo;</li>
+        
+      <li>CAN Drivers</li>
+    
+    
+      <li class="wy-breadcrumbs-aside">
+        
+            
+            <a href="../../../_sources/components/drivers/character/can.rst.txt" rel="nofollow"> View page source</a>
+          
+        
+      </li>
+    
+  </ul>
+
+  
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+            
+  <div class="section" id="can-drivers">
+<h1>CAN Drivers<a class="headerlink" href="#can-drivers" title="Permalink to this headline">¶</a></h1>
+<p>NuttX supports only a very low-level CAN driver. This driver
+supports only the data exchange and does not include any
+high-level CAN protocol. The NuttX CAN driver is split into two
+parts:</p>
+<ol class="arabic simple">
+<li><p>An “upper half”, generic driver that provides the common CAN
+interface to application level code, and</p></li>
+<li><p>A “lower half”, platform-specific driver that implements the
+low-level timer controls to implement the CAN functionality.</p></li>
+</ol>
+<p>Files supporting CAN can be found in the following locations:</p>
+<ul class="simple">
+<li><p><strong>Interface Definition</strong>. The header file for the NuttX CAN
+driver resides at <code class="docutils literal notranslate"><span class="pre">include/nuttx/can/can.h</span></code>. This header file
+includes both the application level interface to the CAN driver
+as well as the interface between the “upper half” and “lower
+half” drivers. The CAN module uses a standard character driver
+framework.</p></li>
+<li><p><strong>“Upper Half” Driver</strong>. The generic, “upper half” CAN driver
+resides at <code class="docutils literal notranslate"><span class="pre">drivers/can.c</span></code>.</p></li>
+<li><p><strong>“Lower Half” Drivers</strong>. Platform-specific CAN drivers reside
+in <code class="docutils literal notranslate"><span class="pre">arch/</span></code><em>&lt;architecture&gt;</em><code class="docutils literal notranslate"><span class="pre">/src/</span></code><em>&lt;hardware&gt;</em>
+directory for the specific processor <em>&lt;architecture&gt;</em> and for
+the specific <em>&lt;chip&gt;</em> CAN peripheral devices.</p></li>
+</ul>
+<p><strong>Usage Note</strong>: When reading from the CAN driver multiple messages
+may be returned, depending on (1) the size the returned can
+messages, and (2) the size of the buffer provided to receive CAN
+messages. <em>Never assume that a single message will be returned</em>…
+if you do this, <em>you will lose CAN data</em> under conditions where
+your read buffer can hold more than one small message. Below is an
+example about how you should think of the CAN read operation:</p>
+</div>
+
+
+           </div>
+           
+          </div>
+          <footer>
+  
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>
+        
+        &copy; Copyright 2020, The Apache Software Foundation
+
+    </p>
+  </div> 
+
+</footer>
+
+        </div>
+      </div>
+
+    </section>
+
+  </div>
+  
+
+  <script type="text/javascript">
+      jQuery(function () {
+          SphinxRtdTheme.Navigation.enable(true);
+      });
+  </script>
+
+  
+  
+    
+   
+
+</body>
+</html>
\ No newline at end of file
diff --git a/content/docs/latest/components/drivers/character/index.html b/content/docs/latest/components/drivers/character/index.html
new file mode 100644
index 0000000..d1bc095
--- /dev/null
+++ b/content/docs/latest/components/drivers/character/index.html
@@ -0,0 +1,332 @@
+<!--
+ Documentation/_templates/layout.html
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements.  See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.  The
+ ASF licenses this file to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance with the
+ License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ License for the specific language governing permissions and limitations
+ under the License.
+-->
+
+
+
+<!DOCTYPE html>
+<html class="writer-html5" lang="en" >
+<head>
+  <meta charset="utf-8">
+  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  
+  <title>Character Device Drivers &mdash; NuttX latest documentation</title>
+  
+
+  
+  <link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
+  <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
+  <link rel="stylesheet" href="../../../_static/custom.css" type="text/css" />
+
+  
+  
+    <link rel="shortcut icon" href="../../../_static/favicon.ico"/>
+  
+  
+  
+
+  
+  <!--[if lt IE 9]>
+    <script src="../../../_static/js/html5shiv.min.js"></script>
+  <![endif]-->
+  
+    
+      <script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
+        <script src="../../../_static/jquery.js"></script>
+        <script src="../../../_static/underscore.js"></script>
+        <script src="../../../_static/doctools.js"></script>
+        <script src="../../../_static/language_data.js"></script>
+    
+    <script type="text/javascript" src="../../../_static/js/theme.js"></script>
+
+    
+    <link rel="index" title="Index" href="../../../genindex.html" />
+    <link rel="search" title="Search" href="../../../search.html" />
+    <link rel="next" title="Serial Device Drivers" href="serial.html" />
+    <link rel="prev" title="Device Drivers" href="../index.html" /> 
+</head>
+
+<body class="wy-body-for-nav">
+
+   
+  <div class="wy-grid-for-nav">
+    
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
+          
+  
+    <a href="../../../index.html" class="icon icon-home"> NuttX
+  
+
+  
+    
+    <img src="../../../_static/NuttX.png" class="logo" alt="Logo"/>
+  
+  </a>
+  
+  <!-- this version selector is quite ugly, should be probably replaced by something
+       more modern -->
+       
+  <div class="version-selector">
+    <select>
+    
+      <option value="latest" selected="selected">latest</option>
+    
+    </select>
+  </div>
+  
+  
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+
+        </div>
+
+        
+        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
+          
+            
+            
+              
+            
+            
+              <p class="caption"><span class="caption-text">Table of Contents</span></p>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="../../../index.html">Home</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../introduction/index.html">Introduction</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../introduction/inviolables.html">The Inviolable Principles of NuttX</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../quickstart/index.html">Getting Started</a></li>
+<li class="toctree-l1 current"><a class="reference internal" href="../../index.html">OS Components</a><ul class="current">
+<li class="toctree-l2"><a class="reference internal" href="../../nsh/index.html">NuttShell (NSH)</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../power.html">Power Management</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../socketcan.html">SocketCAN Device Drivers</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../syslog.html">SYSLOG</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../binfmt.html">Binary Loader</a></li>
+<li class="toctree-l2 current"><a class="reference internal" href="../index.html">Device Drivers</a><ul class="current">
+<li class="toctree-l3 current"><a class="current reference internal" href="#">Character Device Drivers</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="serial.html">Serial Device Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="touchscreen.html">Touchscreen Device Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="analog.html">Analog (ADC/DAC) Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="pwm.html">PWM Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="can.html">CAN Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="quadrature.html">Quadrature Encoder Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="timer.html">Timer Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="rtc.html">RTC Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="watchdog.html">Watchdog Timer Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="keypad.html">Keyboard/Keypad Drivers</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="../block/index.html">Block Device Drivers</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../special/index.html">Specialized Device Drivers</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../index.html#lower-half-and-upper-half">Lower-half and upper-half</a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="../../filesystem.html">NuttX File System</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../nxflat.html">NXFLAT</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../nxgraphics/index.html">NX Graphics Subsystem</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../nxwidgets.html">NxWidgets</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../paging.html">On-Demand Paging</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="../../../applications/index.html">Applications</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../boards/index.html">Supported Boards</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../reference/index.html">API Reference</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../guides/index.html">Guides</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../releases/index.html">Releases</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../contributing/index.html">Contributing</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../glossary.html">Glossary</a></li>
+</ul>
+
+            
+          
+        </div>
+        
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
+
+      
+      <nav class="wy-nav-top" aria-label="top navigation">
+        
+          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+          <a href="../../../index.html">NuttX</a>
+        
+      </nav>
+
+
+      <div class="wy-nav-content">
+        
+        <div class="rst-content">
+        
+          
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<div role="navigation" aria-label="breadcrumbs navigation">
+
+  <ul class="wy-breadcrumbs">
+    
+      <li><a href="../../../index.html" class="icon icon-home"></a> &raquo;</li>
+        
+          <li><a href="../../index.html">OS Components</a> &raquo;</li>
+        
+          <li><a href="../index.html">Device Drivers</a> &raquo;</li>
+        
+      <li>Character Device Drivers</li>
+    
+    
+      <li class="wy-breadcrumbs-aside">
+        
+            
+            <a href="../../../_sources/components/drivers/character/index.rst.txt" rel="nofollow"> View page source</a>
+          
+        
+      </li>
+    
+  </ul>
+
+  
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+            
+  <div class="section" id="character-device-drivers">
+<h1>Character Device Drivers<a class="headerlink" href="#character-device-drivers" title="Permalink to this headline">¶</a></h1>
+<p>Character device drivers have these properties:</p>
+<ul>
+<li><p><code class="docutils literal notranslate"><span class="pre">include/nuttx/fs/fs.h</span></code>. All structures and APIs needed
+to work with character drivers are provided in this header
+file.</p></li>
+<li><p><code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">file_operations</span></code>. Each character device driver
+must implement an instance of <code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">file_operations</span></code>. That
+structure defines a call table with the following methods:</p></li>
+<li><p><code class="docutils literal notranslate"><span class="pre">int</span> <span class="pre">register_driver(const</span> <span class="pre">char</span> <span class="pre">*path,</span> <span class="pre">const</span> <span class="pre">struct</span> <span class="pre">file_operations</span> <span class="pre">*fops,</span> <span class="pre">mode_t</span> <span class="pre">mode,</span> <span class="pre">void</span> <span class="pre">*priv);</span></code>.
+Each character driver registers itself by calling
+<code class="docutils literal notranslate"><span class="pre">register_driver()</span></code>, passing it the <code class="docutils literal notranslate"><span class="pre">path</span></code> where it will
+appear in the <a class="reference external" href="#NxFileSystem">pseudo-file-system</a> and it’s
+initialized instance of <code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">file_operations</span></code>.</p></li>
+<li><p><strong>User Access</strong>. After it has been registered, the character
+driver can be accessed by user code using the standard <a class="reference external" href="NuttxUserGuide.html#driveroperations">driver
+operations</a> including
+<code class="docutils literal notranslate"><span class="pre">open()</span></code>, <code class="docutils literal notranslate"><span class="pre">close()</span></code>, <code class="docutils literal notranslate"><span class="pre">read()</span></code>, <code class="docutils literal notranslate"><span class="pre">write()</span></code>, etc.</p></li>
+<li><p><strong>Specialized Character Drivers</strong>. Within the common character
+driver framework, there are different specific varieties of
+<em>specialized</em> character drivers. The unique requirements of the
+underlying device hardware often mandates some customization of
+the character driver. These customizations tend to take the
+form of:</p>
+<ul class="simple">
+<li><p>Device-specific <code class="docutils literal notranslate"><span class="pre">ioctl()</span></code> commands used to performed
+specialized operations on the device. These <code class="docutils literal notranslate"><span class="pre">ioctl()</span></code> will
+be documented in header files under <code class="docutils literal notranslate"><span class="pre">include/nuttx</span></code> that
+detail the specific device interface.</p></li>
+<li><p>Specialized I/O formats. Some devices will require that
+<code class="docutils literal notranslate"><span class="pre">read()</span></code> and/or <code class="docutils literal notranslate"><span class="pre">write()</span></code> operations use data conforming
+to a specific format, rather than a plain stream of bytes.
+These specialized I/O formats will be documented in header
+files under <code class="docutils literal notranslate"><span class="pre">include/nuttx</span></code> that detail the specific
+device interface. The typical representation of the I/O
+format will be a C structure definition.</p></li>
+</ul>
+<p>The specialized character drivers support by NuttX are
+documented in the following paragraphs.</p>
+</li>
+<li><p><strong>Examples</strong>: <code class="docutils literal notranslate"><span class="pre">drivers/dev_null.c</span></code>, <code class="docutils literal notranslate"><span class="pre">drivers/fifo.c</span></code>,
+<code class="docutils literal notranslate"><span class="pre">drivers/serial.c</span></code>, etc.</p></li>
+</ul>
+<div class="toctree-wrapper compound">
+<p class="caption"><span class="caption-text">Supported Drivers</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="serial.html">Serial Device Drivers</a></li>
+<li class="toctree-l1"><a class="reference internal" href="touchscreen.html">Touchscreen Device Drivers</a></li>
+<li class="toctree-l1"><a class="reference internal" href="analog.html">Analog (ADC/DAC) Drivers</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="analog.html#adc-drivers">ADC Drivers</a></li>
+<li class="toctree-l2"><a class="reference internal" href="analog.html#dac-drivers">DAC Drivers</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="pwm.html">PWM Drivers</a></li>
+<li class="toctree-l1"><a class="reference internal" href="can.html">CAN Drivers</a></li>
+<li class="toctree-l1"><a class="reference internal" href="quadrature.html">Quadrature Encoder Drivers</a></li>
+<li class="toctree-l1"><a class="reference internal" href="timer.html">Timer Drivers</a></li>
+<li class="toctree-l1"><a class="reference internal" href="rtc.html">RTC Drivers</a></li>
+<li class="toctree-l1"><a class="reference internal" href="watchdog.html">Watchdog Timer Drivers</a></li>
+<li class="toctree-l1"><a class="reference internal" href="keypad.html">Keyboard/Keypad Drivers</a></li>
+</ul>
+</div>
+</div>
+
+
+           </div>
+           
+          </div>
+          <footer>
+  
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>
+        
+        &copy; Copyright 2020, The Apache Software Foundation
+
+    </p>
+  </div> 
+
+</footer>
+
+        </div>
+      </div>
+
+    </section>
+
+  </div>
+  
+
+  <script type="text/javascript">
+      jQuery(function () {
+          SphinxRtdTheme.Navigation.enable(true);
+      });
+  </script>
+
+  
+  
+    
+   
+
+</body>
+</html>
\ No newline at end of file
diff --git a/content/docs/latest/components/drivers/character/keypad.html b/content/docs/latest/components/drivers/character/keypad.html
new file mode 100644
index 0000000..7378b4e
--- /dev/null
+++ b/content/docs/latest/components/drivers/character/keypad.html
@@ -0,0 +1,398 @@
+<!--
+ Documentation/_templates/layout.html
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements.  See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.  The
+ ASF licenses this file to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance with the
+ License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ License for the specific language governing permissions and limitations
+ under the License.
+-->
+
+
+
+<!DOCTYPE html>
+<html class="writer-html5" lang="en" >
+<head>
+  <meta charset="utf-8">
+  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  
+  <title>Keyboard/Keypad Drivers &mdash; NuttX latest documentation</title>
+  
+
+  
+  <link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
+  <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
+  <link rel="stylesheet" href="../../../_static/custom.css" type="text/css" />
+
+  
+  
+    <link rel="shortcut icon" href="../../../_static/favicon.ico"/>
+  
+  
+  
+
+  
+  <!--[if lt IE 9]>
+    <script src="../../../_static/js/html5shiv.min.js"></script>
+  <![endif]-->
+  
+    
+      <script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
+        <script src="../../../_static/jquery.js"></script>
+        <script src="../../../_static/underscore.js"></script>
+        <script src="../../../_static/doctools.js"></script>
+        <script src="../../../_static/language_data.js"></script>
+    
+    <script type="text/javascript" src="../../../_static/js/theme.js"></script>
+
+    
+    <link rel="index" title="Index" href="../../../genindex.html" />
+    <link rel="search" title="Search" href="../../../search.html" />
+    <link rel="next" title="Block Device Drivers" href="../block/index.html" />
+    <link rel="prev" title="Watchdog Timer Drivers" href="watchdog.html" /> 
+</head>
+
+<body class="wy-body-for-nav">
+
+   
+  <div class="wy-grid-for-nav">
+    
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
+          
+  
+    <a href="../../../index.html" class="icon icon-home"> NuttX
+  
+
+  
+    
+    <img src="../../../_static/NuttX.png" class="logo" alt="Logo"/>
+  
+  </a>
+  
+  <!-- this version selector is quite ugly, should be probably replaced by something
+       more modern -->
+       
+  <div class="version-selector">
+    <select>
+    
+      <option value="latest" selected="selected">latest</option>
+    
+    </select>
+  </div>
+  
+  
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+
+        </div>
+
+        
+        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
+          
+            
+            
+              
+            
+            
+              <p class="caption"><span class="caption-text">Table of Contents</span></p>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="../../../index.html">Home</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../introduction/index.html">Introduction</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../introduction/inviolables.html">The Inviolable Principles of NuttX</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../quickstart/index.html">Getting Started</a></li>
+<li class="toctree-l1 current"><a class="reference internal" href="../../index.html">OS Components</a><ul class="current">
+<li class="toctree-l2"><a class="reference internal" href="../../nsh/index.html">NuttShell (NSH)</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../power.html">Power Management</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../socketcan.html">SocketCAN Device Drivers</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../syslog.html">SYSLOG</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../binfmt.html">Binary Loader</a></li>
+<li class="toctree-l2 current"><a class="reference internal" href="../index.html">Device Drivers</a><ul class="current">
+<li class="toctree-l3 current"><a class="reference internal" href="index.html">Character Device Drivers</a><ul class="current">
+<li class="toctree-l4"><a class="reference internal" href="serial.html">Serial Device Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="touchscreen.html">Touchscreen Device Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="analog.html">Analog (ADC/DAC) Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="pwm.html">PWM Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="can.html">CAN Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="quadrature.html">Quadrature Encoder Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="timer.html">Timer Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="rtc.html">RTC Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="watchdog.html">Watchdog Timer Drivers</a></li>
+<li class="toctree-l4 current"><a class="current reference internal" href="#">Keyboard/Keypad Drivers</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="../block/index.html">Block Device Drivers</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../special/index.html">Specialized Device Drivers</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../index.html#lower-half-and-upper-half">Lower-half and upper-half</a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="../../filesystem.html">NuttX File System</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../nxflat.html">NXFLAT</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../nxgraphics/index.html">NX Graphics Subsystem</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../nxwidgets.html">NxWidgets</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../paging.html">On-Demand Paging</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="../../../applications/index.html">Applications</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../boards/index.html">Supported Boards</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../reference/index.html">API Reference</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../guides/index.html">Guides</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../releases/index.html">Releases</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../contributing/index.html">Contributing</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../glossary.html">Glossary</a></li>
+</ul>
+
+            
+          
+        </div>
+        
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
+
+      
+      <nav class="wy-nav-top" aria-label="top navigation">
+        
+          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+          <a href="../../../index.html">NuttX</a>
+        
+      </nav>
+
+
+      <div class="wy-nav-content">
+        
+        <div class="rst-content">
+        
+          
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<div role="navigation" aria-label="breadcrumbs navigation">
+
+  <ul class="wy-breadcrumbs">
+    
+      <li><a href="../../../index.html" class="icon icon-home"></a> &raquo;</li>
+        
+          <li><a href="../../index.html">OS Components</a> &raquo;</li>
+        
+          <li><a href="../index.html">Device Drivers</a> &raquo;</li>
+        
+          <li><a href="index.html">Character Device Drivers</a> &raquo;</li>
+        
+      <li>Keyboard/Keypad Drivers</li>
+    
+    
+      <li class="wy-breadcrumbs-aside">
+        
+            
+            <a href="../../../_sources/components/drivers/character/keypad.rst.txt" rel="nofollow"> View page source</a>
+          
+        
+      </li>
+    
+  </ul>
+
+  
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+            
+  <div class="section" id="keyboard-keypad-drivers">
+<h1>Keyboard/Keypad Drivers<a class="headerlink" href="#keyboard-keypad-drivers" title="Permalink to this headline">¶</a></h1>
+<p><strong>Keypads vs. Keyboards</strong> Keyboards and keypads are really the
+same devices for NuttX. A keypad is thought of as simply a
+keyboard with fewer keys.</p>
+<p><strong>Special Commands</strong>. In NuttX, a keyboard/keypad driver is simply
+a character driver that may have an (optional) encoding/decoding
+layer on the data returned by the character driver. A keyboard may
+return simple text data (alphabetic, numeric, and punctuation) or
+control characters (enter, control-C, etc.) when a key is pressed.
+We can think about this the “normal” keyboard data stream.
+However, in addition, most keyboards support actions that cannot
+be represented as text or control data. Such actions include
+things like cursor controls (home, up arrow, page down, etc.),
+editing functions (insert, delete, etc.), volume controls, (mute,
+volume up, etc.) and other special functions. In this case, some
+special encoding may be required to multiplex the normal text data
+and special command key press data streams.</p>
+<p><strong>Key Press and Release Events</strong> Sometimes the time that a key is
+released is needed by applications as well. Thus, in addition to
+normal and special key press events, it may also be necessary to
+encode normal and special key release events.</p>
+<p><strong>Encoding/Decoding</strong> Layer. An optional encoding/decoding layer
+can be used with the basic character driver to encode the keyboard
+events into the text data stream. The function interfaces that
+comprise that encoding/decoding layer are defined in the header
+file <code class="docutils literal notranslate"><span class="pre">include/nuttx/input/kbd_code.h</span></code>. These functions provide
+an matched set of (a) driver encoding interfaces, and (b)
+application decoding interfaces.</p>
+<ol class="arabic">
+<li><p><strong>Driver Encoding Interfaces</strong>. These are interfaces used by
+the keyboard/keypad driver to encode keyboard events and data.</p>
+<ul>
+<li><p><code class="docutils literal notranslate"><span class="pre">kbd_press()</span></code></p>
+<p><strong>Function Prototype:</strong></p>
+<p><strong>Description:</strong></p>
+<p><strong>Input Parameters:</strong></p>
+<ul class="simple">
+<li><p><code class="docutils literal notranslate"><span class="pre">ch</span></code>: The character to be added to the output stream.</p></li>
+<li><p><code class="docutils literal notranslate"><span class="pre">stream</span></code>: An instance of <code class="docutils literal notranslate"><span class="pre">lib_outstream_s</span></code> to perform
+the actual low-level put operation.</p></li>
+</ul>
+<p><strong>Returned Value:</strong></p>
+</li>
+<li><p><code class="docutils literal notranslate"><span class="pre">kbd_release()</span></code></p>
+<p><strong>Function Prototype:</strong></p>
+<p><strong>Description:</strong></p>
+<p><strong>Input Parameters:</strong></p>
+<ul class="simple">
+<li><p><code class="docutils literal notranslate"><span class="pre">ch</span></code>: The character associated with the key that was
+released.</p></li>
+<li><p><code class="docutils literal notranslate"><span class="pre">stream</span></code>: An instance of <code class="docutils literal notranslate"><span class="pre">lib_outstream_s</span></code> to perform
+the actual low-level put operation.</p></li>
+</ul>
+<p><strong>Returned Value:</strong></p>
+</li>
+<li><p><code class="docutils literal notranslate"><span class="pre">kbd_specpress()</span></code></p>
+<p><strong>Function Prototype:</strong></p>
+<p><strong>Description:</strong></p>
+<p><strong>Input Parameters:</strong></p>
+<ul class="simple">
+<li><p><code class="docutils literal notranslate"><span class="pre">keycode</span></code>: The command to be added to the output
+stream. The enumeration <code class="docutils literal notranslate"><span class="pre">enum</span> <span class="pre">kbd_keycode_e</span> <span class="pre">keycode</span></code>
+identifies all commands known to the system.</p></li>
+<li><p><code class="docutils literal notranslate"><span class="pre">stream</span></code>: An instance of <code class="docutils literal notranslate"><span class="pre">lib_outstream_s</span></code> to perform
+the actual low-level put operation.</p></li>
+</ul>
+<p><strong>Returned Value:</strong></p>
+</li>
+<li><p><code class="docutils literal notranslate"><span class="pre">kbd_specrel()</span></code></p>
+<p><strong>Function Prototype:</strong></p>
+<p><strong>Description:</strong></p>
+<p><strong>Input Parameters:</strong></p>
+<ul class="simple">
+<li><p><code class="docutils literal notranslate"><span class="pre">keycode</span></code>: The command to be added to the output
+stream. The enumeration <code class="docutils literal notranslate"><span class="pre">enum</span> <span class="pre">kbd_keycode_e</span> <span class="pre">keycode</span></code>
+identifies all commands known to the system.</p></li>
+<li><p><code class="docutils literal notranslate"><span class="pre">stream</span></code>: An instance of <code class="docutils literal notranslate"><span class="pre">lib_outstream_s</span></code> to perform
+the actual low-level put operation.</p></li>
+</ul>
+<p><strong>Returned Value:</strong></p>
+</li>
+</ul>
+</li>
+<li><p><strong>Application Decoding Interfaces</strong>. These are user interfaces
+to decode the values returned by the keyboard/keypad driver.</p>
+<ul>
+<li><p><code class="docutils literal notranslate"><span class="pre">kbd_decode()</span></code></p>
+<p><strong>Function Prototype:</strong></p>
+<p><strong>Description:</strong></p>
+<p><strong>Input Parameters:</strong></p>
+<ul class="simple">
+<li><p><code class="docutils literal notranslate"><span class="pre">stream</span></code>: An instance of <code class="docutils literal notranslate"><span class="pre">lib_instream_s</span></code> to perform
+the actual low-level get operation.</p></li>
+<li><p><code class="docutils literal notranslate"><span class="pre">pch</span></code>: The location to save the returned value. This
+may be either a normal, character code or a special
+command (i.e., a value from <code class="docutils literal notranslate"><span class="pre">enum</span> <span class="pre">kbd_getstate_s</span></code>.</p></li>
+<li><p><code class="docutils literal notranslate"><span class="pre">state</span></code>: A user provided buffer to support parsing.
+This structure should be cleared the first time that
+<code class="docutils literal notranslate"><span class="pre">kbd_decode()</span></code> is called.</p></li>
+</ul>
+<p><strong>Returned Value:</strong></p>
+<ul class="simple">
+<li><p><code class="docutils literal notranslate"><span class="pre">KBD_PRESS</span></code> (0)**: Indicates the successful receipt
+of normal, keyboard data. This corresponds to a keypress
+event. The returned value in <code class="docutils literal notranslate"><span class="pre">pch</span></code> is a simple byte of
+text or control data.</p></li>
+<li><p><code class="docutils literal notranslate"><span class="pre">KBD_RELEASE</span></code> (1)**: Indicates a key release event.
+The returned value in <code class="docutils literal notranslate"><span class="pre">pch</span></code> is the byte of text or
+control data corresponding to the released key.</p></li>
+<li><p><code class="docutils literal notranslate"><span class="pre">KBD_SPECPRESS</span></code> (2)**: Indicates the successful
+receipt of a special keyboard command. The returned value
+in <code class="docutils literal notranslate"><span class="pre">pch</span></code> is a value from <code class="docutils literal notranslate"><span class="pre">enum</span> <span class="pre">kbd_getstate_s</span></code>.</p></li>
+<li><p><code class="docutils literal notranslate"><span class="pre">KBD_SPECREL</span></code> (3)**: Indicates a special command key
+release event. The returned value in <code class="docutils literal notranslate"><span class="pre">pch</span></code> is a value
+from <code class="docutils literal notranslate"><span class="pre">enum</span> <span class="pre">kbd_getstate_s</span></code>.</p></li>
+<li><p><code class="docutils literal notranslate"><span class="pre">KBD_ERROR</span></code> (<code class="docutils literal notranslate"><span class="pre">EOF</span></code>)**: An error has getting the
+next character (reported by the <code class="docutils literal notranslate"><span class="pre">stream</span></code>). Normally
+indicates the end of file.</p></li>
+</ul>
+</li>
+</ul>
+</li>
+</ol>
+<p><strong>I/O Streams</strong>. Notice the use of the abstract I/O streams in
+these interfaces. These stream interfaces are defined in
+<code class="docutils literal notranslate"><span class="pre">include/nuttx/streams.h</span></code>.</p>
+</div>
+
+
+           </div>
+           
+          </div>
+          <footer>
+  
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>
+        
+        &copy; Copyright 2020, The Apache Software Foundation
+
+    </p>
+  </div> 
+
+</footer>
+
+        </div>
+      </div>
+
+    </section>
+
+  </div>
+  
+
+  <script type="text/javascript">
+      jQuery(function () {
+          SphinxRtdTheme.Navigation.enable(true);
+      });
+  </script>
+
+  
+  
+    
+   
+
+</body>
+</html>
\ No newline at end of file
diff --git a/content/docs/latest/components/drivers/character/pwm.html b/content/docs/latest/components/drivers/character/pwm.html
new file mode 100644
index 0000000..d53f734
--- /dev/null
+++ b/content/docs/latest/components/drivers/character/pwm.html
@@ -0,0 +1,303 @@
+<!--
+ Documentation/_templates/layout.html
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements.  See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.  The
+ ASF licenses this file to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance with the
+ License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ License for the specific language governing permissions and limitations
+ under the License.
+-->
+
+
+
+<!DOCTYPE html>
+<html class="writer-html5" lang="en" >
+<head>
+  <meta charset="utf-8">
+  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  
+  <title>PWM Drivers &mdash; NuttX latest documentation</title>
+  
+
+  
+  <link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
+  <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
+  <link rel="stylesheet" href="../../../_static/custom.css" type="text/css" />
+
+  
+  
+    <link rel="shortcut icon" href="../../../_static/favicon.ico"/>
+  
+  
+  
+
+  
+  <!--[if lt IE 9]>
+    <script src="../../../_static/js/html5shiv.min.js"></script>
+  <![endif]-->
+  
+    
+      <script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
+        <script src="../../../_static/jquery.js"></script>
+        <script src="../../../_static/underscore.js"></script>
+        <script src="../../../_static/doctools.js"></script>
+        <script src="../../../_static/language_data.js"></script>
+    
+    <script type="text/javascript" src="../../../_static/js/theme.js"></script>
+
+    
+    <link rel="index" title="Index" href="../../../genindex.html" />
+    <link rel="search" title="Search" href="../../../search.html" />
+    <link rel="next" title="CAN Drivers" href="can.html" />
+    <link rel="prev" title="Analog (ADC/DAC) Drivers" href="analog.html" /> 
+</head>
+
+<body class="wy-body-for-nav">
+
+   
+  <div class="wy-grid-for-nav">
+    
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
+          
+  
+    <a href="../../../index.html" class="icon icon-home"> NuttX
+  
+
+  
+    
+    <img src="../../../_static/NuttX.png" class="logo" alt="Logo"/>
+  
+  </a>
+  
+  <!-- this version selector is quite ugly, should be probably replaced by something
+       more modern -->
+       
+  <div class="version-selector">
+    <select>
+    
+      <option value="latest" selected="selected">latest</option>
+    
+    </select>
+  </div>
+  
+  
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+
+        </div>
+
+        
+        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
+          
+            
+            
+              
+            
+            
+              <p class="caption"><span class="caption-text">Table of Contents</span></p>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="../../../index.html">Home</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../introduction/index.html">Introduction</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../introduction/inviolables.html">The Inviolable Principles of NuttX</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../quickstart/index.html">Getting Started</a></li>
+<li class="toctree-l1 current"><a class="reference internal" href="../../index.html">OS Components</a><ul class="current">
+<li class="toctree-l2"><a class="reference internal" href="../../nsh/index.html">NuttShell (NSH)</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../power.html">Power Management</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../socketcan.html">SocketCAN Device Drivers</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../syslog.html">SYSLOG</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../binfmt.html">Binary Loader</a></li>
+<li class="toctree-l2 current"><a class="reference internal" href="../index.html">Device Drivers</a><ul class="current">
+<li class="toctree-l3 current"><a class="reference internal" href="index.html">Character Device Drivers</a><ul class="current">
+<li class="toctree-l4"><a class="reference internal" href="serial.html">Serial Device Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="touchscreen.html">Touchscreen Device Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="analog.html">Analog (ADC/DAC) Drivers</a></li>
+<li class="toctree-l4 current"><a class="current reference internal" href="#">PWM Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="can.html">CAN Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="quadrature.html">Quadrature Encoder Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="timer.html">Timer Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="rtc.html">RTC Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="watchdog.html">Watchdog Timer Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="keypad.html">Keyboard/Keypad Drivers</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="../block/index.html">Block Device Drivers</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../special/index.html">Specialized Device Drivers</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../index.html#lower-half-and-upper-half">Lower-half and upper-half</a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="../../filesystem.html">NuttX File System</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../nxflat.html">NXFLAT</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../nxgraphics/index.html">NX Graphics Subsystem</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../nxwidgets.html">NxWidgets</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../paging.html">On-Demand Paging</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="../../../applications/index.html">Applications</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../boards/index.html">Supported Boards</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../reference/index.html">API Reference</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../guides/index.html">Guides</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../releases/index.html">Releases</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../contributing/index.html">Contributing</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../glossary.html">Glossary</a></li>
+</ul>
+
+            
+          
+        </div>
+        
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
+
+      
+      <nav class="wy-nav-top" aria-label="top navigation">
+        
+          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+          <a href="../../../index.html">NuttX</a>
+        
+      </nav>
+
+
+      <div class="wy-nav-content">
+        
+        <div class="rst-content">
+        
+          
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<div role="navigation" aria-label="breadcrumbs navigation">
+
+  <ul class="wy-breadcrumbs">
+    
+      <li><a href="../../../index.html" class="icon icon-home"></a> &raquo;</li>
+        
+          <li><a href="../../index.html">OS Components</a> &raquo;</li>
+        
+          <li><a href="../index.html">Device Drivers</a> &raquo;</li>
+        
+          <li><a href="index.html">Character Device Drivers</a> &raquo;</li>
+        
+      <li>PWM Drivers</li>
+    
+    
+      <li class="wy-breadcrumbs-aside">
+        
+            
+            <a href="../../../_sources/components/drivers/character/pwm.rst.txt" rel="nofollow"> View page source</a>
+          
+        
+      </li>
+    
+  </ul>
+
+  
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+            
+  <div class="section" id="pwm-drivers">
+<h1>PWM Drivers<a class="headerlink" href="#pwm-drivers" title="Permalink to this headline">¶</a></h1>
+<p>For the purposes of this driver, a PWM device is any device that
+generates periodic output pulses of controlled frequency and pulse
+width. Such a device might be used, for example, to perform
+pulse-width modulated output or frequency/pulse-count modulated
+output (such as might be needed to control a stepper motor).</p>
+<p>The NuttX PWM driver is split into two parts:</p>
+<ol class="arabic simple">
+<li><p>An “upper half”, generic driver that provides the common PWM
+interface to application level code, and</p></li>
+<li><p>A “lower half”, platform-specific driver that implements the
+low-level timer controls to implement the PWM functionality.</p></li>
+</ol>
+<p>Files supporting PWM can be found in the following locations:</p>
+<ul class="simple">
+<li><p><strong>Interface Definition</strong>. The header file for the NuttX PWM
+driver reside at <code class="docutils literal notranslate"><span class="pre">include/nuttx/timers/pwm.h</span></code>. This header
+file includes both the application level interface to the PWM
+driver as well as the interface between the “upper half” and
+“lower half” drivers. The PWM module uses a standard character
+driver framework. However, since the PWM driver is a devices
+control interface and not a data transfer interface, the
+majority of the functionality available to the application is
+implemented in driver ioctl calls.</p></li>
+<li><p><strong>“Upper Half” Driver</strong>. The generic, “upper half” PWM driver
+resides at <code class="docutils literal notranslate"><span class="pre">drivers/pwm.c</span></code>.</p></li>
+<li><p><strong>“Lower Half” Drivers</strong>. Platform-specific PWM drivers reside
+in <code class="docutils literal notranslate"><span class="pre">arch/</span></code><em>&lt;architecture&gt;</em><code class="docutils literal notranslate"><span class="pre">/src/</span></code><em>&lt;hardware&gt;</em>
+directory for the specific processor <em>&lt;architecture&gt;</em> and for
+the specific <em>&lt;chip&gt;</em> PWM peripheral devices.</p></li>
+</ul>
+</div>
+
+
+           </div>
+           
+          </div>
+          <footer>
+  
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>
+        
+        &copy; Copyright 2020, The Apache Software Foundation
+
+    </p>
+  </div> 
+
+</footer>
+
+        </div>
+      </div>
+
+    </section>
+
+  </div>
+  
+
+  <script type="text/javascript">
+      jQuery(function () {
+          SphinxRtdTheme.Navigation.enable(true);
+      });
+  </script>
+
+  
+  
+    
+   
+
+</body>
+</html>
\ No newline at end of file
diff --git a/content/docs/latest/components/drivers/character/quadrature.html b/content/docs/latest/components/drivers/character/quadrature.html
new file mode 100644
index 0000000..711ab17
--- /dev/null
+++ b/content/docs/latest/components/drivers/character/quadrature.html
@@ -0,0 +1,299 @@
+<!--
+ Documentation/_templates/layout.html
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements.  See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.  The
+ ASF licenses this file to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance with the
+ License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ License for the specific language governing permissions and limitations
+ under the License.
+-->
+
+
+
+<!DOCTYPE html>
+<html class="writer-html5" lang="en" >
+<head>
+  <meta charset="utf-8">
+  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  
+  <title>Quadrature Encoder Drivers &mdash; NuttX latest documentation</title>
+  
+
+  
+  <link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
+  <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
+  <link rel="stylesheet" href="../../../_static/custom.css" type="text/css" />
+
+  
+  
+    <link rel="shortcut icon" href="../../../_static/favicon.ico"/>
+  
+  
+  
+
+  
+  <!--[if lt IE 9]>
+    <script src="../../../_static/js/html5shiv.min.js"></script>
+  <![endif]-->
+  
+    
+      <script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
+        <script src="../../../_static/jquery.js"></script>
+        <script src="../../../_static/underscore.js"></script>
+        <script src="../../../_static/doctools.js"></script>
+        <script src="../../../_static/language_data.js"></script>
+    
+    <script type="text/javascript" src="../../../_static/js/theme.js"></script>
+
+    
+    <link rel="index" title="Index" href="../../../genindex.html" />
+    <link rel="search" title="Search" href="../../../search.html" />
+    <link rel="next" title="Timer Drivers" href="timer.html" />
+    <link rel="prev" title="CAN Drivers" href="can.html" /> 
+</head>
+
+<body class="wy-body-for-nav">
+
+   
+  <div class="wy-grid-for-nav">
+    
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
+          
+  
+    <a href="../../../index.html" class="icon icon-home"> NuttX
+  
+
+  
+    
+    <img src="../../../_static/NuttX.png" class="logo" alt="Logo"/>
+  
+  </a>
+  
+  <!-- this version selector is quite ugly, should be probably replaced by something
+       more modern -->
+       
+  <div class="version-selector">
+    <select>
+    
+      <option value="latest" selected="selected">latest</option>
+    
+    </select>
+  </div>
+  
+  
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+
+        </div>
+
+        
+        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
+          
+            
+            
+              
+            
+            
+              <p class="caption"><span class="caption-text">Table of Contents</span></p>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="../../../index.html">Home</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../introduction/index.html">Introduction</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../introduction/inviolables.html">The Inviolable Principles of NuttX</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../quickstart/index.html">Getting Started</a></li>
+<li class="toctree-l1 current"><a class="reference internal" href="../../index.html">OS Components</a><ul class="current">
+<li class="toctree-l2"><a class="reference internal" href="../../nsh/index.html">NuttShell (NSH)</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../power.html">Power Management</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../socketcan.html">SocketCAN Device Drivers</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../syslog.html">SYSLOG</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../binfmt.html">Binary Loader</a></li>
+<li class="toctree-l2 current"><a class="reference internal" href="../index.html">Device Drivers</a><ul class="current">
+<li class="toctree-l3 current"><a class="reference internal" href="index.html">Character Device Drivers</a><ul class="current">
+<li class="toctree-l4"><a class="reference internal" href="serial.html">Serial Device Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="touchscreen.html">Touchscreen Device Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="analog.html">Analog (ADC/DAC) Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="pwm.html">PWM Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="can.html">CAN Drivers</a></li>
+<li class="toctree-l4 current"><a class="current reference internal" href="#">Quadrature Encoder Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="timer.html">Timer Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="rtc.html">RTC Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="watchdog.html">Watchdog Timer Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="keypad.html">Keyboard/Keypad Drivers</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="../block/index.html">Block Device Drivers</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../special/index.html">Specialized Device Drivers</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../index.html#lower-half-and-upper-half">Lower-half and upper-half</a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="../../filesystem.html">NuttX File System</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../nxflat.html">NXFLAT</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../nxgraphics/index.html">NX Graphics Subsystem</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../nxwidgets.html">NxWidgets</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../paging.html">On-Demand Paging</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="../../../applications/index.html">Applications</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../boards/index.html">Supported Boards</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../reference/index.html">API Reference</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../guides/index.html">Guides</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../releases/index.html">Releases</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../contributing/index.html">Contributing</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../glossary.html">Glossary</a></li>
+</ul>
+
+            
+          
+        </div>
+        
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
+
+      
+      <nav class="wy-nav-top" aria-label="top navigation">
+        
+          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+          <a href="../../../index.html">NuttX</a>
+        
+      </nav>
+
+
+      <div class="wy-nav-content">
+        
+        <div class="rst-content">
+        
+          
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<div role="navigation" aria-label="breadcrumbs navigation">
+
+  <ul class="wy-breadcrumbs">
+    
+      <li><a href="../../../index.html" class="icon icon-home"></a> &raquo;</li>
+        
+          <li><a href="../../index.html">OS Components</a> &raquo;</li>
+        
+          <li><a href="../index.html">Device Drivers</a> &raquo;</li>
+        
+          <li><a href="index.html">Character Device Drivers</a> &raquo;</li>
+        
+      <li>Quadrature Encoder Drivers</li>
+    
+    
+      <li class="wy-breadcrumbs-aside">
+        
+            
+            <a href="../../../_sources/components/drivers/character/quadrature.rst.txt" rel="nofollow"> View page source</a>
+          
+        
+      </li>
+    
+  </ul>
+
+  
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+            
+  <div class="section" id="quadrature-encoder-drivers">
+<h1>Quadrature Encoder Drivers<a class="headerlink" href="#quadrature-encoder-drivers" title="Permalink to this headline">¶</a></h1>
+<p>NuttX supports a low-level, two-part Quadrature Encoder driver.</p>
+<ol class="arabic simple">
+<li><p>An “upper half”, generic driver that provides the common
+Quadrature Encoder interface to application level code, and</p></li>
+<li><p>A “lower half”, platform-specific driver that implements the
+low-level timer controls to implement the Quadrature Encoder
+functionality.</p></li>
+</ol>
+<p>Files supporting the Quadrature Encoder can be found in the
+following locations:</p>
+<ul class="simple">
+<li><p><strong>Interface Definition</strong>. The header file for the NuttX
+Quadrature Encoder driver reside at
+<code class="docutils literal notranslate"><span class="pre">include/nuttx/sensors/qencoder.h</span></code>. This header file includes
+both the application level interface to the Quadrature Encoder
+driver as well as the interface between the “upper half” and
+“lower half” drivers. The Quadrature Encoder module uses a
+standard character driver framework.</p></li>
+<li><p><strong>“Upper Half” Driver</strong>. The generic, “upper half” Quadrature
+Encoder driver resides at <code class="docutils literal notranslate"><span class="pre">drivers/sensors/qencoder.c</span></code>.</p></li>
+<li><p><strong>“Lower Half” Drivers</strong>. Platform-specific Quadrature Encoder
+drivers reside in
+<code class="docutils literal notranslate"><span class="pre">arch/</span></code><em>&lt;architecture&gt;</em><code class="docutils literal notranslate"><span class="pre">/src/</span></code><em>&lt;hardware&gt;</em> directory
+for the specific processor <em>&lt;architecture&gt;</em> and for the
+specific <em>&lt;chip&gt;</em> Quadrature Encoder peripheral devices.</p></li>
+</ul>
+</div>
+
+
+           </div>
+           
+          </div>
+          <footer>
+  
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>
+        
+        &copy; Copyright 2020, The Apache Software Foundation
+
+    </p>
+  </div> 
+
+</footer>
+
+        </div>
+      </div>
+
+    </section>
+
+  </div>
+  
+
+  <script type="text/javascript">
+      jQuery(function () {
+          SphinxRtdTheme.Navigation.enable(true);
+      });
+  </script>
+
+  
+  
+    
+   
+
+</body>
+</html>
\ No newline at end of file
diff --git a/content/docs/latest/components/drivers/character/rtc.html b/content/docs/latest/components/drivers/character/rtc.html
new file mode 100644
index 0000000..d31035f
--- /dev/null
+++ b/content/docs/latest/components/drivers/character/rtc.html
@@ -0,0 +1,296 @@
+<!--
+ Documentation/_templates/layout.html
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements.  See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.  The
+ ASF licenses this file to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance with the
+ License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ License for the specific language governing permissions and limitations
+ under the License.
+-->
+
+
+
+<!DOCTYPE html>
+<html class="writer-html5" lang="en" >
+<head>
+  <meta charset="utf-8">
+  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  
+  <title>RTC Drivers &mdash; NuttX latest documentation</title>
+  
+
+  
+  <link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
+  <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
+  <link rel="stylesheet" href="../../../_static/custom.css" type="text/css" />
+
+  
+  
+    <link rel="shortcut icon" href="../../../_static/favicon.ico"/>
+  
+  
+  
+
+  
+  <!--[if lt IE 9]>
+    <script src="../../../_static/js/html5shiv.min.js"></script>
+  <![endif]-->
+  
+    
+      <script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
+        <script src="../../../_static/jquery.js"></script>
+        <script src="../../../_static/underscore.js"></script>
+        <script src="../../../_static/doctools.js"></script>
+        <script src="../../../_static/language_data.js"></script>
+    
+    <script type="text/javascript" src="../../../_static/js/theme.js"></script>
+
+    
+    <link rel="index" title="Index" href="../../../genindex.html" />
+    <link rel="search" title="Search" href="../../../search.html" />
+    <link rel="next" title="Watchdog Timer Drivers" href="watchdog.html" />
+    <link rel="prev" title="Timer Drivers" href="timer.html" /> 
+</head>
+
+<body class="wy-body-for-nav">
+
+   
+  <div class="wy-grid-for-nav">
+    
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
+          
+  
+    <a href="../../../index.html" class="icon icon-home"> NuttX
+  
+
+  
+    
+    <img src="../../../_static/NuttX.png" class="logo" alt="Logo"/>
+  
+  </a>
+  
+  <!-- this version selector is quite ugly, should be probably replaced by something
+       more modern -->
+       
+  <div class="version-selector">
+    <select>
+    
+      <option value="latest" selected="selected">latest</option>
+    
+    </select>
+  </div>
+  
+  
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+
+        </div>
+
+        
+        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
+          
+            
+            
+              
+            
+            
+              <p class="caption"><span class="caption-text">Table of Contents</span></p>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="../../../index.html">Home</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../introduction/index.html">Introduction</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../introduction/inviolables.html">The Inviolable Principles of NuttX</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../quickstart/index.html">Getting Started</a></li>
+<li class="toctree-l1 current"><a class="reference internal" href="../../index.html">OS Components</a><ul class="current">
+<li class="toctree-l2"><a class="reference internal" href="../../nsh/index.html">NuttShell (NSH)</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../power.html">Power Management</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../socketcan.html">SocketCAN Device Drivers</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../syslog.html">SYSLOG</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../binfmt.html">Binary Loader</a></li>
+<li class="toctree-l2 current"><a class="reference internal" href="../index.html">Device Drivers</a><ul class="current">
+<li class="toctree-l3 current"><a class="reference internal" href="index.html">Character Device Drivers</a><ul class="current">
+<li class="toctree-l4"><a class="reference internal" href="serial.html">Serial Device Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="touchscreen.html">Touchscreen Device Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="analog.html">Analog (ADC/DAC) Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="pwm.html">PWM Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="can.html">CAN Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="quadrature.html">Quadrature Encoder Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="timer.html">Timer Drivers</a></li>
+<li class="toctree-l4 current"><a class="current reference internal" href="#">RTC Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="watchdog.html">Watchdog Timer Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="keypad.html">Keyboard/Keypad Drivers</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="../block/index.html">Block Device Drivers</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../special/index.html">Specialized Device Drivers</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../index.html#lower-half-and-upper-half">Lower-half and upper-half</a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="../../filesystem.html">NuttX File System</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../nxflat.html">NXFLAT</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../nxgraphics/index.html">NX Graphics Subsystem</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../nxwidgets.html">NxWidgets</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../paging.html">On-Demand Paging</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="../../../applications/index.html">Applications</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../boards/index.html">Supported Boards</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../reference/index.html">API Reference</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../guides/index.html">Guides</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../releases/index.html">Releases</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../contributing/index.html">Contributing</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../glossary.html">Glossary</a></li>
+</ul>
+
+            
+          
+        </div>
+        
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
+
+      
+      <nav class="wy-nav-top" aria-label="top navigation">
+        
+          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+          <a href="../../../index.html">NuttX</a>
+        
+      </nav>
+
+
+      <div class="wy-nav-content">
+        
+        <div class="rst-content">
+        
+          
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<div role="navigation" aria-label="breadcrumbs navigation">
+
+  <ul class="wy-breadcrumbs">
+    
+      <li><a href="../../../index.html" class="icon icon-home"></a> &raquo;</li>
+        
+          <li><a href="../../index.html">OS Components</a> &raquo;</li>
+        
+          <li><a href="../index.html">Device Drivers</a> &raquo;</li>
+        
+          <li><a href="index.html">Character Device Drivers</a> &raquo;</li>
+        
+      <li>RTC Drivers</li>
+    
+    
+      <li class="wy-breadcrumbs-aside">
+        
+            
+            <a href="../../../_sources/components/drivers/character/rtc.rst.txt" rel="nofollow"> View page source</a>
+          
+        
+      </li>
+    
+  </ul>
+
+  
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+            
+  <div class="section" id="rtc-drivers">
+<h1>RTC Drivers<a class="headerlink" href="#rtc-drivers" title="Permalink to this headline">¶</a></h1>
+<p>NuttX supports a low-level, two-part RealTime Clock (RTC) driver.</p>
+<ol class="arabic simple">
+<li><p>An “upper half”, generic driver that provides the common RTC
+interface to application level code, and</p></li>
+<li><p>A “lower half”, platform-specific driver that implements the
+low-level timer controls to implement the RTC functionality.</p></li>
+</ol>
+<p>Files supporting the RTC driver can be found in the following
+locations:</p>
+<ul class="simple">
+<li><p><strong>Interface Definition</strong>. The header file for the NuttX RTC
+driver reside at <code class="docutils literal notranslate"><span class="pre">include/nuttx/timers/rtc.h</span></code>. This header
+file includes both the application level interface to the RTC
+driver as well as the interface between the “upper half” and
+“lower half” drivers. The RTC driver uses a standard character
+driver framework.</p></li>
+<li><p><strong>“Upper Half” Driver</strong>. The generic, “upper half” RTC driver
+resides at <code class="docutils literal notranslate"><span class="pre">drivers/timers/rtc.c</span></code>.</p></li>
+<li><p><strong>“Lower Half” Drivers</strong>. Platform-specific RTC drivers reside
+in <code class="docutils literal notranslate"><span class="pre">arch/</span></code><em>&lt;architecture&gt;</em><code class="docutils literal notranslate"><span class="pre">/src/</span></code><em>&lt;hardware&gt;</em>
+directory for the specific processor <em>&lt;architecture&gt;</em> and for
+the specific <em>&lt;chip&gt;</em> RTC peripheral devices.</p></li>
+</ul>
+</div>
+
+
+           </div>
+           
+          </div>
+          <footer>
+  
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>
+        
+        &copy; Copyright 2020, The Apache Software Foundation
+
+    </p>
+  </div> 
+
+</footer>
+
+        </div>
+      </div>
+
+    </section>
+
+  </div>
+  
+
+  <script type="text/javascript">
+      jQuery(function () {
+          SphinxRtdTheme.Navigation.enable(true);
+      });
+  </script>
+
+  
+  
+    
+   
+
+</body>
+</html>
\ No newline at end of file
diff --git a/content/docs/latest/components/drivers/character/serial.html b/content/docs/latest/components/drivers/character/serial.html
new file mode 100644
index 0000000..87536d8
--- /dev/null
+++ b/content/docs/latest/components/drivers/character/serial.html
@@ -0,0 +1,295 @@
+<!--
+ Documentation/_templates/layout.html
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements.  See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.  The
+ ASF licenses this file to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance with the
+ License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ License for the specific language governing permissions and limitations
+ under the License.
+-->
+
+
+
+<!DOCTYPE html>
+<html class="writer-html5" lang="en" >
+<head>
+  <meta charset="utf-8">
+  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  
+  <title>Serial Device Drivers &mdash; NuttX latest documentation</title>
+  
+
+  
+  <link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
+  <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
+  <link rel="stylesheet" href="../../../_static/custom.css" type="text/css" />
+
+  
+  
+    <link rel="shortcut icon" href="../../../_static/favicon.ico"/>
+  
+  
+  
+
+  
+  <!--[if lt IE 9]>
+    <script src="../../../_static/js/html5shiv.min.js"></script>
+  <![endif]-->
+  
+    
+      <script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
+        <script src="../../../_static/jquery.js"></script>
+        <script src="../../../_static/underscore.js"></script>
+        <script src="../../../_static/doctools.js"></script>
+        <script src="../../../_static/language_data.js"></script>
+    
+    <script type="text/javascript" src="../../../_static/js/theme.js"></script>
+
+    
+    <link rel="index" title="Index" href="../../../genindex.html" />
+    <link rel="search" title="Search" href="../../../search.html" />
+    <link rel="next" title="Touchscreen Device Drivers" href="touchscreen.html" />
+    <link rel="prev" title="Character Device Drivers" href="index.html" /> 
+</head>
+
+<body class="wy-body-for-nav">
+
+   
+  <div class="wy-grid-for-nav">
+    
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
+          
+  
+    <a href="../../../index.html" class="icon icon-home"> NuttX
+  
+
+  
+    
+    <img src="../../../_static/NuttX.png" class="logo" alt="Logo"/>
+  
+  </a>
+  
+  <!-- this version selector is quite ugly, should be probably replaced by something
+       more modern -->
+       
+  <div class="version-selector">
+    <select>
+    
+      <option value="latest" selected="selected">latest</option>
+    
+    </select>
+  </div>
+  
+  
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+
+        </div>
+
+        
+        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
+          
+            
+            
+              
+            
+            
+              <p class="caption"><span class="caption-text">Table of Contents</span></p>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="../../../index.html">Home</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../introduction/index.html">Introduction</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../introduction/inviolables.html">The Inviolable Principles of NuttX</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../quickstart/index.html">Getting Started</a></li>
+<li class="toctree-l1 current"><a class="reference internal" href="../../index.html">OS Components</a><ul class="current">
+<li class="toctree-l2"><a class="reference internal" href="../../nsh/index.html">NuttShell (NSH)</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../power.html">Power Management</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../socketcan.html">SocketCAN Device Drivers</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../syslog.html">SYSLOG</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../binfmt.html">Binary Loader</a></li>
+<li class="toctree-l2 current"><a class="reference internal" href="../index.html">Device Drivers</a><ul class="current">
+<li class="toctree-l3 current"><a class="reference internal" href="index.html">Character Device Drivers</a><ul class="current">
+<li class="toctree-l4 current"><a class="current reference internal" href="#">Serial Device Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="touchscreen.html">Touchscreen Device Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="analog.html">Analog (ADC/DAC) Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="pwm.html">PWM Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="can.html">CAN Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="quadrature.html">Quadrature Encoder Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="timer.html">Timer Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="rtc.html">RTC Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="watchdog.html">Watchdog Timer Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="keypad.html">Keyboard/Keypad Drivers</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="../block/index.html">Block Device Drivers</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../special/index.html">Specialized Device Drivers</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../index.html#lower-half-and-upper-half">Lower-half and upper-half</a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="../../filesystem.html">NuttX File System</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../nxflat.html">NXFLAT</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../nxgraphics/index.html">NX Graphics Subsystem</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../nxwidgets.html">NxWidgets</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../paging.html">On-Demand Paging</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="../../../applications/index.html">Applications</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../boards/index.html">Supported Boards</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../reference/index.html">API Reference</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../guides/index.html">Guides</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../releases/index.html">Releases</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../contributing/index.html">Contributing</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../glossary.html">Glossary</a></li>
+</ul>
+
+            
+          
+        </div>
+        
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
+
+      
+      <nav class="wy-nav-top" aria-label="top navigation">
+        
+          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+          <a href="../../../index.html">NuttX</a>
+        
+      </nav>
+
+
+      <div class="wy-nav-content">
+        
+        <div class="rst-content">
+        
+          
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<div role="navigation" aria-label="breadcrumbs navigation">
+
+  <ul class="wy-breadcrumbs">
+    
+      <li><a href="../../../index.html" class="icon icon-home"></a> &raquo;</li>
+        
+          <li><a href="../../index.html">OS Components</a> &raquo;</li>
+        
+          <li><a href="../index.html">Device Drivers</a> &raquo;</li>
+        
+          <li><a href="index.html">Character Device Drivers</a> &raquo;</li>
+        
+      <li>Serial Device Drivers</li>
+    
+    
+      <li class="wy-breadcrumbs-aside">
+        
+            
+            <a href="../../../_sources/components/drivers/character/serial.rst.txt" rel="nofollow"> View page source</a>
+          
+        
+      </li>
+    
+  </ul>
+
+  
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+            
+  <div class="section" id="serial-device-drivers">
+<h1>Serial Device Drivers<a class="headerlink" href="#serial-device-drivers" title="Permalink to this headline">¶</a></h1>
+<ul class="simple">
+<li><p><code class="docutils literal notranslate"><span class="pre">include/nuttx/serial/serial.h</span></code>. All structures and APIs
+needed to work with serial drivers are provided in this header
+file.</p></li>
+<li><p><code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">uart_ops_s</span></code>. Each serial device driver must
+implement an instance of <code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">uart_ops_s</span></code>. That structure
+defines a call table with the following methods:</p></li>
+<li><p><code class="docutils literal notranslate"><span class="pre">int</span> <span class="pre">uart_register(FAR</span> <span class="pre">const</span> <span class="pre">char</span> <span class="pre">*path,</span> <span class="pre">FAR</span> <span class="pre">uart_dev_t</span> <span class="pre">*dev);</span></code>.
+A serial driver may register itself by calling
+<code class="docutils literal notranslate"><span class="pre">uart_register()</span></code>, passing it the <code class="docutils literal notranslate"><span class="pre">path</span></code> where it will
+appear in the <a class="reference external" href="#NxFileSystem">pseudo-file-system</a> and it’s
+initialized instance of <code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">uart_ops_s</span></code>. By convention,
+serial device drivers are registered at paths like
+<code class="docutils literal notranslate"><span class="pre">/dev/ttyS0</span></code>, <code class="docutils literal notranslate"><span class="pre">/dev/ttyS1</span></code>, etc. See the
+<code class="docutils literal notranslate"><span class="pre">uart_register()</span></code> implementation in <code class="docutils literal notranslate"><span class="pre">drivers/serial.c</span></code>.</p></li>
+<li><p><strong>User Access</strong>. Serial drivers are, ultimately, normal
+<a class="reference external" href="#chardrivers">character drivers</a> and are accessed as other
+character drivers.</p></li>
+<li><p><strong>Examples</strong>: <code class="docutils literal notranslate"><span class="pre">arch/arm/src/stm32/stm32_serial.c</span></code>,
+<code class="docutils literal notranslate"><span class="pre">arch/arm/src/lpc214x/lpc214x_serial.c</span></code>,
+<code class="docutils literal notranslate"><span class="pre">arch/z16/src/z16f/z16f_serial.c</span></code>, etc.</p></li>
+</ul>
+</div>
+
+
+           </div>
+           
+          </div>
+          <footer>
+  
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>
+        
+        &copy; Copyright 2020, The Apache Software Foundation
+
+    </p>
+  </div> 
+
+</footer>
+
+        </div>
+      </div>
+
+    </section>
+
+  </div>
+  
+
+  <script type="text/javascript">
+      jQuery(function () {
+          SphinxRtdTheme.Navigation.enable(true);
+      });
+  </script>
+
+  
+  
+    
+   
+
+</body>
+</html>
\ No newline at end of file
diff --git a/content/docs/latest/components/drivers/character/timer.html b/content/docs/latest/components/drivers/character/timer.html
new file mode 100644
index 0000000..d707f48
--- /dev/null
+++ b/content/docs/latest/components/drivers/character/timer.html
@@ -0,0 +1,289 @@
+<!--
+ Documentation/_templates/layout.html
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements.  See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.  The
+ ASF licenses this file to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance with the
+ License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ License for the specific language governing permissions and limitations
+ under the License.
+-->
+
+
+
+<!DOCTYPE html>
+<html class="writer-html5" lang="en" >
+<head>
+  <meta charset="utf-8">
+  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  
+  <title>Timer Drivers &mdash; NuttX latest documentation</title>
+  
+
+  
+  <link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
+  <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
+  <link rel="stylesheet" href="../../../_static/custom.css" type="text/css" />
+
+  
+  
+    <link rel="shortcut icon" href="../../../_static/favicon.ico"/>
+  
+  
+  
+
+  
+  <!--[if lt IE 9]>
+    <script src="../../../_static/js/html5shiv.min.js"></script>
+  <![endif]-->
+  
+    
+      <script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
+        <script src="../../../_static/jquery.js"></script>
+        <script src="../../../_static/underscore.js"></script>
+        <script src="../../../_static/doctools.js"></script>
+        <script src="../../../_static/language_data.js"></script>
+    
+    <script type="text/javascript" src="../../../_static/js/theme.js"></script>
+
+    
+    <link rel="index" title="Index" href="../../../genindex.html" />
+    <link rel="search" title="Search" href="../../../search.html" />
+    <link rel="next" title="RTC Drivers" href="rtc.html" />
+    <link rel="prev" title="Quadrature Encoder Drivers" href="quadrature.html" /> 
+</head>
+
+<body class="wy-body-for-nav">
+
+   
+  <div class="wy-grid-for-nav">
+    
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
+          
+  
+    <a href="../../../index.html" class="icon icon-home"> NuttX
+  
+
+  
+    
+    <img src="../../../_static/NuttX.png" class="logo" alt="Logo"/>
+  
+  </a>
+  
+  <!-- this version selector is quite ugly, should be probably replaced by something
+       more modern -->
+       
+  <div class="version-selector">
+    <select>
+    
+      <option value="latest" selected="selected">latest</option>
+    
+    </select>
+  </div>
+  
+  
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+
+        </div>
+
+        
+        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
+          
+            
+            
+              
+            
+            
+              <p class="caption"><span class="caption-text">Table of Contents</span></p>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="../../../index.html">Home</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../introduction/index.html">Introduction</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../introduction/inviolables.html">The Inviolable Principles of NuttX</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../quickstart/index.html">Getting Started</a></li>
+<li class="toctree-l1 current"><a class="reference internal" href="../../index.html">OS Components</a><ul class="current">
+<li class="toctree-l2"><a class="reference internal" href="../../nsh/index.html">NuttShell (NSH)</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../power.html">Power Management</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../socketcan.html">SocketCAN Device Drivers</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../syslog.html">SYSLOG</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../binfmt.html">Binary Loader</a></li>
+<li class="toctree-l2 current"><a class="reference internal" href="../index.html">Device Drivers</a><ul class="current">
+<li class="toctree-l3 current"><a class="reference internal" href="index.html">Character Device Drivers</a><ul class="current">
+<li class="toctree-l4"><a class="reference internal" href="serial.html">Serial Device Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="touchscreen.html">Touchscreen Device Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="analog.html">Analog (ADC/DAC) Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="pwm.html">PWM Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="can.html">CAN Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="quadrature.html">Quadrature Encoder Drivers</a></li>
+<li class="toctree-l4 current"><a class="current reference internal" href="#">Timer Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="rtc.html">RTC Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="watchdog.html">Watchdog Timer Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="keypad.html">Keyboard/Keypad Drivers</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="../block/index.html">Block Device Drivers</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../special/index.html">Specialized Device Drivers</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../index.html#lower-half-and-upper-half">Lower-half and upper-half</a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="../../filesystem.html">NuttX File System</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../nxflat.html">NXFLAT</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../nxgraphics/index.html">NX Graphics Subsystem</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../nxwidgets.html">NxWidgets</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../paging.html">On-Demand Paging</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="../../../applications/index.html">Applications</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../boards/index.html">Supported Boards</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../reference/index.html">API Reference</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../guides/index.html">Guides</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../releases/index.html">Releases</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../contributing/index.html">Contributing</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../glossary.html">Glossary</a></li>
+</ul>
+
+            
+          
+        </div>
+        
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
+
+      
+      <nav class="wy-nav-top" aria-label="top navigation">
+        
+          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+          <a href="../../../index.html">NuttX</a>
+        
+      </nav>
+
+
+      <div class="wy-nav-content">
+        
+        <div class="rst-content">
+        
+          
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<div role="navigation" aria-label="breadcrumbs navigation">
+
+  <ul class="wy-breadcrumbs">
+    
+      <li><a href="../../../index.html" class="icon icon-home"></a> &raquo;</li>
+        
+          <li><a href="../../index.html">OS Components</a> &raquo;</li>
+        
+          <li><a href="../index.html">Device Drivers</a> &raquo;</li>
+        
+          <li><a href="index.html">Character Device Drivers</a> &raquo;</li>
+        
+      <li>Timer Drivers</li>
+    
+    
+      <li class="wy-breadcrumbs-aside">
+        
+            
+            <a href="../../../_sources/components/drivers/character/timer.rst.txt" rel="nofollow"> View page source</a>
+          
+        
+      </li>
+    
+  </ul>
+
+  
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+            
+  <div class="section" id="timer-drivers">
+<h1>Timer Drivers<a class="headerlink" href="#timer-drivers" title="Permalink to this headline">¶</a></h1>
+<p>Files supporting the timer driver can be found in the following
+locations:</p>
+<ul class="simple">
+<li><p><strong>Interface Definition</strong>. The header file for the NuttX timer
+driver reside at <code class="docutils literal notranslate"><span class="pre">include/nuttx/timers/timer.h</span></code>. This header
+file includes both the application level interface to the timer
+driver as well as the interface between the “upper half” and
+“lower half” drivers. The timer driver uses a standard
+character driver framework.</p></li>
+<li><p><strong>“Upper Half” Driver</strong>. The generic, “upper half” timer driver
+resides at <code class="docutils literal notranslate"><span class="pre">drivers/timers/timer.c</span></code>.</p></li>
+<li><p><strong>“Lower Half” Drivers</strong>. Platform-specific timer drivers
+reside in <code class="docutils literal notranslate"><span class="pre">arch/</span></code><em>&lt;architecture&gt;</em><code class="docutils literal notranslate"><span class="pre">/src/</span></code><em>&lt;hardware&gt;</em>
+directory for the specific processor <em>&lt;architecture&gt;</em> and for
+the specific <em>&lt;chip&gt;</em> timer peripheral devices.</p></li>
+</ul>
+</div>
+
+
+           </div>
+           
+          </div>
+          <footer>
+  
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>
+        
+        &copy; Copyright 2020, The Apache Software Foundation
+
+    </p>
+  </div> 
+
+</footer>
+
+        </div>
+      </div>
+
+    </section>
+
+  </div>
+  
+
+  <script type="text/javascript">
+      jQuery(function () {
+          SphinxRtdTheme.Navigation.enable(true);
+      });
+  </script>
+
+  
+  
+    
+   
+
+</body>
+</html>
\ No newline at end of file
diff --git a/content/docs/latest/components/drivers/character/touchscreen.html b/content/docs/latest/components/drivers/character/touchscreen.html
new file mode 100644
index 0000000..61b8165
--- /dev/null
+++ b/content/docs/latest/components/drivers/character/touchscreen.html
@@ -0,0 +1,308 @@
+<!--
+ Documentation/_templates/layout.html
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements.  See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.  The
+ ASF licenses this file to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance with the
+ License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ License for the specific language governing permissions and limitations
+ under the License.
+-->
+
+
+
+<!DOCTYPE html>
+<html class="writer-html5" lang="en" >
+<head>
+  <meta charset="utf-8">
+  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  
+  <title>Touchscreen Device Drivers &mdash; NuttX latest documentation</title>
+  
+
+  
+  <link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
+  <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
+  <link rel="stylesheet" href="../../../_static/custom.css" type="text/css" />
+
+  
+  
+    <link rel="shortcut icon" href="../../../_static/favicon.ico"/>
+  
+  
+  
+
+  
+  <!--[if lt IE 9]>
+    <script src="../../../_static/js/html5shiv.min.js"></script>
+  <![endif]-->
+  
+    
+      <script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
+        <script src="../../../_static/jquery.js"></script>
+        <script src="../../../_static/underscore.js"></script>
+        <script src="../../../_static/doctools.js"></script>
+        <script src="../../../_static/language_data.js"></script>
+    
+    <script type="text/javascript" src="../../../_static/js/theme.js"></script>
+
+    
+    <link rel="index" title="Index" href="../../../genindex.html" />
+    <link rel="search" title="Search" href="../../../search.html" />
+    <link rel="next" title="Analog (ADC/DAC) Drivers" href="analog.html" />
+    <link rel="prev" title="Serial Device Drivers" href="serial.html" /> 
+</head>
+
+<body class="wy-body-for-nav">
+
+   
+  <div class="wy-grid-for-nav">
+    
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
+          
+  
+    <a href="../../../index.html" class="icon icon-home"> NuttX
+  
+
+  
+    
+    <img src="../../../_static/NuttX.png" class="logo" alt="Logo"/>
+  
+  </a>
+  
+  <!-- this version selector is quite ugly, should be probably replaced by something
+       more modern -->
+       
+  <div class="version-selector">
+    <select>
+    
+      <option value="latest" selected="selected">latest</option>
+    
+    </select>
+  </div>
+  
+  
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+
+        </div>
+
+        
+        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
+          
+            
+            
+              
+            
+            
+              <p class="caption"><span class="caption-text">Table of Contents</span></p>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="../../../index.html">Home</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../introduction/index.html">Introduction</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../introduction/inviolables.html">The Inviolable Principles of NuttX</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../quickstart/index.html">Getting Started</a></li>
+<li class="toctree-l1 current"><a class="reference internal" href="../../index.html">OS Components</a><ul class="current">
+<li class="toctree-l2"><a class="reference internal" href="../../nsh/index.html">NuttShell (NSH)</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../power.html">Power Management</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../socketcan.html">SocketCAN Device Drivers</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../syslog.html">SYSLOG</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../binfmt.html">Binary Loader</a></li>
+<li class="toctree-l2 current"><a class="reference internal" href="../index.html">Device Drivers</a><ul class="current">
+<li class="toctree-l3 current"><a class="reference internal" href="index.html">Character Device Drivers</a><ul class="current">
+<li class="toctree-l4"><a class="reference internal" href="serial.html">Serial Device Drivers</a></li>
+<li class="toctree-l4 current"><a class="current reference internal" href="#">Touchscreen Device Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="analog.html">Analog (ADC/DAC) Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="pwm.html">PWM Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="can.html">CAN Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="quadrature.html">Quadrature Encoder Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="timer.html">Timer Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="rtc.html">RTC Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="watchdog.html">Watchdog Timer Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="keypad.html">Keyboard/Keypad Drivers</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="../block/index.html">Block Device Drivers</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../special/index.html">Specialized Device Drivers</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../index.html#lower-half-and-upper-half">Lower-half and upper-half</a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="../../filesystem.html">NuttX File System</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../nxflat.html">NXFLAT</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../nxgraphics/index.html">NX Graphics Subsystem</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../nxwidgets.html">NxWidgets</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../paging.html">On-Demand Paging</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="../../../applications/index.html">Applications</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../boards/index.html">Supported Boards</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../reference/index.html">API Reference</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../guides/index.html">Guides</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../releases/index.html">Releases</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../contributing/index.html">Contributing</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../glossary.html">Glossary</a></li>
+</ul>
+
+            
+          
+        </div>
+        
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
+
+      
+      <nav class="wy-nav-top" aria-label="top navigation">
+        
+          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+          <a href="../../../index.html">NuttX</a>
+        
+      </nav>
+
+
+      <div class="wy-nav-content">
+        
+        <div class="rst-content">
+        
+          
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<div role="navigation" aria-label="breadcrumbs navigation">
+
+  <ul class="wy-breadcrumbs">
+    
+      <li><a href="../../../index.html" class="icon icon-home"></a> &raquo;</li>
+        
+          <li><a href="../../index.html">OS Components</a> &raquo;</li>
+        
+          <li><a href="../index.html">Device Drivers</a> &raquo;</li>
+        
+          <li><a href="index.html">Character Device Drivers</a> &raquo;</li>
+        
+      <li>Touchscreen Device Drivers</li>
+    
+    
+      <li class="wy-breadcrumbs-aside">
+        
+            
+            <a href="../../../_sources/components/drivers/character/touchscreen.rst.txt" rel="nofollow"> View page source</a>
+          
+        
+      </li>
+    
+  </ul>
+
+  
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+            
+  <div class="section" id="touchscreen-device-drivers">
+<h1>Touchscreen Device Drivers<a class="headerlink" href="#touchscreen-device-drivers" title="Permalink to this headline">¶</a></h1>
+<p>NuttX supports a two-part touchscreen driver architecture.</p>
+<ol class="arabic simple">
+<li><p>An “upper half”, generic driver that provides the common
+touchscreen interface to application level code, and</p></li>
+<li><p>A “lower half”, platform-specific driver that implements the
+low-level touchscreen controls to implement the touchscreen
+functionality.</p></li>
+</ol>
+<p>Files supporting the touchscreen controller (TSC) driver can be
+found in the following locations:</p>
+<ul class="simple">
+<li><p><strong>Interface Definition</strong>. The header files for NuttX
+touchscreen drivers reside in the
+<code class="docutils literal notranslate"><span class="pre">include/nuttx/include/input</span></code> directory. The interface
+between the touchscreen controller “upper half” and “lower
+half” drivers are <em>not</em> common, but vary from
+controller-to-controller. Because of this, each touchscreen
+driver has its own unique header file that describes the “upper
+half”/”lower half” interface in that directory. The application
+level interface to each touchscreen driver, on the other hand,
+<em>is</em> the same for each touchscreen driver and is described
+<code class="docutils literal notranslate"><span class="pre">include/nuttx/include/input/touchscreen.h</span></code>. The touchscreen
+driver uses a standard character driver framework but read
+operations return specially formatted data.</p></li>
+<li><p><strong>“Upper Half” Driver</strong>. The controller-specific, “upper half”
+touchscreen drivers reside in the directory <code class="docutils literal notranslate"><span class="pre">drivers/input</span></code>.</p></li>
+<li><p><strong>“Lower Half” Drivers</strong>. Platform-specific touchscreen drivers
+reside in either: (1) The
+<code class="docutils literal notranslate"><span class="pre">arch/</span></code><em>&lt;architecture&gt;</em><code class="docutils literal notranslate"><span class="pre">/src/</span></code><em>&lt;hardware&gt;</em> directory
+for the processor architectures that have build in touchscreen
+controllers or (2) the
+<code class="docutils literal notranslate"><span class="pre">boards/</span></code><em>&lt;arch&gt;</em><code class="docutils literal notranslate"><span class="pre">/</span></code><em>&lt;chip&gt;</em><code class="docutils literal notranslate"><span class="pre">/</span></code><em>&lt;board&gt;</em><code class="docutils literal notranslate"><span class="pre">/src/</span></code>
+directory for boards that use an external touchscreen
+controller chip.</p></li>
+</ul>
+</div>
+
+
+           </div>
+           
+          </div>
+          <footer>
+  
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>
+        
+        &copy; Copyright 2020, The Apache Software Foundation
+
+    </p>
+  </div> 
+
+</footer>
+
+        </div>
+      </div>
+
+    </section>
+
+  </div>
+  
+
+  <script type="text/javascript">
+      jQuery(function () {
+          SphinxRtdTheme.Navigation.enable(true);
+      });
+  </script>
+
+  
+  
+    
+   
+
+</body>
+</html>
\ No newline at end of file
diff --git a/content/docs/latest/components/drivers/character/watchdog.html b/content/docs/latest/components/drivers/character/watchdog.html
new file mode 100644
index 0000000..21704ca
--- /dev/null
+++ b/content/docs/latest/components/drivers/character/watchdog.html
@@ -0,0 +1,299 @@
+<!--
+ Documentation/_templates/layout.html
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements.  See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.  The
+ ASF licenses this file to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance with the
+ License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ License for the specific language governing permissions and limitations
+ under the License.
+-->
+
+
+
+<!DOCTYPE html>
+<html class="writer-html5" lang="en" >
+<head>
+  <meta charset="utf-8">
+  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  
+  <title>Watchdog Timer Drivers &mdash; NuttX latest documentation</title>
+  
+
+  
+  <link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
+  <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
+  <link rel="stylesheet" href="../../../_static/custom.css" type="text/css" />
+
+  
+  
+    <link rel="shortcut icon" href="../../../_static/favicon.ico"/>
+  
+  
+  
+
+  
+  <!--[if lt IE 9]>
+    <script src="../../../_static/js/html5shiv.min.js"></script>
+  <![endif]-->
+  
+    
+      <script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
+        <script src="../../../_static/jquery.js"></script>
+        <script src="../../../_static/underscore.js"></script>
+        <script src="../../../_static/doctools.js"></script>
+        <script src="../../../_static/language_data.js"></script>
+    
+    <script type="text/javascript" src="../../../_static/js/theme.js"></script>
+
+    
+    <link rel="index" title="Index" href="../../../genindex.html" />
+    <link rel="search" title="Search" href="../../../search.html" />
+    <link rel="next" title="Keyboard/Keypad Drivers" href="keypad.html" />
+    <link rel="prev" title="RTC Drivers" href="rtc.html" /> 
+</head>
+
+<body class="wy-body-for-nav">
+
+   
+  <div class="wy-grid-for-nav">
+    
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
+          
+  
+    <a href="../../../index.html" class="icon icon-home"> NuttX
+  
+
+  
+    
+    <img src="../../../_static/NuttX.png" class="logo" alt="Logo"/>
+  
+  </a>
+  
+  <!-- this version selector is quite ugly, should be probably replaced by something
+       more modern -->
+       
+  <div class="version-selector">
+    <select>
+    
+      <option value="latest" selected="selected">latest</option>
+    
+    </select>
+  </div>
+  
+  
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+
+        </div>
+
+        
+        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
+          
+            
+            
+              
+            
+            
+              <p class="caption"><span class="caption-text">Table of Contents</span></p>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="../../../index.html">Home</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../introduction/index.html">Introduction</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../introduction/inviolables.html">The Inviolable Principles of NuttX</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../quickstart/index.html">Getting Started</a></li>
+<li class="toctree-l1 current"><a class="reference internal" href="../../index.html">OS Components</a><ul class="current">
+<li class="toctree-l2"><a class="reference internal" href="../../nsh/index.html">NuttShell (NSH)</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../power.html">Power Management</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../socketcan.html">SocketCAN Device Drivers</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../syslog.html">SYSLOG</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../binfmt.html">Binary Loader</a></li>
+<li class="toctree-l2 current"><a class="reference internal" href="../index.html">Device Drivers</a><ul class="current">
+<li class="toctree-l3 current"><a class="reference internal" href="index.html">Character Device Drivers</a><ul class="current">
+<li class="toctree-l4"><a class="reference internal" href="serial.html">Serial Device Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="touchscreen.html">Touchscreen Device Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="analog.html">Analog (ADC/DAC) Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="pwm.html">PWM Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="can.html">CAN Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="quadrature.html">Quadrature Encoder Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="timer.html">Timer Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="rtc.html">RTC Drivers</a></li>
+<li class="toctree-l4 current"><a class="current reference internal" href="#">Watchdog Timer Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="keypad.html">Keyboard/Keypad Drivers</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="../block/index.html">Block Device Drivers</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../special/index.html">Specialized Device Drivers</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../index.html#lower-half-and-upper-half">Lower-half and upper-half</a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="../../filesystem.html">NuttX File System</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../nxflat.html">NXFLAT</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../nxgraphics/index.html">NX Graphics Subsystem</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../nxwidgets.html">NxWidgets</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../paging.html">On-Demand Paging</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="../../../applications/index.html">Applications</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../boards/index.html">Supported Boards</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../reference/index.html">API Reference</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../guides/index.html">Guides</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../releases/index.html">Releases</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../contributing/index.html">Contributing</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../glossary.html">Glossary</a></li>
+</ul>
+
+            
+          
+        </div>
+        
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
+
+      
+      <nav class="wy-nav-top" aria-label="top navigation">
+        
+          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+          <a href="../../../index.html">NuttX</a>
+        
+      </nav>
+
+
+      <div class="wy-nav-content">
+        
+        <div class="rst-content">
+        
+          
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<div role="navigation" aria-label="breadcrumbs navigation">
+
+  <ul class="wy-breadcrumbs">
+    
+      <li><a href="../../../index.html" class="icon icon-home"></a> &raquo;</li>
+        
+          <li><a href="../../index.html">OS Components</a> &raquo;</li>
+        
+          <li><a href="../index.html">Device Drivers</a> &raquo;</li>
+        
+          <li><a href="index.html">Character Device Drivers</a> &raquo;</li>
+        
+      <li>Watchdog Timer Drivers</li>
+    
+    
+      <li class="wy-breadcrumbs-aside">
+        
+            
+            <a href="../../../_sources/components/drivers/character/watchdog.rst.txt" rel="nofollow"> View page source</a>
+          
+        
+      </li>
+    
+  </ul>
+
+  
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+            
+  <div class="section" id="watchdog-timer-drivers">
+<h1>Watchdog Timer Drivers<a class="headerlink" href="#watchdog-timer-drivers" title="Permalink to this headline">¶</a></h1>
+<p>NuttX supports a low-level, two-part watchdog timer driver.</p>
+<ol class="arabic simple">
+<li><p>An “upper half”, generic driver that provides the common
+watchdog timer interface to application level code, and</p></li>
+<li><p>A “lower half”, platform-specific driver that implements the
+low-level timer controls to implement the watchdog timer
+functionality.</p></li>
+</ol>
+<p>Files supporting the watchdog timer driver can be found in the
+following locations:</p>
+<ul class="simple">
+<li><p><strong>Interface Definition</strong>. The header file for the NuttX
+watchdog timer driver reside at
+<code class="docutils literal notranslate"><span class="pre">include/nuttx/timers/watchdog.h</span></code>. This header file includes
+both the application level interface to the watchdog timer
+driver as well as the interface between the “upper half” and
+“lower half” drivers. The watchdog timer driver uses a standard
+character driver framework.</p></li>
+<li><p><strong>“Upper Half” Driver</strong>. The generic, “upper half” watchdog
+timer driver resides at <code class="docutils literal notranslate"><span class="pre">drivers/timers/watchdog.c</span></code>.</p></li>
+<li><p><strong>“Lower Half” Drivers</strong>. Platform-specific watchdog timer
+drivers reside in
+<code class="docutils literal notranslate"><span class="pre">arch/</span></code><em>&lt;architecture&gt;</em><code class="docutils literal notranslate"><span class="pre">/src/</span></code><em>&lt;hardware&gt;</em> directory
+for the specific processor <em>&lt;architecture&gt;</em> and for the
+specific <em>&lt;chip&gt;</em> watchdog timer peripheral devices.</p></li>
+</ul>
+</div>
+
+
+           </div>
+           
+          </div>
+          <footer>
+  
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>
+        
+        &copy; Copyright 2020, The Apache Software Foundation
+
+    </p>
+  </div> 
+
+</footer>
+
+        </div>
+      </div>
+
+    </section>
+
+  </div>
+  
+
+  <script type="text/javascript">
+      jQuery(function () {
+          SphinxRtdTheme.Navigation.enable(true);
+      });
+  </script>
+
+  
+  
+    
+   
+
+</body>
+</html>
\ No newline at end of file
diff --git a/content/docs/latest/components/drivers/index.html b/content/docs/latest/components/drivers/index.html
index e66620d..86025de 100644
--- a/content/docs/latest/components/drivers/index.html
+++ b/content/docs/latest/components/drivers/index.html
@@ -58,7 +58,7 @@
     
     <link rel="index" title="Index" href="../../genindex.html" />
     <link rel="search" title="Search" href="../../search.html" />
-    <link rel="next" title="NuttX File System" href="../filesystem.html" />
+    <link rel="next" title="Character Device Drivers" href="character/index.html" />
     <link rel="prev" title="Binary Loader" href="../binfmt.html" /> 
 </head>
 
@@ -124,32 +124,10 @@
 <li class="toctree-l2"><a class="reference internal" href="../syslog.html">SYSLOG</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../binfmt.html">Binary Loader</a></li>
 <li class="toctree-l2 current"><a class="current reference internal" href="#">Device Drivers</a><ul>
-<li class="toctree-l3"><a class="reference internal" href="#character-device-drivers">Character Device Drivers</a><ul>
-<li class="toctree-l4"><a class="reference internal" href="#serial-device-drivers">Serial Device Drivers</a></li>
-<li class="toctree-l4"><a class="reference internal" href="#touchscreen-device-drivers">Touchscreen Device Drivers</a></li>
-<li class="toctree-l4"><a class="reference internal" href="#analog-adc-dac-drivers">Analog (ADC/DAC) Drivers</a></li>
-<li class="toctree-l4"><a class="reference internal" href="#pwm-drivers">PWM Drivers</a></li>
-<li class="toctree-l4"><a class="reference internal" href="#can-drivers">CAN Drivers</a></li>
-<li class="toctree-l4"><a class="reference internal" href="#quadrature-encoder-drivers">Quadrature Encoder Drivers</a></li>
-<li class="toctree-l4"><a class="reference internal" href="#timer-drivers">Timer Drivers</a></li>
-<li class="toctree-l4"><a class="reference internal" href="#rtc-drivers">RTC Drivers</a></li>
-<li class="toctree-l4"><a class="reference internal" href="#watchdog-timer-drivers">Watchdog Timer Drivers</a></li>
-<li class="toctree-l4"><a class="reference internal" href="#keyboard-keypad-drivers">Keyboard/Keypad Drivers</a></li>
-</ul>
-</li>
-<li class="toctree-l3"><a class="reference internal" href="#block-device-drivers">Block Device Drivers</a></li>
-<li class="toctree-l3"><a class="reference internal" href="#specialized-device-drivers">Specialized Device Drivers</a><ul>
-<li class="toctree-l4"><a class="reference internal" href="#ethernet-device-drivers">Ethernet Device Drivers</a></li>
-<li class="toctree-l4"><a class="reference internal" href="#spi-device-drivers">SPI Device Drivers</a></li>
-<li class="toctree-l4"><a class="reference internal" href="#i2c-device-drivers">I2C Device Drivers</a></li>
-<li class="toctree-l4"><a class="reference internal" href="#frame-buffer-drivers">Frame Buffer Drivers</a></li>
-<li class="toctree-l4"><a class="reference internal" href="#lcd-drivers">LCD Drivers</a></li>
-<li class="toctree-l4"><a class="reference internal" href="#memory-technology-device-drivers">Memory Technology Device Drivers</a></li>
-<li class="toctree-l4"><a class="reference internal" href="#sdio-device-drivers">SDIO Device Drivers</a></li>
-<li class="toctree-l4"><a class="reference internal" href="#usb-host-side-drivers">USB Host-Side Drivers</a></li>
-<li class="toctree-l4"><a class="reference internal" href="#usb-device-side-drivers">USB Device-Side Drivers</a></li>
-</ul>
-</li>
+<li class="toctree-l3"><a class="reference internal" href="character/index.html">Character Device Drivers</a></li>
+<li class="toctree-l3"><a class="reference internal" href="block/index.html">Block Device Drivers</a></li>
+<li class="toctree-l3"><a class="reference internal" href="special/index.html">Specialized Device Drivers</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#lower-half-and-upper-half">Lower-half and upper-half</a></li>
 </ul>
 </li>
 <li class="toctree-l2"><a class="reference internal" href="../filesystem.html">NuttX File System</a></li>
@@ -235,896 +213,35 @@
             
   <div class="section" id="device-drivers">
 <h1>Device Drivers<a class="headerlink" href="#device-drivers" title="Permalink to this headline">¶</a></h1>
-<p>NuttX supports a variety of device drivers including:</p>
-<blockquote>
-<div><ul class="simple">
-<li><p><em>Character</em> Device Drivers,</p></li>
-<li><p><em>Block</em> Device Drivers, and</p></li>
-<li><p>Other <em>Specialized</em> Drivers.</p></li>
-</ul>
-</div></blockquote>
-<p>These different device driver types are discussed in the following
-paragraphs. Note: device driver support depends on the
-<em>in-memory</em>, <em>pseudo</em> file system that is enabled by default.</p>
-<div class="section" id="character-device-drivers">
-<h2>Character Device Drivers<a class="headerlink" href="#character-device-drivers" title="Permalink to this headline">¶</a></h2>
-<p>Character device drivers have these properties:</p>
-<ul>
-<li><p><code class="docutils literal notranslate"><span class="pre">include/nuttx/fs/fs.h</span></code>. All structures and APIs needed
-to work with character drivers are provided in this header
-file.</p></li>
-<li><p><code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">file_operations</span></code>. Each character device driver
-must implement an instance of <code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">file_operations</span></code>. That
-structure defines a call table with the following methods:</p></li>
-<li><p><code class="docutils literal notranslate"><span class="pre">int</span> <span class="pre">register_driver(const</span> <span class="pre">char</span> <span class="pre">*path,</span> <span class="pre">const</span> <span class="pre">struct</span> <span class="pre">file_operations</span> <span class="pre">*fops,</span> <span class="pre">mode_t</span> <span class="pre">mode,</span> <span class="pre">void</span> <span class="pre">*priv);</span></code>.
-Each character driver registers itself by calling
-<code class="docutils literal notranslate"><span class="pre">register_driver()</span></code>, passing it the <code class="docutils literal notranslate"><span class="pre">path</span></code> where it will
-appear in the <a class="reference external" href="#NxFileSystem">pseudo-file-system</a> and it’s
-initialized instance of <code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">file_operations</span></code>.</p></li>
-<li><p><strong>User Access</strong>. After it has been registered, the character
-driver can be accessed by user code using the standard <a class="reference external" href="NuttxUserGuide.html#driveroperations">driver
-operations</a> including
-<code class="docutils literal notranslate"><span class="pre">open()</span></code>, <code class="docutils literal notranslate"><span class="pre">close()</span></code>, <code class="docutils literal notranslate"><span class="pre">read()</span></code>, <code class="docutils literal notranslate"><span class="pre">write()</span></code>, etc.</p></li>
-<li><p><strong>Specialized Character Drivers</strong>. Within the common character
-driver framework, there are different specific varieties of
-<em>specialized</em> character drivers. The unique requirements of the
-underlying device hardware often mandates some customization of
-the character driver. These customizations tend to take the
-form of:</p>
-<ul class="simple">
-<li><p>Device-specific <code class="docutils literal notranslate"><span class="pre">ioctl()</span></code> commands used to performed
-specialized operations on the device. These <code class="docutils literal notranslate"><span class="pre">ioctl()</span></code> will
-be documented in header files under <code class="docutils literal notranslate"><span class="pre">include/nuttx</span></code> that
-detail the specific device interface.</p></li>
-<li><p>Specialized I/O formats. Some devices will require that
-<code class="docutils literal notranslate"><span class="pre">read()</span></code> and/or <code class="docutils literal notranslate"><span class="pre">write()</span></code> operations use data conforming
-to a specific format, rather than a plain stream of bytes.
-These specialized I/O formats will be documented in header
-files under <code class="docutils literal notranslate"><span class="pre">include/nuttx</span></code> that detail the specific
-device interface. The typical representation of the I/O
-format will be a C structure definition.</p></li>
-</ul>
-<p>The specialized character drivers support by NuttX are
-documented in the following paragraphs.</p>
-</li>
-<li><p><strong>Examples</strong>: <code class="docutils literal notranslate"><span class="pre">drivers/dev_null.c</span></code>, <code class="docutils literal notranslate"><span class="pre">drivers/fifo.c</span></code>,
-<code class="docutils literal notranslate"><span class="pre">drivers/serial.c</span></code>, etc.</p></li>
-</ul>
-<div class="section" id="serial-device-drivers">
-<h3>Serial Device Drivers<a class="headerlink" href="#serial-device-drivers" title="Permalink to this headline">¶</a></h3>
-<ul class="simple">
-<li><p><code class="docutils literal notranslate"><span class="pre">include/nuttx/serial/serial.h</span></code>. All structures and APIs
-needed to work with serial drivers are provided in this header
-file.</p></li>
-<li><p><code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">uart_ops_s</span></code>. Each serial device driver must
-implement an instance of <code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">uart_ops_s</span></code>. That structure
-defines a call table with the following methods:</p></li>
-<li><p><code class="docutils literal notranslate"><span class="pre">int</span> <span class="pre">uart_register(FAR</span> <span class="pre">const</span> <span class="pre">char</span> <span class="pre">*path,</span> <span class="pre">FAR</span> <span class="pre">uart_dev_t</span> <span class="pre">*dev);</span></code>.
-A serial driver may register itself by calling
-<code class="docutils literal notranslate"><span class="pre">uart_register()</span></code>, passing it the <code class="docutils literal notranslate"><span class="pre">path</span></code> where it will
-appear in the <a class="reference external" href="#NxFileSystem">pseudo-file-system</a> and it’s
-initialized instance of <code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">uart_ops_s</span></code>. By convention,
-serial device drivers are registered at paths like
-<code class="docutils literal notranslate"><span class="pre">/dev/ttyS0</span></code>, <code class="docutils literal notranslate"><span class="pre">/dev/ttyS1</span></code>, etc. See the
-<code class="docutils literal notranslate"><span class="pre">uart_register()</span></code> implementation in <code class="docutils literal notranslate"><span class="pre">drivers/serial.c</span></code>.</p></li>
-<li><p><strong>User Access</strong>. Serial drivers are, ultimately, normal
-<a class="reference external" href="#chardrivers">character drivers</a> and are accessed as other
-character drivers.</p></li>
-<li><p><strong>Examples</strong>: <code class="docutils literal notranslate"><span class="pre">arch/arm/src/stm32/stm32_serial.c</span></code>,
-<code class="docutils literal notranslate"><span class="pre">arch/arm/src/lpc214x/lpc214x_serial.c</span></code>,
-<code class="docutils literal notranslate"><span class="pre">arch/z16/src/z16f/z16f_serial.c</span></code>, etc.</p></li>
-</ul>
-</div>
-<div class="section" id="touchscreen-device-drivers">
-<h3>Touchscreen Device Drivers<a class="headerlink" href="#touchscreen-device-drivers" title="Permalink to this headline">¶</a></h3>
-<p>NuttX supports a two-part touchscreen driver architecture.</p>
-<ol class="arabic simple">
-<li><p>An “upper half”, generic driver that provides the common
-touchscreen interface to application level code, and</p></li>
-<li><p>A “lower half”, platform-specific driver that implements the
-low-level touchscreen controls to implement the touchscreen
-functionality.</p></li>
-</ol>
-<p>Files supporting the touchscreen controller (TSC) driver can be
-found in the following locations:</p>
-<ul class="simple">
-<li><p><strong>Interface Definition</strong>. The header files for NuttX
-touchscreen drivers reside in the
-<code class="docutils literal notranslate"><span class="pre">include/nuttx/include/input</span></code> directory. The interface
-between the touchscreen controller “upper half” and “lower
-half” drivers are <em>not</em> common, but vary from
-controller-to-controller. Because of this, each touchscreen
-driver has its own unique header file that describes the “upper
-half”/”lower half” interface in that directory. The application
-level interface to each touchscreen driver, on the other hand,
-<em>is</em> the same for each touchscreen driver and is described
-<code class="docutils literal notranslate"><span class="pre">include/nuttx/include/input/touchscreen.h</span></code>. The touchscreen
-driver uses a standard character driver framework but read
-operations return specially formatted data.</p></li>
-<li><p><strong>“Upper Half” Driver</strong>. The controller-specific, “upper half”
-touchscreen drivers reside in the directory <code class="docutils literal notranslate"><span class="pre">drivers/input</span></code>.</p></li>
-<li><p><strong>“Lower Half” Drivers</strong>. Platform-specific touchscreen drivers
-reside in either: (1) The
-<code class="docutils literal notranslate"><span class="pre">arch/</span></code><em>&lt;architecture&gt;</em><code class="docutils literal notranslate"><span class="pre">/src/</span></code><em>&lt;hardware&gt;</em> directory
-for the processor architectures that have build in touchscreen
-controllers or (2) the
-<code class="docutils literal notranslate"><span class="pre">boards/</span></code><em>&lt;arch&gt;</em><code class="docutils literal notranslate"><span class="pre">/</span></code><em>&lt;chip&gt;</em><code class="docutils literal notranslate"><span class="pre">/</span></code><em>&lt;board&gt;</em><code class="docutils literal notranslate"><span class="pre">/src/</span></code>
-directory for boards that use an external touchscreen
-controller chip.</p></li>
-</ul>
-</div>
-<div class="section" id="analog-adc-dac-drivers">
-<h3>Analog (ADC/DAC) Drivers<a class="headerlink" href="#analog-adc-dac-drivers" title="Permalink to this headline">¶</a></h3>
-<p>The NuttX analog drivers are split into two parts:</p>
-<ol class="arabic simple">
-<li><p>An “upper half”, generic driver that provides the common analog
-interface to application level code, and</p></li>
-<li><p>A “lower half”, platform-specific driver that implements the
-low-level controls to implement the analog functionality.</p></li>
-</ol>
-<ul class="simple">
-<li><p>General header files for the NuttX analog drivers reside in
-<code class="docutils literal notranslate"><span class="pre">include/nuttx/analog/</span></code>. These header files includes both the
-application level interface to the analog driver as well as the
-interface between the “upper half” and “lower half” drivers.</p></li>
-<li><p>Common analog logic and share-able analog drivers reside in the
-<code class="docutils literal notranslate"><span class="pre">drivers/analog/</span></code>.</p></li>
-<li><p>Platform-specific drivers reside in
-<code class="docutils literal notranslate"><span class="pre">arch/</span></code><em>&lt;architecture&gt;</em><code class="docutils literal notranslate"><span class="pre">/src/</span></code><em>&lt;hardware&gt;</em> directory
-for the specific processor <em>&lt;architecture&gt;</em> and for the
-specific <em>&lt;chip&gt;</em> analog peripheral devices.</p></li>
-</ul>
-<div class="section" id="adc-drivers">
-<h4>ADC Drivers<a class="headerlink" href="#adc-drivers" title="Permalink to this headline">¶</a></h4>
-<ul class="simple">
-<li><p><code class="docutils literal notranslate"><span class="pre">include/nuttx/analog/adc.h</span></code>. All structures and APIs needed
-to work with ADC drivers are provided in this header file. This
-header file includes:</p>
-<ol class="arabic simple">
-<li><p>Structures and interface descriptions needed to develop a
-low-level, architecture-specific, ADC driver.</p></li>
-<li><p>To register the ADC driver with a common ADC character
-driver.</p></li>
-<li><p>Interfaces needed for interfacing user programs with the
-common ADC character driver.</p></li>
-</ol>
-</li>
-<li><p><code class="docutils literal notranslate"><span class="pre">drivers/analog/adc.c</span></code>. The implementation of the common ADC
-character driver.</p></li>
-</ul>
-</div>
-<div class="section" id="dac-drivers">
-<h4>DAC Drivers<a class="headerlink" href="#dac-drivers" title="Permalink to this headline">¶</a></h4>
-<ul class="simple">
-<li><p><code class="docutils literal notranslate"><span class="pre">include/nuttx/analog/dac.h</span></code>. All structures and APIs needed
-to work with DAC drivers are provided in this header file. This
-header file includes:</p>
-<ol class="arabic simple">
-<li><p>Structures and interface descriptions needed to develop a
-low-level, architecture-specific, DAC driver.</p></li>
-<li><p>To register the DAC driver with a common DAC character
-driver.</p></li>
-<li><p>Interfaces needed for interfacing user programs with the
-common DAC character driver.</p></li>
-</ol>
-</li>
-<li><p><code class="docutils literal notranslate"><span class="pre">drivers/analog/dac.c</span></code>. The implementation of the common DAC
-character driver.</p></li>
-</ul>
-</div>
-</div>
-<div class="section" id="pwm-drivers">
-<h3>PWM Drivers<a class="headerlink" href="#pwm-drivers" title="Permalink to this headline">¶</a></h3>
-<p>For the purposes of this driver, a PWM device is any device that
-generates periodic output pulses of controlled frequency and pulse
-width. Such a device might be used, for example, to perform
-pulse-width modulated output or frequency/pulse-count modulated
-output (such as might be needed to control a stepper motor).</p>
-<p>The NuttX PWM driver is split into two parts:</p>
-<ol class="arabic simple">
-<li><p>An “upper half”, generic driver that provides the common PWM
-interface to application level code, and</p></li>
-<li><p>A “lower half”, platform-specific driver that implements the
-low-level timer controls to implement the PWM functionality.</p></li>
-</ol>
-<p>Files supporting PWM can be found in the following locations:</p>
-<ul class="simple">
-<li><p><strong>Interface Definition</strong>. The header file for the NuttX PWM
-driver reside at <code class="docutils literal notranslate"><span class="pre">include/nuttx/timers/pwm.h</span></code>. This header
-file includes both the application level interface to the PWM
-driver as well as the interface between the “upper half” and
-“lower half” drivers. The PWM module uses a standard character
-driver framework. However, since the PWM driver is a devices
-control interface and not a data transfer interface, the
-majority of the functionality available to the application is
-implemented in driver ioctl calls.</p></li>
-<li><p><strong>“Upper Half” Driver</strong>. The generic, “upper half” PWM driver
-resides at <code class="docutils literal notranslate"><span class="pre">drivers/pwm.c</span></code>.</p></li>
-<li><p><strong>“Lower Half” Drivers</strong>. Platform-specific PWM drivers reside
-in <code class="docutils literal notranslate"><span class="pre">arch/</span></code><em>&lt;architecture&gt;</em><code class="docutils literal notranslate"><span class="pre">/src/</span></code><em>&lt;hardware&gt;</em>
-directory for the specific processor <em>&lt;architecture&gt;</em> and for
-the specific <em>&lt;chip&gt;</em> PWM peripheral devices.</p></li>
-</ul>
-</div>
-<div class="section" id="can-drivers">
-<h3>CAN Drivers<a class="headerlink" href="#can-drivers" title="Permalink to this headline">¶</a></h3>
-<p>NuttX supports only a very low-level CAN driver. This driver
-supports only the data exchange and does not include any
-high-level CAN protocol. The NuttX CAN driver is split into two
-parts:</p>
-<ol class="arabic simple">
-<li><p>An “upper half”, generic driver that provides the common CAN
-interface to application level code, and</p></li>
-<li><p>A “lower half”, platform-specific driver that implements the
-low-level timer controls to implement the CAN functionality.</p></li>
-</ol>
-<p>Files supporting CAN can be found in the following locations:</p>
-<ul class="simple">
-<li><p><strong>Interface Definition</strong>. The header file for the NuttX CAN
-driver resides at <code class="docutils literal notranslate"><span class="pre">include/nuttx/can/can.h</span></code>. This header file
-includes both the application level interface to the CAN driver
-as well as the interface between the “upper half” and “lower
-half” drivers. The CAN module uses a standard character driver
-framework.</p></li>
-<li><p><strong>“Upper Half” Driver</strong>. The generic, “upper half” CAN driver
-resides at <code class="docutils literal notranslate"><span class="pre">drivers/can.c</span></code>.</p></li>
-<li><p><strong>“Lower Half” Drivers</strong>. Platform-specific CAN drivers reside
-in <code class="docutils literal notranslate"><span class="pre">arch/</span></code><em>&lt;architecture&gt;</em><code class="docutils literal notranslate"><span class="pre">/src/</span></code><em>&lt;hardware&gt;</em>
-directory for the specific processor <em>&lt;architecture&gt;</em> and for
-the specific <em>&lt;chip&gt;</em> CAN peripheral devices.</p></li>
-</ul>
-<p><strong>Usage Note</strong>: When reading from the CAN driver multiple messages
-may be returned, depending on (1) the size the returned can
-messages, and (2) the size of the buffer provided to receive CAN
-messages. <em>Never assume that a single message will be returned</em>…
-if you do this, <em>you will lose CAN data</em> under conditions where
-your read buffer can hold more than one small message. Below is an
-example about how you should think of the CAN read operation:</p>
-</div>
-<div class="section" id="quadrature-encoder-drivers">
-<h3>Quadrature Encoder Drivers<a class="headerlink" href="#quadrature-encoder-drivers" title="Permalink to this headline">¶</a></h3>
-<p>NuttX supports a low-level, two-part Quadrature Encoder driver.</p>
-<ol class="arabic simple">
-<li><p>An “upper half”, generic driver that provides the common
-Quadrature Encoder interface to application level code, and</p></li>
-<li><p>A “lower half”, platform-specific driver that implements the
-low-level timer controls to implement the Quadrature Encoder
-functionality.</p></li>
-</ol>
-<p>Files supporting the Quadrature Encoder can be found in the
-following locations:</p>
-<ul class="simple">
-<li><p><strong>Interface Definition</strong>. The header file for the NuttX
-Quadrature Encoder driver reside at
-<code class="docutils literal notranslate"><span class="pre">include/nuttx/sensors/qencoder.h</span></code>. This header file includes
-both the application level interface to the Quadrature Encoder
-driver as well as the interface between the “upper half” and
-“lower half” drivers. The Quadrature Encoder module uses a
-standard character driver framework.</p></li>
-<li><p><strong>“Upper Half” Driver</strong>. The generic, “upper half” Quadrature
-Encoder driver resides at <code class="docutils literal notranslate"><span class="pre">drivers/sensors/qencoder.c</span></code>.</p></li>
-<li><p><strong>“Lower Half” Drivers</strong>. Platform-specific Quadrature Encoder
-drivers reside in
-<code class="docutils literal notranslate"><span class="pre">arch/</span></code><em>&lt;architecture&gt;</em><code class="docutils literal notranslate"><span class="pre">/src/</span></code><em>&lt;hardware&gt;</em> directory
-for the specific processor <em>&lt;architecture&gt;</em> and for the
-specific <em>&lt;chip&gt;</em> Quadrature Encoder peripheral devices.</p></li>
-</ul>
-</div>
-<div class="section" id="timer-drivers">
-<h3>Timer Drivers<a class="headerlink" href="#timer-drivers" title="Permalink to this headline">¶</a></h3>
-<p>NuttX supports a low-level, two-part timer driver.</p>
-<ol class="arabic simple">
-<li><p>An “upper half”, generic driver that provides the common timer
-interface to application level code, and</p></li>
-<li><p>A “lower half”, platform-specific driver that implements the
-low-level timer controls to implement the timer functionality.</p></li>
-</ol>
-<p>Files supporting the timer driver can be found in the following
-locations:</p>
-<ul class="simple">
-<li><p><strong>Interface Definition</strong>. The header file for the NuttX timer
-driver reside at <code class="docutils literal notranslate"><span class="pre">include/nuttx/timers/timer.h</span></code>. This header
-file includes both the application level interface to the timer
-driver as well as the interface between the “upper half” and
-“lower half” drivers. The timer driver uses a standard
-character driver framework.</p></li>
-<li><p><strong>“Upper Half” Driver</strong>. The generic, “upper half” timer driver
-resides at <code class="docutils literal notranslate"><span class="pre">drivers/timers/timer.c</span></code>.</p></li>
-<li><p><strong>“Lower Half” Drivers</strong>. Platform-specific timer drivers
-reside in <code class="docutils literal notranslate"><span class="pre">arch/</span></code><em>&lt;architecture&gt;</em><code class="docutils literal notranslate"><span class="pre">/src/</span></code><em>&lt;hardware&gt;</em>
-directory for the specific processor <em>&lt;architecture&gt;</em> and for
-the specific <em>&lt;chip&gt;</em> timer peripheral devices.</p></li>
-</ul>
-</div>
-<div class="section" id="rtc-drivers">
-<h3>RTC Drivers<a class="headerlink" href="#rtc-drivers" title="Permalink to this headline">¶</a></h3>
-<p>NuttX supports a low-level, two-part RealTime Clock (RTC) driver.</p>
-<ol class="arabic simple">
-<li><p>An “upper half”, generic driver that provides the common RTC
-interface to application level code, and</p></li>
-<li><p>A “lower half”, platform-specific driver that implements the
-low-level timer controls to implement the RTC functionality.</p></li>
-</ol>
-<p>Files supporting the RTC driver can be found in the following
-locations:</p>
-<ul class="simple">
-<li><p><strong>Interface Definition</strong>. The header file for the NuttX RTC
-driver reside at <code class="docutils literal notranslate"><span class="pre">include/nuttx/timers/rtc.h</span></code>. This header
-file includes both the application level interface to the RTC
-driver as well as the interface between the “upper half” and
-“lower half” drivers. The RTC driver uses a standard character
-driver framework.</p></li>
-<li><p><strong>“Upper Half” Driver</strong>. The generic, “upper half” RTC driver
-resides at <code class="docutils literal notranslate"><span class="pre">drivers/timers/rtc.c</span></code>.</p></li>
-<li><p><strong>“Lower Half” Drivers</strong>. Platform-specific RTC drivers reside
-in <code class="docutils literal notranslate"><span class="pre">arch/</span></code><em>&lt;architecture&gt;</em><code class="docutils literal notranslate"><span class="pre">/src/</span></code><em>&lt;hardware&gt;</em>
-directory for the specific processor <em>&lt;architecture&gt;</em> and for
-the specific <em>&lt;chip&gt;</em> RTC peripheral devices.</p></li>
-</ul>
-</div>
-<div class="section" id="watchdog-timer-drivers">
-<h3>Watchdog Timer Drivers<a class="headerlink" href="#watchdog-timer-drivers" title="Permalink to this headline">¶</a></h3>
-<p>NuttX supports a low-level, two-part watchdog timer driver.</p>
-<ol class="arabic simple">
-<li><p>An “upper half”, generic driver that provides the common
-watchdog timer interface to application level code, and</p></li>
-<li><p>A “lower half”, platform-specific driver that implements the
-low-level timer controls to implement the watchdog timer
-functionality.</p></li>
-</ol>
-<p>Files supporting the watchdog timer driver can be found in the
-following locations:</p>
-<ul class="simple">
-<li><p><strong>Interface Definition</strong>. The header file for the NuttX
-watchdog timer driver reside at
-<code class="docutils literal notranslate"><span class="pre">include/nuttx/timers/watchdog.h</span></code>. This header file includes
-both the application level interface to the watchdog timer
-driver as well as the interface between the “upper half” and
-“lower half” drivers. The watchdog timer driver uses a standard
-character driver framework.</p></li>
-<li><p><strong>“Upper Half” Driver</strong>. The generic, “upper half” watchdog
-timer driver resides at <code class="docutils literal notranslate"><span class="pre">drivers/timers/watchdog.c</span></code>.</p></li>
-<li><p><strong>“Lower Half” Drivers</strong>. Platform-specific watchdog timer
-drivers reside in
-<code class="docutils literal notranslate"><span class="pre">arch/</span></code><em>&lt;architecture&gt;</em><code class="docutils literal notranslate"><span class="pre">/src/</span></code><em>&lt;hardware&gt;</em> directory
-for the specific processor <em>&lt;architecture&gt;</em> and for the
-specific <em>&lt;chip&gt;</em> watchdog timer peripheral devices.</p></li>
-</ul>
-</div>
-<div class="section" id="keyboard-keypad-drivers">
-<h3>Keyboard/Keypad Drivers<a class="headerlink" href="#keyboard-keypad-drivers" title="Permalink to this headline">¶</a></h3>
-<p><strong>Keypads vs. Keyboards</strong> Keyboards and keypads are really the
-same devices for NuttX. A keypad is thought of as simply a
-keyboard with fewer keys.</p>
-<p><strong>Special Commands</strong>. In NuttX, a keyboard/keypad driver is simply
-a character driver that may have an (optional) encoding/decoding
-layer on the data returned by the character driver. A keyboard may
-return simple text data (alphabetic, numeric, and punctuation) or
-control characters (enter, control-C, etc.) when a key is pressed.
-We can think about this the “normal” keyboard data stream.
-However, in addition, most keyboards support actions that cannot
-be represented as text or control data. Such actions include
-things like cursor controls (home, up arrow, page down, etc.),
-editing functions (insert, delete, etc.), volume controls, (mute,
-volume up, etc.) and other special functions. In this case, some
-special encoding may be required to multiplex the normal text data
-and special command key press data streams.</p>
-<p><strong>Key Press and Release Events</strong> Sometimes the time that a key is
-released is needed by applications as well. Thus, in addition to
-normal and special key press events, it may also be necessary to
-encode normal and special key release events.</p>
-<p><strong>Encoding/Decoding</strong> Layer. An optional encoding/decoding layer
-can be used with the basic character driver to encode the keyboard
-events into the text data stream. The function interfaces that
-comprise that encoding/decoding layer are defined in the header
-file <code class="docutils literal notranslate"><span class="pre">include/nuttx/input/kbd_code.h</span></code>. These functions provide
-an matched set of (a) driver encoding interfaces, and (b)
-application decoding interfaces.</p>
-<ol class="arabic">
-<li><p><strong>Driver Encoding Interfaces</strong>. These are interfaces used by
-the keyboard/keypad driver to encode keyboard events and data.</p>
-<ul>
-<li><p><code class="docutils literal notranslate"><span class="pre">kbd_press()</span></code></p>
-<p><strong>Function Prototype:</strong></p>
-<p><strong>Description:</strong></p>
-<p><strong>Input Parameters:</strong></p>
-<ul class="simple">
-<li><p><code class="docutils literal notranslate"><span class="pre">ch</span></code>: The character to be added to the output stream.</p></li>
-<li><p><code class="docutils literal notranslate"><span class="pre">stream</span></code>: An instance of <code class="docutils literal notranslate"><span class="pre">lib_outstream_s</span></code> to perform
-the actual low-level put operation.</p></li>
-</ul>
-<p><strong>Returned Value:</strong></p>
-</li>
-<li><p><code class="docutils literal notranslate"><span class="pre">kbd_release()</span></code></p>
-<p><strong>Function Prototype:</strong></p>
-<p><strong>Description:</strong></p>
-<p><strong>Input Parameters:</strong></p>
-<ul class="simple">
-<li><p><code class="docutils literal notranslate"><span class="pre">ch</span></code>: The character associated with the key that was
-released.</p></li>
-<li><p><code class="docutils literal notranslate"><span class="pre">stream</span></code>: An instance of <code class="docutils literal notranslate"><span class="pre">lib_outstream_s</span></code> to perform
-the actual low-level put operation.</p></li>
-</ul>
-<p><strong>Returned Value:</strong></p>
-</li>
-<li><p><code class="docutils literal notranslate"><span class="pre">kbd_specpress()</span></code></p>
-<p><strong>Function Prototype:</strong></p>
-<p><strong>Description:</strong></p>
-<p><strong>Input Parameters:</strong></p>
-<ul class="simple">
-<li><p><code class="docutils literal notranslate"><span class="pre">keycode</span></code>: The command to be added to the output
-stream. The enumeration <code class="docutils literal notranslate"><span class="pre">enum</span> <span class="pre">kbd_keycode_e</span> <span class="pre">keycode</span></code>
-identifies all commands known to the system.</p></li>
-<li><p><code class="docutils literal notranslate"><span class="pre">stream</span></code>: An instance of <code class="docutils literal notranslate"><span class="pre">lib_outstream_s</span></code> to perform
-the actual low-level put operation.</p></li>
-</ul>
-<p><strong>Returned Value:</strong></p>
-</li>
-<li><p><code class="docutils literal notranslate"><span class="pre">kbd_specrel()</span></code></p>
-<p><strong>Function Prototype:</strong></p>
-<p><strong>Description:</strong></p>
-<p><strong>Input Parameters:</strong></p>
-<ul class="simple">
-<li><p><code class="docutils literal notranslate"><span class="pre">keycode</span></code>: The command to be added to the output
-stream. The enumeration <code class="docutils literal notranslate"><span class="pre">enum</span> <span class="pre">kbd_keycode_e</span> <span class="pre">keycode</span></code>
-identifies all commands known to the system.</p></li>
-<li><p><code class="docutils literal notranslate"><span class="pre">stream</span></code>: An instance of <code class="docutils literal notranslate"><span class="pre">lib_outstream_s</span></code> to perform
-the actual low-level put operation.</p></li>
-</ul>
-<p><strong>Returned Value:</strong></p>
-</li>
-</ul>
-</li>
-<li><p><strong>Application Decoding Interfaces</strong>. These are user interfaces
-to decode the values returned by the keyboard/keypad driver.</p>
-<ul>
-<li><p><code class="docutils literal notranslate"><span class="pre">kbd_decode()</span></code></p>
-<p><strong>Function Prototype:</strong></p>
-<p><strong>Description:</strong></p>
-<p><strong>Input Parameters:</strong></p>
-<ul class="simple">
-<li><p><code class="docutils literal notranslate"><span class="pre">stream</span></code>: An instance of <code class="docutils literal notranslate"><span class="pre">lib_instream_s</span></code> to perform
-the actual low-level get operation.</p></li>
-<li><p><code class="docutils literal notranslate"><span class="pre">pch</span></code>: The location to save the returned value. This
-may be either a normal, character code or a special
-command (i.e., a value from <code class="docutils literal notranslate"><span class="pre">enum</span> <span class="pre">kbd_getstate_s</span></code>.</p></li>
-<li><p><code class="docutils literal notranslate"><span class="pre">state</span></code>: A user provided buffer to support parsing.
-This structure should be cleared the first time that
-<code class="docutils literal notranslate"><span class="pre">kbd_decode()</span></code> is called.</p></li>
-</ul>
-<p><strong>Returned Value:</strong></p>
-<ul class="simple">
-<li><p><code class="docutils literal notranslate"><span class="pre">KBD_PRESS</span></code> (0)**: Indicates the successful receipt
-of normal, keyboard data. This corresponds to a keypress
-event. The returned value in <code class="docutils literal notranslate"><span class="pre">pch</span></code> is a simple byte of
-text or control data.</p></li>
-<li><p><code class="docutils literal notranslate"><span class="pre">KBD_RELEASE</span></code> (1)**: Indicates a key release event.
-The returned value in <code class="docutils literal notranslate"><span class="pre">pch</span></code> is the byte of text or
-control data corresponding to the released key.</p></li>
-<li><p><code class="docutils literal notranslate"><span class="pre">KBD_SPECPRESS</span></code> (2)**: Indicates the successful
-receipt of a special keyboard command. The returned value
-in <code class="docutils literal notranslate"><span class="pre">pch</span></code> is a value from <code class="docutils literal notranslate"><span class="pre">enum</span> <span class="pre">kbd_getstate_s</span></code>.</p></li>
-<li><p><code class="docutils literal notranslate"><span class="pre">KBD_SPECREL</span></code> (3)**: Indicates a special command key
-release event. The returned value in <code class="docutils literal notranslate"><span class="pre">pch</span></code> is a value
-from <code class="docutils literal notranslate"><span class="pre">enum</span> <span class="pre">kbd_getstate_s</span></code>.</p></li>
-<li><p><code class="docutils literal notranslate"><span class="pre">KBD_ERROR</span></code> (<code class="docutils literal notranslate"><span class="pre">EOF</span></code>)**: An error has getting the
-next character (reported by the <code class="docutils literal notranslate"><span class="pre">stream</span></code>). Normally
-indicates the end of file.</p></li>
-</ul>
-</li>
-</ul>
-</li>
-</ol>
-<p><strong>I/O Streams</strong>. Notice the use of the abstract I/O streams in
-these interfaces. These stream interfaces are defined in
-<code class="docutils literal notranslate"><span class="pre">include/nuttx/streams.h</span></code>.</p>
-</div>
-</div>
-<div class="section" id="block-device-drivers">
-<h2>Block Device Drivers<a class="headerlink" href="#block-device-drivers" title="Permalink to this headline">¶</a></h2>
-<p>Block device drivers have these properties:</p>
-<ul class="simple">
-<li><p><code class="docutils literal notranslate"><span class="pre">include/nuttx/fs/fs.h</span></code>. All structures and APIs needed
-to work with block drivers are provided in this header file.</p></li>
-<li><p><code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">block_operations</span></code>. Each block device driver must
-implement an instance of <code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">block_operations</span></code>. That
-structure defines a call table with the following methods:</p></li>
-<li><p><code class="docutils literal notranslate"><span class="pre">int</span> <span class="pre">register_blockdriver(const</span> <span class="pre">char</span> <span class="pre">*path,</span> <span class="pre">const</span> <span class="pre">struct</span> <span class="pre">block_operations</span> <span class="pre">*bops,</span> <span class="pre">mode_t</span> <span class="pre">mode,</span> <span class="pre">void</span> <span class="pre">*priv);</span></code>.
-Each block driver registers itself by calling
-<code class="docutils literal notranslate"><span class="pre">register_blockdriver()</span></code>, passing it the <code class="docutils literal notranslate"><span class="pre">path</span></code> where it
-will appear in the <a class="reference external" href="#NxFileSystem">pseudo-file-system</a> and
-it’s initialized instance of <code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">block_operations</span></code>.</p></li>
-<li><p><strong>User Access</strong>. Users do not normally access block drivers
-directly, rather, they access block drivers indirectly through
-the <code class="docutils literal notranslate"><span class="pre">mount()</span></code> API. The <code class="docutils literal notranslate"><span class="pre">mount()</span></code> API binds a block driver
-instance with a file system and with a mountpoint. Then the
-user may use the block driver to access the file system on the
-underlying media. <em>Example</em>: See the <code class="docutils literal notranslate"><span class="pre">cmd_mount()</span></code>
-implementation in <code class="docutils literal notranslate"><span class="pre">apps/nshlib/nsh_fscmds.c</span></code>.</p></li>
-<li><p><strong>Accessing a Character Driver as a Block Device</strong>. See the
-loop device at <code class="docutils literal notranslate"><span class="pre">drivers/loop.c</span></code>. <em>Example</em>: See the
-<code class="docutils literal notranslate"><span class="pre">cmd_losetup()</span></code> implementation in
-<code class="docutils literal notranslate"><span class="pre">apps/nshlib/nsh_fscmds.c</span></code>.</p></li>
-<li><p><strong>Accessing a Block Driver as Character Device</strong>. See the
-Block-to-Character (BCH) conversion logic in <code class="docutils literal notranslate"><span class="pre">drivers/bch/</span></code>.
-<em>Example</em>: See the <code class="docutils literal notranslate"><span class="pre">cmd_dd()</span></code> implementation in
-<code class="docutils literal notranslate"><span class="pre">apps/nshlib/nsh_ddcmd.c</span></code>.</p></li>
-<li><p><strong>Examples</strong>. <code class="docutils literal notranslate"><span class="pre">drivers/loop.c</span></code>,
-<code class="docutils literal notranslate"><span class="pre">drivers/mmcsd/mmcsd_spi.c</span></code>, <code class="docutils literal notranslate"><span class="pre">drivers/ramdisk.c</span></code>, etc.</p></li>
-</ul>
-</div>
-<div class="section" id="specialized-device-drivers">
-<h2>Specialized Device Drivers<a class="headerlink" href="#specialized-device-drivers" title="Permalink to this headline">¶</a></h2>
-<p>All device drivers that are accessible to application logic are
-either: (1) Character device drivers that can be accessed via the
-standard driver operations (<code class="docutils literal notranslate"><span class="pre">open()</span></code>, <code class="docutils literal notranslate"><span class="pre">close()</span></code>, <code class="docutils literal notranslate"><span class="pre">read()</span></code>,
-<code class="docutils literal notranslate"><span class="pre">write()</span></code>, etc.), or (2) block drivers that can be accessing
-only as part of mounting a file system or other special use cases
-as described in the preceding paragraph.</p>
-<p>In addition to this, there are also specialized “drivers” that can
-be used only within the OS logic itself and are not accessible to
-application logic. These specialized drivers are discussed in the
-following paragraphs.</p>
-<div class="section" id="ethernet-device-drivers">
-<h3>Ethernet Device Drivers<a class="headerlink" href="#ethernet-device-drivers" title="Permalink to this headline">¶</a></h3>
-<ul class="simple">
-<li><p><code class="docutils literal notranslate"><span class="pre">include/nuttx/net/netdev.h</span></code>. All structures and APIs
-needed to work with Ethernet drivers are provided in this
-header file. The structure <code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">net_driver_s</span></code> defines the
-interface and is passed to the network via
-<code class="docutils literal notranslate"><span class="pre">netdev_register()</span></code>.</p></li>
-<li><p><code class="docutils literal notranslate"><span class="pre">int</span> <span class="pre">netdev_register(FAR</span> <span class="pre">struct</span> <span class="pre">net_driver_s</span> <span class="pre">*dev,</span> <span class="pre">enum</span> <span class="pre">net_lltype_e</span> <span class="pre">lltype);</span></code>.
-Each Ethernet driver registers itself by calling
-<code class="docutils literal notranslate"><span class="pre">netdev_register()</span></code>.</p></li>
-<li><p><strong>Examples</strong>: <code class="docutils literal notranslate"><span class="pre">drivers/net/dm90x0.c</span></code>,
-<code class="docutils literal notranslate"><span class="pre">arch/drivers/arm/src/c5471/c5471_ethernet.c</span></code>,
-<code class="docutils literal notranslate"><span class="pre">arch/z80/src/ez80/ez80_emac.c</span></code>, etc.</p></li>
-</ul>
-</div>
-<div class="section" id="spi-device-drivers">
-<h3>SPI Device Drivers<a class="headerlink" href="#spi-device-drivers" title="Permalink to this headline">¶</a></h3>
-<ul class="simple">
-<li><p><code class="docutils literal notranslate"><span class="pre">include/nuttx/spi/spi.h</span></code>. All structures and APIs needed
-to work with SPI drivers are provided in this header file.</p></li>
-<li><p><code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">spi_ops_s</span></code>. Each SPI device driver must implement
-an instance of <code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">spi_ops_s</span></code>. That structure defines a
-call table with the following methods:</p></li>
-<li><p><strong>Binding SPI Drivers</strong>. SPI drivers are not normally directly
-accessed by user code, but are usually bound to another, higher
-level device driver. See for example,
-<code class="docutils literal notranslate"><span class="pre">int</span> <span class="pre">mmcsd_spislotinitialize(int</span> <span class="pre">minor,</span> <span class="pre">int</span> <span class="pre">slotno,</span> <span class="pre">FAR</span> <span class="pre">struct</span> <span class="pre">spi_dev_s</span> <span class="pre">*spi)</span></code>
-in <code class="docutils literal notranslate"><span class="pre">drivers/mmcsd/mmcsd_spi.c</span></code>. In general, the binding
-sequence is:</p>
-<ol class="arabic simple">
-<li><p>Get an instance of <code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">spi_dev_s</span></code> from the
-hardware-specific SPI device driver, and</p></li>
-<li><p>Provide that instance to the initialization method of the
-higher level device driver.</p></li>
-</ol>
-</li>
-<li><p><strong>Examples</strong>: <code class="docutils literal notranslate"><span class="pre">drivers/loop.c</span></code>,
-<code class="docutils literal notranslate"><span class="pre">drivers/mmcsd/mmcsd_spi.c</span></code>, <code class="docutils literal notranslate"><span class="pre">drivers/ramdisk.c</span></code>, etc.</p></li>
-</ul>
-</div>
-<div class="section" id="i2c-device-drivers">
-<h3>I2C Device Drivers<a class="headerlink" href="#i2c-device-drivers" title="Permalink to this headline">¶</a></h3>
-<ul class="simple">
-<li><p><code class="docutils literal notranslate"><span class="pre">include/nuttx/i2c/i2c.h</span></code>. All structures and APIs needed
-to work with I2C drivers are provided in this header file.</p></li>
-<li><p><code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">i2c_ops_s</span></code>. Each I2C device driver must implement
-an instance of <code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">i2c_ops_s</span></code>. That structure defines a
-call table with the following methods:</p></li>
-<li><p><strong>Binding I2C Drivers</strong>. I2C drivers are not normally directly
-accessed by user code, but are usually bound to another, higher
-level device driver. In general, the binding sequence is:</p>
-<ol class="arabic simple">
-<li><p>Get an instance of <code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">i2c_master_s</span></code> from the
-hardware-specific I2C device driver, and</p></li>
-<li><p>Provide that instance to the initialization method of the
-higher level device driver.</p></li>
-</ol>
-</li>
-<li><p><strong>Examples</strong>: <code class="docutils literal notranslate"><span class="pre">arch/z80/src/ez80/ez80_i2c.c</span></code>,
-<code class="docutils literal notranslate"><span class="pre">arch/z80/src/z8/z8_i2c.c</span></code>, etc.</p></li>
-</ul>
-</div>
-<div class="section" id="frame-buffer-drivers">
-<h3>Frame Buffer Drivers<a class="headerlink" href="#frame-buffer-drivers" title="Permalink to this headline">¶</a></h3>
+<p>NuttX supports a variety of device drivers, which can be broadly
+divided in three classes:</p>
+<div class="toctree-wrapper compound">
 <ul>
-<li><p><code class="docutils literal notranslate"><span class="pre">include/nuttx/video/fb.h</span></code>. All structures and APIs
-needed to work with frame buffer drivers are provided in this
-header file.</p></li>
-<li><p><code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">fb_vtable_s</span></code>. Each frame buffer device driver
-must implement an instance of <code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">fb_vtable_s</span></code>. That
-structure defines a call table with the following methods:</p>
-<p>Get information about the video controller configuration and
-the configuration of each color plane.</p>
-<p>The following are provided only if the video hardware supports
-RGB color mapping:</p>
-<p>The following are provided only if the video hardware supports
-a hardware cursor:</p>
-</li>
-<li><p><strong>Binding Frame Buffer Drivers</strong>. Frame buffer drivers are not
-normally directly accessed by user code, but are usually bound
-to another, higher level device driver. In general, the binding
-sequence is:</p>
-<ol class="arabic simple">
-<li><p>Get an instance of <code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">fb_vtable_s</span></code> from the
-hardware-specific frame buffer device driver, and</p></li>
-<li><p>Provide that instance to the initialization method of the
-higher level device driver.</p></li>
-</ol>
-</li>
-<li><p><strong>Examples</strong>: <code class="docutils literal notranslate"><span class="pre">arch/sim/src/up_framebuffer.c</span></code>. See also the
-usage of the frame buffer driver in the <code class="docutils literal notranslate"><span class="pre">graphics/</span></code>
-directory.</p></li>
+<li class="toctree-l1"><a class="reference internal" href="character/index.html">Character Device Drivers</a></li>
+<li class="toctree-l1"><a class="reference internal" href="block/index.html">Block Device Drivers</a></li>
+<li class="toctree-l1"><a class="reference internal" href="special/index.html">Specialized Device Drivers</a></li>
 </ul>
 </div>
-<div class="section" id="lcd-drivers">
-<h3>LCD Drivers<a class="headerlink" href="#lcd-drivers" title="Permalink to this headline">¶</a></h3>
-<ul>
-<li><p><code class="docutils literal notranslate"><span class="pre">include/nuttx/lcd/lcd.h</span></code>. Structures and APIs needed to
-work with LCD drivers are provided in this header file. This
-header file also depends on some of the same definitions used
-for the frame buffer driver as provided in
-<code class="docutils literal notranslate"><span class="pre">include/nuttx/video/fb.h</span></code>.</p></li>
-<li><p><code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">lcd_dev_s</span></code>. Each LCD device driver must implement
-an instance of <code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">lcd_dev_s</span></code>. That structure defines a
-call table with the following methods:</p>
-<p>Get information about the LCD video controller configuration
-and the configuration of each LCD color plane.</p>
-<p>The following are provided only if the video hardware supports
-RGB color mapping:</p>
-<p>The following are provided only if the video hardware supports
-a hardware cursor:</p>
-<p>Get the LCD panel power status (0: full off -
-<code class="docutils literal notranslate"><span class="pre">CONFIG_LCD_MAXPOWER</span></code>: full on). On backlit LCDs, this
-setting may correspond to the backlight setting.</p>
-<p>Enable/disable LCD panel power (0: full off -
-<code class="docutils literal notranslate"><span class="pre">CONFIG_LCD_MAXPOWER</span></code>: full on). On backlit LCDs, this
-setting may correspond to the backlight setting.</p>
-<p>Get the current contrast setting (0-CONFIG_LCD_MAXCONTRAST) */</p>
-<p>Set LCD panel contrast (0-CONFIG_LCD_MAXCONTRAST)</p>
-</li>
-<li><p><strong>Binding LCD Drivers</strong>. LCD drivers are not normally directly
-accessed by user code, but are usually bound to another, higher
-level device driver. In general, the binding sequence is:</p>
-<ol class="arabic simple">
-<li><p>Get an instance of <code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">lcd_dev_s</span></code> from the
-hardware-specific LCD device driver, and</p></li>
-<li><p>Provide that instance to the initialization method of the
-higher level device driver.</p></li>
-</ol>
-</li>
-<li><p><strong>Examples</strong>: <code class="docutils literal notranslate"><span class="pre">drivers/lcd/p14201.c</span></code>,
-<code class="docutils literal notranslate"><span class="pre">boards/arm/sam34/sam3u-ek/src/up_lcd.c.</span></code> See also the usage
-of the LCD driver in the <code class="docutils literal notranslate"><span class="pre">graphics/</span></code> directory.</p></li>
-</ul>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>Device driver support depends on the <em>in-memory</em>, <em>pseudo</em>
+file system that is enabled by default.</p>
 </div>
-<div class="section" id="memory-technology-device-drivers">
-<h3>Memory Technology Device Drivers<a class="headerlink" href="#memory-technology-device-drivers" title="Permalink to this headline">¶</a></h3>
-<ul>
-<li><p><code class="docutils literal notranslate"><span class="pre">include/nuttx/mtd/mtd.h</span></code>. All structures and APIs needed
-to work with MTD drivers are provided in this header file.</p></li>
-<li><p><code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">mtd_dev_s</span></code>. Each MTD device driver must implement
-an instance of <code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">mtd_dev_s</span></code>. That structure defines a
-call table with the following methods:</p>
-<p>Erase the specified erase blocks (units are erase blocks):</p>
-<p>Read/write from the specified read/write blocks:</p>
-<p>Some devices may support byte oriented reads (optional). Most
-MTD devices are inherently block oriented so byte-oriented
-accesses are not supported. It is recommended that low-level
-drivers not support read() if it requires buffering.</p>
-<p>Some devices may also support byte oriented writes (optional).
-Most MTD devices are inherently block oriented so byte-oriented
-accesses are not supported. It is recommended that low-level
-drivers not support read() if it requires buffering. This
-interface is only available if <code class="docutils literal notranslate"><span class="pre">CONFIG_MTD_BYTE_WRITE</span></code> is
-defined.</p>
-<p>Support other, less frequently used commands:</p>
-<ul class="simple">
-<li><p><code class="docutils literal notranslate"><span class="pre">MTDIOC_GEOMETRY</span></code>: Get MTD geometry</p></li>
-<li><p><code class="docutils literal notranslate"><span class="pre">MTDIOC_XIPBASE:</span></code>: Convert block to physical address for
-eXecute-In-Place</p></li>
-<li><p><code class="docutils literal notranslate"><span class="pre">MTDIOC_BULKERASE</span></code>: Erase the entire device</p></li>
-</ul>
-<p>is provided via a single <code class="docutils literal notranslate"><span class="pre">ioctl</span></code> method (see
-<code class="docutils literal notranslate"><span class="pre">include/nuttx/fs/ioctl.h</span></code>):</p>
-</li>
-<li><p><strong>Binding MTD Drivers</strong>. MTD drivers are not normally directly
-accessed by user code, but are usually bound to another, higher
-level device driver. In general, the binding sequence is:</p>
-<ol class="arabic simple">
-<li><p>Get an instance of <code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">mtd_dev_s</span></code> from the
-hardware-specific MTD device driver, and</p></li>
-<li><p>Provide that instance to the initialization method of the
-higher level device driver.</p></li>
-</ol>
-</li>
-<li><p><strong>Examples</strong>: <code class="docutils literal notranslate"><span class="pre">drivers/mtd/m25px.c</span></code> and <code class="docutils literal notranslate"><span class="pre">drivers/mtd/ftl.c</span></code></p></li>
-</ul>
-</div>
-<div class="section" id="sdio-device-drivers">
-<h3>SDIO Device Drivers<a class="headerlink" href="#sdio-device-drivers" title="Permalink to this headline">¶</a></h3>
-<ul>
-<li><p><code class="docutils literal notranslate"><span class="pre">include/nuttx/sdio.h</span></code>. All structures and APIs needed to
-work with SDIO drivers are provided in this header file.</p></li>
-<li><p><code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">sdio_dev_s</span></code>. Each SDIO device driver must
-implement an instance of <code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">sdio_dev_s</span></code>. That structure
-defines a call table with the following methods:</p>
-<p>Mutual exclusion:</p>
-<p>Initialization/setup:</p>
-<p>Command/Status/Data Transfer:</p>
-<p>Event/Callback support:</p>
-<p>DMA support:</p>
-</li>
-<li><p><strong>Binding SDIO Drivers</strong>. SDIO drivers are not normally
-directly accessed by user code, but are usually bound to
-another, higher level device driver. In general, the binding
-sequence is:</p>
-<ol class="arabic simple">
-<li><p>Get an instance of <code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">sdio_dev_s</span></code> from the
-hardware-specific SDIO device driver, and</p></li>
-<li><p>Provide that instance to the initialization method of the
-higher level device driver.</p></li>
-</ol>
-</li>
-<li><p><strong>Examples</strong>: <code class="docutils literal notranslate"><span class="pre">arch/arm/src/stm32/stm32_sdio.c</span></code> and
-<code class="docutils literal notranslate"><span class="pre">drivers/mmcsd/mmcsd_sdio.c</span></code></p></li>
-</ul>
-</div>
-<div class="section" id="usb-host-side-drivers">
-<h3>USB Host-Side Drivers<a class="headerlink" href="#usb-host-side-drivers" title="Permalink to this headline">¶</a></h3>
-<ul>
-<li><p><code class="docutils literal notranslate"><span class="pre">include/nuttx/usb/usbhost.h</span></code>. All structures and APIs
-needed to work with USB host-side drivers are provided in this
-header file.</p></li>
-<li><p><code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">usbhost_driver_s</span></code> and
-<code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">usbhost_connection_s</span></code>. Each USB host controller
-driver must implement an instance of
-<code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">usbhost_driver_s</span></code> and
-<code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">usbhost_connection_s</span></code>: <code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">usbhost_driver_s</span></code>
-provides the interface between the USB host driver and the USB
-class driver; <code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">usbhost_connection_s</span></code> provides the
-interface between the USB host driver and platform-specific
-connection management and device enumeration logic. These
-structures are defined in <code class="docutils literal notranslate"><span class="pre">include/nuttx/usb/usbhost.h</span></code>.</p>
-<p><strong>Examples</strong>: <code class="docutils literal notranslate"><span class="pre">arch/arm/src/lpc17xx_40xx/lpc17_40_usbhost.c</span></code>,
-<code class="docutils literal notranslate"><span class="pre">arch/arm/src/stm32/stm32_otgfshost.c</span></code>,
-<code class="docutils literal notranslate"><span class="pre">arch/arm/src/sama5/sam_ohci.c</span></code>, and
-<code class="docutils literal notranslate"><span class="pre">arch/arm/src/sama5/sam_ehci.c</span></code>.</p>
-</li>
-<li><p><code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">usbhost_class_s</span></code>. Each USB host class driver must
-implement an instance of <code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">usbhost_class_s</span></code>. This
-structure is also defined in <code class="docutils literal notranslate"><span class="pre">include/nuttx/usb/usbhost.h</span></code>.</p>
-<p><strong>Examples</strong>: <code class="docutils literal notranslate"><span class="pre">drivers/usbhost/usbhost_storage.c</span></code></p>
-</li>
-<li><p><strong>USB Host Class Driver Registry</strong>. The NuttX USB host
-infrastructure includes a <em>registry</em>. During its
-initialization, each USB host class driver must call the
-interface, <code class="docutils literal notranslate"><span class="pre">usbhost_registerclass()</span></code> in order add its
-interface to the registry. 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.</p>
-<p><strong>Examples</strong>: <code class="docutils literal notranslate"><span class="pre">drivers/usbhost/usbhost_registry.c</span></code>,
-<code class="docutils literal notranslate"><span class="pre">drivers/usbhost/usbhost_registerclass.c</span></code>, and
-<code class="docutils literal notranslate"><span class="pre">drivers/usbhost/usbhost_findclass.c</span></code>,</p>
-</li>
-<li><p><strong>Detection and Enumeration of Connected Devices</strong>. Each USB
-host device controller supports two methods that are used to
-detect and enumeration newly connected devices (and also detect
-disconnected devices):</p>
-<ul>
-<li><p><code class="docutils literal notranslate"><span class="pre">int</span> <span class="pre">(*wait)(FAR</span> <span class="pre">struct</span> <span class="pre">usbhost_connection_s</span> <span class="pre">*drvr,</span> <span class="pre">FAR</span> <span class="pre">const</span> <span class="pre">bool</span> <span class="pre">*connected);</span></code></p>
-<p>Wait for a device to be connected or disconnected.</p>
-</li>
-<li><p><code class="docutils literal notranslate"><span class="pre">int</span> <span class="pre">(*enumerate)(FAR</span> <span class="pre">struct</span> <span class="pre">usbhost_connection_s</span> <span class="pre">*drvr,</span> <span class="pre">int</span> <span class="pre">rhpndx);</span></code></p>
-<p>Enumerate the device connected to a root hub port. 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
-<code class="docutils literal notranslate"><span class="pre">usbhost_findclass(</span></code>) to find the class that supports this
-device, (4) call the <code class="docutils literal notranslate"><span class="pre">create()</span></code> method on the
-<code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">usbhost_registry_s</span> <span class="pre">interface</span></code> to get a class
-instance, and finally (5) call the <code class="docutils literal notranslate"><span class="pre">connect()</span></code> method of
-the <code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">usbhost_class_s</span></code> interface. After that, the
-class is in charge of the sequence of operations.</p>
-</li>
-</ul>
-</li>
-<li><p><strong>Binding USB Host-Side Drivers</strong>. 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
-(<code class="docutils literal notranslate"><span class="pre">drivers/usbhost/usbhost_storage.c</span></code>) will register a
-standard, NuttX block driver interface (like <code class="docutils literal notranslate"><span class="pre">/dev/sda</span></code>) that
-can be used to mount a file system just as with any other other
-block driver instance. In general, the binding sequence is:</p>
-<ol class="arabic">
-<li><p>Each USB host class driver includes an initialization entry
-point that is called from the application at initialization
-time. This driver calls <code class="docutils literal notranslate"><span class="pre">usbhost_registerclass()</span></code> during
-this initialization in order to makes itself available in
-the event the device that it supports is connected.</p>
-<p><strong>Examples</strong>: The function <code class="docutils literal notranslate"><span class="pre">usbhost_msc_initialize()</span></code> in
-the file <code class="docutils literal notranslate"><span class="pre">drivers/usbhost/usbhost_storage.c</span></code></p>
-</li>
-<li><p>Each application must include a <em>waiter</em> thread thread that
-(1) calls the USB host controller driver’s <code class="docutils literal notranslate"><span class="pre">wait()</span></code> to
-detect the connection of a device, and then (2) call the USB
-host controller driver’s <code class="docutils literal notranslate"><span class="pre">enumerate</span></code> method to bind the
-registered USB host class driver to the USB host controller
-driver.</p>
-<p><strong>Examples</strong>: The function <code class="docutils literal notranslate"><span class="pre">nsh_waiter()</span></code> in the file
-<code class="docutils literal notranslate"><span class="pre">boards/arm/lpc17xx_40xx/olimex-lpc1766stk/src/lpc17_40_appinit.c</span></code>.</p>
-</li>
-<li><p>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 <code class="docutils literal notranslate"><span class="pre">/dev</span></code> directory. To
-repeat the above example, the USB host mass storage class
-driver (<code class="docutils literal notranslate"><span class="pre">drivers/usbhost/usbhost_storage.c</span></code>) will register
-a standard, NuttX block driver interface (like <code class="docutils literal notranslate"><span class="pre">/dev/sda</span></code>)
-that can be used to mount a file system just as with any
-other other block driver instance.</p>
-<p><strong>Examples</strong>: See the call to <code class="docutils literal notranslate"><span class="pre">register_blockdriver()</span></code> in
-the function <code class="docutils literal notranslate"><span class="pre">usbhost_initvolume()</span></code> in the file
-<code class="docutils literal notranslate"><span class="pre">drivers/usbhost/usbhost_storage.c</span></code>.</p>
-</li>
-</ol>
-</li>
-</ul>
-</div>
-<div class="section" id="usb-device-side-drivers">
-<h3>USB Device-Side Drivers<a class="headerlink" href="#usb-device-side-drivers" title="Permalink to this headline">¶</a></h3>
-<ul>
-<li><p><code class="docutils literal notranslate"><span class="pre">include/nuttx/usb/usbdev.h</span></code>. All structures and APIs
-needed to work with USB device-side drivers are provided in
-this header file.</p></li>
-<li><p><code class="docutils literal notranslate"><span class="pre">include/nuttx/usb/usbdev_trace.h</span></code>. Declarations needed
-to work with the NuttX USB device driver trace capability. That
-USB trace capability is detailed in <a class="reference external" href="UsbTrace.html">separate
-document</a>.</p></li>
-<li><p><code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">usbdev_s</span></code>. Each USB device controller driver must
-implement an instance of <code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">usbdev_s</span></code>. This structure is
-defined in <code class="docutils literal notranslate"><span class="pre">include/nuttx/usb/usbdev.h</span></code>.</p>
-<p><strong>Examples</strong>: <code class="docutils literal notranslate"><span class="pre">arch/arm/src/dm320/dm320_usbdev.c</span></code>,
-<code class="docutils literal notranslate"><span class="pre">arch/arm/src/lpc17xx_40xx/lpc17_40_usbdev.c</span></code>,
-<code class="docutils literal notranslate"><span class="pre">arch/arm/src/lpc214x/lpc214x_usbdev.c</span></code>,
-<code class="docutils literal notranslate"><span class="pre">arch/arm/src/lpc313x/lpc313x_usbdev.c</span></code>, and
-<code class="docutils literal notranslate"><span class="pre">arch/arm/src/stm32/stm32_usbdev.c</span></code>.</p>
-</li>
-<li><p><code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">usbdevclass_driver_s</span></code>. Each USB device class
-driver must implement an instance of
-<code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">usbdevclass_driver_s</span></code>. This structure is also defined
-in <code class="docutils literal notranslate"><span class="pre">include/nuttx/usb/usbdev.h</span></code>.</p>
-<p><strong>Examples</strong>: <code class="docutils literal notranslate"><span class="pre">drivers/usbdev/pl2303.c</span></code> and
-<code class="docutils literal notranslate"><span class="pre">drivers/usbdev/usbmsc.c</span></code></p>
-</li>
-<li><p><strong>Binding USB Device-Side Drivers</strong>. USB device-side controller
-drivers are not normally directly accessed by user code, but
-are usually bound to another, higher level USB device class
-driver. The class driver is then configured to export the USB
-device functionality. In general, the binding sequence is:</p>
-<ol class="arabic">
-<li><p>Each USB device class driver includes an initialization
-entry point that is called from the application at
-initialization time.</p>
-<p><strong>Examples</strong>: The function <code class="docutils literal notranslate"><span class="pre">usbdev_serialinitialize()</span></code> in
-the file <code class="docutils literal notranslate"><span class="pre">drivers/usbdev/pl2303.c</span></code> and the function
-in the file <code class="docutils literal notranslate"><span class="pre">drivers/usbdev/usbmsc.c</span></code></p>
-</li>
-<li><p>These initialization functions called the driver API,
-<code class="docutils literal notranslate"><span class="pre">usbdev_register()</span></code>. This driver function will <em>bind</em> the
-USB class driver to the USB device controller driver,
-completing the initialization.</p></li>
-</ol>
-</li>
+<div class="section" id="lower-half-and-upper-half">
+<h2>Lower-half and upper-half<a class="headerlink" href="#lower-half-and-upper-half" title="Permalink to this headline">¶</a></h2>
+<p>Drivers in NuttX generally work in two distinct layers:</p>
+<blockquote>
+<div><ul class="simple">
+<li><p>An <em>upper half</em> which registers itself to NuttX using
+a call such as <code class="xref c c-func docutils literal notranslate"><span class="pre">register_driver()</span></code> or
+<code class="xref c c-func docutils literal notranslate"><span class="pre">register_blockdriver()</span></code> and implements the corresponding
+high-level interface (<cite>read</cite>, <cite>write</cite>, <cite>close</cite>, etc.).
+implements the interface. This <em>upper half</em> calls into
+the <em>lower half</em> via callbacks.</p></li>
+<li><p>A “lower half” which is typically hardware-specific. This is
+usually implemented at the architecture or board level.</p></li>
 </ul>
-</div>
+</div></blockquote>
 </div>
 </div>
 
diff --git a/content/docs/latest/components/drivers/special/ethernet.html b/content/docs/latest/components/drivers/special/ethernet.html
new file mode 100644
index 0000000..ed028a6
--- /dev/null
+++ b/content/docs/latest/components/drivers/special/ethernet.html
@@ -0,0 +1,285 @@
+<!--
+ Documentation/_templates/layout.html
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements.  See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.  The
+ ASF licenses this file to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance with the
+ License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ License for the specific language governing permissions and limitations
+ under the License.
+-->
+
+
+
+<!DOCTYPE html>
+<html class="writer-html5" lang="en" >
+<head>
+  <meta charset="utf-8">
+  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  
+  <title>Ethernet Device Drivers &mdash; NuttX latest documentation</title>
+  
+
+  
+  <link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
+  <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
+  <link rel="stylesheet" href="../../../_static/custom.css" type="text/css" />
+
+  
+  
+    <link rel="shortcut icon" href="../../../_static/favicon.ico"/>
+  
+  
+  
+
+  
+  <!--[if lt IE 9]>
+    <script src="../../../_static/js/html5shiv.min.js"></script>
+  <![endif]-->
+  
+    
+      <script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
+        <script src="../../../_static/jquery.js"></script>
+        <script src="../../../_static/underscore.js"></script>
+        <script src="../../../_static/doctools.js"></script>
+        <script src="../../../_static/language_data.js"></script>
+    
+    <script type="text/javascript" src="../../../_static/js/theme.js"></script>
+
+    
+    <link rel="index" title="Index" href="../../../genindex.html" />
+    <link rel="search" title="Search" href="../../../search.html" />
+    <link rel="next" title="Frame Buffer Drivers" href="framebuffer.html" />
+    <link rel="prev" title="I2C Device Drivers" href="i2c.html" /> 
+</head>
+
+<body class="wy-body-for-nav">
+
+   
+  <div class="wy-grid-for-nav">
+    
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
+          
+  
+    <a href="../../../index.html" class="icon icon-home"> NuttX
+  
+
+  
+    
+    <img src="../../../_static/NuttX.png" class="logo" alt="Logo"/>
+  
+  </a>
+  
+  <!-- this version selector is quite ugly, should be probably replaced by something
+       more modern -->
+       
+  <div class="version-selector">
+    <select>
+    
+      <option value="latest" selected="selected">latest</option>
+    
+    </select>
+  </div>
+  
+  
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+
+        </div>
+
+        
+        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
+          
+            
+            
+              
+            
+            
+              <p class="caption"><span class="caption-text">Table of Contents</span></p>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="../../../index.html">Home</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../introduction/index.html">Introduction</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../introduction/inviolables.html">The Inviolable Principles of NuttX</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../quickstart/index.html">Getting Started</a></li>
+<li class="toctree-l1 current"><a class="reference internal" href="../../index.html">OS Components</a><ul class="current">
+<li class="toctree-l2"><a class="reference internal" href="../../nsh/index.html">NuttShell (NSH)</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../power.html">Power Management</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../socketcan.html">SocketCAN Device Drivers</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../syslog.html">SYSLOG</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../binfmt.html">Binary Loader</a></li>
+<li class="toctree-l2 current"><a class="reference internal" href="../index.html">Device Drivers</a><ul class="current">
+<li class="toctree-l3"><a class="reference internal" href="../character/index.html">Character Device Drivers</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../block/index.html">Block Device Drivers</a></li>
+<li class="toctree-l3 current"><a class="reference internal" href="index.html">Specialized Device Drivers</a><ul class="current">
+<li class="toctree-l4"><a class="reference internal" href="spi.html">SPI Device Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="i2c.html">I2C Device Drivers</a></li>
+<li class="toctree-l4 current"><a class="current reference internal" href="#">Ethernet Device Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="framebuffer.html">Frame Buffer Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="lcd.html">LCD Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="mtd.html">Memory Technology Device Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="sdio.html">SDIO Device Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="usbhost.html">USB Host-Side Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="usbdev.html">USB Device-Side Drivers</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="../index.html#lower-half-and-upper-half">Lower-half and upper-half</a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="../../filesystem.html">NuttX File System</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../nxflat.html">NXFLAT</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../nxgraphics/index.html">NX Graphics Subsystem</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../nxwidgets.html">NxWidgets</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../paging.html">On-Demand Paging</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="../../../applications/index.html">Applications</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../boards/index.html">Supported Boards</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../reference/index.html">API Reference</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../guides/index.html">Guides</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../releases/index.html">Releases</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../contributing/index.html">Contributing</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../glossary.html">Glossary</a></li>
+</ul>
+
+            
+          
+        </div>
+        
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
+
+      
+      <nav class="wy-nav-top" aria-label="top navigation">
+        
+          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+          <a href="../../../index.html">NuttX</a>
+        
+      </nav>
+
+
+      <div class="wy-nav-content">
+        
+        <div class="rst-content">
+        
+          
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<div role="navigation" aria-label="breadcrumbs navigation">
+
+  <ul class="wy-breadcrumbs">
+    
+      <li><a href="../../../index.html" class="icon icon-home"></a> &raquo;</li>
+        
+          <li><a href="../../index.html">OS Components</a> &raquo;</li>
+        
+          <li><a href="../index.html">Device Drivers</a> &raquo;</li>
+        
+          <li><a href="index.html">Specialized Device Drivers</a> &raquo;</li>
+        
+      <li>Ethernet Device Drivers</li>
+    
+    
+      <li class="wy-breadcrumbs-aside">
+        
+            
+            <a href="../../../_sources/components/drivers/special/ethernet.rst.txt" rel="nofollow"> View page source</a>
+          
+        
+      </li>
+    
+  </ul>
+
+  
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+            
+  <div class="section" id="ethernet-device-drivers">
+<h1>Ethernet Device Drivers<a class="headerlink" href="#ethernet-device-drivers" title="Permalink to this headline">¶</a></h1>
+<ul class="simple">
+<li><p><code class="docutils literal notranslate"><span class="pre">include/nuttx/net/netdev.h</span></code>. All structures and APIs
+needed to work with Ethernet drivers are provided in this
+header file. The structure <code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">net_driver_s</span></code> defines the
+interface and is passed to the network via
+<code class="docutils literal notranslate"><span class="pre">netdev_register()</span></code>.</p></li>
+<li><p><code class="docutils literal notranslate"><span class="pre">int</span> <span class="pre">netdev_register(FAR</span> <span class="pre">struct</span> <span class="pre">net_driver_s</span> <span class="pre">*dev,</span> <span class="pre">enum</span> <span class="pre">net_lltype_e</span> <span class="pre">lltype);</span></code>.
+Each Ethernet driver registers itself by calling
+<code class="docutils literal notranslate"><span class="pre">netdev_register()</span></code>.</p></li>
+<li><p><strong>Examples</strong>: <code class="docutils literal notranslate"><span class="pre">drivers/net/dm90x0.c</span></code>,
+<code class="docutils literal notranslate"><span class="pre">arch/drivers/arm/src/c5471/c5471_ethernet.c</span></code>,
+<code class="docutils literal notranslate"><span class="pre">arch/z80/src/ez80/ez80_emac.c</span></code>, etc.</p></li>
+</ul>
+</div>
+
+
+           </div>
+           
+          </div>
+          <footer>
+  
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>
+        
+        &copy; Copyright 2020, The Apache Software Foundation
+
+    </p>
+  </div> 
+
+</footer>
+
+        </div>
+      </div>
+
+    </section>
+
+  </div>
+  
+
+  <script type="text/javascript">
+      jQuery(function () {
+          SphinxRtdTheme.Navigation.enable(true);
+      });
+  </script>
+
+  
+  
+    
+   
+
+</body>
+</html>
\ No newline at end of file
diff --git a/content/docs/latest/components/drivers/special/framebuffer.html b/content/docs/latest/components/drivers/special/framebuffer.html
new file mode 100644
index 0000000..6f2c039
--- /dev/null
+++ b/content/docs/latest/components/drivers/special/framebuffer.html
@@ -0,0 +1,301 @@
+<!--
+ Documentation/_templates/layout.html
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements.  See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.  The
+ ASF licenses this file to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance with the
+ License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ License for the specific language governing permissions and limitations
+ under the License.
+-->
+
+
+
+<!DOCTYPE html>
+<html class="writer-html5" lang="en" >
+<head>
+  <meta charset="utf-8">
+  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  
+  <title>Frame Buffer Drivers &mdash; NuttX latest documentation</title>
+  
+
+  
+  <link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
+  <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
+  <link rel="stylesheet" href="../../../_static/custom.css" type="text/css" />
+
+  
+  
+    <link rel="shortcut icon" href="../../../_static/favicon.ico"/>
+  
+  
+  
+
+  
+  <!--[if lt IE 9]>
+    <script src="../../../_static/js/html5shiv.min.js"></script>
+  <![endif]-->
+  
+    
+      <script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
+        <script src="../../../_static/jquery.js"></script>
+        <script src="../../../_static/underscore.js"></script>
+        <script src="../../../_static/doctools.js"></script>
+        <script src="../../../_static/language_data.js"></script>
+    
+    <script type="text/javascript" src="../../../_static/js/theme.js"></script>
+
+    
+    <link rel="index" title="Index" href="../../../genindex.html" />
+    <link rel="search" title="Search" href="../../../search.html" />
+    <link rel="next" title="LCD Drivers" href="lcd.html" />
+    <link rel="prev" title="Ethernet Device Drivers" href="ethernet.html" /> 
+</head>
+
+<body class="wy-body-for-nav">
+
+   
+  <div class="wy-grid-for-nav">
+    
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
+          
+  
+    <a href="../../../index.html" class="icon icon-home"> NuttX
+  
+
+  
+    
+    <img src="../../../_static/NuttX.png" class="logo" alt="Logo"/>
+  
+  </a>
+  
+  <!-- this version selector is quite ugly, should be probably replaced by something
+       more modern -->
+       
+  <div class="version-selector">
+    <select>
+    
+      <option value="latest" selected="selected">latest</option>
+    
+    </select>
+  </div>
+  
+  
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+
+        </div>
+
+        
+        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
+          
+            
+            
+              
+            
+            
+              <p class="caption"><span class="caption-text">Table of Contents</span></p>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="../../../index.html">Home</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../introduction/index.html">Introduction</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../introduction/inviolables.html">The Inviolable Principles of NuttX</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../quickstart/index.html">Getting Started</a></li>
+<li class="toctree-l1 current"><a class="reference internal" href="../../index.html">OS Components</a><ul class="current">
+<li class="toctree-l2"><a class="reference internal" href="../../nsh/index.html">NuttShell (NSH)</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../power.html">Power Management</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../socketcan.html">SocketCAN Device Drivers</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../syslog.html">SYSLOG</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../binfmt.html">Binary Loader</a></li>
+<li class="toctree-l2 current"><a class="reference internal" href="../index.html">Device Drivers</a><ul class="current">
+<li class="toctree-l3"><a class="reference internal" href="../character/index.html">Character Device Drivers</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../block/index.html">Block Device Drivers</a></li>
+<li class="toctree-l3 current"><a class="reference internal" href="index.html">Specialized Device Drivers</a><ul class="current">
+<li class="toctree-l4"><a class="reference internal" href="spi.html">SPI Device Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="i2c.html">I2C Device Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="ethernet.html">Ethernet Device Drivers</a></li>
+<li class="toctree-l4 current"><a class="current reference internal" href="#">Frame Buffer Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="lcd.html">LCD Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="mtd.html">Memory Technology Device Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="sdio.html">SDIO Device Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="usbhost.html">USB Host-Side Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="usbdev.html">USB Device-Side Drivers</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="../index.html#lower-half-and-upper-half">Lower-half and upper-half</a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="../../filesystem.html">NuttX File System</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../nxflat.html">NXFLAT</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../nxgraphics/index.html">NX Graphics Subsystem</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../nxwidgets.html">NxWidgets</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../paging.html">On-Demand Paging</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="../../../applications/index.html">Applications</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../boards/index.html">Supported Boards</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../reference/index.html">API Reference</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../guides/index.html">Guides</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../releases/index.html">Releases</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../contributing/index.html">Contributing</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../glossary.html">Glossary</a></li>
+</ul>
+
+            
+          
+        </div>
+        
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
+
+      
+      <nav class="wy-nav-top" aria-label="top navigation">
+        
+          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+          <a href="../../../index.html">NuttX</a>
+        
+      </nav>
+
+
+      <div class="wy-nav-content">
+        
+        <div class="rst-content">
+        
+          
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<div role="navigation" aria-label="breadcrumbs navigation">
+
+  <ul class="wy-breadcrumbs">
+    
+      <li><a href="../../../index.html" class="icon icon-home"></a> &raquo;</li>
+        
+          <li><a href="../../index.html">OS Components</a> &raquo;</li>
+        
+          <li><a href="../index.html">Device Drivers</a> &raquo;</li>
+        
+          <li><a href="index.html">Specialized Device Drivers</a> &raquo;</li>
+        
+      <li>Frame Buffer Drivers</li>
+    
+    
+      <li class="wy-breadcrumbs-aside">
+        
+            
+            <a href="../../../_sources/components/drivers/special/framebuffer.rst.txt" rel="nofollow"> View page source</a>
+          
+        
+      </li>
+    
+  </ul>
+
+  
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+            
+  <div class="section" id="frame-buffer-drivers">
+<h1>Frame Buffer Drivers<a class="headerlink" href="#frame-buffer-drivers" title="Permalink to this headline">¶</a></h1>
+<ul>
+<li><p><code class="docutils literal notranslate"><span class="pre">include/nuttx/video/fb.h</span></code>. All structures and APIs
+needed to work with frame buffer drivers are provided in this
+header file.</p></li>
+<li><p><code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">fb_vtable_s</span></code>. Each frame buffer device driver
+must implement an instance of <code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">fb_vtable_s</span></code>. That
+structure defines a call table with the following methods:</p>
+<p>Get information about the video controller configuration and
+the configuration of each color plane.</p>
+<p>The following are provided only if the video hardware supports
+RGB color mapping:</p>
+<p>The following are provided only if the video hardware supports
+a hardware cursor:</p>
+</li>
+<li><p><strong>Binding Frame Buffer Drivers</strong>. Frame buffer drivers are not
+normally directly accessed by user code, but are usually bound
+to another, higher level device driver. In general, the binding
+sequence is:</p>
+<ol class="arabic simple">
+<li><p>Get an instance of <code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">fb_vtable_s</span></code> from the
+hardware-specific frame buffer device driver, and</p></li>
+<li><p>Provide that instance to the initialization method of the
+higher level device driver.</p></li>
+</ol>
+</li>
+<li><p><strong>Examples</strong>: <code class="docutils literal notranslate"><span class="pre">arch/sim/src/up_framebuffer.c</span></code>. See also the
+usage of the frame buffer driver in the <code class="docutils literal notranslate"><span class="pre">graphics/</span></code>
+directory.</p></li>
+</ul>
+</div>
+
+
+           </div>
+           
+          </div>
+          <footer>
+  
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>
+        
+        &copy; Copyright 2020, The Apache Software Foundation
+
+    </p>
+  </div> 
+
+</footer>
+
+        </div>
+      </div>
+
+    </section>
+
+  </div>
+  
+
+  <script type="text/javascript">
+      jQuery(function () {
+          SphinxRtdTheme.Navigation.enable(true);
+      });
+  </script>
+
+  
+  
+    
+   
+
+</body>
+</html>
\ No newline at end of file
diff --git a/content/docs/latest/components/drivers/special/i2c.html b/content/docs/latest/components/drivers/special/i2c.html
new file mode 100644
index 0000000..9b0e48e
--- /dev/null
+++ b/content/docs/latest/components/drivers/special/i2c.html
@@ -0,0 +1,291 @@
+<!--
+ Documentation/_templates/layout.html
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements.  See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.  The
+ ASF licenses this file to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance with the
+ License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ License for the specific language governing permissions and limitations
+ under the License.
+-->
+
+
+
+<!DOCTYPE html>
+<html class="writer-html5" lang="en" >
+<head>
+  <meta charset="utf-8">
+  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  
+  <title>I2C Device Drivers &mdash; NuttX latest documentation</title>
+  
+
+  
+  <link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
+  <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
+  <link rel="stylesheet" href="../../../_static/custom.css" type="text/css" />
+
+  
+  
+    <link rel="shortcut icon" href="../../../_static/favicon.ico"/>
+  
+  
+  
+
+  
+  <!--[if lt IE 9]>
+    <script src="../../../_static/js/html5shiv.min.js"></script>
+  <![endif]-->
+  
+    
+      <script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
+        <script src="../../../_static/jquery.js"></script>
+        <script src="../../../_static/underscore.js"></script>
+        <script src="../../../_static/doctools.js"></script>
+        <script src="../../../_static/language_data.js"></script>
+    
+    <script type="text/javascript" src="../../../_static/js/theme.js"></script>
+
+    
+    <link rel="index" title="Index" href="../../../genindex.html" />
+    <link rel="search" title="Search" href="../../../search.html" />
+    <link rel="next" title="Ethernet Device Drivers" href="ethernet.html" />
+    <link rel="prev" title="SPI Device Drivers" href="spi.html" /> 
+</head>
+
+<body class="wy-body-for-nav">
+
+   
+  <div class="wy-grid-for-nav">
+    
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
+          
+  
+    <a href="../../../index.html" class="icon icon-home"> NuttX
+  
+
+  
+    
+    <img src="../../../_static/NuttX.png" class="logo" alt="Logo"/>
+  
+  </a>
+  
+  <!-- this version selector is quite ugly, should be probably replaced by something
+       more modern -->
+       
+  <div class="version-selector">
+    <select>
+    
+      <option value="latest" selected="selected">latest</option>
+    
+    </select>
+  </div>
+  
+  
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+
+        </div>
+
+        
+        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
+          
+            
+            
+              
+            
+            
+              <p class="caption"><span class="caption-text">Table of Contents</span></p>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="../../../index.html">Home</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../introduction/index.html">Introduction</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../introduction/inviolables.html">The Inviolable Principles of NuttX</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../quickstart/index.html">Getting Started</a></li>
+<li class="toctree-l1 current"><a class="reference internal" href="../../index.html">OS Components</a><ul class="current">
+<li class="toctree-l2"><a class="reference internal" href="../../nsh/index.html">NuttShell (NSH)</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../power.html">Power Management</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../socketcan.html">SocketCAN Device Drivers</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../syslog.html">SYSLOG</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../binfmt.html">Binary Loader</a></li>
+<li class="toctree-l2 current"><a class="reference internal" href="../index.html">Device Drivers</a><ul class="current">
+<li class="toctree-l3"><a class="reference internal" href="../character/index.html">Character Device Drivers</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../block/index.html">Block Device Drivers</a></li>
+<li class="toctree-l3 current"><a class="reference internal" href="index.html">Specialized Device Drivers</a><ul class="current">
+<li class="toctree-l4"><a class="reference internal" href="spi.html">SPI Device Drivers</a></li>
+<li class="toctree-l4 current"><a class="current reference internal" href="#">I2C Device Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="ethernet.html">Ethernet Device Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="framebuffer.html">Frame Buffer Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="lcd.html">LCD Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="mtd.html">Memory Technology Device Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="sdio.html">SDIO Device Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="usbhost.html">USB Host-Side Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="usbdev.html">USB Device-Side Drivers</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="../index.html#lower-half-and-upper-half">Lower-half and upper-half</a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="../../filesystem.html">NuttX File System</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../nxflat.html">NXFLAT</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../nxgraphics/index.html">NX Graphics Subsystem</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../nxwidgets.html">NxWidgets</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../paging.html">On-Demand Paging</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="../../../applications/index.html">Applications</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../boards/index.html">Supported Boards</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../reference/index.html">API Reference</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../guides/index.html">Guides</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../releases/index.html">Releases</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../contributing/index.html">Contributing</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../glossary.html">Glossary</a></li>
+</ul>
+
+            
+          
+        </div>
+        
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
+
+      
+      <nav class="wy-nav-top" aria-label="top navigation">
+        
+          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+          <a href="../../../index.html">NuttX</a>
+        
+      </nav>
+
+
+      <div class="wy-nav-content">
+        
+        <div class="rst-content">
+        
+          
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<div role="navigation" aria-label="breadcrumbs navigation">
+
+  <ul class="wy-breadcrumbs">
+    
+      <li><a href="../../../index.html" class="icon icon-home"></a> &raquo;</li>
+        
+          <li><a href="../../index.html">OS Components</a> &raquo;</li>
+        
+          <li><a href="../index.html">Device Drivers</a> &raquo;</li>
+        
+          <li><a href="index.html">Specialized Device Drivers</a> &raquo;</li>
+        
+      <li>I2C Device Drivers</li>
+    
+    
+      <li class="wy-breadcrumbs-aside">
+        
+            
+            <a href="../../../_sources/components/drivers/special/i2c.rst.txt" rel="nofollow"> View page source</a>
+          
+        
+      </li>
+    
+  </ul>
+
+  
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+            
+  <div class="section" id="i2c-device-drivers">
+<h1>I2C Device Drivers<a class="headerlink" href="#i2c-device-drivers" title="Permalink to this headline">¶</a></h1>
+<ul class="simple">
+<li><p><code class="docutils literal notranslate"><span class="pre">include/nuttx/i2c/i2c.h</span></code>. All structures and APIs needed
+to work with I2C drivers are provided in this header file.</p></li>
+<li><p><code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">i2c_ops_s</span></code>. Each I2C device driver must implement
+an instance of <code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">i2c_ops_s</span></code>. That structure defines a
+call table with the following methods:</p></li>
+<li><p><strong>Binding I2C Drivers</strong>. I2C drivers are not normally directly
+accessed by user code, but are usually bound to another, higher
+level device driver. In general, the binding sequence is:</p>
+<ol class="arabic simple">
+<li><p>Get an instance of <code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">i2c_master_s</span></code> from the
+hardware-specific I2C device driver, and</p></li>
+<li><p>Provide that instance to the initialization method of the
+higher level device driver.</p></li>
+</ol>
+</li>
+<li><p><strong>Examples</strong>: <code class="docutils literal notranslate"><span class="pre">arch/z80/src/ez80/ez80_i2c.c</span></code>,
+<code class="docutils literal notranslate"><span class="pre">arch/z80/src/z8/z8_i2c.c</span></code>, etc.</p></li>
+</ul>
+</div>
+
+
+           </div>
+           
+          </div>
+          <footer>
+  
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>
+        
+        &copy; Copyright 2020, The Apache Software Foundation
+
+    </p>
+  </div> 
+
+</footer>
+
+        </div>
+      </div>
+
+    </section>
+
+  </div>
+  
+
+  <script type="text/javascript">
+      jQuery(function () {
+          SphinxRtdTheme.Navigation.enable(true);
+      });
+  </script>
+
+  
+  
+    
+   
+
+</body>
+</html>
\ No newline at end of file
diff --git a/content/docs/latest/components/drivers/special/index.html b/content/docs/latest/components/drivers/special/index.html
new file mode 100644
index 0000000..e70aa12
--- /dev/null
+++ b/content/docs/latest/components/drivers/special/index.html
@@ -0,0 +1,300 @@
+<!--
+ Documentation/_templates/layout.html
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements.  See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.  The
+ ASF licenses this file to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance with the
+ License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ License for the specific language governing permissions and limitations
+ under the License.
+-->
+
+
+
+<!DOCTYPE html>
+<html class="writer-html5" lang="en" >
+<head>
+  <meta charset="utf-8">
+  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  
+  <title>Specialized Device Drivers &mdash; NuttX latest documentation</title>
+  
+
+  
+  <link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
+  <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
+  <link rel="stylesheet" href="../../../_static/custom.css" type="text/css" />
+
+  
+  
+    <link rel="shortcut icon" href="../../../_static/favicon.ico"/>
+  
+  
+  
+
+  
+  <!--[if lt IE 9]>
+    <script src="../../../_static/js/html5shiv.min.js"></script>
+  <![endif]-->
+  
+    
+      <script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
+        <script src="../../../_static/jquery.js"></script>
+        <script src="../../../_static/underscore.js"></script>
+        <script src="../../../_static/doctools.js"></script>
+        <script src="../../../_static/language_data.js"></script>
+    
+    <script type="text/javascript" src="../../../_static/js/theme.js"></script>
+
+    
+    <link rel="index" title="Index" href="../../../genindex.html" />
+    <link rel="search" title="Search" href="../../../search.html" />
+    <link rel="next" title="SPI Device Drivers" href="spi.html" />
+    <link rel="prev" title="Block Device Drivers" href="../block/index.html" /> 
+</head>
+
+<body class="wy-body-for-nav">
+
+   
+  <div class="wy-grid-for-nav">
+    
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
+          
+  
+    <a href="../../../index.html" class="icon icon-home"> NuttX
+  
+
+  
+    
+    <img src="../../../_static/NuttX.png" class="logo" alt="Logo"/>
+  
+  </a>
+  
+  <!-- this version selector is quite ugly, should be probably replaced by something
+       more modern -->
+       
+  <div class="version-selector">
+    <select>
+    
+      <option value="latest" selected="selected">latest</option>
+    
+    </select>
+  </div>
+  
+  
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+
+        </div>
+
+        
+        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
+          
+            
+            
+              
+            
+            
+              <p class="caption"><span class="caption-text">Table of Contents</span></p>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="../../../index.html">Home</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../introduction/index.html">Introduction</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../introduction/inviolables.html">The Inviolable Principles of NuttX</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../quickstart/index.html">Getting Started</a></li>
+<li class="toctree-l1 current"><a class="reference internal" href="../../index.html">OS Components</a><ul class="current">
+<li class="toctree-l2"><a class="reference internal" href="../../nsh/index.html">NuttShell (NSH)</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../power.html">Power Management</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../socketcan.html">SocketCAN Device Drivers</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../syslog.html">SYSLOG</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../binfmt.html">Binary Loader</a></li>
+<li class="toctree-l2 current"><a class="reference internal" href="../index.html">Device Drivers</a><ul class="current">
+<li class="toctree-l3"><a class="reference internal" href="../character/index.html">Character Device Drivers</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../block/index.html">Block Device Drivers</a></li>
+<li class="toctree-l3 current"><a class="current reference internal" href="#">Specialized Device Drivers</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="spi.html">SPI Device Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="i2c.html">I2C Device Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="ethernet.html">Ethernet Device Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="framebuffer.html">Frame Buffer Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="lcd.html">LCD Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="mtd.html">Memory Technology Device Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="sdio.html">SDIO Device Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="usbhost.html">USB Host-Side Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="usbdev.html">USB Device-Side Drivers</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="../index.html#lower-half-and-upper-half">Lower-half and upper-half</a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="../../filesystem.html">NuttX File System</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../nxflat.html">NXFLAT</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../nxgraphics/index.html">NX Graphics Subsystem</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../nxwidgets.html">NxWidgets</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../paging.html">On-Demand Paging</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="../../../applications/index.html">Applications</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../boards/index.html">Supported Boards</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../reference/index.html">API Reference</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../guides/index.html">Guides</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../releases/index.html">Releases</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../contributing/index.html">Contributing</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../glossary.html">Glossary</a></li>
+</ul>
+
+            
+          
+        </div>
+        
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
+
+      
+      <nav class="wy-nav-top" aria-label="top navigation">
+        
+          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+          <a href="../../../index.html">NuttX</a>
+        
+      </nav>
+
+
+      <div class="wy-nav-content">
+        
+        <div class="rst-content">
+        
+          
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<div role="navigation" aria-label="breadcrumbs navigation">
+
+  <ul class="wy-breadcrumbs">
+    
+      <li><a href="../../../index.html" class="icon icon-home"></a> &raquo;</li>
+        
+          <li><a href="../../index.html">OS Components</a> &raquo;</li>
+        
+          <li><a href="../index.html">Device Drivers</a> &raquo;</li>
+        
+      <li>Specialized Device Drivers</li>
+    
+    
+      <li class="wy-breadcrumbs-aside">
+        
+            
+            <a href="../../../_sources/components/drivers/special/index.rst.txt" rel="nofollow"> View page source</a>
+          
+        
+      </li>
+    
+  </ul>
+
+  
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+            
+  <div class="section" id="specialized-device-drivers">
+<h1>Specialized Device Drivers<a class="headerlink" href="#specialized-device-drivers" title="Permalink to this headline">¶</a></h1>
+<p>All device drivers that are accessible to application logic are
+either: (1) Character device drivers that can be accessed via the
+standard driver operations (<code class="docutils literal notranslate"><span class="pre">open()</span></code>, <code class="docutils literal notranslate"><span class="pre">close()</span></code>, <code class="docutils literal notranslate"><span class="pre">read()</span></code>,
+<code class="docutils literal notranslate"><span class="pre">write()</span></code>, etc.), or (2) block drivers that can be accessing
+only as part of mounting a file system or other special use cases
+as described in the preceding paragraph.</p>
+<p>In addition to this, there are also specialized “drivers” that can
+be used only within the OS logic itself and are not accessible to
+application logic. These specialized drivers are discussed in the
+following section.</p>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>While special drivers are <em>internal</em>, in some cases there are also
+character/block drivers that sit on top of these special drivers
+and thus expose them to applications.</p>
+</div>
+<div class="toctree-wrapper compound">
+<p class="caption"><span class="caption-text">Supported Drivers</span></p>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="spi.html">SPI Device Drivers</a></li>
+<li class="toctree-l1"><a class="reference internal" href="i2c.html">I2C Device Drivers</a></li>
+<li class="toctree-l1"><a class="reference internal" href="ethernet.html">Ethernet Device Drivers</a></li>
+<li class="toctree-l1"><a class="reference internal" href="framebuffer.html">Frame Buffer Drivers</a></li>
+<li class="toctree-l1"><a class="reference internal" href="lcd.html">LCD Drivers</a></li>
+<li class="toctree-l1"><a class="reference internal" href="mtd.html">Memory Technology Device Drivers</a></li>
+<li class="toctree-l1"><a class="reference internal" href="sdio.html">SDIO Device Drivers</a></li>
+<li class="toctree-l1"><a class="reference internal" href="usbhost.html">USB Host-Side Drivers</a></li>
+<li class="toctree-l1"><a class="reference internal" href="usbdev.html">USB Device-Side Drivers</a></li>
+</ul>
+</div>
+</div>
+
+
+           </div>
+           
+          </div>
+          <footer>
+  
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>
+        
+        &copy; Copyright 2020, The Apache Software Foundation
+
+    </p>
+  </div> 
+
+</footer>
+
+        </div>
+      </div>
+
+    </section>
+
+  </div>
+  
+
+  <script type="text/javascript">
+      jQuery(function () {
+          SphinxRtdTheme.Navigation.enable(true);
+      });
+  </script>
+
+  
+  
+    
+   
+
+</body>
+</html>
\ No newline at end of file
diff --git a/content/docs/latest/components/drivers/special/lcd.html b/content/docs/latest/components/drivers/special/lcd.html
new file mode 100644
index 0000000..624d2c7
--- /dev/null
+++ b/content/docs/latest/components/drivers/special/lcd.html
@@ -0,0 +1,310 @@
+<!--
+ Documentation/_templates/layout.html
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements.  See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.  The
+ ASF licenses this file to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance with the
+ License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ License for the specific language governing permissions and limitations
+ under the License.
+-->
+
+
+
+<!DOCTYPE html>
+<html class="writer-html5" lang="en" >
+<head>
+  <meta charset="utf-8">
+  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  
+  <title>LCD Drivers &mdash; NuttX latest documentation</title>
+  
+
+  
+  <link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
+  <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
+  <link rel="stylesheet" href="../../../_static/custom.css" type="text/css" />
+
+  
+  
+    <link rel="shortcut icon" href="../../../_static/favicon.ico"/>
+  
+  
+  
+
+  
+  <!--[if lt IE 9]>
+    <script src="../../../_static/js/html5shiv.min.js"></script>
+  <![endif]-->
+  
+    
+      <script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
+        <script src="../../../_static/jquery.js"></script>
+        <script src="../../../_static/underscore.js"></script>
+        <script src="../../../_static/doctools.js"></script>
+        <script src="../../../_static/language_data.js"></script>
+    
+    <script type="text/javascript" src="../../../_static/js/theme.js"></script>
+
+    
+    <link rel="index" title="Index" href="../../../genindex.html" />
+    <link rel="search" title="Search" href="../../../search.html" />
+    <link rel="next" title="Memory Technology Device Drivers" href="mtd.html" />
+    <link rel="prev" title="Frame Buffer Drivers" href="framebuffer.html" /> 
+</head>
+
+<body class="wy-body-for-nav">
+
+   
+  <div class="wy-grid-for-nav">
+    
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
+          
+  
+    <a href="../../../index.html" class="icon icon-home"> NuttX
+  
+
+  
+    
+    <img src="../../../_static/NuttX.png" class="logo" alt="Logo"/>
+  
+  </a>
+  
+  <!-- this version selector is quite ugly, should be probably replaced by something
+       more modern -->
+       
+  <div class="version-selector">
+    <select>
+    
+      <option value="latest" selected="selected">latest</option>
+    
+    </select>
+  </div>
+  
+  
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+
+        </div>
+
+        
+        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
+          
+            
+            
+              
+            
+            
+              <p class="caption"><span class="caption-text">Table of Contents</span></p>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="../../../index.html">Home</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../introduction/index.html">Introduction</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../introduction/inviolables.html">The Inviolable Principles of NuttX</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../quickstart/index.html">Getting Started</a></li>
+<li class="toctree-l1 current"><a class="reference internal" href="../../index.html">OS Components</a><ul class="current">
+<li class="toctree-l2"><a class="reference internal" href="../../nsh/index.html">NuttShell (NSH)</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../power.html">Power Management</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../socketcan.html">SocketCAN Device Drivers</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../syslog.html">SYSLOG</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../binfmt.html">Binary Loader</a></li>
+<li class="toctree-l2 current"><a class="reference internal" href="../index.html">Device Drivers</a><ul class="current">
+<li class="toctree-l3"><a class="reference internal" href="../character/index.html">Character Device Drivers</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../block/index.html">Block Device Drivers</a></li>
+<li class="toctree-l3 current"><a class="reference internal" href="index.html">Specialized Device Drivers</a><ul class="current">
+<li class="toctree-l4"><a class="reference internal" href="spi.html">SPI Device Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="i2c.html">I2C Device Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="ethernet.html">Ethernet Device Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="framebuffer.html">Frame Buffer Drivers</a></li>
+<li class="toctree-l4 current"><a class="current reference internal" href="#">LCD Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="mtd.html">Memory Technology Device Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="sdio.html">SDIO Device Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="usbhost.html">USB Host-Side Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="usbdev.html">USB Device-Side Drivers</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="../index.html#lower-half-and-upper-half">Lower-half and upper-half</a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="../../filesystem.html">NuttX File System</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../nxflat.html">NXFLAT</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../nxgraphics/index.html">NX Graphics Subsystem</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../nxwidgets.html">NxWidgets</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../paging.html">On-Demand Paging</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="../../../applications/index.html">Applications</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../boards/index.html">Supported Boards</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../reference/index.html">API Reference</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../guides/index.html">Guides</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../releases/index.html">Releases</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../contributing/index.html">Contributing</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../glossary.html">Glossary</a></li>
+</ul>
+
+            
+          
+        </div>
+        
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
+
+      
+      <nav class="wy-nav-top" aria-label="top navigation">
+        
+          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+          <a href="../../../index.html">NuttX</a>
+        
+      </nav>
+
+
+      <div class="wy-nav-content">
+        
+        <div class="rst-content">
+        
+          
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<div role="navigation" aria-label="breadcrumbs navigation">
+
+  <ul class="wy-breadcrumbs">
+    
+      <li><a href="../../../index.html" class="icon icon-home"></a> &raquo;</li>
+        
+          <li><a href="../../index.html">OS Components</a> &raquo;</li>
+        
+          <li><a href="../index.html">Device Drivers</a> &raquo;</li>
+        
+          <li><a href="index.html">Specialized Device Drivers</a> &raquo;</li>
+        
+      <li>LCD Drivers</li>
+    
+    
+      <li class="wy-breadcrumbs-aside">
+        
+            
+            <a href="../../../_sources/components/drivers/special/lcd.rst.txt" rel="nofollow"> View page source</a>
+          
+        
+      </li>
+    
+  </ul>
+
+  
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+            
+  <div class="section" id="lcd-drivers">
+<h1>LCD Drivers<a class="headerlink" href="#lcd-drivers" title="Permalink to this headline">¶</a></h1>
+<ul>
+<li><p><code class="docutils literal notranslate"><span class="pre">include/nuttx/lcd/lcd.h</span></code>. Structures and APIs needed to
+work with LCD drivers are provided in this header file. This
+header file also depends on some of the same definitions used
+for the frame buffer driver as provided in
+<code class="docutils literal notranslate"><span class="pre">include/nuttx/video/fb.h</span></code>.</p></li>
+<li><p><code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">lcd_dev_s</span></code>. Each LCD device driver must implement
+an instance of <code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">lcd_dev_s</span></code>. That structure defines a
+call table with the following methods:</p>
+<p>Get information about the LCD video controller configuration
+and the configuration of each LCD color plane.</p>
+<p>The following are provided only if the video hardware supports
+RGB color mapping:</p>
+<p>The following are provided only if the video hardware supports
+a hardware cursor:</p>
+<p>Get the LCD panel power status (0: full off -
+<code class="docutils literal notranslate"><span class="pre">CONFIG_LCD_MAXPOWER</span></code>: full on). On backlit LCDs, this
+setting may correspond to the backlight setting.</p>
+<p>Enable/disable LCD panel power (0: full off -
+<code class="docutils literal notranslate"><span class="pre">CONFIG_LCD_MAXPOWER</span></code>: full on). On backlit LCDs, this
+setting may correspond to the backlight setting.</p>
+<p>Get the current contrast setting (0-CONFIG_LCD_MAXCONTRAST) */</p>
+<p>Set LCD panel contrast (0-CONFIG_LCD_MAXCONTRAST)</p>
+</li>
+<li><p><strong>Binding LCD Drivers</strong>. LCD drivers are not normally directly
+accessed by user code, but are usually bound to another, higher
+level device driver. In general, the binding sequence is:</p>
+<ol class="arabic simple">
+<li><p>Get an instance of <code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">lcd_dev_s</span></code> from the
+hardware-specific LCD device driver, and</p></li>
+<li><p>Provide that instance to the initialization method of the
+higher level device driver.</p></li>
+</ol>
+</li>
+<li><p><strong>Examples</strong>: <code class="docutils literal notranslate"><span class="pre">drivers/lcd/p14201.c</span></code>,
+<code class="docutils literal notranslate"><span class="pre">boards/arm/sam34/sam3u-ek/src/up_lcd.c.</span></code> See also the usage
+of the LCD driver in the <code class="docutils literal notranslate"><span class="pre">graphics/</span></code> directory.</p></li>
+</ul>
+</div>
+
+
+           </div>
+           
+          </div>
+          <footer>
+  
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>
+        
+        &copy; Copyright 2020, The Apache Software Foundation
+
+    </p>
+  </div> 
+
+</footer>
+
+        </div>
+      </div>
+
+    </section>
+
+  </div>
+  
+
+  <script type="text/javascript">
+      jQuery(function () {
+          SphinxRtdTheme.Navigation.enable(true);
+      });
+  </script>
+
+  
+  
+    
+   
+
+</body>
+</html>
\ No newline at end of file
diff --git a/content/docs/latest/components/drivers/special/mtd.html b/content/docs/latest/components/drivers/special/mtd.html
new file mode 100644
index 0000000..c7a4c20
--- /dev/null
+++ b/content/docs/latest/components/drivers/special/mtd.html
@@ -0,0 +1,312 @@
+<!--
+ Documentation/_templates/layout.html
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements.  See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.  The
+ ASF licenses this file to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance with the
+ License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ License for the specific language governing permissions and limitations
+ under the License.
+-->
+
+
+
+<!DOCTYPE html>
+<html class="writer-html5" lang="en" >
+<head>
+  <meta charset="utf-8">
+  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  
+  <title>Memory Technology Device Drivers &mdash; NuttX latest documentation</title>
+  
+
+  
+  <link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
+  <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
+  <link rel="stylesheet" href="../../../_static/custom.css" type="text/css" />
+
+  
+  
+    <link rel="shortcut icon" href="../../../_static/favicon.ico"/>
+  
+  
+  
+
+  
+  <!--[if lt IE 9]>
+    <script src="../../../_static/js/html5shiv.min.js"></script>
+  <![endif]-->
+  
+    
+      <script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
+        <script src="../../../_static/jquery.js"></script>
+        <script src="../../../_static/underscore.js"></script>
+        <script src="../../../_static/doctools.js"></script>
+        <script src="../../../_static/language_data.js"></script>
+    
+    <script type="text/javascript" src="../../../_static/js/theme.js"></script>
+
+    
+    <link rel="index" title="Index" href="../../../genindex.html" />
+    <link rel="search" title="Search" href="../../../search.html" />
+    <link rel="next" title="SDIO Device Drivers" href="sdio.html" />
+    <link rel="prev" title="LCD Drivers" href="lcd.html" /> 
+</head>
+
+<body class="wy-body-for-nav">
+
+   
+  <div class="wy-grid-for-nav">
+    
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
+          
+  
+    <a href="../../../index.html" class="icon icon-home"> NuttX
+  
+
+  
+    
+    <img src="../../../_static/NuttX.png" class="logo" alt="Logo"/>
+  
+  </a>
+  
+  <!-- this version selector is quite ugly, should be probably replaced by something
+       more modern -->
+       
+  <div class="version-selector">
+    <select>
+    
+      <option value="latest" selected="selected">latest</option>
+    
+    </select>
+  </div>
+  
+  
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+
+        </div>
+
+        
+        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
+          
+            
+            
+              
+            
+            
+              <p class="caption"><span class="caption-text">Table of Contents</span></p>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="../../../index.html">Home</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../introduction/index.html">Introduction</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../introduction/inviolables.html">The Inviolable Principles of NuttX</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../quickstart/index.html">Getting Started</a></li>
+<li class="toctree-l1 current"><a class="reference internal" href="../../index.html">OS Components</a><ul class="current">
+<li class="toctree-l2"><a class="reference internal" href="../../nsh/index.html">NuttShell (NSH)</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../power.html">Power Management</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../socketcan.html">SocketCAN Device Drivers</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../syslog.html">SYSLOG</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../binfmt.html">Binary Loader</a></li>
+<li class="toctree-l2 current"><a class="reference internal" href="../index.html">Device Drivers</a><ul class="current">
+<li class="toctree-l3"><a class="reference internal" href="../character/index.html">Character Device Drivers</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../block/index.html">Block Device Drivers</a></li>
+<li class="toctree-l3 current"><a class="reference internal" href="index.html">Specialized Device Drivers</a><ul class="current">
+<li class="toctree-l4"><a class="reference internal" href="spi.html">SPI Device Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="i2c.html">I2C Device Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="ethernet.html">Ethernet Device Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="framebuffer.html">Frame Buffer Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="lcd.html">LCD Drivers</a></li>
+<li class="toctree-l4 current"><a class="current reference internal" href="#">Memory Technology Device Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="sdio.html">SDIO Device Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="usbhost.html">USB Host-Side Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="usbdev.html">USB Device-Side Drivers</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="../index.html#lower-half-and-upper-half">Lower-half and upper-half</a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="../../filesystem.html">NuttX File System</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../nxflat.html">NXFLAT</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../nxgraphics/index.html">NX Graphics Subsystem</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../nxwidgets.html">NxWidgets</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../paging.html">On-Demand Paging</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="../../../applications/index.html">Applications</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../boards/index.html">Supported Boards</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../reference/index.html">API Reference</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../guides/index.html">Guides</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../releases/index.html">Releases</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../contributing/index.html">Contributing</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../glossary.html">Glossary</a></li>
+</ul>
+
+            
+          
+        </div>
+        
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
+
+      
+      <nav class="wy-nav-top" aria-label="top navigation">
+        
+          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+          <a href="../../../index.html">NuttX</a>
+        
+      </nav>
+
+
+      <div class="wy-nav-content">
+        
+        <div class="rst-content">
+        
+          
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<div role="navigation" aria-label="breadcrumbs navigation">
+
+  <ul class="wy-breadcrumbs">
+    
+      <li><a href="../../../index.html" class="icon icon-home"></a> &raquo;</li>
+        
+          <li><a href="../../index.html">OS Components</a> &raquo;</li>
+        
+          <li><a href="../index.html">Device Drivers</a> &raquo;</li>
+        
+          <li><a href="index.html">Specialized Device Drivers</a> &raquo;</li>
+        
+      <li>Memory Technology Device Drivers</li>
+    
+    
+      <li class="wy-breadcrumbs-aside">
+        
+            
+            <a href="../../../_sources/components/drivers/special/mtd.rst.txt" rel="nofollow"> View page source</a>
+          
+        
+      </li>
+    
+  </ul>
+
+  
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+            
+  <div class="section" id="memory-technology-device-drivers">
+<h1>Memory Technology Device Drivers<a class="headerlink" href="#memory-technology-device-drivers" title="Permalink to this headline">¶</a></h1>
+<ul>
+<li><p><code class="docutils literal notranslate"><span class="pre">include/nuttx/mtd/mtd.h</span></code>. All structures and APIs needed
+to work with MTD drivers are provided in this header file.</p></li>
+<li><p><code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">mtd_dev_s</span></code>. Each MTD device driver must implement
+an instance of <code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">mtd_dev_s</span></code>. That structure defines a
+call table with the following methods:</p>
+<p>Erase the specified erase blocks (units are erase blocks):</p>
+<p>Read/write from the specified read/write blocks:</p>
+<p>Some devices may support byte oriented reads (optional). Most
+MTD devices are inherently block oriented so byte-oriented
+accesses are not supported. It is recommended that low-level
+drivers not support read() if it requires buffering.</p>
+<p>Some devices may also support byte oriented writes (optional).
+Most MTD devices are inherently block oriented so byte-oriented
+accesses are not supported. It is recommended that low-level
+drivers not support read() if it requires buffering. This
+interface is only available if <code class="docutils literal notranslate"><span class="pre">CONFIG_MTD_BYTE_WRITE</span></code> is
+defined.</p>
+<p>Support other, less frequently used commands:</p>
+<ul class="simple">
+<li><p><code class="docutils literal notranslate"><span class="pre">MTDIOC_GEOMETRY</span></code>: Get MTD geometry</p></li>
+<li><p><code class="docutils literal notranslate"><span class="pre">MTDIOC_XIPBASE:</span></code>: Convert block to physical address for
+eXecute-In-Place</p></li>
+<li><p><code class="docutils literal notranslate"><span class="pre">MTDIOC_BULKERASE</span></code>: Erase the entire device</p></li>
+</ul>
+<p>is provided via a single <code class="docutils literal notranslate"><span class="pre">ioctl</span></code> method (see
+<code class="docutils literal notranslate"><span class="pre">include/nuttx/fs/ioctl.h</span></code>):</p>
+</li>
+<li><p><strong>Binding MTD Drivers</strong>. MTD drivers are not normally directly
+accessed by user code, but are usually bound to another, higher
+level device driver. In general, the binding sequence is:</p>
+<ol class="arabic simple">
+<li><p>Get an instance of <code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">mtd_dev_s</span></code> from the
+hardware-specific MTD device driver, and</p></li>
+<li><p>Provide that instance to the initialization method of the
+higher level device driver.</p></li>
+</ol>
+</li>
+<li><p><strong>Examples</strong>: <code class="docutils literal notranslate"><span class="pre">drivers/mtd/m25px.c</span></code> and <code class="docutils literal notranslate"><span class="pre">drivers/mtd/ftl.c</span></code></p></li>
+</ul>
+</div>
+
+
+           </div>
+           
+          </div>
+          <footer>
+  
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>
+        
+        &copy; Copyright 2020, The Apache Software Foundation
+
+    </p>
+  </div> 
+
+</footer>
+
+        </div>
+      </div>
+
+    </section>
+
+  </div>
+  
+
+  <script type="text/javascript">
+      jQuery(function () {
+          SphinxRtdTheme.Navigation.enable(true);
+      });
+  </script>
+
+  
+  
+    
+   
+
+</body>
+</html>
\ No newline at end of file
diff --git a/content/docs/latest/components/drivers/special/sdio.html b/content/docs/latest/components/drivers/special/sdio.html
new file mode 100644
index 0000000..65553ef
--- /dev/null
+++ b/content/docs/latest/components/drivers/special/sdio.html
@@ -0,0 +1,298 @@
+<!--
+ Documentation/_templates/layout.html
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements.  See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.  The
+ ASF licenses this file to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance with the
+ License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ License for the specific language governing permissions and limitations
+ under the License.
+-->
+
+
+
+<!DOCTYPE html>
+<html class="writer-html5" lang="en" >
+<head>
+  <meta charset="utf-8">
+  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  
+  <title>SDIO Device Drivers &mdash; NuttX latest documentation</title>
+  
+
+  
+  <link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
+  <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
+  <link rel="stylesheet" href="../../../_static/custom.css" type="text/css" />
+
+  
+  
+    <link rel="shortcut icon" href="../../../_static/favicon.ico"/>
+  
+  
+  
+
+  
+  <!--[if lt IE 9]>
+    <script src="../../../_static/js/html5shiv.min.js"></script>
+  <![endif]-->
+  
+    
+      <script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
+        <script src="../../../_static/jquery.js"></script>
+        <script src="../../../_static/underscore.js"></script>
+        <script src="../../../_static/doctools.js"></script>
+        <script src="../../../_static/language_data.js"></script>
+    
+    <script type="text/javascript" src="../../../_static/js/theme.js"></script>
+
+    
+    <link rel="index" title="Index" href="../../../genindex.html" />
+    <link rel="search" title="Search" href="../../../search.html" />
+    <link rel="next" title="USB Host-Side Drivers" href="usbhost.html" />
+    <link rel="prev" title="Memory Technology Device Drivers" href="mtd.html" /> 
+</head>
+
+<body class="wy-body-for-nav">
+
+   
+  <div class="wy-grid-for-nav">
+    
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
+          
+  
+    <a href="../../../index.html" class="icon icon-home"> NuttX
+  
+
+  
+    
+    <img src="../../../_static/NuttX.png" class="logo" alt="Logo"/>
+  
+  </a>
+  
+  <!-- this version selector is quite ugly, should be probably replaced by something
+       more modern -->
+       
+  <div class="version-selector">
+    <select>
+    
+      <option value="latest" selected="selected">latest</option>
+    
+    </select>
+  </div>
+  
+  
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+
+        </div>
+
+        
+        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
+          
+            
+            
+              
+            
+            
+              <p class="caption"><span class="caption-text">Table of Contents</span></p>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="../../../index.html">Home</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../introduction/index.html">Introduction</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../introduction/inviolables.html">The Inviolable Principles of NuttX</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../quickstart/index.html">Getting Started</a></li>
+<li class="toctree-l1 current"><a class="reference internal" href="../../index.html">OS Components</a><ul class="current">
+<li class="toctree-l2"><a class="reference internal" href="../../nsh/index.html">NuttShell (NSH)</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../power.html">Power Management</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../socketcan.html">SocketCAN Device Drivers</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../syslog.html">SYSLOG</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../binfmt.html">Binary Loader</a></li>
+<li class="toctree-l2 current"><a class="reference internal" href="../index.html">Device Drivers</a><ul class="current">
+<li class="toctree-l3"><a class="reference internal" href="../character/index.html">Character Device Drivers</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../block/index.html">Block Device Drivers</a></li>
+<li class="toctree-l3 current"><a class="reference internal" href="index.html">Specialized Device Drivers</a><ul class="current">
+<li class="toctree-l4"><a class="reference internal" href="spi.html">SPI Device Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="i2c.html">I2C Device Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="ethernet.html">Ethernet Device Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="framebuffer.html">Frame Buffer Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="lcd.html">LCD Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="mtd.html">Memory Technology Device Drivers</a></li>
+<li class="toctree-l4 current"><a class="current reference internal" href="#">SDIO Device Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="usbhost.html">USB Host-Side Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="usbdev.html">USB Device-Side Drivers</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="../index.html#lower-half-and-upper-half">Lower-half and upper-half</a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="../../filesystem.html">NuttX File System</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../nxflat.html">NXFLAT</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../nxgraphics/index.html">NX Graphics Subsystem</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../nxwidgets.html">NxWidgets</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../paging.html">On-Demand Paging</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="../../../applications/index.html">Applications</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../boards/index.html">Supported Boards</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../reference/index.html">API Reference</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../guides/index.html">Guides</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../releases/index.html">Releases</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../contributing/index.html">Contributing</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../glossary.html">Glossary</a></li>
+</ul>
+
+            
+          
+        </div>
+        
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
+
+      
+      <nav class="wy-nav-top" aria-label="top navigation">
+        
+          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+          <a href="../../../index.html">NuttX</a>
+        
+      </nav>
+
+
+      <div class="wy-nav-content">
+        
+        <div class="rst-content">
+        
+          
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<div role="navigation" aria-label="breadcrumbs navigation">
+
+  <ul class="wy-breadcrumbs">
+    
+      <li><a href="../../../index.html" class="icon icon-home"></a> &raquo;</li>
+        
+          <li><a href="../../index.html">OS Components</a> &raquo;</li>
+        
+          <li><a href="../index.html">Device Drivers</a> &raquo;</li>
+        
+          <li><a href="index.html">Specialized Device Drivers</a> &raquo;</li>
+        
+      <li>SDIO Device Drivers</li>
+    
+    
+      <li class="wy-breadcrumbs-aside">
+        
+            
+            <a href="../../../_sources/components/drivers/special/sdio.rst.txt" rel="nofollow"> View page source</a>
+          
+        
+      </li>
+    
+  </ul>
+
+  
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+            
+  <div class="section" id="sdio-device-drivers">
+<h1>SDIO Device Drivers<a class="headerlink" href="#sdio-device-drivers" title="Permalink to this headline">¶</a></h1>
+<ul>
+<li><p><code class="docutils literal notranslate"><span class="pre">include/nuttx/sdio.h</span></code>. All structures and APIs needed to
+work with SDIO drivers are provided in this header file.</p></li>
+<li><p><code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">sdio_dev_s</span></code>. Each SDIO device driver must
+implement an instance of <code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">sdio_dev_s</span></code>. That structure
+defines a call table with the following methods:</p>
+<p>Mutual exclusion:</p>
+<p>Initialization/setup:</p>
+<p>Command/Status/Data Transfer:</p>
+<p>Event/Callback support:</p>
+<p>DMA support:</p>
+</li>
+<li><p><strong>Binding SDIO Drivers</strong>. SDIO drivers are not normally
+directly accessed by user code, but are usually bound to
+another, higher level device driver. In general, the binding
+sequence is:</p>
+<ol class="arabic simple">
+<li><p>Get an instance of <code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">sdio_dev_s</span></code> from the
+hardware-specific SDIO device driver, and</p></li>
+<li><p>Provide that instance to the initialization method of the
+higher level device driver.</p></li>
+</ol>
+</li>
+<li><p><strong>Examples</strong>: <code class="docutils literal notranslate"><span class="pre">arch/arm/src/stm32/stm32_sdio.c</span></code> and
+<code class="docutils literal notranslate"><span class="pre">drivers/mmcsd/mmcsd_sdio.c</span></code></p></li>
+</ul>
+</div>
+
+
+           </div>
+           
+          </div>
+          <footer>
+  
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>
+        
+        &copy; Copyright 2020, The Apache Software Foundation
+
+    </p>
+  </div> 
+
+</footer>
+
+        </div>
+      </div>
+
+    </section>
+
+  </div>
+  
+
+  <script type="text/javascript">
+      jQuery(function () {
+          SphinxRtdTheme.Navigation.enable(true);
+      });
+  </script>
+
+  
+  
+    
+   
+
+</body>
+</html>
\ No newline at end of file
diff --git a/content/docs/latest/components/drivers/special/spi.html b/content/docs/latest/components/drivers/special/spi.html
new file mode 100644
index 0000000..725e98a
--- /dev/null
+++ b/content/docs/latest/components/drivers/special/spi.html
@@ -0,0 +1,294 @@
+<!--
+ Documentation/_templates/layout.html
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements.  See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.  The
+ ASF licenses this file to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance with the
+ License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ License for the specific language governing permissions and limitations
+ under the License.
+-->
+
+
+
+<!DOCTYPE html>
+<html class="writer-html5" lang="en" >
+<head>
+  <meta charset="utf-8">
+  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  
+  <title>SPI Device Drivers &mdash; NuttX latest documentation</title>
+  
+
+  
+  <link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
+  <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
+  <link rel="stylesheet" href="../../../_static/custom.css" type="text/css" />
+
+  
+  
+    <link rel="shortcut icon" href="../../../_static/favicon.ico"/>
+  
+  
+  
+
+  
+  <!--[if lt IE 9]>
+    <script src="../../../_static/js/html5shiv.min.js"></script>
+  <![endif]-->
+  
+    
+      <script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
+        <script src="../../../_static/jquery.js"></script>
+        <script src="../../../_static/underscore.js"></script>
+        <script src="../../../_static/doctools.js"></script>
+        <script src="../../../_static/language_data.js"></script>
+    
+    <script type="text/javascript" src="../../../_static/js/theme.js"></script>
+
+    
+    <link rel="index" title="Index" href="../../../genindex.html" />
+    <link rel="search" title="Search" href="../../../search.html" />
+    <link rel="next" title="I2C Device Drivers" href="i2c.html" />
+    <link rel="prev" title="Specialized Device Drivers" href="index.html" /> 
+</head>
+
+<body class="wy-body-for-nav">
+
+   
+  <div class="wy-grid-for-nav">
+    
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
+          
+  
+    <a href="../../../index.html" class="icon icon-home"> NuttX
+  
+
+  
+    
+    <img src="../../../_static/NuttX.png" class="logo" alt="Logo"/>
+  
+  </a>
+  
+  <!-- this version selector is quite ugly, should be probably replaced by something
+       more modern -->
+       
+  <div class="version-selector">
+    <select>
+    
+      <option value="latest" selected="selected">latest</option>
+    
+    </select>
+  </div>
+  
+  
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+
+        </div>
+
+        
+        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
+          
+            
+            
+              
+            
+            
+              <p class="caption"><span class="caption-text">Table of Contents</span></p>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="../../../index.html">Home</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../introduction/index.html">Introduction</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../introduction/inviolables.html">The Inviolable Principles of NuttX</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../quickstart/index.html">Getting Started</a></li>
+<li class="toctree-l1 current"><a class="reference internal" href="../../index.html">OS Components</a><ul class="current">
+<li class="toctree-l2"><a class="reference internal" href="../../nsh/index.html">NuttShell (NSH)</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../power.html">Power Management</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../socketcan.html">SocketCAN Device Drivers</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../syslog.html">SYSLOG</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../binfmt.html">Binary Loader</a></li>
+<li class="toctree-l2 current"><a class="reference internal" href="../index.html">Device Drivers</a><ul class="current">
+<li class="toctree-l3"><a class="reference internal" href="../character/index.html">Character Device Drivers</a></li>
+<li class="toctree-l3"><a class="reference internal" href="../block/index.html">Block Device Drivers</a></li>
+<li class="toctree-l3 current"><a class="reference internal" href="index.html">Specialized Device Drivers</a><ul class="current">
+<li class="toctree-l4 current"><a class="current reference internal" href="#">SPI Device Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="i2c.html">I2C Device Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="ethernet.html">Ethernet Device Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="framebuffer.html">Frame Buffer Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="lcd.html">LCD Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="mtd.html">Memory Technology Device Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="sdio.html">SDIO Device Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="usbhost.html">USB Host-Side Drivers</a></li>
+<li class="toctree-l4"><a class="reference internal" href="usbdev.html">USB Device-Side Drivers</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="../index.html#lower-half-and-upper-half">Lower-half and upper-half</a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="../../filesystem.html">NuttX File System</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../nxflat.html">NXFLAT</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../nxgraphics/index.html">NX Graphics Subsystem</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../nxwidgets.html">NxWidgets</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../../paging.html">On-Demand Paging</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="../../../applications/index.html">Applications</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../boards/index.html">Supported Boards</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../reference/index.html">API Reference</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../guides/index.html">Guides</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../releases/index.html">Releases</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../contributing/index.html">Contributing</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../glossary.html">Glossary</a></li>
+</ul>
+
+            
+          
+        </div>
+        
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
+
+      
+      <nav class="wy-nav-top" aria-label="top navigation">
+        
+          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+          <a href="../../../index.html">NuttX</a>
+        
+      </nav>
+
+
+      <div class="wy-nav-content">
+        
+        <div class="rst-content">
+        
+          
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<div role="navigation" aria-label="breadcrumbs navigation">
+
+  <ul class="wy-breadcrumbs">
+    
+      <li><a href="../../../index.html" class="icon icon-home"></a> &raquo;</li>
+        
+          <li><a href="../../index.html">OS Components</a> &raquo;</li>
+        
+          <li><a href="../index.html">Device Drivers</a> &raquo;</li>
+        
+          <li><a href="index.html">Specialized Device Drivers</a> &raquo;</li>
+        
+      <li>SPI Device Drivers</li>
+    
+    
+      <li class="wy-breadcrumbs-aside">
+        
+            
+            <a href="../../../_sources/components/drivers/special/spi.rst.txt" rel="nofollow"> View page source</a>
+          
+        
+      </li>
+    
+  </ul>
+
+  
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+            
+  <div class="section" id="spi-device-drivers">
+<h1>SPI Device Drivers<a class="headerlink" href="#spi-device-drivers" title="Permalink to this headline">¶</a></h1>
+<ul class="simple">
+<li><p><code class="docutils literal notranslate"><span class="pre">include/nuttx/spi/spi.h</span></code>. All structures and APIs needed
+to work with SPI drivers are provided in this header file.</p></li>
+<li><p><code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">spi_ops_s</span></code>. Each SPI device driver must implement
+an instance of <code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">spi_ops_s</span></code>. That structure defines a
+call table with the following methods:</p></li>
+<li><p><strong>Binding SPI Drivers</strong>. SPI drivers are not normally directly
+accessed by user code, but are usually bound to another, higher
+level device driver. See for example,
+<code class="docutils literal notranslate"><span class="pre">int</span> <span class="pre">mmcsd_spislotinitialize(int</span> <span class="pre">minor,</span> <span class="pre">int</span> <span class="pre">slotno,</span> <span class="pre">FAR</span> <span class="pre">struct</span> <span class="pre">spi_dev_s</span> <span class="pre">*spi)</span></code>
+in <code class="docutils literal notranslate"><span class="pre">drivers/mmcsd/mmcsd_spi.c</span></code>. In general, the binding
+sequence is:</p>
+<ol class="arabic simple">
+<li><p>Get an instance of <code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">spi_dev_s</span></code> from the
+hardware-specific SPI device driver, and</p></li>
+<li><p>Provide that instance to the initialization method of the
+higher level device driver.</p></li>
+</ol>
+</li>
+<li><p><strong>Examples</strong>: <code class="docutils literal notranslate"><span class="pre">drivers/loop.c</span></code>,
+<code class="docutils literal notranslate"><span class="pre">drivers/mmcsd/mmcsd_spi.c</span></code>, <code class="docutils literal notranslate"><span class="pre">drivers/ramdisk.c</span></code>, etc.</p></li>
+</ul>
+</div>
+
+
+           </div>
+           
+          </div>
+          <footer>
+  
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>
+        
+        &copy; Copyright 2020, The Apache Software Foundation
+
+    </p>
+  </div> 
+
+</footer>
+
+        </div>
+      </div>
+
+    </section>
+
+  </div>
+  
+
+  <script type="text/javascript">
+      jQuery(function () {
+          SphinxRtdTheme.Navigation.enable(true);
+      });
+  </script>
+
+  
+  
+    
+   
+
+</body>
+</html>
\ No newline at end of file
diff --git a/content/docs/latest/components/drivers/special/usbdev.html b/content/docs/latest/components/drivers/special/usbdev.html
new file mode 100644
index 0000000..1eea533
--- /dev/null
+++ b/content/docs/latest/components/drivers/special/usbdev.html
@@ -0,0 +1,316 @@
+<!--
+ Documentation/_templates/layout.html
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements.  See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.  The
+ ASF licenses this file to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance with the
+ License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+ License for the specific language governing permissions and limitations
+ under the License.
+-->
+
+
+
+<!DOCTYPE html>
+<html class="writer-html5" lang="en" >
+<head>
+  <meta charset="utf-8">
+  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  
+  <title>USB Device-Side Drivers &mdash; NuttX latest documentation</title>
+  
+
+  
+  <link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
+  <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
+  <link rel="stylesheet" href="../../../_static/custom.css" type="text/css" />
+
+  
+  
+    <link rel="shortcut icon" href="../../../_static/favicon.ico"/>
+  
+  
+  
+
+  
+  <!--[if lt IE 9]>
+    <script src="../../../_static/js/html5shiv.min.js"></script>
+  <![endif]-->
+  
+    
+      <script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
+        <script src="../../../_static/jquery.js"></script>
+        <script src="../../../_static/underscore.js"></script>
+        <script src="../../../_static/doctools.js"></script>
+        <script src="../../../_static/language_data.js"></script>
+    
+    <script type="text/javascript" src="../../../_static/js/theme.js"></script>
+
+    
+    <link rel="index" title="Index" href="../../../genindex.html" />
+    <link rel="search" title="Search" href="../../../search.html" />
+    <link rel="next" title="NuttX File System" href="../../filesystem.html" />
+    <link rel="prev" title="USB Host-Side Drivers" href="usbhost.html" /> 
+</head>
+
+<body class="wy-body-for-nav">
+
+   
+  <div class="wy-grid-for-nav">
+    
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search" >
+          
+  
+    <a href="../../../index.html" class="icon icon-home"> NuttX
+  
+
+  
+    
+    <img src="../../../_static/NuttX.png" class="logo" alt="Logo"/>
+  
+  </a>
+  
+  <!-- this version selector is quite ugly, should be probably replaced by something
+       more modern -->
+       
+  <div class="version-selector">
+    <select>
... 1211 lines suppressed ...