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歌音响-调音标准流程
  • 无线话筒产测流程

杰理第三方APP通信协议设计说明文档

📎 原始文档:https://www.kdocs.cn/l/ci8tmK1MEAtZ

APP通信协议接口设计说明书

珠海市杰理科技股份有限公司

Zhuhai Jieli Technologyco.,LTD

版权所有,未经许可,禁止外传

版权所有,侵权必究
1
地址:珠海市吉大石花西路 107号9栋综合楼 邮编:519015
电话:0756-6313088 传真:0756-6313081
网站:www.zh-jieli.com

修改记录

版本更新日期描述
v1.02021-1-12App通信协议接口设计说明初始版本

版权所有,侵权必究
2
目录
1.文档介绍.............................................................................................................................................................................. 6

  1. 1.文档目的................................................................................................................................................................... 6
    1.2.参考文献................................................................................................................................................................... 6
    1.3.术语与缩写词........................................................................................................................................................... 6
    2.功能概述和使用.................................................................................................................................................................. 6
  2. 1.功能概述................................................................................................................................................................... 6
    2.2.使用说明................................................................................................................................................................. 7
    2.2. 1.板级配置................................................................................................................................................ 7
    2.2.2.开启对应协议功能................................................................................................................................ 9
    2.2.3.添加提示音资源文件............................................................................................................................ 9
    3.其他系统/模块的调用关系............................................................................................................................................... 10
    4.文件名说明与内容安排.................................................................................................................................................... 10
    5.消息模块介绍.....................................................................................................................................................................11
  3. 1.公共通知消息类..................................................................................................................................................... 11
    1. 1.消息介绍............................................................................................................................................... 11
  4. 1.2.接口介绍............................................................................................................................................... 11
  5. 1.2. 1. app_pr。t。c。l_message_handler .................................................................................................. 11
    5.2. OTA通知消息类..................................................................................................................................................... 12
    5.2. 1.介绍....................................................................................................................................................... 12
    5.2.2.接口介绍.............................................................................................................................................. 13
    5.2.2. 1. app_pr。t。c。l_。ta_message_handler .......................................................................................... 13
    5.3. GMA私有消息........................................................................................................................................................ 13
    5.3. 1.消息列表.............................................................................................................................................. 13
    5.3.2.接口介绍.............................................................................................................................................. 14
    5.3.2. 1. static int gma_ special_message .................................................................................................. 14
    5.4. MMA私有消息....................................................................................................................................................... 14
    5.4.1.消息列表........................................................................................................................................... 1
    3 版权所有,侵权必究
    这部分消息是用于处理MMA一些独特的命令,或者以后需要协议扩展的命令。 ................................ 14
    5.4.2.接口介绍.............................................................................................................................................. 15
    5.4.2. 1. mma_ special_message ................................................................................................................15
    5.5. DMA私有消息........................................................................................................................................................ 15
    5.5. 1.消息列表.............................................................................................................................................. 15
    5.5.2.接口介绍.............................................................................................................................................. 16
    5.5.2. 1. duer。s_ special_message ............................................................................................................. 16
    6.与各具体协议中间层设计介绍........................................................................................................................................ 16
  6. 1.概况......................................................................................................................................................................... 16
    6.2.参数配置接口......................................................................................................................................................... 17
    6.3.协议操作函数......................................................................................................................................................... 17
    6.4.协议回调接口注册函数......................................................................................................................................... 18
    7.提供给USER层使用的接口............................................................................................................................................18
  7. 1.参数配置接口(在init之前).............................................................................................................................. 18
      1. app_pr。t。c。l_ set_pr。duct_ id ................................................................................................................ 18
  8. 1.2. app_pr。t。c。l_ set_vend。r_ id ................................................................................................................. 19
  9. 1.3. app_pr。t。c。l_ set_ l。cal_versi。n ............................................................................................................ 19
  10. 1.4. app_pr。t。c。l_ set_ inf。_ gr。up................................................................................................................19
  11. 1.5. app_pr。t。c。l_ set_tws_ sibling_mac ...................................................................................................... 20
    7.2.协议操作控制接口................................................................................................................................................. 20
    7.2. 1. app_pr。t。c。l_ ibeac。n_ switch ............................................................................................................... 20
    7.2.2. app_pr。t。c。l_ble_ adv_ switch ............................................................................................................... 20
    7.2.3. app_pr。t。c。l_ disc。nnect ....................................................................................................................... 21
    7.2.4. app_pr。t。c。l_ get_tws_ data_ f。r_ lib ...................................................................................................... 21
    7.2.5. app_pr。t。c。l_ send_v。ice_ data ............................................................................................................. 21
    7.2.6. app_pr。t。c。l_ check_ c。nnect_ success .................................................................................................. 22
    7.2.7. app_pr。t。c。l_ start_ speech_ cmd ........................................................................................................... 22
    7.2.8. app_pr。t。c。l_ st。p_ speech_ cmd ............................................................................................................23
    版权所有,侵权必究
    4
    7.3.回调函数说明......................................................................................................................................................... 23
    7.4. APP pr。t。c。l线程接口............................................................................................................................................23
    7.4. 1. app_pr。t。c。l_ inti; ..................................................................................................................................23
    7.4.2. app_pr。t。c。l_ exit .................................................................................................................................. 24
  12. USER APP流程和一些接口............................................................................................................................................. 24
  13. 1.公共流程................................................................................................................................................................. 24
    1. 1.协议栈流程.......................................................................................................................................... 24
  14. 1.2.唤醒语音助手流程.............................................................................................................................. 26
  15. 1.3.三元组烧写配置流程.......................................................................................................................... 27
  16. 1.4.系统事件处理流程.............................................................................................................................. 27
    8.2.接口......................................................................................................................................................................... 27
    8.2. 1. app_pr。t。c。l_ set_v。lume ......................................................................................................................27
    8.2.2. app_pr。t。cal_ get_bat_by_type ..............................................................................................................28
    8.2.3. app_pr。t。cal_ get_ license_ptr ................................................................................................................28
    8.2.4. app_pr。t。c。l_ license2flash ................................................................................................................... 28
    8.2.5. app_pr。t。c。l_t。ne_register ................................................................................................................... 29
    8.2.6. mic_rec_pram_ init ................................................................................................................................. 30
    8.2.7. app_pr。t。c。l_handle_register ............................................................................................................... 30
    8.2.8. app_pr。t。c。l_tws_ sync_private_ deal ................................................................................................... 30
    8.2.9. app_pr。t。c。l_tws_rx_ data_private_ deal ...............................................................................................31
    8.2.10. app_pr。t。c。l_ sys_ event_private_ deal ................................................................................................ 31
    8.2. 11. app_pr。t。c。l_p。st_bt_ event ................................................................................................................31
    8.2. 12. app_pr。t。c。l_p。st_ app_ c。re_ callback ............................................................................................... 32
    8.2.13. app_pr。t。c。l_tws_ send_t。_ sibling.....................................................................................................32
    8.2. 14. app_pr。t。c。l_tws_ sync_ send ..............................................................................................................33
    版权所有,侵权必究
    5

