iOS可以同时在同一个应用程序上执行中央和外围设备吗?

Dou*_*ull 14 bluetooth ios core-bluetooth

iOS(iPhone或iPad)应用程序可以同时拥有Core Bluetooth(BTLE)中央管理器和外围管理器对象吗?

它们可以异步操作,还是主应用程序线程需要使它们共享(来回切换).

共享概念算法将是:禁用外围设备管理器,启用中央管理器并执行中央功能,然后禁用中央管理器,启用外围设备mgr,并执行外围功能(即发送自动数据,等待并响应远程特性命令),重复......

背景技术细节:我们有一个本地系统,有多个iOS设备和多个非iOS设备,需要通过BTLE进行互通.非iOS设备均使用Broadcom BCM20732蓝牙LE芯片.但硬件还没有准备好,所以我使用iOS设备来模拟非iOS,这需要同步中央和外围功能,即.1.充当集中询问系统中多个其他非iOS设备的核心.2.充当外围设备以响应来自iOS用户界面设备的数据请求.

Dou*_*ull 13

我搞定了.我刚刚开始使用Apple"BTLE中心外设转移",然后首先删除它所拥有的-35 db错误(搜索"-35"然后删除if(){return}),然后我将两个中心结合起来.并将peripheral.m转换为单个UIViewController .m文件,添加一个UISwitch来选择两个服务UUID中的一个,并修改外围发送器以自动递增文本字段(在初始化为ASCII'0'之后).

我连续两个iPad mini,每个都将递增的数字发送到另一侧.它获得了超过900次转移然后挂起.但我已经看到Apple"BTLE cp transfer"在几分钟后总是挂起,要求iPad继续重启.我结束了应用程序的iPad和循环电源,重新启动应用程序,他们达到1600增量,然后挂起.

为了解决问题,我将根据Abo的建议添加资源控制,以防止中央和外围管理人员同时连接.

  • 2013年8月更新:多个iOS设备之间的通信,每个设备都使用中央和外围设备无错误.已经完成了长寿测试,并且在运行数小时后它不会中断.提示:在从中央切换到外围之前我会做一个短暂的延迟,反之亦然,否则可能会出现问题. (4认同)
  • 我错了:NSLog()和printf()在回调事件中都没问题. (4认同)
  • 提示2:NSLOG()和printf()在您的代码中蓝牙回调事件将使您的船舶下沉.创建一个存储这些消息的假脱机程序函数,然后将主线程打印出来. (2认同)

Abo*_*oud 5

是的,他们可以,但如果您的手机现在处于外围模式并且已连接,则必须确保在切换到中央模式并尝试与其他设备连接之前断开连接,反之亦然.