From 6805c9d7349ed85c48714fc3285bb6f88bcd9f97 Mon Sep 17 00:00:00 2001 From: hathach Date: Tue, 3 Aug 2021 16:36:03 +0700 Subject: [PATCH] add back info to readme, use stack.svg --- README.rst | 78 +++++++++++++++++++++++++++++++++++++++ docs/assets/stack.png | Bin 63797 -> 0 bytes docs/assets/stack.svg | 1 + docs/reference/index.rst | 7 +--- 4 files changed, 80 insertions(+), 6 deletions(-) delete mode 100644 docs/assets/stack.png create mode 100644 docs/assets/stack.svg diff --git a/README.rst b/README.rst index b738c7894..6de51535b 100644 --- a/README.rst +++ b/README.rst @@ -10,6 +10,84 @@ the non-ISR task function. Please take a look at the online `documentation `__. +.. figure:: docs/assets/stack.svg + :width: 500px + :alt: stackup + +:: + + . + ├── docs # Documentation + ├── examples # Sample with Makefile build support + ├── hw + │   ├── bsp # Supported boards source files + │   └── mcu # Low level mcu core & peripheral drivers + ├── lib # Sources from 3rd party such as freeRTOS, fatfs ... + ├── src # All sources files for TinyUSB stack itself. + ├── test # Unit tests for the stack + └── tools # Files used internally + +Supported MCUs +============== + +The stack supports the following MCUs: + +- **Dialog:** DA1469x +- **Espressif:** ESP32-S2, ESP32-S3 +- **MicroChip:** SAMD11, SAMD21, SAMD51, SAME5x, SAMG55, SAML21, SAML22, SAME7x +- **NordicSemi:** nRF52833, nRF52840 +- **Nuvoton:** NUC120, NUC121/NUC125, NUC126, NUC505 +- **NXP:** + + - iMX RT Series: RT1011, RT1015, RT1021, RT1052, RT1062, RT1064 + - Kinetis: KL25 + - LPC Series: 11u, 13, 15, 17, 18, 40, 43, 51u, 54, 55 + +- **Raspberry Pi:** RP2040 +- **Renesas:** RX63N, RX65N +- **Silabs:** EFM32GG12 +- **Sony:** CXD56 +- **ST:** STM32 series: L0, F0, F1, F2, F3, F4, F7, H7 both FullSpeed and HighSpeed +- **TI:** MSP430 +- **ValentyUSB:** eptri + +Here is the list of `Supported Devices`_ that can be used with provided examples. + +Device Stack +============ + +Supports multiple device configurations by dynamically changing usb descriptors. Low power functions such like suspend, resume, and remote wakeup. Following device classes are supported: + +- Audio Class 2.0 (UAC2) +- Bluetooth Host Controller Interface (BTH HCI) +- Communication Class (CDC) +- Device Firmware Update (DFU): DFU mode (WIP) and Runtinme +- Human Interface Device (HID): Generic (In & Out), Keyboard, Mouse, Gamepad etc ... +- Mass Storage Class (MSC): with multiple LUNs +- Musical Instrument Digital Interface (MIDI) +- Network with RNDIS, CDC-ECM (work in progress) +- USB Test and Measurement Class (USBTMC) +- Vendor-specific class support with generic In & Out endpoints. Can be used with MS OS 2.0 compatible descriptor to load winUSB driver without INF file. +- `WebUSB `__ with vendor-specific class + +If you have special need, `usbd_app_driver_get_cb()` can be used to write your own class driver without modifying the stack. Here is how RPi team add their reset interface [raspberrypi/pico-sdk#197](https://github.com/raspberrypi/pico-sdk/pull/197) + +Host Stack +========== + +- Human Interface Device (HID): Keyboard, Mouse, Generic +- Mass Storage Class (MSC) +- Hub currently only supports 1 level of hub (due to my laziness) + +OS Abstraction layer +==================== + +TinyUSB is completely thread-safe by pushing all ISR events into a central queue, then process it later in the non-ISR context task function. It also uses semaphore/mutex to access shared resources such as CDC FIFO. Therefore the stack needs to use some of OS's basic APIs. Following OSes are already supported out of the box. + +- **No OS** +- **FreeRTOS** +- **Mynewt** Due to the newt package build system, Mynewt examples are better to be on its [own repo](https://github.com/hathach/mynewt-tinyusb-example) + Local Docs ========== diff --git a/docs/assets/stack.png b/docs/assets/stack.png deleted file mode 100644 index 3a9e1c7fc5bdc72e111b64a468e94a09a3415510..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 63797 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¼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 diff --git a/docs/assets/stack.svg b/docs/assets/stack.svg new file mode 100644 index 000000000..85fe35e96 --- /dev/null +++ b/docs/assets/stack.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/reference/index.rst b/docs/reference/index.rst index 5da51d71a..fcff03590 100644 --- a/docs/reference/index.rst +++ b/docs/reference/index.rst @@ -2,7 +2,7 @@ Reference ********* -.. figure:: ../assets/stack.png +.. figure:: ../assets/stack.svg :width: 1600px :alt: stackup @@ -30,11 +30,6 @@ If you have special need, `usbd_app_driver_get_cb()` can be used to write your o Host Stack ========== -.. admonition:: Warning - :class: warning - - Most active development is on the Device stack. The Host stack is under rework and largely untested. - - Human Interface Device (HID): Keyboard, Mouse, Generic - Mass Storage Class (MSC) - Hub currently only supports 1 level of hub (due to my laziness)