blob: eb935533c0b2ca7ef709b0c69196b38ff009abfd [file] [log] [blame]
.. _module-pw_third_party_tinyusb:
=======
TinyUSB
=======
The ``$dir_pw_third_party/tinyusb/`` module contains the build files needed to
integrate TinyUSB into a Pigweed build.
----------------
GN Build Support
----------------
This module provides support to compile TinyUSB with GN, however it doesn't
include the source code of the `tinyusb <https://github.com/hathach/tinyusb>`_
project.
In order to use this you are expected to configure the following variables from
``$dir_pw_third_party/tinyusb:tinyusb.gni``:
#. Set the GN ``pw_third_party_tinyusb_SOURCE`` to the path of the TinyUSB
source code directory. This is the directory that contains the ``src/``
sub-directory.
#. Set ``pw_third_party_tinyusb_CONFIG`` to a ``pw_source_set`` which provides
the TinyUSB ``tusb_config.h`` config header. While it is possible to provide
public definitions in this ``pw_source_set`` the configuration header file is
still required by TinyUSB.
#. Set ``pw_third_party_tinyusb_PORT`` to a ``pw_source_set`` which provides
the TinyUSB port sources for the specific MCU. Several MCUs are supported by
the upstream TinyUSB project, check the ``src/portable/`` path for your MCU.
After this is done multiple ``pw_source_set`` entries for the different parts of
TinyUSB library are created at ``$dir_pw_third_party/tinyusb``.
.. _third_party-tinyusb_classes:
Adding TinyUSB dependency
=========================
TinyUSB library is split into a device side and host side, with a few common
sources between the two. It is possible to depend on both at compile time, but
initialize only one side. Device and host both provide classes on top such as
Communications Device Class (CDC) or Mass Storage Class (MSC) which can be
selectively included in the build by depending on the respective GN targets.