Skip to content

Latest commit

 

History

History
2836 lines (1998 loc) · 67.6 KB

api.rst

File metadata and controls

2836 lines (1998 loc) · 67.6 KB

API Reference

Modules

.. autosummary::
   :template: autosummary/module.rst
   :toctree: _autosummary
   :recursive:

   verylittlewire

USB Control Transfers

The Little Wire USB device firmware version 1.2 supports the following Control Transfer sequences. In the Setup Packet of the Setup Stage only the bmRequestType = 0xC0 will be accepted. That means:

D7 Data Phase Transfer Direction:1 = Device to Host
D6…5 Type:2 = Vendor
D4…0 Recipient:0 = Device

The number of bytes to transfer have to be constant wLength = 8 for each Setup Packet. That means that each Setup Stage follows a Data Stage.

USB Control Transfer Requests Overview

.. flat-table:: Little Wire Firmware all well known Control Transfer Requests
   :header-rows: 2
   :stub-columns: 1
   :widths: 1 7 1 1
   :name: lwfw12-usbctr-overview

   * - :cspan:`1` `Setup Packet`_
     - :rspan:`1` Functional Classification
     - :rspan:`1` Firmware Status
   * - :code:`bRequest`
     - Name

   * - :ref:`|UCTR_ECHO|`
     - |ENUM_ECHO|
     - :rspan:`4` :cspan:`1` |UCTR_USBTINY|
   * - :ref:`|UCTR_READ|`
     - |ENUM_READ|
   * - :ref:`|UCTR_WRITE|`
     - |ENUM_WRITE|
   * - :ref:`|UCTR_CLR|`
     - |ENUM_CLR|
   * - :ref:`|UCTR_SET|`
     - |ENUM_SET|

   * - :ref:`|UCTR_POWERUP|`
     - |ENUM_POWERUP|
     - :rspan:`7` :cspan:`1` |UCTR_USBTINY_ISPSPI|
   * - :ref:`|UCTR_POWERDOWN|`
     - |ENUM_POWERDOWN|
   * - :ref:`|UCTR_SPI|`
     - |ENUM_SPI|
   * - :ref:`|UCTR_POLL_BYTES|`
     - |ENUM_POLL_BYTES|
   * - :ref:`|UCTR_FLASH_READ|`
     - |ENUM_FLASH_READ|
   * - :ref:`|UCTR_FLASH_WRITE|`
     - |ENUM_FLASH_WRITE|
   * - :ref:`|UCTR_EEPROM_READ|`
     - |ENUM_EEPROM_READ|
   * - :ref:`|UCTR_EEPROM_WRITE|`
     - |ENUM_EEPROM_WRITE|

   * - :ref:`|UCTR_PIN_SET_INPUT|`
     - |ENUM_PIN_SET_INPUT|
     - :rspan:`1` |UCTR_LWFW_GPIO|
     - |STATE_PIN_SET_INPUT|
   * - :ref:`|UCTR_PIN_SET_OUTPUT|`
     - |ENUM_PIN_SET_OUTPUT|
     - |STATE_PIN_SET_OUTPUT|

   * - :ref:`|UCTR_READ_ADC|`
     - |ENUM_READ_ADC|
     - |UCTR_LWFW_ADC|
     - |STATE_READ_ADC|

   * - :ref:`|UCTR_SETUP_PWM|`
     - |ENUM_SETUP_PWM|
     - :rspan:`1` |UCTR_LWFW_PWM|
     - |STATE_SETUP_PWM|
   * - :ref:`|UCTR_UPDATE_PWM_COMPARE|`
     - |ENUM_UPDATE_PWM_COMPARE|
     - |STATE_UPDATE_PWM_COMPARE|

   * - :ref:`|UCTR_PIN_SET_HIGH|`
     - |ENUM_PIN_SET_HIGH|
     - :rspan:`2` |UCTR_LWFW_GPIO|
     - |STATE_PIN_SET_HIGH|
   * - :ref:`|UCTR_PIN_SET_LOW|`
     - |ENUM_PIN_SET_LOW|
     - |STATE_PIN_SET_LOW|
   * - :ref:`|UCTR_PIN_READ|`
     - |ENUM_PIN_READ|
     - |STATE_PIN_READ|

   * - :ref:`|UCTR_SINGLE_SPI|`
     - |ENUM_SINGLE_SPI|
     - |UCTR_LWFW_SPI|
     - |STATE_SINGLE_SPI|

   * - :ref:`|UCTR_CHANGE_PWM_PRESCALE|`
     - |ENUM_CHANGE_PWM_PRESCALE|
     - |UCTR_LWFW_PWM|
     - |STATE_CHANGE_PWM_PRESCALE|

   * - :ref:`|UCTR_SETUP_SPI|`
     - |ENUM_SETUP_SPI|
     - |UCTR_LWFW_SPI|
     - |STATE_SETUP_SPI|

   * - :ref:`|UCTR_SETUP_I2C|`
     - |ENUM_SETUP_I2C|
     - :rspan:`3` |UCTR_LWFW_I2C|
     - |STATE_SETUP_I2C|
   * - :ref:`|UCTR_I2C_BEGIN_TX|`
     - |ENUM_I2C_BEGIN_TX|
     - |STATE_I2C_BEGIN_TX|
   * - :ref:`|UCTR_I2C_ADD_BUFFER|`
     - |ENUM_I2C_ADD_BUFFER|
     - |STATE_I2C_ADD_BUFFER|
   * - :ref:`|UCTR_I2C_SEND_BUFFER|`
     - |ENUM_I2C_SEND_BUFFER|
     - |STATE_I2C_SEND_BUFFER|

   * - :ref:`|UCTR_SPI_ADD_BUFFER|`
     - |ENUM_SPI_ADD_BUFFER|
     - :rspan:`1` |UCTR_LWFW_SPI|
     - |STATE_SPI_ADD_BUFFER|
   * - :ref:`|UCTR_SPI_SEND_BUFFER|`
     - |ENUM_SPI_SEND_BUFFER|
     - |STATE_SPI_SEND_BUFFER|

   * - :ref:`|UCTR_I2C_REQUEST_FROM|`
     - |ENUM_I2C_REQUEST_FROM|
     - |UCTR_LWFW_I2C|
     - |STATE_I2C_REQUEST_FROM|

   * - :ref:`|UCTR_SPI_UPDATE_DELAY|`
     - |ENUM_SPI_UPDATE_DELAY|
     - |UCTR_LWFW_SPI|
     - |STATE_SPI_UPDATE_DELAY|

   * - :ref:`|UCTR_STOP_PWM|`
     - |ENUM_STOP_PWM|
     - |UCTR_LWFW_PWM|
     - |STATE_STOP_PWM|

   * - :ref:`|UCTR_DEBUG_SPI|`
     - |ENUM_DEBUG_SPI|
     - |UCTR_LWFW_SPI|
     - |STATE_DEBUG_SPI|

   * - :ref:`|UCTR_VERSION_QUERY|`
     - |ENUM_VERSION_QUERY|
     - |UCTR_LWFW|
     - |STATE_VERSION_QUERY|

   * - :ref:`|UCTR_SETUP_ADC|`
     - |ENUM_SETUP_ADC|
     - |UCTR_LWFW_ADC|
     - |STATE_SETUP_ADC|

   * - 36
     - :rspan:`3` :cspan:`2` **GAP** – spare Control Transfer Requests –
   * - 37
   * - 38
   * - 39

   * - :ref:`|UCTR_READ_RESULT|`
     - |ENUM_READ_RESULT|
     - |UCTR_LWFW|
     - |STATE_READ_RESULT|

   * - :ref:`|UCTR_OW_RESET_PULSE|`
     - |ENUM_OW_RESET_PULSE|
     - :rspan:`2` |UCTR_LWFW_OW|
     - |STATE_OW_RESET_PULSE|
   * - :ref:`|UCTR_OW_WRITE_BYTE|`
     - |ENUM_OW_WRITE_BYTE|
     - |STATE_OW_WRITE_BYTE|
   * - :ref:`|UCTR_OW_READ_BYTE|`
     - |ENUM_OW_READ_BYTE|
     - |STATE_OW_READ_BYTE|

   * - :ref:`|UCTR_I2C_INIT|`
     - |ENUM_I2C_INIT|
     - :rspan:`2` |UCTR_LWFW_I2C|
     - |STATE_I2C_INIT|
   * - :ref:`|UCTR_I2C_START|`
     - |ENUM_I2C_START|
     - |STATE_I2C_START|
   * - :ref:`|UCTR_I2C_READ|`
     - |ENUM_I2C_READ|
     - |STATE_I2C_READ|

   * - :ref:`|UCTR_SOFT_PWM_INIT|`
     - |ENUM_SOFT_PWM_INIT|
     - :rspan:`1` |UCTR_LWFW_SOFT_PWM|
     - |STATE_SOFT_PWM_INIT|
   * - :ref:`|UCTR_SOFT_PWM_UPDATE|`
     - |ENUM_SOFT_PWM_UPDATE|
     - |STATE_SOFT_PWM_UPDATE|

   * - :ref:`|UCTR_I2C_UPDATE_DELAY|`
     - |ENUM_I2C_UPDATE_DELAY|
     - |UCTR_LWFW_I2C|
     - |STATE_I2C_UPDATE_DELAY|

   * - :ref:`|UCTR_OW_READ_BIT|`
     - |ENUM_OW_READ_BIT|
     - :rspan:`1` |UCTR_LWFW_OW|
     - |STATE_OW_READ_BIT|
   * - :ref:`|UCTR_OW_WRITE_BIT|`
     - |ENUM_OW_WRITE_BIT|
     - |STATE_OW_WRITE_BIT|

   * - :ref:`|UCTR_PIC24F_PROG|`
     - |ENUM_PIC24F_PROG|
     - :rspan:`1` |UCTR_LWFW_EXP|
     - |STATE_PIC24F_PROG|
   * - :ref:`|UCTR_PIC24F_SENDSIX|`
     - |ENUM_PIC24F_SENDSIX|
     - |STATE_PIC24F_SENDSIX|

   * - :ref:`|UCTR_WS2812_EXEC|`
     - |ENUM_WS2812_EXEC|
     - |UCTR_LWFW_WS2812|
     - |STATE_WS2812_EXEC|

   * - :ref:`|UCTR_SERNUM_CHANGE|`
     - |ENUM_SERNUM_CHANGE|
     - |UCTR_LWFW|
     - |STATE_SERNUM_CHANGE|

   * - 56
     - :rspan:`3` :cspan:`2` **GAP** – spare Control Transfer Requests –
   * - 57
   * - 58
   * - … … …

   * - :ref:`|UCTR_PIC24F_TRANSFER|`
     - |ENUM_PIC24F_TRANSFER|
     - |UCTR_LWFW_EXP|
     - |STATE_PIC24F_TRANSFER|

   * - :ref:`|UCTR_I2C_TRANSFER|`
     - |ENUM_I2C_TRANSFER|
     - |UCTR_LWFW_I2C|
     - |STATE_I2C_TRANSFER|

   * - :ref:`|UCTR_SPI_TRANSFER|`
     - |ENUM_SPI_TRANSFER|
     - |UCTR_LWFW_SPI|
     - |STATE_SPI_TRANSFER|

