- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
Follow-Up question on Electrical Engineering Stackexchange
我想在短时间内重复写入Bluetooth Low Energy 特性的值(作为一个可能的用例,想象一下鼠标)。
我通过从 iPhone 4S 发送包含序列号的数据包来测试程序。每发送一个数据包,序列号加一。
在接收端,一个可编程的开发板,其中包含一个 CSR1000 BLE芯片,用于接收数据包并将接收到的序列号打印到串行连接。
我的问题如下:
一段时间后,数据包开始被丢弃。前 ~100 个数据包在 50 Hz 下工作正常。从那时起,数据包开始被丢弃。
0x00 - 0x46 received
0x47, 0x48 missing
0x49, 0x4a, 0x4b, 0x4c received
0x4d missing
0x4e, 0x4f, 0x50, 0x51 received
0x52 missing
0x53, 0x54, 0x55, 0x56 received
0x57 missing
...
大多数情况下,一包四个数据包可以很好地传输(很少,只有 2 个数据包)。然后,丢失 1-7 个数据包。
当我减小特征值大小时,问题仍然存在。
当我以 100Hz 而不是 50Hz 写入时,画面是一样的 - 只是在大约 35 个数据包后开始出现丢失,并且在成功传输四个数据包之间丢失了 5-7 个数据包。
对于丢失的数据包,无论写入频率如何,最终的传输速率约为 5 kbit/s。这明显低于 ~305 kbit/s,这在技术上应该是通过低功耗蓝牙实现的。
问题也发生在相反的方向,当我从开发板向iPhone 4S发送数据包时。同样,5 kbit/s 是我得到的最大值。 Notification 机制用于此场景。同样,属性层上不会发生任何确认。
当我尝试同时向两个方向发送时,情况开始恶化,以至于我不得不重置开发板和 iPhone 4S。
问题:
这可能是开发板上使用的低功耗蓝牙芯片的问题吗?
如果是,为什么问题也发生在相反的方向,即 iPhone 作为接收器?
市面上有支持高频访问特性的开发板吗?
问题的根源可能是什么?
除了假设之外,还请尝试引用蓝牙规范/演示幻灯片/文章的部分内容。
市场上存在蓝牙低功耗鼠标。鼠标的典型轮询频率为 125 Hz,并且必须至少发送两个 16 字节的值加上每个滴答的额外 HID 开销。因此,应该有针对我的问题的解决方案。
更新
LE 连接完成事件在蓝牙规范版本 4.0 第 2 卷第 E 部分第 7.7.65.1 节中进行了描述。对于不同的连接参数,我收到以下值:
Parameter Value Description
--------------------------------------------------
Conn_Interval 0x0054 Time = 105 ms
Conn_Latency 0x0000 Time = 0 ms
Supervision_Timeout 0x00fc Time = 2520 ms
Master_Clock_Accuracy 0x05 50 ppm
最佳答案
发布连接参数更新 解决了该问题并将吞吐量从 5 kbit/s 提高到 ~33 kbit/s。然而,这仍然低于预期的 ~305 kbit/s。
Conn_Interval = 0x000f = 18.75 ms
Conn_Latency = 0x0000
Supervision_Timeout = 0x00fc
是否有任何方法可以达到完整的 ~305 kbit/s?
Follow-Up question on Electrical Engineering Stackexchange
Could get a reply from Apple by burning a TSI and waiting for a month.
Basically, they tell that the behavior is intended in iOS 5.1. It somehow makes sense, because they don't want that your app's performance depends on whether another app uses Bluetooth or WiFi.
Per the engineers comments - Under iOS 5.1 there should be 6 pairs of notifications during a connection interval, meaning 6*packetSize*1000/interval . This should translate to ~55kbps max (min interval is 20ms, packetsize is 23 bytes). We made the decision to limit the number of pairs per interval and have a minimum interval due to the fact that the iPhone and iPad both have shared antenna between BT classic, BT LE and WiFi.
iOS LE is designed to be a low power transport. For higher throughput BT classic is a better transport method.
Back to me - Based on the engineers comments above, if the desire is to achieve a 200 kbs throughput, Classic bluetooth is the answer. However, if the desire is to work with an application on the iPhone, I can understand that this is no simple change - Classic BT requires MFI licensing.
关于ios - Bluetooth Low Energy - 重复更新特征值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10354613/
我想知道如何考虑需要您做出某些选择才能看到最终结果的搜索系统。我说的是 select 表单,您可以在其中根据您的选择继续操作,然后您会看到结果。 下面描述了我正在谈论的一个随机示例。想象一下 Init
您好,我目前正在编写一些软件来管理我们的库存。我搜索了 2 个表 master_stock(保存每一个股票代码和描述)库存(保存库存代码、地点、数量...) 一切都很好,但这是我遇到的问题。 假设我的
我有 2 个表,我想合并其数据。id 是我的关键字段(增量且不同)。表1和表2字段说明例如:id - 名称 - 值 我想将表2的所有数据插入表1,它们有不同的数据,但在某些行中有相同的id。 所以当我
我正在努力解决汇编中的一个问题,我必须获取十六进制代码的第一个字节 (FF) 并将其复制到整个值中: 0x045893FF input 0xFFFFFFFF output 我所做的
我有 Eclipse Indigo 版本,我可以在其中运行 Java 和 C++ 项目。 但我只想使用另一个 Eclipse 来编写 C++ 项目。所以我将 eclipse(不是工作区)的源文件夹复制
This question already has answers here: What is a NullPointerException, and how do I fix it? (12个答案)
This question already has answers here: Numbering rows within groups in a data frame (8个答案) 5个月前关闭。
我知道用q记录到寄存器中,但我想知道是否可以设置一些东西来快速调用最后一个记录,就像一样。 回顾最后一个简短的编辑命令(有关 的讨论请参阅 here。)。 我知道@@,但它似乎只有在执行@z之后才起作
来自 Eclipse 并且一直习惯于复制行,发现 Xcode 没有这样的功能是很奇怪的。或者是吗? 我知道可以更改系统范围的键绑定(bind),但这不是我想要的。 最佳答案 要删除一行:Ctrl-A
假设我有一个包含元素的列表,例如[1,2,3,4,5,6,7,8]。我想创建长度为 N 的该元素的所有排列。 因此,对于N = 4,它将是[[1,1,1,1],[1,1,1,2],[1,1,2,1],
我有一个带有 JMenu 的 JFrame。当我在某些情况下添加包含图像的 JPanel 时,程序首次启动时菜单会重复。调整大小时重复的菜单消失。任何建议都非常感激。谢谢。代码如下: public c
我正在尝试查找目录中文件的重复项。 我对这个 block 有一个问题,它以文件地址作为参数: public void findFiles(ArrayList list){ HashMap hm
我知道这个问题已经发布并且已经给出了答案,但我的情况不同,因为我在单个方法上填充多个下拉列表,所以如果我点击此链接 After every postback dropdownlist items re
我正在尝试为我的日历应用程序实现重复模式。我希望它的工作方式与 Outlook 在您设置重复约会时的工作方式相同。 public async Task> ApplyReccurrencePeriod
我有一个利用 cookie 来支持准向导的应用程序(即,它是一组相互导航的页面,它们必须以特定顺序出现以进行注册)。 加载 Logon.aspx 页面时 - 默认页面 - 浏览器 cookie 看起来
我有 3 个输入,代码检查它们是否为空,如果为空,则将变量值添加到输入中。 所以我有 3 个具有值的变量: var input1text = "something here"; var input2t
根据数组的长度更改数组的每个元素的最佳方法是什么? 例如: User #1 input = "XYZVC" Expected Output = "BLABL" User #2 input = "XYZ
我在让 Algolia 正常工作时遇到了一些麻烦。我正在使用 NodeJS 并尝试在我的数据库和 Algolia 之间进行一些同步,但由于某种原因似乎随机弹出大量重复项。 如您所见,在某些情况下,会弹
遵循以下规则: expr: '(' expr ')' #exprExpr | expr ( AND expr )+ #exprAnd | expr ( OR expr )+ #exprO
我有一个布局,我想从左边进入并停留几秒钟,然后我希望它从右边离开。为此,我编写了以下代码: 这里我在布局中设置数据: private void loadDoctor(int doctorsInTheL
我是一名优秀的程序员,十分优秀!