pinebuds/services/multimedia/audio/process/anc/include/anc_process.h
2022-08-15 17:20:27 +08:00

107 lines
3.2 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 __ANC_PROCESS_H__
#define __ANC_PROCESS_H__
#ifdef __cplusplus
extern "C" {
#endif
#include "plat_types.h"
#include "aud_section.h"
#include "hal_aud.h"
typedef enum {
ANC_NO_ERR=0,
ANC_TYPE_ERR,
ANC_GAIN_ERR,
ANC_OTHER_ERR,
ANC_ERR_TOTAL,
}ANC_ERROR;
typedef enum {
ANC_GAIN_NO_DELAY=0,
ANC_GAIN_DELAY,
ANC_GAIN_TOTAL,
}ANC_GAIN_TIME;
typedef struct _aud_fir_item
{
int32_t fir_bypass_flag;
int32_t fir_len;
int32_t fir_coef[AUD_COEF_LEN];
} aud_fir_item;
typedef struct _struct_anc_fir_cfg
{
aud_fir_item anc_fir_cfg_ff_l;
aud_fir_item anc_fir_cfg_ff_r;
aud_fir_item anc_fir_cfg_fb_l;
aud_fir_item anc_fir_cfg_fb_r;
aud_fir_item anc_fir_cfg_tt_l;
aud_fir_item anc_fir_cfg_tt_r;
aud_fir_item anc_fir_cfg_mc_l;
aud_fir_item anc_fir_cfg_mc_r;
} struct_anc_fir_cfg;
int anc_set_fir_cfg( struct_anc_fir_cfg * cfg, enum ANC_TYPE_T anc_type);
int anc_opened(enum ANC_TYPE_T anc_type);
int anc_open(enum ANC_TYPE_T anc_type);
void anc_close(enum ANC_TYPE_T anc_type);
int anc_disable(void);
int anc_enable(void);
int anc_set_cfg(const struct_anc_cfg * cfg,enum ANC_TYPE_T anc_type,ANC_GAIN_TIME anc_gain_delay);
int anc_set_gain(int32_t gain_ch_l, int32_t gain_ch_r,enum ANC_TYPE_T anc_type);
int anc_get_gain(int32_t *gain_ch_l, int32_t *gain_ch_r,enum ANC_TYPE_T anc_type);
int anc_get_cfg_gain(int32_t *gain_ch_l, int32_t *gain_ch_r,enum ANC_TYPE_T anc_type);
//void AncPduHardwarCh0(const short Coef[], short CoefLen);
//void AncPduHardwarCh1(const short Coef[], short CoefLen);
void AncPduHardwarCh0(const short Coef[], short CoefLen,short gain);
void AncPduHardwarCh1(const short Coef[], short CoefLen,short gain);
int anc_select_coef(enum AUD_SAMPRATE_T rate,enum ANC_INDEX index,enum ANC_TYPE_T anc_type,ANC_GAIN_TIME anc_gain_delay);
int anc_load_cfg(void);
int anc_cmd_receve_process(uint8_t *buf,uint32_t len);
int anc_cmd_send_process(uint8_t **pbuf,uint16_t *len);
enum ANC_INDEX anc_get_current_coef_index(void);
enum AUD_SAMPRATE_T anc_get_current_coef_samplerate(void);
int anc_mc_run_stereo(uint8_t *buf, int len,float left_gain,float right_gain,enum AUD_BITS_T sample_bit);
int anc_mc_run_mono(uint8_t *buf, int len,float left_gain,enum AUD_BITS_T sample_bit);
void anc_mc_run_init(enum AUD_SAMPRATE_T rate);
void anc_mc_run_setup(enum AUD_SAMPRATE_T rate);
void anc_disable_gain_updated_when_pass0(uint8_t on);
void anc_set_ch_map( int32_t ch_map );
void anc_fb_check_set(int32_t flag );
void anc_fb_check_irq_handler(uint32_t status);
void anc_fb_check_param(void);
void anc_fb_check_stop_timer(void);
#ifdef __cplusplus
}
#endif
#endif