USBtiny Generic

.. flat-table:: Little Wire Firmware USBtiny Generic Control Transfer Requests
   :header-rows: 4
   :stub-columns: 2
   :widths: 1 2 2 5
   :name: lwfw12-usbctr-usbtiny

   * - :cspan:`2` `Setup Packet`_
     - :rspan:`2` Description / Notes
   * - :rspan:`1` :code:`bRequest`
     - :cspan:`1` Name
   * - :code:`wValue`
     - :code:`wIndex`
   * - :cspan:`3` Implementation / Interfaces



   * - :rspan:`1`

       .. _|UCTR_ECHO|:

       .. rubric:: |UCTR_ECHO|

     - :cspan:`1` |ENUM_ECHO|
     - :rspan:`1` echo all content in **Data Stage** back to host
   * - .. wValue not used
     - .. wIndex not used
   * - :cspan:`1`
     - .. productionlist:: ECHO
          OUTPUT:
          INPUT:
   * - :cspan:`1` Implementation
     - .. rubric:: |LWFW|

       * |LWFW_ECHO| – :code:`bRequest` changed hard to :code:`0x21` in response

   * - :cspan:`1` Interfaces
     - .. rubric:: |CAPI|

       * |CAPI_ECHO|

       .. rubric:: |PYAPI|

       * |PYAPI_ECHO|



   * - :rspan:`1`

       .. _|UCTR_READ|:

       .. rubric:: |UCTR_READ|

     - :cspan:`1` |ENUM_READ|
     - :rspan:`1` read :token:`READ:value` from memory :token:`READ:address`
   * - .. wValue not used
     - :token:`READ:address`
   * - :cspan:`1`
     - .. productionlist:: READ
          OUTPUT: `value`
          INPUT: `address`
          value: (uint8)0…0xFF
          address: (uint16)0…0xFFFF
   * - :cspan:`1` Implementation
     - .. rubric:: |LWFW|

       * |LWFW_READ| – ignores :token:`READ:address`, uses the I/O port instead

   * - :cspan:`1` Interfaces
     - .. rubric:: |CAPI|

       * |CAPI_READ|

       .. rubric:: |PYAPI|

       * |PYAPI_READ|



   * - :rspan:`1`

       .. _|UCTR_WRITE|:

       .. rubric:: |UCTR_WRITE|

     - :cspan:`1` |ENUM_WRITE|
     - :rspan:`1` write :token:`WRITE:value` to memory :token:`WRITE:address`
   * - :token:`WRITE:value`
     - :token:`WRITE:address`
   * - :cspan:`1`
     - .. productionlist:: WRITE
          OUTPUT:
          INPUT: `address` & `value`
          value: (uint8)0…0xFF
          address: (uint16)0…0xFFFF
   * - :cspan:`1` Implementation
     - .. rubric:: |LWFW|

       * |LWFW_WRITE| – ignores :token:`WRITE:address`, uses the I/O port instead

   * - :cspan:`1` Interfaces
     - .. rubric:: |CAPI|

       * |CAPI_WRITE|

       .. rubric:: |PYAPI|

       * |PYAPI_WRITE|



   * - :rspan:`1`

       .. _|UCTR_CLR|:

       .. rubric:: |UCTR_CLR|

     - :cspan:`1` |ENUM_CLR|
     - :rspan:`1` clear bit :token:`CLR:bitno` on memory :token:`CLR:address`
   * - :token:`CLR:bitno`
     - :token:`CLR:address`
   * - :cspan:`1`
     - .. productionlist:: CLR
          OUTPUT:
          INPUT: `address` & `bitno`
          bitno: (uint8)0…7
          address: (uint16)0…0xFFFF
   * - :cspan:`1` Implementation
     - .. rubric:: |LWFW|

       * |LWFW_CLR| – ignores :token:`CLR:address`, uses the I/O port instead

   * - :cspan:`1` Interfaces
     - .. rubric:: |CAPI|

       * |CAPI_CLR|

       .. rubric:: |PYAPI|

       * |PYAPI_CLR|



   * - :rspan:`1`

       .. _|UCTR_SET|:

       .. rubric:: |UCTR_SET|

     - :cspan:`1` |ENUM_SET|
     - :rspan:`1` set bit :token:`SET:bitno` on memory :token:`SET:address`
   * - :token:`SET:bitno`
     - :token:`SET:address`
   * - :cspan:`1`
     - .. productionlist:: SET
          OUTPUT:
          INPUT: `address` & `bitno`
          bitno: (uint8)0…7
          address: (uint16)0…0xFFFF
   * - :cspan:`1` Implementation
     - .. rubric:: Firmware

       * |LWFW_SET| – ignores :token:`SET:address`, uses the I/O port instead

   * - :cspan:`1` Interfaces
     - .. rubric:: |CAPI|

       * |CAPI_SET|

       .. rubric:: |PYAPI|

       * |PYAPI_SET|



USBtinyISP/SPI Programming

