【已解决】涂鸦BLE配网对接开发

蓝牙 BLE设备、蓝牙 MESH设备、蓝牙 Beacon设备、Sub-G设备等


dongyun
Posts: 17

目前在开发蓝牙配网功能,需要对接涂鸦SDK/App,目前设备端BLE可以和涂鸦App建立连接,接收到App发送过来的数据后需要把数据送给涂鸦SDK,
现在遇到问题,把接收数据的att data部分内容送给涂鸦SDK,提示unpack err。
所以需要咨询一下 涂鸦SDK 输入输出API 所需的数据,是蓝牙包里面的哪部分内容?
测试了提取 att data 部分不行,还需要其它部分吗?比如 l2cap header ? data heaer ?

微信图片_20221018142954.jpg
Last edited by dongyun on 2022年 Oct 18日 14:30, edited 1 time in total.

Tags:
User avatar
逻辑的院子
Posts: 216
Contact:

Re: 涂鸦BLE配网对接开发

传输 “att data 部分” 是可以的,因为Log不能确认位置,麻烦确认下是否是如下图位置的数据:

蓝牙数据包结构.png
User avatar
逻辑的院子
Posts: 216
Contact:

Re: 涂鸦BLE配网对接开发

另外,确认下以下几点信息:
(1)使用的App类型和版本(类型指的是App是直接应用商店下载的公版App还是其他App);
(2)使用的涂鸦SDK版本(链接或者截图均可);
(3)移植的产品类型(“单蓝牙”还是“蓝牙和WiFi双模”);
(4)移植的目标平台芯片型号
(5)目前手上有无对比用的其他芯片平台SDK;
(6)有无其他蓝牙平台开发经验(方便推荐参考平台);

dongyun
Posts: 17

Re: 涂鸦BLE配网对接开发

输入到涂鸦SDK的是 AttValue内容,那涂鸦SDK输出的数据呢,也是AttValue 吗?那 opcode, atthandle 是由ble模块自己填充吗?
试了一下 只输入attvalue部分,也提示 unpack err
输入接口是这样的:
/输入接口/
VOID tuya_app_recv_attdata(char *data, int len)
{
tuya_ble_data_buf_t databuf = {data, len};
if (bt_msg_cb){
bt_msg_cb(0, TY_BT_EVENT_RX_DATA, &databuf);
}
}
//输出接口
STATIC OPERATE_RET tuya_ext_bt_send(BYTE_T *data, UINT8_T len)
{
// data 是哪部分内容?
return OPRT_OK;
}

微信图片_20221018150559.jpg
hearge
Posts: 39

Re: 涂鸦BLE配网对接开发

输入到涂鸦SDK的是 AttValue,涂鸦SDK输出也是AttValue ,opcode, atthandle 需ble平台自己填充。

Last edited by hearge on 2022年 Oct 18日 15:44, edited 1 time in total.
hearge
Posts: 39

Re: 涂鸦BLE配网对接开发

输入到涂鸦SDK的是 AttValue,涂鸦SDK输出也是AttValue ,opcode, atthandle 需ble平台自己填充。

dongyun
Posts: 17

Re: 涂鸦BLE配网对接开发

尝试给 涂鸦SDK 输入 Attvalue 部分,也提示 unpack err,是不是 接口用错了?
根据申请到的SDK demo来看:
输入给涂鸦SDK是使用:bt_msg_cb(0, TY_BT_EVENT_RX_DATA, &databuf);
涂鸦SDK输出接口是 :tuya_ext_bt_send
另外在 涂鸦SDK里面 也没有看到 TAL_BLE_EVT_WRITE_REQ 的使用代码。

微信截图_20221018153924.png
hearge
Posts: 39

Re: 涂鸦BLE配网对接开发

尝试给 涂鸦SDK 输入 Attvalue 部分,也提示 unpack err,是不是 接口用错了?
1.需确认下上报的服务handle是否是对应的涂鸦ble服务。
2.确认下上报的MTU使用是多少,可以按20字节尝试下。

根据申请到的SDK demo来看:
输入给涂鸦SDK是使用:bt_msg_cb(0, TY_BT_EVENT_RX_DATA, &databuf) ?

--对的,确保回调里typedef VOID (*TY_BT_MSG_CB)(INT_T id, ty_bt_cb_event_t e, tuya_ble_data_buf_t *buf); id 使用正确的id,针对所有事件保持一致。

涂鸦SDK输出接口是 :tuya_ext_bt_send
另外在 涂鸦SDK里面 也没有看到 TAL_BLE_EVT_WRITE_REQ 的使用代码?

-- 使用TY_BT_EVENT_RX_DATA事件

dongyun
Posts: 17

Re: 涂鸦BLE配网对接开发

"输入到涂鸦SDK的是 AttValue,涂鸦SDK输出也是AttValue ,opcode, atthandle 需ble平台自己填充。"


这里理解起来有点问题,我们通过sniffer抓取了 涂鸦蓝牙配网的 完整过程。
看到在配网过程 有多种 opcode 操作,比如 read_by_group, read_by_type, write_req 等等,
如果说送给 涂鸦SDK时,去掉 opcode 和 att handle, 那涂鸦SDK内部如何区分 不同的req呢,如何响应这些 req 呢

hearge
Posts: 39

Re: 涂鸦BLE配网对接开发


为了降低蓝牙开发难度,
其余的数据在各平台(即开发环境)底层封装了,包括服务发现等流程。
sdk使用的tuya的服务,要包含一个write和一个notify的特性的数据通道,均在各平台也即开发环境实现。

所以,对于sdk来说,只有两个数据通道:
1.master write到设备,即设备的接收。也即TY_BT_EVENT_RX_DATA事件的数据。要和tuya服务里write属性的uuid对应,handle由开发环境识别后上报,并非所有handle的att数据都要上报。
2.设备notify,发送给master的数据,平台(开发环境)识别后,handle要和涂鸦服务里notify属性的uuid数据通道对应。

另外:这个函数tuya_ext_bt_send如果是发送自定义的数据,需要在开发平台(即开发环境)底层处理,如果是对接sdk的发送接口,参考上述第二点。

Post Reply