#ifndef APP_CONFIG_H
#define APP_CONFIG_H

#define __FLASH_SIZE__    (8 * 1024 * 1024)
#define __SDRAM_SIZE__    (8 * 1024 * 1024)

//#define BRTC_VAD_CLOSE_ENABLE 1          //使能关闭Baidu ai agent云端实时VAD，目的：按住按键说话，松开按键才识别的对话模式

// #define CONFIG_FLASH_FOUR_WIDTH_ENABLE  // 使用4线模式下载，关闭

// 按键配置
#define TCFG_ADKEY_ENABLE 0          // AD按键，定制版关闭，使用IOKEY
#if TCFG_ADKEY_ENABLE
#define CONFIG_PRESS_LONG_KEY_POWERON //长按开关机功能
#endif // TCFG_ADKEY_ENABLE

#define TCFG_IOKEY_ENABLE 1         // IO按键，定制版开启
#define TCFG_IRKEY_ENABLE 0          // 红外遥控，关闭

// SD卡使能配置
#define TCFG_SD0_ENABLE 0           // 关闭，不使用sd卡，开发板可打开
#define TCFG_SD1_ENABLE 0           // 关闭

// debug打印配置
#define CONFIG_DEBUG_ENABLE 1      // debug串口打印，开启
#define TCFG_DEBUG_PORT IO_PORTC_00 // debug tx端口

// 网络配置
#ifdef CONFIG_NET_ENABLE // 网络使能，在cbp中打开了
#define CONFIG_WIFI_ENABLE  // 无线WIFI使能
// #define CONFIG_AIRKISS_NET_CFG					//AIRKISS配网
// #define CONFIG_ACOUSTIC_COMMUNICATION_ENABLE	//声波配网

#ifdef CONFIG_NO_SDRAM_ENABLE // 未配置使用SDRAM，在cbp中关闭了
#define CONFIG_RF_TRIM_CODE_MOVABLE //把RF TRIM 的运行代码动态加载到ram运行(节省4K ram内存), 防止RF TRIM 期间500ms大电流访问flash造成flash挂掉持续大电流
#else
#define CONFIG_RF_TRIM_CODE_AT_RAM //把RF TRIM 的运行代码定死到ram运行(浪费4K ram内存,否则若动态加载到sdram需清cache), 防止RF TRIM 期间500ms大电流访问flash造成flash挂掉持续大电流
#endif // CONFIG_NO_SDRAM_ENABLE

#define INIT_SSID "BD"                     //WIFI名称
#define INIT_PWD  "11111111"              //WIFI密码
#define CONFIG_SERVER_ASSIGN_PROFILE		//第三方平台的profile由杰理服务器分配
#define CONFIG_ASSIGN_MACADDR_ENABLE        //第一次开机连上外网后，使用杰理服务器分配WIFI模块的MAC地址, 关闭则使用<蓝牙地址更新工具*.exe>或者随机数作为MAC地址
// #define CONFIG_DLNA_SDK_ENABLE              //打开DLNA音乐播放功能

#define ceofVolume 0.5

//#define CONFIG_PRESS_LONG_KEY_POWERON
//#define TCFG_ADKEY_ENABLE 1

#ifndef MAX_VOLUME_VALUE
#define MAX_VOLUME_VALUE  100
#endif // MAX_VOLUME_VALUE

#ifndef  MIN_VOLUME_VALUE
#define MIN_VOLUME_VALUE	10
#endif

#ifndef  INIT_VOLUME_VALUE
#define INIT_VOLUME_VALUE 80
#endif // INIT_VOLUME_VALUE

#ifndef VOLUME_STEP
#define VOLUME_STEP         10
#endif // VOLUME_STEP

#endif // CONFIG_NET_ENABLE

#define CONFIG_ASR_CLOUD_ADC_CHANNEL 1

