AC700N系列ANC配置说明

HX51功能分析(基于AC700N-SDK1.3.6)

相对于BT-360

  • 配置了NTC,采集AD值判断温度,需配置IO口和AD通道(板级配置不是demo,没有配置NTC)
  • 该XH51为耳包,有SD卡功能,无TWS,板级配置不一样
  • 使用ADkey,配置按键AD值
  • 常驻音量增强模式 DACVDD_LDO_2_50V,(关于 LDO,它实际上是 “Low Dropout” 的缩写,是一种电源管理器件,称为低压差线性稳压器。LDO稳压器主要用于将输入电压调节到一个稳定的输出电压,并且即使输入电压非常接近输出电压也能正常工作。)
  • 升级擦除VM(flash)
  • app_config.h中做了很多功能的控制宏
  • 新增出厂设置的UI
  • \apps\earphone\music\sd_music.c SD卡音乐模式下按键的配置
  • 出厂设置全流程
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
// 方法一
// 这里是利用按键长按的hold,进行计时,记得在up中把fac_cnt_6s = 0;
static u8 fac_cnt_6s;

if(get_bt_connect_status() >= BT_STATUS_CONNECTING){
break;
}

fac_cnt_6s ++;
if(fac_cnt_6s < 30){
break;
}
user_send_cmd_prepare(USER_CTRL_DISCONNECTION_HCI, 0, NULL); // 清除配对
user_send_cmd_prepare(USER_CTRL_DEL_ALL_REMOTE_INFO, 0, NULL);

tone_play_index(IDEX_TONE_NUM_0,1); // 提示音

// 手动灯效
pwm_led_mode_set(PWM_LED0_ON);
os_time_dly(20);
pwm_led_mode_set(PWM_LED_ALL_OFF);
os_time_dly(20);
pwm_led_mode_set(PWM_LED0_ON);
os_time_dly(20);
pwm_led_mode_set(PWM_LED_ALL_OFF);
os_time_dly(20);
pwm_led_mode_set(PWM_LED0_ON);
os_time_dly(20);
pwm_led_mode_set(PWM_LED_ALL_OFF);
os_time_dly(20);
pwm_led_mode_set(PWM_LED0_ON);
os_time_dly(20);
pwm_led_mode_set(PWM_LED_ALL_OFF);
os_time_dly(20);
pwm_led_mode_set(PWM_LED0_ON);
os_time_dly(140);
power_set_soft_poweroff();

//===================================分割线===========================================

// 方法二 通过SDK的ui_manage实现
// \apps\earphone\include\ui_manage.h
// 代码行数6 新建出厂设置状态
typedef enum {
STATUS_NULL = 0,
STATUS_POWERON,
......
STATUS_PHONE_ACTIV,
STATUS_FACTORY_SETTING, //出厂设置
......
STATUS_POWER_NULL,
} UI_STATUS;

// 按键触发
if(get_bt_connect_status() >= BT_STATUS_CONNECTING){
break;
}
enter_factory_setting();

// 在XH51中,这个方法放在了earphone.c中
extern u8 fac_cnt; // 这个变量的定义和控制都在ui_manage中
void enter_factory_setting(void) //出厂设置
{
if(get_bt_connect_status() >= BT_STATUS_CONNECTING){
user_send_cmd_prepare(USER_CTRL_DISCONNECTION_HCI, 0, NULL);
}
ui_update_status(STATUS_FACTORY_SETTING); // ui状态更新
user_send_cmd_prepare(USER_CTRL_DEL_ALL_REMOTE_INFO, 0, NULL);
while(fac_cnt < 10){ //等待灯效跑完
delay(2);
}
sys_enter_soft_poweroff(NULL);
}

//===================================分割线===========================================
// \apps\earphone\ui_manage.c
// 代码行数153 如果是出厂设置导致的关机,不运行下面原有的关机灯效
case STATUS_POWEROFF:
log_info("[STATUS_POWEROFF]\n");
if(fac_cnt >= 10){
pwm_led_mode_set(PWM_LED_ALL_OFF);
break;
}
if (p_led->power_off != PWM_LED1_FLASH_THREE) {
pwm_led_mode_set(p_led->power_off);
} else {
if (sys_ui_var.ui_flash_cnt) {
if (sys_ui_var.ui_flash_cnt % 2) {
pwm_led_mode_set(PWM_LED1_OFF);
} else {
pwm_led_mode_set(PWM_LED1_ON);
}
}
}
break;

// 代码行数213 具体的灯效执行,fac_cnt在当前文件中为全局变量
case STATUS_FACTORY_SETTING: //出厂设置
sys_ui_var.ui_flash_cnt = 6; //ui_flash_cnt表示当前为定时闪烁任务
if (fac_cnt < 10) {
if (fac_cnt % 2) {
pwm_led_mode_set(PWM_LED_ALL_OFF);
} else {
pwm_led_mode_set(PWM_LED0_ON);
}
}else{
sys_ui_var.ui_flash_cnt = 0;
}
fac_cnt ++;
break;

