KDocs 研发资料库
  • 音频技术应用文档入口汇总
  • 杰理WINDOWS环境安装及其他事项
  • LINUX安装和编译
  • Linux环境编译SDK教程(ubuntu18.04)
  • 音频类补丁汇总表
  • 认证资料获取汇总(最新资料后台会更新)
  • 《Hi-Res申请指南v1.0》
  • FreeRTOS 开源协议版本
  • uCOS 开源协议版本信息
  • 各个模块关键资料汇总
  • 软件调试方法
  • Makefile编译
  • 提bug的规范
  • 常规设备使用指导
  • 对外特别发布开发注意点信息汇总
  • AD697X软件问题整理
  • AC700N软件问题整理
  • AC701X耳机软件问题整理
  • 951&961软件问题整理
  • AC104X软件问题整理
  • AC128N问题整理文档
  • 可视化工具调试问题整理
  • 耳机资料汇总
  • AC704N、 AC705N相关应用
  • AC695N&AC696N&AC608N音箱问题整理
  • JL701N音箱问题整理
  • AC692X软件问题整理
  • AC706N音箱问题整理
  • JL701N音箱问题整理(可视化工具SDK)
  • JL703N音箱问题整理
  • JL709N(JL689N)音箱问题整理
  • JL7094系列-入门到进阶开发指导
  • AC210N音箱问题整理
  • 无线麦系列版本支持指南
  • AW32N无线麦问题整理
  • lAD697X&JL701X 无线麦软件共性问题整理
  • AC706N无线麦问题整理
  • AW36N无线麦问题整理
  • AC710X无线麦问题整理
  • 唤醒源获取及唤醒IO设置
  • 电源
  • LVD
  • 长按复位配置方法
  • 低功耗应用
  • TIMER
  • UART
  • SPI
  • 内部FLASH空间添加用户自定义区域
  • IIC
  • GPIO
  • MCPWM
  • SD&U盘
  • 时钟&晶振
  • GPCNT
  • IO口crossbar映射功能
  • 文件系统使用总结
  • 复用应用
  • LINEIN_AUX相关应用
  • IIS音频接口应用
  • SPDIF模式相关(HDMI_ARC、光纤、同轴)
  • PDM LINK
  • 外设相关应用
  • 蓝牙相关
  • 杰理蓝牙距离调试文档
  • TWS耳机配对方式使用及生产把控指南
  • GFP谷歌快连及其认证流程指引
  • 蓝牙发射器(bt_emitter)相关
  • BLE应用
  • 关于提升BLE传输速率说明
  • BLE测试数据
  • MUSIC 模式相关应用
  • MIDI音乐实现
  • PC相关应用
  • FM相关应用
  • AC695N_AC696N FM天线ESD静电防护措施说明V2.0_20250107
  • fm应用详细设计说明书
  • 杰理FM硬件指南-20230315
  • ADC模块
  • AUDIO相关应用
  • 新Tools的音效调试使用
  • 混响应用使用说明
  • 音效调式
  • 音箱耳机低音小音量增强实现方法
  • DAC输出功率调试
  • DAC性能测试指南
  • 针对各类底噪、电流声分析流程
  • 录音相关应用
  • OPUS编解码相关
  • RTC相关应用
  • 升级相关
  • UI相关应用
  • 通话调试流程指南
  • 通话相关应用
  • 省电容mic使用手册
  • 如何测试验证手表通话系统的语音失真 V1.0
  • AC695X_AC696X_AD697X 常见通话问题处理参考资料
  • 通话调试问题确定步骤
  • 内置触摸调试指南
  • 低功耗内置触摸介绍V2.2
  • 触摸相关文档
  • AC697X、AC698X内置触摸调试及整改方法V1.0
  • 产测相关应用
  • AC63X BLE DUT测试介绍
  • 兆华序列使用简易说明
  • JL_1T2蓝牙测试盒音频文件更换说明
  • ENC相关应用入口汇总
  • ANC相关应用入口汇总
  • JL DMS通话调试手册-V3.9.4
  • ANC-ENC结构设计要点-20240407
  • 半入耳式ANC耳机器件选型与结构设计指南V1.0
  • JL 耳道自适应调试指南
  • ANC相关问题处理
  • ANC调试文档
  • 评估蓝牙耳机通话上行降噪性能的方法 V1.0 (2)
  • FCC 或者 BQB 认证相关应用
  • BQB profile 测试中常遇到的问题点汇总
  • 蓝牙参数整理20210811
  • 杰理科技认证问题参考
  • 无线音频产品开发指南
  • 无线麦系列从入门到进阶开发指导
  • 量产烧录相关说明
  • 一拖八烧录器远程过程调用说明
  • 量产相关建议
  • EffectTool(eq)调试工具说明文档
  • AC897AD697系列的EQ调试方法-V3
  • 杰理调音指南-20220622
  • 音效模块总结
  • 简要调音步骤指引(可视化)
  • 耳机充电与通信调试指南
  • 充电仓硬件调试指南
  • 充电仓软件问题整理
  • AC951常用说明
  • AC951_AC961_开发板使用说明V1.0
  • 彩屏仓AC982 入门指导及FAQ
  • 蓝牙音频APP相关应用
  • 手机APP的简介和开发流程
  • 蓝牙音频系列-硬件设计指南
  • 静电测试及整改方法-20220706
  • TWS耳机底噪整改指南V1.2
  • 杰理蓝牙距离调试文档
  • 蓝牙RF硬件设计与调试V1.1-20250219
  • AC695N_AC696N FM天线ESD静电防护措施说明V2.0_20241228
  • 音效调试指南
  • 无线话筒K歌音箱标准开发流程
  • 杰理科技 700N TWS耳机产品标准-202303
  • 杰理科技 701N 广播产品标准-202303
  • JL-HAT ANC高效产测自适应
  • 无线话筒测试板使用介绍
  • 一拖八频偏校准使用说明
  • 领夹麦产测工具使用介绍
  • Dongle量产测试说明
  • Dongle+Tws或头戴式 SDK通过工具绑定配对功能说明文档
  • 双麦ENC产测宏配置验证方法 V1.0
  • JL耳机方案麦克风声学测试指令_V1.0
  • JL耳机方案麦克风声学测试指令_V2.0
  • JL_ENC自动测试命令_V0.0.1
  • JL蓝牙测试盒用例说明
  • LDAC自测环境搭建_ubuntu
  • 延迟小板使用手册
  • 杰理库文件的制作及添加实现过程
  • 关于 AC635N&AC636N系列免晶振兼容性补丁 说明
  • 关于 AC63系列VM兼容性修复补丁_20250224 说明
  • 关于 AC632N &AE632N_ 蓝牙& 低功耗兼容性修复补丁 说明
  • AD698N和AC638N电压优化补丁V3说明
  • 关于 AC635N&AC636N漏电和E&G版兼容联合补丁 说明
  • AD698N和AC638N电压优化补丁V2说明
  • 702相关应用
  • 2024-4-30 发布歌词显示SDK开发注意事项
  • BQB RF & FCC 认证测试固件问题汇总及源码
  • BQB profile 测试中常遇到的问题点汇总
  • 进dut测试模式方法及固件
  • 704-频偏修改bin文件合集
  • 701手表BQB PROFILE认证注意事项
  • 认证的干扰规避整改
  • 海外CRA认证报告生成说明
  • JL700N可视化工具问题处理文档
  • JL701X可视化工具问题处理文档
  • JL701N_earphone_release_v1.6.0_ANC 低功耗问题补丁
  • JL708X可视化工具问题处理文档
  • JL709N可视化工具问题处理文档
  • JLstudio可视化工具使用说明
  • 一拖二-串口_蓝牙_app在线EQ、通话参数及调试方式和内置触摸调试
  • 可视化JL701M_DONGLE_SDK添加MIC为发射源
  • 可视化JL701M_DONGLE_SDK添加按键切换usb audio与MIC发射源
  • JL701M_DONGLE_SDK_1.0.0_dongle输入linein输出dac
  • 701可视化_a2dp_to_le_demo说明
  • 耳机系列demo汇总
  • JL7018F&JL7006F_7003F AUX IIS
  • 一键连接应用
  • 普通SDK动态开关一拖二功能
  • 蓝牙分析仪(EllisysBluetoothAnalyzer)抓包例程
  • TWS配对常见应用
  • APP自定义按键的demo
  • AC700N 播歌双EQ DEMO示例及说明
  • AC698V164 MIC与蓝牙音乐共同输出DAC demo
  • 添加第三方算法以及多算法授权流程
  • 空间音频配置方法
  • 普通高低电平TWS耳机控制通讯
  • 入耳检测状态更新demo解析
  • 资源优化(非可视化的SDK)
  • 资源优化(可视化SDK)
  • 翻译耳机、语音识别应用demo
  • 耳机抗干扰问题排查和优化
  • AC698D2 抗干扰优化
  • AC696X软件问题整理
  • AC695X软件问题整理
  • AC695X软件问题整理_1722249702
  • AC608X软件问题整理
  • JL701N_2T1_DUPLEX 应用软件问题汇总
  • le_audio_1.0.0_patch05 以及之前的版本IRkey 功能异常修改
  • AC706N-le_audio-200SDK有线_无线麦录音demo
  • jl701n_le_audio_v200patch02 IO串口升级修改串口单次发送字节长度的修改办法
  • 703创建IIS 输入dac输出音频流demo
  • 703将媒体流音频同时上传PC_mic录音demo实现
  • 703四路IIS输入输出demo
  • 底噪调试
  • AW328A烧录说明
  • 文档合集
  • AC706N_wireless_mic_release_PATCH_20240712 补丁 说明
  • AC706N_wireless_mic_release_PATCH_20240726 补丁 说明
  • AC706N_wireless_mic_release_V1.0.0、1.0.1、1.0.2 补丁 说明
  • AC706N_wireless_mic_release_V1.1.2 中的2T1应用 RX端不绑定配对,TX端实现绑定配对的修改方法
  • 各系列省晶振实现方法
  • iis tx rx说明文档
  • spdif信号
  • 蓝牙电话本
  • 安卓手机同步时间补丁
  • CDC配置
  • PC模式下增加Teams唤起功能
  • 杰理HDMIARC开发实现过程
  • AC701N patch06之前的版本用第三方算法节点实现新版本的pcm delay节点功能
  • (K歌音箱)各SDK音效配置相关说明
  • 长文件录音
  • 点阵屏歌词字库相关(蓝牙歌词,普通歌词)
  • 字模提取工具说明
  • 音箱可视化彩屏-入门到进阶开发指导
  • 彩屏LVGL UI设计及工具使用
  • 使用内部UI框架进行UI调试的系列步骤
  • AD101C使用强制升级工具spi 烧录不了问题处理(测试版本)
  • AD161扩展灯板说明文档
  • 歌词显示器开发注意项
  • 使用硬件数字增益控制通话下行音量(可视化)
  • 杰理小牛产测资料
  • ENC配置说明
  • 通话调试流程指引
  • ANC相关功能demo
  • 无线麦硬件资料汇总
  • 无线麦相关应用
  • 无线麦复杂功能补丁包汇总
  • 无线话筒形态SDK程序&开发经验&问题点分享
  • 双模式结合应用问题汇总
  • 无线麦距离优化案例
  • 无线麦系列中的双工形态(duplex)演变开发对讲机方案开发资料
  • 音箱入门到进阶指导文档(编写中)
  • 蓝牙耳机品控和生产技巧
  • 982过_欠压标志获取异常
  • 如何获取最新涂鸦SDK及库文件
  • 无线话筒K歌音响-调音标准流程
  • 无线话筒产测流程