1.文档介绍

介绍手机APP通信协议的API接口设计,API参数和反馈事件的意义。

1.1.文档目的

通过本文档熟悉各个手机APP通信协议API 的使用和注意事项。

1.2.参考文献
[ 1] .各家AI协议的网址和参考资料
1.3.术语与缩写词
缩写、术语解 释
APP手机软件
GMA阿里天猫的AI协议
MMA小米小爱的AI协议
DMA百度的AI协议
TME腾讯酷狗的协议

2.功能概述和使用

2.1.功能概述

由于各个互联网公司的AI协议有较大差异,上层使用经常要用很多宏区分功能编译,这样就导致了一个代码的移植性很差。这个接口层设计是为上层应用提供相对比较统一的AI APP协议接口,屏蔽一些
版权所有,侵权必究 6
地址:珠海市吉大石花西路 107号9栋综合楼 邮编:519015
电话:0756-6313088 传真:0756-6313081
网站:www.zh-jieli.com
协议的细节,由库里面实现并抽象接口。提高上层应用代码和AI协议的可移植性。

2.2.使用说明

本说明以百度AI协议为例。

2.2.1.板级配置

相关板级配置在board_ac695x_smartbox.h 中。开启图片中所标识的宏。
image 版权所有,侵权必究 7
image

开启语音助手功能需要配置下面的宏,OPUS/SPEEX编码根据需要使能其中一个即可。

image 版权所有,侵权必究 8

2.2.2.开启对应协议功能

image

2.2.3.添加提示音资源文件

image 版权所有,侵权必究 9
3
image

4.文件名说明与内容安排

文件名文件内容说明
app_protocol_api.c只能在此文件调用具体协议库的函数接口。并且抽象封装接口给 USER APP层调用
app_protocol_common.cUSER APP层抽象提供给app_protocol_api调用的接口
app_protocol_ota.cOTA升级的中间层接口
app_protocol_dma.cDMA非协议规定的不通用流程和资源。如提示音,读配置文件
app_protocol_gma.cGMA非协议规定的不通用流程和资源。如提示音,读配置文件
app_protocol_mma.cMMA非协议规定的不通用流程和资源。如提示音,读配置文件
app_protocol_tme.cTME非协议规定的不通用流程和资源。如提示音,读配置文件
app_protocol_deal.c提供硬件相关的系统频率、提示音播放、按键处理函数的接口