.. flat-table:: Little Wire Firmware USBtiny Generic Control Transfer Requests
   :header-rows: 4
   :stub-columns: 2
   :widths: 1 2 2 5
   :name: lwfw12-usbctr-usbtiny-isbspi

   * - :cspan:`2` `Setup Packet`_
     - :rspan:`2` Description / Notes
   * - :rspan:`1` :code:`bRequest`
     - :cspan:`1` Name
   * - :code:`wValue`
     - :code:`wIndex`
   * - :cspan:`3` Implementation / Interfaces



   * - :rspan:`1`

       .. _|UCTR_POWERUP|:

       .. rubric:: |UCTR_POWERUP|

     - :cspan:`1` |ENUM_POWERUP|
     - :rspan:`1`
   * - :token:`POWERUP:period`
     - :token:`POWERUP:reset`
   * - :cspan:`1`
     - .. productionlist:: POWERUP
          OUTPUT:
          INPUT: `period` & `reset`
          period:
          reset:
   * - :cspan:`1` Implementation
     - .. rubric:: |LWFW|

       * |LWFW_POWERUP|

       .. rubric:: |AVRD|

       * |AVRD_POWERUP_1|
       * |AVRD_POWERUP_2|

   * - :cspan:`1` Interfaces
     - .. rubric:: |CAPI|

       * |CAPI_POWERUP|

       .. rubric:: |PYAPI|

       * |PYAPI_POWERUP|



   * - :rspan:`1`

       .. _|UCTR_POWERDOWN|:

       .. rubric:: |UCTR_POWERDOWN|

     - :cspan:`1` |ENUM_POWERDOWN|
     - :rspan:`1`
   * - .. wValue not used
     - .. wIndex not used
   * - :cspan:`1`
     - .. productionlist:: POWERDOWN
          OUTPUT:
          INPUT:
   * - :cspan:`1` Implementation
     - .. rubric:: |LWFW|

       * |LWFW_POWERDOWN|

       .. rubric:: |AVRD|

       * |AVRD_POWERDOWN|

   * - :cspan:`1` Interfaces
     - .. rubric:: |CAPI|

       * |CAPI_POWERDOWN|

       .. rubric:: |PYAPI|

       * |PYAPI_POWERDOWN|



   * - :rspan:`1`

       .. _|UCTR_SPI|:

       .. rubric:: |UCTR_SPI|

     - :cspan:`1` |ENUM_SPI|
     - :rspan:`1`
   * - :token:`SPI:c1c0`
     - :token:`SPI:c3c2`
   * - :cspan:`1`
     - .. productionlist:: SPI
          OUTPUT:
          INPUT: `c1c0` & `c3c2`
          c1c0:
          c3c2:
   * - :cspan:`1` Implementation
     - .. rubric:: |LWFW|

       * |LWFW_SPI|

       .. rubric:: |AVRD|

       * |AVRD_SPI_1|
       * |AVRD_SPI_2|
       * |AVRD_SPI_3|
       * |AVRD_SPI_4|
       * |AVRD_SPI_5|
       * |AVRD_SPI_6|

   * - :cspan:`1` Interfaces
     - .. rubric:: |CAPI|

       * |CAPI_SPI|

       .. rubric:: |PYAPI|

       * |PYAPI_SPI|



   * - :rspan:`1`

       .. _|UCTR_POLL_BYTES|:

       .. rubric:: |UCTR_POLL_BYTES|

     - :cspan:`1` |ENUM_POLL_BYTES|
     - :rspan:`1`
   * - :token:`POLL_BYTES:p1p2`
     - .. wIndex not used
   * - :cspan:`1`
     - .. productionlist:: POLL_BYTES
          OUTPUT:
          INPUT: `p1p2`
          p1p2:
   * - :cspan:`1` Implementation
     - .. rubric:: |LWFW|

       * |LWFW_POLL_BYTES|

       .. rubric:: |AVRD|

       * |AVRD_POLL_BYTES|

   * - :cspan:`1` Interfaces
     - .. rubric:: |CAPI|

       * |CAPI_POLL_BYTES|

       .. rubric:: |PYAPI|

       * |PYAPI_POLL_BYTES|



   * - :rspan:`1`

       .. _|UCTR_FLASH_READ|:

       .. rubric:: |UCTR_FLASH_READ|

     - :cspan:`1` |ENUM_FLASH_READ|
     - :rspan:`1`
   * - .. wValue not used
     - :token:`FLASH_READ:address`
   * - :cspan:`1`
     - .. productionlist:: FLASH_READ
          OUTPUT:
          INPUT: `address`
          address:
   * - :cspan:`1` Implementation
     - .. rubric:: |LWFW|

       * |LWFW_FLASH_READ|

       .. rubric:: |AVRD|

       * |AVRD_FLASH_READ|

   * - :cspan:`1` Interfaces
     - .. rubric:: |CAPI|

       * |CAPI_FLASH_READ|

       .. rubric:: |PYAPI|

       * |PYAPI_FLASH_READ|



   * - :rspan:`1`

       .. _|UCTR_FLASH_WRITE|:

       .. rubric:: |UCTR_FLASH_WRITE|

     - :cspan:`1` |ENUM_FLASH_WRITE|
     - :rspan:`1`
   * - :token:`FLASH_WRITE:timeout`
     - :token:`FLASH_WRITE:address`
   * - :cspan:`1`
     - .. productionlist:: FLASH_WRITE
          OUTPUT:
          INPUT: `timeout` & `address`
          timeout:
          address:
   * - :cspan:`1` Implementation
     - .. rubric:: |LWFW|

       * |LWFW_FLASH_WRITE|

       .. rubric:: |AVRD|

       * |AVRD_FLASH_WRITE|

   * - :cspan:`1` Interfaces
     - .. rubric:: |CAPI|

       * |CAPI_FLASH_WRITE|

       .. rubric:: |PYAPI|

       * |PYAPI_FLASH_WRITE|



   * - :rspan:`1`

       .. _|UCTR_EEPROM_READ|:

       .. rubric:: |UCTR_EEPROM_READ|

     - :cspan:`1` |ENUM_EEPROM_READ|
     - :rspan:`1`
   * - .. wValue not used
     - :token:`EEPROM_READ:address`
   * - :cspan:`1`
     - .. productionlist:: EEPROM_READ
          OUTPUT:
          INPUT: `address`
          address:
   * - :cspan:`1` Implementation
     - .. rubric:: |LWFW|

       * |LWFW_EEPROM_READ|

       .. rubric:: |AVRD|

       * |AVRD_EEPROM_READ|

   * - :cspan:`1` Interfaces
     - .. rubric:: |CAPI|

       * |CAPI_EEPROM_READ|

       .. rubric:: |PYAPI|

       * |PYAPI_EEPROM_READ|



   * - :rspan:`1`

       .. _|UCTR_EEPROM_WRITE|:

       .. rubric:: |UCTR_EEPROM_WRITE|

     - :cspan:`1` |ENUM_EEPROM_WRITE|
     - :rspan:`1`
   * - :token:`EEPROM_WRITE:timeout`
     - :token:`EEPROM_WRITE:address`
   * - :cspan:`1`
     - .. productionlist:: EEPROM_WRITE
          OUTPUT:
          INPUT: `timeout` & `address`
          timeout:
          address:
   * - :cspan:`1` Implementation
     - .. rubric:: |LWFW|

       * |LWFW_EEPROM_WRITE|

       .. rubric:: |AVRD|

       * |AVRD_EEPROM_WRITE|

   * - :cspan:`1` Interfaces
     - .. rubric:: |CAPI|

       * |CAPI_EEPROM_WRITE|

       .. rubric:: |PYAPI|

       * |PYAPI_EEPROM_WRITE|



Little Wire Generic

