linux cpu占用率如何看
616
2022-11-09
如何利用安卓APP来调试蓝牙
了解SDK 和协议栈(Stack)
在开发者选项中,可以使能蓝牙HCI日志,这是一个非常有用的工具--“HCI信息收集日志(HCI snoop log)”(4.4以上版本)。
它在协议栈中就像个钩子,能够捕捉到所有的HCI数据包并将其写入到一个文件当中。大部分安卓设备的日志文件位于/sdcard/btsnoop_hci.log。可以通过这篇文章详细了解如何设置工具并检索信息。
了解连接间隔(Connection Interval)
蓝牙连接间隔是APP的一组重要参数。为了平衡功耗和性能,你需要针对特定用例进行参数微调。
在 GAP (通用访问配置文件)层,外围设备发出广播,中央设备来接收。然后中央设备发起连接,外围设备接受连接请求。当中央设备发起蓝牙连接时,会发出包含一系列连接参数的连接请求(connect_req)。
连接间隔(Connection interval)
从设备延迟(Slavelatency)
管理超时(Managementtimeout)
在初始请求中,连接间隔应设为initial_conn-interval,从设备延迟为零。安卓设备上的initial_conn_interval(连接建立时的连接间歇初始值)设置为7.5ms,这是规格所允许的最小值。在 7.5ms的间隔下,我们能够获取最高的吞吐量,但这也非常耗电(越小的间隔意味着越频繁的连接事件,进而传输更多数据,相应地就会造成更高功耗)。当连接建立、中央设备端的发起连接活动完成后,中央设备或外围设备就能发出连接参数更新的请求。这一请求是希望对方设备采纳的参数建议。对方接受建议之后,中央设备就会开始进行连接参数更新过程。安卓的这一过程是在BluetoothGatt类中实施的。需调用requestConnectionPriority方法更新连接参数。目前在API Level23中,更新方法支持三组参数:
CONNECTION_PRIORITY_BALANCED
CONNECTION_PRIORITY_HIGH
CONNECTION_PRIORITY_LOW
进程如下:
目标设备也可能会向安卓发送连接参数更新请求,希望按照自己的偏好改变间隔。但间隔设定的最终决定权还是在主设备(在链路层发起连接的设备)。
了解数据包(Packet)和流程(Procedure)
蓝牙开发可用的另一个强有力的工具就是协议分析器(protocol analyzer),也就是嗅探器(the sniffer)。本文中我用的是ComProbe BPA低功耗蓝牙协议分析器,通过它我可以轻松地了解无线通讯情况或判断问题所在。
当我不确定安卓协议栈和API传递的数据是否正确时,就会启动分析器,检查不同层的细节。下面的截图就显示了 “Read by type”运行的细节。我还可以转到 “Handle value pair”,针对其逐步进行调试。
调试隐藏活动(Invisible Activity)或后台服务(Background Service)
自从安卓开始支持低功耗蓝牙以来,每一次版本更新都包括了蓝牙协议栈和API的改进。再加上易于开发者采用的API和工具,安卓正逐渐成为物联网生态系统中最强有力的平台。期待不久的将来能够看到更多创新的安卓应用。
原文标题:如何利用安卓APP调试蓝牙
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~