版权所有,侵权必究 l0

5.消息模块介绍

5.1.公共通知消息类
5.1.1.消息介绍

这类消息是每个APP协议都基本会有的状态通知消息。
image

  1. //app protocol公共消息
  2. enum {​
  3. APP_PROTOCOL_COMMON_NOTICE = 0 ,
  4. APP_PROTOCOL_CONNECTING, /保留,暂未使用/
  5. APP_PROTOCOL_CONNECTED_BLE, /APP通过BLE连接成功状态更新/
  6. APP_PROTOCOL_CONNECTED_SPP, /APP通过SPP连接成功状态更新/
  7. APP_PROTOCOL_DISCONNECT, /APP连接断开状态更新/
  8. APP_PROTOCOL_AUTH_PASS, /连接认证通过标识更新/
  9. APP_PROTOCOL_SPEECH_START, /语音识别功能启动状态/
  10. APP_PROTOCOL_SPEECH_STOP , /语音识别功能停止状态/
  11. APP_PROTOCOL_SET_VOLUME, /app配置音量/
  12. APP_PROTOCOL_GET_VOLUME, /app读取音量/
  13. APP_PROTOCOL_GET_AUX_STATUS, /保留,暂未使用/
  14. APP_PROTOCOL_LIB_TWS_DATA_SYNC, /需要更新给另一端tws数据/
  15. APP_PROTOCOL_COMMON_NOTICE_END = 0x14F, 16. ​} ;
    这些消息主要在int app_protocol_message_handler(int opcode, const u8 *data, u32 len);函数中处理
5.1.2.接口介绍

[5.1.2.1. app_protocol_message_handler](5.1.2.1. app_protocol_message_handler)

函数原型int app_protocol_message_handler(int id, int opcode, const u8 *data, u32 len);
功能描述此函数是注册到库里面使用,处理APP协议的所有消息,再通过系统消息接口的方式发给其它线程处理

版权所有,侵权必究 11

参数说明\param[in] id //连上的协议ID值
\param[in] opcode //app_profile_api.h里面的枚举值*\param[in] data //可能状态会有其它的参数,没有是NULL *\param[in] len //状态其它的参数的长度,没有是0
输出返回值是错误码
例子
补充说明
5.2. OTA通知消息类
5.2.1.介绍

这类消息是每个APP协议进行OTA升级时抽象出来的消息,用于通知上层状态和进度
image

  1. enum {​
  2. APP_PROTOCOL_OTA_COMMON_NOTICE = APP_PROTOCOL_COMMON_NOTICE_END + 1 , 3. APP_PROTOCOL_OTA_CHECK,
  3. APP_PROTOCOL_OTA_GET_APP_VERSION ,
  4. APP_PROTOCOL_OTA_CHECK_CRC,
  5. APP_PROTOCOL_OTA_BEGIN,
  6. APP_PROTOCOL_OTA_TRANS_DATA,
  7. APP_PROTOCOL_OTA_PERCENT ,
  8. APP_PROTOCOL_OTA_END,
  9. APP_PROTOCOL_OTA_SUCCESS ,
  10. APP_PROTOCOL_OTA_FAIL,
  11. APP_PROTOCOL_OTA_CANCLE,
  12. APP_PROTOCOL_OTA_REBOOT,
  13. APP_PROTOCOL_OTA_COMMON_NOTICE_END = 0x1FF, 15. ​} ;
    这些消息主要在int app_ota_message_handler(int opcode, const u8 *data, u32 len)函数中处理
    版权所有,侵权必究 12
5.2.2.接口介绍

[5.2.2.1. app_protocol_ota_message_handler](5.2.2.1. app_protocol_ota_message_handler)

函数原型int app_protocol_ota_message_handler(int id, int opcode, u8 *data, u32 len)
功能描述此函数在app_protocol_message_handler 中调用,判断范围后,把对应的消息给到app_protocol_ota_message_handler处理,
参数说明\param[in] id //区分什么协议的ID值
\param[in] opcode //app_profile_api.h里面关于OTA 的枚举值*\param[in] data //可能状态会有其它的参数,没有是NULL *\param[in] len //状态其它的参数的长度,没有是0
输出返回值是错误码
例子
补充说明
5.3. GMA私有消息
5.3.1.消息列表

这部分消息是用于处理GMA一些独特的命令,或者以后需要协议扩展的命令。
image

  1. //GMA私有消息
  2. enum {​
  3. APP_PROTOCOL_GMA_NOTICE_BEGIN = GMA_HANDLER_ID,
  4. APP_PROTOCOL_GMA_FMTX_SETFRE ,
  5. APP_PROTOCOL_GMA_FMTX_GETFRE ,
  6. APP_PROTOCOL_GMA_NOTICE_END = GMA_HANDLER_ID + 0xFF, 7. ​} ;
    这些消息主要在int gma_message_handler(int opcode, const u8 *data, u32 len)函数中处理
    版权所有,侵权必究 13