.. flat-table:: Little Wire Firmware Generic Control Transfer Requests
   :header-rows: 4
   :stub-columns: 2
   :widths: 1 2 2 5
   :name: lwfw12-usbctr-lwfw

   * - :cspan:`2` `Setup Packet`_
     - :rspan:`2` Description / Notes
   * - :rspan:`1` :code:`bRequest`
     - :cspan:`1` Name
   * - :code:`wValue`
     - :code:`wIndex`
   * - :cspan:`3` Implementation / Interfaces



   * - :rspan:`1`

       .. _|UCTR_VERSION_QUERY|:

       .. rubric:: |UCTR_VERSION_QUERY|

     - :cspan:`1` |ENUM_VERSION_QUERY|
     - :rspan:`1`
   * - .. wValue not used
     - .. wIndex not used
   * - :cspan:`1`
     - .. productionlist:: VERSION_QUERY
          OUTPUT:
          INPUT:
   * - :cspan:`1` Implementation
     - .. rubric:: |LWFW| – |STATE_VERSION_QUERY|

       * |LWFW_VERSION_QUERY|

   * - :cspan:`1` Interfaces
     - .. rubric:: |CAPI|

       * |CAPI_VERSION_QUERY|

       .. rubric:: |PYAPI|

       * |PYAPI_VERSION_QUERY|



   * - :rspan:`1`

       .. _|UCTR_READ_RESULT|:

       .. rubric:: |UCTR_READ_RESULT|

     - :cspan:`1` |ENUM_READ_RESULT|
     - :rspan:`1`
   * - .. wValue not used
     - .. wIndex not used
   * - :cspan:`1`
     - .. productionlist:: READ_RESULT
          OUTPUT:
          INPUT:
   * - :cspan:`1` Implementation
     - .. rubric:: |LWFW| – |STATE_READ_RESULT|

       * |LWFW_READ_RESULT|

   * - :cspan:`1` Interfaces
     - .. rubric:: |CAPI|

       * |CAPI_READ_RESULT_1|
       * |CAPI_READ_RESULT_2|
       * |CAPI_READ_RESULT_3|
       * |CAPI_READ_RESULT_4|
       * |CAPI_READ_RESULT_5|
       * |CAPI_READ_RESULT_6|
       * |CAPI_READ_RESULT_7|

       .. rubric:: |PYAPI|

       * |PYAPI_READ_RESULT|



   * - :rspan:`1`

       .. _|UCTR_SERNUM_CHANGE|:

       .. rubric:: |UCTR_SERNUM_CHANGE|

     - :cspan:`1` |ENUM_SERNUM_CHANGE|
     - :rspan:`1`
   * - :token:`SERNUM_CHANGE:snb1snb0`
     - :token:`SERNUM_CHANGE:snb2`
   * - :cspan:`1`
     - .. productionlist:: SERNUM_CHANGE
          OUTPUT:
          INPUT: `snb1snb0` & `snb2`
          snb1snb0:
          snb2:
   * - :cspan:`1` Implementation
     - .. rubric:: |LWFW| – |STATE_SERNUM_CHANGE|

       * |LWFW_SERNUM_CHANGE|

   * - :cspan:`1` Interfaces
     - .. rubric:: |CAPI|

       * |CAPI_SERNUM_CHANGE|

       .. rubric:: |PYAPI|

       * |PYAPI_SERNUM_CHANGE|



Little Wire GPIO

.. flat-table:: Little Wire Firmware GPIO Control Transfer Requests
   :header-rows: 4
   :stub-columns: 2
   :widths: 1 2 2 5
   :name: lwfw12-usbctr-lwfw-gpio

   * - :cspan:`2` `Setup Packet`_
     - :rspan:`2` Description / Notes
   * - :rspan:`1` :code:`bRequest`
     - :cspan:`1` Name
   * - :code:`wValue`
     - :code:`wIndex`
   * - :cspan:`3` Implementation / Interfaces



   * - :rspan:`1`

       .. _|UCTR_PIN_SET_INPUT|:

       .. rubric:: |UCTR_PIN_SET_INPUT|

     - :cspan:`1` |ENUM_PIN_SET_INPUT|
     - :rspan:`1`
   * - :token:`PIN_SET_INPUT:pin`
     - .. wIndex not used
   * - :cspan:`1`
     - .. productionlist:: PIN_SET_INPUT
          OUTPUT:
          INPUT: `pin`
          pin:
   * - :cspan:`1` Implementation
     - .. rubric:: |LWFW| – |STATE_PIN_SET_INPUT|

       * |LWFW_PIN_SET_INPUT|

   * - :cspan:`1` Interfaces
     - .. rubric:: |CAPI|

       * |CAPI_PIN_SET_INPUT|

       .. rubric:: |PYAPI|

       * |PYAPI_PIN_SET_INPUT|



   * - :rspan:`1`

       .. _|UCTR_PIN_SET_OUTPUT|:

       .. rubric:: |UCTR_PIN_SET_OUTPUT|

     - :cspan:`1` |ENUM_PIN_SET_OUTPUT|
     - :rspan:`1`
   * - :token:`PIN_SET_OUTPUT:pin`
     - .. wIndex not used
   * - :cspan:`1`
     - .. productionlist:: PIN_SET_OUTPUT
          OUTPUT:
          INPUT: `pin`
          pin:
   * - :cspan:`1` Implementation
     - .. rubric:: |LWFW| – |STATE_PIN_SET_OUTPUT|

       * |LWFW_PIN_SET_OUTPUT|

   * - :cspan:`1` Interfaces
     - .. rubric:: |CAPI|

       * |CAPI_PIN_SET_OUTPUT|

       .. rubric:: |PYAPI|

       * |PYAPI_PIN_SET_OUTPUT|



   * - :rspan:`1`

       .. _|UCTR_PIN_SET_HIGH|:

       .. rubric:: |UCTR_PIN_SET_HIGH|

     - :cspan:`1` |ENUM_PIN_SET_HIGH|
     - :rspan:`1`
   * - :token:`PIN_SET_HIGH:pin`
     - .. wIndex not used
   * - :cspan:`1`
     - .. productionlist:: PIN_SET_HIGH
          OUTPUT:
          INPUT: `pin`
          pin:
   * - :cspan:`1` Implementation
     - .. rubric:: |LWFW| – |STATE_PIN_SET_HIGH|

       * |LWFW_PIN_SET_HIGH|

   * - :cspan:`1` Interfaces
     - .. rubric:: |CAPI|

       * |CAPI_PIN_SET_HIGH_1|
       * |CAPI_PIN_SET_HIGH_2|

       .. rubric:: |PYAPI|

       * |PYAPI_PIN_SET_HIGH_1|
       * |PYAPI_PIN_SET_HIGH_2|



   * - :rspan:`1`

       .. _|UCTR_PIN_SET_LOW|:

       .. rubric:: |UCTR_PIN_SET_LOW|

     - :cspan:`1` |ENUM_PIN_SET_LOW|
     - :rspan:`1`
   * - :token:`PIN_SET_LOW:pin`
     - .. wIndex not used
   * - :cspan:`1`
     - .. productionlist:: PIN_SET_LOW
          OUTPUT:
          INPUT: `pin`
          pin:
   * - :cspan:`1` Implementation
     - .. rubric:: |LWFW| – |STATE_PIN_SET_LOW|

       * |LWFW_PIN_SET_LOW|

   * - :cspan:`1` Interfaces
     - .. rubric:: |CAPI|

       * |CAPI_PIN_SET_LOW_1|
       * |CAPI_PIN_SET_LOW_2|

       .. rubric:: |PYAPI|

       * |PYAPI_PIN_SET_LOW_1|
       * |PYAPI_PIN_SET_LOW_2|



   * - :rspan:`1`

       .. _|UCTR_PIN_READ|:

       .. rubric:: |UCTR_PIN_READ|

     - :cspan:`1` |ENUM_PIN_READ|
     - :rspan:`1`
   * - :token:`PIN_READ:pin`
     - .. wIndex not used
   * - :cspan:`1`
     - .. productionlist:: PIN_READ
          OUTPUT: `state`
          INPUT: `pin`
          pin:
          state:
   * - :cspan:`1` Implementation
     - .. rubric:: |LWFW| – |STATE_PIN_READ|

       * |LWFW_PIN_READ|

   * - :cspan:`1` Interfaces
     - .. rubric:: |CAPI|

       * |CAPI_PIN_READ|

       .. rubric:: |PYAPI|

       * |PYAPI_PIN_READ|



Little Wire ADC

.. flat-table:: Little Wire Firmware ADC Control Transfer Requests
   :header-rows: 4
   :stub-columns: 2
   :widths: 1 2 2 5
   :name: lwfw12-usbctr-lwfw-adc

   * - :cspan:`2` `Setup Packet`_
     - :rspan:`2` Description / Notes
   * - :rspan:`1` :code:`bRequest`
     - :cspan:`1` Name
   * - :code:`wValue`
     - :code:`wIndex`
   * - :cspan:`3` Implementation / Interfaces



   * - :rspan:`1`

       .. _|UCTR_SETUP_ADC|:

       .. rubric:: |UCTR_SETUP_ADC|

     - :cspan:`1` |ENUM_SETUP_ADC|
     - :rspan:`1`
   * - :token:`SETUP_ADC:vref`
     - .. wIndex not used
   * - :cspan:`1`
     - .. productionlist:: SETUP_ADC
          OUTPUT:
          INPUT: `vref`
          vref:
   * - :cspan:`1` Implementation
     - .. rubric:: |LWFW| – |STATE_SETUP_ADC|

       * |LWFW_SETUP_ADC|

   * - :cspan:`1` Interfaces
     - .. rubric:: |CAPI|

       * |CAPI_SETUP_ADC|

       .. rubric:: |PYAPI|

       * |PYAPI_SETUP_ADC|



   * - :rspan:`1`

       .. _|UCTR_READ_ADC|:

       .. rubric:: |UCTR_READ_ADC|

     - :cspan:`1` |ENUM_READ_ADC|
     - :rspan:`1`
   * - :token:`READ_ADC:channel`
     - .. wIndex not used
   * - :cspan:`1`
     - .. productionlist:: READ_ADC
          OUTPUT: `value`
          INPUT: `channel`
          channel:
          value:
   * - :cspan:`1` Implementation
     - .. rubric:: |LWFW| – |STATE_READ_ADC|

       * |LWFW_READ_ADC|

   * - :cspan:`1` Interfaces
     - .. rubric:: |CAPI|

       * |CAPI_READ_ADC|

       .. rubric:: |PYAPI|

       * |PYAPI_READ_ADC|



