From 0af44292a0862b1c115def1ed1a48e29daae241c Mon Sep 17 00:00:00 2001
From: Dario Nieuwenhuis <dirbaio@dirbaio.net>
Date: Thu, 11 Jan 2024 19:10:56 +0100
Subject: [PATCH] usb: add readme.

---
 embassy-usb/README.md | 24 +++++++++++++++++++++++-
 1 file changed, 23 insertions(+), 1 deletion(-)

diff --git a/embassy-usb/README.md b/embassy-usb/README.md
index da656e8e9..7411fcf52 100644
--- a/embassy-usb/README.md
+++ b/embassy-usb/README.md
@@ -1,6 +1,28 @@
 # embassy-usb
 
-TODO crate description
+Async USB device stack for embedded devices in Rust.
+
+## Features
+
+- Native async.
+- Fully lock-free: endpoints are separate objects that can be used independently without needing a central mutex. If the driver supports it, they can even be used from different priority levels.
+- Suspend/resume, remote wakeup.
+- USB composite devices.
+- Ergonomic descriptor builder.
+- Ready-to-use implementations for a few USB classes (note you can still implement any class yourself oustide the crate).
+    - Serial ports (CDC ACM)
+    - Ethernet (CDC NCM)
+    - Human Interface Devices (HID)
+    - MIDI
+
+## Adding support for new hardware
+
+To add `embassy-usb` support for new hardware (i.e. a new MCU chip), you have to write a driver that implements
+the [`embassy-usb-driver`](https://crates.io/crates/embassy-usb-driver) traits.
+
+Driver crates should depend only on `embassy-usb-driver`, not on the main `embassy-usb` crate.
+This allows existing drivers to continue working for newer `embassy-usb` major versions, without needing an update, if the driver
+trait has not had breaking changes.
 
 ## Configuration