| Age | Commit message (Collapse) | Author |
|
Co-Authored-By: Claude Fable 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01HeF2gZ1M7GWkz6Av4BpKPg
|
|
Signed-off-by: HiFiPhile <[email protected]>
|
|
Generated-by: OpenAI Codex
Signed-off-by: aineoae86-sys <[email protected]>
|
|
* license: use SPDX identifiers for src/ headers
Replace the full ~20-line MIT license boilerplate on every src/ file with a
two-line SPDX tag (SPDX-FileCopyrightText + SPDX-License-Identifier), following
the REUSE convention used by CircuitPython and the Linux kernel. Removes ~3500
lines of duplicated boilerplate.
|
|
Signed-off-by: HiFiPhile <[email protected]>
|
|
Signed-off-by: HiFiPhile <[email protected]>
|
|
* device: clamp EP0 OUT data copy to the control transfer buffer
usbd_control_xfer_cb() copied xferred_bytes from the EP0 bounce buffer
into the requester's buffer with no bound. A non-compliant host that
sends an OUT data packet larger than the control transfer's data_len
(= min(len, wLength), the buffer capacity) would overflow that buffer
and over-count total_xferred. Clamp xferred_bytes to the remaining
buffer space before the memcpy and accounting.
|
|
Brings the MIDI 2.0 device driver into full conformance with USB
Device Class Definition for MIDI Devices v2.0 (USB-IF, May 2020).
- Alt 1 MS Interface Header wTotalLength now reports 0x0007 per
Table 5-2 ("set to match bLength"), replacing the prior 0x0011
carried over from USB-MIDI 1.0 conventions.
- GET_DESCRIPTOR class request now validates bmRequestType direction,
type and recipient plus wIndex and wValue high byte per Section 6.
- iBlockItem in the default Group Terminal Block is driven by
CFG_TUD_MIDI2_BLOCK_STRIDX so applications can attach a UI string
descriptor to the block per Table 5-6.
- UMP word byte order assumption (little-endian host per Section
3.2.2) is documented inline so future big-endian ports know where
to wrap access with tu_htole32 / tu_le32toh.
Validated on RP2040 and ESP32-P4 under Linux kernel 6.17: lsusb -v
reports wTotalLength = 0x0007 on Alt 1 MS Header (raw bytes
07 24 01 00 02 07 00). amidi -l enumerates Group Terminals exposed
via the class-specific GET_DESCRIPTOR response.
|
|
Host driver (midi2_host.c):
- midih2_open() now returns actual parsed length instead of max_len,
preventing composite device interface conflicts
- Parsers (alt0/alt1) refactored to return const uint8_t* end pointer
following midi_host.c switch/case pattern
- Alt 1 CS Endpoint now parses MIDI 2.0 layout (bNumGrpTrmBlk at
offset 3 with MIDI_CS_ENDPOINT_GENERAL_2_0 subtype check) instead
of reusing MIDI 1.0 struct (bNumEmbMIDIJack)
- midih2_set_config() now issues SET_INTERFACE control request via
tuh_interface_set() before completing configuration. Falls back to
alt 0 if SET_INTERFACE fails
- Extracted midih2_set_config_complete() and midih2_set_interface_cb()
for async SET_INTERFACE handling
Device driver (midi2_device.c):
- midi2d_open() skip loop now checks bInterfaceNumber, stopping at
interfaces that belong to other functions in composite devices
- SET_INTERFACE handler now rejects alt > 1 (returns false/stall)
- Named constants for GTB descriptor types and MIDI protocol values
Descriptor macros (usbd.h):
- TUD_MIDI2_DESC_ALT1_HEAD: iInterface set to 0 (consistent with
Alt 0), wTotalLength now uses TUD_MIDI2_DESC_ALT1_CS_LEN to cover
all Alt 1 class-specific descriptors
- TUD_MIDI2_DESC_ALT1_EP: now accepts GTB ID list via variadic args,
emitting complete CS endpoint descriptor
Host example:
- CMakeLists.txt restricted to rp2040 family (display.c requires
Pico SDK headers)
- display.c: null terminator after strncpy in log scroll
Documentation:
- class_drivers.rst updated to reflect SET_INTERFACE behavior and
auto-select with fallback
Addresses: Codex P1 (#1, #2, #3), Copilot (#4-#9)
|
|
Add native USB-MIDI 2.0 Device class driver to TinyUSB. Implements the
USB-MIDI 2.0 specification with both Alt Setting 0 (MIDI 1.0 fallback)
and Alt Setting 1 (UMP native) descriptor support.
Driver features:
- UMP (Universal MIDI Packet) read/write with atomic message framing
- Protocol negotiation: Endpoint Discovery, Config Request/Notify,
Function Block Discovery (embedded in driver)
- Group Terminal Block descriptor via GET_DESCRIPTOR
- Alt Setting switch handler with endpoint re-arm
- Static allocation, no dynamic memory, ISR-safe
Build system:
- Register midi2d_* in usbd.c driver table
- Add TUD_MIDI2_DESCRIPTOR macros to usbd.h
- Add config defaults (CFG_TUD_MIDI2_*) to tusb_option.h
- Add midi2_ump_word_count() to midi.h (shared by Device and Host)
- Add midi2_device.c/h to family.cmake and CMakeLists.txt
- Add midi2_device.h include to tusb.h
All changes guarded by #if CFG_TUD_MIDI2 (default 0). Zero impact on
existing drivers and examples.
Tested: Raspberry Pi Pico (RP2040), Linux ALSA, Windows MIDI Services
|
|
Signed-off-by: HiFiPhile <[email protected]>
|
|
Refactor USB control transfer handling into `usbd.c`
|
|
|
|
endpoint state handling methods and accesses
|
|
|
|
`_usbd_dev` structure and remove `usbd_control_reset`
|
|
|
|
|
|
Signed-off-by: HiFiPHile <[email protected]>
|
|
Signed-off-by: Zixun LI <[email protected]>
|
|
|
|
|
|
# Conflicts:
# src/device/usbd_control.c
|
|
|
|
|
|
Extract the "which endpoint is the Status stage on" rule into a single
TU_ATTR_ALWAYS_INLINE helper, and use it from both status_stage_xact()
and the completion callback. Replaces the two-operand wLength/direction
check with a direct endpoint-match comparison, matching the first
operand's pattern.
Per USB 2.0 §9.3.1, when wLength == 0 the bmRequestType Direction bit
is ignored and the Status stage is always IN; otherwise the Status
stage is opposite to the Data stage direction.
Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
|
|
# Conflicts:
# src/common/tusb_types.h
# src/portable/mentor/musb/dcd_musb.c
|
|
|
|
|
|
|
|
- Resolve .gitignore conflict: incorporate upstream's .worktrees entry and
expand dependency path patterns to cover all tools/get_deps.py fetched dirs
(lib/, tools/linkermap, tools/uf2, hw/mcu/*) instead of listing only a few
- Auto-merged upstream changes: build system cleanups, BSP updates,
portability fixes, new boards (nrf54lm20dk, stm32h743_weact),
fatfs relocation, and many other upstream improvements
- Net driver changes (ecm_rndis_device.c, ncm_device.c, net_device.h,
usbd.h, usb_descriptors.c) retain our PR's descriptor-based ep_size
approach as our branch takes precedence
Co-authored-by: HiFiPhile <[email protected]>
|
|
|
|
1. Add TU_LITTLE_ENDIAN_BITFIELD / TU_BIG_ENDIAN_BITFIELD macros in
tusb_compiler.h (GCC and IAR), following Linux kernel style.
2. Update bmAttributes (tusb_desc_endpoint_t) and bmRequestType_bit
(tusb_control_request_t) in tusb_types.h to use these macros with explicit
#error fallback if undefined.
3. Add tu_le16toh() conversion in dcd_event_setup_received() for
wValue/wIndex/wLength.
Tested on CIU98320B (big-endian ARM Cortex-M, full-speed HID keyboard).
|
|
bInterval to TUD_CDC_NCM_DESCRIPTOR
Co-authored-by: HiFiPhile <[email protected]>
Agent-Logs-Url: https://github.com/hathach/tinyusb/sessions/e212b526-e279-4a83-88bf-a742df293165
|
|
|
|
cleaner abstraction and consistency across modules
|
|
# Conflicts:
# hw/bsp/same7x/boards/same70_qmtech/board.cmake
# hw/bsp/same7x/boards/same70_xplained/board.cmake
# hw/bsp/same7x/family.cmake
|
|
fix printer GET_DEVICE_ID request weird wIndex (interface high, alt low)
|
|
|
|
|
|
Signed-off-by: HiFiPhile <[email protected]>
|
|
|
|
vbus sensing
simplify dwc2_stm32_gccfg_cfg() using guid value
|
|
|
|
Co-authored-by: hathach <[email protected]>
|
|
|
|
|
|
Signed-off-by: HiFiPhile <[email protected]>
|
|
|
|
Signed-off-by: HiFiPhile <[email protected]>
|