218 lines
7.0 KiB
C
218 lines
7.0 KiB
C
/*
|
|
* Copyright (c) CompanyNameMagicTag 2020-2021. All rights reserved.
|
|
* Description: source file for module operation
|
|
*/
|
|
|
|
#ifndef _SAMPLE_AUDIO_API_H_
|
|
#define _SAMPLE_AUDIO_API_H_
|
|
|
|
#include "soc_uapi_adec.h"
|
|
#include "soc_uapi_aenc.h"
|
|
#include "soc_uapi_sound.h"
|
|
#include "soc_uapi_sea.h"
|
|
#include "chip_type.h"
|
|
#include "circ_buf.h"
|
|
#include "cmsis_os.h"
|
|
#include "audio_debug.h"
|
|
#include "soc_osal.h"
|
|
#include "tcxo.h"
|
|
|
|
#ifdef BRANDY_PROT
|
|
#define sap_printf
|
|
#elif (SAP_CHIP_TYPE == socmn1)
|
|
#include "ha_usart.h"
|
|
#define sap_printf UART_PRINTF
|
|
#else
|
|
#define sap_printf printf
|
|
#endif /* SAP_CHIP_TYPE */
|
|
|
|
#define EXT_SUCCESS 0
|
|
#define EXT_FAILURE (-1)
|
|
|
|
#define sap_msleep(ms) osDelay(ms) /* osDelay(1) : 1ms */
|
|
#define sap_udelay uapi_tcxo_delay_us
|
|
#define sap_mdelay uapi_tcxo_delay_ms
|
|
|
|
#define THREAD_SLEEP_5MS 5
|
|
#define THREAD_SLEEP_10MS 10
|
|
#define THREAD_HEART_BEAT_DUR 100
|
|
#define FILE_READ_LEN 0x400 /* 1K */
|
|
#define FILE_READ_LEN_MIN 0x80 /* 128B */
|
|
|
|
#define FILE_PATH_LEN 256
|
|
#define FILE_STREAM_PATH "/user/stream"
|
|
|
|
#if (SAP_CHIP_TYPE == brandy)
|
|
#define PSRAM_BRANDY_BASE_ADDR 0x6c001000 /* brandy/common_config/psram.h */
|
|
#define PSRAM_AUDIO_OFFSET 0x200000 /* brandy/common_config/psram.h */
|
|
|
|
#define PSRAM_AUDIO_BASE_ADDR (PSRAM_BRANDY_BASE_ADDR + PSRAM_AUDIO_OFFSET)
|
|
#define PSRAM_ADUIO_LENGTH 0x533380 /* brandy/common_config/psram.h */
|
|
|
|
#define FPGA_SAVE_DATA_ADDR PSRAM_AUDIO_BASE_ADDR /* 0x6c201000 */
|
|
#define FPGA_SAVE_DATA_SIZE 0x100000 /* 1M */
|
|
|
|
#define FPGA_READ_DATA_ADDR (FPGA_SAVE_DATA_ADDR + FPGA_SAVE_DATA_SIZE) /* 0x6c301000 */
|
|
#define FPGA_READ_DATA_SIZE 0x100000 /* 1M */
|
|
|
|
#define FPGA_READ_PCM_DATA_ADDR (FPGA_READ_DATA_ADDR + FPGA_READ_DATA_SIZE) /* 0x6c401000 */
|
|
#define FPGA_READ_PCM_DATA_SIZE 0x100000 /* 1M */
|
|
|
|
#define FPGA_DUMP_DATA_ADDR (FPGA_READ_PCM_DATA_ADDR + FPGA_READ_PCM_DATA_SIZE) /* 0x6c501000 */
|
|
#define FPGA_DUMP_DATA_SIZE \
|
|
(PSRAM_ADUIO_LENGTH - (FPGA_SAVE_DATA_SIZE + FPGA_READ_DATA_SIZE + FPGA_READ_PCM_DATA_SIZE)) /* 0x233380: 2M+ */
|
|
|
|
#define FPGA_FLASH_ES_DATA_MP3_ADDR FPGA_READ_DATA_ADDR
|
|
#define FPGA_FLASH_ES_DATA_SBC_ADDR FPGA_READ_DATA_ADDR
|
|
#define FPGA_FLASH_PCM_DATA_ADDR FPGA_READ_PCM_DATA_ADDR
|
|
|
|
#define FPGA_FLASH_ES_SIZE FPGA_READ_DATA_SIZE
|
|
#define FPGA_FLASH_PCM_SIZE FPGA_READ_PCM_DATA_SIZE
|
|
|
|
#else /* socmn1 */
|
|
#define FPGA_SAVE_DATA_ADDR 0x5818c000
|
|
#define FPGA_SAVE_DATA_SIZE 0x40000
|
|
|
|
#define FPGA_FLASH_OFFSET_BASEADDR 0x58122000
|
|
#define FPGA_FLASH_ES_DATA_MP3_ADDR FPGA_FLASH_OFFSET_BASEADDR
|
|
#define FPGA_FLASH_ES_DATA_SBC_ADDR FPGA_FLASH_OFFSET_BASEADDR
|
|
#define FPGA_FLASH_PCM_DATA_ADDR FPGA_FLASH_OFFSET_BASEADDR
|
|
|
|
#define FPGA_FLASH_ES_SIZE 0x100000
|
|
#define FPGA_FLASH_PCM_SIZE 0x80000
|
|
|
|
#define FPGA_DUMP_DATA_ADDR 0x58122000
|
|
#define FPGA_DUMP_DATA_SIZE 0x80000
|
|
|
|
#endif
|
|
|
|
#define BITS_NUM_PER_BYTE 8
|
|
#define HZ_NUM_PER_KHZ 1000
|
|
|
|
#define AI_VOLUME_DEFAULT 30
|
|
#define BT_A2DP_MTU_SIZE 1005
|
|
#define BT_SCO_FRAME_SIZE 57
|
|
|
|
#if (SAP_CHIP_TYPE == brandy)
|
|
#define SND_OUT_PORT_DEFAULT UAPI_SND_OUT_PORT_I2S2 /* Out port for SmartPA SPK output */
|
|
#else
|
|
#define SND_OUT_PORT_DEFAULT UAPI_SND_OUT_PORT_DAC0
|
|
#endif
|
|
|
|
/* sound local output default pcm format */
|
|
#define SND_OUT_SAMPLE_RATE_DEF UAPI_AUDIO_SAMPLE_RATE_48K
|
|
#define SND_OUT_BIT_DEPTH_DEF UAPI_AUDIO_BIT_DEPTH_16
|
|
#define SND_OUT_CHANNEL_DEF UAPI_AUDIO_CHANNEL_2
|
|
#define SND_OUT_I2S_MST_DEF TD_TRUE /* TD_TRUE:master;TD_FALSE:slave */
|
|
#define SND_OUT_I2S_DATA_EDGE_DEF TD_TRUE /* TD_TRUE:Rising;TD_FALSE:Falling */
|
|
#define SND_OUT_FRAME_MODE_WORD_LEN UAPI_AUDIO_BIT_DEPTH_16 /* 16:for pcm16/i2s32, 32:for pcm32/i2s64 */
|
|
|
|
/* I2S for CAT1 default i2s attr */
|
|
#define SIO_CAT1_I2S_SAMPLE_RATE_DEF UAPI_AUDIO_SAMPLE_RATE_16K
|
|
#define SIO_CAT1_I2S_CHANNEL_DEF UAPI_AUDIO_CHANNEL_2
|
|
#define SIO_CAT1_I2S_PCM_DELAY_DEF UAPI_AUDIO_I2S_PCM_0_DELAY
|
|
#define SIO_CAT1_I2S_MST_DEF TD_TRUE /* TD_TRUE:master;TD_FALSE:slave */
|
|
#define SIO_CAT1_I2S_DATA_EDGE_DEF TD_TRUE /* TD_TRUE:Rising;TD_FALSE:Falling */
|
|
#define SIO_CAT1_FRAME_MODE_WORD_LEN UAPI_AUDIO_BIT_DEPTH_16 /* 16:for pcm16/i2s32, 32:for pcm32/i2s64 */
|
|
|
|
#define sap_min(a, b) ((a) < (b) ? (a) : (b))
|
|
#define sap_max(a, b) ((a) > (b) ? (a) : (b))
|
|
|
|
#define sap_unused(var) \
|
|
do { \
|
|
(void)(var); \
|
|
} while (0)
|
|
|
|
#define clear_obj(obj) ((*(obj)) = (__typeof__(*(obj))) { 0 })
|
|
|
|
typedef enum {
|
|
GUI_AEF_AO,
|
|
GUI_AEF_SEA,
|
|
GUI_AEF_HAID,
|
|
GUI_AEF_MAX,
|
|
} gui_aef_type;
|
|
|
|
typedef struct {
|
|
gui_aef_type type;
|
|
td_handle handle;
|
|
} gui_aef_str;
|
|
|
|
typedef struct {
|
|
td_u8 *buf;
|
|
td_u32 size;
|
|
td_u32 read;
|
|
td_u32 write;
|
|
circ_buf cb;
|
|
} data_info;
|
|
|
|
static inline td_void data_info_init(data_info *d, td_u32 buf, td_u32 size)
|
|
{
|
|
d->buf = (td_u8 *)(td_uintptr_t)buf;
|
|
d->size = size;
|
|
d->read = 0;
|
|
d->write = 0;
|
|
circ_buf_init(&d->cb, &d->write, &d->read, d->buf, d->size);
|
|
}
|
|
|
|
typedef struct {
|
|
const td_char *file;
|
|
uapi_acodec_id acodec_id;
|
|
uapi_audio_pcm_format pcm_format;
|
|
} sample_acodec_arg;
|
|
|
|
typedef struct {
|
|
td_handle *player; /* cast_player input adp */
|
|
const sample_acodec_arg *in_arg; /* cast player input es attr */
|
|
td_handle *snd; /* cast_player output track */
|
|
const uapi_snd_attr *snd_attr; /* cast player output pcm attr */
|
|
uapi_snd_aef_profile aef_profile;
|
|
} sample_escast_arg;
|
|
|
|
td_s32 sample_ao(td_s32 argc, td_char *argv[]);
|
|
td_s32 sample_ai(td_s32 argc, td_char *argv[]);
|
|
td_s32 sample_encode(td_s32 argc, td_char *argv[]);
|
|
td_s32 sample_decode(td_s32 argc, td_char *argv[]);
|
|
|
|
td_s32 sample_esplay_open(const sample_acodec_arg *acodec_arg, const td_handle *player,
|
|
uapi_snd_aef_profile aef_profile);
|
|
td_void sample_esplay_close(td_void);
|
|
|
|
td_s32 sample_escast_open(sample_escast_arg *escast_arg);
|
|
td_void sample_escast_close(td_void);
|
|
|
|
td_s32 sample_ao_player_open(sample_escast_arg *escast_arg, uapi_snd snd_id);
|
|
td_void sample_ao_player_close(td_void);
|
|
|
|
td_s32 sample_cast_aenc_play(td_s32 argc, td_char *argv[]);
|
|
td_s32 sample_encode_play(td_s32 argc, td_char *argv[]);
|
|
td_s32 sample_ai_aenc(td_s32 argc, td_char *argv[]);
|
|
td_s32 sample_ai_sea_aenc(td_s32 argc, td_char *argv[]);
|
|
td_s32 sample_ai_ao(td_s32 argc, td_char *argv[]);
|
|
td_s32 sample_sea(td_s32 argc, td_char *argv[]);
|
|
td_s32 sample_gui_aef(td_s32 argc, td_char *argv[]);
|
|
#if defined(SAP_HAID_SUPPORT)
|
|
td_s32 sample_haid(td_s32 argc, td_char *argv[]);
|
|
td_void sample_gui_haid_register_param(td_void *params);
|
|
td_s32 sample_spk_calib(td_s32 argc, td_char *argv[]);
|
|
#endif
|
|
#if defined(SAP_DPM_SUPPORT)
|
|
td_s32 sample_dpm(td_s32 argc, td_char *argv[]);
|
|
#endif /* SAP_DPM_SUPPORT */
|
|
td_s32 sample_lpwk(td_s32 argc, td_char *argv[]);
|
|
|
|
td_s32 sample_phone_application(td_s32 argc, td_char *argv[]);
|
|
td_s32 sample_phone_protocol(td_s32 argc, td_char *argv[]);
|
|
|
|
td_s32 sample_dump(td_s32 argc, td_char *argv[]);
|
|
|
|
td_s32 sample_proc(td_s32 argc, td_char *argv[]);
|
|
|
|
td_u32 sample_get_vector_size(td_void);
|
|
|
|
td_void sample_gui_aef_add_handle(td_u8 type, td_handle handle);
|
|
td_void sample_gui_aef_delete_handle(td_handle handle);
|
|
|
|
const td_u16 *sample_get_vector_16k_1ch_16bit(td_void);
|
|
|
|
#endif
|