Little Wire PWM

.. flat-table:: Little Wire Firmware PWM Control Transfer Requests
   :header-rows: 4
   :stub-columns: 2
   :widths: 1 2 2 5
   :name: lwfw12-usbctr-lwfw-pwm

   * - :cspan:`2` `Setup Packet`_
     - :rspan:`2` Description / Notes
   * - :rspan:`1` :code:`bRequest`
     - :cspan:`1` Name
   * - :code:`wValue`
     - :code:`wIndex`
   * - :cspan:`3` Implementation / Interfaces



   * - :rspan:`1`

       .. _|UCTR_SETUP_PWM|:

       .. rubric:: |UCTR_SETUP_PWM|

     - :cspan:`1` |ENUM_SETUP_PWM|
     - :rspan:`1`
   * - .. wValue not used
     - .. wIndex not used
   * - :cspan:`1`
     - .. productionlist:: SETUP_PWM
          OUTPUT:
          INPUT:
   * - :cspan:`1` Implementation
     - .. rubric:: |LWFW| – |STATE_SETUP_PWM|

       * |LWFW_SETUP_PWM|

   * - :cspan:`1` Interfaces
     - .. rubric:: |CAPI|

       * |CAPI_SETUP_PWM|

       .. rubric:: |PYAPI|

       * |PYAPI_SETUP_PWM|



   * - :rspan:`1`

       .. _|UCTR_UPDATE_PWM_COMPARE|:

       .. rubric:: |UCTR_UPDATE_PWM_COMPARE|

     - :cspan:`1` |ENUM_UPDATE_PWM_COMPARE|
     - :rspan:`1`
   * - :token:`UPDATE_PWM:chAcomp`
     - :token:`UPDATE_PWM:chBcomp`
   * - :cspan:`1`
     - .. productionlist:: UPDATE_PWM
          OUTPUT:
          INPUT: `chAcomp` & `chBcomp`
          chAcomp:
          chBcomp:
   * - :cspan:`1` Implementation
     - .. rubric:: |LWFW| – |STATE_UPDATE_PWM_COMPARE|

       * |LWFW_UPDATE_PWM_COMPARE|

   * - :cspan:`1` Interfaces
     - .. rubric:: |CAPI|

       * |CAPI_UPDATE_PWM_COMPARE|

       .. rubric:: |PYAPI|

       * |PYAPI_UPDATE_PWM_COMPARE|



   * - :rspan:`1`

       .. _|UCTR_CHANGE_PWM_PRESCALE|:

       .. rubric:: |UCTR_CHANGE_PWM_PRESCALE|

     - :cspan:`1` |ENUM_CHANGE_PWM_PRESCALE|
     - :rspan:`1`
   * - :token:`CHANGE_PWM:prescale`
     - .. wIndex not used
   * - :cspan:`1`
     - .. productionlist:: CHANGE_PWM
          OUTPUT:
          INPUT: `prescale`
          prescale:
   * - :cspan:`1` Implementation
     - .. rubric:: |LWFW| – |STATE_CHANGE_PWM_PRESCALE|

       * |LWFW_CHANGE_PWM_PRESCALE|

   * - :cspan:`1` Interfaces
     - .. rubric:: |CAPI|

       * |CAPI_CHANGE_PWM_PRESCALE|

       .. rubric:: |PYAPI|

       * |PYAPI_CHANGE_PWM_PRESCALE|



   * - :rspan:`1`

       .. _|UCTR_STOP_PWM|:

       .. rubric:: |UCTR_STOP_PWM|

     - :cspan:`1` |ENUM_STOP_PWM|
     - :rspan:`1`
   * - .. wValue not used
     - .. wIndex not used
   * - :cspan:`1`
     - .. productionlist:: STOP_PWM
          OUTPUT:
          INPUT:
   * - :cspan:`1` Implementation
     - .. rubric:: |LWFW| – |STATE_STOP_PWM|

       * |LWFW_STOP_PWM|

   * - :cspan:`1` Interfaces
     - .. rubric:: |CAPI|

       * |CAPI_STOP_PWM|

       .. rubric:: |PYAPI|

       * |PYAPI_STOP_PWM|



Little Wire SPI

.. flat-table:: Little Wire Firmware SPI Control Transfer Requests
   :header-rows: 4
   :stub-columns: 2
   :widths: 1 2 2 5
   :name: lwfw12-usbctr-lwfw-spi

   * - :cspan:`2` `Setup Packet`_
     - :rspan:`2` Description / Notes
   * - :rspan:`1` :code:`bRequest`
     - :cspan:`1` Name
   * - :code:`wValue`
     - :code:`wIndex`
   * - :cspan:`3` Implementation / Interfaces



   * - :rspan:`1`

       .. _|UCTR_SINGLE_SPI|:

       .. rubric:: |UCTR_SINGLE_SPI|

     - :cspan:`1` |ENUM_SINGLE_SPI|
     - :rspan:`1`
   * - .. wValue not used
     - .. wIndex not used
   * - :cspan:`1` |STATE_SINGLE_SPI|
     - .. productionlist:: SINGLE_SPI
          OUTPUT:
          INPUT:
   * - :cspan:`1` Implementation
     - .. rubric:: |LWFW| – |STATE_SINGLE_SPI|

       * |LWFW_SINGLE_SPI|

       .. rubric:: last time supported by firmware V1.1

       * :lwfw11:`427`

   * - :cspan:`1` Interfaces
     - .. rubric:: |CAPI|

       * |CAPI_SINGLE_SPI|

       .. rubric:: |PYAPI|

       * |PYAPI_SINGLE_SPI|



   * - :rspan:`1`

       .. _|UCTR_SETUP_SPI|:

       .. rubric:: |UCTR_SETUP_SPI|

     - :cspan:`1` |ENUM_SETUP_SPI|
     - :rspan:`1`
   * - .. wValue not used
     - .. wIndex not used
   * - :cspan:`1` |STATE_SETUP_SPI|
     - .. productionlist:: SETUP_SPI
          OUTPUT:
          INPUT:
   * - :cspan:`1` Implementation
     - .. rubric:: |LWFW| – |STATE_SETUP_SPI|

       * |LWFW_SETUP_SPI|

       .. rubric:: last time implemented by firmware V1.1

       * :lwfw11:`480`

   * - :cspan:`1` Interfaces
     - .. rubric:: |CAPI|

       * |CAPI_SETUP_SPI|

       .. rubric:: |PYAPI|

       * |PYAPI_SETUP_SPI|



   * - :rspan:`1`

       .. _|UCTR_SPI_ADD_BUFFER|:

       .. rubric:: |UCTR_SPI_ADD_BUFFER|

     - :cspan:`1` |ENUM_SPI_ADD_BUFFER|
     - :rspan:`1`
   * - .. wValue not used
     - .. wIndex not used
   * - :cspan:`1` |STATE_SPI_ADD_BUFFER|
     - .. productionlist:: SPI_ADD_BUFFER
          OUTPUT:
          INPUT:
   * - :cspan:`1` Implementation
     - .. rubric:: |LWFW| – |STATE_SPI_ADD_BUFFER|

       * |LWFW_SPI_ADD_BUFFER|

       .. rubric:: last time supported by firmware V1.1

       * :lwfw11:`513`

   * - :cspan:`1` Interfaces
     - .. rubric:: |CAPI|

       * |CAPI_SPI_ADD_BUFFER|

       .. rubric:: |PYAPI|

       * |PYAPI_SPI_ADD_BUFFER|



   * - :rspan:`1`

       .. _|UCTR_SPI_SEND_BUFFER|:

       .. rubric:: |UCTR_SPI_SEND_BUFFER|

     - :cspan:`1` |ENUM_SPI_SEND_BUFFER|
     - :rspan:`1`
   * - .. wValue not used
     - .. wIndex not used
   * - :cspan:`1` |STATE_SPI_SEND_BUFFER|
     - .. productionlist:: SPI_SEND_BUFFER
          OUTPUT:
          INPUT:
   * - :cspan:`1` Implementation
     - .. rubric:: |LWFW| – |STATE_SPI_SEND_BUFFER|

       * |LWFW_SPI_SEND_BUFFER|

       .. rubric:: last time supported by firmware V1.1

       * :lwfw11:`522`

   * - :cspan:`1` Interfaces
     - .. rubric:: |CAPI|

       * |CAPI_SPI_SEND_BUFFER|

       .. rubric:: |PYAPI|

       * |PYAPI_SPI_SEND_BUFFER|



   * - :rspan:`1`

       .. _|UCTR_SPI_UPDATE_DELAY|:

       .. rubric:: |UCTR_SPI_UPDATE_DELAY|

     - :cspan:`1` |ENUM_SPI_UPDATE_DELAY|
     - :rspan:`1`
   * - :token:`SPI_UPDATE:duration`
     - .. wIndex not used
   * - :cspan:`1`
     - .. productionlist:: SPI_UPDATE
          OUTPUT:
          INPUT: `duration`
          duration:
   * - :cspan:`1` Implementation
     - .. rubric:: |LWFW| – |STATE_SPI_UPDATE_DELAY|

       * |LWFW_SPI_UPDATE_DELAY|

   * - :cspan:`1` Interfaces
     - .. rubric:: |CAPI|

       * |CAPI_SPI_UPDATE_DELAY|

       .. rubric:: |PYAPI|

       * |PYAPI_SPI_UPDATE_DELAY|



   * - :rspan:`1`

       .. _|UCTR_DEBUG_SPI|:

       .. rubric:: |UCTR_DEBUG_SPI|

     - :cspan:`1` |ENUM_DEBUG_SPI|
     - :rspan:`1`
   * - .. wValue not used
     - .. wIndex not used
   * - :cspan:`1`
     - .. productionlist:: DEBUG_SPI
          OUTPUT:
          INPUT:
   * - :cspan:`1` Implementation
     - .. rubric:: |LWFW| – |STATE_DEBUG_SPI|

       * |LWFW_DEBUG_SPI|

   * - :cspan:`1` Interfaces
     - .. rubric:: |CAPI|

       * |CAPI_DEBUG_SPI|

       .. rubric:: |PYAPI|

       * |PYAPI_DEBUG_SPI|



   * - :rspan:`1`

       .. _|UCTR_SPI_TRANSFER|:

       .. rubric:: |UCTR_SPI_TRANSFER|

     - :cspan:`1` |ENUM_SPI_TRANSFER|
     - :rspan:`1`
   * - :token:`SPI_TRANSFER:c1c0`
     - :token:`SPI_TRANSFER:c3c2`
   * - :cspan:`1`
     - .. productionlist:: SPI_TRANSFER
          OUTPUT:
          INPUT: `c1c0` & `c3c2`
          c1c0:
          c3c2:
   * - :cspan:`1` Implementation
     - .. rubric:: |LWFW| – |STATE_SPI_TRANSFER|

       * |LWFW_SPI_TRANSFER|

   * - :cspan:`1` Interfaces
     - .. rubric:: |CAPI|

       * |CAPI_SPI_TRANSFER|

       .. rubric:: |PYAPI|

       * |PYAPI_SPI_TRANSFER|



