android ble扫描过滤,Android 4.3:BLE:过滤startLeScan()的行为

我正在研究一个蓝牙传感器设备,我需要形成一对一的数据广播。根据规范,外设可能只有一个主器件,并且由于我正在设计的芯片和堆栈的限制,主器件只能有三个从器件。从我的理解来看,Android无法成为BLE从属,所以让我的设备成为主人不是一个选择。

BT4规格和制造商文档都谈论另一种操作模式,简称广播模式。在广播模式下,从不进行连接,应用数据作为广告分组的一部分被发送。这将完全符合我的需求,因为许多Android / iOS手机可以同时扫描每个数据包。广告分组以突发方式多次发送,所以我怀疑数据的接收几乎是可靠的。如果一个数据包在这里和那里丢失,可以容忍。

在哪里有趣的是,我想要这些数据包携带现场传感器数据,以10-20Hz的速度更新。从我在网络上发现的例子中,BLE在这种模式下主要用于“iBeacon”类型的实现,它们正在广播静态数据。我没有找到关于如何在Android堆栈中过滤广告数据包的任何信息。它可能是每个蓝牙硬件地址返回一个结果,或者它可以是地址和数据的独特组合。第二个选项将适用于此应用程序。如果启动和停止扫描重置过滤器,我也可以做一些工作。

Android文档不提供扫描方法中的设备过滤如何工作。我已经能够找到一个网站上的一个帖子,试图解决这个同样的问题,这有一个未解决的回应:BLE: Multiple discovery of the same peripheral during scan.在iOS中,我的同事告诉我,有一个参数可以传递给扫描功能,使这个可能。

我试图从Android源代码中的startLeScan()调用中跟踪代码,但代码是相当复杂的,使用抽象使得很难识别包含它的对象的实现。我得到的最远的是从BluetoothManagerService类方法getBluetoothGatt()返回的IBluetoothGatt对象。该对象接收到开始扫描的请求。目前正在github上进行修改,正在实施。该对象正在从一个消息的结果中转移,所以我怀疑可能是电话/驱动程序的结果。能够进一步追踪它超出我的专长。

我想解决的另一个问题是扫描可以快速打开和关闭。扫描是功率密集的操作,但是数据的广播将在相当精确的实时定时器周期性地发生。因此,如果可以打开和关闭扫描,使广播和扫描同步,扫描仪将在90%的时间内关闭扫描,这将是一个很好的优化。这可能需要通过实验测试。

我还在进行可行性研究,看看我们的Android配件是否可行。我现在的手机还没有运行4.3版本,所以我没有办法通过实验测试/骇客。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值