5.3.2.接口介绍

5.3.2.1. static int gma_special_message

函数原型static int gma_special_message(int id, int opcode, u8 *data, u32 len)
功能描述定义一个协议特殊的消息函数是为了减少代码量,不会编译到不需要协议库
参数说明\param[in] id //区分什么协议的ID值
\param[in] opcode //app_profile_api.h里面关于OTA 的枚举值*\param[in] data //可能状态会有其它的参数,没有是NULL *\param[in] len //状态其它的参数的长度,没有是0
输出返回值是错误码
例子
补充说明
5.4. MMA私有消息
5.4.1.消息列表
这部分消息是用于处理MMA一些独特的命令,或者以后需要协议扩展的命令。

image

  1. //MMA私有消息
  2. enum {​
  3. APP_PROTOCOL_MMA_NOTICE = MMA_HANDLER_ID, 4. APP_PROTOCOL_MMA_SAVE_INFO,
  4. APP_PROTOCOL_MMA_READ_INFO,
  5. APP_PROTOCOL_MMA_SAVE_ADV_COUNTER,
  6. APP_PROTOCOL_MMA_READ_ADV_COUNTER,
    image
  7. APP_PROTOCOL_MMA_NOTICE_END = MMA_HANDLER_ID + 0xFF, 9. ​} ;
    版权所有,侵权必究 14
5.4.2. 接口介绍

[5.4.2.1. mma_special_message](5.4.2.1. mma_special_message)

函数原型static int mma_special_message(int id, int opcode, u8 *data, u32 len)
功能描述定义一个协议特殊的消息函数是为了减少代码量,不会编译到不需要协议库
参数说明\param[in] id //区分什么协议的ID值
\param[in] opcode //app_profile_api.h里面关于OTA 的枚举值*\param[in] data //可能状态会有其它的参数,没有是NULL *\param[in] len //状态其它的参数的长度,没有是0
输出返回值是错误码
例子
补充说明
5.5. DMA私有消息
5.5.1.消息列表

这部分消息是用于处理DMA一些独特的命令,或者以后需要协议扩展的命令
image

  1. //DMA私有消息
  2. enum {​
  3. APP_PROTOCOL_DMA_NOTICE = DMA_HANDLER_ID,
  4. APP_PROTOCOL_DMA_SAVE_RAND,
  5. APP_PROTOCOL_DMA_READ_RAND,
  6. APP_PROTOCOL_DMA_TWS_SNED_RAND,
  7. APP_PROTOCOL_DMA_NOTICE_END = DMA_HANDLER_ID + 0xFF, 8. ​} ;
    版权所有,侵权必究 15
5.5.2.接口介绍

5.5.2.1. dueros_special_message

函数原型static int dueros_special_message(int id, int opcode, u8 *data, u32 len)
功能描述定义一个协议特殊的消息函数是为了减少代码量,不会编译到不需要协议库
参数说明\param[in] id //区分什么协议的ID值
\param[in] opcode //app_profile_api.h里面关于OTA 的枚举值*\param[in] data //可能状态会有其它的参数,没有是NULL *\param[in] len //状态其它的参数的长度,没有是0
输出返回值是错误码
例子
补充说明

6.与各具体协议中间层设计介绍

6.1.概况

每个协议的实现提供的接口需要根据app_profile_interface_t结构体来完成。为了能够支持同时支持多个协议组合,比如(DMA+JL rcsp ota),会有一个链表把这些结构体组织起来。每个协议会固定一个UUID,用于查找对应的协议接口组。但是协议只能支持一个连接。
image

  1. #define DEMO_HANDLER_ID 0x300 /作为一个使用的例子,同时也可作为客户自己添加协议的ID/
  2. #define GMA_HANDLER_ID 0x400 /阿里天猫协议接口 ID/
  3. #define MMA_HANDLER_ID 0x500 /小米MMA协议接口 ID/
  4. #define DMA_HANDLER_ID 0x600 /百度DMA协议接口 ID/
  5. #define TME_HANDLER_ID 0x700 /腾讯酷狗TME协议接口 ID/
    image
  6. #define AMA_HANDLER_ID 0x800 /亚马逊的AMA协议接口 ID/
list_for_each_app_profile可以遍历所有支持的协议

版权所有,侵权必究 16

6.2.参数配置接口
  1. struct app_protocol_info_t {​
    image
  2. /配置类接口/
  3. void (*set_product_id)( u32 pid);
  4. void (*set_vendor_id)(u32 vid);
  5. void (*set_local_version) (u32 vid);
    image
  6. void (*set_special_info_group) (void *addr ) ;
  7. void (*set_tws_sibling_mac) (void *mac) ; 8. ​} ;