Little Wire I²C

.. flat-table:: Little Wire Firmware I²C Control Transfer Requests
   :header-rows: 4
   :stub-columns: 2
   :widths: 1 2 2 5
   :name: lwfw12-usbctr-lwfw-i2c

   * - :cspan:`2` `Setup Packet`_
     - :rspan:`2` Description / Notes
   * - :rspan:`1` :code:`bRequest`
     - :cspan:`1` Name
   * - :code:`wValue`
     - :code:`wIndex`
   * - :cspan:`3` Implementation / Interfaces



   * - :rspan:`1`

       .. _|UCTR_SETUP_I2C|:

       .. rubric:: |UCTR_SETUP_I2C|

     - :cspan:`1` |ENUM_SETUP_I2C|
     - :rspan:`1`
   * - .. wValue not used
     - .. wIndex not used
   * - :cspan:`1` |STATE_SETUP_I2C|
     - .. productionlist:: SETUP_I2C
          OUTPUT:
          INPUT:
   * - :cspan:`1` Implementation
     - .. rubric:: |LWFW| – |STATE_SETUP_I2C|

       * |LWFW_SETUP_I2C|

       .. rubric:: last time supported by firmware V1.1

       * :lwfw11:`489`

   * - :cspan:`1` Interfaces
     - .. rubric:: |CAPI|

       * |CAPI_SETUP_I2C|

       .. rubric:: |PYAPI|

       * |PYAPI_SETUP_I2C|



   * - :rspan:`1`

       .. _|UCTR_I2C_BEGIN_TX|:

       .. rubric:: |UCTR_I2C_BEGIN_TX|

     - :cspan:`1` |ENUM_I2C_BEGIN_TX|
     - :rspan:`1`
   * - .. wValue not used
     - .. wIndex not used
   * - :cspan:`1` |STATE_I2C_BEGIN_TX|
     - .. productionlist:: I2C_BEGIN_TX
          OUTPUT:
          INPUT:
   * - :cspan:`1` Implementation
     - .. rubric:: |LWFW| – |STATE_I2C_BEGIN_TX|

       * |LWFW_I2C_BEGIN_TX|

       .. rubric:: last time supported by firmware V1.1

       * :lwfw11:`494`

   * - :cspan:`1` Interfaces
     - .. rubric:: |CAPI|

       * |CAPI_I2C_BEGIN_TX|

       .. rubric:: |PYAPI|

       * |PYAPI_I2C_BEGIN_TX|



   * - :rspan:`1`

       .. _|UCTR_I2C_ADD_BUFFER|:

       .. rubric:: |UCTR_I2C_ADD_BUFFER|

     - :cspan:`1` |ENUM_I2C_ADD_BUFFER|
     - :rspan:`1`
   * - .. wValue not used
     - .. wIndex not used
   * - :cspan:`1` |STATE_I2C_ADD_BUFFER|
     - .. productionlist:: I2C_ADD_BUFFER
          OUTPUT:
          INPUT:
   * - :cspan:`1` Implementation
     - .. rubric:: |LWFW| – |STATE_I2C_ADD_BUFFER|

       * |LWFW_I2C_ADD_BUFFER|

       .. rubric:: last time supported by firmware V1.1

       * :lwfw11:`500`

   * - :cspan:`1` Interfaces
     - .. rubric:: |CAPI|

       * |CAPI_I2C_ADD_BUFFER|

       .. rubric:: |PYAPI|

       * |PYAPI_I2C_ADD_BUFFER|



   * - :rspan:`1`

       .. _|UCTR_I2C_SEND_BUFFER|:

       .. rubric:: |UCTR_I2C_SEND_BUFFER|

     - :cspan:`1` |ENUM_I2C_SEND_BUFFER|
     - :rspan:`1`
   * - .. wValue not used
     - .. wIndex not used
   * - :cspan:`1` |STATE_I2C_SEND_BUFFER|
     - .. productionlist:: I2C_SEND_BUFFER
          OUTPUT:
          INPUT:
   * - :cspan:`1` Implementation
     - .. rubric:: |LWFW| – |STATE_I2C_SEND_BUFFER|

       * |LWFW_I2C_SEND_BUFFER|

       .. rubric:: last time supported by firmware V1.1

       * :lwfw11:`505`

   * - :cspan:`1` Interfaces
     - .. rubric:: |CAPI|

       * |CAPI_I2C_SEND_BUFFER|

       .. rubric:: |PYAPI|

       * |PYAPI_I2C_SEND_BUFFER|



   * - :rspan:`1`

       .. _|UCTR_I2C_REQUEST_FROM|:

       .. rubric:: |UCTR_I2C_REQUEST_FROM|

     - :cspan:`1` |ENUM_I2C_REQUEST_FROM|
     - :rspan:`1`
   * - .. wValue not used
     - .. wIndex not used
   * - :cspan:`1` |STATE_I2C_REQUEST_FROM|
     - .. productionlist:: I2C_REQUEST_FROM
          OUTPUT:
          INPUT:
   * - :cspan:`1` Implementation
     - .. rubric:: |LWFW| – |STATE_I2C_REQUEST_FROM|

       * |LWFW_I2C_REQUEST_FROM|

       .. rubric:: last time supported by firmware V1.1

       * :lwfw11:`541`

   * - :cspan:`1` Interfaces
     - .. rubric:: |CAPI|

       * |CAPI_I2C_REQUEST_FROM|

       .. rubric:: |PYAPI|

       * |PYAPI_I2C_REQUEST_FROM|



   * - :rspan:`1`

       .. _|UCTR_I2C_INIT|:

       .. rubric:: |UCTR_I2C_INIT|

     - :cspan:`1` |ENUM_I2C_INIT|
     - :rspan:`1`
   * - .. wValue not used
     - .. wIndex not used
   * - :cspan:`1`
     - .. productionlist:: I2C_INIT
          OUTPUT:
          INPUT:
   * - :cspan:`1` Implementation
     - .. rubric:: |LWFW| – |STATE_I2C_INIT|

       * |LWFW_I2C_INIT|

   * - :cspan:`1` Interfaces
     - .. rubric:: |CAPI|

       * |CAPI_I2C_INIT|

       .. rubric:: |PYAPI|

       * |PYAPI_I2C_INIT|



   * - :rspan:`1`

       .. _|UCTR_I2C_START|:

       .. rubric:: |UCTR_I2C_START|

     - :cspan:`1` |ENUM_I2C_START|
     - :rspan:`1`
   * - :token:`I2C_START:diraddr`
     - .. wIndex not used
   * - :cspan:`1`
     - .. productionlist:: I2C_START
          OUTPUT:
          INPUT: `diraddr`
          diraddr: `direction` | `address`
          direction:
          address:
   * - :cspan:`1` Implementation
     - .. rubric:: |LWFW| – |STATE_I2C_START|

       * |LWFW_I2C_START|

   * - :cspan:`1` Interfaces
     - .. rubric:: |CAPI|

       * |CAPI_I2C_START|

       .. rubric:: |PYAPI|

       * |PYAPI_I2C_START|



   * - :rspan:`1`

       .. _|UCTR_I2C_READ|:

       .. rubric:: |UCTR_I2C_READ|

     - :cspan:`1` |ENUM_I2C_READ|
     - :rspan:`1`
   * - :token:`I2C_READ:length`
     - :token:`I2C_READ:stop`
   * - :cspan:`1`
     - .. productionlist:: I2C_READ
          OUTPUT:
          INPUT: `length` & `stop`
          length:
          stop:
   * - :cspan:`1` Implementation
     - .. rubric:: |LWFW| – |STATE_I2C_READ|

       * |LWFW_I2C_READ|

   * - :cspan:`1` Interfaces
     - .. rubric:: |CAPI|

       * |CAPI_I2C_READ|

       .. rubric:: |PYAPI|

       * |PYAPI_I2C_READ|



   * - :rspan:`1`

       .. _|UCTR_I2C_UPDATE_DELAY|:

       .. rubric:: |UCTR_I2C_UPDATE_DELAY|

     - :cspan:`1` |ENUM_I2C_UPDATE_DELAY|
     - :rspan:`1`
   * - :token:`I2C_UPDATE:duration`
     - .. wIndex not used
   * - :cspan:`1`
     - .. productionlist:: I2C_UPDATE
          OUTPUT:
          INPUT: `duration`
          duration:
   * - :cspan:`1` Implementation
     - .. rubric:: |LWFW| – |STATE_I2C_UPDATE_DELAY|

       * |LWFW_I2C_UPDATE_DELAY|

   * - :cspan:`1` Interfaces
     - .. rubric:: |CAPI|

       * |CAPI_I2C_UPDATE_DELAY|

       .. rubric:: |PYAPI|

       * |PYAPI_I2C_UPDATE_DELAY|



   * - :rspan:`1`

       .. _|UCTR_I2C_TRANSFER|:

       .. rubric:: |UCTR_I2C_TRANSFER|

     - :cspan:`1` |ENUM_I2C_TRANSFER|
     - :rspan:`1`
   * - :token:`I2C_TRANSFER:c1c0`
     - :token:`I2C_TRANSFER:c3c2`
   * - :cspan:`1`
     - .. productionlist:: I2C_TRANSFER
          OUTPUT:
          INPUT: `c1c0` & `c3c2`
          c1c0:
          c3c2:
   * - :cspan:`1` Implementation
     - .. rubric:: |LWFW| – |STATE_I2C_TRANSFER|

       * |LWFW_I2C_TRANSFER|

   * - :cspan:`1` Interfaces
     - .. rubric:: |CAPI|

       * |CAPI_I2C_TRANSFER|

       .. rubric:: |PYAPI|

       * |PYAPI_I2C_TRANSFER|



