summaryrefslogtreecommitdiff
path: root/src/class
diff options
context:
space:
mode:
authorReinhard Panhuber <[email protected]>2020-07-25 14:31:25 +0200
committerReinhard Panhuber <[email protected]>2020-07-25 14:31:25 +0200
commit1269bb440a62120108ebe9a6d5436b88b28b4de3 (patch)
tree4df4ec0a77058b72f4cd32cbff74018bb5034710 /src/class
parente047fbe8fbc4727cee1fa720b82d4d6918a2d6c0 (diff)
Fix structure definition audio_control_range_X_n_t
Diffstat (limited to 'src/class')
-rw-r--r--src/class/audio/audio.h10
-rw-r--r--src/class/audio/audio_device.c22
2 files changed, 17 insertions, 15 deletions
diff --git a/src/class/audio/audio.h b/src/class/audio/audio.h
index 36f9f211c..8f2c0d214 100644
--- a/src/class/audio/audio.h
+++ b/src/class/audio/audio.h
@@ -874,7 +874,7 @@ typedef struct TU_ATTR_PACKED {
// 5.2.3.1 1-byte Control RANGE Parameter Block
#define audio_control_range_1_n_t(numSubRanges) \
struct TU_ATTR_PACKED { \
- uint16_t wNumSubRanges = numSubRanges; \
+ uint16_t wNumSubRanges; \
struct TU_ATTR_PACKED { \
int8_t bMin ; /*The setting for the MIN attribute of the nth subrange of the addressed Control*/\
int8_t bMax ; /*The setting for the MAX attribute of the nth subrange of the addressed Control*/\
@@ -884,8 +884,8 @@ typedef struct TU_ATTR_PACKED {
// 5.2.3.2 2-byte Control RANGE Parameter Block
#define audio_control_range_2_n_t(numSubRanges) \
- struct TU_ATTR_PACKED { \
- uint16_t wNumSubRanges = numSubRanges; \
+ struct TU_ATTR_PACKED { \
+ uint16_t wNumSubRanges; \
struct TU_ATTR_PACKED { \
int16_t bMin ; /*The setting for the MIN attribute of the nth subrange of the addressed Control*/\
int16_t bMax ; /*The setting for the MAX attribute of the nth subrange of the addressed Control*/\
@@ -895,8 +895,8 @@ typedef struct TU_ATTR_PACKED {
// 5.2.3.3 4-byte Control RANGE Parameter Block
#define audio_control_range_4_n_t(numSubRanges) \
- struct TU_ATTR_PACKED { \
- uint16_t wNumSubRanges = numSubRanges; \
+ struct TU_ATTR_PACKED { \
+ uint16_t wNumSubRanges; \
struct TU_ATTR_PACKED { \
int32_t bMin ; /*The setting for the MIN attribute of the nth subrange of the addressed Control*/\
int32_t bMax ; /*The setting for the MAX attribute of the nth subrange of the addressed Control*/\
diff --git a/src/class/audio/audio_device.c b/src/class/audio/audio_device.c
index 5f57c5e4a..b5fbf70f3 100644
--- a/src/class/audio/audio_device.c
+++ b/src/class/audio/audio_device.c
@@ -694,6 +694,8 @@ static bool audiod_get_interface(uint8_t rhport, tusb_control_request_t const *
TU_VERIFY(audiod_get_AS_interface_index(itf, &idxDriver, &idxItf, &dummy));
TU_VERIFY(tud_control_xfer(rhport, p_request, &_audiod_itf[idxDriver].altSetting[idxItf], 1));
+ TU_LOG2(" Get itf: %u - current alt: %u\r\n", itf, _audiod_itf[idxDriver].altSetting[idxItf]);
+
return true;
#else
@@ -709,9 +711,9 @@ static bool audiod_set_interface(uint8_t rhport, tusb_control_request_t const *
// Here we need to do the following:
- // 1. Find the audio driver interface which was assigned to the given interface which is to be set
+ // 1. Find the audio driver assigned to the given interface to be set
// Since one audio driver interface has to be able to cover an unknown number of interfaces (AC, AS + its alternate settings), the best memory efficient way to solve this is to always search through the descriptors.
- // The audio driver interface is mapped to an audio function by a reference pointer to the corresponding AC interface of this audio function which serves as a starting point for searching
+ // The audio driver is mapped to an audio function by a reference pointer to the corresponding AC interface of this audio function which serves as a starting point for searching
// 2. Close EPs which are currently open
// To do so it is not necessary to know the current active alternate interface since we already save the current EP addresses - we simply close them
@@ -721,6 +723,8 @@ static bool audiod_set_interface(uint8_t rhport, tusb_control_request_t const *
uint8_t const itf = tu_u16_low(p_request->wIndex);
uint8_t const alt = tu_u16_low(p_request->wValue);
+ TU_LOG2(" Set itf: %u - alt: %u\r\n", itf, alt);
+
// Find index of audio streaming interface and index of interface
uint8_t idxDriver, idxItf;
uint8_t const *p_desc;
@@ -768,7 +772,8 @@ static bool audiod_set_interface(uint8_t rhport, tusb_control_request_t const *
{
if (tu_desc_type(p_desc) == TUSB_DESC_ENDPOINT)
{
- TU_ASSERT(dcd_edpt_open(rhport, (tusb_desc_endpoint_t const *) p_desc), false);
+// TU_ASSERT(dcd_edpt_open(rhport, (tusb_desc_endpoint_t const *) p_desc), false);
+ TU_ASSERT(usbd_edpt_open(rhport, (tusb_desc_endpoint_t const *)p_desc));
uint8_t ep_addr = ((tusb_desc_endpoint_t const *) p_desc)->bEndpointAddress;
#if CFG_TUD_AUDIO_EPSIZE_IN > 0
@@ -813,18 +818,15 @@ static bool audiod_set_interface(uint8_t rhport, tusb_control_request_t const *
// Check for nothing found - we can rely on this since EP descriptors are never the last descriptors, there are always also class specific EP descriptors following!
TU_VERIFY(p_desc < p_desc_end);
+ // Save current alternative interface setting
+ _audiod_itf[idxDriver].altSetting[idxItf] = alt;
+
// Invoke callback
if (tud_audio_set_itf_cb)
{
- if (!tud_audio_set_itf_cb(rhport, p_request))
- {
- return false;
- }
+ if (!tud_audio_set_itf_cb(rhport, p_request)) return false;
}
- // Save current alternative interface setting
- _audiod_itf[idxDriver].altSetting[idxItf] = alt;
-
tud_control_status(rhport, p_request);
return true;