蓝牙发射器(bt_emitter)相关

📎 原始文档:https://www.kdocs.cn/l/ckHZAom1KZHE 蓝牙发射器(bt_emitter)相关
简介:该文档用于整合蓝牙发射器使用过程中经常遇到的问题和疑问。

  1. 蓝牙发射器(bt_emitter)如何配置?
  2. 以br23\br25为例子,board_config.h通常会有一个发射器的宏定义,选择该板级则开启了蓝牙发射器的功能。 image
  3. void bt_search_device(void) 函数发起搜索配对,搜索到设备后,底层会调用u8 emitter_search_result(char *name, u8 name_len, u8 *addr, u32 dev_class, char rssi)函数,返回设备的mac地址,蓝牙名等信息,可能通过这些信息来过滤需要连接的设备。 默认的过滤方式有名字过滤,蓝牙地址过滤,或无限制。
    image
  4. 如果没有按照第1点选择“蓝牙发射器”板级文件,则需要按照以下截图配置 #define TCFG_USER_EMITTER_ENABLE 1 //emitter功能使能
    #define AUDIO_OUTPUT_WAY AUDIO_OUTPUT_WAY_BT // AUDIO_OUTPUT_WAY_DAC
    imageimage 注意事项:
  5. 要使用发射器功能需要使用蓝牙后台功能,所以尽可能使用695系列或者701系列的芯片;
  6. 696系列新的SDK已经不支持蓝牙后台功能,如需使用要用之前的SDK。
  7. 蓝牙发射器配置DAC不输出信号 image
  8. 蓝牙发射器(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,//发射器接收器切换


  1. AC695N蓝牙发射器(单连)兼容性问题处理 简介:兼容性问题通常指:1、无法连接2、播放音频卡顿3、连接后异常断开
    “单连”的意思是蓝牙发射器支持连接一个设备播放sbc音频。
    以下表格用来放置历史打好兼容性补丁的SDK或蓝牙库文件,会持续更新,新日期的补丁都会兼容好旧的问题点,请注意!
时间SDK补丁修复的问题点
20260722Files · feature_sdk_310_bt_emitter · SOUNDBOX / 非可视化 / ac695n_soundbox_sdk · GitLab9
20260511Files · feature_sdk_310_bt_emitter_spdif · SOUNDBOX / 非可视化 / ac695n_soundbox_sdk · GitLab1.修复发射spdif时接收端卡顿
2.蓝牙测试盒连接立马断开,不能校准频偏
20260506Files · feature_sdk_310_bt_emitter · SOUNDBOX / 非可视化 / ac695n_soundbox_sdk · GitLab1、修复增加pincode后,接收模式时无法连接苹果手机的问题
2、修复接收模式通话时mic无声的问题
3、修复PC模式从机无声问题
4、优化发射器连部分音箱会出现超时的问题
20251126AC695n_soundbox_sdk_bt_emitter_20251126.zip
PS:测试盒不支持bitpool为30,需要改为53
1.打开音频代码放RAM,处理部分跑不过来的情况
20251112br23_v310_btstack_20251112-1627.rar1、修正AVRCP功能,支持车机播放暂停或切换上下曲
2、修正耳机进不去sniff的问题
20250901AC695n_soundbox_sdk_bt_emitter_20250901.zip1、修正连接部分设备退出蓝牙模式死循环的问题
20250731AC695n_soundbox_sdk_bt_emitter_20250731.zip1、修改IO capacity为no input ,no output,避免连接部分设备失败
2、修复远距离无声后靠近仍然无声问题
20250715AC695n_soundbox_sdk_bt_emitter_20250715.zip1、关闭BT_USE_PCM_DEC宏定义,修正部分设备连接后会卡顿的问题
20250630AC695n_soundbox_sdk_bt_emitter_20250630.zip1、修正不停连接和断开概率性死机问题
20250619br23_v310_btstack_20250606-1847.zip1、修正远距离无声音后再靠近无声音的问题
20250606AC695n_soundbox_sdk_bt_emitter_20250606.zip1、修改bitpool为30
2、增加发送音量同步
3、更新btstack.a,取消scms-t
20250524AC695n_soundbox_V3.1.0_bt_emitter_2025_05_24.zip1、修正无法连接部分蓝牙设备的问题或连接后无声音的问题
2、各音频流解码文件中添加__bt_emitter_pp()
20241126br23_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;
蓝牙发射器连接某些音箱失败问题
20240927br23_v310_btstack_20240927-1346.zipPC dongle的方案,想要拒绝esco的断开请求,可以开放接口
void __set_hfp_ag_res_hangup_flag(u8 flag);
__set_hfp_ag_res_hangup_flag(0);
image
再添加一个int变量
int set_remove_esco_req_not_accepted_flag = 0;
image
20240903br23_v310_btstack_20240903-1352.zip修复发射器连接部分耳机,耳机在没有连接好avctp通道前发送一次音量同步信息,导致本地无法更新音量数值的问题。
20240710AC695n_soundbox_sdk_3.1.0_bt_emitter_0710.zip兼容性修改

以下用于说明应用层(APP层)的会做的兼容性修改。

  1. 修改蓝牙版本号 image
  2. 关闭a2dp_support_delay_report image
  3. 修改蓝牙设备类型BD_CLASS
include_lib/btstack/avctp_user.h中添加
#define BD_CLASS_SMART_PHONE              0x40020C

image

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);
        }
    }
}

  1. 取消假连操作(一些设备进入后不退出卡住流程) image
  2. 修改蓝牙连接方式,蓝牙简易连接方式修改。 image
  3. 发射器回连耳机,已经连接上,但是发射的sbc编码没打开(或者sbc编码已打开,但是output_buf满,数据没有写入成功) imageimage
  4. AC6956M蓝牙发射器(双连)兼容性问题处理 注意:双连的SDK芯片必须是AC6956M,不能使用其他芯片
    简介:兼容性问题通常指:1、无法连接2、播放音频卡顿3、连接后异常断开
    “双连接”的意思是蓝牙发射器支持连接两个设备播放sbc音频。
    以下表格用来放置历史打好兼容性补丁的SDK或蓝牙库文件,会持续更新,请注意!
