summaryrefslogtreecommitdiff
path: root/src/class
diff options
context:
space:
mode:
authorReinhard Panhuber <[email protected]>2020-06-13 12:36:05 +0200
committerReinhard Panhuber <[email protected]>2020-06-13 12:36:05 +0200
commit4362665fb3ec1ef0d749bbcdaabe161ce1c06614 (patch)
tree8d1603603673290e4433ddbdd23a52e287126807 /src/class
parentd2f1bb58b32c17731d1d6ee094b19ad5e1d8413f (diff)
Fix mic audio descriptor, fix too strict check on IAD desc. in usbd.c
Diffstat (limited to 'src/class')
-rw-r--r--src/class/audio/audio.h6
-rw-r--r--src/class/audio/audio_device.c8
-rw-r--r--src/class/audio/audio_device.h2
3 files changed, 12 insertions, 4 deletions
diff --git a/src/class/audio/audio.h b/src/class/audio/audio.h
index f4f460c22..022f3118f 100644
--- a/src/class/audio/audio.h
+++ b/src/class/audio/audio.h
@@ -57,6 +57,12 @@ typedef enum
AUDIO_SUBCLASS_MIDI_STREAMING , ///< MIDI Streaming
} audio_subclass_type_t;
+/// Audio Function Subclass Codes
+typedef enum
+{
+ AUDIO_FUNCTION_SUBCLASS_UNDEFINED = 0x00,
+} audio_function_subclass_type_t;
+
/// Audio Protocol Codes
typedef enum
{
diff --git a/src/class/audio/audio_device.c b/src/class/audio/audio_device.c
index fbd412564..1c9e0494e 100644
--- a/src/class/audio/audio_device.c
+++ b/src/class/audio/audio_device.c
@@ -632,7 +632,7 @@ void audiod_reset(uint8_t rhport)
}
}
-bool audiod_open(uint8_t rhport, tusb_desc_interface_t const * itf_desc, uint16_t *p_length)
+uint16_t audiod_open(uint8_t rhport, tusb_desc_interface_t const * itf_desc, uint16_t max_len)
{
TU_VERIFY ( TUSB_CLASS_AUDIO == itf_desc->bInterfaceClass &&
AUDIO_SUBCLASS_CONTROL == itf_desc->bInterfaceSubClass);
@@ -666,9 +666,11 @@ bool audiod_open(uint8_t rhport, tusb_desc_interface_t const * itf_desc, uint16_
// This is all we need so far - the EPs are setup by a later set_interface request (as per UAC2 specification)
// Notify caller we read complete descriptor
- (*p_length) += tud_audio_desc_lengths[i];
+// (*p_length) += tud_audio_desc_lengths[i];
+ // TODO: Find a way to find end of current audio function and avoid necessity of tud_audio_desc_lengths - since now max_length is available we could do this surely somehow
+ uint16_t drv_len = tud_audio_desc_lengths[i] - TUD_AUDIO_DESC_IAD_LEN; // - TUD_AUDIO_DESC_IAD_LEN since tinyUSB already handles the IAD descriptor
- return true;
+ return drv_len;
}
static bool audiod_get_interface(uint8_t rhport, tusb_control_request_t const * p_request)
diff --git a/src/class/audio/audio_device.h b/src/class/audio/audio_device.h
index 5354adbd4..3e1fa7a92 100644
--- a/src/class/audio/audio_device.h
+++ b/src/class/audio/audio_device.h
@@ -289,7 +289,7 @@ inline uint16_t tud_audio_int_ctr_write(uint8_t const* buffer, uint16_t bufsize)
//--------------------------------------------------------------------+
void audiod_init (void);
void audiod_reset (uint8_t rhport);
-bool audiod_open (uint8_t rhport, tusb_desc_interface_t const * itf_desc, uint16_t *p_length);
+uint16_t audiod_open (uint8_t rhport, tusb_desc_interface_t const * itf_desc, uint16_t max_len);
bool audiod_control_request (uint8_t rhport, tusb_control_request_t const * request);
bool audiod_control_complete (uint8_t rhport, tusb_control_request_t const * request);
bool audiod_xfer_cb (uint8_t rhport, uint8_t edpt_addr, xfer_result_t result, uint32_t xferred_bytes);