蓝牙发射器(bt_emitter)相关
📎 原始文档:https://www.kdocs.cn/l/ckHZAom1KZHE 蓝牙发射器(bt_emitter)相关
简介:该文档用于整合蓝牙发射器使用过程中经常遇到的问题和疑问。
- 蓝牙发射器(bt_emitter)如何配置?
- 以br23\br25为例子,board_config.h通常会有一个发射器的宏定义,选择该板级则开启了蓝牙发射器的功能。

- void bt_search_device(void) 函数发起搜索配对,搜索到设备后,底层会调用u8 emitter_search_result(char *name, u8 name_len, u8 *addr, u32 dev_class, char rssi)函数,返回设备的mac地址,蓝牙名等信息,可能通过这些信息来过滤需要连接的设备。 默认的过滤方式有名字过滤,蓝牙地址过滤,或无限制。

- 如果没有按照第1点选择“蓝牙发射器”板级文件,则需要按照以下截图配置 #define TCFG_USER_EMITTER_ENABLE 1 //emitter功能使能
#define AUDIO_OUTPUT_WAY AUDIO_OUTPUT_WAY_BT // AUDIO_OUTPUT_WAY_DAC
注意事项: - 要使用发射器功能需要使用蓝牙后台功能,所以尽可能使用695系列或者701系列的芯片;
- 696系列新的SDK已经不支持蓝牙后台功能,如需使用要用之前的SDK。
- 蓝牙发射器配置DAC不输出信号