时间SDK补丁修复的问题点
20260709Files · feature_sdk_310_bt_emitter_2_a2dp · SOUNDBOX / 非可视化 / ac695n_soundbox_sdk · GitLab1、更新蓝牙库,loop线程唤醒推送加了重试流程,避免出现蓝牙消息池溢出的问题
2、优化发射器对接收到的 AVRCP PLAY/PAUSE 命令的处理流程
20260703Files · feature_sdk_310_bt_emitter_2_a2dp · SOUNDBOX / 非可视化 / ac695n_soundbox_sdk · GitLab1、更新蓝牙库
2、优化播放暂停命令只同步一个接收器的问题
3、同步单连发射器的部分优化修改。
4、增加发射器同步音量到接收器的功能。
5、关闭HFP和HFP AG协议,需要可重新开启,会影响部分接收器连接。
20250524AC695N_soundbox_sdk_release_3.1.0_emitter_2_a2dp_20250524.zip1、修正无法连接部分蓝牙设备的问题或连接后无声音的问题
2、各音频流解码文件中添加__bt_emitter_pp()
20250320emitter_two_a2dp_btstack_20250320-1501.7z修改连接苹果耳机,经常没声音问题
20241014emitter_two_a2dp_btstack_20241014-1621.zip
emitter_two_a2dp_btctrl_20241014-1621.rar
蓝牙接收模式一拖二情况,手机A通话,手机B来电,获取手机B的来电号码功能。
void user_send_hfp_call_current(u8 *addr)
image
image
20240924emitter_two_a2dp_btstack_20240924-1634.zip修复蓝牙接收模式下连接蓝牙测试盒出现复位异常问题
20240408AC695N_soundbox_sdk_release_3.1.0_emitter_2_a2dp_0408.zip
20240304AC695N_soundbox_sdk_release_3.1.0_emitter_2_a2dp_0304_source.zip
20240117AC695N_soundbox_sdk_release_3.1.0_emitter_2_a2dp_0117.zip
  1. AC690N蓝牙发射器(单连)兼容性问题处理 替换最新的蓝牙库测试:
    【金山文档】 bluetooth_lib-690发射器-20230228
    bluetooth_lib-690发射器-20230228.zip
  2. JL701N蓝牙发射器兼容性问题处理
