213 lines
7.7 KiB
C
213 lines
7.7 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 __HAL_CODEC_H__
|
|
#define __HAL_CODEC_H__
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#include "plat_types.h"
|
|
#include "hal_aud.h"
|
|
|
|
#define DB_TO_QDB(n) ((n) * 4)
|
|
#define QDB_TO_DB(n) ((n) / 4)
|
|
|
|
enum HAL_CODEC_ID_T {
|
|
HAL_CODEC_ID_0 = 0,
|
|
HAL_CODEC_ID_NUM,
|
|
};
|
|
|
|
struct HAL_CODEC_CONFIG_T {
|
|
enum AUD_BITS_T bits;
|
|
enum AUD_SAMPRATE_T sample_rate;
|
|
enum AUD_CHANNEL_NUM_T channel_num;
|
|
enum AUD_CHANNEL_MAP_T channel_map;
|
|
|
|
uint32_t use_dma:1;
|
|
uint32_t vol:5;
|
|
|
|
enum AUD_IO_PATH_T io_path;
|
|
|
|
uint32_t set_flag;
|
|
};
|
|
|
|
struct dac_classg_cfg {
|
|
uint8_t thd2;
|
|
uint8_t thd1;
|
|
uint8_t thd0;
|
|
uint8_t lr;
|
|
uint8_t step_4_3n;
|
|
uint8_t quick_down;
|
|
uint16_t wind_width;
|
|
};
|
|
|
|
enum HAL_CODEC_CONFIG_FLAG_T{
|
|
HAL_CODEC_CONFIG_NULL = 0x00,
|
|
|
|
HAL_CODEC_CONFIG_BITS = 0x01,
|
|
HAL_CODEC_CONFIG_SAMPLE_RATE = 0x02,
|
|
HAL_CODEC_CONFIG_CHANNEL_NUM = 0x04,
|
|
HAL_CODEC_CONFIG_CHANNEL_MAP = 0x08,
|
|
HAL_CODEC_CONFIG_VOL = 0x10,
|
|
|
|
HAL_CODEC_CONFIG_ALL = 0xff,
|
|
};
|
|
|
|
enum HAL_CODEC_DAC_RESET_STAGE_T {
|
|
HAL_CODEC_DAC_PRE_RESET,
|
|
HAL_CODEC_DAC_POST_RESET,
|
|
};
|
|
|
|
enum HAL_CODEC_SYNC_TYPE_T {
|
|
HAL_CODEC_SYNC_TYPE_NONE,
|
|
HAL_CODEC_SYNC_TYPE_GPIO,
|
|
HAL_CODEC_SYNC_TYPE_BT,
|
|
HAL_CODEC_SYNC_TYPE_WIFI,
|
|
};
|
|
|
|
enum HAL_CODEC_PERF_TEST_POWER_T {
|
|
HAL_CODEC_PERF_TEST_30MW,
|
|
HAL_CODEC_PERF_TEST_10MW,
|
|
HAL_CODEC_PERF_TEST_5MW,
|
|
HAL_CODEC_PERF_TEST_M60DB,
|
|
|
|
HAL_CODEC_PERF_TEST_QTY
|
|
};
|
|
|
|
enum HAL_CODEC_IIR_USER_T {
|
|
HAL_CODEC_IIR_USER_ANC,
|
|
HAL_CODEC_IIR_USER_EQ,
|
|
|
|
HAL_CODEC_IIR_USER_QTY,
|
|
};
|
|
|
|
enum HAL_CODEC_TIMER_TRIG_MODE_T {
|
|
HAL_CODEC_TIMER_TRIG_MODE_DAC,
|
|
HAL_CODEC_TIMER_TRIG_MODE_ADC,
|
|
HAL_CODEC_TIMER_TRIG_MODE_ANY,
|
|
|
|
HAL_CODEC_TIMER_TRIG_MODE_QTY,
|
|
};
|
|
|
|
typedef void (*HAL_CODEC_DAC_RESET_CALLBACK)(enum HAL_CODEC_DAC_RESET_STAGE_T stage);
|
|
typedef void (*HAL_CODEC_SW_OUTPUT_COEF_CALLBACK)(float coef);
|
|
typedef void (*HAL_CODEC_BT_TRIGGER_CALLBACK)(void);
|
|
typedef void (*HAL_CODEC_EVENT_TRIGGER_CALLBACK)(void);
|
|
typedef void (*HAL_CODEC_TIMER_TRIGGER_CALLBACK)(void);
|
|
typedef void (*HAL_CODEC_IRQ_CALLBACK)(uint32_t status);
|
|
|
|
uint32_t hal_codec_get_input_path_cfg(enum AUD_IO_PATH_T io_path);
|
|
const struct CODEC_DAC_VOL_T *hal_codec_get_dac_volume(uint32_t index);
|
|
const CODEC_ADC_VOL_T *hal_codec_get_adc_volume(uint32_t index);
|
|
uint32_t hal_codec_get_mic_chan_volume_level(uint32_t map);
|
|
uint8_t hal_codec_get_digmic_hw_index(uint8_t chan);
|
|
|
|
int hal_codec_open(enum HAL_CODEC_ID_T id);
|
|
int hal_codec_close(enum HAL_CODEC_ID_T id);
|
|
void hal_codec_crash_mute(void);
|
|
void hal_codec_stop_playback_stream(enum HAL_CODEC_ID_T id);
|
|
void hal_codec_start_playback_stream(enum HAL_CODEC_ID_T id);
|
|
int hal_codec_start_stream(enum HAL_CODEC_ID_T id, enum AUD_STREAM_T stream);
|
|
int hal_codec_stop_stream(enum HAL_CODEC_ID_T id, enum AUD_STREAM_T stream);
|
|
int hal_codec_start_interface(enum HAL_CODEC_ID_T id, enum AUD_STREAM_T stream, int dma);
|
|
int hal_codec_stop_interface(enum HAL_CODEC_ID_T id, enum AUD_STREAM_T stream);
|
|
int hal_codec_setup_stream(enum HAL_CODEC_ID_T id, enum AUD_STREAM_T stream, const struct HAL_CODEC_CONFIG_T *cfg);
|
|
int hal_codec_anc_adc_enable(enum ANC_TYPE_T type);
|
|
int hal_codec_anc_adc_disable(enum ANC_TYPE_T type);
|
|
enum AUD_SAMPRATE_T hal_codec_anc_convert_rate(enum AUD_SAMPRATE_T rate);
|
|
int hal_codec_anc_dma_enable(enum HAL_CODEC_ID_T id);
|
|
int hal_codec_anc_dma_disable(enum HAL_CODEC_ID_T id);
|
|
void hal_codec_set_anc_boost_gain_attn(float attn);
|
|
void hal_codec_apply_anc_adc_gain_offset(enum ANC_TYPE_T type, int8_t offset_l, int8_t offset_r);
|
|
int hal_codec_aux_mic_dma_enable(enum HAL_CODEC_ID_T id);
|
|
int hal_codec_aux_mic_dma_disable(enum HAL_CODEC_ID_T id);
|
|
uint32_t hal_codec_get_alg_dac_shift(void);
|
|
void hal_codec_set_dac_reset_callback(HAL_CODEC_DAC_RESET_CALLBACK callback);
|
|
void hal_codec_set_sw_output_coef_callback(HAL_CODEC_SW_OUTPUT_COEF_CALLBACK callback);
|
|
void hal_codec_dac_gain_m60db_check(enum HAL_CODEC_PERF_TEST_POWER_T type);
|
|
void hal_codec_set_noise_reduction(bool enable);
|
|
void hal_codec_classg_config(const struct dac_classg_cfg *cfg);
|
|
void hal_codec_set_dac_dc_gain_attn(float attn);
|
|
void hal_codec_set_dac_dc_offset(int16_t dc_l, int16_t dc_r);
|
|
void hal_codec_sidetone_enable(void);
|
|
void hal_codec_sidetone_disable(void);
|
|
int hal_codec_sidetone_gain_ramp_up(float step);
|
|
int hal_codec_sidetone_gain_ramp_down(float step);
|
|
void hal_codec_select_adc_iir_mic(uint32_t index, enum AUD_CHANNEL_MAP_T mic_map);
|
|
void hal_codec_dac_mute(bool mute);
|
|
void hal_codec_adc_mute(bool mute);
|
|
int hal_codec_set_chan_vol(enum AUD_STREAM_T stream, enum AUD_CHANNEL_MAP_T ch_map, uint8_t vol);
|
|
void hal_codec_sync_dac_enable(enum HAL_CODEC_SYNC_TYPE_T type);
|
|
void hal_codec_sync_dac_disable(void);
|
|
void hal_codec_sync_adc_enable(enum HAL_CODEC_SYNC_TYPE_T type);
|
|
void hal_codec_sync_adc_disable(void);
|
|
void hal_codec_sync_dac_resample_rate_enable(enum HAL_CODEC_SYNC_TYPE_T type);
|
|
void hal_codec_sync_dac_resample_rate_disable(void);
|
|
void hal_codec_sync_adc_resample_rate_enable(enum HAL_CODEC_SYNC_TYPE_T type);
|
|
void hal_codec_sync_adc_resample_rate_disable(void);
|
|
void hal_codec_sync_dac_gain_enable(enum HAL_CODEC_SYNC_TYPE_T type);
|
|
void hal_codec_sync_dac_gain_disable(void);
|
|
void hal_codec_sync_adc_gain_enable(enum HAL_CODEC_SYNC_TYPE_T type);
|
|
void hal_codec_sync_adc_gain_disable(void);
|
|
int hal_codec_dac_reset_set(void);
|
|
int hal_codec_dac_reset_clear(void);
|
|
int hal_codec_dac_sdm_reset_set(void);
|
|
int hal_codec_dac_sdm_reset_clear(void);
|
|
void hal_codec_tune_resample_rate(enum AUD_STREAM_T stream, float ratio);
|
|
void hal_codec_tune_both_resample_rate(float ratio);
|
|
void hal_codec_get_dac_gain(float *left_gain,float *right_gain);
|
|
int hal_codec_select_clock_out(uint32_t cfg);
|
|
int hal_codec_config_digmic_phase(uint8_t phase);
|
|
void hal_codec_setup_mc(enum AUD_CHANNEL_NUM_T channel_num, enum AUD_BITS_T bits);
|
|
void hal_codec_dsd_enable(void);
|
|
void hal_codec_dsd_disable(void);
|
|
void hal_codec_swap_output(bool swap);
|
|
|
|
void hal_codec_gpio_trigger_debounce_enable(void);
|
|
void hal_codec_gpio_trigger_debounce_disable(void);
|
|
|
|
uint32_t hal_codec_timer_get(void);
|
|
uint32_t hal_codec_timer_ticks_to_us(uint32_t ticks);
|
|
void hal_codec_timer_trigger_read(void);
|
|
|
|
void hal_codec_anc_fb_check_set_irq_handler(HAL_CODEC_IRQ_CALLBACK cb);
|
|
|
|
int hal_codec_vad_open(const struct AUD_VAD_CONFIG_T *cfg);
|
|
int hal_codec_vad_close(void);
|
|
int hal_codec_vad_start(void);
|
|
int hal_codec_vad_stop(void);
|
|
uint32_t hal_codec_vad_recv_data(uint8_t *dst, uint32_t dst_size);
|
|
void hal_codec_get_vad_data_info(struct CODEC_VAD_BUF_INFO_T* vad_buf_info);
|
|
|
|
void hal_codec_set_bt_trigger_callback(HAL_CODEC_BT_TRIGGER_CALLBACK callback);
|
|
int hal_codec_bt_trigger_start(void);
|
|
int hal_codec_bt_trigger_stop(void);
|
|
|
|
int hal_codec_iir_enable(enum HAL_CODEC_IIR_USER_T user, uint32_t speed);
|
|
int hal_codec_iir_disable(enum HAL_CODEC_IIR_USER_T user);
|
|
|
|
void hal_codec_min_phase_mode_enable(enum AUD_STREAM_T stream);
|
|
void hal_codec_min_phase_mode_disable(enum AUD_STREAM_T stream);
|
|
|
|
int hal_codec_timer_trig_i2s_enable(enum HAL_CODEC_TIMER_TRIG_MODE_T mode, uint32_t ticks, bool periodic);
|
|
int hal_codec_timer_trig_i2s_disable(void);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|