6.3.协议操作函数

image

  1. struct app_ctrl_operation_t {​
    [2.](2. int)[ int](2. int)(*protocol_init)();
    [3.](3. int)[ int](3. int)(*protocol_exit)();
    [4.](4. int)[ int](4. int)(*adv_enable)(int enable);
    [5.](5. int)[ int](5. int)(*ibeacon_adv)(int sw);
    [6.](6. int)[ int](6. int)(*regist_wakeup_send)(void *priv, void *cbk);
    [7.](7. int)[ int](7. int)(*regist_ recieve_cbk)(void *priv, void *cbk);
    [8.](8. int)[ int](8. int)(*latency_enable)(void *priv, u32 enable);
    [9.](9. int)[ int](9. int)(*send_data)(void *priv, void *buf, u16 len);
    [10.](10. int)[ int](10. int)(*send_voice_data)(void *buf, u16 len);
    [11.](11. int)[ int](11. int)(*disconnect)(void *addr);
    [12.](12. int)[ int](12. int)(*tws_receive_sync_data)(u8 *data, int len);
    [13.](13. int)[ int](13. int)(*get_auth_state)(void);
    [14.](14. int)[ int](14. int)(*start_voice_recognition)(int st); 15. ​} ;
    一般考虑连接的时候只有一个APP处于连接状态,所以发送的时候只有一个协议可以发送成功。
    版权所有,侵权必究 17
    image
6.4.协议回调接口注册函数

image

  1. struct callback_ register_t {​
  2. void(*message_handler_regedit ) (int (*handler) (int id, int opcode, u8 *data, u32 len));
  3. void(*check_tws_role_is_master_register) (bool (*handler) (void));
  4. void(*tx_resume) (void (*handler) (void));
  5. void(*rx_resume) (void (*handler) (void));
  6. void(*get_battery) (bool (*handler) ( u8 battery_type, u8 *value)); 7. ​} ;
    蓝牙部门负责的APP协议开发要实现这三个结构体。提供对应参数的函数赋值给结构体使用。

7.提供给USER层使用的接口

7.1.参数配置接口(在init之前)
[7.1.1. app_protocol_set_product_id](7.1.1. app_protocol_set_product_id)
函数原型void app_protocol_set_product_id(u32 handler_id, u32 pid);
功能描述设置产品的product ID,需要跟相应协议的厂商提出申请
参数说明\param[in] handler_id //每个协议指定的接口标识\param[in] pid //产品的ID,需要申请的值
输出
例子
关联模块
补充说明

版权所有,侵权必究 18

[7.1.2. app_protocol_set_vendor_id](7.1.2. app_protocol_set_vendor_id)
函数原型void app_protocol_set_vendor_id(u32 handler_id, u32 vid)
功能描述设置产品的vendor ID,需要跟相应协议的厂商提出申请
参数说明\param[in] handler_id //每个协议指定的接口标识\param[in] vid //厂商的ID,需要申请的值
输出
例子
关联模块
补充说明
[7.1.3. app_protocol_set_local_version](7.1.3. app_protocol_set_local_version)
函数原型void app_protocol_set_local_version(u32 handler_id, u32 version)
功能描述设置产品的当前软件版本,用于app显示和升级检查
参数说明\param[in] handler_id //每个协议指定的接口标识
\param[in] version //自定义值,格式库内会自己根据协议进行调整
输出
例子
补充说明
[7.1.4. app_protocol_set_info_group](7.1.4. app_protocol_set_info_group)
函数原型void app_protocol_set_info_group(u32 handler_id, void *addr)
功能描述配置协议更多信息,例如GMA 的三元组地址,百度的三月组。
参数说明\param[in] handler_id //每个协议指定的接口标识
\param[in] addr //信息的其实地址
输出

版权所有,侵权必究 19

例子
补充说明这个接口涉及到一个数据格式,可能每个协议有差异。协议开发定义好数据结构,让app层根据结构补充信息。不能随意更改数据结构
[7.1.5. app_protocol_set_tws_sibling_mac](7.1.5. app_protocol_set_tws_sibling_mac)
函数原型void app_protocol_set_tws_sibling_mac(u8 *mac)
功能描述配置TWS 的地址,app协议用于配置广播包或者命令告知app
参数说明*\param[in] mac //TWS另一端的地址
输出
例子
补充说明
7.2.协议操作控制接口
[7.2.1. app_protocol_ibeacon_switch](7.2.1. app_protocol_ibeacon_switch)
函数原型void app_protocol_ibeacon_switch(int sw)
功能描述有些协议需要开beacon包的
参数说明*\param[in] sw //开关标识 1或者0
输出
例子
补充说明
[7.2.2. app_protocol_ble_adv_switch](7.2.2. app_protocol_ble_adv_switch)
函数原型void app_protocol_ble_adv_switch(int sw)
功能描述协议开关广播包操作接口

