summaryrefslogtreecommitdiff
path: root/examples/device/hid_composite
diff options
context:
space:
mode:
authorHa Thach <[email protected]>2026-06-29 12:56:16 +0700
committerGitHub <[email protected]>2026-06-29 12:56:16 +0700
commit40f4c12c6be504031d2e2808f191134739206b5e (patch)
tree6206237e2f08aed4d0570daa65bf88e45e7de8f8 /examples/device/hid_composite
parentbe22838b081ad90f6b312e1da6fc1b1653e3c5ae (diff)
parentba32b46ebd5304812d521cd30cfdb5b284341f69 (diff)
Merge pull request #3743 from hathach/claude/build-doc-skill
docs: add build-doc tooling and a README for every example
Diffstat (limited to 'examples/device/hid_composite')
-rw-r--r--examples/device/hid_composite/README.md54
1 files changed, 54 insertions, 0 deletions
diff --git a/examples/device/hid_composite/README.md b/examples/device/hid_composite/README.md
new file mode 100644
index 000000000..bfa2de63d
--- /dev/null
+++ b/examples/device/hid_composite/README.md
@@ -0,0 +1,54 @@
+# HID Composite
+
+A single USB HID interface that combines several HID functions using report IDs: keyboard, mouse, stylus pen, consumer control, and gamepad.
+
+## What it does
+
+- Presents one HID interface carrying five report types, distinguished by report ID: keyboard, mouse, stylus pen, consumer control, and gamepad.
+- Polls the board button every 10 ms and, on each cycle, sends a chain of reports (the next report is queued from `tud_hid_report_complete_cb`):
+ - Keyboard: while the button is held, sends the `A` keycode; releasing sends an empty report.
+ - Mouse: moves diagonally (+5, +5) each cycle.
+ - Stylus pen: while the button is held, reports tip-switch + in-range at position (100, 100).
+ - Consumer control: while the button is held, sends Volume Decrement; releasing sends a release report.
+ - Gamepad: while the button is held, sets the hat to Up and presses button A; releasing recenters.
+- If the device is suspended, pressing the button issues a USB remote wakeup.
+- The LED blinks to indicate USB state (250 ms not mounted, 1000 ms mounted, 2500 ms suspended). When the host turns on Caps Lock, the LED is driven solid on via the keyboard's OUTPUT report.
+
+## USB Descriptors
+
+| Interface | Class driver |
+|-----------|--------------|
+| 0 | HID (keyboard + mouse + stylus pen + consumer control + gamepad, composite report IDs) |
+
+## Configuration
+
+Notable `tusb_config.h` settings:
+
+```c
+#define CFG_TUD_HID 1
+#define CFG_TUD_HID_EP_BUFSIZE 16
+```
+
+## Building
+
+CMake:
+
+```bash
+mkdir build && cd build
+cmake -DBOARD=raspberry_pi_pico ..
+cmake --build .
+```
+
+Make:
+
+```bash
+make BOARD=raspberry_pi_pico all
+```
+
+## FreeRTOS variant
+
+A FreeRTOS build is in `examples/device/hid_composite_freertos` — the USB device and HID logic run as FreeRTOS tasks (LED via a software timer). It exposes four report types (keyboard, mouse, consumer control, gamepad) and, unlike this example, omits the stylus-pen report.
+
+## Try it
+
+After flashing, the board enumerates as a single HID device that the host recognizes as a keyboard, mouse, consumer-control, gamepad, and stylus. Press and hold the button to type `A`, decrease the volume, press gamepad button A, and report stylus contact; the mouse pointer drifts toward the bottom-right continuously.