#ifndef _EQ_FUNC_DEFINE_H
#define _EQ_FUNC_DEFINE_H

#include "generic/typedef.h"

extern u32 EQ_PRIV_SECTION_NUM;
extern u32 EQ_SECTION_NUM;
extern const int const_eq_debug;
extern const int config_audio_drc_en;
extern const int config_audio_eq_en;
enum {
    EQ_EN = BIT(0),//eq模式使能
    EQ_SUPPORT_OLD_VER_EN = BIT(1),//ac700N,使能该bit可版本0.7.1.0， 0.7.1.1
    EQ_LITE_VER_EN = BIT(2),//精简版版本eq驱动，不支持异步，不支持默认效果切换接口，仅支持文件解析
    EQ_ONLINE_EN = BIT(3),  //在线调试模块使能
    EQ_FILE_EN = BIT(4),//打开支持文件解析,关闭则只能使用默认效果表做eq
    EQ_FILE_SWITCH_EN = BIT(5),//打开支持eq_cfg_hw.bin文件切换更新效果
    EQ_HIGH_BASS_EN  = BIT(6),//eq内部集成的高低音接口使能
    EQ_HIGH_BASS_FADE_EN = BIT(7),//eq内部集成高低音淡入淡出效果方式使能,配合config_audio_eq_fade_step使用
    EQ_FILTER_COEFF_FADE_EN = BIT(8),//eq默认系数表效果切换，或者在线调试效果更新，使用淡入淡出方式，避免增益跳跃引起的杂音问题
    EQ_FILTER_COEFF_LIMITER_ZERO_EN = BIT(9),//
    EQ_HW_UPDATE_COEFF_ONLY_EN = BIT(10),// 有空闲的段可以使用，就不需要切换系数 */
    EQ_HW_LR_ALONE = BIT(11),//// 左右声道分开处理与bit(10),同时使能或关闭
    EQ_SUPPORT_32BIT_SYNC_EN = BIT(12),//// 支持同步方式32biteq
    EQ_SUPPORT_MULIT_CHANNEL_EN = BIT(13),//AC699N、AC700N eq是否支持多声道（3~8） 打开:支持  关闭：仅支持1~2声道
    EQ_HW_CROSSOVER_TYPE0_EN  = BIT(14),//支持硬件分频器,且分频器使用序列进序列出，需使能BIT(13)
    EQ_HW_CROSSOVER_TYPE1_EN  = BIT(15),//硬件分频器使用使用块出方式，会增加mem(该方式仅支持单声道处理)
    EQ_LR_DIVIDE_EN = BIT(16),//eq左右声道效果拆分,四声道时可能会使用
    EQ_ONLINE_FILE_SAVE = BIT(17),//eq在线调试保存到vm使能
    EQ_DRC_PROCESS_SPLIT = BIT(18),//eq/drc节点处理，支持拆分
};

#define config_audio_eq_online_en      (config_audio_eq_en & EQ_ONLINE_EN)
#define config_audio_eq_file_en        (config_audio_eq_en & EQ_FILE_EN)
#define config_audio_eq_file_sw_en     (config_audio_eq_en & EQ_FILE_SWITCH_EN)
#define config_filter_coeff_fade_en    (config_audio_eq_en & EQ_FILTER_COEFF_FADE_EN)
#define config_high_bass_en            (config_audio_eq_en & EQ_HIGH_BASS_EN)
#define config_audio_eq_fade_en        (config_audio_eq_en & EQ_HIGH_BASS_FADE_EN)
#define config_filter_coeff_limit_zero (config_audio_eq_en & EQ_FILTER_COEFF_LIMITER_ZERO_EN)
#define HW_EQ_UPDATE_COEFF_ONLY_EN     (config_audio_eq_en & EQ_HW_UPDATE_COEFF_ONLY_EN)
#define HW_EQ_LR_ALONE                 (config_audio_eq_en & EQ_HW_LR_ALONE)
#define SUPPORT_32BIT_SYNC_EQ          (config_audio_eq_en & EQ_SUPPORT_32BIT_SYNC_EN)
#define hw_eq_support_multi_channels   (config_audio_eq_en & EQ_SUPPORT_MULIT_CHANNEL_EN)
#define hw_crossover_type0             (config_audio_eq_en & EQ_HW_CROSSOVER_TYPE0_EN)
#define hw_crossover_type1             (config_audio_eq_en & EQ_HW_CROSSOVER_TYPE1_EN)
#define config_eq_lite_en              (config_audio_eq_en & EQ_LITE_VER_EN)
#define config_eq_support_old_ver_en   (config_audio_eq_en & EQ_SUPPORT_OLD_VER_EN)
#define config_divide_en               (config_audio_eq_en & EQ_LR_DIVIDE_EN)
#define config_eq_online_file_save     (config_audio_eq_en & EQ_ONLINE_FILE_SAVE)
#define config_eq_drc_process_split    (config_audio_eq_en & EQ_DRC_PROCESS_SPLIT)

extern const int config_audio_drc_en;
enum {
    DRC_EN = BIT(0),   //drc 使能
    DRC_NBAND_MERGING_ASM_EN = BIT(1),//drc 多带处理完后，多带合并使用汇编加速
    DRC_NBAND_DIS = BIT(2),//关闭drc多带
    DRC_LIMITER_DIS = BIT(3),//关闭drc限幅器
    DRC_COMPRESSOF_DIS = BIT(4),//关闭drc压缩器
    WDRC_TYPE_EN = BIT(5),//wdrc使能
};

#define config_drc_limiter_en         (!(config_audio_drc_en & DRC_LIMITER_DIS))
#define config_drc_compressor_en      (!(config_audio_drc_en & DRC_COMPRESSOF_DIS))
#define config_drc_nband_en           (!(config_audio_drc_en & DRC_NBAND_DIS))
#define config_drc_nband_merg_asm_en  (!(config_audio_drc_en & DRC_NBAND_MERGING_ASM_EN))
#define config_wdrc_en                (config_audio_drc_en & WDRC_TYPE_EN)


#endif