//编解码器使能
#define CONFIG_JLA_ENC_ENABLE
#define CONFIG_JLA_DEC_ENABLE
#define CONFIG_PCM_DEC_ENABLE
#define CONFIG_PCM_ENC_ENABLE
#define CONFIG_DTS_DEC_ENABLE
#define CONFIG_ADPCM_DEC_ENABLE
#define CONFIG_MP3_DEC_ENABLE
#define CONFIG_MP3_ENC_ENABLE
#define CONFIG_WMA_DEC_ENABLE
#define CONFIG_M4A_DEC_ENABLE
#define CONFIG_WAV_DEC_ENABLE
#define CONFIG_AMR_DEC_ENABLE
#define CONFIG_APE_DEC_ENABLE
#define CONFIG_FLAC_DEC_ENABLE
#define CONFIG_SPEEX_DEC_ENABLE
#define CONFIG_ADPCM_ENC_ENABLE
#define CONFIG_WAV_ENC_ENABLE
#define CONFIG_VAD_ENC_ENABLE
#define CONFIG_VIRTUAL_DEV_ENC_ENABLE
#define CONFIG_OPUS_ENC_ENABLE
#define CONFIG_OPUS_DEC_ENABLE
#define CONFIG_SPEEX_ENC_ENABLE
#define CONFIG_AMR_ENC_ENABLE
#define CONFIG_AEC_ENC_ENABLE
#define CONFIG_DNS_ENC_ENABLE
#define CONFIG_AAC_ENC_DISABLE
#define CONFIG_OGG_VORBIS_DEC_ENABLE

#define CONFIG_AUDIO_MIX_ENABLE              //打开叠音功能

// SD卡配置
#if TCFG_SD0_ENABLE
#define CONFIG_STORAGE_PATH 	"storage/sd0"
#define SDX_DEV					"sd0"
#endif

#if TCFG_SD1_ENABLE
#define CONFIG_STORAGE_PATH 	"storage/sd1"
#define SDX_DEV					"sd1"
#endif

#ifndef CONFIG_STORAGE_PATH
#define CONFIG_STORAGE_PATH 	"storage/sdx"
#define SDX_DEV					"sdx"
#endif

#define FAT_CACHE_NUM   32

#define CONFIG_UDISK_STORAGE_PATH	"storage/udisk0"

#define CONFIG_ROOT_PATH     	    CONFIG_STORAGE_PATH"/C/"
#define CONFIG_UDISK_ROOT_PATH     	CONFIG_UDISK_STORAGE_PATH"/C/"

#define CONFIG_MUSIC_PATH_SD        CONFIG_ROOT_PATH
#define CONFIG_MUSIC_PATH_UDISK     CONFIG_UDISK_ROOT_PATH

#define CONFIG_MUSIC_PATH_FLASH             "mnt/sdfile/res/"

// OTA配置
#if __FLASH_SIZE__ > (4 * 1024 * 1024)
#define CONFIG_DOUBLE_BANK_ENABLE           1//双备份方式升级
#else
#define CONFIG_DOUBLE_BANK_ENABLE           0//双备份方式升级
#endif
#define CONFIG_UPGRADE_FILE_NAME            "update.ufw"
#define CONFIG_UPGRADE_PATH                 CONFIG_ROOT_PATH\
											CONFIG_UPGRADE_FILE_NAME	//备份方式升级

// #define CONFIG_VOICE_PROMPT_FILE_SAVE_IN_RESERVED_ZONE  //提示音资源打包后放在预留区，可以通过升级预留区更新此资源，一般用于双备份时提示音资源小于代码大小的方案
// #define CONFIG_VOICE_PROMPT_FILE_SAVE_IN_RESERVED_EXPAND_ZONE  //提示音资源打包后放在扩展预留区，不可以通过升级更新此资源，一般用于提示音不需要更新的方案
#if defined CONFIG_VOICE_PROMPT_FILE_SAVE_IN_RESERVED_EXPAND_ZONE
#define CONFIG_VOICE_PROMPT_FILE_PATH       "mnt/sdfile/EXT_RESERVED/aupackres/tone/"
#elif defined CONFIG_VOICE_PROMPT_FILE_SAVE_IN_RESERVED_ZONE
#define CONFIG_VOICE_PROMPT_FILE_PATH       "mnt/sdfile/app/aupackres/tone/"
#else
#define CONFIG_VOICE_PROMPT_FILE_PATH       "mnt/sdfile/res/audlogo/"
#endif

#define CONFIG_EQ_FILE_NAME                 "mnt/sdfile/res/cfg/eq_cfg_hw.bin"

//#define RTOS_STACK_CHECK_ENABLE //是否启用定时检查任务栈
// #define MEM_LEAK_CHECK_ENABLE	//是否启用内存泄漏检查(需要包含mem_leak_test.h头文件)

