<feed xmlns='http://www.w3.org/2005/Atom'>
<title>tinyusb.git/src/class/vendor/vendor_device.h, branch worktree-ch569-hydrausb3</title>
<subtitle>Unnamed repository; edit this file 'description' to name the repository.</subtitle>
<id>http://cgit.235523.xyz/tinyusb.git/atom/src/class/vendor/vendor_device.h?h=worktree-ch569-hydrausb3</id>
<link rel='self' href='http://cgit.235523.xyz/tinyusb.git/atom/src/class/vendor/vendor_device.h?h=worktree-ch569-hydrausb3'/>
<link rel='alternate' type='text/html' href='http://cgit.235523.xyz/tinyusb.git/'/>
<updated>2026-07-06T09:17:17Z</updated>
<entry>
<title>Merge remote-tracking branch 'origin/master' into usbtest</title>
<updated>2026-07-06T09:17:17Z</updated>
<author>
<name>hathach</name>
<email>thach@tinyusb.org</email>
</author>
<published>2026-07-06T09:17:17Z</published>
<link rel='alternate' type='text/html' href='http://cgit.235523.xyz/tinyusb.git/commit/?id=2d73cf58de9a41278a9c6e1e3c9e5c6626bf95b7'/>
<id>urn:sha1:2d73cf58de9a41278a9c6e1e3c9e5c6626bf95b7</id>
<content type='text'>
# Conflicts:
#	lib/rt-thread/port/msc_device_port.c
#	src/device/usbd.c
</content>
</entry>
<entry>
<title>class/vendor: portability + robustness fixes for int/iso/alt support</title>
<updated>2026-07-03T01:57:29Z</updated>
<author>
<name>hathach</name>
<email>thach@tinyusb.org</email>
</author>
<published>2026-07-03T01:57:29Z</published>
<link rel='alternate' type='text/html' href='http://cgit.235523.xyz/tinyusb.git/commit/?id=4f83784b289797b89c88c5748d1d69c119b00561'/>
<id>urn:sha1:4f83784b289797b89c88c5748d1d69c119b00561</id>
<content type='text'>
- Isochronous endpoints are reserved through TUP_DCD_EDPT_ISO_ALLOC-guarded
  helpers with a usbd_edpt_open fallback (mirrors audio), so ports without
  the iso alloc API (lpc_ip3511, rusb2) enumerate instead of failing open.
- #error when EP_ISO_* is set without ALT_SETTINGS (iso must live in a
  non-zero altsetting per USB 2.0 5.6.3); the non-alt open path no longer
  silently treats an iso endpoint as bulk.
- Non-buffered bulk read/write gain the 'ep &gt; 0' guard the int/iso APIs
  have, so they cannot claim EP0 while an altsetting without a bulk ep is
  selected.
- find_vendor_itf uses p_itf_desc (not the ep fields) to detect a free
  slot under ALT_SETTINGS, where an interface parked in the empty alt 0
  has all ep fields 0; fixes slot aliasing with CFG_TUD_VENDOR &gt; 1.
- vendord_set_alt validates the altsetting exists before mutating state
  (rollback safety) and stall/clears interrupt endpoints only for the
  enabled direction.
- vendord_open rejects an endpoint address reused across altsettings with
  a different type/MPS (opened once), closing a misconfig + buffer overflow.

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01HeF2gZ1M7GWkz6Av4BpKPg
</content>
</entry>
<entry>
<title>class/vendor: isochronous endpoints + alternate setting support</title>
<updated>2026-07-02T15:58:36Z</updated>
<author>
<name>hathach</name>
<email>thach@tinyusb.org</email>
</author>
<published>2026-07-02T15:58:36Z</published>
<link rel='alternate' type='text/html' href='http://cgit.235523.xyz/tinyusb.git/commit/?id=7040c9b9e25551caa01205389b1fc7b430b77304'/>
<id>urn:sha1:7040c9b9e25551caa01205389b1fc7b430b77304</id>
<content type='text'>
CFG_TUD_VENDOR_EP_ISO_OUT/IN (default 0) add an isochronous endpoint per
direction with the same non-buffered API shape as the interrupt pair
(tud_vendor_n_iso_read_xfer / tud_vendor_n_iso_write + weak iso_rx/tx_cb),
buffers sized by CFG_TUD_VENDOR_EP_ISO_OUT/IN_BUFSIZE.