时间SDK补丁修复问题点
20260429jl701n_soundbox_v1.4.3_beta3btstack_瑞卿改_701_143_beta3_修复发射器连车机直接进通话的问题.rar修复连车机直接进通话的问题
20260309jl701n_soundbox_v1.4.3_beta2btctrler_瑞卿改_jl701n_soundbox_v1.4.3beta2_20260309_发射器兼容JBL TUNE510BT.zip兼容JBL TUNE510BT耳机
20260309jl701n_soundbox_v1.4.3_beta3btctrler_瑞卿改_jl701n_soundbox_v1.4.3beta3_20260309_发射器兼容JBL TUNE510BT.zip兼容JBL TUNE510BT耳机
20250331jl701n_earphone_release_1.7.0_transmitterbtstack_AC701N_earphone_transmitter_20250331.zip发射器使用 int user_send_at_cmd_prepare(u8 *data,u16 len); 发送后,接收器未接收到消息
  1. 蓝牙发射器音频延时参数 发射器延时主要取决于接收端的延时,一般接收端的延时在200ms左右,所以发射器普遍测试得到的延时都是200ms左右;
    如果测试到延时很高,认为不正常情况下,请先测试接收端链接手机的延时以及我们公版代码跟接收端的延时;
    如果公版发射器代码跟接收端的延时明显高于手机跟接收端的延时,请联系我们。
  2. 蓝牙发射器应用-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
