KDocs 研发资料库
  • 屏融合应用方案入口汇总
  • JL701N穿戴客述问题FAQ
  • JL701N穿戴类补丁list
  • 手表软件调试
  • JL701手表硬件设计注意事项 总结
  • 手表烧录_升级工具说明
  • 手表量产相关
  • 生产烧录KEY及代码和升级代码
  • AC695N系列手表SDK开发指南
  • JL7012A手表-SDK入门指南V1.0
  • 穿戴手表JL701N-入门到进阶开发指导
  • 彩屏充电仓JL701N LVGL入门到进阶指导文档
  • AC695N手表软硬件问题整理
  • JL701N手表软硬件问题整理
  • 701n手表SDK共性问题汇总
  • UI效果参考demo文档
  • 屏幕触摸驱动相关参考
  • 穿戴类支付宝支付流程
  • AC701N_PMU_介绍
  • 经典蓝牙相关接口说明
  • music应用详细设计说明书
  • music_player接口设计说明文档
  • PO声测试以及处理方法
  • DAC性能测试指南
  • 杰理串口升级规范
  • AC696N串口升级说明
  • AC695N系列手表UI开发指南
  • AC695N添加升级UI说明文档.
  • UI布局工具使用说明
  • UI接口设计说明书
  • UI工具快速使用说明
  • 701N_UI编辑工具用户手册
  • UI工程源文件升级工具使用说明
  • 701N屏幕驱动配置说明
  • JL701N 2D图形硬件加速接口使用说明
  • JL701_watch常用例子参考
  • JL_WATCH_SDK UI相关工具使用文档
  • 智能手表音频 设计调试手册 V1.2
  • AC695X_AC696X_AD697X 常见通话问题处理参考资料
  • 701手表 PCBA产测工具使用说明书 V1.0
  • 杰理定频问题排查2021.1.26
  • BQB5.4 20231007
  • 各类概率性死机调试解决指南
  • 不开机问题处理汇总(仅供参考)
  • 蓝牙搜索不到问题处理汇总(仅供参考)
  • 样机发烫(仅供参考)
  • 蓝牙音乐卡顿问题处理汇总(仅供参考)
  • 充电问题处理汇总(仅供参考)
  • 触摸问题处理汇总(仅供参考)
  • 功耗调试指导
  • JL701N穿戴客述问题FAQ
  • 701N 开发板新屏幕驱动修改
  • AC701 nandflash A8图片显示问题
  • 支付宝乘车码接入资料
  • 多国语言及字库使用指南
  • 查看C程序Flash 和RAM 资源占用说明文档
  • 701N_SDK3.0.1_OPUS_OGG 编解码
  • 蓝牙在线调eq说明
  • BR EDR BLE 蓝牙性能测试配置方法_
  • BLE-HID
  • BLE-HID 调试文档
  • 【问题】701v301外置flash播放wts提示音
  • 本地录音开启及调试
  • 死机分析
  • 表盘传输APP层的压缩算法
  • 功能模版:JL701_V301_UI资源使用FAT文件系统demo
  • JL7013+4G CAT1 参考设计原理图
  • 吾爱4G模组+JL701接口说明
  • (电脑一拖多)手表升级dongle工具使用补充说明
  • 蓝牙接口使用说明
  • ble 开发流程
  • 彩屏仓功耗优化
  • 彩屏仓补丁list
  • 更新字库步骤
  • 支付宝硬件接入资料

ble 开发流程

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

BLE开发流程

本文档主要以让客户可以快速开发为目的,所以一些ble相关的专业名词含义只做简答介绍,以应用为主,详细的含义可以百度即可。客户可在文档下留言,会动态对文档进行改动。  
  1. profile定义与开发  HYPERLINK "https://kdocs.cn/l/cvrrOMGYsvQ6" 【金山文档】 profile文件生成工具

image

图1.1
profile可用该工具生成,具体使用可参考文件下的工具说明。如图1.1。
image

图1.2
image

图1.3
运行工具后会生成一个gatt_profile_cfg.h文件,打开文件,复制对应的profile加入到le_smartbox_module.h中,如图1.2所示。并把生成的handle加入到le_smartbox_module.h中。le_smartbox_module.c和le_smartbox_module.h是与app通讯默认的文件,如果是其他模式,需要加入到对应模式下的头文件下的profile数组里。

  1. ble初始化 void ble_profile_init (void)
    image

图2.1
如图2.1,该函数主要是配置了加密参数,注册各类回调函数的功能,用户一般无需修改。修改的参数主要是加密参数,详情请参考第7点。

  1. 广播包 image

图3.1
image

图3.2
BLE的广播包主要由2个包组成,adv包和 包,每个包31Byte。sdk中的广播包在le_smartbox_adv.c,如图3.1,主要是适配我们app的rcsp协议,如果用户不用,可自行修改。修改的方式可以直接对字节进行赋值,也可调用make_eir_packet_data函数进行修改,该函数使用方法可参考图3.1中名字类型的添加即可。
如图3.2,是我们用nrf软件看到的ble广播包,我们可以看到前面31B是adv,后面的是rsp,都可以与代码中的一一对应。
4. mac地址 image

图4.1
ble的mac地址在sdk中有两种方式生成,我们看图4.1中的代码,如果开了一键连接,就会调用memcpy直接将edr的mac地址复制给ble,如果没开一键连接,就会调用lib_make_ble_address在edr的mac地址的基础上随机生成ble的mac地址。如果客户想修改成自己的方式,就可以在图中的地方修改tmp_ble_addr数组的值,最后调用le_controller_set_mac函数设置即可。
5. ble蓝牙名 image

图5.1
sdk中默认使用edr的名字做ble的名字,ble名字的修改可在广播包中修改,修改方式如图5.1。
6. 广播间隔 image

