【问题标题】:ANCS client: What is the basic procedure to be able to receive notifications?ANCS 客户端:接收通知的基本程序是什么?
【发布时间】:2016-08-15 00:06:25
【问题描述】:

我正在尝试使用 BlueZ 堆栈(最新版本,5.39)在 Linux 上的 C 中实现 ANCS 客户端。到目前为止,我可以使用Apple提供的服务请求UUID设置BLE广告数据。

我的设备确实显示在 iPhone (iOS 9) 设置中。我也可以连接到设备,但连接非常不稳定,这意味着有时一段时间后,当我关闭 iPhone 上的蓝牙设置子菜单时,连接就会终止。它也没有绑定,断开连接后,设备没有显示在 iPhone 上的“我的设备”下。

我查看了hcidump,显然只是读取了一堆ATT数据,然后停止:

Pastebin link, because it didn't format it correctly on here

连接终止后输出pastebin的下部。

现在,我的问题是,下一步如何创建一个接收来自 iOS 设备的通知的 ANCS 客户端?我已经阅读了无数关于 BLE 和 ANCS 的文章和示例代码,但我仍然一无所知。

我是否必须在我的 C 代码中打开一个 L2CAP 套接字才能接受来自 iPhone 的连接?我已经试过了,没有用。我还尝试使用 gatttool 连接到 iPhone,虽然它已连接,但它说“资源或设备忙”。

我会非常感谢一些正确方向的指示,关于下一步该做什么。

【问题讨论】:

    标签: ios bluetooth bluez gatt ancs


    【解决方案1】:

    好的,经过大量研究,我终于可以用自己的问题来回答了:

    在我问这个问题之前我已经完成了什么:

    1. 设置广告数据以发送 ANCS 的主要服务 UUID。

    之后需要做什么:

    1. 停止 bluetooth-daemon(您也可以在设置广告数据之前停止它,但据我所知,它必须在某个时间点运行才能启动某些内核模块。)
    2. 使用 CID(ATT 的通道标识符 4)创建 L2CAP 套接字。安全级别必须为 MEDIUM,这样内核会自动与 iPhone 配对。
    3. 绑定/侦听/接受以等待来自 iOS 设备的连接
    4. 按照蓝牙规范中的定义写入/读取 ATT 消息

    一定要查看 BlueZ 源代码中的 tools/btgatt-client.c 和 tools/bt-gatt-server.c。它准确显示了如何打开套接字(使用 sockopt 等)

    希望这可以帮助任何像我一样努力解决这个问题的人。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-17
    • 1970-01-01
    • 2015-02-04
    • 1970-01-01
    • 2015-08-20
    • 1970-01-01
    相关资源
    最近更新 更多