ui状态的变更ui_manage

东西有点多,单纯文字描述吧

总体流程:每次ui变更调用ui_update_status(u8 status), 再调用ui_manage_scan具体去执行状态任务。

ui_update_status:为部分ui设定ui_flash_cnt(定时闪灯ui),将status写入一个系统ui结构体sys_ui_var.ui_cbuf中,再调用ui_manage_scan

ui_manage_scan:检查ui_flash_cnt,检查定时闪灯有没有结束:

上个任务结束则从缓存读取新ui状态,根据ui状态的种类存入ui状态变量,(系统有两个ui状态变量,power_status和other_status,前者为电量、充电方面的状态,后者为开机、关机、蓝牙连接……)。

上个任务未结束则ui_flash_cnt自减,同时设定任务定时器usr_timeout_add(NULL, ui_manage_scan, 300, 1);

最后再依次switch (sys_ui_var.power_status);switch (sys_ui_var.other_status);执行ui任务。

分隔

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
// \apps\earphone\board\br36\board_ac700n_sd_pc_demo_global_build_cfg.h
// 代码行数168
//config whether erased this area when do a update,1-No Operation,0-Erase
#define CONFIG_VM_OPT

// 一点点有关唤醒口的的代码
//默认唤醒io
port_protect(port_group, IO_PORTB_01);

// \apps\common\device\key\key_driver.c
// 代码行数149
// 任意多击事件添加
// TODO: 在此可以添加任意多击事件
if (scan_para->click_cnt >= 6) {
key_event = KEY_EVENT_SIX_CLICK; //六击
}

// \include_lib\system\event.h
// 代码行数149
enum {
KEY_EVENT_CLICK,
KEY_EVENT_LONG,
KEY_EVENT_HOLD,
KEY_EVENT_UP,
KEY_EVENT_DOUBLE_CLICK,
KEY_EVENT_TRIPLE_CLICK,
KEY_EVENT_FOURTH_CLICK,
KEY_EVENT_FIRTH_CLICK,
KEY_EVENT_SIX_CLICK, // 新增
KEY_EVENT_USER,
KEY_EVENT_MAX,
};


// \apps\earphone\log_config\lib_btctrler_config.c
// 代码行数96 非TWS模式下的低延迟模式?
const int CONFIG_LOW_LATENCY_ENABLE = 1;

// \apps\earphone\app_main.c
// 代码行数164 把耳机检测口作为唤醒条件
#if EARPHONEIN_PWOFF_IO
if (get_power_on_status() && (gpio_read(IO_PORTB_02))) {
#else
if (get_power_on_status()){
#endif

// \apps\earphone\earphone.c
// 代码行数164 低延迟模式下 提示音的播放 为什么SDK没有给单耳模式写好提示音?
#if TCFG_USER_TWS_ENABLE
if (tws_api_get_role() == TWS_ROLE_MASTER) {
if (tws_api_get_tws_state() & TWS_STA_SIBLING_CONNECTED) {
if (enable) {
tws_api_sync_call_by_uuid('T', SYNC_CMD_LOW_LATENCY_ENABLE, 300);
} else {
tws_api_sync_call_by_uuid('T', SYNC_CMD_LOW_LATENCY_DISABLE, 300);
}
} else {
if (earphone_a2dp_codec_set_low_latency_mode(enable, enable ? 800 : 600) == 0) {
if (enable) {
tone_play(TONE_NUM_1, 1);
} else {
tone_play(TONE_NUM_2, 1);
}
}
}
}
#else
// earphone_a2dp_codec_set_low_latency_mode(enable, enable ? 800 : 600);
if (earphone_a2dp_codec_set_low_latency_mode(enable, enable ? 800 : 600) == 0) {
if (enable) {
tone_play(TONE_NUM_1, 1);
} else {
tone_play(TONE_NUM_2, 1);
}
}
#endif


// \apps\earphone\user_cfg.c
// 代码行数180 配置工具的使能配置
#define USE_CONFIG_BIN_FILE 0

#define USE_CONFIG_STATUS_SETTING 1 //状态设置,包括灯状态和提示音
#define USE_CONFIG_AUDIO_SETTING USE_CONFIG_BIN_FILE //音频设置
#define USE_CONFIG_CHARGE_SETTING USE_CONFIG_BIN_FILE //充电设置
#define USE_CONFIG_KEY_SETTING USE_CONFIG_BIN_FILE //按键消息设置
#define USE_CONFIG_MIC_TYPE_SETTING USE_CONFIG_BIN_FILE //MIC类型设置 这里改为了1
#define USE_CONFIG_LOWPOWER_V_SETTING USE_CONFIG_BIN_FILE //低电提示设置
#define USE_CONFIG_AUTO_OFF_SETTING USE_CONFIG_BIN_FILE //自动关机时间设置
#define USE_CONFIG_COMBINE_VOL_SETTING 1 //联合音量读配置