image

【金山文档】 dongle程序说明
dongle程序说明.docx
PC功能实现:
PC相关应用.otl

4、发射器做选择连接
  1. 得到搜索到的蓝牙列表 在调用bt_search_device()后,程序会开始搜索设备:
    搜索到的设备会在此函数内进行回调,此时会得到蓝牙名和地址,可以保存这些信息做显示以及之后的连接,然后return false;让样机不去连接
    image
  2. 搜索停止功能 user_send_cmd_prepare(USER_CTRL_INQUIRY_CANCEL, 0, NULL);
  3. 断开当前连接去连接其他接收器操作
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;

image

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-常见问题处理分析

  1. 蓝牙发射器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解码。
    image
void TIMER_500()
{
    bt_emitter_pp(1);
}
void TIMER_100()
{
    user_emitter_cmd_prepare(USER_CTRL_HFP_CALL_ANSWER, 0, NULL);
}

image

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 
}

image 2. 发射器接收模式通话声音异常 我们通话过程中需要声音采样率需要保持8K/16K如果是其他采样率会出现问题。
检查方法:

  1. 先检查程序配置有没有固定采样率的操作,如果有需要加判断进行区分 image
  2. 通话过程中,观看打印直接看DAC的采样率是多少 image
  3. 695 3.1.0SDK 发射器连不上会有回调HCI_EVENT_USER_CONFIRMATION_REQUEST。如果使用手机去连接的话,手机上会显示个对话框点确认后就可以连接。 问题打印:
    imageimage 修改方法:
    image
  4. AC695X音箱做发射器连接部分耳机,出声慢或者不出声问题 4.1 AC695X音箱做发射器连接部分耳机,耳机暂停后按播放,声音延迟出来
    原因:程序流程单纯关闭自身的音频解码,没有关闭a2dp导致。
    修改如下:
    imageimage 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
  1. 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);
    }
  1. 695-310 SDK 发射器连耳机,无音频播放时耳机进不了sniff 修改方法:
  2. 更新最新版蓝牙库
  3. 两端同时开启蓝牙sniff功能
  4. 增加下面这段代码,可加快耳机进sniff
    if (bt_user_priv_var.emitter_or_receiver == BT_EMITTER_EN) {
        return;
    }

image 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;

imageimage 8. jl701n_soundbox_v1.4.3_beta3 蓝牙发射器模式连接车机会直接进入通话音频 根本原因:hfp 命令回复错误
修改方法:更换btstack.a。
btstack_瑞卿改_701_143_beta3_修复发射器连车机直接进通话的问题.rar
提交记录:
image 外网: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

本文档包含以下子页面

  • dongle程序说明
  • 发射器与接收器SPP通信修改点
Prev
GFP谷歌快连及其认证流程指引
Next
BLE应用