【问题标题】:Translate Gatttool command/request to Bluez c将 Gatttool 命令/请求翻译成 Bluez c
【发布时间】:2016-07-23 03:30:42
【问题描述】:

我很难弄清楚如何将我的蓝牙命令(来自 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);

【问题讨论】:

    标签: c bluetooth bluez gatt


    【解决方案1】:

    你为什么不使用标准的 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句柄和数据。

    【讨论】:

    • 可以,如果你想使用“hci_send_req”命令,该命令用于控制或设置目的,不用于HCI数据包的写入。例如当您阅读本地名称时,您正在使用 rq.ogf = OGF_HOST_CTL; rq.ocf = OCF_READ_LOCAL_NAME; rq.rparam = &rp;//响应格式 rq.rlen = READ_LOCAL_NAME_RP_SIZE;
    猜你喜欢
    • 2014-07-26
    • 1970-01-01
    • 2017-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-04
    • 1970-01-01
    相关资源
    最近更新 更多