summaryrefslogtreecommitdiff
path: root/src/class/audio
diff options
context:
space:
mode:
authorhathach <[email protected]>2025-07-08 10:09:24 +0700
committerhathach <[email protected]>2025-07-08 10:09:24 +0700
commita56f55c10bea2ce0d38de6a04edae41e6c814b9f (patch)
treee9a1791ce6ba17a2ac9a411f5c897f0911d28ff1 /src/class/audio
parent545690c83435fc9e972a65a4e46539c88f2a2853 (diff)
parentea64300a9ad57fbdcafbed189b3d358bf9b6912e (diff)
Merge remote-tracking branch 'origin/master' into xfer_isr
# Conflicts: # examples/device/audio_4_channel_mic_freertos/src/main.c # examples/device/audio_test_freertos/src/main.c # src/class/audio/audio_device.c
Diffstat (limited to 'src/class/audio')
-rw-r--r--src/class/audio/audio_device.c35
1 files changed, 19 insertions, 16 deletions
diff --git a/src/class/audio/audio_device.c b/src/class/audio/audio_device.c
index 290561a27..f440a63ef 100644
--- a/src/class/audio/audio_device.c
+++ b/src/class/audio/audio_device.c
@@ -919,20 +919,22 @@ uint16_t audiod_open(uint8_t rhport, tusb_desc_interface_t const *itf_desc, uint
ep_fb = desc_ep->bEndpointAddress;
}
#endif
- // Data EP
- if (desc_ep->bmAttributes.usage == 0) {
- if (tu_edpt_dir(desc_ep->bEndpointAddress) == TUSB_DIR_IN) {
#if CFG_TUD_AUDIO_ENABLE_EP_IN
- ep_in = desc_ep->bEndpointAddress;
- ep_in_size = TU_MAX(tu_edpt_packet_size(desc_ep), ep_in_size);
+ // Data or data with implicit feedback IN EP
+ if (tu_edpt_dir(desc_ep->bEndpointAddress) == TUSB_DIR_IN
+ && (desc_ep->bmAttributes.usage == 0 || desc_ep->bmAttributes.usage == 2)) {
+ ep_in = desc_ep->bEndpointAddress;
+ ep_in_size = TU_MAX(tu_edpt_packet_size(desc_ep), ep_in_size);
+ }
#endif
- } else {
#if CFG_TUD_AUDIO_ENABLE_EP_OUT
- ep_out = desc_ep->bEndpointAddress;
- ep_out_size = TU_MAX(tu_edpt_packet_size(desc_ep), ep_out_size);
- #endif
- }
+ // Data OUT EP
+ if (tu_edpt_dir(desc_ep->bEndpointAddress) == TUSB_DIR_OUT
+ && desc_ep->bmAttributes.usage == 0) {
+ ep_out = desc_ep->bEndpointAddress;
+ ep_out_size = TU_MAX(tu_edpt_packet_size(desc_ep), ep_out_size);
}
+ #endif
}
}
@@ -968,10 +970,10 @@ uint16_t audiod_open(uint8_t rhport, tusb_desc_interface_t const *itf_desc, uint
if (tu_desc_type(p_desc) == TUSB_DESC_ENDPOINT) {
tusb_desc_endpoint_t const *desc_ep = (tusb_desc_endpoint_t const *) p_desc;
if (desc_ep->bmAttributes.xfer == TUSB_XFER_ISOCHRONOUS) {
- if (desc_ep->bmAttributes.usage == 0) {
- if (tu_edpt_dir(desc_ep->bEndpointAddress) == TUSB_DIR_IN) {
- _audiod_fct[i].interval_tx = desc_ep->bInterval;
- }
+ // For data or data with implicit feedback IN EP
+ if (tu_edpt_dir(desc_ep->bEndpointAddress) == TUSB_DIR_IN
+ && (desc_ep->bmAttributes.usage == 0 || desc_ep->bmAttributes.usage == 2)) {
+ _audiod_fct[i].interval_tx = desc_ep->bInterval;
}
}
} else if (tu_desc_type(p_desc) == TUSB_DESC_CS_INTERFACE && tu_desc_subtype(p_desc) == AUDIO_CS_AC_INTERFACE_OUTPUT_TERMINAL) {
@@ -1143,8 +1145,9 @@ static bool audiod_set_interface(uint8_t rhport, tusb_control_request_t const *p
usbd_edpt_clear_stall(rhport, ep_addr);
#if CFG_TUD_AUDIO_ENABLE_EP_IN
- // Check if usage is data EP
- if (tu_edpt_dir(ep_addr) == TUSB_DIR_IN && desc_ep->bmAttributes.usage == 0x00) {
+ // For data or data with implicit feedback IN EP
+ if (tu_edpt_dir(ep_addr) == TUSB_DIR_IN && (desc_ep->bmAttributes.usage == 0 || desc_ep->bmAttributes.usage == 2))
+ {
// Save address
audio->ep_in = ep_addr;
audio->ep_in_as_intf_num = itf;