//*********************************************************************************//
//                            AUDIO_ADC应用的通道配置                              //
//*********************************************************************************//
#define AUDIO_ENC_SAMPLE_SOURCE_MIC         0  //录音输入源：MIC
#define AUDIO_ENC_SAMPLE_SOURCE_PLNK0       1  //录音输入源：数字麦PLNK0
#define AUDIO_ENC_SAMPLE_SOURCE_PLNK1       2  //录音输入源：数字麦PLNK1
#define AUDIO_ENC_SAMPLE_SOURCE_IIS0        3  //录音输入源：IIS0
#define AUDIO_ENC_SAMPLE_SOURCE_IIS1        4  //录音输入源：IIS1
#define AUDIO_ENC_SAMPLE_SOURCE_LINEIN      5  //录音输入源：LINEIN

#define CONFIG_AUDIO_ENC_SAMPLE_SOURCE      AUDIO_ENC_SAMPLE_SOURCE_MIC    //录音输入源选择
#define CONFIG_AUDIO_DEC_PLAY_SOURCE        "dac"                          //播放输出源选择
#define CONFIG_AUDIO_RECORDER_SAMPLERATE    16000                          //录音采样率
#define CONFIG_AUDIO_RECORDER_CHANNEL       1                              //录音通道数
#define CONFIG_AUDIO_RECORDER_DURATION      (30 * 1000)                    //录音时长ms
#define CONFIG_AUDIO_RECORDER_SAVE_FORMAT   "mp3"                          //录音文件保存格式

#define CONFIG_ALL_ADC_CHANNEL_OPEN_ENABLE      //四路ADC硬件全开

#define CONFIG_AUDIO_ADC_CHANNEL_L          0        //左mic/aux通道
#define CONFIG_AUDIO_ADC_CHANNEL_R          3        //右mic/aux通道
#define CONFIG_REVERB_ADC_CHANNEL           1        //混响mic通道
#define CONFIG_PHONE_CALL_ADC_CHANNEL       1		//通话mic通道
#define CONFIG_UAC_MIC_ADC_CHANNEL          1        //UAC mic通道
#define CONFIG_AUDIO_ADC_GAIN               80      //mic/aux增益

#define CONFIG_AISP_MIC0_ADC_CHANNEL        1		//本地唤醒左mic通道
#define CONFIG_AISP_MIC1_ADC_CHANNEL        3		//本地唤醒右mic通道
#define CONFIG_AISP_LINEIN_ADC_CHANNEL      1		//本地唤醒LINEIN回采DAC通道
#define CONFIG_AISP_MIC_ADC_GAIN            80		//本地唤醒mic增益
#define CONFIG_AISP_LINEIN_ADC_GAIN         60		//本地唤醒LINEIN增益

// #define TCFG_DAC_MUTE_PORT                  0xff
#define TCFG_DAC_MUTE_PORT                  IO_PORTA_00
#define TCFG_DAC_MUTE_VALUE                 0
#define TCFG_DAC_MUTE_ENABLE                1

//*********************************************************************************//
//                                  EQ配置                                         //
//*********************************************************************************//
//EQ配置，使用在线EQ时，EQ文件和EQ模式无效。有EQ文件时，默认不用EQ模式切换功能
#define TCFG_EQ_ENABLE                      1     	//支持EQ功能
#define TCFG_EQ_ONLINE_ENABLE               0     	//支持在线EQ调试
#define TCFG_HW_SOFT_EQ_ENABLE              1     	//前3段使用软件运算
#define TCFG_LIMITER_ENABLE                 1     	//限幅器
#define TCFG_DRC_ENABLE                     TCFG_LIMITER_ENABLE
#define TCFG_EQ_FILE_ENABLE                 1     	//从bin文件读取eq配置数据
#define TCFG_EQ_MODE_CHOOSE                 0		//0:多通道共用1个eq, drc功能丰富; 1:多通道独立eq,独立drc, 请替换对应的bin文件

#if (TCFG_EQ_MODE_CHOOSE == 0)
#define TCFG_AUDIO_MDRC_ENABLE              2		//0:不使能低中DRC 1: 多带分频器使能 2: 多带分频后，再做一次全带处理使能
#define TCFG_LAST_WHOLE_DRC_ENABLE          1		//0:不使能最后的全带DRC; 1:使能
#elif (TCFG_EQ_MODE_CHOOSE == 1)
#define TCFG_EQ_DIVIDE_ENABLE               1		//0:前后通道共用EQ/DRC  1:支持EQ/DRC前后声道独立处理
#define TCFG_EQ_SPILT_ENABLE                1		//0:左右通道共用EQ  1:支持EQ左右声道独立处理
#define TCFG_DRC_SPILT_ENABLE               1		//0:左右通道共用DRC 1:支持DRC左右声道独立处理
#endif