版权所有,侵权必究 20

参数说明*\param[in] sw //开关标识 1或者0
输出
例子
补充说明
[7.2.3. app_protocol_disconnect](7.2.3. app_protocol_disconnect)
函数原型void app_protocol_disconnect(void *addr)
功能描述断开app 的连接
参数说明*\param[in] add //目前单台应用,可传NULL
输出
例子
补充说明
[7.2.4. app_protocol_get_tws_data_for_l](7.2.4. app_protocol_get_tws_data_for_l)ib
函数原型void app_protocol_get_tws_data_for_lib(u8 *data, u32 len)
功能描述Tws收到另一端的数据调用这个接口把数据完整传回去库里面解析
参数说明\param[in] data //收到数据的地址\param[in] len //收到数据的长度
输出
例子
补充说明
[7.2.5. app_protocol_send_voice_data](7.2.5. app_protocol_send_voice_data)
函数原型int app_protocol_send_voice_data(uint8_t *voice_buf, uint16_t voice_len)

版权所有,侵权必究 21

功能描述发送语音数据给APP,
参数说明\param[in] voice_buf //语音数据的起始地址
\param[in] voice_len //语音数据的长度
输出
例子
补充说明
[7.2.6. app_protocol_check_connect_success](7.2.6. app_protocol_check_connect_success)
函数原型int app_protocol_check_connect_success()
功能描述查询当前的协议有没有APP连接成功
参数说明
输出返回值是当前的连接状态
例子
补充说明
[7.2.7. app_protocol_start_speech_cmd](7.2.7. app_protocol_start_speech_cmd)
函数原型int app_protocol_start_speech_cmd()
功能描述发命令启动语音识别功能
参数说明
输出返回值是当前的命令有没有发送成功
例子
补充说明

版权所有,侵权必究 22

[7.2.8. app_protocol_stop_speech_cmd](7.2.8. app_protocol_stop_speech_cmd)
函数原型int app_protocol_stop_speech_cmd()
功能描述发命令停止语音识别功能
参数说明
输出返回值是当前的命令有没有发送成功
例子
补充说明
7.3.回调函数说明
函数名称简要说明
message_handler_regedit公共消息函数传递到库里面调用
check_tws_role_is_master_register库需要检查TWS 的主从状态
tx resume可能需要唤醒线程处理去发数
rx resume可能需要唤醒线程去处理收到的数据
get_battery获取各种电池电量的总接口
7.4. APP protocol线程接口
[7.4.1. app_protocol_inti](7.4.1. app_protocol_inti);
函数原型void app_protocol_inti(int handler_id);
功能描述/这个接口主要是建立一个线程,注册一些协议需要用的公共接口,比如resume, message_handler等函数。建立了线程之后,初始化对应的协议/
参数说明*\param[in] handler_id //头文件指定协议的一个ID值

版权所有,侵权必究 23

输出
例子在对应的路径加上头文件#include "app_protocol_api.h"app_protocol_init(DEMO_HANDLER_ID);
补充说明#define GMA_HANDLER_ID 0x400 /阿里天猫协议接口ID/ #define MMA_HANDLER_ID 0x500 /小米MMA协议接口ID/ #define DMA_HANDLER_ID 0x600 /百度DMA协议接口ID/
#define TME_HANDLER_ID 0x700 /腾讯酷狗TME协议接口ID/
[7.4.2. app_protocol_exit](7.4.2. app_protocol_exit)
函数原型void app_protocol_inti(int handler_id);
功能描述统一的释放AI协议接口,主要是删除线程操作,在删除完之后再释放对应APP 协议栈的资源
参数说明*\param[in] handler_id //头文件指定协议的一个ID值
输出
例子
补充说明

8. USER APP流程和一些接口

8.1.公共流程
8.1.1.协议栈流程

协议栈的流程如下图所示(以GMA为例):
版权所有,侵权必究 24
image 蓝牙协议栈初始化完毕之后,调用app_protocol_init初始化第三方协议栈,在app_protocol_init里面,需要设置好参数配置的接口、协议操作函数的接口、 以及协议回调函数的接口。有三元组认证或者需要配置MAC地址的,也需要调用app->app_ctrl->protocol_init()前完成。初始化完毕后,会创建一个app_proto 的任务来运行协议栈,协议的具体命令在库里面执行。
协议栈运行过程中,可以使用app->app_ctrl类的接口来操控协议栈的状态,比如开关BLE广播、断开协议等。使用app->callback类的接口来获取协议栈的状态,或者回调协议栈所需要的信息。 比如通过 app_protocol_message_handler获取协议栈连接状态、获取或设置设备音量;通过app_protocol_get_battery 提供协议栈需要的电量信息。
调用app_protocol_exit可以退出第三方协议栈。
版权所有,侵权必究 25

