fix audio_test build
This commit is contained in:
parent
d41248900b
commit
3f54c27afa
|
@ -27,6 +27,7 @@ jobs:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
example:
|
example:
|
||||||
|
- 'device/audio_test'
|
||||||
- 'device/board_test'
|
- 'device/board_test'
|
||||||
- 'device/cdc_dual_ports'
|
- 'device/cdc_dual_ports'
|
||||||
- 'device/cdc_msc'
|
- 'device/cdc_msc'
|
||||||
|
|
|
@ -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)
|
bool tud_audio_set_req_ep_cb(uint8_t rhport, tusb_control_request_t const * p_request, uint8_t *pBuff)
|
||||||
{
|
{
|
||||||
(void) rhport;
|
(void) rhport;
|
||||||
|
(void) pBuff;
|
||||||
|
|
||||||
// We do not support any set range requests here, only current value requests
|
// We do not support any set range requests here, only current value requests
|
||||||
TU_VERIFY(p_request->bRequest == AUDIO_CS_REQ_CUR);
|
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 ctrlSel = TU_U16_HIGH(p_request->wValue);
|
||||||
uint8_t ep = TU_U16_LOW(p_request->wIndex);
|
uint8_t ep = TU_U16_LOW(p_request->wIndex);
|
||||||
|
|
||||||
|
(void) channelNum; (void) ctrlSel; (void) ep;
|
||||||
|
|
||||||
return false; // Yet not implemented
|
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)
|
bool tud_audio_set_req_itf_cb(uint8_t rhport, tusb_control_request_t const * p_request, uint8_t *pBuff)
|
||||||
{
|
{
|
||||||
(void) rhport;
|
(void) rhport;
|
||||||
|
(void) pBuff;
|
||||||
|
|
||||||
// We do not support any set range requests here, only current value requests
|
// We do not support any set range requests here, only current value requests
|
||||||
TU_VERIFY(p_request->bRequest == AUDIO_CS_REQ_CUR);
|
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 ctrlSel = TU_U16_HIGH(p_request->wValue);
|
||||||
uint8_t itf = TU_U16_LOW(p_request->wIndex);
|
uint8_t itf = TU_U16_LOW(p_request->wIndex);
|
||||||
|
|
||||||
|
(void) channelNum; (void) ctrlSel; (void) itf;
|
||||||
|
|
||||||
return false; // Yet not implemented
|
return false; // Yet not implemented
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -176,19 +182,21 @@ 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 itf = TU_U16_LOW(p_request->wIndex);
|
||||||
uint8_t entityID = TU_U16_HIGH(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
|
// We do not support any set range requests here, only current value requests
|
||||||
TU_VERIFY(p_request->bRequest == AUDIO_CS_REQ_CUR);
|
TU_VERIFY(p_request->bRequest == AUDIO_CS_REQ_CUR);
|
||||||
|
|
||||||
// If request is for our feature unit
|
// If request is for our feature unit
|
||||||
if (entityID == 2)
|
if ( entityID == 2 )
|
||||||
{
|
{
|
||||||
switch (ctrlSel)
|
switch ( ctrlSel )
|
||||||
{
|
{
|
||||||
case AUDIO_FU_CTRL_MUTE:
|
case AUDIO_FU_CTRL_MUTE:
|
||||||
// Request uses format layout 1
|
// Request uses format layout 1
|
||||||
TU_VERIFY(p_request->wLength == sizeof(audio_control_cur_1_t));
|
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);
|
||||||
|
|
||||||
|
@ -198,14 +206,16 @@ bool tud_audio_set_req_entity_cb(uint8_t rhport, tusb_control_request_t const *
|
||||||
// Request uses format layout 2
|
// Request uses format layout 2
|
||||||
TU_VERIFY(p_request->wLength == sizeof(audio_control_cur_2_t));
|
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
|
// Unknown/Unsupported control
|
||||||
default: TU_BREAKPOINT(); return false;
|
default:
|
||||||
|
TU_BREAKPOINT();
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false; // Yet not implemented
|
return false; // Yet not implemented
|
||||||
|
@ -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 ctrlSel = TU_U16_HIGH(p_request->wValue);
|
||||||
uint8_t ep = TU_U16_LOW(p_request->wIndex);
|
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 tud_control_xfer(rhport, p_request, &tmp, 1);
|
||||||
|
|
||||||
return false; // Yet not implemented
|
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 ctrlSel = TU_U16_HIGH(p_request->wValue);
|
||||||
uint8_t itf = TU_U16_LOW(p_request->wIndex);
|
uint8_t itf = TU_U16_LOW(p_request->wIndex);
|
||||||
|
|
||||||
|
(void) channelNum; (void) ctrlSel; (void) itf;
|
||||||
|
|
||||||
return false; // Yet not implemented
|
return false; // Yet not implemented
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -33,6 +33,7 @@ SRC_C += \
|
||||||
src/common/tusb_fifo.c \
|
src/common/tusb_fifo.c \
|
||||||
src/device/usbd.c \
|
src/device/usbd.c \
|
||||||
src/device/usbd_control.c \
|
src/device/usbd_control.c \
|
||||||
|
src/class/audio/audio_device.c \
|
||||||
src/class/cdc/cdc_device.c \
|
src/class/cdc/cdc_device.c \
|
||||||
src/class/dfu/dfu_rt_device.c \
|
src/class/dfu/dfu_rt_device.c \
|
||||||
src/class/hid/hid_device.c \
|
src/class/hid/hid_device.c \
|
||||||
|
|
|
@ -469,28 +469,44 @@ typedef enum
|
||||||
/// Additional Audio Device Class Codes - Source: Audio Data Formats
|
/// Additional Audio Device Class Codes - Source: Audio Data Formats
|
||||||
|
|
||||||
/// A.1 - Audio Class-Format Type Codes UAC2
|
/// A.1 - Audio Class-Format Type Codes UAC2
|
||||||
typedef enum
|
//typedef enum
|
||||||
{
|
//{
|
||||||
AUDIO_FORMAT_TYPE_UNDEFINED = 0x00,
|
// AUDIO_FORMAT_TYPE_UNDEFINED = 0x00,
|
||||||
AUDIO_FORMAT_TYPE_I = 0x01,
|
// AUDIO_FORMAT_TYPE_I = 0x01,
|
||||||
AUDIO_FORMAT_TYPE_II = 0x02,
|
// AUDIO_FORMAT_TYPE_II = 0x02,
|
||||||
AUDIO_FORMAT_TYPE_III = 0x03,
|
// AUDIO_FORMAT_TYPE_III = 0x03,
|
||||||
AUDIO_FORMAT_TYPE_IV = 0x04,
|
// AUDIO_FORMAT_TYPE_IV = 0x04,
|
||||||
AUDIO_EXT_FORMAT_TYPE_I = 0x81,
|
// AUDIO_EXT_FORMAT_TYPE_I = 0x81,
|
||||||
AUDIO_EXT_FORMAT_TYPE_II = 0x82,
|
// AUDIO_EXT_FORMAT_TYPE_II = 0x82,
|
||||||
AUDIO_EXT_FORMAT_TYPE_III = 0x83,
|
// AUDIO_EXT_FORMAT_TYPE_III = 0x83,
|
||||||
} audio_format_type_t;
|
//} 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
|
/// A.2.1 - Audio Class-Audio Data Format Type I UAC2
|
||||||
typedef enum
|
//typedef enum
|
||||||
{
|
//{
|
||||||
AUDIO_DATA_FORMAT_TYPE_I_PCM = (uint32_t) (1 << 0),
|
// 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_PCM8 = (uint32_t) (1 << 1),
|
||||||
AUDIO_DATA_FORMAT_TYPE_I_IEEE_FLOAT = (uint32_t) (1 << 2),
|
// 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_ALAW = (uint32_t) (1 << 3),
|
||||||
AUDIO_DATA_FORMAT_TYPE_I_MULAW = (uint32_t) (1 << 4),
|
// AUDIO_DATA_FORMAT_TYPE_I_MULAW = (uint32_t) (1 << 4),
|
||||||
AUDIO_DATA_FORMAT_TYPE_I_RAW_DATA = 0x100000000,
|
// AUDIO_DATA_FORMAT_TYPE_I_RAW_DATA = 0x100000000,
|
||||||
} audio_data_format_type_I_t;
|
//} 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
|
/// All remaining definitions are taken from the descriptor descriptions in the UAC2 main specification
|
||||||
|
|
||||||
|
|
|
@ -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++)
|
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)
|
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 &&
|
TU_VERIFY ( TUSB_CLASS_AUDIO == itf_desc->bInterfaceClass &&
|
||||||
AUDIO_SUBCLASS_CONTROL == itf_desc->bInterfaceSubClass);
|
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)
|
bool audiod_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes)
|
||||||
{
|
{
|
||||||
(void) result;
|
(void) result;
|
||||||
|
(void) xferred_bytes;
|
||||||
|
|
||||||
// Search for interface belonging to given end point address and proceed as required
|
// Search for interface belonging to given end point address and proceed as required
|
||||||
uint8_t idxDriver;
|
uint8_t idxDriver;
|
||||||
|
|
|
@ -33,7 +33,6 @@
|
||||||
#include "device/usbd.h"
|
#include "device/usbd.h"
|
||||||
|
|
||||||
#include "audio.h"
|
#include "audio.h"
|
||||||
#include "tusb_config.h"
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
// Class Driver Configuration
|
// Class Driver Configuration
|
||||||
|
@ -59,6 +58,10 @@
|
||||||
#define CFG_TUD_AUDIO_TX_FIFO_SIZE 0 // Buffer size per channel
|
#define CFG_TUD_AUDIO_TX_FIFO_SIZE 0 // Buffer size per channel
|
||||||
#endif
|
#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
|
#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!
|
#error TX_FIFOs and TX_DMA_RINGBUFFER can not be used simultaneously!
|
||||||
#endif
|
#endif
|
||||||
|
@ -193,6 +196,10 @@ uint16_t tud_audio_n_write_ep_in_buffer(uint8_t itf, const void * data, uint16_t
|
||||||
#endif
|
#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_EPSIZE_IN && CFG_TUD_AUDIO_TX_FIFO_SIZE
|
||||||
#if CFG_TUD_AUDIO_TX_FIFO_COUNT > 1
|
#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);
|
uint16_t tud_audio_n_write (uint8_t itf, uint8_t channelId, const void * data, uint16_t len);
|
||||||
|
|
|
@ -47,10 +47,10 @@
|
||||||
#define U16_TO_U8S_BE(u16) TU_U16_HIGH(u16), TU_U16_LOW(u16)
|
#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 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_B1_U8(u32) ((uint8_t) ((((uint32_t) u32) >> 24) & 0x000000ff)) // MSB
|
||||||
#define U32_B2_U8(u32) ((uint8_t) (((u32) >> 16) & 0x000000ff))
|
#define U32_B2_U8(u32) ((uint8_t) ((((uint32_t) u32) >> 16) & 0x000000ff))
|
||||||
#define U32_B3_U8(u32) ((uint8_t) (((u32) >> 8) & 0x000000ff))
|
#define U32_B3_U8(u32) ((uint8_t) ((((uint32_t) u32) >> 8) & 0x000000ff))
|
||||||
#define U32_B4_U8(u32) ((uint8_t) ((u32) & 0x000000ff)) // LSB
|
#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_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)
|
#define U32_TO_U8S_LE(u32) U32_B4_U8(u32), U32_B3_U8(u32), U32_B2_U8(u32), U32_B1_U8(u32)
|
||||||
|
|
Loading…
Reference in New Issue