mcu_hi3321_watch/application/audio/sample_audio_api.h
2025-05-26 20:15:20 +08:00

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