From f8ea57d683b0b8b5af8143b866f83f2b4a948f88 Mon Sep 17 00:00:00 2001 From: Steven Dan Date: Mon, 30 Mar 2026 10:28:50 +0800 Subject: [PATCH] uac1 hid --- .../lib_xua/src/core/endpoint0/xua_endpoint0.c | 2 +- .../src/core/endpoint0/xua_ep0_descriptors.h | 16 +++++++++++----- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/lib_xua/lib_xua/src/core/endpoint0/xua_endpoint0.c b/lib_xua/lib_xua/src/core/endpoint0/xua_endpoint0.c index b1b736f..1f70c11 100644 --- a/lib_xua/lib_xua/src/core/endpoint0/xua_endpoint0.c +++ b/lib_xua/lib_xua/src/core/endpoint0/xua_endpoint0.c @@ -579,7 +579,7 @@ void XUA_Endpoint0_init(chanend c_ep0_out, chanend c_ep0_in, NULLABLE_RESOURCE(c unsigned char hidReportDescriptorLengthLo = hidReportDescriptorLength & 0xFF; unsigned char hidReportDescriptorLengthHi = (hidReportDescriptorLength & 0xFF00) >> 8; -#if( AUDIO_CLASS == 1 ) +#if( AUDIO_CLASS == 1 && HID_CONTROLS_UAC1 == 1) cfgDesc_Audio1[USB_HID_DESCRIPTOR_OFFSET + HID_DESCRIPTOR_LENGTH_FIELD_OFFSET ] = hidReportDescriptorLengthLo; cfgDesc_Audio1[USB_HID_DESCRIPTOR_OFFSET + HID_DESCRIPTOR_LENGTH_FIELD_OFFSET + 1] = hidReportDescriptorLengthHi; #endif diff --git a/lib_xua/lib_xua/src/core/endpoint0/xua_ep0_descriptors.h b/lib_xua/lib_xua/src/core/endpoint0/xua_ep0_descriptors.h index 407397c..37e63d5 100644 --- a/lib_xua/lib_xua/src/core/endpoint0/xua_ep0_descriptors.h +++ b/lib_xua/lib_xua/src/core/endpoint0/xua_ep0_descriptors.h @@ -2392,12 +2392,18 @@ const unsigned num_freqs_a1 = MAX(3, (0 * - xua_hid_endpoint_descriptor_contents.h and * - xua_hid_interface_descriptor_contents.h */ + +#if (HID_CONTROLS_UAC1 == 1) #define HID_INTERFACE_BYTES ( 9 + 9 + (7 * (1 + HID_OUT_REQUIRED))) // always IN #define HID_INTERFACES_A1 1 #else #define HID_INTERFACE_BYTES 0 #define HID_INTERFACES_A1 0 #endif +#else +#define HID_INTERFACE_BYTES 0 +#define HID_INTERFACES_A1 0 +#endif /* Total number of bytes returned for the class-specific AudioControl interface descriptor. * Includes the combined length of this descriptor header and all Unit and Terminal descriptors @@ -2409,13 +2415,13 @@ const unsigned num_freqs_a1 = MAX(3, (0 #define STREAMING_INTERFACES (INPUT_INTERFACES_A1 + OUTPUT_INTERFACES_A1) /* Number of interfaces for Audio 1.0 (+1 for control ) */ -/* Note, this is different than INTERFACE_COUNT since we dont support items such as MIDI, iAP etc in UAC1 mode */ -#define NUM_INTERFACES_A1 (1 + INPUT_INTERFACES_A1 + OUTPUT_INTERFACES_A1 + MIDI_INTERFACES_A1 + NUM_CONTROL_USB_INTERFACES + DFU_INTERFACES_A1 + HID_INTERFACES_A1) +/* Note, this is different that INTERFACE_COUNT since we dont support items such as MIDI, iAP etc in UAC1 mode */ +#define NUM_INTERFACES_A1 (1 + INPUT_INTERFACES_A1 + OUTPUT_INTERFACES_A1 + NUM_CONTROL_USB_INTERFACES + DFU_INTERFACES_A1 + HID_INTERFACES_A1) #if ((NUM_USB_CHAN_IN == 0) || defined(UAC_FORCE_FEEDBACK_EP)) && (XUA_SYNCMODE == XUA_SYNCMODE_ASYNC) -#define CFG_TOTAL_LENGTH_A1 (18 + AC_TOTAL_LENGTH + (INPUT_INTERFACES_A1 * (49 + num_freqs_a1 * 3)) + (OUTPUT_INTERFACES_A1 * (58 + num_freqs_a1 * 3)) + MIDI_INTERFACE_BYTES + CONTROL_INTERFACE_BYTES + DFU_INTERFACE_BYTES + HID_INTERFACE_BYTES) +#define CFG_TOTAL_LENGTH_A1 (18 + AC_TOTAL_LENGTH + (INPUT_INTERFACES_A1 * (49 + num_freqs_a1 * 3)) + (OUTPUT_INTERFACES_A1 * (58 + num_freqs_a1 * 3)) + CONTROL_INTERFACE_BYTES + DFU_INTERFACE_BYTES + HID_INTERFACE_BYTES) #else -#define CFG_TOTAL_LENGTH_A1 (18 + AC_TOTAL_LENGTH + (INPUT_INTERFACES_A1 * (49 + num_freqs_a1 * 3)) + (OUTPUT_INTERFACES_A1 * (49 + num_freqs_a1 * 3)) + MIDI_INTERFACE_BYTES + CONTROL_INTERFACE_BYTES + DFU_INTERFACE_BYTES + HID_INTERFACE_BYTES) +#define CFG_TOTAL_LENGTH_A1 (18 + AC_TOTAL_LENGTH + (INPUT_INTERFACES_A1 * (49 + num_freqs_a1 * 3)) + (OUTPUT_INTERFACES_A1 * (49 + num_freqs_a1 * 3)) + CONTROL_INTERFACE_BYTES + DFU_INTERFACE_BYTES + HID_INTERFACE_BYTES) #endif #define INTERFACE_DESCRIPTOR_BYTES (9) @@ -2435,7 +2441,7 @@ const unsigned num_freqs_a1 = MAX(3, (0 #endif #if XUA_OR_STATIC_HID_ENABLED - #define USB_HID_DESCRIPTOR_OFFSET (18 + AC_TOTAL_LENGTH + (INPUT_INTERFACES_A1 * (49 + num_freqs_a1 * 3)) + (OUTPUT_INTERFACES_A1 * (49 + num_freqs_a1 * 3)) + MIDI_INTERFACE_BYTES + CONTROL_INTERFACE_BYTES + DFU_INTERFACE_BYTES + INTERFACE_DESCRIPTOR_BYTES) + #define USB_HID_DESCRIPTOR_OFFSET (18 + AC_TOTAL_LENGTH + (INPUT_INTERFACES_A1 * (49 + num_freqs_a1 * 3)) + (OUTPUT_INTERFACES_A1 * (49 + num_freqs_a1 * 3)) + CONTROL_INTERFACE_BYTES + DFU_INTERFACE_BYTES + 9 + 9 ) #endif #define CHARIFY_SR(x) (x & 0xff),((x & 0xff00)>> 8),((x & 0xff0000)>> 16)