summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhathach <[email protected]>2020-10-07 13:36:03 +0700
committerhathach <[email protected]>2020-10-07 13:36:03 +0700
commit3f54c27afa39a3b9f2e5911b566416be460389fb (patch)
tree7c94fcb2b6387895020af98ec5c3e5442f4bcc7f
parentd41248900bedd705df2ccd5dfc53932cdb0839bb (diff)
fix audio_test build
-rw-r--r--.github/workflows/build.yml1
-rw-r--r--examples/device/audio_test/.skip.MCU_SAMD110
-rw-r--r--examples/device/audio_test/.skip.MCU_SAMG0
-rw-r--r--examples/device/audio_test/src/main.c44
-rw-r--r--examples/rules.mk1
-rw-r--r--src/class/audio/audio.h56
-rw-r--r--src/class/audio/audio_device.c8
-rw-r--r--src/class/audio/audio_device.h9
-rw-r--r--src/common/tusb_common.h8
9 files changed, 85 insertions, 42 deletions
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index da1f9e5e0..a891408ca 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -27,6 +27,7 @@ jobs:
fail-fast: false
matrix:
example:
+ - 'device/audio_test'
- 'device/board_test'
- 'device/cdc_dual_ports'
- 'device/cdc_msc'
diff --git a/examples/device/audio_test/.skip.MCU_SAMD11 b/examples/device/audio_test/.skip.MCU_SAMD11
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/examples/device/audio_test/.skip.MCU_SAMD11
diff --git a/examples/device/audio_test/.skip.MCU_SAMG b/examples/device/audio_test/.skip.MCU_SAMG
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/examples/device/audio_test/.skip.MCU_SAMG
diff --git a/examples/device/audio_test/src/main.c b/examples/device/audio_test/src/main.c
index e55c64c7c..2ea1d36c6 100644
--- a/examples/device/audio_test/src/main.c
+++ b/examples/device/audio_test/src/main.c
@@ -137,6 +137,7 @@ void audio_task(void)
bool tud_audio_set_req_ep_cb(uint8_t rhport, tusb_control_request_t const * p_request, uint8_t *pBuff)
{
(void) rhport;
+ (void) pBuff;
// We do not support any set range requests here, only current value requests
TU_VERIFY(p_request->bRequest == AUDIO_CS_REQ_CUR);
@@ -146,6 +147,8 @@ bool tud_audio_set_req_ep_cb(uint8_t rhport, tusb_control_request_t const * p_re
uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue);
uint8_t ep = TU_U16_LOW(p_request->wIndex);
+ (void) channelNum; (void) ctrlSel; (void) ep;
+
return false; // Yet not implemented
}
@@ -153,6 +156,7 @@ bool tud_audio_set_req_ep_cb(uint8_t rhport, tusb_control_request_t const * p_re
bool tud_audio_set_req_itf_cb(uint8_t rhport, tusb_control_request_t const * p_request, uint8_t *pBuff)
{
(void) rhport;
+ (void) pBuff;
// We do not support any set range requests here, only current value requests
TU_VERIFY(p_request->bRequest == AUDIO_CS_REQ_CUR);
@@ -162,6 +166,8 @@ bool tud_audio_set_req_itf_cb(uint8_t rhport, tusb_control_request_t const * p_r
uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue);
uint8_t itf = TU_U16_LOW(p_request->wIndex);
+ (void) channelNum; (void) ctrlSel; (void) itf;
+
return false; // Yet not implemented
}
@@ -176,39 +182,43 @@ bool tud_audio_set_req_entity_cb(uint8_t rhport, tusb_control_request_t const *
uint8_t itf = TU_U16_LOW(p_request->wIndex);
uint8_t entityID = TU_U16_HIGH(p_request->wIndex);
+ (void) itf;
+
// We do not support any set range requests here, only current value requests
TU_VERIFY(p_request->bRequest == AUDIO_CS_REQ_CUR);
// If request is for our feature unit
- if (entityID == 2)
+ if ( entityID == 2 )
{
- switch (ctrlSel)
+ switch ( ctrlSel )
{
case AUDIO_FU_CTRL_MUTE:
- // Request uses format layout 1
- TU_VERIFY(p_request->wLength == sizeof(audio_control_cur_1_t));
+ // Request uses format layout 1
+ TU_VERIFY(p_request->wLength == sizeof(audio_control_cur_1_t));
- mute[channelNum] = ((audio_control_cur_1_t *)pBuff)->bCur;
+ mute[channelNum] = ((audio_control_cur_1_t*) pBuff)->bCur;
- TU_LOG2(" Set Mute: %d of channel: %u\r\n", mute[channelNum], channelNum);
+ TU_LOG2(" Set Mute: %d of channel: %u\r\n", mute[channelNum], channelNum);
- return true;
+ return true;
case AUDIO_FU_CTRL_VOLUME:
- // Request uses format layout 2
- TU_VERIFY(p_request->wLength == sizeof(audio_control_cur_2_t));
+ // Request uses format layout 2
+ TU_VERIFY(p_request->wLength == sizeof(audio_control_cur_2_t));
- volume[channelNum] = ((audio_control_cur_2_t *)pBuff)->bCur;
+ volume[channelNum] = ((audio_control_cur_2_t*) pBuff)->bCur;
- TU_LOG2(" Set Volume: %d dB of channel: %u\r\n", volume[channelNum], channelNum);
+ TU_LOG2(" Set Volume: %d dB of channel: %u\r\n", volume[channelNum], channelNum);
- return true;
+ return true;
- // Unknown/Unsupported control
- default: TU_BREAKPOINT(); return false;
+ // Unknown/Unsupported control
+ default:
+ TU_BREAKPOINT();
+ return false;
}
}
- return false; // Yet not implemented
+ return false; // Yet not implemented
}
// Invoked when audio class specific get request received for an EP
@@ -221,6 +231,8 @@ bool tud_audio_get_req_ep_cb(uint8_t rhport, tusb_control_request_t const * p_re
uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue);
uint8_t ep = TU_U16_LOW(p_request->wIndex);
+ (void) channelNum; (void) ctrlSel; (void) ep;
+
// return tud_control_xfer(rhport, p_request, &tmp, 1);
return false; // Yet not implemented
@@ -236,6 +248,8 @@ bool tud_audio_get_req_itf_cb(uint8_t rhport, tusb_control_request_t const * p_r
uint8_t ctrlSel = TU_U16_HIGH(p_request->wValue);
uint8_t itf = TU_U16_LOW(p_request->wIndex);
+ (void) channelNum; (void) ctrlSel; (void) itf;
+
return false; // Yet not implemented
}
diff --git a/examples/rules.mk b/examples/rules.mk
index dacb81363..066956a40 100644
--- a/examples/rules.mk
+++ b/examples/rules.mk
@@ -33,6 +33,7 @@ SRC_C += \
src/common/tusb_fifo.c \
src/device/usbd.c \
src/device/usbd_control.c \
+ src/class/audio/audio_device.c \
src/class/cdc/cdc_device.c \
src/class/dfu/dfu_rt_device.c \
src/class/hid/hid_device.c \
diff --git a/src/class/audio/audio.h b/src/class/audio/audio.h
index 7e591fbe6..05e61f8df 100644
--- a/src/class/audio/audio.h
+++ b/src/class/audio/audio.h
@@ -469,28 +469,44 @@ typedef enum
/// Additional Audio Device Class Codes - Source: Audio Data Formats
/// A.1 - Audio Class-Format Type Codes UAC2
-typedef enum
-{
- AUDIO_FORMAT_TYPE_UNDEFINED = 0x00,
- AUDIO_FORMAT_TYPE_I = 0x01,
- AUDIO_FORMAT_TYPE_II = 0x02,
- AUDIO_FORMAT_TYPE_III = 0x03,
- AUDIO_FORMAT_TYPE_IV = 0x04,
- AUDIO_EXT_FORMAT_TYPE_I = 0x81,
- AUDIO_EXT_FORMAT_TYPE_II = 0x82,
- AUDIO_EXT_FORMAT_TYPE_III = 0x83,
-} audio_format_type_t;
+//typedef enum
+//{
+// AUDIO_FORMAT_TYPE_UNDEFINED = 0x00,
+// AUDIO_FORMAT_TYPE_I = 0x01,
+// AUDIO_FORMAT_TYPE_II = 0x02,
+// AUDIO_FORMAT_TYPE_III = 0x03,
+// AUDIO_FORMAT_TYPE_IV = 0x04,
+// AUDIO_EXT_FORMAT_TYPE_I = 0x81,
+// AUDIO_EXT_FORMAT_TYPE_II = 0x82,
+// AUDIO_EXT_FORMAT_TYPE_III = 0x83,
+//} audio_format_type_t;
+
+#define AUDIO_FORMAT_TYPE_UNDEFINED 0x00
+#define AUDIO_FORMAT_TYPE_I 0x01
+#define AUDIO_FORMAT_TYPE_II 0x02
+#define AUDIO_FORMAT_TYPE_III 0x03
+#define AUDIO_FORMAT_TYPE_IV 0x04
+#define AUDIO_EXT_FORMAT_TYPE_I 0x81
+#define AUDIO_EXT_FORMAT_TYPE_II 0x82
+#define AUDIO_EXT_FORMAT_TYPE_III 0x83
/// A.2.1 - Audio Class-Audio Data Format Type I UAC2
-typedef enum
-{
- AUDIO_DATA_FORMAT_TYPE_I_PCM = (uint32_t) (1 << 0),
- AUDIO_DATA_FORMAT_TYPE_I_PCM8 = (uint32_t) (1 << 1),
- AUDIO_DATA_FORMAT_TYPE_I_IEEE_FLOAT = (uint32_t) (1 << 2),
- AUDIO_DATA_FORMAT_TYPE_I_ALAW = (uint32_t) (1 << 3),
- AUDIO_DATA_FORMAT_TYPE_I_MULAW = (uint32_t) (1 << 4),
- AUDIO_DATA_FORMAT_TYPE_I_RAW_DATA = 0x100000000,
-} audio_data_format_type_I_t;
+//typedef enum
+//{
+// AUDIO_DATA_FORMAT_TYPE_I_PCM = (uint32_t) (1 << 0),
+// AUDIO_DATA_FORMAT_TYPE_I_PCM8 = (uint32_t) (1 << 1),
+// AUDIO_DATA_FORMAT_TYPE_I_IEEE_FLOAT = (uint32_t) (1 << 2),
+// AUDIO_DATA_FORMAT_TYPE_I_ALAW = (uint32_t) (1 << 3),
+// AUDIO_DATA_FORMAT_TYPE_I_MULAW = (uint32_t) (1 << 4),
+// AUDIO_DATA_FORMAT_TYPE_I_RAW_DATA = 0x100000000,
+//} audio_data_format_type_I_t;
+
+#define AUDIO_DATA_FORMAT_TYPE_I_PCM ((uint32_t) (1 << 0))
+#define AUDIO_DATA_FORMAT_TYPE_I_PCM8 ((uint32_t) (1 << 1))
+#define AUDIO_DATA_FORMAT_TYPE_I_IEEE_FLOAT ((uint32_t) (1 << 2))
+#define AUDIO_DATA_FORMAT_TYPE_I_ALAW ((uint32_t) (1 << 3))
+#define AUDIO_DATA_FORMAT_TYPE_I_MULAW ((uint32_t) (1 << 4))
+#define AUDIO_DATA_FORMAT_TYPE_I_RAW_DATA 0x100000000
/// All remaining definitions are taken from the descriptor descriptions in the UAC2 main specification
diff --git a/src/class/audio/audio_device.c b/src/class/audio/audio_device.c
index d208d1c84..0f501bb6e 100644
--- a/src/class/audio/audio_device.c
+++ b/src/class/audio/audio_device.c
@@ -564,9 +564,10 @@ static bool audiod_tx_done_type_I_pcm_ff_cb(uint8_t rhport, audiod_interface_t*
for (cntChannel = 1; cntChannel < CFG_TUD_AUDIO_N_CHANNELS_TX; cntChannel++)
{
- if (audio->tx_ff[cntChannel].count / CFG_TUD_AUDIO_TX_ITEMSIZE < nSamplesPerChannelToSend)
+ uint16_t const count = tu_fifo_count(&audio->tx_ff[cntChannel]);
+ if (count / CFG_TUD_AUDIO_TX_ITEMSIZE < nSamplesPerChannelToSend)
{
- nSamplesPerChannelToSend = audio->tx_ff[cntChannel].count * CFG_TUD_AUDIO_TX_ITEMSIZE;
+ nSamplesPerChannelToSend = count * CFG_TUD_AUDIO_TX_ITEMSIZE;
}
}
@@ -782,6 +783,8 @@ void audiod_reset(uint8_t rhport)
uint16_t audiod_open(uint8_t rhport, tusb_desc_interface_t const * itf_desc, uint16_t max_len)
{
+ (void) max_len;
+
TU_VERIFY ( TUSB_CLASS_AUDIO == itf_desc->bInterfaceClass &&
AUDIO_SUBCLASS_CONTROL == itf_desc->bInterfaceSubClass);
@@ -1171,6 +1174,7 @@ bool audiod_control_request(uint8_t rhport, tusb_control_request_t const * p_req
bool audiod_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes)
{
(void) result;
+ (void) xferred_bytes;
// Search for interface belonging to given end point address and proceed as required
uint8_t idxDriver;
diff --git a/src/class/audio/audio_device.h b/src/class/audio/audio_device.h
index f4029a84c..ab223de6f 100644
--- a/src/class/audio/audio_device.h
+++ b/src/class/audio/audio_device.h
@@ -33,7 +33,6 @@
#include "device/usbd.h"
#include "audio.h"
-#include "tusb_config.h"
//--------------------------------------------------------------------+
// Class Driver Configuration
@@ -59,6 +58,10 @@
#define CFG_TUD_AUDIO_TX_FIFO_SIZE 0 // Buffer size per channel
#endif
+#ifndef CFG_TUD_AUDIO_TX_DMA_RINGBUFFER_SIZE
+#define CFG_TUD_AUDIO_TX_DMA_RINGBUFFER_SIZE 0
+#endif
+
#if CFG_TUD_AUDIO_TX_FIFO_SIZE && CFG_TUD_AUDIO_TX_DMA_RINGBUFFER_SIZE
#error TX_FIFOs and TX_DMA_RINGBUFFER can not be used simultaneously!
#endif
@@ -193,6 +196,10 @@ uint16_t tud_audio_n_write_ep_in_buffer(uint8_t itf, const void * data, uint16_t
#endif
*/
+#ifndef CFG_TUD_AUDIO_TX_FIFO_COUNT
+#define CFG_TUD_AUDIO_TX_FIFO_COUNT 1
+#endif
+
#if CFG_TUD_AUDIO_EPSIZE_IN && CFG_TUD_AUDIO_TX_FIFO_SIZE
#if CFG_TUD_AUDIO_TX_FIFO_COUNT > 1
uint16_t tud_audio_n_write (uint8_t itf, uint8_t channelId, const void * data, uint16_t len);
diff --git a/src/common/tusb_common.h b/src/common/tusb_common.h
index d95c0ffc4..15892fa33 100644
--- a/src/common/tusb_common.h
+++ b/src/common/tusb_common.h
@@ -47,10 +47,10 @@
#define U16_TO_U8S_BE(u16) TU_U16_HIGH(u16), TU_U16_LOW(u16)
#define U16_TO_U8S_LE(u16) TU_U16_LOW(u16), TU_U16_HIGH(u16)
-#define U32_B1_U8(u32) ((uint8_t) (((u32) >> 24) & 0x000000ff)) // MSB
-#define U32_B2_U8(u32) ((uint8_t) (((u32) >> 16) & 0x000000ff))
-#define U32_B3_U8(u32) ((uint8_t) (((u32) >> 8) & 0x000000ff))
-#define U32_B4_U8(u32) ((uint8_t) ((u32) & 0x000000ff)) // LSB
+#define U32_B1_U8(u32) ((uint8_t) ((((uint32_t) u32) >> 24) & 0x000000ff)) // MSB
+#define U32_B2_U8(u32) ((uint8_t) ((((uint32_t) u32) >> 16) & 0x000000ff))
+#define U32_B3_U8(u32) ((uint8_t) ((((uint32_t) u32) >> 8) & 0x000000ff))
+#define U32_B4_U8(u32) ((uint8_t) (((uint32_t) u32) & 0x000000ff)) // LSB
#define U32_TO_U8S_BE(u32) U32_B1_U8(u32), U32_B2_U8(u32), U32_B3_U8(u32), U32_B4_U8(u32)
#define U32_TO_U8S_LE(u32) U32_B4_U8(u32), U32_B3_U8(u32), U32_B2_U8(u32), U32_B1_U8(u32)