diff --git a/AC701N.cbp b/AC701N.cbp
index 284cf08..6329fc8 100644
--- a/AC701N.cbp
+++ b/AC701N.cbp
@@ -833,6 +833,15 @@
+
+
+
+
+
+
+
+
+
diff --git a/Makefile b/Makefile
index 7d1c07c..7b374cf 100644
--- a/Makefile
+++ b/Makefile
@@ -411,6 +411,8 @@ c_SRC_FILES := \
apps/usr_app/app_pair.c \
apps/usr_app/app_boot.c \
apps/usr_app/app_function.c \
+ apps/usr_app/app_no_disturb.c \
+ apps/usr_app/car_audio_test.c \
apps/usr_app/app_shake_wake.c \
apps/usr_le_code/ble_proto.c \
apps/usr_le_code/bleproto.c \
diff --git a/apps/common/device/key/key_driver.c b/apps/common/device/key/key_driver.c
index e9574fd..0b2f2ff 100644
--- a/apps/common/device/key/key_driver.c
+++ b/apps/common/device/key/key_driver.c
@@ -236,9 +236,9 @@ _notify:
}
if (key_event_remap(&e)) {
sys_event_notify(&e);
-#if TCFG_KEY_TONE_EN
- audio_key_tone_play();
-#endif
+// #if TCFG_KEY_TONE_EN
+// audio_key_tone_play();
+// #endif
}
_scan_end:
scan_para->last_key = cur_key_value;
diff --git a/apps/earphone/board/br28/board_jl701n_demo.c b/apps/earphone/board/br28/board_jl701n_demo.c
index 9c8bfc6..9d86c83 100644
--- a/apps/earphone/board/br28/board_jl701n_demo.c
+++ b/apps/earphone/board/br28/board_jl701n_demo.c
@@ -735,8 +735,7 @@ struct port_wakeup port0 = {
};
#if BOARD_CHG_ENABLE
-/* R18 is not fitted on CBC4, so VBUS never reaches VPWR in softoff. Wake on
- * the fitted ME4054 CHG_ON signal instead; it falls when charging starts. */
+/* TP4056 CHRG falls when charging starts; use it for softoff charge wake. */
struct port_wakeup board_chg_wakeup_port = {
.pullup_down_enable = ENABLE,
.edge = FALLING_EDGE,
@@ -1001,8 +1000,9 @@ void board_set_soft_poweroff(void)
soff_gpio_protect(TCFG_IOKEY_POWER_ONE_PORT);
#endif
#if BOARD_CHG_ENABLE
- /* Preserve PG8 input state and its external pull-up for softoff wake. */
+ /* Preserve both TP4056 open-drain inputs and their pull-ups in softoff. */
soff_gpio_protect(BOARD_CHG_PIN);
+ soff_gpio_protect(BOARD_STDBY_PIN);
#endif
#if (!(TCFG_LP_TOUCH_KEY_ENABLE && TCFG_LP_TOUCH_KEY1_EN))
diff --git a/apps/earphone/board/br28/board_jl701n_demo_cfg.h b/apps/earphone/board/br28/board_jl701n_demo_cfg.h
index 565c26a..cd61cdf 100644
--- a/apps/earphone/board/br28/board_jl701n_demo_cfg.h
+++ b/apps/earphone/board/br28/board_jl701n_demo_cfg.h
@@ -1,4 +1,4 @@
-#ifndef CONFIG_BOARD_JL701N_DEMO_CFG_H
+#ifndef CONFIG_BOARD_JL701N_DEMO_CFG_H
#define CONFIG_BOARD_JL701N_DEMO_CFG_H
#include "board_jl701n_demo_global_build_cfg.h"
@@ -8,7 +8,7 @@
#define CONFIG_SDFILE_ENABLE
//*********************************************************************************//
-// 配置开始 //
+// 閰嶇疆寮€濮? //
//*********************************************************************************//
#define ENABLE_THIS_MOUDLE 1
#define DISABLE_THIS_MOUDLE 0
@@ -19,22 +19,23 @@
#define NO_CONFIG_PORT (-1)
//*********************************************************************************//
-// UART配置 //
+// UART閰嶇疆 //
//*********************************************************************************//
-#define TCFG_UART0_ENABLE ENABLE_THIS_MOUDLE //串口打印模块使能
-#define TCFG_UART0_RX_PORT NO_CONFIG_PORT //串口接收脚配置(用于打印可以选择NO_CONFIG_PORT)
-#define TCFG_UART0_TX_PORT IO_PORTC_05 //串口发送脚配置
-#define TCFG_UART0_BAUDRATE 1000000 //串口波特率配置
+#define TCFG_UART0_ENABLE ENABLE_THIS_MOUDLE // 开启 PG6 串口诊断,PC5 保持充电检测用途
+#define TCFG_UART0_RX_PORT NO_CONFIG_PORT // 只打印,不接收
+#define TCFG_UART0_TX_PORT IO_PORTG_06 // PG6 串口发送
+#define TCFG_UART0_BAUDRATE 1000000 // 与 FK_CAR_FW 一致
+#define TCFG_MAGIC_AUDIO_DEBUG_ENABLE 1 // 中文声音诊断日志,排查结束可改为 0
//*********************************************************************************//
-// IIC配置 //
+// IIC閰嶇疆 //
//*********************************************************************************//
-/*软件IIC设置*/
-#define TCFG_SW_I2C0_CLK_PORT IO_PORTG_07 //软件IIC CLK脚选择
-#define TCFG_SW_I2C0_DAT_PORT IO_PORTG_08 //软件IIC DAT脚选择
-#define TCFG_SW_I2C0_DELAY_CNT 10 //IIC延时参数,影响通讯时钟频率
+/*杞欢IIC璁剧疆*/
+#define TCFG_SW_I2C0_CLK_PORT IO_PORTG_07 //杞欢IIC CLK鑴氶€夋嫨
+#define TCFG_SW_I2C0_DAT_PORT IO_PORTG_08 //杞欢IIC DAT鑴氶€夋嫨
+#define TCFG_SW_I2C0_DELAY_CNT 10 //IIC寤舵椂鍙傛暟锛屽奖鍝嶉€氳鏃堕挓棰戠巼
-/*硬件IIC端口选择
+/*纭欢IIC绔彛閫夋嫨
SCL SDA
'A': IO_PORT_DP IO_PORT_DM
'B': IO_PORTA_09 IO_PORTA_10
@@ -42,10 +43,10 @@
'D': IO_PORTA_05 IO_PORTA_06
*/
#define TCFG_HW_I2C0_PORTS 'B'
-#define TCFG_HW_I2C0_CLK 100000 //硬件IIC波特率
+#define TCFG_HW_I2C0_CLK 100000 //纭欢IIC娉㈢壒鐜?
//*********************************************************************************//
-// 硬件SPI 配置 //
+// 纭欢SPI 閰嶇疆 //
//*********************************************************************************//
#define TCFG_HW_SPI1_ENABLE DISABLE_THIS_MOUDLE
#define TCFG_HW_SPI1_PORT_CLK IO_PORTC_04//IO_PORTA_00
@@ -64,26 +65,26 @@
#define TCFG_HW_SPI2_ROLE SPI_ROLE_MASTER
//*********************************************************************************//
-// SD 配置 //
+// SD 閰嶇疆 //
//*********************************************************************************//
-#define TCFG_SD0_ENABLE DISABLE_THIS_MOUDLE //SD0模块使能
-#define TCFG_SD0_DAT_MODE 1 //线数设置,1:一线模式 4:四线模式
-#define TCFG_SD0_DET_MODE SD_CLK_DECT //SD卡检测方式
-#define TCFG_SD0_DET_IO IO_PORTB_03 //当检测方式为IO检测可用
-#define TCFG_SD0_DET_IO_LEVEL 0 //当检测方式为IO检测可用,0:低电平检测到卡。 1:高电平(外部电源)检测到卡。 2:高电平(SD卡电源)检测到卡。
-#define TCFG_SD0_CLK (3000000 * 4L) //SD卡时钟频率设置
+#define TCFG_SD0_ENABLE DISABLE_THIS_MOUDLE //SD0妯″潡浣胯兘
+#define TCFG_SD0_DAT_MODE 1 //绾挎暟璁剧疆锛?锛氫竴绾挎ā寮? 4锛氬洓绾挎ā寮?
+#define TCFG_SD0_DET_MODE SD_CLK_DECT //SD鍗℃娴嬫柟寮?
+#define TCFG_SD0_DET_IO IO_PORTB_03 //褰撴娴嬫柟寮忎负IO妫€娴嬪彲鐢?
+#define TCFG_SD0_DET_IO_LEVEL 0 //褰撴娴嬫柟寮忎负IO妫€娴嬪彲鐢?0锛氫綆鐢靛钩妫€娴嬪埌鍗°€?1锛氶珮鐢靛钩(澶栭儴鐢垫簮)妫€娴嬪埌鍗°€?2锛氶珮鐢靛钩(SD鍗$數婧?妫€娴嬪埌鍗°€?
+#define TCFG_SD0_CLK (3000000 * 4L) //SD鍗℃椂閽熼鐜囪缃?
#define TCFG_SD0_PORT_CMD IO_PORTC_04
#define TCFG_SD0_PORT_CLK IO_PORTC_05
#define TCFG_SD0_PORT_DA0 IO_PORTC_03
-#define TCFG_SD0_PORT_DA1 NO_CONFIG_PORT //当选择4线模式时要用
+#define TCFG_SD0_PORT_DA1 NO_CONFIG_PORT //褰撻€夋嫨4绾挎ā寮忔椂瑕佺敤
#define TCFG_SD0_PORT_DA2 NO_CONFIG_PORT
#define TCFG_SD0_PORT_DA3 NO_CONFIG_PORT
//*********************************************************************************//
-// USB 配置 //
+// USB 閰嶇疆 //
//*********************************************************************************//
-#define TCFG_PC_ENABLE DISABLE_THIS_MOUDLE//PC模块使能
-#define TCFG_UDISK_ENABLE 0//U盘模块使能
+#define TCFG_PC_ENABLE DISABLE_THIS_MOUDLE//PC妯″潡浣胯兘
+#define TCFG_UDISK_ENABLE 0//U鐩樻ā鍧椾娇鑳?
#define TCFG_OTG_USB_DEV_EN BIT(0)//USB0 = BIT(0) USB1 = BIT(1)
#include "usb_std_class_def.h"
@@ -94,46 +95,46 @@
//#define TCFG_OTG_MODE (TCFG_OTG_MODE_HOST|TCFG_OTG_MODE_SLAVE|TCFG_OTG_MODE_CHARGE|OTG_DET_DM_ONLY)
//*********************************************************************************//
-// key 配置 //
+// key 閰嶇疆 //
//*********************************************************************************//
#define KEY_NUM_MAX 10
#define KEY_NUM 3
-#define MULT_KEY_ENABLE DISABLE //是否使能组合按键消息, 使能后需要配置组合按键映射表
+#define MULT_KEY_ENABLE DISABLE //鏄惁浣胯兘缁勫悎鎸夐敭娑堟伅, 浣胯兘鍚庨渶瑕侀厤缃粍鍚堟寜閿槧灏勮〃
-#define TCFG_KEY_TONE_EN DISABLE // 按键提示音。
+#define TCFG_KEY_TONE_EN ENABLE // 鎸夐敭鎻愮ず闊炽€?
//*********************************************************************************//
-// iokey 配置 //
+// iokey 閰嶇疆 //
//*********************************************************************************//
-#define TCFG_IOKEY_ENABLE 1 //是否使能IO按键
-#define TCFG_IOKEY_BOOT_LOCK_ENABLE 1 //开机锁键:长按开机不松手时屏蔽按键,避免误触关机;不需要则改 0,默认第 0 个端口
+#define TCFG_IOKEY_ENABLE 1 //鏄惁浣胯兘IO鎸夐敭
+#define TCFG_IOKEY_BOOT_LOCK_ENABLE 1 //寮€鏈洪攣閿細闀挎寜寮€鏈轰笉鏉炬墜鏃跺睆钄芥寜閿紝閬垮厤璇Е鍏虫満锛涗笉闇€瑕佸垯鏀?0锛岄粯璁ょ 0 涓鍙?
-#define TCFG_IOKEY_POWER_CONNECT_WAY ONE_PORT_TO_LOW //按键一端接低电平一端接IO
+#define TCFG_IOKEY_POWER_CONNECT_WAY ONE_PORT_TO_LOW //鎸夐敭涓€绔帴浣庣數骞充竴绔帴IO
-#define TCFG_IOKEY_POWER_ONE_PORT IO_PORTB_01 //IO按键端口
+#define TCFG_IOKEY_POWER_ONE_PORT IO_PORTB_01 //IO鎸夐敭绔彛
//*********************************************************************************//
-// adkey 配置 //
+// adkey 閰嶇疆 //
//*********************************************************************************//
-#define TCFG_ADKEY_ENABLE DISABLE_THIS_MOUDLE//是否使能AD按键
-#define TCFG_ADKEY_PORT IO_PORT_DM //AD按键端口(需要注意选择的IO口是否支持AD功能)
-/*AD通道选择,需要和AD按键的端口相对应:
+#define TCFG_ADKEY_ENABLE DISABLE_THIS_MOUDLE//鏄惁浣胯兘AD鎸夐敭
+#define TCFG_ADKEY_PORT IO_PORT_DM //AD鎸夐敭绔彛(闇€瑕佹敞鎰忛€夋嫨鐨処O鍙f槸鍚︽敮鎸丄D鍔熻兘)
+/*AD閫氶亾閫夋嫨锛岄渶瑕佸拰AD鎸夐敭鐨勭鍙g浉瀵瑰簲:
AD_CH_PA1 AD_CH_PA3 AD_CH_PA4 AD_CH_PA5
AD_CH_PA9 AD_CH_PA1 AD_CH_PB1 AD_CH_PB4
AD_CH_PB6 AD_CH_PB7 AD_CH_DP AD_CH_DM
AD_CH_PB2
*/
#define TCFG_ADKEY_AD_CHANNEL AD_CH_DM
-#define TCFG_ADKEY_EXTERN_UP_ENABLE ENABLE_THIS_MOUDLE //是否使用外部上拉
+#define TCFG_ADKEY_EXTERN_UP_ENABLE ENABLE_THIS_MOUDLE //鏄惁浣跨敤澶栭儴涓婃媺
#if TCFG_ADKEY_EXTERN_UP_ENABLE
-#define R_UP 220 //22K,外部上拉阻值在此自行设置
+#define R_UP 220 //22K锛屽閮ㄤ笂鎷夐樆鍊煎湪姝よ嚜琛岃缃?
#else
-#define R_UP 100 //10K,内部上拉默认10K
+#define R_UP 100 //10K锛屽唴閮ㄤ笂鎷夐粯璁?0K
#endif
-//必须从小到大填电阻,没有则同VDDIO,填0x3ffL
+//蹇呴』浠庡皬鍒板ぇ濉數闃伙紝娌℃湁鍒欏悓VDDIO,濉?x3ffL
#define TCFG_ADKEY_AD0 (0) //0R
#define TCFG_ADKEY_AD1 (0x3ffL * 30 / (30 + R_UP)) //3k
#define TCFG_ADKEY_AD2 (0x3ffL * 62 / (62 + R_UP)) //6.2k
@@ -169,73 +170,73 @@
#define TCFG_ADKEY_VALUE9 9
//*********************************************************************************//
-// irkey 配置 //
+// irkey 閰嶇疆 //
//*********************************************************************************//
-#define TCFG_IRKEY_ENABLE DISABLE_THIS_MOUDLE//是否使能AD按键
-#define TCFG_IRKEY_PORT IO_PORTA_08 //IR按键端口
+#define TCFG_IRKEY_ENABLE DISABLE_THIS_MOUDLE//鏄惁浣胯兘AD鎸夐敭
+#define TCFG_IRKEY_PORT IO_PORTA_08 //IR鎸夐敭绔彛
//*********************************************************************************//
-// tocuh key 配置 //
+// tocuh key 閰嶇疆 //
//*********************************************************************************//
//*********************************************************************************//
-// lp tocuh key 配置 //
+// lp tocuh key 閰嶇疆 //
//*********************************************************************************//
-#define TCFG_LP_TOUCH_KEY_ENABLE DISABLE_THIS_MOUDLE //是否使能触摸总开关
+#define TCFG_LP_TOUCH_KEY_ENABLE DISABLE_THIS_MOUDLE //鏄惁浣胯兘瑙︽懜鎬诲紑鍏?
-#define TCFG_LP_TOUCH_KEY0_EN 0 //是否使能触摸按键0 —— PB0
-#define TCFG_LP_TOUCH_KEY1_EN 1 //是否使能触摸按键1 —— PB1
-#define TCFG_LP_TOUCH_KEY2_EN 0 //是否使能触摸按键2 —— PB2
-#define TCFG_LP_TOUCH_KEY3_EN 0 //是否使能触摸按键3 —— PB4
-#define TCFG_LP_TOUCH_KEY4_EN 0 //是否使能触摸按键4 —— PB5
+#define TCFG_LP_TOUCH_KEY0_EN 0 //鏄惁浣胯兘瑙︽懜鎸夐敭0 鈥斺€?PB0
+#define TCFG_LP_TOUCH_KEY1_EN 1 //鏄惁浣胯兘瑙︽懜鎸夐敭1 鈥斺€?PB1
+#define TCFG_LP_TOUCH_KEY2_EN 0 //鏄惁浣胯兘瑙︽懜鎸夐敭2 鈥斺€?PB2
+#define TCFG_LP_TOUCH_KEY3_EN 0 //鏄惁浣胯兘瑙︽懜鎸夐敭3 鈥斺€?PB4
+#define TCFG_LP_TOUCH_KEY4_EN 0 //鏄惁浣胯兘瑙︽懜鎸夐敭4 鈥斺€?PB5
-#define TCFG_LP_TOUCH_KEY0_WAKEUP_EN 0 //是否使能触摸按键0可以软关机低功耗唤醒
-#define TCFG_LP_TOUCH_KEY1_WAKEUP_EN 1 //是否使能触摸按键1可以软关机低功耗唤醒
-#define TCFG_LP_TOUCH_KEY2_WAKEUP_EN 0 //是否使能触摸按键2可以软关机低功耗唤醒
-#define TCFG_LP_TOUCH_KEY3_WAKEUP_EN 0 //是否使能触摸按键3可以软关机低功耗唤醒
-#define TCFG_LP_TOUCH_KEY4_WAKEUP_EN 0 //是否使能触摸按键4可以软关机低功耗唤醒
+#define TCFG_LP_TOUCH_KEY0_WAKEUP_EN 0 //鏄惁浣胯兘瑙︽懜鎸夐敭0鍙互杞叧鏈轰綆鍔熻€楀敜閱?
+#define TCFG_LP_TOUCH_KEY1_WAKEUP_EN 1 //鏄惁浣胯兘瑙︽懜鎸夐敭1鍙互杞叧鏈轰綆鍔熻€楀敜閱?
+#define TCFG_LP_TOUCH_KEY2_WAKEUP_EN 0 //鏄惁浣胯兘瑙︽懜鎸夐敭2鍙互杞叧鏈轰綆鍔熻€楀敜閱?
+#define TCFG_LP_TOUCH_KEY3_WAKEUP_EN 0 //鏄惁浣胯兘瑙︽懜鎸夐敭3鍙互杞叧鏈轰綆鍔熻€楀敜閱?
+#define TCFG_LP_TOUCH_KEY4_WAKEUP_EN 0 //鏄惁浣胯兘瑙︽懜鎸夐敭4鍙互杞叧鏈轰綆鍔熻€楀敜閱?
-//两个按键以上,可以做简单的滑动处理
-#define TCFG_LP_SLIDE_KEY_ENABLE 0 //是否使能触摸按键的滑动功能
-#define TCFG_LP_SLIDE_KEY_SHORT_DISTANCE 1 //两个触摸按键距离是否很短,只支持两个按键,现流行适用于耳机。如果距离很远,则可以两个以上的远距离触摸按键的滑动。
+//涓や釜鎸夐敭浠ヤ笂锛屽彲浠ュ仛绠€鍗曠殑婊戝姩澶勭悊
+#define TCFG_LP_SLIDE_KEY_ENABLE 0 //鏄惁浣胯兘瑙︽懜鎸夐敭鐨勬粦鍔ㄥ姛鑳?
+#define TCFG_LP_SLIDE_KEY_SHORT_DISTANCE 1 //涓や釜瑙︽懜鎸夐敭璺濈鏄惁寰堢煭锛屽彧鏀寔涓や釜鎸夐敭锛岀幇娴佽閫傜敤浜庤€虫満銆傚鏋滆窛绂诲緢杩滐紝鍒欏彲浠ヤ袱涓互涓婄殑杩滆窛绂昏Е鎽告寜閿殑婊戝姩銆?
-#define TCFG_LP_EARTCH_KEY_ENABLE 0 //是否使能触摸按键用作入耳检测
-#define TCFG_LP_EARTCH_KEY_CH 2 //带入耳检测流程的按键号:0/1/2/3/4
-#define TCFG_LP_EARTCH_KEY_REF_CH 1 //入耳检测算法需要的另一个按键通道作为参考:0/1/2/3/4, 即入耳检测至少要使能两个触摸通道
-#define TCFG_LP_EARTCH_SOFT_INEAR_VAL 3000 //入耳检测算法需要的入耳阈值,参考文档设置
-#define TCFG_LP_EARTCH_SOFT_OUTEAR_VAL 2000 //入耳检测算法需要的出耳阈值,参考文档设置
+#define TCFG_LP_EARTCH_KEY_ENABLE 0 //鏄惁浣胯兘瑙︽懜鎸夐敭鐢ㄤ綔鍏ヨ€虫娴?
+#define TCFG_LP_EARTCH_KEY_CH 2 //甯﹀叆鑰虫娴嬫祦绋嬬殑鎸夐敭鍙凤細0/1/2/3/4
+#define TCFG_LP_EARTCH_KEY_REF_CH 1 //鍏ヨ€虫娴嬬畻娉曢渶瑕佺殑鍙︿竴涓寜閿€氶亾浣滀负鍙傝€冿細0/1/2/3/4, 鍗冲叆鑰虫娴嬭嚦灏戣浣胯兘涓や釜瑙︽懜閫氶亾
+#define TCFG_LP_EARTCH_SOFT_INEAR_VAL 3000 //鍏ヨ€虫娴嬬畻娉曢渶瑕佺殑鍏ヨ€抽槇鍊硷紝鍙傝€冩枃妗h缃?
+#define TCFG_LP_EARTCH_SOFT_OUTEAR_VAL 2000 //鍏ヨ€虫娴嬬畻娉曢渶瑕佺殑鍑鸿€抽槇鍊硷紝鍙傝€冩枃妗h缃?
-//电容检测灵敏度级数配置(范围: 0 ~ 9)
-//该参数配置与触摸时电容变化量有关, 触摸时电容变化量跟模具厚度, 触摸片材质, 面积等有关,
-//触摸时电容变化量越小, 推荐选择灵敏度级数越大,
-//触摸时电容变化量越大, 推荐选择灵敏度级数越小,
-//用户可以从灵敏度级数为0开始调试, 级数逐渐增大, 直到选择一个合适的灵敏度配置值.
-#define TCFG_LP_TOUCH_KEY0_SENSITIVITY 5 //触摸按键0电容检测灵敏度配置(级数0 ~ 9)
-#define TCFG_LP_TOUCH_KEY1_SENSITIVITY 5 //触摸按键1电容检测灵敏度配置(级数0 ~ 9)
-#define TCFG_LP_TOUCH_KEY2_SENSITIVITY 5 //触摸按键2电容检测灵敏度配置(级数0 ~ 9)
-#define TCFG_LP_TOUCH_KEY3_SENSITIVITY 5 //触摸按键3电容检测灵敏度配置(级数0 ~ 9)
-#define TCFG_LP_TOUCH_KEY4_SENSITIVITY 5 //触摸按键4电容检测灵敏度配置(级数0 ~ 9)
+//鐢靛妫€娴嬬伒鏁忓害绾ф暟閰嶇疆(鑼冨洿: 0 ~ 9)
+//璇ュ弬鏁伴厤缃笌瑙︽懜鏃剁數瀹瑰彉鍖栭噺鏈夊叧, 瑙︽懜鏃剁數瀹瑰彉鍖栭噺璺熸ā鍏峰帤搴? 瑙︽懜鐗囨潗璐? 闈㈢Н绛夋湁鍏?
+//瑙︽懜鏃剁數瀹瑰彉鍖栭噺瓒婂皬, 鎺ㄨ崘閫夋嫨鐏垫晱搴︾骇鏁拌秺澶?
+//瑙︽懜鏃剁數瀹瑰彉鍖栭噺瓒婂ぇ, 鎺ㄨ崘閫夋嫨鐏垫晱搴︾骇鏁拌秺灏?
+//鐢ㄦ埛鍙互浠庣伒鏁忓害绾ф暟涓?寮€濮嬭皟璇? 绾ф暟閫愭笎澧炲ぇ, 鐩村埌閫夋嫨涓€涓悎閫傜殑鐏垫晱搴﹂厤缃€?
+#define TCFG_LP_TOUCH_KEY0_SENSITIVITY 5 //瑙︽懜鎸夐敭0鐢靛妫€娴嬬伒鏁忓害閰嶇疆(绾ф暟0 ~ 9)
+#define TCFG_LP_TOUCH_KEY1_SENSITIVITY 5 //瑙︽懜鎸夐敭1鐢靛妫€娴嬬伒鏁忓害閰嶇疆(绾ф暟0 ~ 9)
+#define TCFG_LP_TOUCH_KEY2_SENSITIVITY 5 //瑙︽懜鎸夐敭2鐢靛妫€娴嬬伒鏁忓害閰嶇疆(绾ф暟0 ~ 9)
+#define TCFG_LP_TOUCH_KEY3_SENSITIVITY 5 //瑙︽懜鎸夐敭3鐢靛妫€娴嬬伒鏁忓害閰嶇疆(绾ф暟0 ~ 9)
+#define TCFG_LP_TOUCH_KEY4_SENSITIVITY 5 //瑙︽懜鎸夐敭4鐢靛妫€娴嬬伒鏁忓害閰嶇疆(绾ф暟0 ~ 9)
-//内置触摸灵敏度调试工具使能, 使能后可以通过连接PC端上位机通过SPP调试,
-//打开该宏需要确保同时打开宏:
+//鍐呯疆瑙︽懜鐏垫晱搴﹁皟璇曞伐鍏蜂娇鑳? 浣胯兘鍚庡彲浠ラ€氳繃杩炴帴PC绔笂浣嶆満閫氳繃SPP璋冭瘯,
+//鎵撳紑璇ュ畯闇€瑕佺‘淇濆悓鏃舵墦寮€瀹?
//1.USER_SUPPORT_PROFILE_SPP
//2.APP_ONLINE_DEBUG
-//可以针对每款样机校准灵敏度参数表(在lp_touch_key.c ch_sensitivity_table), 详细使用方法请参考《低功耗内置触摸介绍》文档.
+//鍙互閽堝姣忔鏍锋満鏍″噯鐏垫晱搴﹀弬鏁拌〃(鍦╨p_touch_key.c ch_sensitivity_table), 璇︾粏浣跨敤鏂规硶璇峰弬鑰冦€婁綆鍔熻€楀唴缃Е鎽镐粙缁嶃€嬫枃妗?
#define TCFG_LP_TOUCH_KEY_BT_TOOL_ENABLE DISABLE
#if TCFG_LP_TOUCH_KEY_ENABLE
-//如果 IO按键与触摸按键有冲突,则需要关掉 IO按键的 宏
+//濡傛灉 IO鎸夐敭涓庤Е鎽告寜閿湁鍐茬獊锛屽垯闇€瑕佸叧鎺?IO鎸夐敭鐨?瀹?
#if 1
-//取消外置触摸的一些宏定义
+//鍙栨秷澶栫疆瑙︽懜鐨勪竴浜涘畯瀹氫箟
#ifdef TCFG_IOKEY_ENABLE
#undef TCFG_IOKEY_ENABLE
#define TCFG_IOKEY_ENABLE DISABLE_THIS_MOUDLE
#endif /* #ifdef TCFG_IOKEY_ENABLE */
#endif
-//如果 AD按键与触摸按键有冲突,则需要关掉 AD按键的 宏
+//濡傛灉 AD鎸夐敭涓庤Е鎽告寜閿湁鍐茬獊锛屽垯闇€瑕佸叧鎺?AD鎸夐敭鐨?瀹?
#if 1
-//取消外置触摸的一些宏定义
+//鍙栨秷澶栫疆瑙︽懜鐨勪竴浜涘畯瀹氫箟
#ifdef TCFG_ADKEY_ENABLE
#undef TCFG_ADKEY_ENABLE
#define TCFG_ADKEY_ENABLE DISABLE_THIS_MOUDLE
@@ -246,10 +247,10 @@
#ifdef TCFG_EARTCH_EVENT_HANDLE_ENABLE
#undef TCFG_EARTCH_EVENT_HANDLE_ENABLE
#endif
-#define TCFG_EARTCH_EVENT_HANDLE_ENABLE 0 //入耳检测事件APP流程处理使能
+#define TCFG_EARTCH_EVENT_HANDLE_ENABLE 0 //鍏ヨ€虫娴嬩簨浠禔PP娴佺▼澶勭悊浣胯兘
#if TCFG_LP_SLIDE_KEY_ENABLE
-#error "入耳检测和滑动功能不能同时打开"
+#error "鍏ヨ€虫娴嬪拰婊戝姩鍔熻兘涓嶈兘鍚屾椂鎵撳紑"
#endif
#endif /* #if TCFG_LP_EARTCH_KEY_ENABLE */
@@ -258,57 +259,57 @@
//*********************************************************************************//
-// plcnt tocuh key 配置 //
+// plcnt tocuh key 閰嶇疆 //
//*********************************************************************************//
-#define TCFG_TOUCH_KEY_ENABLE DISABLE_THIS_MOUDLE //是否使能plcnt触摸按键
-//key0配置
-#define TCFG_TOUCH_KEY0_PRESS_DELTA 100//变化阈值,当触摸产生的变化量达到该阈值,则判断被按下,每个按键可能不一样,可先在驱动里加到打印,再反估阈值
-#define TCFG_TOUCH_KEY0_PORT IO_PORTB_06 //触摸按键key0 IO配置
-#define TCFG_TOUCH_KEY0_VALUE 0x12 //触摸按键key0 按键值
-//key1配置
-#define TCFG_TOUCH_KEY1_PRESS_DELTA 100//变化阈值,当触摸产生的变化量达到该阈值,则判断被按下,每个按键可能不一样,可先在驱动里加到打印,再反估阈值
-#define TCFG_TOUCH_KEY1_PORT IO_PORTB_07 //触摸按键key1 IO配置
-#define TCFG_TOUCH_KEY1_VALUE 0x34 //触摸按键key1 按键值
+#define TCFG_TOUCH_KEY_ENABLE DISABLE_THIS_MOUDLE //鏄惁浣胯兘plcnt瑙︽懜鎸夐敭
+//key0閰嶇疆
+#define TCFG_TOUCH_KEY0_PRESS_DELTA 100//鍙樺寲闃堝€硷紝褰撹Е鎽镐骇鐢熺殑鍙樺寲閲忚揪鍒拌闃堝€硷紝鍒欏垽鏂鎸変笅锛屾瘡涓寜閿彲鑳戒笉涓€鏍凤紝鍙厛鍦ㄩ┍鍔ㄩ噷鍔犲埌鎵撳嵃锛屽啀鍙嶄及闃堝€?
+#define TCFG_TOUCH_KEY0_PORT IO_PORTB_06 //瑙︽懜鎸夐敭key0 IO閰嶇疆
+#define TCFG_TOUCH_KEY0_VALUE 0x12 //瑙︽懜鎸夐敭key0 鎸夐敭鍊?
+//key1閰嶇疆
+#define TCFG_TOUCH_KEY1_PRESS_DELTA 100//鍙樺寲闃堝€硷紝褰撹Е鎽镐骇鐢熺殑鍙樺寲閲忚揪鍒拌闃堝€硷紝鍒欏垽鏂鎸変笅锛屾瘡涓寜閿彲鑳戒笉涓€鏍凤紝鍙厛鍦ㄩ┍鍔ㄩ噷鍔犲埌鎵撳嵃锛屽啀鍙嶄及闃堝€?
+#define TCFG_TOUCH_KEY1_PORT IO_PORTB_07 //瑙︽懜鎸夐敭key1 IO閰嶇疆
+#define TCFG_TOUCH_KEY1_VALUE 0x34 //瑙︽懜鎸夐敭key1 鎸夐敭鍊?
//*********************************************************************************//
-// rdec_key 配置 //
+// rdec_key 閰嶇疆 //
//*********************************************************************************//
-#define TCFG_RDEC_KEY_ENABLE DISABLE_THIS_MOUDLE //是否使能RDEC按键
-//RDEC0配置
+#define TCFG_RDEC_KEY_ENABLE DISABLE_THIS_MOUDLE //鏄惁浣胯兘RDEC鎸夐敭
+//RDEC0閰嶇疆
#define TCFG_RDEC0_ECODE1_PORT IO_PORTA_03
#define TCFG_RDEC0_ECODE2_PORT IO_PORTA_04
#define TCFG_RDEC0_KEY0_VALUE 0
#define TCFG_RDEC0_KEY1_VALUE 1
-//RDEC1配置
+//RDEC1閰嶇疆
#define TCFG_RDEC1_ECODE1_PORT IO_PORTA_05
#define TCFG_RDEC1_ECODE2_PORT IO_PORTA_06
#define TCFG_RDEC1_KEY0_VALUE 2
#define TCFG_RDEC1_KEY1_VALUE 3
-//RDEC2配置
+//RDEC2閰嶇疆
#define TCFG_RDEC2_ECODE1_PORT IO_PORTB_00
#define TCFG_RDEC2_ECODE2_PORT IO_PORTB_01
#define TCFG_RDEC2_KEY0_VALUE 4
#define TCFG_RDEC2_KEY1_VALUE 5
//*********************************************************************************//
-// Digital Hearing Aid(DHA)辅听耳机配置 //
+// Digital Hearing Aid(DHA)杈呭惉鑰虫満閰嶇疆 //
//*********************************************************************************//
-/*辅听功能使能*/
+/*杈呭惉鍔熻兘浣胯兘*/
#define TCFG_AUDIO_HEARING_AID_ENABLE DISABLE_THIS_MOUDLE
-/*听力验配功能*/
+/*鍚姏楠岄厤鍔熻兘*/
#define TCFG_AUDIO_DHA_FITTING_ENABLE DISABLE
-/*辅听功能互斥配置*/
-#define TCFG_AUDIO_DHA_AND_MUSIC_MUTEX ENABLE //辅听功能和音乐播放互斥(默认互斥,资源有限)
-#define TCFG_AUDIO_DHA_AND_CALL_MUTEX ENABLE //辅听功能和通话互斥(默认互斥,资源有限)
-#define TCFG_AUDIO_DHA_AND_TONE_MUTEX ENABLE //辅听功能和提示音互斥
-/*辅听功能MIC的采样率*/
+/*杈呭惉鍔熻兘浜掓枼閰嶇疆*/
+#define TCFG_AUDIO_DHA_AND_MUSIC_MUTEX ENABLE //杈呭惉鍔熻兘鍜岄煶涔愭挱鏀句簰鏂?榛樿浜掓枼锛岃祫婧愭湁闄?
+#define TCFG_AUDIO_DHA_AND_CALL_MUTEX ENABLE //杈呭惉鍔熻兘鍜岄€氳瘽浜掓枼(榛樿浜掓枼锛岃祫婧愭湁闄?
+#define TCFG_AUDIO_DHA_AND_TONE_MUTEX ENABLE //杈呭惉鍔熻兘鍜屾彁绀洪煶浜掓枼
+/*杈呭惉鍔熻兘MIC鐨勯噰鏍风巼*/
#define TCFG_AUDIO_DHA_MIC_SAMPLE_RATE (32000)
/*混叠DAC输出采样率*/
#define TCFG_AD2DA_LOW_LATENCY_SAMPLE_RATE (48000)
-/*低延时 mic 通道*/
+/*浣庡欢鏃?mic 閫氶亾*/
#define TCFG_AD2DA_LOW_LATENCY_MIC_CHANNEL (AUDIO_ADC_MIC_0)
#if TCFG_AUDIO_HEARING_AID_ENABLE
@@ -316,16 +317,16 @@
#endif
//*********************************************************************************//
-// Sidetone配置 //
+// Sidetone閰嶇疆 //
//*********************************************************************************//
#define TCFG_SIDETONE_ENABLE 0 //ENABLE
//*********************************************************************************//
-// Audio配置 //
+// Audio閰嶇疆 //
//*********************************************************************************//
#define TCFG_AUDIO_ADC_ENABLE ENABLE_THIS_MOUDLE
#define TCFG_AUDIO_ADC_LINE_CHA AUDIO_ADC_LINE0
-/*MIC LDO电流档位设置:
+/*MIC LDO鐢垫祦妗d綅璁剧疆锛?
0:0.625ua 1:1.25ua 2:1.875ua 3:2.5ua*/
#define TCFG_AUDIO_ADC_LD0_SEL 2
@@ -333,112 +334,112 @@
#define TCFG_AUDIO_DAC_LDO_SEL 1
/*
-DAC硬件上的连接方式,可选的配置:
- DAC_OUTPUT_MONO_L 左声道
- DAC_OUTPUT_MONO_R 右声道
- DAC_OUTPUT_LR 立体声
- DAC_OUTPUT_MONO_LR_DIFF 左右差分 LP-RP
+DAC纭欢涓婄殑杩炴帴鏂瑰紡,鍙€夌殑閰嶇疆锛?
+ DAC_OUTPUT_MONO_L 宸﹀0閬?
+ DAC_OUTPUT_MONO_R 鍙冲0閬?
+ DAC_OUTPUT_LR 绔嬩綋澹?
+ DAC_OUTPUT_MONO_LR_DIFF 宸﹀彸宸垎 LP-RP
- TCFG_AUDIO_DAC_CONNECT_MODE 决定方案需要使用多少个DAC声道
- TCFG_AUDIO_DAC_MODE 决定DAC是差分输出模式还是单端输出模式
+ TCFG_AUDIO_DAC_CONNECT_MODE 鍐冲畾鏂规闇€瑕佷娇鐢ㄥ灏戜釜DAC澹伴亾
+ TCFG_AUDIO_DAC_MODE 鍐冲畾DAC鏄樊鍒嗚緭鍑烘ā寮忚繕鏄崟绔緭鍑烘ā寮?
- TCFG_AUDIO_DAC_CONNECT_MODE和TCFG_AUDIO_DAC_MODE不同配置组合实际使用引脚见下表:
+ TCFG_AUDIO_DAC_CONNECT_MODE鍜孴CFG_AUDIO_DAC_MODE涓嶅悓閰嶇疆缁勫悎瀹為檯浣跨敤寮曡剼瑙佷笅琛細
+--------------------+-------------------+-------------------+----------------------------+-------------------------+
| | DAC_OUTPUT_MONO_L | DAC_OUTPUT_MONO_R | DAC_OUTPUT_LR | DAC_OUTPUT_MONO_LR_DIFF |
+--------------------+-------------------+-------------------+----------------------------+-------------------------+
-| DAC_MODE_L_DIFF | 单声道 LP-LN | 单声道 RP-RN | 立声道 L:LP-LN R:RP-RN | 不支持 |
-| DAC_MODE_L_SINGLE | 单声道 LP-AGND | 单声道 RP-AGND | 立声道 L:LP-AGND R:RP-AGND | 单声道 LP-RP |
-| DAC_MODE_H1_DIFF | 单声道 LP-LN | 单声道 RP-RN | 立声道 L:LP-LN R:RP-RN | 不支持 |
-| DAC_MODE_H1_SINGLE | 单声道 LP-AGND | 单声道 RP-AGND | 立声道 L:LP-AGND R:RP-AGND | 单声道 LP-RP |
-| DAC_MODE_H2_DIFF | 单声道 LP-LN | 单声道 RP-RN | 立声道 L:LP-LN R:RP-RN | 不支持 |
-| DAC_MODE_H2_SINGLE | 单声道 LP-AGND | 单声道 RP-AGND | 立声道 L:LP-AGND R:RP-AGND | 单声道 LP-RP |
+| DAC_MODE_L_DIFF | 鍗曞0閬? LP-LN | 鍗曞0閬? RP-RN | 绔嬪0閬?L:LP-LN R:RP-RN | 涓嶆敮鎸? |
+| DAC_MODE_L_SINGLE | 鍗曞0閬? LP-AGND | 鍗曞0閬? RP-AGND | 绔嬪0閬?L:LP-AGND R:RP-AGND | 鍗曞0閬? LP-RP |
+| DAC_MODE_H1_DIFF | 鍗曞0閬? LP-LN | 鍗曞0閬? RP-RN | 绔嬪0閬?L:LP-LN R:RP-RN | 涓嶆敮鎸? |
+| DAC_MODE_H1_SINGLE | 鍗曞0閬? LP-AGND | 鍗曞0閬? RP-AGND | 绔嬪0閬?L:LP-AGND R:RP-AGND | 鍗曞0閬? LP-RP |
+| DAC_MODE_H2_DIFF | 鍗曞0閬? LP-LN | 鍗曞0閬? RP-RN | 绔嬪0閬?L:LP-LN R:RP-RN | 涓嶆敮鎸? |
+| DAC_MODE_H2_SINGLE | 鍗曞0閬? LP-AGND | 鍗曞0閬? RP-AGND | 绔嬪0閬?L:LP-AGND R:RP-AGND | 鍗曞0閬? LP-RP |
+--------------------+-------------------+-------------------+----------------------------+-------------------------+
*/
#define TCFG_AUDIO_DAC_CONNECT_MODE DAC_OUTPUT_MONO_R
/*
- DAC模式选择
-#define DAC_MODE_L_DIFF (0) // 低压差分模式 , 适用于低功率差分耳机 , 输出幅度 0~2Vpp
-#define DAC_MODE_L_SINGLE (1) // 低压单端模式 , 主要用于左右差分模式, 差分输出幅度 0~2Vpp
-#define DAC_MODE_H1_DIFF (2) // 高压1档差分模式, 适用于高功率差分耳机 , 输出幅度 0~3Vpp , VDDIO >= 3.0V
-#define DAC_MODE_H1_SINGLE (3) // 高压1档单端模式, 适用于高功率单端PA音箱, 输出幅度 0~1.5Vpp, VDDIO >= 3.0V
-#define DAC_MODE_H2_DIFF (4) // 高压2档差分模式, 适用于高功率差分PA音箱, 输出幅度 0~5Vpp , VDDIO >= 3.3V
-#define DAC_MODE_H2_SINGLE (5) // 高压2档单端模式, 适用于高功率单端PA音箱, 输出幅度 0~2.5Vpp, VDDIO >= 3.3V
+ DAC妯″紡閫夋嫨
+#define DAC_MODE_L_DIFF (0) // 浣庡帇宸垎妯″紡 , 閫傜敤浜庝綆鍔熺巼宸垎鑰虫満 , 杈撳嚭骞呭害 0~2Vpp
+#define DAC_MODE_L_SINGLE (1) // 浣庡帇鍗曠妯″紡 , 涓昏鐢ㄤ簬宸﹀彸宸垎妯″紡, 宸垎杈撳嚭骞呭害 0~2Vpp
+#define DAC_MODE_H1_DIFF (2) // 楂樺帇1妗e樊鍒嗘ā寮? 閫傜敤浜庨珮鍔熺巼宸垎鑰虫満 , 杈撳嚭骞呭害 0~3Vpp , VDDIO >= 3.0V
+#define DAC_MODE_H1_SINGLE (3) // 楂樺帇1妗e崟绔ā寮? 閫傜敤浜庨珮鍔熺巼鍗曠PA闊崇, 杈撳嚭骞呭害 0~1.5Vpp, VDDIO >= 3.0V
+#define DAC_MODE_H2_DIFF (4) // 楂樺帇2妗e樊鍒嗘ā寮? 閫傜敤浜庨珮鍔熺巼宸垎PA闊崇, 杈撳嚭骞呭害 0~5Vpp , VDDIO >= 3.3V
+#define DAC_MODE_H2_SINGLE (5) // 楂樺帇2妗e崟绔ā寮? 閫傜敤浜庨珮鍔熺巼鍗曠PA闊崇, 杈撳嚭骞呭害 0~2.5Vpp, VDDIO >= 3.3V
*/
-#define TCFG_AUDIO_DAC_MODE DAC_MODE_L_SINGLE // DAC_MODE_L_DIFF 低压, DAC_MODE_H1_DIFF 高压
+#define TCFG_AUDIO_DAC_MODE DAC_MODE_H2_SINGLE // DAC_MODE_L_DIFF 浣庡帇锛?DAC_MODE_H1_DIFF 楂樺帇
-/*预留接口,未使用*/
+/*棰勭暀鎺ュ彛锛屾湭浣跨敤*/
#define TCFG_AUDIO_DAC_PA_PORT NO_CONFIG_PORT
-#define CONFIG_FATFS_ENABLE 0 //文件系统
-#define TCFG_DEV_MANAGER_ENABLE 1 //设备管理
-#define CONFIG_BT_BACKGROUND_ENABLE 0 //蓝牙后台
-#define TCFG_BT_SNIFF_DISABLE 0 //蓝牙SNIFF
+#define CONFIG_FATFS_ENABLE 0 //鏂囦欢绯荤粺
+#define TCFG_DEV_MANAGER_ENABLE 1 //璁惧绠$悊
+#define CONFIG_BT_BACKGROUND_ENABLE 0 //钃濈墮鍚庡彴
+#define TCFG_BT_SNIFF_DISABLE 0 //钃濈墮SNIFF
//*******************************************************************************//
-// 模式配置 //
+// 妯″紡閰嶇疆 //
//*******************************************************************************//
-//**********************************AUX模式**************************************//
+//**********************************AUX妯″紡**************************************//
//#define TCFG_APP_AUX_EN DISABLE_THIS_MOUDLE
-//********************************MUSIC模式**************************************//
+//********************************MUSIC妯″紡**************************************//
#if TCFG_SD0_ENABLE
-#define TCFG_APP_MUSIC_EN DISABLE_THIS_MOUDLE //应用代码
-#define CONFIG_FATFS_ENABLE ENABLE //文件系统
-#define TCFG_DEV_MANAGER_ENABLE ENABLE //设备管理
+#define TCFG_APP_MUSIC_EN DISABLE_THIS_MOUDLE //搴旂敤浠g爜
+#define CONFIG_FATFS_ENABLE ENABLE //鏂囦欢绯荤粺
+#define TCFG_DEV_MANAGER_ENABLE ENABLE //璁惧绠$悊
#endif //TCFG_SD0_ENABLE
-//***********************************PC模式**************************************//
+//***********************************PC妯″紡**************************************//
#define TCFG_APP_PC_EN DISABLE_THIS_MOUDLE
#define TCFG_ENTER_PC_MODE DISABLE
#define TCFG_ONLY_PC_ENABLE DISABLE
#if (TCFG_APP_MUSIC_EN || TCFG_APP_PC_EN)
-#define CONFIG_BT_BACKGROUND_ENABLE ENABLE //蓝牙后台
-#define TCFG_BT_SNIFF_DISABLE DISABLE //蓝牙SNIFF
+#define CONFIG_BT_BACKGROUND_ENABLE ENABLE //钃濈墮鍚庡彴
+#define TCFG_BT_SNIFF_DISABLE DISABLE //钃濈墮SNIFF
#define TCFG_DEC2TWS_ENABLE DISABLE
#endif
-//*********************************ANC配置******************************************//
+//*********************************ANC閰嶇疆******************************************//
-#define TCFG_AUDIO_ANC_ENABLE CONFIG_ANC_ENABLE //ANC总使能,根据global_bulid_cfg板级定义
-#define TCFG_ANC_TOOL_DEBUG_ONLINE DISABLE_THIS_MOUDLE //ANC工具蓝牙spp调试
-#define TCFG_ANC_SELF_DUT_GET_SZ DISABLE_THIS_MOUDLE //ANC自研产测SZ获取,用于(HYBIRD/FB)产测
+#define TCFG_AUDIO_ANC_ENABLE CONFIG_ANC_ENABLE //ANC鎬讳娇鑳?鏍规嵁global_bulid_cfg鏉跨骇瀹氫箟
+#define TCFG_ANC_TOOL_DEBUG_ONLINE DISABLE_THIS_MOUDLE //ANC宸ュ叿钃濈墮spp璋冭瘯
+#define TCFG_ANC_SELF_DUT_GET_SZ DISABLE_THIS_MOUDLE //ANC鑷爺浜ф祴SZ鑾峰彇锛岀敤浜?HYBIRD/FB)浜ф祴
/*
- *当通话与ANC共用FF MIC,并且通话要求更大的MIC模拟增益时,使能TCFG_AUDIO_DYNAMIC_ADC_GAIN,
- *则通话MIC模拟增益以配置工具通话参数为准,通话时,ANC使用通话MIC模拟增益
+ *褰撻€氳瘽涓嶢NC鍏辩敤FF MIC锛屽苟涓旈€氳瘽瑕佹眰鏇村ぇ鐨凪IC妯℃嫙澧炵泭鏃讹紝浣胯兘TCFG_AUDIO_DYNAMIC_ADC_GAIN锛?
+ *鍒欓€氳瘽MIC妯℃嫙澧炵泭浠ラ厤缃伐鍏烽€氳瘽鍙傛暟涓哄噯,閫氳瘽鏃讹紝ANC浣跨敤閫氳瘽MIC妯℃嫙澧炵泭
*/
#define TCFG_AUDIO_DYNAMIC_ADC_GAIN 0
-//#define TCFG_AUDIO_ANC_EAR_ADAPTIVE_EN DISABLE_THIS_MOUDLE //ANC耳道自适应使能, 耳道是变量
+//#define TCFG_AUDIO_ANC_EAR_ADAPTIVE_EN DISABLE_THIS_MOUDLE //ANC鑰抽亾鑷€傚簲浣胯兘, 鑰抽亾鏄彉閲?
-#define ANC_TRAIN_MODE ANC_FF_EN //ANC类型配置:单前馈,单后馈,混合馈
-#define ANC_CH ANC_L_CH //| ANC_R_CH //ANC通道使能:左通道 | 右通道
-#define ANCL_FF_MIC A_MIC0 //ANC左通道FFMIC类型
-#define ANCL_FB_MIC MIC_NULL //ANC左通道FBMIC类型
-#define ANCR_FF_MIC MIC_NULL //ANC右通道FFMIC类型
-#define ANCR_FB_MIC MIC_NULL //ANC右通道FBMIC类型
-/********************************ANC配置END*****************************************/
+#define ANC_TRAIN_MODE ANC_FF_EN //ANC绫诲瀷閰嶇疆锛氬崟鍓嶉锛屽崟鍚庨锛屾贩鍚堥
+#define ANC_CH ANC_L_CH //| ANC_R_CH //ANC閫氶亾浣胯兘锛氬乏閫氶亾 | 鍙抽€氶亾
+#define ANCL_FF_MIC A_MIC0 //ANC宸﹂€氶亾FFMIC绫诲瀷
+#define ANCL_FB_MIC MIC_NULL //ANC宸﹂€氶亾FBMIC绫诲瀷
+#define ANCR_FF_MIC MIC_NULL //ANC鍙抽€氶亾FFMIC绫诲瀷
+#define ANCR_FB_MIC MIC_NULL //ANC鍙抽€氶亾FBMIC绫诲瀷
+/********************************ANC閰嶇疆END*****************************************/
/*通话下行(DL:DownLink)通路噪声门配置*/
#define TCFG_AUDIO_ESCO_DL_NOISEGATE_ENABLE DISABLE_THIS_MOUDLE
-#define ESCO_NOISEGATE_THR -40.f //噪声门阈值:-90~0 Unit:dB
-#define ESCO_NOISEGATE_GAIN 0.0f //噪声增益衰减比例:0~1 Ratio
+#define ESCO_NOISEGATE_THR -40.f //鍣0闂ㄩ槇鍊?-90~0 Unit:dB
+#define ESCO_NOISEGATE_GAIN 0.0f //鍣0澧炵泭琛板噺姣斾緥:0~1 Ratio
-/*通话下行降噪使能*/
+/*閫氳瘽涓嬭闄嶅櫔浣胯兘*/
#define TCFG_ESCO_DL_NS_ENABLE DISABLE_THIS_MOUDLE
/*通话下行限幅器使能*/
#define TCFG_AUDIO_ESCO_LIMITER_ENABLE 0
-#define ESCO_DL_LIMITER_THR 0.0f //-60 ~0db 限幅器输出的最大幅度,
+#define ESCO_DL_LIMITER_THR 0.0f //-60 ~0db 闄愬箙鍣ㄨ緭鍑虹殑鏈€澶у箙搴︼紝
/*
- *系统音量类型选择
- *软件数字音量是指纯软件对声音进行运算后得到的
- *硬件数字音量是指dac内部数字模块对声音进行运算后输出
- *选择软件数字音量或者硬件数字音量会固定模拟音量,
- *固定的模拟音量值由 MAX_ANA_VOL 决定
+ *绯荤粺闊抽噺绫诲瀷閫夋嫨
+ *杞欢鏁板瓧闊抽噺鏄寚绾蒋浠跺澹伴煶杩涜杩愮畻鍚庡緱鍒扮殑
+ *纭欢鏁板瓧闊抽噺鏄寚dac鍐呴儴鏁板瓧妯″潡瀵瑰0闊宠繘琛岃繍绠楀悗杈撳嚭
+ *閫夋嫨杞欢鏁板瓧闊抽噺鎴栬€呯‖浠舵暟瀛楅煶閲忎細鍥哄畾妯℃嫙闊抽噺锛?
+ *鍥哄畾鐨勬ā鎷熼煶閲忓€肩敱 MAX_ANA_VOL 鍐冲畾
*/
-#define VOL_TYPE_DIGITAL 0 //软件数字音量
-#define VOL_TYPE_AD 2 //联合音量(模拟数字混合调节)
-#define VOL_TYPE_DIGITAL_HW 3 //硬件数字音量
+#define VOL_TYPE_DIGITAL 0 //杞欢鏁板瓧闊抽噺
+#define VOL_TYPE_AD 2 //鑱斿悎闊抽噺(妯℃嫙鏁板瓧娣峰悎璋冭妭)
+#define VOL_TYPE_DIGITAL_HW 3 //纭欢鏁板瓧闊抽噺
/*注意:ANC使能情况下使用软件数字音量*/
#if (TCFG_AUDIO_ANC_ENABLE || TCFG_AD2DA_LOW_LATENCY_ENABLE || TCFG_AUDIO_HEARING_AID_ENABLE)
#define SYS_VOL_TYPE VOL_TYPE_DIGITAL
@@ -446,24 +447,24 @@ DAC硬件上的连接方式,可选的配置:
#define SYS_VOL_TYPE VOL_TYPE_DIGITAL_HW
#endif/*TCFG_AUDIO_ANC_ENABLE*/
/*
- *通话的时候使用数字音量
- *0:通话使用和SYS_VOL_TYPE一样的音量调节类型
- *1:通话使用数字音量调节,更加平滑
+ *閫氳瘽鐨勬椂鍊欎娇鐢ㄦ暟瀛楅煶閲?
+ *0锛氶€氳瘽浣跨敤鍜孲YS_VOL_TYPE涓€鏍风殑闊抽噺璋冭妭绫诲瀷
+ *1锛氶€氳瘽浣跨敤鏁板瓧闊抽噺璋冭妭锛屾洿鍔犲钩婊?
*/
#define TCFG_CALL_USE_DIGITAL_VOLUME 0
-//注意:数字音量不用使能TCFG_CALL_USE_DIGITAL_VOLUME
+//娉ㄦ剰锛氭暟瀛楅煶閲忎笉鐢ㄤ娇鑳絋CFG_CALL_USE_DIGITAL_VOLUME
#if ((SYS_VOL_TYPE == VOL_TYPE_DIGITAL) || (SYS_VOL_TYPE == VOL_TYPE_DIGITAL_HW))
#undef TCFG_CALL_USE_DIGITAL_VOLUME
#define TCFG_CALL_USE_DIGITAL_VOLUME 0
#endif/*SYS_VOL_TYPE*/
-/*PDM数字MIC配置*/
+/*PDM鏁板瓧MIC閰嶇疆*/
#define TCFG_AUDIO_PLNK_SCLK_PIN IO_PORTA_04
#define TCFG_AUDIO_PLNK_DAT0_PIN IO_PORTA_03
#define TCFG_AUDIO_PLNK_DAT1_PIN NO_CONFIG_PORT
/*MIC模式配置:单端隔直电容模式/差分隔直电容模式/单端省电容模式*/
-/*注意:ANC使能情况下,使用差分mic*/
+/*娉ㄦ剰:ANC浣胯兘鎯呭喌涓嬶紝浣跨敤宸垎mic*/
#if (TCFG_AUDIO_ANC_ENABLE || TCFG_AUDIO_HEARING_AID_ENABLE)
#define TCFG_AUDIO_MIC_MODE AUDIO_MIC_CAP_DIFF_MODE
#define TCFG_AUDIO_MIC1_MODE AUDIO_MIC_CAP_DIFF_MODE
@@ -477,24 +478,24 @@ DAC硬件上的连接方式,可选的配置:
#endif /*TCFG_AUDIO_ANC_ENABLE || TCFG_AUDIO_HEARING_AID_ENABLE*/
/*
- *>>MIC电源管理:根据具体方案,选择对应的mic供电方式
- *(1)如果是多种方式混合,则将对应的供电方式或起来即可,比如(MIC_PWR_FROM_GPIO | MIC_PWR_FROM_MIC_BIAS)
- *(2)如果使用固定电源供电(比如dacvdd),则配置成DISABLE_THIS_MOUDLE
+ *>>MIC鐢垫簮绠$悊:鏍规嵁鍏蜂綋鏂规锛岄€夋嫨瀵瑰簲鐨刴ic渚涚數鏂瑰紡
+ *(1)濡傛灉鏄绉嶆柟寮忔贩鍚堬紝鍒欏皢瀵瑰簲鐨勪緵鐢垫柟寮忔垨璧锋潵鍗冲彲锛屾瘮濡?MIC_PWR_FROM_GPIO | MIC_PWR_FROM_MIC_BIAS)
+ *(2)濡傛灉浣跨敤鍥哄畾鐢垫簮渚涚數(姣斿dacvdd)锛屽垯閰嶇疆鎴怐ISABLE_THIS_MOUDLE
*/
-#define MIC_PWR_FROM_GPIO (1UL << 0) //使用普通IO输出供电
-#define MIC_PWR_FROM_MIC_BIAS (1UL << 1) //使用内部mic_ldo供电(有上拉电阻可配)
-#define MIC_PWR_FROM_MIC_LDO (1UL << 2) //使用内部mic_ldo供电
-//配置MIC电源
+#define MIC_PWR_FROM_GPIO (1UL << 0) //浣跨敤鏅€欼O杈撳嚭渚涚數
+#define MIC_PWR_FROM_MIC_BIAS (1UL << 1) //浣跨敤鍐呴儴mic_ldo渚涚數(鏈変笂鎷夌數闃诲彲閰?
+#define MIC_PWR_FROM_MIC_LDO (1UL << 2) //浣跨敤鍐呴儴mic_ldo渚涚數
+//閰嶇疆MIC鐢垫簮
#define TCFG_AUDIO_MIC_PWR_CTL MIC_PWR_FROM_MIC_BIAS
-//使用普通IO输出供电:不用的port配置成NO_CONFIG_PORT
+//浣跨敤鏅€欼O杈撳嚭渚涚數:涓嶇敤鐨刾ort閰嶇疆鎴怤O_CONFIG_PORT
#if (TCFG_AUDIO_MIC_PWR_CTL & MIC_PWR_FROM_GPIO)
#define TCFG_AUDIO_MIC_PWR_PORT IO_PORTC_02
#define TCFG_AUDIO_MIC1_PWR_PORT NO_CONFIG_PORT
#define TCFG_AUDIO_MIC2_PWR_PORT NO_CONFIG_PORT
#endif/*MIC_PWR_FROM_GPIO*/
-//使用内部mic_ldo供电(有上拉电阻可配)
+//浣跨敤鍐呴儴mic_ldo渚涚數(鏈変笂鎷夌數闃诲彲閰?
#if (TCFG_AUDIO_MIC_PWR_CTL & MIC_PWR_FROM_MIC_BIAS)
#define TCFG_AUDIO_MIC0_BIAS_EN ENABLE_THIS_MOUDLE/*Port:PA2*/
#define TCFG_AUDIO_MIC1_BIAS_EN ENABLE_THIS_MOUDLE/*Port:PA4*/
@@ -502,23 +503,23 @@ DAC硬件上的连接方式,可选的配置:
#define TCFG_AUDIO_MIC3_BIAS_EN ENABLE_THIS_MOUDLE/*Port:PG5*/
#endif/*MIC_PWR_FROM_MIC_BIAS*/
-//使用内部mic_ldo供电(Port:PA0)
+//浣跨敤鍐呴儴mic_ldo渚涚數(Port:PA0)
#if (TCFG_AUDIO_MIC_PWR_CTL & MIC_PWR_FROM_MIC_LDO)
#define TCFG_AUDIO_MIC_LDO_EN ENABLE_THIS_MOUDLE
#endif/*MIC_PWR_FROM_MIC_LDO*/
-/*>>MIC电源管理配置结束*/
+/*>>MIC鐢垫簮绠$悊閰嶇疆缁撴潫*/
/*
- *第三方清晰语音开发配置:
- *(1)使用杰理自研算法
+ *绗笁鏂规竻鏅拌闊冲紑鍙戦厤缃?
+ *(1)浣跨敤鏉扮悊鑷爺绠楁硶
*#define TCFG_CVP_DEVELOP_ENABLE DISABLE_THIS_MOUDLE
- *(2)用户自己开发算法
+ *(2)鐢ㄦ埛鑷繁寮€鍙戠畻娉?
*#define TCFG_CVP_DEVELOP_ENABLE CVP_CFG_USER_DEFINED
- *(3)使用思必驰3-mic通话算法
+ *(3)浣跨敤鎬濆繀椹?-mic閫氳瘽绠楁硶
*#define TCFG_CVP_DEVELOP_ENABLE CVP_CFG_AIS_3MIC
*/
-#define CVP_CFG_USER_DEFINED 1 //用户自定义开发算法
-#define CVP_CFG_AIS_3MIC 2 //思必驰3mic算法
+#define CVP_CFG_USER_DEFINED 1 //鐢ㄦ埛鑷畾涔夊紑鍙戠畻娉?
+#define CVP_CFG_AIS_3MIC 2 //鎬濆繀椹?mic绠楁硶
#define TCFG_CVP_DEVELOP_ENABLE DISABLE_THIS_MOUDLE
#if (TCFG_CVP_DEVELOP_ENABLE == CVP_CFG_AIS_3MIC)
@@ -527,27 +528,27 @@ DAC硬件上的连接方式,可选的配置:
#endif /*TCFG_CVP_DEVELOP_ENABLE*/
#ifdef CONFIG_BOARD_AISPEECH_NR_GAIN
-//思必驰三麦MIC增益设置
+//鎬濆繀椹颁笁楹IC澧炵泭璁剧疆
#define TALK_MIC0_GAIN 13
#define FF_MIC1_GAIN 13
#define FB_MIC2_GAIN 0
#define OTHER_MIC3_GAIN 0
#endif /*CONFIG_BOARD_AISPEECH_NR_GAIN*/
-/*通话降噪模式配置*/
-#define CVP_ANS_MODE 0 /*传统降噪*/
-#define CVP_DNS_MODE 1 /*神经网络降噪*/
+/*閫氳瘽闄嶅櫔妯″紡閰嶇疆*/
+#define CVP_ANS_MODE 0 /*浼犵粺闄嶅櫔*/
+#define CVP_DNS_MODE 1 /*绁炵粡缃戠粶闄嶅櫔*/
#define TCFG_AUDIO_CVP_NS_MODE CVP_DNS_MODE
/*
- * ENC(双mic降噪)配置
- * 双mic降噪包括DMS_NORMAL和DMS_FLEXIBLE,在使能TCFG_AUDIO_DUAL_MIC_ENABLE
- * 的前提下,根据具体需求,选择对应的DMS模式
+ * ENC(鍙宮ic闄嶅櫔)閰嶇疆
+ * 鍙宮ic闄嶅櫔鍖呮嫭DMS_NORMAL鍜孌MS_FLEXIBLE锛屽湪浣胯兘TCFG_AUDIO_DUAL_MIC_ENABLE
+ * 鐨勫墠鎻愪笅锛屾牴鎹叿浣撻渶姹傦紝閫夋嫨瀵瑰簲鐨凞MS妯″紡
*/
-/*ENC(双mic降噪)使能*/
+/*ENC(鍙宮ic闄嶅櫔)浣胯兘*/
#define TCFG_AUDIO_DUAL_MIC_ENABLE DISABLE_THIS_MOUDLE
-/*ENC(3 mic降噪)使能*/
+/*ENC(3 mic闄嶅櫔)浣胯兘*/
#define TCFG_AUDIO_TRIPLE_MIC_ENABLE DISABLE_THIS_MOUDLE
#if (TCFG_CVP_DEVELOP_ENABLE == CVP_CFG_AIS_3MIC)
@@ -555,17 +556,17 @@ DAC硬件上的连接方式,可选的配置:
#define TCFG_AUDIO_TRIPLE_MIC_ENABLE ENABLE_THIS_MOUDLE
#endif /*TCFG_CVP_DEVELOP_ENABLE*/
-/*DMS模式选择*/
-#define DMS_NORMAL 1 //普通双mic降噪(mic距离固定)
-#define DMS_FLEXIBLE 2 //适配mic距离不固定且距离比较远的情况,比如头戴式话务耳机
+/*DMS妯″紡閫夋嫨*/
+#define DMS_NORMAL 1 //鏅€氬弻mic闄嶅櫔(mic璺濈鍥哄畾)
+#define DMS_FLEXIBLE 2 //閫傞厤mic璺濈涓嶅浐瀹氫笖璺濈姣旇緝杩滅殑鎯呭喌锛屾瘮濡傚ご鎴村紡璇濆姟鑰虫満
#define TCFG_AUDIO_DMS_SEL DMS_NORMAL
-/*ENC双mic配置主mic副mic对应的mic port*/
-#define DMS_MASTER_MIC0 0 //mic0是主mic
-#define DMS_MASTER_MIC1 1 //mic1是主mic
+/*ENC鍙宮ic閰嶇疆涓籱ic鍓痬ic瀵瑰簲鐨刴ic port*/
+#define DMS_MASTER_MIC0 0 //mic0鏄富mic
+#define DMS_MASTER_MIC1 1 //mic1鏄富mic
#define TCFG_AUDIO_DMS_MIC_MANAGE DMS_MASTER_MIC0
-//MIC通道配置
+//MIC閫氶亾閰嶇疆
#if TCFG_AUDIO_TRIPLE_MIC_ENABLE
#define TCFG_AUDIO_ADC_MIC_CHA (AUDIO_ADC_MIC_0 | AUDIO_ADC_MIC_1 | AUDIO_ADC_MIC_2)
#elif TCFG_AUDIO_DUAL_MIC_ENABLE
@@ -575,14 +576,14 @@ DAC硬件上的连接方式,可选的配置:
#endif/*TCFG_AUDIO_TRIPLE_MIC_ENABLE*/
/*
- *支持省电容MIC模块
- *(1)要使能省电容mic,首先要支持该模块:TCFG_SUPPORT_MIC_CAPLESS
- *(2)只有支持该模块,才能使能该模块:TCFG_MIC_CAPLESS_ENABLE
+ *鏀寔鐪佺數瀹筂IC妯″潡
+ *(1)瑕佷娇鑳界渷鐢靛mic,棣栧厛瑕佹敮鎸佽妯″潡:TCFG_SUPPORT_MIC_CAPLESS
+ *(2)鍙湁鏀寔璇ユā鍧楋紝鎵嶈兘浣胯兘璇ユā鍧?TCFG_MIC_CAPLESS_ENABLE
*/
#define TCFG_SUPPORT_MIC_CAPLESS DISABLE_THIS_MOUDLE
-//省电容MIC使能
+//鐪佺數瀹筂IC浣胯兘
#define TCFG_MIC_CAPLESS_ENABLE DISABLE_THIS_MOUDLE
-//省电容MIC1使能
+//鐪佺數瀹筂IC1浣胯兘
#define TCFG_MIC1_CAPLESS_ENABLE DISABLE_THIS_MOUDLE
// AUTOMUTE
@@ -595,36 +596,36 @@ DAC硬件上的连接方式,可选的配置:
// OUTPUT WAY
#define AUDIO_OUT_WAY_TYPE AUDIO_WAY_TYPE_DAC
-/*Audio数据导出配置:支持BT_SPP\SD\UART载体导出*/
+/*Audio鏁版嵁瀵煎嚭閰嶇疆:鏀寔BT_SPP\SD\UART杞戒綋瀵煎嚭*/
#define AUDIO_DATA_EXPORT_USE_SD 1
#define AUDIO_DATA_EXPORT_USE_SPP 2
#define AUDIO_DATA_EXPORT_USE_UART 3
#define TCFG_AUDIO_DATA_EXPORT_ENABLE DISABLE_THIS_MOUDLE
/*
- *蓝牙spp数据导出的mic 通道,调试双麦ENC时,需要和ENC的mic通道保持一致
+ *钃濈墮spp鏁版嵁瀵煎嚭鐨刴ic 閫氶亾锛岃皟璇曞弻楹NC鏃?闇€瑕佸拰ENC鐨刴ic閫氶亾淇濇寔涓€鑷?
*/
#if TCFG_AUDIO_TRIPLE_MIC_ENABLE
-/*3MIC通话的时候需要导出3路麦克风数据分析*/
+/*3MIC閫氳瘽鐨勬椂鍊欓渶瑕佸鍑?璺害鍏嬮鏁版嵁鍒嗘瀽*/
#define TCFG_SPP_DATA_EXPORT_ADC_MIC_CHA (AUDIO_ADC_MIC_0 | AUDIO_ADC_MIC_1 | AUDIO_ADC_MIC_2)
#else
-/*2MIC通话的时候需要导出两路麦克风数据分析*/
+/*2MIC閫氳瘽鐨勬椂鍊欓渶瑕佸鍑轰袱璺害鍏嬮鏁版嵁鍒嗘瀽*/
#define TCFG_SPP_DATA_EXPORT_ADC_MIC_CHA (AUDIO_ADC_MIC_0 | AUDIO_ADC_MIC_1)
#endif
-/*通话清晰语音处理数据导出*/
+/*閫氳瘽娓呮櫚璇煶澶勭悊鏁版嵁瀵煎嚭*/
//#define AUDIO_PCM_DEBUG
-/*通话参数在线调试*/
+/*閫氳瘽鍙傛暟鍦ㄧ嚎璋冭瘯*/
//#define TCFG_AEC_TOOL_ONLINE_ENABLE DISABLE_THIS_MOUDLE
/*麦克风测试和传递函数测试*/
//#define TCFG_AUDIO_MIC_DUT_ENABLE DISABLE_THIS_MOUDLE
/*
- *第三方ASR(语音识别)配置
- *(1)用户自己开发算法
+ *绗笁鏂笰SR锛堣闊宠瘑鍒級閰嶇疆
+ *(1)鐢ㄦ埛鑷繁寮€鍙戠畻娉?
*#define TCFG_AUDIO_ASR_DEVELOP ASR_CFG_USER_DEFINED
- *(2)使用思必驰ASR算法
+ *(2)浣跨敤鎬濆繀椹癆SR绠楁硶
*#define TCFG_AUDIO_ASR_DEVELOP ASR_CFG_AIS
*/
#define ASR_CFG_USER_DEFINED 1
@@ -636,7 +637,7 @@ DAC硬件上的连接方式,可选的配置:
#undef TCFG_KWS_VOICE_EVENT_HANDLE_ENABLE
#undef TCFG_VAD_LOWPOWER_CLOCK
#define TCFG_SMART_VOICE_ENABLE DISABLE_THIS_MOUDLE
-#define TCFG_KWS_VOICE_EVENT_HANDLE_ENABLE TCFG_SMART_VOICE_ENABLE //语音事件处理流程开关
+#define TCFG_KWS_VOICE_EVENT_HANDLE_ENABLE TCFG_SMART_VOICE_ENABLE //璇煶浜嬩欢澶勭悊娴佺▼寮€鍏?
#define TCFG_VAD_LOWPOWER_CLOCK VAD_CLOCK_USE_PMU_STD12M
#define CONFIG_BOARD_AISPEECH_VAD_ASR
@@ -644,15 +645,15 @@ DAC硬件上的连接方式,可选的配置:
//*********************************************************************************//
-// IIS 配置 //
+// IIS 閰嶇疆 //
//*********************************************************************************//
#define TCFG_AUDIO_INPUT_IIS DISABLE_THIS_MOUDLE
#define TCFG_AUDIO_OUTPUT_IIS DISABLE_THIS_MOUDLE
-#define TCFG_AUDIO_OUTPUT_IIS_AND_DAC 0//单独iis输出使能 0:iis, 1:dac+iis
+#define TCFG_AUDIO_OUTPUT_IIS_AND_DAC 0//鍗曠嫭iis杈撳嚭浣胯兘 0:iis, 1:dac+iis
-//IIS 输出使用的通道号
+//IIS 杈撳嚭浣跨敤鐨勯€氶亾鍙?
#define TCFG_IIS_OUTPUT_DATAPORT_SEL ALINK_CH0
-//IIS 输入使用的通道号
+//IIS 杈撳叆浣跨敤鐨勯€氶亾鍙?
#define TCFG_IIS_INPUT_DATAPORT_SEL ALINK_CH1
#define TCFG_IIS_MODE (0) // 0:master 1:slave
@@ -667,34 +668,34 @@ DAC硬件上的连接方式,可选的配置:
#define TCFG_DATA3_IO IO_PORTA_11
//*********************************************************************************//
-// 充电舱配置 //
-// 充电舱/蓝牙测试盒/ANC测试三者为同级关系,开启任一功能都会初始化PP0通信接口 //
+// 鍏呯數鑸遍厤缃? //
+// 鍏呯數鑸?钃濈墮娴嬭瘯鐩?ANC娴嬭瘯涓夎€呬负鍚岀骇鍏崇郴,寮€鍚换涓€鍔熻兘閮戒細鍒濆鍖朠P0閫氫俊鎺ュ彛 //
//*********************************************************************************//
-//#define TCFG_CHARGESTORE_ENABLE DISABLE_THIS_MOUDLE //是否支持智能充电舱
-#define TCFG_TEST_BOX_ENABLE ENABLE_THIS_MOUDLE //是否支持蓝牙测试盒
-#define TCFG_ANC_BOX_ENABLE CONFIG_ANC_ENABLE //是否支持ANC测试盒
-//#define TCFG_UMIDIGI_BOX_ENABLE 0//ENABLE_THIS_MOUDLE //是否支持UMIDIGI充电舱
+//#define TCFG_CHARGESTORE_ENABLE DISABLE_THIS_MOUDLE //鏄惁鏀寔鏅鸿兘鍏呯數鑸?
+#define TCFG_TEST_BOX_ENABLE ENABLE_THIS_MOUDLE //鏄惁鏀寔钃濈墮娴嬭瘯鐩?
+#define TCFG_ANC_BOX_ENABLE CONFIG_ANC_ENABLE //鏄惁鏀寔ANC娴嬭瘯鐩?
+//#define TCFG_UMIDIGI_BOX_ENABLE 0//ENABLE_THIS_MOUDLE //鏄惁鏀寔UMIDIGI鍏呯數鑸?
/*
#if TCFG_UMIDIGI_BOX_ENABLE
-#define _20MS_BIT 20 //传输20ms/Bit时使用
-#define _40MS_BIT 40 //传输40ms/Bit时使用
-#define TIMER2CMESSAGE _20MS_BIT //定时器收集message周期
-#endif*/
-#define TCFG_CHARGESTORE_PORT IO_PORTP_00 //耳机通讯的IO口
+#define _20MS_BIT 20 //浼犺緭20ms/Bit鏃朵娇鐢?
+#define _40MS_BIT 40 //浼犺緭40ms/Bit鏃朵娇鐢?
+#define TIMER2CMESSAGE _20MS_BIT //瀹氭椂鍣ㄦ敹闆唌essage鍛ㄦ湡
+*/
+#define TCFG_CHARGESTORE_PORT IO_PORTP_00 //鑰虫満閫氳鐨処O鍙?
#if (TCFG_TEST_BOX_ENABLE) && (TCFG_CHARGESTORE_PORT != IO_PORTP_00)
#define TCFG_TEST_BOX_ANY_IO_UPDATE ENABLE_THIS_MOUDLE
#undef CONFIG_UART_UPDATE_PIN
-#define CONFIG_UART_UPDATE_PIN USBDM // 如果TCFG_CHARGESTORE_PORT修改了这里也要做对应的修改
+#define CONFIG_UART_UPDATE_PIN USBDM // 濡傛灉TCFG_CHARGESTORE_PORT淇敼浜嗚繖閲屼篃瑕佸仛瀵瑰簲鐨勪慨鏀?
#if (TCFG_CHARGESTORE_PORT == TCFG_IOKEY_POWER_ONE_PORT)
#error "ERR:TCFG_CHARGESTORE_PORT AND TCFG_IOKEY_POWER_ONE_PORT IS SAME"
#endif
#endif
//*********************************************************************************//
-// Audio Smart Voice (必须,不然功耗会增加) //
+// Audio Smart Voice 锛堝繀椤伙紝涓嶇劧鍔熻€椾細澧炲姞锛? //
//*********************************************************************************//
#define TCFG_SMART_VOICE_ENABLE DISABLE_THIS_MOUDLE //ENABLE_THIS_MOUDLE
-#define TCFG_KWS_VOICE_EVENT_HANDLE_ENABLE TCFG_SMART_VOICE_ENABLE //语音事件处理流程开关
+#define TCFG_KWS_VOICE_EVENT_HANDLE_ENABLE TCFG_SMART_VOICE_ENABLE //璇煶浜嬩欢澶勭悊娴佺▼寮€鍏?
#if TCFG_SMART_VOICE_ENABLE
#define TCFG_VAD_LOWPOWER_CLOCK VAD_CLOCK_USE_PMU_STD12M
#else
@@ -707,13 +708,13 @@ DAC硬件上的连接方式,可选的配置:
#endif
//*********************************************************************************//
-// 充电参数配置 //
+// 鍏呯數鍙傛暟閰嶇疆 //
//*********************************************************************************//
-//是否支持芯片内置充电
+//鏄惁鏀寔鑺墖鍐呯疆鍏呯數
#define TCFG_CHARGE_ENABLE 1
-//是否支持开机充电
+//鏄惁鏀寔寮€鏈哄厖鐢?
#define TCFG_CHARGE_POWERON_ENABLE 1
-//是否支持拔出充电自动开机功能
+//鏄惁鏀寔鎷斿嚭鍏呯數鑷姩寮€鏈哄姛鑳?
#define TCFG_CHARGE_OFF_POWERON_NE ENABLE
/*充电截止电压可选配置*/
#define TCFG_CHARGE_FULL_V CHARGE_FULL_V_4199
@@ -721,75 +722,75 @@ DAC硬件上的连接方式,可选的配置:
#define TCFG_CHARGE_FULL_MA CHARGE_FULL_mA_10
/*恒流充电电流可选配置*/
#define TCFG_CHARGE_MA CHARGE_mA_250
-/*涓流充电电流配置*/
+/*娑撴祦鍏呯數鐢垫祦閰嶇疆*/
#define TCFG_CHARGE_TRICKLE_MA CHARGE_mA_10
//*********************************************************************************//
-// LED 配置 //
+// LED 閰嶇疆 //
//*********************************************************************************//
-#define TCFG_PWMLED_ENABLE DISABLE_THIS_MOUDLE //是否支持PMW LED推灯模块
-#define TCFG_PWMLED_IOMODE LED_ONE_IO_MODE //LED模式,单IO还是两个IO推灯
-#define TCFG_PWMLED_PIN IO_PORTB_06 //LED使用的IO口
+#define TCFG_PWMLED_ENABLE DISABLE_THIS_MOUDLE //鏄惁鏀寔PMW LED鎺ㄧ伅妯″潡
+#define TCFG_PWMLED_IOMODE LED_ONE_IO_MODE //LED妯″紡锛屽崟IO杩樻槸涓や釜IO鎺ㄧ伅
+#define TCFG_PWMLED_PIN IO_PORTB_06 //LED浣跨敤鐨処O鍙?
//*********************************************************************************//
-// 时钟配置 //
+// 鏃堕挓閰嶇疆 //
//*********************************************************************************//
-#define TCFG_CLOCK_SYS_SRC SYS_CLOCK_INPUT_PLL_BT_OSC //系统时钟源选择
-//#define TCFG_CLOCK_SYS_HZ 12000000 //系统时钟设置
-//#define TCFG_CLOCK_SYS_HZ 16000000 //系统时钟设置
-#define TCFG_CLOCK_SYS_HZ 24000000 //系统时钟设置
-//#define TCFG_CLOCK_SYS_HZ 32000000 //系统时钟设置
-//#define TCFG_CLOCK_SYS_HZ 48000000 //系统时钟设置
-//#define TCFG_CLOCK_SYS_HZ 54000000 //系统时钟设置
-//#define TCFG_CLOCK_SYS_HZ 64000000 //系统时钟设置
-#define TCFG_CLOCK_OSC_HZ 24000000 //外界晶振频率设置
+#define TCFG_CLOCK_SYS_SRC SYS_CLOCK_INPUT_PLL_BT_OSC //绯荤粺鏃堕挓婧愰€夋嫨
+//#define TCFG_CLOCK_SYS_HZ 12000000 //绯荤粺鏃堕挓璁剧疆
+//#define TCFG_CLOCK_SYS_HZ 16000000 //绯荤粺鏃堕挓璁剧疆
+#define TCFG_CLOCK_SYS_HZ 24000000 //绯荤粺鏃堕挓璁剧疆
+//#define TCFG_CLOCK_SYS_HZ 32000000 //绯荤粺鏃堕挓璁剧疆
+//#define TCFG_CLOCK_SYS_HZ 48000000 //绯荤粺鏃堕挓璁剧疆
+//#define TCFG_CLOCK_SYS_HZ 54000000 //绯荤粺鏃堕挓璁剧疆
+//#define TCFG_CLOCK_SYS_HZ 64000000 //绯荤粺鏃堕挓璁剧疆
+#define TCFG_CLOCK_OSC_HZ 24000000 //澶栫晫鏅舵尟棰戠巼璁剧疆
#define TCFG_CLOCK_MODE CLOCK_MODE_ADAPTIVE
//*********************************************************************************//
-// 电源配置 //
+// 鐢垫簮閰嶇疆 //
//*********************************************************************************//
-#define TCFG_LOWPOWER_POWER_SEL PWR_LDO15//PWR_LDO15 //电源模式设置,可选DCDC和LDO
-#define TCFG_LOWPOWER_BTOSC_DISABLE 0 //低功耗模式下BTOSC是否保持
-#define TCFG_LOWPOWER_LOWPOWER_SEL SLEEP_EN//DEEP_SLEEP_EN//SLEEP_EN//DEEP_SLEEP_EN //低功耗使能,蓝牙&&系统空闲可进入低功耗
-#define TCFG_LOWPOWER_VDDIOM_LEVEL VDDIOM_VOL_28V //vddiom等级
-#define TCFG_LOWPOWER_OSC_TYPE OSC_TYPE_LRC //低功耗晶振类型,btosc/lrc
+#define TCFG_LOWPOWER_POWER_SEL PWR_LDO15//PWR_LDO15 //鐢垫簮妯″紡璁剧疆锛屽彲閫塂CDC鍜孡DO
+#define TCFG_LOWPOWER_BTOSC_DISABLE 0 //浣庡姛鑰楁ā寮忎笅BTOSC鏄惁淇濇寔
+#define TCFG_LOWPOWER_LOWPOWER_SEL SLEEP_EN//DEEP_SLEEP_EN//SLEEP_EN//DEEP_SLEEP_EN //浣庡姛鑰椾娇鑳斤紝钃濈墮&&绯荤粺绌洪棽鍙繘鍏ヤ綆鍔熻€?
+#define TCFG_LOWPOWER_VDDIOM_LEVEL VDDIOM_VOL_28V //vddiom绛夌骇
+#define TCFG_LOWPOWER_OSC_TYPE OSC_TYPE_LRC //浣庡姛鑰楁櫠鎸被鍨嬶紝btosc/lrc
///#if (TCFG_AUDIO_ASR_DEVELOP && TCFG_CVP_DEVELOP_ENABLE)
-///#define TCFG_LOWPOWER_RAM_SIZE 0 // 低功耗掉电ram大小,单位:128K,可设置值:0、2、3
+///#define TCFG_LOWPOWER_RAM_SIZE 0 // 浣庡姛鑰楁帀鐢祌am澶у皬锛屽崟浣嶏細128K锛屽彲璁剧疆鍊硷細0銆?銆?
///#elif (TCFG_SMART_VOICE_ENABLE || TCFG_AUDIO_ASR_DEVELOP || TCFG_CVP_DEVELOP_ENABLE || TCFG_AUDIO_TRIPLE_MIC_ENABLE\
/// || TCFG_AUDIO_SPATIAL_EFFECT_ENABLE || TCFG_AUDIO_ANC_EAR_ADAPTIVE_EN || TCFG_ANC_SELF_DUT_GET_SZ || AUDIO_DUT_FRE_RESPONE_ENABLE)
-///#define TCFG_LOWPOWER_RAM_SIZE 2 // 低功耗掉电ram大小,单位:128K,可设置值:0、2、3
+///#define TCFG_LOWPOWER_RAM_SIZE 2 // 浣庡姛鑰楁帀鐢祌am澶у皬锛屽崟浣嶏細128K锛屽彲璁剧疆鍊硷細0銆?銆?
///#else
-#define TCFG_LOWPOWER_RAM_SIZE 2 // 低功耗掉电ram大小,单位:128K,可设置值:0、2、3
+#define TCFG_LOWPOWER_RAM_SIZE 2 // 浣庡姛鑰楁帀鐢祌am澶у皬锛屽崟浣嶏細128K锛屽彲璁剧疆鍊硷細0銆?銆?
///#endif
//*********************************************************************************//
-// EQ配置 //
+// EQ閰嶇疆 //
//*********************************************************************************//
-//EQ配置,使用在线EQ时,EQ文件和EQ模式无效。有EQ文件时,使能TCFG_USE_EQ_FILE,默认不用EQ模式切换功能
-#define TCFG_EQ_ENABLE 0 //支持EQ功能,EQ总使能
+//EQ閰嶇疆锛屼娇鐢ㄥ湪绾縀Q鏃讹紝EQ鏂囦欢鍜孍Q妯″紡鏃犳晥銆傛湁EQ鏂囦欢鏃讹紝浣胯兘TCFG_USE_EQ_FILE,榛樿涓嶇敤EQ妯″紡鍒囨崲鍔熻兘
+#define TCFG_EQ_ENABLE 0 //鏀寔EQ鍔熻兘,EQ鎬讳娇鑳?
// #if TCFG_EQ_ENABLE
-#define TCFG_EQ_ONLINE_ENABLE 0 //支持在线EQ调试,如果使用蓝牙串口调试,需要打开宏 APP_ONLINE_DEBUG,否则,默认使用uart调试(二选一)
-#define TCFG_BT_MUSIC_EQ_ENABLE 0 //支持蓝牙音乐EQ
-#define TCFG_PHONE_EQ_ENABLE 0 //支持通话近端EQ
-#define TCFG_AUDIO_OUT_EQ_ENABLE 0 //mix out级,增加EQ高低音接口
+#define TCFG_EQ_ONLINE_ENABLE 0 //鏀寔鍦ㄧ嚎EQ璋冭瘯,濡傛灉浣跨敤钃濈墮涓插彛璋冭瘯锛岄渶瑕佹墦寮€瀹?APP_ONLINE_DEBUG锛屽惁鍒欙紝榛樿浣跨敤uart璋冭瘯(浜岄€変竴)
+#define TCFG_BT_MUSIC_EQ_ENABLE 0 //鏀寔钃濈墮闊充箰EQ
+#define TCFG_PHONE_EQ_ENABLE 0 //鏀寔閫氳瘽杩戠EQ
+#define TCFG_AUDIO_OUT_EQ_ENABLE 0 //mix out绾э紝澧炲姞EQ楂樹綆闊虫帴鍙?
#define TCFG_AEC_DCCS_EQ_ENABLE 0 // AEC DCCS
#define TCFG_AEC_UL_EQ_ENABLE 0 // AEC UL
-#define TCFG_MUSIC_MODE_EQ_ENABLE 0 //支持音乐模式EQ
-#define TCFG_PC_MODE_EQ_ENABLE 0 //支持pc模式EQ
+#define TCFG_MUSIC_MODE_EQ_ENABLE 0 //鏀寔闊充箰妯″紡EQ
+#define TCFG_PC_MODE_EQ_ENABLE 0 //鏀寔pc妯″紡EQ
-#define TCFG_USE_EQ_FILE 0 //离线EQ使用配置文件还是默认系数表 1:使用文件 0 使用默认系数表
+#define TCFG_USE_EQ_FILE 0 //绂荤嚎EQ浣跨敤閰嶇疆鏂囦欢杩樻槸榛樿绯绘暟琛?1锛氫娇鐢ㄦ枃浠? 0 浣跨敤榛樿绯绘暟琛?
#if !TCFG_USE_EQ_FILE
-#define TCFG_USER_EQ_MODE_NUM 7 //EQ默认系数表的模式个数,默认是7个
+#define TCFG_USER_EQ_MODE_NUM 7 //EQ榛樿绯绘暟琛ㄧ殑妯″紡涓暟锛岄粯璁ゆ槸7涓?
#endif
-#define TCFG_EQ_FILE_SWITCH_EN 0 //支持eq配置文件切换(需使能TCFG_USE_EQ_FILE)
+#define TCFG_EQ_FILE_SWITCH_EN 0 //鏀寔eq閰嶇疆鏂囦欢鍒囨崲(闇€浣胯兘TCFG_USE_EQ_FILE)
#if !TCFG_USE_EQ_FILE
#undef TCFG_EQ_FILE_SWITCH_EN
#define TCFG_EQ_FILE_SWITCH_EN 0
#endif
-#define EQ_SECTION_MAX 10 //EQ段数,最大20
-#define TCFG_CALL_DL_EQ_SECTION 3 //通话下行EQ段数,小于等于EQ_SECTION_MAX ,最大10段
-#define TCFG_CALL_UL_EQ_SECTION 3 //通话上行EQ段数,小于等于EQ_SECTION_MAX ,最大10段
+#define EQ_SECTION_MAX 10 //EQ娈垫暟锛屾渶澶?0
+#define TCFG_CALL_DL_EQ_SECTION 3 //閫氳瘽涓嬭EQ娈垫暟,灏忎簬绛変簬EQ_SECTION_MAX 锛屾渶澶?0娈?
+#define TCFG_CALL_UL_EQ_SECTION 3 //閫氳瘽涓婅EQ娈垫暟,灏忎簬绛変簬EQ_SECTION_MAX ,鏈€澶?0娈?
// #endif//TCFG_EQ_ENABLE
@@ -801,13 +802,13 @@ DAC硬件上的连接方式,可选的配置:
#endif
-#define TCFG_DRC_ENABLE 0 //DRC 总使能
-#define TCFG_BT_MUSIC_DRC_ENABLE 0 //支持蓝牙音乐DRC
-#define TCFG_MUSIC_MODE_DRC_ENABLE 0 //支持音乐模式DRC
-#define TCFG_PC_MODE_DRC_ENABLE 0 //支持PC模式DRC
-#define TCFG_CVP_UL_DRC_ENABLE 0 //支持通话上行DRC
+#define TCFG_DRC_ENABLE 0 //DRC 鎬讳娇鑳?
+#define TCFG_BT_MUSIC_DRC_ENABLE 0 //鏀寔钃濈墮闊充箰DRC
+#define TCFG_MUSIC_MODE_DRC_ENABLE 0 //鏀寔闊充箰妯″紡DRC
+#define TCFG_PC_MODE_DRC_ENABLE 0 //鏀寔PC妯″紡DRC
+#define TCFG_CVP_UL_DRC_ENABLE 0 //鏀寔閫氳瘽涓婅DRC
-#define TCFG_AUDIO_MDRC_ENABLE 0 //音乐多带WDRC使能 0:关闭多带WDRC, 1:使能多带WDRC
+#define TCFG_AUDIO_MDRC_ENABLE 0 //闊充箰澶氬甫WDRC浣胯兘 0:鍏抽棴澶氬甫WDRC锛? 1锛氫娇鑳藉甯DRC
#if TCFG_AUDIO_MDRC_ENABLE
#if !TCFG_DRC_ENABLE
#undef TCFG_DRC_ENABLE
@@ -822,28 +823,28 @@ DAC硬件上的连接方式,可选的配置:
#if TCFG_AUDIO_HEARING_AID_ENABLE
#if !TCFG_DRC_ENABLE
#undef TCFG_DRC_ENABLE
-#define TCFG_DRC_ENABLE 0 /*DRC 总使能*/
+#define TCFG_DRC_ENABLE 0 /*DRC */
#endif
#endif
//*********************************************************************************//
-// 新配置工具 && 调音工具 //
+// 鏂伴厤缃伐鍏?&& 璋冮煶宸ュ叿 //
//*********************************************************************************//
-#define TCFG_CFG_TOOL_ENABLE DISABLE //是否支持在线配置工具
-#define TCFG_EFFECT_TOOL_ENABLE DISABLE //是否支持在线音效调试,使能该项还需使能EQ总使能TCFG_EQ_ENABL,
-#define TCFG_NULL_COMM 0 //不支持通信
-#define TCFG_UART_COMM 1 //串口通信
-#define TCFG_USB_COMM 2 //USB通信
-#define TCFG_SPP_COMM 3 //蓝牙SPP通信
+#define TCFG_CFG_TOOL_ENABLE DISABLE //鏄惁鏀寔鍦ㄧ嚎閰嶇疆宸ュ叿
+#define TCFG_EFFECT_TOOL_ENABLE DISABLE //鏄惁鏀寔鍦ㄧ嚎闊虫晥璋冭瘯,浣胯兘璇ラ」杩橀渶浣胯兘EQ鎬讳娇鑳絋CFG_EQ_ENABL,
+#define TCFG_NULL_COMM 0 //涓嶆敮鎸侀€氫俊
+#define TCFG_UART_COMM 1 //涓插彛閫氫俊
+#define TCFG_USB_COMM 2 //USB閫氫俊
+#define TCFG_SPP_COMM 3 //钃濈墮SPP閫氫俊
#if (TCFG_CFG_TOOL_ENABLE || TCFG_EFFECT_TOOL_ENABLE)
-#define TCFG_COMM_TYPE TCFG_USB_COMM //通信方式选择
+#define TCFG_COMM_TYPE TCFG_USB_COMM //閫氫俊鏂瑰紡閫夋嫨
#else
#define TCFG_COMM_TYPE TCFG_NULL_COMM
#endif
-#define TCFG_ONLINE_TX_PORT IO_PORT_DP //UART模式调试TX口选择
-#define TCFG_ONLINE_RX_PORT IO_PORT_DM //UART模式调试RX口选择
-#define TCFG_ONLINE_ENABLE (TCFG_EFFECT_TOOL_ENABLE) //是否支持音效在线调试功能
+#define TCFG_ONLINE_TX_PORT IO_PORT_DP //UART妯″紡璋冭瘯TX鍙i€夋嫨
+#define TCFG_ONLINE_RX_PORT IO_PORT_DM //UART妯″紡璋冭瘯RX鍙i€夋嫨
+#define TCFG_ONLINE_ENABLE (TCFG_EFFECT_TOOL_ENABLE) //鏄惁鏀寔闊虫晥鍦ㄧ嚎璋冭瘯鍔熻兘
-/***********************************非用户配置区***********************************/
+/***********************************闈炵敤鎴烽厤缃尯***********************************/
#include "usb_std_class_def.h"
#if (TCFG_CFG_TOOL_ENABLE || TCFG_EFFECT_TOOL_ENABLE)
#if (TCFG_COMM_TYPE == TCFG_USB_COMM)
@@ -855,82 +856,82 @@ DAC硬件上的连接方式,可选的配置:
#endif
/**********************************************************************************/
-/***********************************非用户配置区***********************************/
+/***********************************闈炵敤鎴烽厤缃尯***********************************/
#if TCFG_EQ_ONLINE_ENABLE
#if (TCFG_USE_EQ_FILE == 0)
#undef TCFG_USE_EQ_FILE
-#define TCFG_USE_EQ_FILE 0 //开在线调试时,打开使用离线配置文件宏定义
+#define TCFG_USE_EQ_FILE 0 //寮€鍦ㄧ嚎璋冭瘯鏃讹紝鎵撳紑浣跨敤绂荤嚎閰嶇疆鏂囦欢瀹忓畾涔?
#endif
#if TCFG_AUDIO_OUT_EQ_ENABLE
#undef TCFG_AUDIO_OUT_EQ_ENABLE
-#define TCFG_AUDIO_OUT_EQ_ENABLE 0 //开在线调试时,关闭高低音
+#define TCFG_AUDIO_OUT_EQ_ENABLE 0 //寮€鍦ㄧ嚎璋冭瘯鏃讹紝鍏抽棴楂樹綆闊?
#endif
#endif
/**********************************************************************************/
//*********************************************************************************//
-// g-sensor配置 //
+// g-sensor閰嶇疆 //
//*********************************************************************************//
-#define TCFG_GSENSOR_ENABLE 0 //gSensor使能
+#define TCFG_GSENSOR_ENABLE 0 //gSensor浣胯兘
#define TCFG_DA230_EN 0
#define TCFG_SC7A20_EN 0
#define TCFG_STK8321_EN 0
#define TCFG_IRSENSOR_ENABLE 0
#define TCFG_JSA1221_ENABLE 0
-#define TCFG_GSENOR_USER_IIC_TYPE 0 //0:软件IIC 1:硬件IIC
+#define TCFG_GSENOR_USER_IIC_TYPE 0 //0:杞欢IIC 1:纭欢IIC
//*********************************************************************************//
-// imu-sensor配置 //
+// imu-sensor閰嶇疆 //
//*********************************************************************************//
-#define TCFG_IMUSENSOR_ENABLE 0 //imu Sensor使能
+#define TCFG_IMUSENSOR_ENABLE 0 //imu Sensor浣胯兘
//mpu6887 cfg
#define TCFG_MPU6887P_ENABLE 0
#define TCFG_MPU6887P_INTERFACE_TYPE 0 //0:iic, 1:spi
-#define TCFG_MPU6887P_USER_IIC_TYPE 0 //iic有效:1:硬件iic, 0:软件iic
-#define TCFG_MPU6887P_USER_IIC_INDEX 0 //IIC 序号
-#define TCFG_MPU6887P_DETECT_IO (-1) //传感器中断io
-#define TCFG_MPU6887P_AD0_SELETE_IO (-1) //iic地址选择io
+#define TCFG_MPU6887P_USER_IIC_TYPE 0 //iic鏈夋晥:1:纭欢iic, 0:杞欢iic
+#define TCFG_MPU6887P_USER_IIC_INDEX 0 //IIC 搴忓彿
+#define TCFG_MPU6887P_DETECT_IO (-1) //浼犳劅鍣ㄤ腑鏂璱o
+#define TCFG_MPU6887P_AD0_SELETE_IO (-1) //iic鍦板潃閫夋嫨io
//icm42607p cfg
#define TCFG_ICM42670P_ENABLE 0
#define TCFG_ICM42670P_INTERFACE_TYPE 0 //0:iic, 1:spi
-#define TCFG_ICM42670P_USER_IIC_TYPE 0 //iic有效:1:硬件iic, 0:软件iic
-#define TCFG_ICM42670P_USER_IIC_INDEX 0 //IIC 序号
-#define TCFG_ICM42670P_DETECT_IO (-1) //传感器中断io
-#define TCFG_ICM42670P_AD0_SELETE_IO (-1) //iic地址选择io
+#define TCFG_ICM42670P_USER_IIC_TYPE 0 //iic鏈夋晥:1:纭欢iic, 0:杞欢iic
+#define TCFG_ICM42670P_USER_IIC_INDEX 0 //IIC 搴忓彿
+#define TCFG_ICM42670P_DETECT_IO (-1) //浼犳劅鍣ㄤ腑鏂璱o
+#define TCFG_ICM42670P_AD0_SELETE_IO (-1) //iic鍦板潃閫夋嫨io
//mpu9250 cfg
#define TCFG_TP_MPU9250_ENABLE 0
-#define TCFG_MPU9250_INTERFACE_TYPE 0 //不支持.0:iic, 1:spi
-#define TCFG_MPU9250_USER_IIC_TYPE 0 //iic有效:1:硬件iic, 0:软件iic
-#define TCFG_MPU9250_USER_IIC_INDEX 0 //IIC 序号
-#define TCFG_MPU9250_DETECT_IO -1 //传感器中断io
+#define TCFG_MPU9250_INTERFACE_TYPE 0 //涓嶆敮鎸?0:iic, 1:spi
+#define TCFG_MPU9250_USER_IIC_TYPE 0 //iic鏈夋晥:1:纭欢iic, 0:杞欢iic
+#define TCFG_MPU9250_USER_IIC_INDEX 0 //IIC 搴忓彿
+#define TCFG_MPU9250_DETECT_IO -1 //浼犳劅鍣ㄤ腑鏂璱o
//sh3001 cfg
#define TCFG_SH3001_ENABLE 0
#define TCFG_SH3001_INTERFACE_TYPE 0 //0:iic, 1:spi
-#define TCFG_SH3001_USER_IIC_TYPE 0 //1:硬件iic, 0:软件iic
-#define TCFG_SH3001_USER_IIC_INDEX 0 //IIC 序号
-#define TCFG_SH3001_DETECT_IO -1 //传感器中断io
+#define TCFG_SH3001_USER_IIC_TYPE 0 //1:纭欢iic, 0:杞欢iic
+#define TCFG_SH3001_USER_IIC_INDEX 0 //IIC 搴忓彿
+#define TCFG_SH3001_DETECT_IO -1 //浼犳劅鍣ㄤ腑鏂璱o
//qmi8658 cfg
#define TCFG_QMI8658_ENABLE 0
#define TCFG_QMI8658_INTERFACE_TYPE 0 //0:iic, 1:spi, 2:i3c
-#define TCFG_QMI8658_USER_IIC_TYPE 0 //1:硬件iic, 0:软件iic
-#define TCFG_QMI8658_USER_IIC_INDEX 0 //IIC 序号
-#define TCFG_QMI8658_DETECT_IO (-1) //传感器中断io
-#define TCFG_QMI8658_AD0_SELETE_IO (-1) //iic地址选择io
+#define TCFG_QMI8658_USER_IIC_TYPE 0 //1:纭欢iic, 0:杞欢iic
+#define TCFG_QMI8658_USER_IIC_INDEX 0 //IIC 搴忓彿
+#define TCFG_QMI8658_DETECT_IO (-1) //浼犳劅鍣ㄤ腑鏂璱o
+#define TCFG_QMI8658_AD0_SELETE_IO (-1) //iic鍦板潃閫夋嫨io
//lsm6dsl cfg
#define TCFG_LSM6DSL_ENABLE 0
#define TCFG_LSM6DSL_INTERFACE_TYPE 0 //0:iic, 1:spi
-#define TCFG_LSM6DSL_USER_IIC_TYPE 0 //1:硬件iic, 0:软件iic
-#define TCFG_LSM6DSL_USER_IIC_INDEX 0 //IIC 序号
-#define TCFG_LSM6DSL_DETECT_IO (-1) //传感器中断io
-#define TCFG_LSM6DSL_AD0_SELETE_IO (-1) //iic地址选择io
+#define TCFG_LSM6DSL_USER_IIC_TYPE 0 //1:纭欢iic, 0:杞欢iic
+#define TCFG_LSM6DSL_USER_IIC_INDEX 0 //IIC 搴忓彿
+#define TCFG_LSM6DSL_DETECT_IO (-1) //浼犳劅鍣ㄤ腑鏂璱o
+#define TCFG_LSM6DSL_AD0_SELETE_IO (-1) //iic鍦板潃閫夋嫨io
//mpu6050 cfg
#define TCFG_MPU6050_EN 0
//qmc5883 cfg
/*
*imu-sensor power manager
- *不用独立IO供电,则配置 NO_CONFIG_PORT
+ *涓嶇敤鐙珛IO渚涚數锛屽垯閰嶇疆 NO_CONFIG_PORT
*/
#define TCFG_IMU_SENSOR_PWR_PORT NO_CONFIG_PORT
@@ -956,21 +957,21 @@ DAC硬件上的连接方式,可选的配置:
#endif/*TCFG_AUDIO_SPATIAL_EFFECT_ENABLE*/
//*********************************************************************************//
-// 系统配置 //
+// 绯荤粺閰嶇疆 //
//*********************************************************************************//
-#define TCFG_AUTO_SHUT_DOWN_TIME 0 //没有蓝牙连接自动关机时间
-#define TCFG_SYS_LVD_EN 0 //电量检测使能
-#define TCFG_POWER_ON_NEED_KEY 1 //是否需要按按键开机配置
-#define TWFG_APP_POWERON_IGNORE_DEV 0 //上电忽略挂载设备,0时不忽略,非0则n毫秒忽略
+#define TCFG_AUTO_SHUT_DOWN_TIME 0 //娌℃湁钃濈墮杩炴帴鑷姩鍏虫満鏃堕棿
+#define TCFG_SYS_LVD_EN 0 //鐢甸噺妫€娴嬩娇鑳?
+#define TCFG_POWER_ON_NEED_KEY 1 //鏄惁闇€瑕佹寜鎸夐敭寮€鏈洪厤缃?
+#define TWFG_APP_POWERON_IGNORE_DEV 0 //涓婄數蹇界暐鎸傝浇璁惧锛?鏃朵笉蹇界暐锛岄潪0鍒檔姣蹇界暐
//*********************************************************************************//
-// 蓝牙配置 //
+// 钃濈墮閰嶇疆 //
//*********************************************************************************//
-#define TCFG_USER_BLE_ENABLE 1 //BLE功能使能
-#define TCFG_USER_BT_CLASSIC_ENABLE 0 //经典蓝牙使能
-#define TCFG_BT_SUPPORT_AAC 0 //AAC格式支持
-#define TCFG_BT_SUPPORT_LDAC 0 //LDAC格式支持
+#define TCFG_USER_BLE_ENABLE 1 //BLE鍔熻兘浣胯兘
+#define TCFG_USER_BT_CLASSIC_ENABLE 0 //缁忓吀钃濈墮浣胯兘
+#define TCFG_BT_SUPPORT_AAC 0 //AAC鏍煎紡鏀寔
+#define TCFG_BT_SUPPORT_LDAC 0 //LDAC鏍煎紡鏀寔
#if TCFG_BT_SUPPORT_LDAC
#define CONFIG_BT_RX_BUFF_SIZE (46 * 1024)
@@ -988,41 +989,41 @@ DAC硬件上的连接方式,可选的配置:
#define USER_SUPPORT_PROFILE_PBAP 0
#if TCFG_USER_TWS_ENABLE
-#define TCFG_BD_NUM 1 //连接设备个数配置
-#define TCFG_AUTO_STOP_PAGE_SCAN_TIME 0 //配置一拖二第一台连接后自动关闭PAGE SCAN的时间(单位分钟)
+#define TCFG_BD_NUM 1 //杩炴帴璁惧涓暟閰嶇疆
+#define TCFG_AUTO_STOP_PAGE_SCAN_TIME 0 //閰嶇疆涓€鎷栦簩绗竴鍙拌繛鎺ュ悗鑷姩鍏抽棴PAGE SCAN鐨勬椂闂?鍗曚綅鍒嗛挓)
#else
-#define TCFG_BD_NUM 1 //连接设备个数配置
-#define TCFG_AUTO_STOP_PAGE_SCAN_TIME 0 //配置一拖二第一台连接后自动关闭PAGE SCAN的时间(单位分钟)
+#define TCFG_BD_NUM 1 //杩炴帴璁惧涓暟閰嶇疆
+#define TCFG_AUTO_STOP_PAGE_SCAN_TIME 0 //閰嶇疆涓€鎷栦簩绗竴鍙拌繛鎺ュ悗鑷姩鍏抽棴PAGE SCAN鐨勬椂闂?鍗曚綅鍒嗛挓)
#endif
-#define BT_INBAND_RINGTONE 0 //是否播放手机自带来电铃声
-#define BT_PHONE_NUMBER 0 //是否播放来电报号
-//#define BT_SUPPORT_DISPLAY_BAT 0 //是否使能电量检测
-//#define BT_SUPPORT_MUSIC_VOL_SYNC 0 //是否使能音量同步
+#define BT_INBAND_RINGTONE 0 //鏄惁鎾斁鎵嬫満鑷甫鏉ョ數閾冨0
+#define BT_PHONE_NUMBER 0 //鏄惁鎾斁鏉ョ數鎶ュ彿
+//#define BT_SUPPORT_DISPLAY_BAT 0 //鏄惁浣胯兘鐢甸噺妫€娴?
+//#define BT_SUPPORT_MUSIC_VOL_SYNC 0 //鏄惁浣胯兘闊抽噺鍚屾
-/*spp数据导出配置*/
+/*spp鏁版嵁瀵煎嚭閰嶇疆*/
#if ((TCFG_AUDIO_DATA_EXPORT_ENABLE == AUDIO_DATA_EXPORT_USE_SPP) || TCFG_AUDIO_MIC_DUT_ENABLE)
#undef TCFG_USER_TWS_ENABLE
#undef TCFG_USER_BLE_ENABLE
#undef TCFG_BD_NUM
#undef USER_SUPPORT_PROFILE_SPP
#undef USER_SUPPORT_PROFILE_A2DP
-#define TCFG_USER_TWS_ENABLE 0//spp数据导出,关闭tws
-#define TCFG_USER_BLE_ENABLE 0//spp数据导出,关闭ble
-#define TCFG_BD_NUM 1//连接设备个数配置
+#define TCFG_USER_TWS_ENABLE 0//spp鏁版嵁瀵煎嚭锛屽叧闂璽ws
+#define TCFG_USER_BLE_ENABLE 0//spp鏁版嵁瀵煎嚭锛屽叧闂璪le
+#define TCFG_BD_NUM 1//杩炴帴璁惧涓暟閰嶇疆
#define USER_SUPPORT_PROFILE_SPP 1
#define USER_SUPPORT_PROFILE_A2DP 0
-#define APP_ONLINE_DEBUG 1//通过spp导出数据
+#define APP_ONLINE_DEBUG 1//閫氳繃spp瀵煎嚭鏁版嵁
#else
-#define APP_ONLINE_DEBUG 0//在线APP调试,发布默认不开
+#define APP_ONLINE_DEBUG 0//鍦ㄧ嚎APP璋冭瘯,鍙戝竷榛樿涓嶅紑
#endif/*TCFG_AUDIO_DATA_EXPORT_ENABLE*/
-/*以下功能需要打开SPP和在线调试功能
- *1、回音消除参数在线调试
- *2、通话CVP_DUT 产测模式
- *3、ANC工具蓝牙spp调试
- *4、配置/调音工具spp调试
- *5、空间音频在线工具spp调试
+/*浠ヤ笅鍔熻兘闇€瑕佹墦寮€SPP鍜屽湪绾胯皟璇曞姛鑳?
+ *1銆佸洖闊虫秷闄ゅ弬鏁板湪绾胯皟璇?
+ *2銆侀€氳瘽CVP_DUT 浜ф祴妯″紡
+ *3銆丄NC宸ュ叿钃濈墮spp璋冭瘯
+ *4銆侀厤缃?璋冮煶宸ュ叿spp璋冭瘯
+ *5銆佺┖闂撮煶棰戝湪绾垮伐鍏穝pp璋冭瘯
*/
#if (TCFG_AEC_TOOL_ONLINE_ENABLE || TCFG_AUDIO_CVP_DUT_ENABLE || TCFG_ANC_TOOL_DEBUG_ONLINE \
|| (TCFG_SENSOR_DATA_EXPORT_ENABLE == SENSOR_DATA_EXPORT_USE_SPP) \
@@ -1041,9 +1042,9 @@ DAC硬件上的连接方式,可选的配置:
#endif
//*********************************************************************************//
-// 编解码格式配置(CodecFormat) //
+// 缂栬В鐮佹牸寮忛厤缃?CodecFormat) //
//*********************************************************************************//
-/*解码格式使能*/
+/*瑙g爜鏍煎紡浣胯兘*/
#define TCFG_DEC_MP3_ENABLE ENABLE
#define TCFG_DEC_WTGV2_ENABLE 0
#define TCFG_DEC_G729_ENABLE DISABLE
@@ -1067,7 +1068,7 @@ DAC硬件上的连接方式,可选的配置:
#define TCFG_DEC_SPEEX_ENABLE DISABLE
#define TCFG_DEC_OPUS_ENABLE DISABLE
-/*编码格式使能*/
+/*缂栫爜鏍煎紡浣胯兘*/
#define TCFG_ENC_MSBC_ENABLE 0
#define TCFG_ENC_CVSD_ENABLE 0
#define TCFG_ENC_OPUS_ENABLE DISABLE
@@ -1076,17 +1077,17 @@ DAC硬件上的连接方式,可选的配置:
/*提示音叠加配置*/
#define TCFG_WAV_TONE_MIX_ENABLE DISABLE
#define TCFG_MP3_TONE_MIX_ENABLE DISABLE
-#define TCFG_AAC_TONE_MIX_ENABLE DISABLE//叠加AAC解码需要使用malloc
+#define TCFG_AAC_TONE_MIX_ENABLE DISABLE//鍙犲姞AAC瑙g爜闇€瑕佷娇鐢╩alloc
#define TCFG_WTG_TONE_MIX_ENABLE 0
#define TCFG_WTS_TONE_MIX_ENABLE 0
//*********************************************************************************//
-// fm emitter 配置 (不支持) //
+// fm emitter 閰嶇疆 (涓嶆敮鎸? //
//*********************************************************************************//
#define TCFG_APP_FM_EMITTER_EN DISABLE_THIS_MOUDLE
//*********************************************************************************//
-// AI配置 //
+// AI閰嶇疆 //
//*********************************************************************************//
#if TCFG_USER_BLE_ENABLE
#define DUEROS_DMA_EN 0
@@ -1106,7 +1107,7 @@ DAC硬件上的连接方式,可选的配置:
#endif
#if(DUEROS_DMA_EN)
-#define USE_DMA_TONE 0 //使用DMA提示音
+#define USE_DMA_TONE 0 //浣跨敤DMA鎻愮ず闊?
#else
#define USE_DMA_TONE 0
#endif
@@ -1117,26 +1118,26 @@ DAC硬件上的连接方式,可选的配置:
#endif
//*********************************************************************************//
-// 环绕音效使能
+// 鐜粫闊虫晥浣胯兘
//*********************************************************************************//
-#define AUDIO_SURROUND_CONFIG 0//3d环绕
+#define AUDIO_SURROUND_CONFIG 0//3d鐜粫
-#define AUDIO_VBASS_CONFIG 0//虚拟低音,24M mips
+#define AUDIO_VBASS_CONFIG 0//铏氭嫙浣庨煶,24M mips
-#define TCFG_AUDIO_BASS_BOOST DISABLE_THIS_MOUDLE//低音增强功能
-#define TCFG_AUDIO_BASS_BOOST_TEST DISABLE_THIS_MOUDLE//默认使用PP用于功能有效性测试,产品开发时,默认关闭
+#define TCFG_AUDIO_BASS_BOOST DISABLE_THIS_MOUDLE//浣庨煶澧炲己鍔熻兘
+#define TCFG_AUDIO_BASS_BOOST_TEST DISABLE_THIS_MOUDLE//榛樿浣跨敤PP鐢ㄤ簬鍔熻兘鏈夋晥鎬ф祴璇?浜у搧寮€鍙戞椂锛岄粯璁ゅ叧闂?
#if TCFG_AUDIO_BASS_BOOST
#if (!TCFG_DRC_ENABLE)
-#error "低音增强需使能DRC宏TCFG_DRC_ENABLE"
+#error "浣庨煶澧炲己闇€浣胯兘DRC瀹廡CFG_DRC_ENABLE"
#endif
#endif
-#define AEC_PITCHSHIFTER_CONFIG 0 //通话上行变声,左耳触发变大叔声,右耳触发变女声
+#define AEC_PITCHSHIFTER_CONFIG 0 //閫氳瘽涓婅鍙樺0,宸﹁€宠Е鍙戝彉澶у彅澹帮紝鍙宠€宠Е鍙戝彉濂冲0
-#define AEC_PRESETS_UL_EQ_CONFIG 0 //通话上行预设eq系数表使能,使能后不使用效果文件的系数表
+#define AEC_PRESETS_UL_EQ_CONFIG 0 //閫氳瘽涓婅棰勮eq绯绘暟琛ㄤ娇鑳斤紝浣胯兘鍚庝笉浣跨敤鏁堟灉鏂囦欢鐨勭郴鏁拌〃
-#define AUDIO_SPK_EQ_CONFIG 0//SPK_EQ 使能
+#define AUDIO_SPK_EQ_CONFIG 0//SPK_EQ 浣胯兘
#if AUDIO_SPK_EQ_CONFIG
#if (EQ_SECTION_MAX < 10)
#undef EQ_SECTION_MAX
@@ -1147,21 +1148,21 @@ DAC硬件上的连接方式,可选的配置:
#define APP_ONLINE_DEBUG 1
#endif
#if (!TCFG_EQ_ENABLE)
-#error "需使能总eq宏TCFG_EQ_ENABLE"
+#error "闇€浣胯兘鎬籩q瀹廡CFG_EQ_ENABLE"
#endif
#endif/*AUDIO_SPK_EQ_CONFIG*/
//*********************************************************************************//
-// 电源切换配置 //
+// 鐢垫簮鍒囨崲閰嶇疆 //
//*********************************************************************************//
#define CONFIG_PHONE_CALL_USE_LDO15 0
//*********************************************************************************//
-// 时钟切换配置 //
+// 鏃堕挓鍒囨崲閰嶇疆 //
//*********************************************************************************//
#define CONFIG_BT_NORMAL_HZ (24 * 1000000L)
@@ -1184,13 +1185,13 @@ DAC硬件上的连接方式,可选的配置:
//*********************************************************************************//
-// 第三方音效算法配置 //
+// 绗笁鏂归煶鏁堢畻娉曢厤缃? //
//*********************************************************************************//
#define TCFG_DIAFX_ENABLE 0
//#define TCFG_EFFECT_DEVELOP_ENABLE 0
#if (TCFG_EQ_ONLINE_ENABLE && (!TCFG_EFFECT_TOOL_ENABLE) || (!TCFG_EQ_ONLINE_ENABLE && (TCFG_EFFECT_TOOL_ENABLE)))
-#error "音效在线调试需使能调音工具宏TCFG_EFFECT_TOOL_ENABLE"
+#error "闊虫晥鍦ㄧ嚎璋冭瘯闇€浣胯兘璋冮煶宸ュ叿瀹廡CFG_EFFECT_TOOL_ENABLE"
#endif
#if TCFG_AUDIO_OUTPUT_IIS && (SYS_VOL_TYPE != VOL_TYPE_DIGITAL)
@@ -1198,10 +1199,11 @@ DAC硬件上的连接方式,可选的配置:
#endif
//*********************************************************************************//
-// 配置结束 //
+// 閰嶇疆缁撴潫 //
//*********************************************************************************//
#endif //CONFIG_BOARD_JL701N_DEMO
#endif //CONFIG_BOARD_JL701N_DEMO_CFG_H
+
diff --git a/apps/usr_app/app_audio_debug.h b/apps/usr_app/app_audio_debug.h
new file mode 100644
index 0000000..9580aa3
--- /dev/null
+++ b/apps/usr_app/app_audio_debug.h
@@ -0,0 +1,14 @@
+#ifndef APP_AUDIO_DEBUG_H
+#define APP_AUDIO_DEBUG_H
+
+#include "app_config.h"
+#include "system/includes.h"
+
+/* UTF-8 中文日志;只在状态变化时打印,不在音频采样循环内连续打印。 */
+#if TCFG_MAGIC_AUDIO_DEBUG_ENABLE
+#define MAGIC_AUDIO_LOG(fmt, ...) printf("[魔盒声音] " fmt "\n", ##__VA_ARGS__)
+#else
+#define MAGIC_AUDIO_LOG(...) do { } while (0)
+#endif
+
+#endif /* APP_AUDIO_DEBUG_H */
diff --git a/apps/usr_app/app_boot.c b/apps/usr_app/app_boot.c
index a66e864..e1971b5 100644
--- a/apps/usr_app/app_boot.c
+++ b/apps/usr_app/app_boot.c
@@ -127,8 +127,10 @@ static uint8_t boot_skip_key_wait(void)
/* USB 在位(充电口有电):说明是插着电源,不是用户凭空按键开机 */
for (i = 0; i < 10; i++) {
- if (bsp_chg_is_low() || bsp_vpwr_is_online()
- || get_ldo5v_online_hw()) {
+ /* VPWR/LDO5V are the authoritative external-power indicators.
+ * CHRG is open-drain and is only meaningful after VPWR is present;
+ * do not let an abnormal low PG8 skip the key wait by itself. */
+ if (get_ldo5v_online_hw()) {
log_info("boot usb, skip key wait\n");
return 1;
}
diff --git a/apps/usr_app/app_function.c b/apps/usr_app/app_function.c
index b39a4ca..e998936 100644
--- a/apps/usr_app/app_function.c
+++ b/apps/usr_app/app_function.c
@@ -19,6 +19,9 @@
#include "app_mode.h"
#include "app_led.h"
#include "app_shake_wake.h"
+#include "app_no_disturb.h"
+#include "car_audio_test.h"
+#include "app_audio_debug.h"
#include "app_time_util.h"
#include "bsp_hw.h"
#include "board_pin.h"
@@ -46,7 +49,6 @@ typedef struct {
volatile uint8_t play_write_pending;
volatile uint8_t play_write_mode;
uint8_t shake_wake;
- uint8_t no_disturb;
} AppFunctionCtx_t;
static AppFunctionCtx_t s_func;
@@ -71,7 +73,6 @@ void app_function_init(void)
app_shake_wake_init(function_shake_wake_allowed,
function_shake_wake_trigger);
s_func.shake_wake = !!gDevData.shake_wake;
- s_func.no_disturb = !!gDevData.no_disturb_enable[0];
app_shake_wake_set_enable(s_func.shake_wake);
}
@@ -105,12 +106,6 @@ void app_function_set_shake_wake(uint8_t enable)
app_shake_wake_set_enable(s_func.shake_wake);
}
-void app_function_set_no_disturb(uint8_t enable)
-{
- s_func.no_disturb = !!enable;
- app_shake_wake_reset();
-}
-
/**
* @brief 跟随 APP 下发的 DP0/DP1,并处理 DP2 手动点动
* @return 无
@@ -120,10 +115,6 @@ void app_function_poll(void)
if (s_func.shake_wake != !!gDevData.shake_wake) {
app_function_set_shake_wake(gDevData.shake_wake);
}
- if (s_func.no_disturb != !!gDevData.no_disturb_enable[0]) {
- app_function_set_no_disturb(gDevData.no_disturb_enable[0]);
- }
-
if (s_func.power_write_pending) {
uint8_t enable = s_func.power_write_value;
s_func.power_write_pending = 0;
@@ -265,6 +256,10 @@ static void function_play_mode_apply(uint8_t mode)
{
uint8_t old_mode = s_func.play_mode;
+ MAGIC_AUDIO_LOG("模式切换请求:旧=%u,请求=%u,DP4=%u,功能开关=%u,充电=%u,关机中=%u,OTA=%u",
+ old_mode, mode, gDevData.beep_trig, s_func.app_power,
+ app_power_usb_online(), app_power_poweroff_pending(), app_led_is_ota());
+
if (mode > PLAY_MODE_5) {
mode = 0;
}
@@ -284,10 +279,17 @@ static void function_play_mode_apply(uint8_t mode)
} else {
app_mode_start(mode);
}
+ // MAGIC_AUDIO_LOG("模式切换结果:旧=%u,实际=%u;当前测试不拦截DP4", old_mode, mode);
if (mode != old_mode) {
- app_led_request_mode_blink(); /* 模式真变了才闪两下 */
+ app_led_request_mode_blink(); /* 模式真变了才闪两下 */
+
+ /* DP4:0=关闭模式切换鸟叫,1=允许播放 */
+ //&& gDevData.beep_trig
+ if ((mode != PLAY_MODE_0) && gDevData.beep_trig) {
+ Car_Audio_Test_Play();
}
}
+}
/**
* @brief 跟随 APP 下发的 DP1 自动模式
@@ -384,7 +386,7 @@ static void function_hand_poll(void)
s_func.play_mode = 0;
s_func.play_ms = 0;
gDevData.play_mode = 0;
- app_mode_stop(); /* 自动切手动:先停自动玩法 */
+ app_mode_stop();
s_func.hand_busy = 1;
s_func.hand_ms = 0;
gDevData.hand_mode = cmd;
@@ -395,10 +397,10 @@ static void function_hand_poll(void)
bsp_drive_set(BSP_MOTOR_STOP, 0,
BSP_MOTOR_FORWARD, 5500);
}
- app_led_request_mode_blink(); /* 自动/空闲切到手动,闪两下提示 */
- log_info("hand cmd=%d %s max=%ums\n", cmd,
- (cmd == HAND_MODE_1) ? "upper" : "lower",
- (unsigned)BOARD_HAND_PULSE_MS);
+ app_led_request_mode_blink();
+ if (gDevData.beep_trig) {
+ Car_Audio_Test_Play();
+ }
} else {
gDevData.hand_mode = HAND_MODE_0;
if (s_func.hand_busy) {
@@ -501,7 +503,7 @@ static uint8_t function_power_on(uint8_t show_hint)
static uint8_t function_shake_wake_allowed(void)
{
return s_func.shake_wake &&
- !s_func.no_disturb &&
+ !app_no_disturb_is_active() &&
!s_func.app_power &&
!app_power_usb_online() &&
!app_power_poweroff_pending() &&
diff --git a/apps/usr_app/app_function.h b/apps/usr_app/app_function.h
index e4c7c1b..d35cde2 100644
--- a/apps/usr_app/app_function.h
+++ b/apps/usr_app/app_function.h
@@ -39,9 +39,6 @@ void app_function_dp_hand_write(uint8_t cmd);
/** CBC4 DP6 震动开机开关。 */
void app_function_set_shake_wake(uint8_t enable);
-/** 勿扰时段是否正在生效;生效时屏蔽震动开机。 */
-void app_function_set_no_disturb(uint8_t enable);
-
/**
* @brief 跟随 APP 下发的 DP0/DP1,并处理 DP2 手动点动,每个业务 tick 调用一次
* @return 无
diff --git a/apps/usr_app/app_no_disturb.c b/apps/usr_app/app_no_disturb.c
new file mode 100644
index 0000000..c3de5e7
--- /dev/null
+++ b/apps/usr_app/app_no_disturb.c
@@ -0,0 +1,145 @@
+#include "app_no_disturb.h"
+#include "system/includes.h"
+#include "usr_rtc.h"
+
+#define APP_NO_DISTURB_VM_ID 28U
+#define APP_NO_DISTURB_MAGIC 0x4e44U
+#define APP_NO_DISTURB_VERSION 1U
+#define APP_MINUTES_PER_DAY (24U * 60U)
+
+typedef struct __attribute__((packed)) {
+ uint16_t magic;
+ uint8_t version;
+ uint8_t cfg[APP_NO_DISTURB_CFG_LEN];
+} AppNoDisturbVm_t;
+
+typedef struct {
+ uint8_t enabled;
+ uint8_t weekdays_mask;
+ uint16_t start_minute;
+ uint16_t end_minute;
+} AppNoDisturbCtx_t;
+
+static AppNoDisturbCtx_t s_no_disturb;
+
+static uint8_t app_no_disturb_cfg_valid(const uint8_t cfg[APP_NO_DISTURB_CFG_LEN])
+{
+ uint8_t i;
+
+ if (!cfg || cfg[0] > 1U || cfg[9] >= 24U || cfg[11] >= 24U ||
+ cfg[10] >= 60U || cfg[12] >= 60U) {
+ return 0;
+ }
+ for (i = 0; i < 7U; i++) {
+ if (cfg[2U + i] > 1U) {
+ return 0;
+ }
+ }
+ return 1;
+}
+
+void app_no_disturb_configure(uint8_t enable, uint8_t weekdays_mask,
+ uint16_t start_minute, uint16_t end_minute)
+{
+ s_no_disturb.enabled = !!enable;
+ s_no_disturb.weekdays_mask = weekdays_mask & 0x7fU;
+ s_no_disturb.start_minute = start_minute;
+ s_no_disturb.end_minute = end_minute;
+}
+
+uint8_t app_no_disturb_storage_load(uint8_t cfg[APP_NO_DISTURB_CFG_LEN])
+{
+ AppNoDisturbVm_t vm;
+ int ret;
+
+ if (!cfg) {
+ return 0;
+ }
+ memset(&vm, 0, sizeof(vm));
+ ret = syscfg_read(APP_NO_DISTURB_VM_ID, &vm, sizeof(vm));
+ if (ret != (int)sizeof(vm) || vm.magic != APP_NO_DISTURB_MAGIC ||
+ vm.version != APP_NO_DISTURB_VERSION || !app_no_disturb_cfg_valid(vm.cfg)) {
+ memset(cfg, 0, APP_NO_DISTURB_CFG_LEN);
+ return 0;
+ }
+ memcpy(cfg, vm.cfg, APP_NO_DISTURB_CFG_LEN);
+ return 1;
+}
+
+uint8_t app_no_disturb_storage_save(const uint8_t cfg[APP_NO_DISTURB_CFG_LEN])
+{
+ AppNoDisturbVm_t vm;
+
+ if (!app_no_disturb_cfg_valid(cfg)) {
+ return 0;
+ }
+ memset(&vm, 0, sizeof(vm));
+ vm.magic = APP_NO_DISTURB_MAGIC;
+ vm.version = APP_NO_DISTURB_VERSION;
+ memcpy(vm.cfg, cfg, APP_NO_DISTURB_CFG_LEN);
+ return (uint8_t)(syscfg_write(APP_NO_DISTURB_VM_ID, &vm, sizeof(vm)) ==
+ (int)sizeof(vm));
+}
+
+static uint8_t app_no_disturb_weekday_monday0(const struct sys_time *time)
+{
+ static const uint8_t month_offset[12] = {
+ 0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4
+ };
+ uint32_t year = time->year;
+ uint8_t sunday0;
+
+ if (time->month < 3U) {
+ year--;
+ }
+ sunday0 = (uint8_t)((year + year / 4U - year / 100U + year / 400U +
+ month_offset[time->month - 1U] + time->day) % 7U);
+ return (uint8_t)((sunday0 + 6U) % 7U);
+}
+
+static uint8_t app_no_disturb_day_selected(uint8_t weekday)
+{
+ return (uint8_t)((s_no_disturb.weekdays_mask & (1U << weekday)) != 0U);
+}
+
+uint8_t app_no_disturb_is_active_at(const struct sys_time *time)
+{
+ uint8_t weekday;
+ uint16_t now_minute;
+
+ if (!time || !s_no_disturb.enabled || !s_no_disturb.weekdays_mask ||
+ s_no_disturb.start_minute >= APP_MINUTES_PER_DAY ||
+ s_no_disturb.end_minute >= APP_MINUTES_PER_DAY ||
+ time->month < 1U || time->month > 12U || time->day < 1U ||
+ time->day > 31U || time->hour > 23U || time->min > 59U) {
+ return 0;
+ }
+ weekday = app_no_disturb_weekday_monday0(time);
+ now_minute = (uint16_t)(time->hour * 60U + time->min);
+
+ if (s_no_disturb.start_minute == s_no_disturb.end_minute) {
+ return app_no_disturb_day_selected(weekday);
+ }
+ if (s_no_disturb.start_minute < s_no_disturb.end_minute) {
+ return app_no_disturb_day_selected(weekday) &&
+ now_minute >= s_no_disturb.start_minute &&
+ now_minute < s_no_disturb.end_minute;
+ }
+ if (now_minute >= s_no_disturb.start_minute) {
+ return app_no_disturb_day_selected(weekday);
+ }
+ if (now_minute < s_no_disturb.end_minute) {
+ return app_no_disturb_day_selected((uint8_t)((weekday + 6U) % 7U));
+ }
+ return 0;
+}
+
+uint8_t app_no_disturb_is_active(void)
+{
+ struct sys_time time;
+
+ if (!usr_rtc_get_time(&time)) {
+ return 0;
+ }
+ return app_no_disturb_is_active_at(&time);
+}
diff --git a/apps/usr_app/app_no_disturb.h b/apps/usr_app/app_no_disturb.h
new file mode 100644
index 0000000..dda8403
--- /dev/null
+++ b/apps/usr_app/app_no_disturb.h
@@ -0,0 +1,17 @@
+#ifndef __APP_NO_DISTURB_H__
+#define __APP_NO_DISTURB_H__
+
+#include
+#include "system/sys_time.h"
+
+#define APP_NO_DISTURB_CFG_LEN 13
+
+/* DP7: bytes 2..8 are Monday..Sunday, byte 1 is reserved. */
+void app_no_disturb_configure(uint8_t enable, uint8_t weekdays_mask,
+ uint16_t start_minute, uint16_t end_minute);
+uint8_t app_no_disturb_storage_load(uint8_t cfg[APP_NO_DISTURB_CFG_LEN]);
+uint8_t app_no_disturb_storage_save(const uint8_t cfg[APP_NO_DISTURB_CFG_LEN]);
+uint8_t app_no_disturb_is_active(void);
+uint8_t app_no_disturb_is_active_at(const struct sys_time *time);
+
+#endif /* __APP_NO_DISTURB_H__ */
diff --git a/apps/usr_app/app_power.c b/apps/usr_app/app_power.c
index 5aaa07c..8ab5229 100644
--- a/apps/usr_app/app_power.c
+++ b/apps/usr_app/app_power.c
@@ -36,14 +36,21 @@
#define BAT_BOOT_MS 3000 /* 上电 3s 内不因低电深睡 */
#define BAT_LOG_MS 10000
#define BAT_PERIODIC_LOG_ENABLE 0 /* Production standby must not wake UART periodically. */
+#define CHG_ON_CONFIRM_MS 50u
+#define CHG_OFF_CONFIRM_MS 150u
+#define CHG_FULL_RECHECK_MS 1000u
#define BAT_LOW_WIN 3 /* 连续约 2.4s 才进低电告警(仅闪灯,不关机) */
-/** 充电检测:CHG/VPWR 消抖后的结果 */
+/** TP4056 CHRG/STDBY debounced charging state. */
typedef struct {
uint8_t usb_online;
- uint8_t charge_led; /**< 0=无 1=充电红 2=充满绿 */
- uint8_t charge_led_last; /**< 仅用于变化时打日志 */
- uint16_t full_ms; /**< 拔电瞬间 CHG 先变高,需等满 1s 才当充满 */
+ uint8_t charge_led;
+ uint8_t charge_led_last;
+ uint16_t charging_ms;
+ uint16_t unplugged_ms;
+ uint16_t full_ms;
+ uint16_t full_recheck_ms;
+ uint8_t full_latched;
} AppChargeState_t;
/** 电量采样:滑动平均 + 百分比 */
@@ -221,7 +228,7 @@ static void power_do_poweroff(void *priv)
}
/**
- * @brief 充电检测:CHG 低=充电中;VPWR 在且 CHG 高满 1s=充满;拔电报 USB_OUT
+ * @brief TP4056 CHRG/STDBY 组合检测,稳定状态变化后报告 USB 事件
* @param dt 距上次调用的毫秒数
* @return USB 插拔边沿事件
*/
@@ -229,37 +236,71 @@ static AppPowerEvt_t power_charge_tick(uint16_t dt)
{
AppChargeState_t *c = &s_power.charge;
uint8_t chg_low = bsp_chg_is_low();
- uint8_t vpwr = bsp_vpwr_is_online();
- uint8_t usb;
+ uint8_t stby_low = bsp_stby_is_low();
+ uint8_t usb = c->usb_online;
AppPowerEvt_t evt = APP_POWER_EVT_NONE;
- if (chg_low) {
- /* CHG 拉低:正在充电,红灯 */
+ if (chg_low && stby_low) {
+ /* 00 is invalid: keep the previous stable state. */
+ c->charging_ms = 0;
+ c->unplugged_ms = 0;
c->full_ms = 0;
- c->charge_led = 1;
- gDevData.charge = CHARGE_1;
- usb = 1;
- } else if (vpwr) {
- /* VPWR 在但 CHG 已高:可能是充满,也可能是拔电瞬间 CHG 先变高。
- * 等满 BOARD_CHG_FULL_MS 才当真充满,避免拔电误报绿灯 */
- c->full_ms = app_add_ms(c->full_ms, dt);
- if (c->full_ms >= BOARD_CHG_FULL_MS) {
- c->charge_led = 2;
+ c->full_recheck_ms = 0;
+ } else if (!chg_low && !stby_low) {
+ /* 11: charger absent. */
+ c->charging_ms = 0;
+ c->full_ms = 0;
+ c->full_recheck_ms = 0;
+ c->unplugged_ms = app_add_ms(c->unplugged_ms, dt);
+ if (c->unplugged_ms >= CHG_OFF_CONFIRM_MS) {
+ c->charge_led = 0;
+ c->full_latched = 0;
+ usb = 0;
}
- gDevData.charge = (c->charge_led == 1) ? CHARGE_1 : CHARGE_2;
- usb = 1;
- } else {
- /* USB 不在位:充电灯灭 */
+ } else if (chg_low) {
+ /* 01: charging. */
+ c->unplugged_ms = 0;
c->full_ms = 0;
- c->charge_led = 0;
- gDevData.charge = CHARGE_2;
- usb = 0;
+ if (c->full_latched) {
+ c->charging_ms = 0;
+ c->full_recheck_ms = app_add_ms(c->full_recheck_ms, dt);
+ if (c->full_recheck_ms >= CHG_FULL_RECHECK_MS) {
+ c->full_latched = 0;
+ c->charge_led = 1;
+ }
+ usb = 1;
+ } else {
+ c->full_recheck_ms = 0;
+ c->charging_ms = app_add_ms(c->charging_ms, dt);
+ if (c->charging_ms >= CHG_ON_CONFIRM_MS) {
+ c->charge_led = 1;
+ usb = 1;
+ }
+ }
+ } else {
+ /* 10: charge complete. */
+ c->charging_ms = 0;
+ c->unplugged_ms = 0;
+ c->full_recheck_ms = 0;
+ if (c->full_latched) {
+ c->charge_led = 2;
+ usb = 1;
+ } else {
+ c->full_ms = app_add_ms(c->full_ms, dt);
+ if (c->full_ms >= BOARD_CHG_FULL_MS) {
+ c->charge_led = 2;
+ c->full_latched = 1;
+ usb = 1;
+ }
+ }
}
+ gDevData.charge = (c->charge_led == 1) ? CHARGE_1 : CHARGE_2;
+
if (usb != c->usb_online) {
c->usb_online = usb;
- log_info("usb %s vpwr=%d chg=%d mv=%d pair=%d goto=%d\n",
- usb ? "in" : "out", vpwr, chg_low, bsp_vpwr_mv(),
+ log_info("charge input %s chg_low=%d stby_low=%d pair=%d goto=%d\n",
+ usb ? "in" : "out", chg_low, stby_low,
usr_get_pair_flag(), usr_var.usr_goto_pair);
usr_var.usr_power_charge_flag = usb ? 1 : 2;
if (usb) {
@@ -272,10 +313,10 @@ static AppPowerEvt_t power_charge_tick(uint16_t dt)
if (c->charge_led != c->charge_led_last) {
c->charge_led_last = c->charge_led;
- log_info("charge_led=%d chg=%d vpwr=%d mv=%d\n",
- c->charge_led, chg_low, vpwr, bsp_vpwr_mv());
+ log_info("charge_led=%d chg_low=%d stby_low=%d\n",
+ c->charge_led, chg_low, stby_low);
if (c->charge_led == 2) {
- /* 硬件(CHG+VPWR 满 BOARD_CHG_FULL_MS)判定充满,电量强制收尾到
+ /* STDBY 持续为低满 BOARD_CHG_FULL_MS 后判定充满,电量强制收尾到
* 100%,避免电压拟合曲线因基准/温漂等原因走不到 100% 就卡住 */
app_battery_set_percent(100);
s_power.sample.pct = 100;
diff --git a/apps/usr_app/car_audio_test.c b/apps/usr_app/car_audio_test.c
new file mode 100644
index 0000000..97f3d3b
--- /dev/null
+++ b/apps/usr_app/car_audio_test.c
@@ -0,0 +1,51 @@
+/******************************************************************************
+ * @file car_audio_test.c
+ * @brief Car audio hardware test using the SDK key-tone sine path.
+ *
+ * Notes:
+ * - The SDK sine sample rate is 16 kHz; points is the PCM sample count.
+ * - freq is specified as actual frequency * 512.
+ * - decay=0 keeps amplitude constant for observing DAC/PA end behavior.
+ * - The parameter array has static storage because playback is asynchronous.
+ ******************************************************************************/
+
+
+#include
+#include "system/includes.h"
+#include "tone_player.h"
+#include "application/audio_dec_app.h"
+#include "car_audio_test.h"
+#include "app_audio_debug.h"
+
+static uint16_t s_car_audio_restart_guard_ms;
+
+int Car_Audio_Test_Play(void)
+{
+ /* bird.mp3 is packed as a standalone file in the internal resource area. */
+ int ret;
+ MAGIC_AUDIO_LOG("鸟叫接口进入:资源=%s,当前播放状态=%d",
+ SDFILE_RES_ROOT_PATH"bird.mp3", audio_key_tone_is_play());
+ ret = audio_key_tone_play_name(SDFILE_RES_ROOT_PATH"bird.mp3", 1);
+ MAGIC_AUDIO_LOG("鸟叫请求返回=%d(0仅表示请求已提交,不代表已经出声)", ret);
+ return ret;
+}
+
+
+void Car_Audio_Test_Loop(uint16_t dt_ms)
+{
+ if (s_car_audio_restart_guard_ms > dt_ms) {
+ s_car_audio_restart_guard_ms -= dt_ms;
+ return;
+ }
+
+ if (audio_key_tone_is_play()) {
+ return;
+ }
+
+ if (Car_Audio_Test_Play() == 0) {
+ /*
+ * 防止播放请求刚入队、SDK 尚未更新播放状态时被重复提交。
+ */
+ s_car_audio_restart_guard_ms = 50;
+ }
+}
diff --git a/apps/usr_app/car_audio_test.h b/apps/usr_app/car_audio_test.h
new file mode 100644
index 0000000..417bfe7
--- /dev/null
+++ b/apps/usr_app/car_audio_test.h
@@ -0,0 +1,26 @@
+/******************************************************************************
+ * @file car_audio_test.h
+ * @brief Car audio hardware test API using the SDK key-tone sine path.
+ ******************************************************************************/
+#include
+#ifndef __CAR_AUDIO_TEST_H__
+#define __CAR_AUDIO_TEST_H__
+
+/**
+ * @brief Play the bird-call MP3 stored in the internal resource area.
+ *
+ * The API only queues a request. Playback is asynchronous in the SDK key-tone
+ * task; it does not wait for completion or block the caller. This test is not
+ * triggered automatically; call it explicitly from test code.
+ *
+ * @return 0=request queued; negative value=module unavailable/request failed.
+ */
+int Car_Audio_Test_Play(void);
+
+/**
+ * @brief 开机状态下维护循环测试音。
+ * @param dt_ms 距离上次调用的毫秒数
+ */
+void Car_Audio_Test_Loop(uint16_t dt_ms);
+
+#endif /* __CAR_AUDIO_TEST_H__ */
diff --git a/apps/usr_jb_proto/Protocol/jb_product.c b/apps/usr_jb_proto/Protocol/jb_product.c
index 5c63621..f60853a 100644
--- a/apps/usr_jb_proto/Protocol/jb_product.c
+++ b/apps/usr_jb_proto/Protocol/jb_product.c
@@ -14,7 +14,7 @@
#include "jb_product.h"
#include "app_function.h"
-#include "usr_rtc.h"
+#include "app_no_disturb.h"
/* ════════════════════════════════════════════════════════════════
* 全局变量
@@ -30,70 +30,26 @@ static volatile uint32_t timerMs;
#define JB_DND_START_MIN_OFFSET 10
#define JB_DND_END_HOUR_OFFSET 11
#define JB_DND_END_MIN_OFFSET 12
-static uint8_t jbLastNoDisturbActive;
-
-/* Return weekday with Monday=0, matching DP7 bytes 2..8. */
-static uint8_t jbWeekdayMonday0(const struct sys_time *time)
-{
- static const uint8_t monthOffset[12] = {
- 0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4
- };
- uint16_t year = time->year;
- uint8_t sunday0;
-
- if (time->month < 3) {
- year--;
- }
- sunday0 = (uint8_t)((year + year / 4U - year / 100U + year / 400U +
- monthOffset[time->month - 1U] + time->day) % 7U);
- return (uint8_t)((sunday0 + 6U) % 7U);
-}
-
-static void jbNoDisturbNormalize(uint8_t *cfg)
+static void jbNoDisturbApply(uint8_t *cfg)
{
uint8_t i;
+ uint8_t weekdays = 0;
+ uint16_t start_minute;
+ uint16_t end_minute;
cfg[JB_DND_ENABLE_OFFSET] = !!cfg[JB_DND_ENABLE_OFFSET];
for (i = 0; i < 7; i++) {
cfg[JB_DND_WEEK_OFFSET + i] = !!cfg[JB_DND_WEEK_OFFSET + i];
- }
-}
-
-static uint8_t jbNoDisturbScheduleValid(const uint8_t *cfg)
-{
- uint8_t i;
-
- if (cfg[JB_DND_START_HOUR_OFFSET] >= 24 ||
- cfg[JB_DND_END_HOUR_OFFSET] >= 24 ||
- cfg[JB_DND_START_MIN_OFFSET] >= 60 ||
- cfg[JB_DND_END_MIN_OFFSET] >= 60) {
- return 0;
- }
- for (i = 0; i < 7; i++) {
if (cfg[JB_DND_WEEK_OFFSET + i]) {
- return 1;
+ weekdays |= (uint8_t)(1U << i);
}
}
- return 0;
-}
-
-static uint8_t jbNoDisturbActive(void)
-{
- /* Match the verified product behavior: DP7 byte 0 is the global
- * no-disturb switch. Schedule bytes are retained and reported, but do
- * not gate the local vibration wake path. */
- return !!gDevData.no_disturb_enable[JB_DND_ENABLE_OFFSET];
-}
-
-static void jbNoDisturbUpdate(void)
-{
- uint8_t active = jbNoDisturbActive();
-
- if (active == jbLastNoDisturbActive) {
- return;
- }
- jbLastNoDisturbActive = active;
- app_function_set_no_disturb(active);
+ start_minute = (uint16_t)(cfg[JB_DND_START_HOUR_OFFSET] * 60U +
+ cfg[JB_DND_START_MIN_OFFSET]);
+ end_minute = (uint16_t)(cfg[JB_DND_END_HOUR_OFFSET] * 60U +
+ cfg[JB_DND_END_MIN_OFFSET]);
+ app_no_disturb_configure(cfg[JB_DND_ENABLE_OFFSET], weekdays,
+ start_minute, end_minute);
}
/* ════════════════════════════════════════════════════════════════
@@ -110,11 +66,11 @@ void userInit(void)
gDevData.beep_trig = 0; /* DP4 声音开关 0=关 1=开 */
gDevData.battery = 0; /* DP5 电量上报 */
gDevData.shake_wake = 0; /* DP6 震动触发开机 0=关 1=开 */
- memset(gDevData.no_disturb_enable, 0, 13); /* DP7 勿扰模式开关 */
+ memset(gDevData.no_disturb_enable, 0, APP_NO_DISTURB_CFG_LEN); /* DP7 勿扰模式开关 */
+ app_no_disturb_storage_load(gDevData.no_disturb_enable);
gDevData.charge = 0; /* CHARGE_0 (不支持充电) */
gDevData.reserva_dp3 = 0; /* DP10 预留DP3 */
- jbLastNoDisturbActive = 0xff;
- jbNoDisturbUpdate();
+ jbNoDisturbApply(gDevData.no_disturb_enable);
}
/* ════════════════════════════════════════════════════════════════
@@ -123,8 +79,6 @@ void userInit(void)
* ════════════════════════════════════════════════════════════════ */
void userHandle(void)
{
- jbNoDisturbUpdate();
-
/* ── 可上报 DP (RO / RW): 用户数据采集 ── */
// gDevData.power = read_sensor(); /* DP0 开关 */
// gDevData.play_mode = read_sensor(); /* DP1 自动模式 */
@@ -196,8 +150,8 @@ int8_t jbEventProcess(jb_event_info_t *info, jb_data_point_t *ctrl)
case DP_ID_NO_DISTURB_ENABLE:
memcpy(gDevData.no_disturb_enable, ctrl->no_disturb_enable,
JB_DND_LEN);
- jbNoDisturbNormalize(gDevData.no_disturb_enable);
- jbNoDisturbUpdate();
+ jbNoDisturbApply(gDevData.no_disturb_enable);
+ app_no_disturb_storage_save(gDevData.no_disturb_enable);
break;
/* ── DP10 预留DP3 (uint32) ── */
diff --git a/apps/usr_jb_proto/usr_jb_main.c b/apps/usr_jb_proto/usr_jb_main.c
index 652e42c..e20402d 100644
--- a/apps/usr_jb_proto/usr_jb_main.c
+++ b/apps/usr_jb_proto/usr_jb_main.c
@@ -36,6 +36,7 @@
#include "system/includes.h"
#include "app_config.h"
+#include "asm/dac.h"
#include "app_main.h"
#include "app_task.h"
#include "user_cfg.h"
@@ -52,11 +53,13 @@
#include "app_pair.h"
#include "app_boot.h"
#include "app_function.h"
+#include "app_audio_debug.h"
#include "app_mode.h"
#include "app_led.h"
#include "key_manager.h"
#include "asm/power/power_api.h"
+
#define LOG_TAG_CONST APP
#define LOG_TAG "[USR_JB]"
#define LOG_INFO_ENABLE
@@ -285,6 +288,13 @@ void usr_jb_init(void)
{
usr_log_boot_version(); /* UART 已在 app_main 起来,按键判定前就能看到版本 */
+ MAGIC_AUDIO_LOG("诊断固件启动:编译=%s %s,UART0使能=%d,TX引脚编号=%u,波特率=%u",
+ __DATE__, __TIME__, TCFG_UART0_ENABLE,
+ (unsigned)TCFG_UART0_TX_PORT, (unsigned)TCFG_UART0_BAUDRATE);
+ MAGIC_AUDIO_LOG("配置:提示音=%d,MP3=%d,DAC=%d,DAC通道=%d,DAC模式=%d,音量类型=%d",
+ TCFG_KEY_TONE_EN, TCFG_DEC_MP3_ENABLE, TCFG_AUDIO_DAC_ENABLE,
+ TCFG_AUDIO_DAC_CONNECT_MODE, TCFG_AUDIO_DAC_MODE, SYS_VOL_TYPE);
+ MAGIC_AUDIO_LOG("鸟叫资源路径=%s,中文显示请使用UTF-8", SDFILE_RES_ROOT_PATH"bird.mp3");
bsp_hw_init();
app_led_init(); /* 提前到按键判定之前:3s/5s/拒绝开机低电闪都要直接用灯效事件表 */
diff --git a/apps/usr_periph/board_pin.h b/apps/usr_periph/board_pin.h
index 3b5abaa..23ca9e9 100644
--- a/apps/usr_periph/board_pin.h
+++ b/apps/usr_periph/board_pin.h
@@ -26,7 +26,7 @@
#define BOARD_LED_ENABLE 1 /**< 1=红绿 LED */
#define BOARD_KEY_ENABLE 1 /**< 1=按键 PB1 */
-#define BOARD_CHG_ENABLE 1 /**< 1=充电检测 PG8 + VPWR */
+#define BOARD_CHG_ENABLE 1 /**< 1=TP4056: PG8 CHRG + PC5 STDBY */
#define BOARD_MOTOR_ENABLE 1 /**< 1=双电机 U13 + U18 */
#define BOARD_SHAKE_ENABLE 1 /**< 1=震动输入 PA3 */
@@ -39,14 +39,16 @@
#define BOARD_RIGHT_BACKWARD_PIN IO_PORTC_03 /**< U18-INA,右轮后退 */
#define BOARD_RIGHT_FORWARD_PIN IO_PORTC_04 /**< U18-INB,右轮前进 */
#define BOARD_SHAKE_PIN IO_PORTA_03 /**< 震动开机,常闭开关断开时高脉冲有效 */
-#define BOARD_LED_RED_PIN IO_PORTA_08 /**< 红灯 LED_PWR,低电平亮 */
-#define BOARD_LED_GREEN_PIN IO_PORTA_07 /**< 绿灯 LED_CHG,低电平亮 */
+#define BOARD_LED_RED_PIN IO_PORTA_07 /**< 红灯 LED_PWR,低电平亮 */
+#define BOARD_LED_GREEN_PIN IO_PORTA_08 /**< 绿灯 LED_CHG,低电平亮 */
#define BOARD_KEY_PIN IO_PORTB_01 /**< 按键,低电平按下 */
-#define BOARD_CHG_PIN IO_PORTG_08 /**< ME4054 CHG,外部 2.2k 上拉 */
+#define BOARD_CHG_PIN IO_PORTG_08 /**< TP4056 CHRG, active low, internal pull-up */
+#define BOARD_STDBY_PIN IO_PORTC_05 /**< TP4056 STDBY, active low, internal pull-up */
#define BOARD_LED_ON_LEVEL 0 /**< LED 点亮电平:0=低亮 */
#define BOARD_KEY_ACTIVE_LEVEL 0 /**< 按键有效电平:0=按下为低 */
#define BOARD_CHG_CHARGING_LEVEL 0 /**< CHG 充电中为低 */
+#define BOARD_STDBY_FULL_LEVEL 0 /**< STDBY 充满时为低 */
#define BOARD_SHAKE_ACTIVE_LEVEL 1 /**< 常闭震动开关:断开时高脉冲有效 */
@@ -62,9 +64,9 @@
#define BOARD_VBAT_LOW_HYST_MV 50 /**< 低电恢复回差 */
#define BOARD_VBAT_SHUTDOWN_MV 3250 /**< 约 5%,仅开机拦截用:关机状态下 app_battery 尚未运行,只能摸裸电压 */
#define BOARD_BATTERY_SHUTDOWN_PCT 5 /**< 运行中显示电量 <= 此值才自动关机,跟 APP 看到的百分比对齐 */
-#define BOARD_VPWR_ONLINE_MV 4000 /**< VPWR 判定 USB 插入 */
-#define BOARD_VPWR_OFF_MV 1500 /**< 低于此值认定已拔出 */
-#define BOARD_CHG_FULL_MS 1000 /**< CHG 已高且 VPWR 在,满 1s 认充满 */
+#define BOARD_VPWR_ONLINE_MV 4000
+#define BOARD_VPWR_OFF_MV 1500
+#define BOARD_CHG_FULL_MS 1000 /**< STDBY low confirmation time */
/*============================================================================*/
/* 按键 / 灯效 */
@@ -124,8 +126,7 @@
#define BOARD_SHAKE_TRIGGER_WINDOW_MS 250u /**< 保留窗口参数,便于恢复多脉冲策略 */
#define BOARD_SHAKE_POLL_MS 10u /**< 与业务调度器共用的采样节拍 */
-/* PG8/CHG_ON is the only fitted USB-related signal that changes while the
- * product is in softoff; VPWR is disconnected on boards with R18 not fitted. */
+/* PG8/CHRG is used to detect charge insertion while in softoff. */
#define BOARD_CHG_WAKEUP_INDEX 3u
#endif /* __BOARD_PIN_H__ */
diff --git a/apps/usr_periph/bsp_hw.c b/apps/usr_periph/bsp_hw.c
index 48b65e1..c012db5 100644
--- a/apps/usr_periph/bsp_hw.c
+++ b/apps/usr_periph/bsp_hw.c
@@ -233,13 +233,20 @@ BspHw_Ret_t bsp_hw_init(void)
#if BOARD_CHG_ENABLE
/* PORTG 作数字输入必须开 dieh,否则读不到 ME4054 CHG */
gpio_disable_fun_output_port(BOARD_CHG_PIN);
- gpio_set_pull_up(BOARD_CHG_PIN, 0);
+ /* ME4054 CHRG is open-drain/high-Z when not charging. Keep PG8 pulled
+ * high so the digital input has a deterministic level in that state. */
+ gpio_set_pull_up(BOARD_CHG_PIN, 1);
gpio_set_pull_down(BOARD_CHG_PIN, 0);
gpio_set_die(BOARD_CHG_PIN, 1);
gpio_set_dieh(BOARD_CHG_PIN, 1);
gpio_direction_input(BOARD_CHG_PIN);
- adc_add_sample_ch(AD_CH_LDO5V);
- adc_set_sample_freq(AD_CH_LDO5V, 500);
+
+ gpio_disable_fun_output_port(BOARD_STDBY_PIN);
+ gpio_set_pull_up(BOARD_STDBY_PIN, 1);
+ gpio_set_pull_down(BOARD_STDBY_PIN, 0);
+ gpio_set_die(BOARD_STDBY_PIN, 1);
+ gpio_set_dieh(BOARD_STDBY_PIN, 1);
+ gpio_direction_input(BOARD_STDBY_PIN);
#endif
#if BOARD_MOTOR_ENABLE
@@ -423,6 +430,16 @@ uint8_t bsp_chg_is_low(void)
#endif
}
+/** @return 1 when TP4056 STDBY is low; otherwise 0. */
+uint8_t bsp_stby_is_low(void)
+{
+#if BOARD_CHG_ENABLE
+ return (uint8_t)(gpio_read(BOARD_STDBY_PIN) == BOARD_STDBY_FULL_LEVEL);
+#else
+ return 0;
+#endif
+}
+
/**
* @brief 读取电池电压
* @return 电池电压,单位 mV
diff --git a/apps/usr_periph/bsp_hw.h b/apps/usr_periph/bsp_hw.h
index f290116..a0e9b1a 100644
--- a/apps/usr_periph/bsp_hw.h
+++ b/apps/usr_periph/bsp_hw.h
@@ -101,6 +101,9 @@ uint8_t bsp_key_is_pressed(void);
*/
uint8_t bsp_chg_is_low(void);
+/** @return 1 when TP4056 STDBY is low; otherwise 0. */
+uint8_t bsp_stby_is_low(void);
+
/**
* @brief 读取电池电压
* @return 电池电压,单位 mV
diff --git a/cpu/br28/tools/bird.mp3 b/cpu/br28/tools/bird.mp3
new file mode 100644
index 0000000..e39bc1d
Binary files /dev/null and b/cpu/br28/tools/bird.mp3 differ
diff --git a/cpu/br28/tools/download/earphone/download_app_ota.bat b/cpu/br28/tools/download/earphone/download_app_ota.bat
index 2efa9d0..7bc0fa8 100644
--- a/cpu/br28/tools/download/earphone/download_app_ota.bat
+++ b/cpu/br28/tools/download/earphone/download_app_ota.bat
@@ -4,6 +4,7 @@ cd %~dp0
copy ..\..\script.ver .
copy ..\..\tone.cfg .
+copy ..\..\bird.mp3 .
copy ..\..\p11_code.bin .
copy ..\..\br28loader.bin .
copy ..\..\ota.bin .
@@ -15,7 +16,7 @@ if not exist p11_code.bin (
exit /b 1
)
-set "ISD_CMD=..\..\isd_download.exe ..\..\isd_config.ini -tonorflash -dev br28 -boot 0x120000 -div8 -wait 300 -uboot ..\..\uboot.boot -app ..\..\app.bin -res ..\..\cfg_tool.bin tone.cfg p11_code.bin -uboot_compress"
+set "ISD_CMD=..\..\isd_download.exe ..\..\isd_config.ini -tonorflash -dev br28 -boot 0x120000 -div8 -wait 300 -uboot ..\..\uboot.boot -app ..\..\app.bin -res ..\..\cfg_tool.bin tone.cfg bird.mp3 p11_code.bin -uboot_compress"
if not exist RS-5B88.key (
echo [download] ERROR: RS-5B88.key not found
diff --git a/改动日志.md b/改动日志.md
new file mode 100644
index 0000000..d075024
--- /dev/null
+++ b/改动日志.md
@@ -0,0 +1,49 @@
+# 改动日志
+
+日期:2026-09-08
+
+## 本次 MAGIC_BOX_FW 音频与充电对齐
+
+1. 文件:`apps/earphone/board/br28/board_jl701n_demo_cfg.h`
+ - 行号:104,369(修改后行号以当前文件为准)
+ - 原代码:`TCFG_KEY_TONE_EN` 为 `DISABLE`;DAC 模式为 `DAC_MODE_L_SINGLE`。
+ - 修改后:启用 `TCFG_KEY_TONE_EN`;DAC 模式改为 `DAC_MODE_H2_SINGLE`。
+ - 原因:启用 SDK key-tone 播放任务,并匹配 FK_CAR_FW 使用 ROUT 单端输出的配置。
+
+2. 文件:`apps/usr_app/app_function.c`
+ - 行号:约 26、254-259
+ - 原代码:模式改变时只调用 `app_led_request_mode_blink()`。
+ - 修改后:模式改变且 `mode != PLAY_MODE_0` 时调用 `Car_Audio_Test_Play()`。
+ - 原因:每次实际切换到运行模式时播放一次鸟叫;不放入 1ms tick,因此不会连续调用。
+
+3. 文件:`apps/usr_app/car_audio_test.c`、`apps/usr_app/car_audio_test.h`
+ - 原代码:MAGIC_BOX_FW 未纳入该音频测试模块。
+ - 修改后:加入 FK_CAR_FW 当前版本的鸟叫播放接口,路径为 `mnt/sdfile/res/bird.mp3`。
+ - 原因:提供模式切换调用的播放实现。
+
+4. 文件:`Makefile`
+ - 行号:约 414
+ - 原代码:源文件列表不含 `apps/usr_app/car_audio_test.c`。
+ - 修改后:加入该源文件。
+ - 原因:确保编译、链接播放接口实现。
+
+5. 文件:`cpu/br28/tools/download/earphone/download_app_ota.bat`
+ - 行号:约 5、18
+ - 原代码:未复制 `bird.mp3`,资源参数只有 `tone.cfg p11_code.bin`。
+ - 修改后:复制 `bird.mp3`,并在 `-res` 参数中加入 `bird.mp3`。
+ - 原因:将鸟叫文件打包进内部资源区。
+
+6. 文件:`cpu/br28/tools/bird.mp3`
+ - 原代码:MAGIC_BOX_FW 中缺少可供下载脚本复制的鸟叫文件。
+ - 修改后:加入当前 FK_CAR_FW 使用的 `bird.mp3`。
+ - 原因:提供资源打包输入文件。
+
+说明:MAGIC_BOX_FW 当前 `app_power.c` 的充电状态主逻辑已经是 CHRG+STDBY 组合检测,与当前 FK_CAR_FW 一致;本次未重复改写该逻辑,保留其 VPWR 辅助函数未被应用层使用。
+
+7. 文件:`apps/earphone/board/br28/board_jl701n_demo_cfg.h`
+ - 行号:825
+ - 原代码:`#define TCFG_DRC_ENABLE 0 /*DRC .../`(块注释未闭合)。
+ - 修改后:将该注释改为合法的 `/*DRC */`。
+ - 原因:首次完整编译发现该处导致 `line 828: expected identifier or '('`,属于当前工程已有的语法错误,必须修复后才能验证本次功能。
+
+8. 同一配置文件第1197行:补齐损坏的 `#error` 字符串结束引号,消除预处理语法错误。