Ios ANCS客户机:接收通知的基本程序是什么?

Ios ANCS客户机:接收通知的基本程序是什么?,ios,bluetooth,bluez,gatt,ancs,Ios,Bluetooth,Bluez,Gatt,Ancs,我正在尝试在Linux上用C实现一个带有BlueZ堆栈(最新版本,5.39)的ANCS客户机。到目前为止,我可以使用Apple提供的服务解决方案UUID设置BLE广告数据 我的设备确实显示在iPhone(iOS 9)设置中。我也可以连接到该设备,但连接非常不稳定,这意味着,有时在一段时间后,当我关闭iPhone上的bluetooth settings(蓝牙设置)子菜单时,连接总是会终止。它也没有连接,在断开连接后,iPhone上的设备就不会显示在“我的设备”下 我看了一下hcidump,很明显它

我正在尝试在Linux上用C实现一个带有BlueZ堆栈(最新版本,5.39)的ANCS客户机。到目前为止,我可以使用Apple提供的服务解决方案UUID设置BLE广告数据

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

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

连接终止后,将输出粘贴箱的下部

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

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


我非常感谢你给我提供了一些正确方向的建议,关于下一步该做什么。

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

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

  • 设置广告数据以发送ANCS的主服务UUID
  • 之后需要做什么:

  • 停止bluetooth守护进程(您也可以在设置广告数据之前停止它,但据我所知,它必须在某个点运行才能启动某些内核模块。)
  • 使用CID(ATT的通道标识符4)创建L2CAP套接字。安全级别必须为中等,这样内核将自动与iPhone配对
  • 绑定/侦听/接受以等待来自iOS设备的连接
  • 写入/读取蓝牙规范中定义的ATT消息
  • 我们应该在BlueZ源代码中查看tools/btgatt-client.c&tools/bt-gatt-server.c。它准确地显示了如何打开套接字(使用sockopt等)


    希望这能帮助那些像我一样努力解决这个问题的人。

    关于如何订阅通知的一些额外信息:我唯一能找到这些信息的地方,ANCS上的苹果文档就是一个笑话。