AC700+1T2,功能demo
📎 原始文档:https://www.kdocs.cn/l/caJAiyTX9VII AC700+1T2,功能demo
- 外部多EQ文件切换
u8 curr_eq_index = 0;
const u8 *eq_file_list[] = {
(u8 *)FLASH_RES_PATH "eq_cfg_hw.bin",
(u8 *)FLASH_RES_PATH "eq_cfg_hw1.bin",
(u8 *)FLASH_RES_PATH "eq_cfg_hw2.bin",
};
/**
* @brief 切换EQ效果文件的接口
*
* @param index 对应eq_file_list效果,0xff:循环切换
*/
void eq_effect_switch(u8 index)
{
if(index == 0xff){
curr_eq_index++;
if(curr_eq_index >= ARRAY_SIZE(eq_file_list)){
curr_eq_index = 0;
}
}
else{
if(index >= ARRAY_SIZE(eq_file_list)){
return;
}
curr_eq_index = index;
}
#if (!TCFG_EQ_ONLINE_ENABLE)
EQ_CFG *eq_cfg = get_eq_cfg_hdl();
if(!eq_cfg){
return;
}
eq_cfg->eq_type = EQ_TYPE_FILE;
int ret = eq_file_get_cfg(eq_cfg, eq_file_list[curr_eq_index]);
y_printf("eq_effect_switch %d ret %d\n", curr_eq_index, ret);
// syscfg_write(CFG_USER_DEFINE_EQ_INDEX, &curr_eq_index, sizeof(curr_eq_index));
#endif
}
①找个地方放上面代码
②这里打开
③注意EQ版本和工具生产的EQ文件版本要对应
⑤在下载目录的download.bat文件里加入要添加的.bin文件
⑥测试用例,音乐播放暂时键触发
case API_MUSIC_PP:
y_printf("API_MUSIC_PP");
eq_effect_switch(0xFF);
// if (state != BT_CALL_HANGUP) {
// break;
// }
// user_send_cmd_prepare_for_addr(bt_addr, USER_CTRL_AVCTP_OPID_PLAY, 0, NULL);
break;
⑦如果需要关机保存切换的效果,存一下VM(注意不要在中断里读写VM,VM的ID不要与其他的冲突)
#define CFG_USER_DEFINE_EQ_INDEX 10
//************************************************//
syscfg_write(CFG_USER_DEFINE_EQ_INDEX, &curr_eq_index, sizeof(curr_eq_index));
//************************************************//
#if (!TCFG_EQ_ONLINE_ENABLE)
u8 user_eq_index = 0;
int ret = syscfg_read(CFG_USER_DEFINE_EQ_INDEX, &user_eq_index, sizeof(user_eq_index));
y_printf("ret = %d, user_eq_index = %d", ret, user_eq_index);
if ((ret>0) && (user_eq_index >= 0 && user_eq_index <= ARRAY_SIZE(eq_file_list))) {
eq_effect_switch(user_eq_index);
}
#endif



2. 触摸按键添加自定义按键方法
①先添加按键判断的宏,以6击、7击,以及3S抬起、5S抬起为例
KEY_ACTION_SIX_CLICK,
KEY_ACTION_SEVEN_CLICK,
KEY_ACTION_HOLD_3SEC_UP,
KEY_ACTION_HOLD_5SEC_UP,
②触摸流程添加多击判断
③按键转换流程添加抬起判断
else if (key->event == KEY_ACTION_UP) {
y_printf("multi_clicks_translate, key->event == KEY_ACTION_UP");
y_printf("hold->send_5s_msg = %d, hold->send_3s_msg = %d", hold->send_5s_msg, hold->send_3s_msg);
if (hold->send_5s_msg == 1) {
key->event = KEY_ACTION_HOLD_5SEC_UP;
} else if (hold->send_3s_msg == 1 && hold->send_5s_msg == 0) {
key->event = KEY_ACTION_HOLD_3SEC_UP;
} else {
y_printf("no opt");
}
}
④添加按键消息
APP_MSG_SIX_CLICK,
APP_MSG_SEVEN_CLICK,
APP_MSG_HOLD_3SEC_UP,
APP_MSG_HOLD_5SEC_UP,

⑤在按键消息处理函数里添加测试用例
#include "classic/tws_api.h"
#include "btstack/avctp_user.h"
case APP_MSG_SIX_CLICK:
y_printf("APP_MSG_SIX_CLICK");
u8 addr[6];
u8 *bt_addr = NULL;
if (a2dp_player_get_btaddr(addr)) {
bt_addr = addr;
}
if (tws_api_get_local_channel() == 'L') {
y_printf("local_channel is L");
user_send_cmd_prepare_for_addr(bt_addr, USER_CTRL_AVCTP_OPID_PREV, 0, NULL);
} else if (tws_api_get_local_channel() == 'R') {
y_printf("local_channel is R");
user_send_cmd_prepare_for_addr(bt_addr, USER_CTRL_AVCTP_OPID_NEXT, 0, NULL);
} else {
y_printf("local_channel is unknown");
user_send_cmd_prepare_for_addr(bt_addr, USER_CTRL_AVCTP_OPID_NEXT, 0, NULL);
}
break;
case APP_MSG_SEVEN_CLICK:
y_printf("APP_MSG_SEVEN_CLICK");
if (tws_api_get_role() == TWS_ROLE_MASTER) {
tws_play_tone_file_alone("tone_en/normal.*", 400);
}
break;
case APP_MSG_HOLD_3SEC_UP:
y_printf("APP_MSG_HOLD_3SEC_UP");
break;
case APP_MSG_HOLD_5SEC_UP:
y_printf("APP_MSG_HOLD_5SEC_UP");
break;