//EQ在线调试通信类型
#define TCFG_NULL_COMM                      0     	//不支持通信
#define TCFG_USB_COMM                       1     	//USB通信
#if TCFG_EQ_ONLINE_ENABLE
#define TCFG_COMM_TYPE                      TCFG_USB_COMM	//通信方式选择
#else
#define TCFG_COMM_TYPE                      TCFG_NULL_COMM
#endif

//*********************************************************************************//
//                  EXTFLASH配置(截取flash中的一段空间作为extflash)                //
//*********************************************************************************//
// #define TCFG_EXTFLASH_ENABLE
#ifdef TCFG_EXTFLASH_ENABLE
#define TCFG_EXTFLASH_UDISK_ENABLE     //将extflash枚举为udisk设备
#endif

//*********************************************************************************//
//                        SD 配置（暂只支持打开一个SD外设）                        //
//*********************************************************************************//
//SD0 	cmd,  clk,  data0, data1, data2, data3
//A     PB6   PB7   PB5    PB5    PB3    PB2
//B     PA7   PA8   PA9    PA10   PA5    PA6
//C     PH1   PH2   PH0    PH3    PH4    PH5
//D     PC9   PC10  PC8    PC7    PC6    PC5

//SD1 	cmd,  clk,  data0, data1, data2, data3
//A     PH6   PH7   PH5    PH4    PH3    PH2
//B     PC0   PC1   PC2    PC3    PC4    PC5

#if TCFG_SD0_ENABLE
#define TCFG_SD_PORTS                      'A'			//SD0/SD1的ABCD组
#define TCFG_SD_DAT_WIDTH                  1			//1:单线模式, 4:四线模式
#define TCFG_SD_DET_MODE                   SD_CMD_DECT
//#define TCFG_SD_DET_MODE                   SD_CLK_DECT	//检测模式
//#define TCFG_SD_DET_IO                     IO_PORTA_01	//SD_DET_MODE为SD_IO_DECT时有效
#define TCFG_SD_DET_IO_LEVEL               0			//IO检卡上线的电平(0/1),SD_DET_MODE为SD_IO_DECT时有效
#define TCFG_SD_CLK                        20000000		//SD时钟
#endif

#if TCFG_SD1_ENABLE
#define TCFG_SD_PORTS                      'B'			//SD0/SD1的ABCD组
#define TCFG_SD_DAT_WIDTH                  1			//1:单线模式, 4:四线模式
#define TCFG_SD_DET_MODE                   SD_CLK_DECT	//检测模式
#define TCFG_SD_DET_IO                     IO_PORTA_01	//SD_DET_MODE为SD_IO_DECT时有效
#define TCFG_SD_DET_IO_LEVEL               0			//IO检卡上线的电平(0/1),SD_DET_MODE为SD_IO_DECT时有效
#define TCFG_SD_CLK                        24000000		//SD时钟
#endif

//*********************************************************************************//
//                                  USB配置                                        //
//*********************************************************************************//
#if TCFG_EQ_ONLINE_ENABLE
#define TCFG_PC_ENABLE                      1           //使能USB从机模式
#define USB_DEVICE_CLASS_CONFIG             (CDC_CLASS) //读卡器和UAC从机模式
#else
#define TCFG_PC_ENABLE                      0           //使能USB从机模式
#define USB_DEVICE_CLASS_CONFIG             (MASSSTORAGE_CLASS | AUDIO_CLASS)   //读卡器和UAC从机模式
#endif
#define USB_PC_NO_APP_MODE                  2
#define USB_MALLOC_ENABLE                   1
#define TCFG_UDISK_ENABLE                   0           //U盘主机模式
#define TCFG_HOST_AUDIO_ENABLE              0           //UAC主机模式

#include "usb_std_class_def.h"
#include "usb_common_def.h"