8.1.2.唤醒语音助手流程

image 语音唤醒有两种方式:按键启动和APP启动。
按键启动时,调用app_protocol_start_speech_by_key 函数,会判断是否满足启动条件,满足条件后,会先退出sniff状态,然后播放提示音,如果TWS有连接的话,会同步播放。提示音播放完毕之后,通过 app_protocol_start_voice_recognition 函数上报启动的命令给手机,同时开启mic和opus/speex编码器,并将编码后的数据通过app_protocol_send_voice_data 函数上报手机。 收到手机停止命令或者8s超时后停止 mic和编码。
APP启动时,调用app_protocol_start_speech_by_app调用,如果有提示音,则播放提示音,无提示音或者播放完毕之后,启动mic和编码器。 收到手机停止命令或者8s超时后停止。
APP_PROTOCOL_SPEECH_EN为1时使能第三方语音助手功能,需要使能BT_MIC_EN, 以及 TCFG_ENC_OPUS_ENABLE/TCFG_ENC_SPEEX_ENABLE。 mic启动编码的超时时间由 APP_PROTOCOL_MIC_TIMEOUT决定。
版权所有,侵权必究 26

8.1.3.三元组烧写配置流程

不同协议的三元组认证格式、 内容各不相同,但是应用层的流程是一样的。使用烧写器烧写三元组时,三元组被会烧写在flash 的最后256byte 区域里面,ota升级之类的,不会擦写到该区域。
在协议初始化前,通过app_protocal_get_license_ptr 函数,获取三元组信息的指针。将三元组转化为程序里的格式后,调用app_protocol_set_info_group接口传递给协议栈。
调试时,可以直接将三元组信息转化成程序里的格式后,然后通过app_protocol_set_info_group接口传递给协议栈。
三元组烧写的具体流程,请参考《认证码烧写步骤说明.pdf》。三元组的获取方式查阅各个协议的说明文件和平台。

8.1.4.系统事件处理流程

第三方协议系统事件的统一在 app_protocol_sys_event_handler 函数里处理。 公共的处理流程在 app_protocol_common.c里面执行,非公共部分的处理流程,在各自的app_protocol_xxx.c文件里处理。
公共的系统事件主要是播放提示音、开关BLE广播、启动第三方语音助手等。具体如下:
(1)获取按键事件,启动第三方语音助手。
(2)连接/断开经典蓝牙、连接/断开手机APP、 手机APP启动助手时播放对应的提示音。
(3)通话时关闭BLE广播,通话结束时开启BLE广播。
(4)连接苹果时广播特殊内容。
(5)对耳连接、 断开或主从切换时开关广播。
(6)手机APP启动/停止第三方语音助手处理。

8.2.接口
[8.2.1. app_protocol_set_volume](8.2.1. app_protocol_set_volume)
函数原型int app_protocol_set_volume(u8 vol);
功能描述设置设备的音量级别,

版权所有,侵权必究 27

参数说明*\param[in] vol //目标音量
输出
例子
补充说明
[8.2.2. app_protocal_get_bat_by_type](8.2.2. app_protocal_get_bat_by_type)
函数原型u8 app_protocal_get_bat_by_type(u8 type)
功能描述提供给库调用的获取各种电量信息的接口
参数说明*\param[in] type //要获取的电量类型
输出电量大小或充电标志,范围为0-100。 获取不到时返回0
例子
补充说明
[8.2.3. app_protocal_get_l](8.2.3. app_protocal_get_l)icense_ptr
函数原型const u8 *app_protocal_get_license_ptr(void);
功能描述获取flash里三元组信息的头指针
参数说明
输出三元组信息的头指针
例子
补充说明
[8.2.4. app_protocol_l](8.2.4. app_protocol_l)icense2flash
函数原型int app_protocol_license2flash(const u8 *data, u16 len);
功能描述将三元组数据写到flash 的末尾处

版权所有,侵权必究 28

