ANCS客户端:能够接收通知的基本过程是什么?

时间:2016-04-21 16:28:07

标签: ios bluetooth bluez gatt ancs

我正在尝试使用BlueZ堆栈在Linux上的C中实现ANCS客户端(最新版本,5.39)。到目前为止,我可以使用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,虽然它已连接,但它说“资源或设备忙”。

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

1 个答案:

答案 0 :(得分:3)

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

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

  1. 设置广告数据以发送ANCS的主要服务UUID。
  2. 之后有必要:

    1. 停止蓝牙守护进程(你也可以在设置广告数据之前停止它,但据我所知,它必须在某个时候运行才能启动一些内核模块。)
    2. 使用CID创建L2CAP套接字(ATT的通道标识符4)。安全级别必须是MEDIUM,内核将自动与iPhone配对。
    3. 绑定/收听/接受以等待来自iOS设备的连接
    4. 写入/读取蓝牙规范中定义的ATT消息
    5. 一定要看工具/ btgatt-client.c& BlueZ源代码中的tools / bt-gatt-server.c。它显示了如何打开套接字(使用sockopt等)

      希望这有助于任何正在努力解决这个问题的人。