pinebuds/tests/anc_usb/usb_audio_frm_defs.h

233 lines
9.0 KiB
C

/***************************************************************************
*
* Copyright 2015-2019 BES.
* All rights reserved. All unpublished rights reserved.
*
* No part of this work may be used or reproduced in any form or by any
* means, or stored in a database or retrieval system, without prior written
* permission of BES.
*
* Use of this work is governed by a license granted by BES.
* This work contains confidential and proprietary information of
* BES. which is protected by copyright, trade secret,
* trademark and other intellectual property rights.
*
****************************************************************************/
#ifndef __USB_AUDIO_FRM_DEFS_H__
#define __USB_AUDIO_FRM_DEFS_H__
#ifdef __cplusplus
extern "C" {
#endif
// Recv/send sample rates
#if 0
#elif defined(USB_AUDIO_384K)
#define SAMPLE_RATE_RECV 384000
#define SAMPLE_RATE_SEND 48000
#elif defined(USB_AUDIO_352_8K)
#define SAMPLE_RATE_RECV 352800
#define SAMPLE_RATE_SEND 44100
#elif defined(USB_AUDIO_192K)
#define SAMPLE_RATE_RECV 192000
#define SAMPLE_RATE_SEND 48000
#elif defined(USB_AUDIO_176_4K)
#define SAMPLE_RATE_RECV 176400
#define SAMPLE_RATE_SEND 44100
#elif defined(USB_AUDIO_96K)
#define SAMPLE_RATE_RECV 96000
#define SAMPLE_RATE_SEND 48000
#elif defined(USB_AUDIO_48K)
#define SAMPLE_RATE_RECV 48000
#define SAMPLE_RATE_SEND 48000
#elif defined(USB_AUDIO_44_1K)
#define SAMPLE_RATE_RECV 44100
#define SAMPLE_RATE_SEND 44100
#elif defined(USB_AUDIO_16K)
#define SAMPLE_RATE_RECV 16000
#define SAMPLE_RATE_SEND 16000
#else // 48K by default
#define SAMPLE_RATE_RECV 48000
#define SAMPLE_RATE_SEND 48000
#endif
// Playback sample rate
#if defined(CHIP_BEST1000) && defined(ANC_APP)
#if (SAMPLE_RATE_RECV % 8000)
#define SAMPLE_RATE_PLAYBACK 88200
#else
#define SAMPLE_RATE_PLAYBACK 96000
#endif
#elif defined(__AUDIO_RESAMPLE__) && defined(SW_PLAYBACK_RESAMPLE)
#define SAMPLE_RATE_PLAYBACK 50781
#else
#define SAMPLE_RATE_PLAYBACK SAMPLE_RATE_RECV
#endif
// Capture sample rate
#if defined(CHIP_BEST1000) && defined(ANC_APP)
#ifdef AUD_PLL_DOUBLE
#if defined(_DUAL_AUX_MIC_) || defined(CAPTURE_ANC_DATA)
#define SAMPLE_RATE_CAPTURE (SAMPLE_RATE_PLAYBACK * 8)
#else
#define SAMPLE_RATE_CAPTURE (SAMPLE_RATE_PLAYBACK * 2)
#endif
#else // !AUD_PLL_DOUBLE
#if defined(_DUAL_AUX_MIC_) || defined(CAPTURE_ANC_DATA)
#define SAMPLE_RATE_CAPTURE (SAMPLE_RATE_PLAYBACK * 4)
#else
#define SAMPLE_RATE_CAPTURE SAMPLE_RATE_PLAYBACK
#endif
#endif // !AUD_PLL_DOUBLE
#else // !(CHIP_BEST1000 && ANC_APP)
#if defined(CHIP_BEST1000) && defined(_DUAL_AUX_MIC_)
#define SAMPLE_RATE_CAPTURE (SAMPLE_RATE_SEND * 4)
#elif defined(__AUDIO_RESAMPLE__) && defined(SW_CAPTURE_RESAMPLE)
#define SAMPLE_RATE_CAPTURE 50781
#else
#define SAMPLE_RATE_CAPTURE SAMPLE_RATE_SEND
#endif
#endif // !(CHIP_BEST1000 && ANC_APP)
#ifdef USB_AUDIO_32BIT
#define SAMPLE_SIZE_PLAYBACK 4
#define SAMPLE_SIZE_RECV 4
#elif defined(USB_AUDIO_24BIT)
#define SAMPLE_SIZE_PLAYBACK 4
#define SAMPLE_SIZE_RECV 3
#else
#ifdef AUDIO_PLAYBACK_24BIT
#define SAMPLE_SIZE_PLAYBACK 4
#else
#define SAMPLE_SIZE_PLAYBACK 2
#endif
#define SAMPLE_SIZE_RECV 2
#endif
#ifdef USB_AUDIO_SEND_32BIT
#define SAMPLE_SIZE_CAPTURE 4
#define SAMPLE_SIZE_SEND 4
#elif defined(USB_AUDIO_SEND_24BIT)
#define SAMPLE_SIZE_CAPTURE 4
#define SAMPLE_SIZE_SEND 3
#else
#define SAMPLE_SIZE_CAPTURE 2
#define SAMPLE_SIZE_SEND 2
#endif
#define CHAN_NUM_PLAYBACK 2
#define CHAN_NUM_RECV 2
#ifdef USB_AUDIO_SEND_CHAN
#define CHAN_NUM_SEND USB_AUDIO_SEND_CHAN
#else
#define CHAN_NUM_SEND 2
#endif
#if defined(CHIP_BEST1000) && defined(ANC_APP)
#define CHAN_NUM_CAPTURE 2
#elif defined(USB_AUDIO_SPEECH)
#define CHAN_NUM_CAPTURE SPEECH_CODEC_CAPTURE_CHANNEL_NUM
#else
#define CHAN_NUM_CAPTURE CHAN_NUM_SEND
#endif
#define BYTE_TO_SAMP_PLAYBACK(n) ((n) / SAMPLE_SIZE_PLAYBACK / CHAN_NUM_PLAYBACK)
#define SAMP_TO_BYTE_PLAYBACK(n) ((n) * SAMPLE_SIZE_PLAYBACK * CHAN_NUM_PLAYBACK)
#define BYTE_TO_SAMP_CAPTURE(n) ((n) / SAMPLE_SIZE_CAPTURE / CHAN_NUM_CAPTURE)
#define SAMP_TO_BYTE_CAPTURE(n) ((n) * SAMPLE_SIZE_CAPTURE * CHAN_NUM_CAPTURE)
#define BYTE_TO_SAMP_RECV(n) ((n) / SAMPLE_SIZE_RECV / CHAN_NUM_RECV)
#define SAMP_TO_BYTE_RECV(n) ((n) * SAMPLE_SIZE_RECV * CHAN_NUM_RECV)
#define BYTE_TO_SAMP_SEND(n) ((n) / SAMPLE_SIZE_SEND / CHAN_NUM_SEND)
#define SAMP_TO_BYTE_SEND(n) ((n) * SAMPLE_SIZE_SEND * CHAN_NUM_SEND)
#define SAMP_RATE_TO_FRAME_SIZE(n) (((n) + (1000 - 1)) / 1000)
#define SAMPLE_FRAME_PLAYBACK SAMP_RATE_TO_FRAME_SIZE(SAMPLE_RATE_PLAYBACK)
#define SAMPLE_FRAME_CAPTURE SAMP_RATE_TO_FRAME_SIZE(SAMPLE_RATE_CAPTURE)
#define SAMPLE_FRAME_RECV SAMP_RATE_TO_FRAME_SIZE(SAMPLE_RATE_RECV)
#define SAMPLE_FRAME_SEND SAMP_RATE_TO_FRAME_SIZE(SAMPLE_RATE_SEND)
#define FRAME_SIZE_PLAYBACK SAMP_TO_BYTE_PLAYBACK(SAMPLE_FRAME_PLAYBACK)
#define FRAME_SIZE_CAPTURE SAMP_TO_BYTE_CAPTURE(SAMPLE_FRAME_CAPTURE)
#define FRAME_SIZE_RECV SAMP_TO_BYTE_RECV(SAMPLE_FRAME_RECV)
#define FRAME_SIZE_SEND SAMP_TO_BYTE_SEND(SAMPLE_FRAME_SEND)
#define PLAYBACK_TO_RECV_LEN(n) (SAMP_TO_BYTE_RECV((BYTE_TO_SAMP_PLAYBACK(n) * \
(SAMPLE_RATE_RECV / 100) + (SAMPLE_RATE_PLAYBACK / 100) - 1) / (SAMPLE_RATE_PLAYBACK / 100)))
#define CAPTURE_TO_SEND_LEN(n) (SAMP_TO_BYTE_SEND((BYTE_TO_SAMP_CAPTURE(n) * \
(SAMPLE_RATE_SEND / 100) + (SAMPLE_RATE_CAPTURE / 100) - 1) / (SAMPLE_RATE_CAPTURE / 100)))
#ifdef USB_HIGH_SPEED
#if defined(USB_AUDIO_384K) || defined(USB_AUDIO_352_8K)
#define MAX_FRAME_SIZE_PLAYBACK (SAMP_RATE_TO_FRAME_SIZE(384000) * 4 * CHAN_NUM_PLAYBACK)
#else
#define MAX_FRAME_SIZE_PLAYBACK (SAMP_RATE_TO_FRAME_SIZE(192000) * 4 * CHAN_NUM_PLAYBACK)
#endif
#else
// Same as (SAMP_RATE_TO_FRAME_SIZE(192000) * 2 * CHAN_NUM_PLAYBACK)
#define MAX_FRAME_SIZE_PLAYBACK (SAMP_RATE_TO_FRAME_SIZE(96000) * 4 * CHAN_NUM_PLAYBACK)
#endif
#if (defined(__AUDIO_RESAMPLE__) && defined(SW_CAPTURE_RESAMPLE)) || \
(defined(CHIP_BEST1000) && (defined(ANC_APP) || defined(_DUAL_AUX_MIC_)))
// Fixed capture sample rate
#define MAX_FRAME_SIZE_CAPTURE (SAMP_RATE_TO_FRAME_SIZE(SAMPLE_RATE_CAPTURE) * SAMPLE_SIZE_CAPTURE * CHAN_NUM_CAPTURE)
#else
#define MAX_FRAME_SIZE_CAPTURE (SAMP_RATE_TO_FRAME_SIZE(48000) * SAMPLE_SIZE_CAPTURE * CHAN_NUM_CAPTURE)
#endif
#ifdef USB_HIGH_SPEED
#if defined(USB_AUDIO_384K) || defined(USB_AUDIO_352_8K)
#define MAX_FRAME_SIZE_RECV (SAMP_RATE_TO_FRAME_SIZE(384000) * 4 * CHAN_NUM_RECV)
#else
#define MAX_FRAME_SIZE_RECV (SAMP_RATE_TO_FRAME_SIZE(192000) * 4 * CHAN_NUM_RECV)
#endif
#else
// Same as (SAMP_RATE_TO_FRAME_SIZE(192000) * 2 * CHAN_NUM_RECV)
#define MAX_FRAME_SIZE_RECV (SAMP_RATE_TO_FRAME_SIZE(96000) * 4 * CHAN_NUM_RECV)
#endif
#define MAX_FRAME_SIZE_SEND (SAMP_RATE_TO_FRAME_SIZE(48000) * SAMPLE_SIZE_SEND * CHAN_NUM_SEND)
// ----------------
// Buffer alignment
// ----------------
#define AF_DMA_LIST_CNT 4
#ifdef ADC_CH_SEP_BUFF
#define ADC_BURST_NUM 4
#define ADC_ALL_CH_DMA_BURST_SIZE (ADC_BURST_NUM * SAMPLE_SIZE_CAPTURE * CHAN_NUM_CAPTURE)
#define ADC_BUFF_ALIGN (ADC_ALL_CH_DMA_BURST_SIZE * AF_DMA_LIST_CNT)
#else
#define ADC_BUFF_ALIGN (4 * AF_DMA_LIST_CNT)
#endif
#if defined(__HW_FIR_DSD_PROCESS__)
// FIR DSD requires DAC buffer is aligned to 16-sample boundary for each FIR DMA process loop
#define DAC_BUFF_ALIGN (16 * SAMPLE_SIZE_PLAYBACK * CHAN_NUM_PLAYBACK * 2)
#else
#define DAC_BUFF_ALIGN (4 * AF_DMA_LIST_CNT)
#endif
// USB buffer is split into 2 parts, and transfers from the second half (similar to PING-PONG buffer)
#ifdef USB_AUDIO_DYN_CFG
// RECV type-I frame slot (sample_size*chan_num): 2*2=4, 3*2=6, 4*2=8. The least common multiple is 24
#define RECV_BUFF_ALIGN (2 * 24)
// SEND type-I frame slot (sample_size*chan_num): 2*2=4. The least common multiple is 4
#define SEND_BUFF_ALIGN (2 * 4)
#else
// If usb rx/tx pool is NOT used, the buffer size should be aligned to frame packet size
#define RECV_BUFF_ALIGN SAMP_TO_BYTE_RECV(2)
#define SEND_BUFF_ALIGN SAMP_TO_BYTE_SEND(2)
#endif
#define NON_EXP_ALIGN(val, exp) (((val) + ((exp) - 1)) / (exp) * (exp))
#ifdef __cplusplus
}
#endif
#endif