参数说明\param[in] data //要保存的数据
\param[in] data //要保存的数据长度
输出写入成功返回0,失败会返回-1
例子
补充说明
[8.2.5. app_protocol_tone_register](8.2.5. app_protocol_tone_register)
函数原型void app_protocol_tone_register(const char **tone_table);
功能描述注册或切换第三方协议提示音表
参数说明*\param[in] tone_table //提示音表
输出
例子
补充说明目前加了8个可能用到的提示音:
APP_PROTOCOL_TONE_CONNECTED_ALL_FINISH,//经典蓝牙和协议已连接 APP_PROTOCOL_TONE_PROTOCOL_CONNECTED,//协议已连接 APP_PROTOCOL_TONE_CONNECTED_NEED_OPEN_APP,//经典蓝牙已连接,但协议未连接
APP_PROTOCOL_TONE_DISCONNECTED,//经典蓝牙已断开
APP_PROTOCOL_TONE_DISCONNECTED_ALL,//经典蓝牙和协议未连接 APP_RROTOCOL_TONE_OPEN_APP,//按键启动语音助手时,APP未连接 APP_RROTOCOL_TONE_SPEECH_APP_START,//APP启动语音助手提示音
APP_RROTOCOL_TONE_SPEECH_KEY_START,//按键启动语音助手提示音 APP_RROTOCOL_TONE_MAX,

版权所有,侵权必究 29

8.2.6. mic_rec_pram_init
函数原型int mic_rec_pram_init(u32 enc_type, u8 opus_type, u16(*speech_send)(u8 *buf, u16 len), u16 frame_num, u16 cbuf_size);
功能描述初始化语音编码的参数
参数说明\param[in] enc_type //编码类型,opus或者speex
\param[in] opus_type //opus 的类型,标准或者TME特殊格式
\param[in] speech_send //编码后发送到APP 的接口
\param[in] frame_num //每次发送的解码帧数
*\param[in] cbuf_size //解码的缓存buf
输出初始化结果。成功返回0,失败返回非0
例子
补充说明
[8.2.7. app_protocol_handle_register](8.2.7. app_protocol_handle_register)
函数原型void app_protocol_handle_register(struct app_protocol_private_handle_t *hd);
功能描述第三方协议非公共事件、消息处理函数注册接口
参数说明*\param[in] hd //特殊处理函数句柄
输出
例子
补充说明
[8.2.8. app_protocol_tws_sync_private_deal](8.2.8. app_protocol_tws_sync_private_deal)
函数原型void app_protocol_tws_sync_private_deal(int cmd, int value);
功能描述非公共对耳同步事件的处理函数
参数说明*\param[in] cmd //对耳同步执行的命令

版权所有,侵权必究 30

*\param[in] value //对耳同步执行的命令参数
输出
例子
补充说明
[8.2.9. app_protocol_tws_rx_data_private_deal](8.2.9. app_protocol_tws_rx_data_private_deal)
函数原型void app_protocol_tws_rx_data_private_deal(u16 opcode, u8 *data, u16 len);
功能描述非公共的对耳数据处理函数
参数说明\param[in] opcode //收到来自对耳的命令
\param[in] data //收到来自对耳的数据
*\param[in] len //数据长度
输出
例子
补充说明
[8.2.10. app_protocol_sys_event_private_deal](8.2.10. app_protocol_sys_event_private_deal)
函数原型int app_protocol_sys_event_private_deal(struct sys_event *event);
功能描述非公共的系统事件处理函数
参数说明*\param[in] event //系统事件
输出
例子
补充说明
[8.2.11. app_protocol_post_bt_event](8.2.11. app_protocol_post_bt_event)
函数原型void app_protocol_post_bt_event(u8 event, void *priv);

版权所有,侵权必究 31

功能描述发送第三方协议蓝牙事件
参数说明\param[in] event //蓝牙事件
\param[in] event //蓝牙事件的参数
输出
例子
补充说明
[8.2.12. app_protocol_post_app_core_callback](8.2.12. app_protocol_post_app_core_callback)
函数原型int app_protocol_post_app_core_callback(int callback, void *priv);
功能描述发送回调函数到app_core任务中处理
参数说明\param[in] callback //回调函数
\param[in] priv //回调函数的参数
输出返回0表示发送成功,非0表示失败
例子
补充说明
[8.2.13. app_protocol_tws_send_to_sibling](8.2.13. app_protocol_tws_send_to_sibling)
函数原型int app_protocol_tws_send_to_sibling(u16 opcode, u8 *data, u16 len);
功能描述发送命令和数据给对耳
参数说明\param[in] opcode //收到来自对耳的命令
\param[in] data //收到来自对耳的数据
*\param[in] len //数据长度
输出返回0表示发送成功,非0表示失败
例子
补充说明

版权所有,侵权必究 32

[8.2.14. app_protocol_tws_sync_send](8.2.14. app_protocol_tws_sync_send)
函数原型int app_protocol_tws_sync_send(int cmd, int value);
功能描述发送对耳同步执行的命令
参数说明\param[in] cmd //对耳同步执行的命令
\param[in] value //对耳同步执行的命令参数
输出返回0表示发送成功,非0表示失败
例子
补充说明

版权所有,侵权必究 33