图6.1
sdk中支持客户自定义广播类型、间隔、信道,修改方法可参考图6.1.直接修改传入的参数即可。值得注意的是,广播间隔和功耗息息相关,越小功耗越大。
7. 连接参数 image

图7.1
连接参数是ble通讯中很重要的一个参数,它决定着通讯的频率以及数据发送速率。sdk中,待机时会使用第一个数组中的连接参数,但如果app需要传输文件或者ota时就要通过图7.1中的函数,切换成第二个数组中的连接参数了,需要提高通讯频率,更快传输。当然,不同手机支持的连接参数不一定相同,固件端请求的连接参数,手机端也不一定支持,一般由手机端来决定连接参数的值。
如果客户不想用sdk中默认的连接参数,想更新自己的连接参数,可参考图7.2的改法。
image

图7.2
修改成功后,会有cbk_packet_handler函数中,有HCI_SUBEVENT_LE_CONNECTION_UPDATE_COMPLETE事件返回,可以在此处看到连接参数是否更新成功,如图7.3所示。
image

图7.3
8. smp蓝牙加密配对 配对流程这里就只做简单介绍,详情可参考 HYPERLINK "https://blog.csdn.net/feelinghappy/article/details/110286696" https://blog.csdn.net/feelinghappy/article/details/110286696
void ble_sm_setup_init( io_capability_t io_type, u8 auth_req, uint8_t min_key_size, u8 security_en)
该函数的功能为配置ble的加密配对参数。
第一个参数io_type,含义是io能力,指的是设备的输入输出能力

image

第二个参数 auth_req,含义是鉴权等级
image

第三个参数 min_key_size,为最小加密字节的数
第四个参数 security_en,为是否由底层发起配对请求,传0不发起,传1发起。

简而言之,该函数的功能其实就是配置了手表端在建立ble连接时交换的配对信息。在我们sdk中,ble默认是只连接不配对,即ble连接时,不会弹出配对窗口。ios会有配对窗口弹出是因为会自动搜索ancs服务并连接,会在底层自动发起配对。
下面简单介绍几种可能会用到的配对情况的改法:

  1. 不配对(即ble连接时不弹配对窗口) image

    该宏配置为0,或者profile中在characteristic中不要添加AUTHENTICATION_REQUIRED属性,就不会有配对窗口弹出了。ios还需要把ancs功能关掉。
    image

  2. 配对 如果不把ancs使能关闭,ios会自动配对,安卓则需要在将SMART_TCFG_BLE_SECURITY_EN置1即可。

  3. ble数据读写

image

图9.1
这里指的数据读写,是指client端(主机端)对server端(从机端)的操作,即图9.1中定义的具有READ、WRITE、WRITE_WITHOUT_RESPONSE属性的characterristic。可以将工具生成的handle(即图9.1中下部分的value_handle)放在att_read_callback或者att_wirte_callback函数中,具有read属性的就放在att_read_callback中,具有write属性就放在att_write_callback函数中,就可以用ble测试软件进行测试了。
image

图9.2
下面是测试分析:

image

图9.3
image

图9.4
可以参考图9.2在对应的handle下添加打印,我们可以看到。
在图9.3中,当我们用ble测试软件,选择具有read属性的character时,点击软件中read again时,我们可以通过将自己想让手机端读取到的值复制给buffer,就可以在手机端读取到相应的16进制的值;
同理在图9.4中,当我们用ble测试软件,选择具有write属性或wirte_without_response属性的character时,点击软件中write new value时,我们可以输入想让小机端能读取到的值,就可以在对应的handle回调中,看到传过来的值,如图9.4中,我在手机上输入了2,在该回调中打印出来的就是2。
10. ble数据发送 image

图10.1
如图10.1,当我们声明一个具有NOTIFY或INDICATE属性的CHARACTERISITIC时,工具会默认生成其对应的端特征配置Client Characteristic Configuration(简称CCC)数据,所以不用额外添加CCC配置。代码中体现为两个handle。一个handle是图中上半部分带有CLIENT_CONFIGURATION的handle,此handle的主要用处就是可以放在att_write_callback回调中,动态设置该特征发送数据的使能。另一个handle则是下半部分,此handle可用于发送数据时的传参,ble发送数据可参考图10.1中下部分的代码,函数的参数含义依次为:对应的handle、数组、数组长度、ATT类型。

下面是测试分析:
image

图10.2
image

图10.3
在图10.2中我们可以看到,当在LightBlue中按下Listen for notifications时,此时会有图10.1中的打印回调,此时代表手机(client端)那边发个消息过来告诉手表(server端),可以发消息给我了,于是手表这边会做个使能特征通道的操作。只有将该CCC配置为1,并且client端开启了监听,client端才能接收到数据。
在图10.3中,我们做了个简单的测试代码,按键发送"111"值给手机,我们可以在LightBlue上看到我们发送过去的值。
11. ble常用事件说明

11.1HCI_SUBEVENT_LE_CONNECTION_COMPLETE

 连接完成事件  

11.2HCI_SUBEVENT_LE_CONNECTION_UPDATE_COMPLETE

连接参数更新完成事件

11.3HCI_EVENT_DISCONNECTION_COMPLETE

断开连接

11.4L2CAP_EVENT_CONNECTION_PARAMETER_UPDATE_RESPONSE

连接参数更新远端的回应

11.5HCI_EVENT_ENCRYPTION_CHANGE

配对加密事件

11.6ATT_EVENT_MTU_EXCHANGE_COMPLETE

MTU交换完成

  1. 常见问题解答

本文档包含以下子页面

Prev
蓝牙接口使用说明
Next
彩屏仓功耗优化