- 蓝牙发射器(bt_emitter)常用函数简介
//启动一次发射器搜索接收器,bt_emitter_pp函数内此函数是注释的,需要开启
bt_search_device();
搜索时间:u8 inquiry_length = 20; // inquiry_length * 1.28s
//发射器搜索到设备后,会在此函数内处理,判断是否要去连接该接收器
u8 emitter_search_result(char *name, u8 name_len, u8 *addr, u32 dev_class, char rs
//获取当前发射器连接设备数
get_total_connect_dev();
//获取当前连接上的设备的已连接的协议
get_emitter_curr_channel_state() ;
//发射器删除配对记录
user_emitter_cmd_prepare(USER_CTRL_DEL_ALL_REMOTE_INFO, 0, NULL);
//发射器发送指令函数,跟正常作为接收器情况下user_send_cmd_prepare函数使用方法类似
//操作a2dp avctp hfp之类的命令 发射器用 user_emitter这个接口其他不需要针对设备的
//操作都用 user_send
u32 user_emitter_cmd_prepare(USER_CMD_TYPE cmd, u16 param_len, u8 *param);
//发射器主动发起通话
user_emitter_cmd_prepare(USER_CTRL_HFP_CALL_LAST_NO, 0, NULL)
//发射器主动关断通话
user_emitter_cmd_prepare(USER_CTRL_HFP_CALL_HANGUP, 0, NULL)
//接收器来电接听
user_emitter_cmd_prepare(USER_CTRL_HFP_CALL_ANSWER, 0, NULL)
//取消被连接
user_send_cmd_prepare(USER_CTRL_PAGE_CANCEL, 0, NULL);
//取消搜索
user_send_cmd_prepare(USER_CTRL_INQUIRY_CANCEL, 0, NULL);
//断开所有连接
user_emitter_cmd_prepare(USER_CTRL_DISCONNECTION_HCI, 0, NULL);
//连接指定地址设备
user_send_cmd_prepare(USER_CTRL_START_CONNEC_VIA_ADDR, 6, mac);
//删除所有设备记忆
user_emitter_cmd_prepare(USER_CTRL_DEL_ALL_REMOTE_INFO, 0, NULL);
//发送音量给接收器,音量:app_var.opid_play_vol_sync
user_emitter_cmd_prepare(USER_CTRL_AVCTP_OPID_SEND_VOL, 0, NULL);
//常用KEY消息
KEY_BT_EMITTER_SW,//关闭发射
KEY_BT_EMITTER_PLAY,//发射音频开始
KEY_BT_EMITTER_PAUSE,//停止发射音频
KEY_BT_EMITTER_RECEIVER_SW,//发射器接收器切换
- AC695N蓝牙发射器(单连)兼容性问题处理 简介:兼容性问题通常指:1、无法连接2、播放音频卡顿3、连接后异常断开
“单连”的意思是蓝牙发射器支持连接一个设备播放sbc音频。
以下表格用来放置历史打好兼容性补丁的SDK或蓝牙库文件,会持续更新,新日期的补丁都会兼容好旧的问题点,请注意!
| 时间 | SDK | 补丁 | 修复的问题点 |
|---|---|---|---|
| 20260722 | Files · feature_sdk_310_bt_emitter · SOUNDBOX / 非可视化 / ac695n_soundbox_sdk · GitLab | 9 | |
| 20260511 | Files · feature_sdk_310_bt_emitter_spdif · SOUNDBOX / 非可视化 / ac695n_soundbox_sdk · GitLab | 1.修复发射spdif时接收端卡顿 2.蓝牙测试盒连接立马断开,不能校准频偏 | |
| 20260506 | Files · feature_sdk_310_bt_emitter · SOUNDBOX / 非可视化 / ac695n_soundbox_sdk · GitLab | 1、修复增加pincode后,接收模式时无法连接苹果手机的问题 2、修复接收模式通话时mic无声的问题 3、修复PC模式从机无声问题 4、优化发射器连部分音箱会出现超时的问题 | |
| 20251126 | AC695n_soundbox_sdk_bt_emitter_20251126.zip PS:测试盒不支持bitpool为30,需要改为53 | 1.打开音频代码放RAM,处理部分跑不过来的情况 | |
| 20251112 | br23_v310_btstack_20251112-1627.rar | 1、修正AVRCP功能,支持车机播放暂停或切换上下曲 2、修正耳机进不去sniff的问题 | |
| 20250901 | AC695n_soundbox_sdk_bt_emitter_20250901.zip | 1、修正连接部分设备退出蓝牙模式死循环的问题 | |
| 20250731 | AC695n_soundbox_sdk_bt_emitter_20250731.zip | 1、修改IO capacity为no input ,no output,避免连接部分设备失败 2、修复远距离无声后靠近仍然无声问题 | |
| 20250715 | AC695n_soundbox_sdk_bt_emitter_20250715.zip | 1、关闭BT_USE_PCM_DEC宏定义,修正部分设备连接后会卡顿的问题 | |
| 20250630 | AC695n_soundbox_sdk_bt_emitter_20250630.zip | 1、修正不停连接和断开概率性死机问题 | |
| 20250619 | br23_v310_btstack_20250606-1847.zip | 1、修正远距离无声音后再靠近无声音的问题 | |
| 20250606 | AC695n_soundbox_sdk_bt_emitter_20250606.zip | 1、修改bitpool为30 2、增加发送音量同步 3、更新btstack.a,取消scms-t | |
| 20250524 | AC695n_soundbox_V3.1.0_bt_emitter_2025_05_24.zip | 1、修正无法连接部分蓝牙设备的问题或连接后无声音的问题 2、各音频流解码文件中添加__bt_emitter_pp() | |
| 20241126 | br23_v310_btstack_20241126-1528.zip 若直接替换报错时: 在apps\soundbox\log_config\lib_btstack_config.c 文件中补充 编译提示缺少的常量 const int config_btstask_use_malloc = 1; const int config_le_sm_sub_sc_bridge_edr_enable = 0; | 蓝牙发射器连接某些音箱失败问题 | |
| 20240927 | br23_v310_btstack_20240927-1346.zip | PC dongle的方案,想要拒绝esco的断开请求,可以开放接口 void __set_hfp_ag_res_hangup_flag(u8 flag); __set_hfp_ag_res_hangup_flag(0); ![]() 再添加一个int变量 int set_remove_esco_req_not_accepted_flag = 0; ![]() | |
| 20240903 | br23_v310_btstack_20240903-1352.zip | 修复发射器连接部分耳机,耳机在没有连接好avctp通道前发送一次音量同步信息,导致本地无法更新音量数值的问题。 | |
| 20240710 | AC695n_soundbox_sdk_3.1.0_bt_emitter_0710.zip | 兼容性修改 |
以下用于说明应用层(APP层)的会做的兼容性修改。
- 修改蓝牙版本号

- 关闭a2dp_support_delay_report

- 修改蓝牙设备类型BD_CLASS
include_lib/btstack/avctp_user.h中添加
#define BD_CLASS_SMART_PHONE 0x40020C

int edr_at_set_cod(int cod_data)
{
u32 class_type = cod_data;
printf("set class type %d",class_type);
__change_hci_class_type(class_type);
lmp_hci_write_class_of_device(class_type);
return 0;
}
修改void emitter_or_receiver_switch(u8 flag),做到发射器模式和接收模式使用不同的BD_CLASS。
/*----------------------------------------------------------------------------*/
/**@brief 蓝牙发射 提供按键切换发射器或者是音箱功能
@param 1:发射 0:接收
@return 无
@note
*/
/*----------------------------------------------------------------------------*/
void emitter_or_receiver_switch(u8 flag)
{
/* log_info("===emitter_or_receiver_switch %d %x\n", flag, hci_standard_connect_check()); */
/*如果上一次操作记录跟传进来的参数一致,则不操作*/
if (bt_user_priv_var.emitter_or_receiver == flag) {
return ;
}
while (hci_standard_connect_check() == 0x80) {
//wait profile connect ok;
if (bt_user_priv_var.emitter_or_receiver == BT_EMITTER_EN) { ///蓝牙发射器
r_printf("cur_ch:0x%x", get_emitter_curr_channel_state());
if (get_emitter_curr_channel_state()) {
break;
}
} else {
r_printf("cur_ch:0x%x", get_curr_channel_state());
if (get_curr_channel_state()) {
break;
}
}
os_time_dly(10);
}
////断开链接
if ((get_curr_channel_state() != 0) || (get_emitter_curr_channel_state() != 0)) {
user_send_cmd_prepare(USER_CTRL_POWER_OFF, 0, NULL);
} else {
if (hci_standard_connect_check()) {
user_send_cmd_prepare(USER_CTRL_PAGE_CANCEL, 0, NULL);
user_send_cmd_prepare(USER_CTRL_CONNECTION_CANCEL, 0, NULL);
}
}
/* if there are some connected channel ,then disconnect*/
while (hci_standard_connect_check() != 0) {
//wait disconnect;
os_time_dly(10);
}
/* g_printf("===wait to switch to mode %d\n", flag); */
bt_user_priv_var.emitter_or_receiver = flag;
if (flag == BT_EMITTER_EN) { ///蓝牙发射器
bredr_bulk_change(0);
////关闭可发现可链接
// user_send_cmd_prepare(USER_CTRL_WRITE_SCAN_DISABLE, 0, NULL);
// user_send_cmd_prepare(USER_CTRL_WRITE_CONN_DISABLE, 0, NULL);
//修改 BD_CLASS
user_send_cmd_prepare(USER_CTRL_INQUIRY_CANCEL, 0, NULL);
user_send_cmd_prepare(USER_CTRL_WRITE_SCAN_DISABLE, 0, NULL);
user_send_cmd_prepare(USER_CTRL_WRITE_CONN_DISABLE, 0, NULL);
edr_at_set_cod(BD_CLASS_SMART_PHONE);
//修改 local addr
lmp_hci_write_local_address(bt_get_mac_addr());
////切换样机状态
__set_emitter_enable_flag(1);
a2dp_source_init(NULL, 0, 1);
#if (USER_SUPPORT_PROFILE_HFP_AG==1)
hfp_ag_buf_init(NULL, 0, 1);
#endif
////开启搜索设备
#if 1//!BT_EMITTER_TEST_ENABLE
os_time_dly(1);
u8 mac[6];
u8 flag = 0;
flag = restore_remote_device_info_profile(&mac, 1, get_remote_dev_info_index(), REMOTE_SINK);
if (flag) {
//connect last conn
printf("last source device addr from vm:");
put_buf(mac,6);
emitter_bt_connect(mac);
}
//r_printf("connect last vm addr\n");
// lmp_hci_write_local_address(mac);
// u8 ret = connect_last_device_from_vm();
#else
os_time_dly(1);
/* 添加避免发射器切换成接收器之后还会回连之前的接收器的修改 */
u8 mac[6];
bt_get_vm_mac_addr(mac);
u8 temp;
for (u8 i = 0; i < 3; i++)
{
temp = mac[i];
mac[i] = mac[5-i];
mac[5-i] = temp;
}
put_buf(mac, 6);
lmp_hci_write_local_address(mac);
os_time_dly(1);
////开启搜索设备
if (emitter_get_vm_device()) {
log_info("start connect device vm addr\n");
sys_timer_add(NULL, ag_mode_auto_reconn_timer_callback, 5000);
} else {
bt_search_device();
}
#endif
} else if (flag == BT_RECEIVER_EN) { ///蓝牙接收
//修改 BD_CLASS
user_send_cmd_prepare(USER_CTRL_INQUIRY_CANCEL, 0, NULL);
user_send_cmd_prepare(USER_CTRL_WRITE_SCAN_DISABLE, 0, NULL);
user_send_cmd_prepare(USER_CTRL_WRITE_CONN_DISABLE, 0, NULL);
edr_at_set_cod(BD_CLASS_HEADPHONES);
//修改 local addr
u8 rec_mac_addr[6] = {0};
memcpy(rec_mac_addr,bt_get_mac_addr(),6);
rec_mac_addr[0] += 1;
lmp_hci_write_local_address(rec_mac_addr);
bredr_bulk_change(1);
////切换样机状态
__set_emitter_enable_flag(0);
emitter_media_source(1, 0);
hci_cancel_inquiry();
a2dp_source_init(NULL, 0, 0);
#if (USER_SUPPORT_PROFILE_HFP_AG==1)
hfp_ag_buf_init(NULL, 0, 0);
#endif
// __change_hci_class_type(BD_CLASS_HEADPHONES);//当为接收器模式的时候,部分手机会过滤掉搜索不到
////开启可发现可链接
if (connect_last_device_from_vm()) {
log_info("start connect vm addr phone \n");
} else {
user_send_cmd_prepare(USER_CTRL_WRITE_SCAN_ENABLE, 0, NULL);
user_send_cmd_prepare(USER_CTRL_WRITE_CONN_ENABLE, 0, NULL);
}
}
}
- 取消假连操作(一些设备进入后不退出卡住流程)

- 修改蓝牙连接方式,蓝牙简易连接方式修改。

- 发射器回连耳机,已经连接上,但是发射的sbc编码没打开(或者sbc编码已打开,但是output_buf满,数据没有写入成功)


- AC6956M蓝牙发射器(双连)兼容性问题处理 注意:双连的SDK芯片必须是AC6956M,不能使用其他芯片
简介:兼容性问题通常指:1、无法连接2、播放音频卡顿3、连接后异常断开
“双连接”的意思是蓝牙发射器支持连接两个设备播放sbc音频。
以下表格用来放置历史打好兼容性补丁的SDK或蓝牙库文件,会持续更新,请注意!
- AC690N蓝牙发射器(单连)兼容性问题处理 替换最新的蓝牙库测试:
【金山文档】 bluetooth_lib-690发射器-20230228
bluetooth_lib-690发射器-20230228.zip - JL701N蓝牙发射器兼容性问题处理
| 时间 | SDK | 补丁 | 修复问题点 |
|---|---|---|---|
| 20260429 | jl701n_soundbox_v1.4.3_beta3 | btstack_瑞卿改_701_143_beta3_修复发射器连车机直接进通话的问题.rar | 修复连车机直接进通话的问题 |
| 20260309 | jl701n_soundbox_v1.4.3_beta2 | btctrler_瑞卿改_jl701n_soundbox_v1.4.3beta2_20260309_发射器兼容JBL TUNE510BT.zip | 兼容JBL TUNE510BT耳机 |
| 20260309 | jl701n_soundbox_v1.4.3_beta3 | btctrler_瑞卿改_jl701n_soundbox_v1.4.3beta3_20260309_发射器兼容JBL TUNE510BT.zip | 兼容JBL TUNE510BT耳机 |
| 20250331 | jl701n_earphone_release_1.7.0_transmitter | btstack_AC701N_earphone_transmitter_20250331.zip | 发射器使用 int user_send_at_cmd_prepare(u8 *data,u16 len); 发送后,接收器未接收到消息 |
- 蓝牙发射器音频延时参数 发射器延时主要取决于接收端的延时,一般接收端的延时在200ms左右,所以发射器普遍测试得到的延时都是200ms左右;
如果测试到延时很高,认为不正常情况下,请先测试接收端链接手机的延时以及我们公版代码跟接收端的延时;
如果公版发射器代码跟接收端的延时明显高于手机跟接收端的延时,请联系我们。 - 蓝牙发射器应用-demo-案例
1、发射器与接收器通信功能(都要是杰理的方案,使用HFP_AT)
数据格式:
"\r\n+\r\n" //发射器发给接收器
"AT+\r\0" //接收器发送给发射器
//发射器端:
//使能功能
extern u8 user_at_cmd_send_support = 1;
//发送数据
case KEY_HFP_SEND_DATA:
printf("KEY_HFP_SEND_DATA\n");
u8 user_cmd[] = "\r\n+AAAAAAAAA\r\n";
extern int user_send_at_cmd_prepare(u8 *data,u16 len);
u8 err = user_send_at_cmd_prepare(user_cmd,strlen(user_cmd));
printf("err == %d\n",err);
printf("user_cmd == %s size == %d\n",user_cmd,strlen(user_cmd));
printf("get_curr_channel_state & HFP_CH == %d get_curr_channel_state & HFP_AG_CH == %d\n",get_curr_channel_state() & HFP_CH,get_curr_channel_state() & HFP_AG_CH);
break;
//接收数据:
int ag_at_cmd_analysis_by_user(u8 *packet,u16 len)
{
puts(packet);
printf("lllllllllllsize == %d\n",len);
return 0;
}
//接收器端
extern u8 user_at_cmd_send_support = 1;
//发送数据
case KEY_HFP_SEND_DATA:
printf("KEY_HFP_SEND_DATA\n");
u8 user_cmd[] = "AT+bbbbbbb\r\0";
extern int user_send_at_cmd_prepare(u8 *data,u16 len);
u8 err = user_send_at_cmd_prepare(user_cmd,strlen(user_cmd));
printf("err == %d\n",err);
printf("user_cmd == %s size == %d\n",user_cmd,strlen(user_cmd));
printf("get_curr_channel_state & HFP_CH == %d get_curr_channel_state & HFP_AG_CH == %d\n",get_curr_channel_state() & HFP_CH,get_curr_channel_state() & HFP_AG_CH);
break;
//接收数据
int at_cmd_analysis_by_user(u8 *packet,u16 size)
{
puts(packet);
printf("lllllllllllsize == %d\n",size);
return 0;
}
2、发射器与接收器通话功能
695_3.1.0_sdk对讲demo
链接:https://pan.baidu.com/s/12wRPdDh6yroDPVjYsLMTIw
提取码:8888
jl701n_earphone_release_1.7.0_transmitter 对讲与 HFP_AT 通信 DEMO
jl701n_earphone_release_1.7.0_transmitter_对讲demo.zip
demo程序发起通话的按键消息:KEY_CALL_RECEIVER
3、dongle功能(持续更新中,记得留意更新)
AC695N_soundbox_sdk_release_3.1.0_PC_dongle_240319.zip
jl701n_earphone_release_1.7.0_transmitter 发射器与其他芯片共板或者距离近产生干扰问题
1.701发射器回连干扰另一颗另一颗主动蓝牙播放
优化发射器回连时间间隔,减小对经典蓝牙的干扰
【WPS Docs】 btctrler_701v170_260803
https://www.kdocs.cn/l/coXr1ENP7isa
【金山文档】 dongle程序说明
dongle程序说明.docx
PC功能实现:
PC相关应用.otl
4、发射器做选择连接
- 得到搜索到的蓝牙列表 在调用bt_search_device()后,程序会开始搜索设备:
搜索到的设备会在此函数内进行回调,此时会得到蓝牙名和地址,可以保存这些信息做显示以及之后的连接,然后return false;让样机不去连接
- 搜索停止功能 user_send_cmd_prepare(USER_CTRL_INQUIRY_CANCEL, 0, NULL);
- 断开当前连接去连接其他接收器操作
user_send_cmd_prepare(USER_CTRL_PAGE_CANCEL, 0, NULL);//取消配对
user_send_cmd_prepare(USER_CTRL_INQUIRY_CANCEL, 0, NULL);//取消搜索
os_time_dly(5);
user_send_cmd_prepare(USER_CTRL_DISCONNECTION_HCI, 0, NULL);//断开所有连接
os_time_dly(5);
if(get_emitter_curr_channel_state() == 0x00){
printf("disconnect_ok\n");
}
user_send_cmd_prepare(USER_CTRL_START_CONNEC_VIA_ADDR, 6, mac);//连接指定地址设备
以上功能会持续根据客户反馈更新demo或者代码,使用以上demo程序制作项目的话记得持续留意程序是否更新
5、发射器与接收器连接SPP,SPP发送数据
【金山文档】 发射器与接收器SPP通信修改点
发射器与接收器SPP通信修改点.docx
【金山文档】 btctrler-and-btstack-br23V310-20231030
bt_br23_v310_231030.rar
修改以下文件:
#if TCFG_BLE_BRIDGE_EDR_ENALBE
const int config_le_sm_sub_sc_enable = 1; /*SC加密模式使能,need config_le_sm_support_enable = 1*/ const int config_le_sm_sub_sc_bridge_edr_enable = 1; /*SC加密模式下,ios app ble配对快连edr,need config_le_sm_sub_sc_enable = 1*/
#else
const int config_le_sm_sub_sc_enable = 0; /**/
const int config_le_sm_sub_sc_bridge_edr_enable = 0; /**/
#endif
const int config_btstask_use_malloc = 1;

6、695发射AUX音频-功能demo(公版程序上修改,供参考)
AC695N_soundbox_sdk_release_3.1.0_emitter_aux.rar
7、695发射器连特斯拉车机demo
AC695N_soundbox_sdk_release_3.1.0_特斯拉专用发射器.rar
9. FAQ-常见问题处理分析
- 蓝牙发射器AG通话问题 关键字:蓝牙发射,AG,通话
蓝牙发射器AG通话直通 AC695 V306版本,HFP建立了,但发射器mic信号下行不到音箱,音箱的mic也上传不到发射器,发射机mic直通dac。
1、SBC解码线程没有打断;
2、DAC输入数据选择aec_param->output_way = 0; //3.1.0默认是1
3、发起AG之前把SBC解码暂停,然后发起AG,AG结束后再继续SBC解码。
void TIMER_500()
{
bt_emitter_pp(1);
}
void TIMER_100()
{
user_emitter_cmd_prepare(USER_CTRL_HFP_CALL_ANSWER, 0, NULL);
}

void bt_status_phone_out(struct bt_event *bt) {
if (bt_switch_back_timer) {
sys_timeout_del(bt_switch_back_timer);
bt_switch_back_timer = 0;
}
lmp_private_esco_suspend_resume(4);
__this->esco_dump_packet = ESCO_DUMP_PACKET_CALL;
ui_update_status(STATUS_PHONE_OUT);
bt_user_priv_var.phone_income_flag = 0;
user_send_cmd_prepare(USER_CTRL_HFP_CALL_CURRENT, 0, NULL); //发命令获取电话号码
#if TCFG_USER_EMITTER_ENABLE
user_emitter_cmd_prepare(USER_CTRL_HFP_CALL_ANSWER, 0, NULL); //发射器发起通话需要直通
#endif
}
2. 发射器接收模式通话声音异常 我们通话过程中需要声音采样率需要保持8K/16K如果是其他采样率会出现问题。
检查方法:
- 先检查程序配置有没有固定采样率的操作,如果有需要加判断进行区分

- 通话过程中,观看打印直接看DAC的采样率是多少

- 695 3.1.0SDK 发射器连不上会有回调HCI_EVENT_USER_CONFIRMATION_REQUEST。如果使用手机去连接的话,手机上会显示个对话框点确认后就可以连接。 问题打印:

修改方法:
- AC695X音箱做发射器连接部分耳机,出声慢或者不出声问题 4.1 AC695X音箱做发射器连接部分耳机,耳机暂停后按播放,声音延迟出来
原因:程序流程单纯关闭自身的音频解码,没有关闭a2dp导致。
修改如下:
4.2 发射器链接耳机,当耳机在sniff状态时,耳机不出声出声慢问题
//在要播放的音频前执行此段函数
__emitter_send_media_toggle(NULL, 0);
os_time_dly(1);
__emitter_send_media_toggle(NULL, 1);
os_time_dly(100);//100*10ms
- A2DP_CH已经连接上却没有声音情况,开关一次音频(类似播放暂停)
if((get_emitter_curr_channel_state() & A2DP_CH)&& get_emitter_a2dp_status() == 0){
bt_emitter_pp(0);
os_time_dly(1);
bt_emitter_pp(1);
}
- 695-310 SDK 发射器连耳机,无音频播放时耳机进不了sniff 修改方法:
- 更新最新版蓝牙库
- 两端同时开启蓝牙sniff功能
- 增加下面这段代码,可加快耳机进sniff
if (bt_user_priv_var.emitter_or_receiver == BT_EMITTER_EN) {
return;
}
7. 695-310 SDK 发射器加hid_smp_demo,连接苹果手机出现弹窗配对时点拒绝仍会连接成功 修改方法:
在对应的sm回调函数中,增加判断PAIR事件,自己增加断开连接的操作。
#define SM_EVENT_PAIR_PROCESS 0xDF
//sub
#define SM_EVENT_PAIR_SUB_RECONNECT_START 0x01
#define SM_EVENT_PAIR_SUB_PIN_KEY_MISS 0x02
#define SM_EVENT_PAIR_SUB_PAIR_FAIL 0x03
#define SM_EVENT_PAIR_SUB_PAIR_TIMEOUT 0x04
#define SM_EVENT_PAIR_SUB_ENCRYPTION_FAIL 0x05
#define SM_EVENT_PAIR_SUB_SEND_DISCONN 0x0f
#define SM_EVENT_PAIR_SUB_ADD_LIST_SUCCESS 0x10
#define SM_EVENT_PAIR_SUB_ADD_LIST_FAILED 0x11
case SM_EVENT_PAIR_PROCESS:
y_printf("SM_EVENT_PAIR_PROCESS: %d\n", event->data[0]);
switch(event->data[0]) {
case SM_EVENT_PAIR_SUB_PAIR_FAIL:
g_printf("Pair Fail.\n");
ble_app_disconnect();
break;
}
break;

8. jl701n_soundbox_v1.4.3_beta3 蓝牙发射器模式连接车机会直接进入通话音频 根本原因:hfp 命令回复错误
修改方法:更换btstack.a。
btstack_瑞卿改_701_143_beta3_修复发射器连车机直接进通话的问题.rar
提交记录:
外网:https://gitlab.zh-jieli.com/soundbox/novisualization/ac701n_soundbox_sdk.git
内网:Files · bugfix_sdk_1.4.3_beta3_bt_emitter · SOUNDBOX / ac701n_soundbox_sdk · GitLab



