Page 1 of 2

【已解决】【SDK】【蓝牙配网】

Posted: 2023年 Aug 28日 13:28
by lynn_yu

1)开发包全称:tuyaos-ipc_5.6.37_rts3917_rts3917_0.0.5.tar.gz
2)实现方式:参考tkl_wifi 配网方式,在tuya_adapter/src/tkl_bluetooth.c中打开对一些接口的支持,同时在component中添加tkl_bluetooth文件夹(和tkl_wired tkl_wifit同级别), 实现蓝牙配网
3)问题现象:

  1. tuya_adapter 调用tkl_gatt_service tkl_stack_init tkl_adv_stop后不再进行其他应用的调用,最后adv-stop返回值为0
  2. gatt_service_add中,直接采用上层传递的参数,发现service uuid并不是0x1910
    =>请问param 是需要自己设定吗
  3. ble_stack_init的时候打印role 发现数值=3,不在service preherial的范围中

Re: 蓝牙配网

Posted: 2023年 Aug 28日 14:07
by 逻辑的院子
  1. 配网之前是需要启动广播的。

  2. 其他问题基于已知信息无法判断,请参考发帖规范:
    viewtopic.php?t=303
    以及问题本身提供更详细的信息,另请提供参考网页配网方式的具体位置


Re: 【求助】【蓝牙配网】

Posted: 2023年 Aug 28日 15:43
by lynn_yu

已经修正。


Re: 【求助】【蓝牙配网】

Posted: 2023年 Aug 28日 16:36
by pippin-bobo

对接IOT版本3.4.1 配置只使能了蓝牙配网,没有使用蓝牙其他功能和涂鸦蓝牙协议,可以通过tkl自己适配蓝牙协议


Re: 【求助】【蓝牙配网】

Posted: 2023年 Aug 28日 16:41
by lynn_yu

在tuya_adapter里对上层传递下来的数据进行展示,可以看到
start tuya adapter tkl_ble_stack_init role:3
stack init的时候这个数据并不是1-2这个范围里,而且在adv_stop后不再进行任何func的调用。
当前阶段比较疑惑的是,

  1. 这边tkl层接口的调用顺序
  2. gatt_service注册的param 是采取上层传递下来的数据还是说我这边自定义
  3. 什么时候会调用adv_start, 按照页面要求,adv_data也是直接透传的

当前状态:

  1. 协议栈启动完成
  2. gatt service 注册完成(采用的是手动传参)
    registered service 0x1901 with handle=10
    registering characteristic 0x2b11 with def_handle=11 val_handle=12
    registering characteristic 0x2b10 with def_handle=13 val_handle=14
    3.

Re: 【求助】【蓝牙配网】

Posted: 2023年 Aug 28日 16:42
by lynn_yu
pippin-bobo 2023年 Aug 28日 16:36

对接IOT版本3.4.1 配置只使能了蓝牙配网,没有使用蓝牙其他功能和涂鸦蓝牙协议,可以通过tkl自己适配蓝牙协议

这边已经自己适配了蓝牙协议,可以正常启动 协议栈 并注册服务,手动调用adv_start 也是可以正常scan的,


Re: 【求助】【蓝牙配网】

Posted: 2023年 Aug 28日 19:52
by hearge
  1. 这边tkl层接口的调用顺序.
    回调函数注册
    tkl_ble_gap_callback_register
    tkl_ble_gatt_callback_register
    服务注册
    tkl_ble_gatts_service_add
    协议栈初始化
    tkl_ble_stack_init
    广播相关
    tkl_ble_gap_adv_start
    tkl_ble_gap_adv_rsp_data_set
    tkl_ble_gap_adv_stop
    tkl_ble_gap_adv_rsp_data_update

  2. gatt_service注册的param 是采取上层传递下来的数据还是说我这边自定义。

都可以的,上层会传递下来(缺点是麻烦一些,需要按tuya格式规范解析。有点是不需要考虑tuya服务版本),也可以根据版本自己适配好(缺点是需要对应好版本,有点可以针对使用平台规范适配,无需考虑tuya格式规范,简单上手)。
如果自己适配服务,需要注意的是tuya 有两套服务规范,分别是0xFD50和0x2B10。
广播数据和对应uuid的版本需要匹配,否则App识别到但是无法配网。

  1. 什么时候会调用adv_start, 按照页面要求,adv_data也是直接透传的

参考一


Re: 【求助】【蓝牙配网】

Posted: 2023年 Aug 28日 20:11
by hearge

广播和uuid对应可参考如下
0x1910基础服务
Image
Image

0xfd50基础服务
Image
Image


Re: 【求助】【蓝牙配网】

Posted: 2023年 Aug 28日 21:06
by lynn_yu

感谢回复。还有个问题想请较一下。
1.这边 回掉函数注册,服务注册,初始化注册,都是符合这个列表的。唯一有差异的是,广播服务这块,确实没有进入到gap_adv_start 中,更没有set data/rspdata ,而是在stack init 后直接调用了adv _stop,请问这个符合预期吗?
这边判定的方式,是在tuya_adapter 里添加打印,每func()一个函数,都会答应出对应的名称。

2.如果实在是没有办法找到没有启动广播的原因,是否可以参照1910的规范,直接给定广播数据,强制手动开启广播,这样是否可取。

++++++++++
尝试手动设定对应的service 广播数据,可以nrf_connect 扫描显示的raw data和上述给出的一致。
但是无法连接。
采用tuya app 添加蓝牙配网设备,显示无法连接。


Re: 【求助】【蓝牙配网】

Posted: 2023年 Aug 29日 10:43
by lynn_yu

请问什么情况下会触发adv_stop
这边运行下来 stack_init后就调用了adv_stop