CFG_TUD_VENDOR_ALT_SETTINGS (default 0, non-buffered mode only) lets the
vendor interface carry multiple altsettings: vendord consumes them all,
answers GET_INTERFACE and performs SET_INTERFACE via a new internal
vendord_control_xfer_cb (registered in usbd's driver table; everything
else still delegates to the app's tud_vendor_control_xfer_cb).

Endpoints are hardware-opened exactly once at vendord_open: dcds with a
linear FIFO allocator (dwc2: TUP_DCD_EDPT_ISO_ALLOC, where
usbd_edpt_close is a no-op and every re-open leaks FIFO space) cannot
close/re-open endpoints dynamically. Selecting an altsetting only
re-targets the API: bulk/interrupt endpoints get a stall+clear-stall
cycle, which portably aborts any in-flight transfer and resets the data
toggle to DATA0 as SET_INTERFACE requires; isochronous endpoints are
FIFO-allocated at open and (re)activated on selection.

Motivated by the usbtest example (Linux usbtest iso cases 15/16/22/23,
which also drives 256 consecutive SET_INTERFACE cycles in its ch9 case);
alt 0 without endpoints satisfies USB 2.0 5.6.3 for iso devices.

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01HeF2gZ1M7GWkz6Av4BpKPg
</content>
</entry>
<entry>
<title>class/vendor: optional interrupt endpoints (CFG_TUD_VENDOR_EP_INT_OUT/IN)</title>
<updated>2026-07-02T15:06:22Z</updated>
<author>
<name>hathach</name>
<email>thach@tinyusb.org</email>
</author>
<published>2026-07-02T15:06:22Z</published>
<link rel='alternate' type='text/html' href='http://cgit.235523.xyz/tinyusb.git/commit/?id=73b42f80992f9da5d27eed061dc7c25358bf3259'/>
<id>urn:sha1:73b42f80992f9da5d27eed061dc7c25358bf3259</id>
<content type='text'>
The vendor interface may carry an interrupt OUT and/or interrupt IN
endpoint alongside the bulk pair, each direction gated separately by
CFG_TUD_VENDOR_EP_INT_OUT / CFG_TUD_VENDOR_EP_INT_IN (default 0, no cost
when disabled) with CFG_TUD_VENDOR_EP_INT_OUT_BUFSIZE /
CFG_TUD_VENDOR_EP_INT_IN_BUFSIZE (default 64) sizing the dedicated
endpoint buffers; endpoint max packet size is checked at open.

Interrupt endpoints are non-buffered: tud_vendor_n_int_read_xfer() arms
the OUT endpoint one packet at a time (delivered via the new weak
tud_vendor_int_rx_cb, no automatic re-arm), tud_vendor_n_int_write() is
a direct transfer completing into tud_vendor_int_tx_cb.

Motivated by the usbtest example (Linux usbtest interrupt cases 25/26)
but generally useful for vendor protocols with a side channel.

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01HeF2gZ1M7GWkz6Av4BpKPg
</content>
</entry>
<entry>
<title>license: use SPDX identifiers for src/ headers (#3749)</title>
<updated>2026-07-02T14:55:45Z</updated>
<author>
<name>Ha Thach</name>
<email>thach@tinyusb.org</email>
</author>
<published>2026-07-02T14:55:45Z</published>
<link rel='alternate' type='text/html' href='http://cgit.235523.xyz/tinyusb.git/commit/?id=7a4111b96ef6279e75579f9a18443834f6a0871d'/>
<id>urn:sha1:7a4111b96ef6279e75579f9a18443834f6a0871d</id>
<content type='text'>
* 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.</content>
</entry>
<entry>
<title>correct default value for CFG_TUD_VENDOR_TX/RX_BUFSIZE</title>
<updated>2026-03-12T07:32:37Z</updated>
<author>
<name>hathach</name>
<email>thach@tinyusb.org</email>
</author>
<published>2026-03-12T07:32:37Z</published>
<link rel='alternate' type='text/html' href='http://cgit.235523.xyz/tinyusb.git/commit/?id=9e5345e70228153ab4efff6f6666c4e54471a4aa'/>
<id>urn:sha1:9e5345e70228153ab4efff6f6666c4e54471a4aa</id>
<content type='text'>
</content>
</entry>
<entry>
<title>refactor(vendor/cdc): add CFG_TUD_CDC_RX_NEED_ZLP and CFG_TUD_VENDOR_RX_NEED_ZLP</title>
<updated>2026-03-12T05:25:59Z</updated>
<author>
<name>hathach</name>
<email>thach@tinyusb.org</email>
</author>
<published>2026-03-12T05:16:57Z</published>
<link rel='alternate' type='text/html' href='http://cgit.235523.xyz/tinyusb.git/commit/?id=aea4f6046e9a07d5f169de9fcc31bca2b667ea45'/>
<id>urn:sha1:aea4f6046e9a07d5f169de9fcc31bca2b667ea45</id>
<content type='text'>
</content>
</entry>
<entry>
<title>refactor(config): separate endpoint buffer sizes into RX and TX definitions for clarity and flexibility</title>
<updated>2026-03-12T04:43:32Z</updated>
<author>
<name>hathach</name>
<email>thach@tinyusb.org</email>
</author>
<published>2026-03-12T04:43:32Z</published>
<link rel='alternate' type='text/html' href='http://cgit.235523.xyz/tinyusb.git/commit/?id=78bbc7dc2e80daba79351bc37e11b13243fd6f8c'/>
<id>urn:sha1:78bbc7dc2e80daba79351bc37e11b13243fd6f8c</id>
<content type='text'>
</content>
</entry>
<entry>
<title>rename .rx_multiple_packet_transfer to .rx_need_zlp</title>
<updated>2026-03-11T13:11:41Z</updated>
<author>
<name>hathach</name>
<email>thach@tinyusb.org</email>
</author>
<published>2026-03-11T13:11:41Z</published>
<link rel='alternate' type='text/html' href='http://cgit.235523.xyz/tinyusb.git/commit/?id=d74559ab70c7c4804ee8cf65d9c65d910af06870'/>
<id>urn:sha1:d74559ab70c7c4804ee8cf65d9c65d910af06870</id>
<content type='text'>
</content>
</entry>
<entry>
<title>fix rx transfer length when high speed capable device/host working at full speed</title>
<updated>2026-02-11T21:04:44Z</updated>
<author>
<name>HiFiPhile</name>
<email>admin@hifiphile.com</email>
</author>
<published>2026-02-11T21:04:44Z</published>
<link rel='alternate' type='text/html' href='http://cgit.235523.xyz/tinyusb.git/commit/?id=135a130ba51d2e41b30f13fbd998f1db32a47470'/>
<id>urn:sha1:135a130ba51d2e41b30f13fbd998f1db32a47470</id>
<content type='text'>
Signed-off-by: HiFiPhile &lt;admin@hifiphile.com&gt;
</content>
</entry>
</feed>
