将Gatttool命令/请求转换为Bluez c

时间:2016-07-23 03:30:42

标签: c bluetooth bluez gatt

我很难弄清楚如何将我的蓝牙命令(从Gatttool)转换为Bluez c代码。

你能帮我翻译下面的Gatttool命令(蓝牙请求)到c?

  

[CON] [MY_MAC_ADDRESS] [LE]> char-write-req 0x00c0 0100

所以我的句柄是0x00c0,我的数据是0100(打开)。我不知道需要填写哪些hci_request结构属性(句柄除外)。

... I've successfully connected to the device (LE connection)
struct hci_request rq = {0};
rq.ogf = ??; // should the handle go here?
rq.ocf = ??; // should the data go here
rq.cparam = ??;
rq.clen = ??;
rq.rparam = ??;
rq.rlen = ??;
rq.event = ??; // what would the event be?

hci_send_req(dd, &rq, 1000);

1 个答案:

答案 0 :(得分:0)

为什么不使用标准的bluez gatt命令,即

void WriteValue(array{byte} value, dict options) 

但是自己结合HCI命令?

但是,如果您真的想要组合HCI命令(这意味着您跳过GATT / ATT / L2CAP级别),则格式为“HCI ACL数据包”,在BlueZ的hci.h中定义为“HCI_ACLDATA_PKT”: 句柄:ACL的连接句柄。 Packet_Boundary_Flag:00/01/10或11取决于您的L2cap包类型。 Broadcast_Flag:基本上是0x00,即没有广播  Data_Total_Length:包的长度。 然后包需要包括L2CAP PDU长度和通道ID(应该是0x0004作为ATT协议),然后附加ATT pdu类型,操作码(写命令)att句柄和数据。