Little Wire Soft-PWM

.. flat-table:: Little Wire Firmware Soft-PWM Control Transfer Requests
   :header-rows: 4
   :stub-columns: 2
   :widths: 1 2 2 5
   :name: lwfw12-usbctr-lwfw-soft-pwm

   * - :cspan:`2` `Setup Packet`_
     - :rspan:`2` Description / Notes
   * - :rspan:`1` :code:`bRequest`
     - :cspan:`1` Name
   * - :code:`wValue`
     - :code:`wIndex`
   * - :cspan:`3` Implementation / Interfaces



   * - :rspan:`1`

       .. _|UCTR_SOFT_PWM_INIT|:

       .. rubric:: |UCTR_SOFT_PWM_INIT|

     - :cspan:`1` |ENUM_SOFT_PWM_INIT|
     - :rspan:`1`
   * - :token:`SWPWM_INIT:state`
     - .. wIndex not used
   * - :cspan:`1`
     - .. productionlist:: SWPWM_INIT
          OUTPUT:
          INPUT: `state`
          state:
   * - :cspan:`1` Implementation
     - .. rubric:: |LWFW| – |STATE_SOFT_PWM_INIT|

       * |LWFW_SOFT_PWM_INIT|

   * - :cspan:`1` Interfaces
     - .. rubric:: |CAPI|

       * |CAPI_SOFT_PWM_INIT|

       .. rubric:: |PYAPI|

       * |PYAPI_SOFT_PWM_INIT|



   * - :rspan:`1`

       .. _|UCTR_SOFT_PWM_UPDATE|:

       .. rubric:: |UCTR_SOFT_PWM_UPDATE|

     - :cspan:`1` |ENUM_SOFT_PWM_UPDATE|
     - :rspan:`1`
   * - :token:`SWPWM_UPDATE:ch2ch1`
     - :token:`SWPWM_UPDATE:ch3`
   * - :cspan:`1`
     - .. productionlist:: SWPWM_UPDATE
          OUTPUT:
          INPUT: `ch2ch1` & `ch3`
          ch2ch1:
          ch3:
   * - :cspan:`1` Implementation
     - .. rubric:: |LWFW| – |STATE_SOFT_PWM_UPDATE|

       * |LWFW_SOFT_PWM_UPDATE|

   * - :cspan:`1` Interfaces
     - .. rubric:: |CAPI|

       * |CAPI_SOFT_PWM_UPDATE|

       .. rubric:: |PYAPI|

       * |PYAPI_SOFT_PWM_UPDATE|



Little Wire One-Wire