//*********************************************************************************//
//                                    电源配置                                     //
//*********************************************************************************//
#define CONFIG_LOW_POWER_ENABLE            			//低功耗睡眠使能
#define TCFG_LOWPOWER_BTOSC_DISABLE			0
#ifdef CONFIG_LOW_POWER_ENABLE
#define TCFG_LOWPOWER_LOWPOWER_SEL			RF_SLEEP_EN
#else
#define TCFG_LOWPOWER_LOWPOWER_SEL			0
#endif
#define TCFG_LOWPOWER_VDDIOM_LEVEL			VDDIOM_VOL_32V       //强VDDIO电压档位，不要高于外部DCDC的电压
#define TCFG_LOWPOWER_VDDIOW_LEVEL			VDDIOW_VOL_21V       //弱VDDIO电压档位
#define VDC14_VOL_SEL_LEVEL			        VDC14_VOL_SEL_140V   //RF1.4V电压档位
#define SYSVDD_VOL_SEL_LEVEL				SYSVDD_VOL_SEL_126V  //内核电压档位值

//#define SDTAP_DEBUG

//*********************************************************************************//
//                                  BT_BLE配置                                     //
//*********************************************************************************//
#ifdef CONFIG_BT_ENABLE

#define BT_EMITTER_EN     1
#define BT_RECEIVER_EN    2

#define CONFIG_POWER_ON_ENABLE_EMITTER            0     //开机自动打开发射器
#define CONFIG_POWER_ON_ENABLE_BT                 0     //开机自动打开经典蓝牙
#define CONFIG_POWER_ON_ENABLE_BLE                0     //开机自动打开BLE
#define TCFG_BD_NUM                               1     //可连接设备数量，可支持同时连接2台设备
#define TCFG_USER_BT_CLASSIC_ENABLE               1     //经典蓝牙功能
#define TCFG_USER_TWS_ENABLE                      0     //tws功能使能
#define TCFG_USER_BLE_ENABLE                      1     //BLE功能使能
#define TCFG_USER_EDR_ENABLE                      0     //EDR用户自定义协议功能
#define TCFG_USER_EMITTER_ENABLE                  0     //蓝牙发射功能
#define TCFG_BT_SNIFF_ENABLE                      0
#define TCFG_BT_SUPPORT_AAC                       0     //蓝牙AAC格式支持
#define BT_SUPPORT_MUSIC_VOL_SYNC                 0     //音量同步
#define BT_SUPPORT_DISPLAY_BAT                    0     //电池电量同步显示功能
#define BT_SUPPORT_EMITTER_AUTO_A2DP_START        0     //发射器连上后自动打开A2DP流
#define BT_SUPPORT_RECEIVER_AUTO_A2DP_START       0     //接收器器连上后自动打开A2DP流
#define BT_SUPPORT_EMITTER_PAGE_SCAN              0     //发射器打开可发现性
#define BT_SUPPORT_WIFI_CFG_COEXISTENCE           0     //wifi配网时保持蓝牙连接

#define CONFIG_BT_RX_BUFF_SIZE  (17 * 1024 + 400)
#define CONFIG_BT_TX_BUFF_SIZE  (10 * 1024 + 512)

#define TCFG_BLE_SECURITY_EN                      0     //配对加密使能
#define CONFIG_BLE_MESH_ENABLE                    0
#define BT_NET_CFG_EN                             1     //从机 杰理配网专用
#define TRANS_DATA_EN                             0     //从机 传输数据
#define XIAOMI_EN                                 0     //从机 mi_server
#define BT_NET_CENTRAL_EN                         0     //主机 client角色
#define BT_NET_HID_EN                             0     //从机 hid
#define TRANS_MULTI_BLE_EN                        0     //多机通讯
#define APP_NONCONN_24G				  			  0		//2.4g加密通讯

#if ((CONFIG_BLE_MESH_ENABLE || TCFG_USER_EMITTER_ENABLE) && \
    defined CONFIG_WIFI_ENABLE && \
    !defined CONFIG_LOW_POWER_ENABLE)
#define CONFIG_WIFI_IDLE_RESUME_BASEBAND_ENABLE
#endif

#endif // CONFIG_BT_ENABLE

// DEBUG信息
#if !defined CONFIG_DEBUG_ENABLE || defined CONFIG_LIB_DEBUG_DISABLE
#define LIB_DEBUG    0
#else
#define LIB_DEBUG    1
#endif
#define CONFIG_DEBUG_LIB(x)         (x & LIB_DEBUG)

#endif

