summaryrefslogtreecommitdiff
path: root/test/unit-test
diff options
context:
space:
mode:
authorHiFiPHile <[email protected]>2026-08-25 09:29:07 +0200
committerHiFiPHile <[email protected]>2026-08-25 09:29:07 +0200
commit3f0a82a6bbe35135ed04749b4022ca6563073d5d (patch)
tree3e0a0799d67dae7d3aad5cce93c04aaae927d381 /test/unit-test
parent62243107cec5e48f447661ea7a17969d05f76adb (diff)
fix(audio): reject unsupported UAC2 interfaces
Require the UAC1 AudioControl protocol before allocating an instance. The current parser assumes UAC1 descriptor layouts, so accepting UAC2 would misinterpret entities and consume a host slot. Signed-off-by: HiFiPHile <[email protected]>
Diffstat (limited to 'test/unit-test')
-rw-r--r--test/unit-test/test/host/audio/test_audio_host.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/test/unit-test/test/host/audio/test_audio_host.c b/test/unit-test/test/host/audio/test_audio_host.c
index 51342bfac..72026e682 100644
--- a/test/unit-test/test/host/audio/test_audio_host.c
+++ b/test/unit-test/test/host/audio/test_audio_host.c
@@ -261,6 +261,10 @@ static const uint8_t midi_only_collection[] = {
0,
};
+static const uint8_t uac2_control_interface[] = {
+ 9, TUSB_DESC_INTERFACE, AUDIO_AC_ITF, 0, 0, TUSB_CLASS_AUDIO, AUDIO_SUBCLASS_CONTROL, AUDIO_INT_PROTOCOL_CODE_V2, 0,
+};
+
static const uint8_t playback_with_implicit_feedback[] = {
TEST_UAC1_AC_HEADER_2,
TEST_UAC1_INPUT_TERM(PLAYBACK_INPUT_TERM, AUDIO_TERM_TYPE_USB_STREAMING, 2),
@@ -489,6 +493,15 @@ void test_audio_host_ignores_explicit_feedback_endpoint(void) {
TEST_ASSERT_EQUAL_UINT8(1, tuh_audio_config_count(0, 0));
}
+void test_audio_host_rejects_uac2_interface_without_consuming_instance(void) {
+ TEST_ASSERT_EQUAL_UINT16(0, audioh_open(0, AUDIO_DEV_ADDR, (const tusb_desc_interface_t *)uac2_control_interface,
+ sizeof(uac2_control_interface)));
+ TEST_ASSERT_EQUAL_UINT8(0, tuh_audio_get_dev_addr(0));
+
+ open_descriptors(playback_with_explicit_feedback, sizeof(playback_with_explicit_feedback));
+ TEST_ASSERT_EQUAL_UINT8(1, tuh_audio_stream_count(0));
+}
+
void test_audio_host_treats_implicit_feedback_as_audio_in_endpoint(void) {
open_descriptors(playback_with_implicit_feedback, sizeof(playback_with_implicit_feedback));