.. flat-table:: Little Wire Firmware One-Wire Control Transfer Requests
   :header-rows: 4
   :stub-columns: 2
   :widths: 1 2 2 5
   :name: lwfw12-usbctr-lwfw-ow

   * - :cspan:`2` `Setup Packet`_
     - :rspan:`2` Description / Notes
   * - :rspan:`1` :code:`bRequest`
     - :cspan:`1` Name
   * - :code:`wValue`
     - :code:`wIndex`
   * - :cspan:`3` Implementation / Interfaces



   * - :rspan:`1`

       .. _|UCTR_OW_RESET_PULSE|:

       .. rubric:: |UCTR_OW_RESET_PULSE|

     - :cspan:`1` |ENUM_OW_RESET_PULSE|
     - :rspan:`1`
   * - .. wValue not used
     - .. wIndex not used
   * - :cspan:`1`
     - .. productionlist:: OW_RESET_PULSE
          OUTPUT:
          INPUT:
   * - :cspan:`1` Implementation
     - .. rubric:: |LWFW| – |STATE_OW_RESET_PULSE|

       * |LWFW_OW_RESET_PULSE|

   * - :cspan:`1` Interfaces
     - .. rubric:: |CAPI|

       * |CAPI_OW_RESET_PULSE|

       .. rubric:: |PYAPI|

       * |PYAPI_OW_RESET_PULSE|



   * - :rspan:`1`

       .. _|UCTR_OW_WRITE_BYTE|:

       .. rubric:: |UCTR_OW_WRITE_BYTE|

     - :cspan:`1` |ENUM_OW_WRITE_BYTE|
     - :rspan:`1`
   * - :token:`OW_WRITE_BYTE:message`
     - .. wIndex not used
   * - :cspan:`1`
     - .. productionlist:: OW_WRITE_BYTE
          OUTPUT:
          INPUT: `message`
          message:
   * - :cspan:`1` Implementation
     - .. rubric:: |LWFW| – |STATE_OW_WRITE_BYTE|

       * |LWFW_OW_WRITE_BYTE|

   * - :cspan:`1` Interfaces
     - .. rubric:: |CAPI|

       * |CAPI_OW_WRITE_BYTE|

       .. rubric:: |PYAPI|

       * |PYAPI_OW_WRITE_BYTE|



   * - :rspan:`1`

       .. _|UCTR_OW_READ_BYTE|:

       .. rubric:: |UCTR_OW_READ_BYTE|

     - :cspan:`1` |ENUM_OW_READ_BYTE|
     - :rspan:`1`
   * - .. wValue not used
     - .. wIndex not used
   * - :cspan:`1`
     - .. productionlist:: OW_READ_BYTE
          OUTPUT: `message`
          INPUT:
          message:
   * - :cspan:`1` Implementation
     - .. rubric:: |LWFW| – |STATE_OW_READ_BYTE|

       * |LWFW_OW_READ_BYTE|

   * - :cspan:`1` Interfaces
     - .. rubric:: |CAPI|

       * |CAPI_OW_READ_BYTE|

       .. rubric:: |PYAPI|

       * |PYAPI_OW_READ_BYTE|



   * - :rspan:`1`

       .. _|UCTR_OW_READ_BIT|:

       .. rubric:: |UCTR_OW_READ_BIT|

     - :cspan:`1` |ENUM_OW_READ_BIT|
     - :rspan:`1`
   * - .. wValue not used
     - .. wIndex not used
   * - :cspan:`1`
     - .. productionlist:: OW_READ_BIT
          OUTPUT: `bitval`
          INPUT:
          bitval:
   * - :cspan:`1` Implementation
     - .. rubric:: |LWFW| – |STATE_OW_READ_BIT|

       * |LWFW_OW_READ_BIT|

   * - :cspan:`1` Interfaces
     - .. rubric:: |CAPI|

       * |CAPI_OW_READ_BIT|

       .. rubric:: |PYAPI|

       * |PYAPI_OW_READ_BIT|



   * - :rspan:`1`

       .. _|UCTR_OW_WRITE_BIT|:

       .. rubric:: |UCTR_OW_WRITE_BIT|

     - :cspan:`1` |ENUM_OW_WRITE_BIT|
     - :rspan:`1`
   * - :token:`OW_WRITE_BIT:bitval`
     - .. wIndex not used
   * - :cspan:`1`
     - .. productionlist:: OW_WRITE_BIT
          OUTPUT:
          INPUT: `bitval`
          bitval:
   * - :cspan:`1` Implementation
     - .. rubric:: |LWFW| – |STATE_OW_WRITE_BIT|

       * |LWFW_OW_WRITE_BIT|

   * - :cspan:`1` Interfaces
     - .. rubric:: |CAPI|

       * |CAPI_OW_WRITE_BIT|

       .. rubric:: |PYAPI|

       * |PYAPI_OW_WRITE_BIT|



Little Wire WS2812

.. flat-table:: Little Wire Firmware WS2812 Control Transfer Requests
   :header-rows: 4
   :stub-columns: 2
   :widths: 1 2 2 5
   :name: lwfw12-usbctr-lwfw-ws2812

   * - :cspan:`2` `Setup Packet`_
     - :rspan:`2` Description / Notes
   * - :rspan:`1` :code:`bRequest`
     - :cspan:`1` Name
   * - :code:`wValue`
     - :code:`wIndex`
   * - :cspan:`3` Implementation / Interfaces



   * - :rspan:`1`

       .. _|UCTR_WS2812_EXEC|:

       .. rubric:: |UCTR_WS2812_EXEC|

     - :cspan:`1` |ENUM_WS2812_EXEC|
     - :rspan:`1`
   * - :token:`WS2812_EXEC:cGpincmd`
     - :token:`WS2812_EXEC:cBcR`
   * - :cspan:`1`
     - .. productionlist:: WS2812_EXEC
          OUTPUT:
          INPUT: `cGpincmd` & `cBcR`
          cGpincmd: `cG` + `pin` + `cmd`
          cBcR: `cB` + `cR`
          pin:
          cmd:
          cR:
          cG:
          cB:
   * - :cspan:`1` Implementation
     - .. rubric:: |LWFW| – |STATE_WS2812_EXEC|

       * |LWFW_WS2812_EXEC|

   * - :cspan:`1` Interfaces
     - .. rubric:: |CAPI|

       * |CAPI_WS2812_EXEC_1|
       * |CAPI_WS2812_EXEC_2|
       * |CAPI_WS2812_EXEC_3|

       .. rubric:: |PYAPI|

       * |PYAPI_WS2812_EXEC|



Little Wire Experimental

.. flat-table:: Little Wire Firmware Experimental Control Transfer Requests
   :header-rows: 4
   :stub-columns: 2
   :widths: 1 2 2 5
   :name: lwfw12-usbctr-lwfw-exp

   * - :cspan:`2` `Setup Packet`_
     - :rspan:`2` Description / Notes
   * - :rspan:`1` :code:`bRequest`
     - :cspan:`1` Name
   * - :code:`wValue`
     - :code:`wIndex`
   * - :cspan:`3` Implementation / Interfaces



   * - :rspan:`1`

       .. _|UCTR_PIC24F_PROG|:

       .. rubric:: |UCTR_PIC24F_PROG|

     - :cspan:`1` |ENUM_PIC24F_PROG|
     - :rspan:`1`
   * - .. wValue not used
     - .. wIndex not used
   * - :cspan:`1` |STATE_PIC24F_PROG|
     - .. productionlist:: PIC24F_PROG
          OUTPUT:
          INPUT:
   * - :cspan:`1` Implementation
     - .. rubric:: |LWFW| – |STATE_PIC24F_PROG|

       * |LWFW_PIC24F_PROG|

   * - :cspan:`1` Interfaces
     - .. rubric:: |CAPI|

       * |CAPI_PIC24F_PROG|

       .. rubric:: |PYAPI|

       * |PYAPI_PIC24F_PROG|



   * - :rspan:`1`

       .. _|UCTR_PIC24F_SENDSIX|:

       .. rubric:: |UCTR_PIC24F_SENDSIX|

     - :cspan:`1` |ENUM_PIC24F_SENDSIX|
     - :rspan:`1`
   * - .. wValue not used
     - .. wIndex not used
   * - :cspan:`1` |STATE_PIC24F_SENDSIX|
     - .. productionlist:: PIC24F_SENDSIX
          OUTPUT:
          INPUT:
   * - :cspan:`1` Implementation
     - .. rubric:: |LWFW| – |STATE_PIC24F_SENDSIX|

       * |LWFW_PIC24F_SENDSIX|

   * - :cspan:`1` Interfaces
     - .. rubric:: |CAPI|

       * |CAPI_PIC24F_SENDSIX|

       .. rubric:: |PYAPI|

       * |PYAPI_PIC24F_SENDSIX|



   * - :rspan:`1`

       .. _|UCTR_PIC24F_TRANSFER|:

       .. rubric:: |UCTR_PIC24F_TRANSFER|

     - :cspan:`1` |ENUM_PIC24F_TRANSFER|
     - :rspan:`1`
   * - :token:`PIC24F_TRANSFER:c1c0`
     - :token:`PIC24F_TRANSFER:c3c2`
   * - :cspan:`1` |STATE_PIC24F_TRANSFER|
     - .. productionlist:: PIC24F_TRANSFER
          OUTPUT:
          INPUT: `c1c0` & `c3c2`
          c1c0:
          c3c2:
   * - :cspan:`1` Implementation
     - .. rubric:: |LWFW| – |STATE_PIC24F_TRANSFER|

       * |LWFW_PIC24F_TRANSFER|

   * - :cspan:`1` Interfaces
     - .. rubric:: |CAPI|

       * |CAPI_PIC24F_TRANSFER|

       .. rubric:: |PYAPI|

       * |PYAPI_PIC24F_TRANSFER|



.. spelling::

   GPIO
   ADC
   PWM
   SPI
   I2C
   I²C
   Soft-PWM
   One-Wire
   WS2812
   PIC24F