HOGPD鼠标不稳定数据率报告

13个新帖子/ 0
最后发表
me9atherion
离线
最后看到:3年2个月前
加入:2015-02-24 15:15
HOGPD鼠标不稳定数据率报告

我不能获得稳定的藏报告率为惯性鼠标/键盘应用程序。
乌利希期刊指南。:从3 d主题消息主题的问题开始。
http://support.dialog-semiconductor.com/comment/5942评论- 5942
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =

你好。我用DA14580实现键盘+鼠标在单一设备。
实现鼠标通过加速度计、陀螺仪和所有必须完成的处理。设备必须表示为通用键盘+鼠标复合藏设备。我最初的参考点是你的键盘参考项目我已经实现自定义隐藏报告,能够发送键盘和鼠标报告。

但是现在我坚持的问题可用空闲内存将运动融合滤波器。我有检查这对速度和algorythm知道处理器速度足以实时处理过滤。但这只是32 kb的内存可用。我都关掉(多焊接,调试消息等等。),但仍然我所看到大约1 kb适合algorythm。

我发现我可以试着关掉CFG_PRF_SPOTAR。不需要这个功能目前的设计。代码将存储在外部flash和如果需要通过智能片段和UART加载程序将被更新。然后我有足够的内存来实现这个algorythm免费代码。项目代码似乎到处都用这种方式写的,这应该工作,因为在代码中我能看到#如果预编译程序条件语句打开/关闭代码部分致力于SPOTA也关掉BLE_SPOTA_RECEIVER。用宏定义BLE_SPOTA_RECEIVER = = 0代码不应该执行SPOTA数据库建设和不应该打开SPOTA概要文件。实际上它。代码构建但不工作。它重新启动(或去主引导装载程序,并试图从外部flash加载代码(空的))。
代码是困在rwip_schedule ();从这一点它会失控,我可以看到从调试器。

链接器声称为错过“spotar_patch_area”一节(链接器警告)。我试图填补这一节,因为它完成从代码(放一些零初始化变量本节)但也不起作用。

所以我怎么能正确禁用这个特性和一些内存有空吗?请帮助。

设备:
me9atherion
离线
最后看到:3年2个月前
加入:2015-02-24 15:15
我将试着回答自己。

我将试着回答自己。
我想我发现了据我理解的解决方案。有一个替代宣言db堆大小(低价值大约400字节)在参考项目情况下当CFG_PRF_SPOTAR评论所以SPOTAR特性是禁用的。当我把它改为默认状态是与SPOTAR featere——应用程序工作。

me9atherion
离线
最后看到:3年2个月前
加入:2015-02-24 15:15
但是我也有另一个

但是我也有另一个关于老鼠藏报告频率的问题。就像我说的我和参考点是键盘项目修改的代码,因为这个项目需要一些功能齐全的键盘。我添加了另一个实例的老鼠藏报告渠道,可以把鼠标报告通过请求消息HOGPD_REPORT_UPD_REQ TASK_HOGPD。问题是,鼠标数据包传输速率很低(我想我做错了什么)和发射频率不是常数。
我的架构做鼠标报告等如下:
1)如果应用程序决定左或右鼠标按钮按下事件与加速度计配置timer0解析频率(我希望100 hz);
2)Timer0处理程序例程获得加速度计的数据,调用鼠标惯性滤波更新。然后它接收新的鼠标增量。这些增量安全(饱和度)添加到XY三角洲缓冲为了积累新的增量,直到下一个传输;
3)老鼠藏报告发送app_asynch_trm()(钩# 1)键盘报告传输也是从那里由参考设计。老鼠藏报告传播只有鼠标按钮事件或如果有非零X或Y三角洲累积缓冲区。在其他情况下鼠标报告不是发送到内核。

机上调试GPIO销,每次触发生成新的报告。这个GPIO触发调用后放置ke_msg_send(点播)与HOGPD_REPORT_UPD_REQ鼠标报告功能。我可以在示波器上看到,在运动这ke_msg_send()和所需的频率。所以据我理解操作系统的另一边蓝牙连接(主机)应该得到这个报告相同的频率。Howewer,它不是这样的。在100赫兹传输频率不稳定,我也会突然断开连接。我认为这些断开连接是由蓝牙堆栈本身,因为我在断开断点事件回调,而不是断开参考例程的应用程序。70赫兹足以保持联系一直活着没有突然断开,但报告频率稳定度是坏的。

我从测试开发和移植惯性鼠标过滤algorythm板与另一个微控制器(也Cortex-M0)和相同的MEMS芯片。这个板是适合调试鼠标algorythm惯性。数据流的鼠标报告100赫兹频率是美联储通过UART主机。python脚本然后翻译直接流到鼠标运动由操作系统调用。只要我能看到100赫兹是频率足够舒适的鼠标用户反馈。对话框的鼠标参考应用程序还利用100 hz的鼠标报告率。
所以我需要做什么来得到稳定的鼠标流报告吗?

请,我需要一些helpe来解决这个问题。

me9atherion
离线
最后看到:3年2个月前
加入:2015-02-24 15:15
支持。请。我将

支持。请。我会非常高兴的任何信息的情况下这个问题的报告率不稳定的老鼠。

MT_dialog
离线
最后看到:1年3个月前
工作人员
加入:2015-06-08 34
嗨me9atherion,

嗨me9atherion,

确保你不要禁用中断proccessing来自传感器的数据时,没有理由的da断开,也许你proccessing时禁用中断或阅读来自传感器的数据,当祝福发送一个连接的时间间隔不能禁用中断。还要确保你继续发送数据在app_asynch_trm和app_asynch_proc当数据缓冲区,返回true,如果有更多的数据以召回调度器。除了鼠标ref设计是基于一个相当不错的例子。

由于MT_dialog

me9atherion
离线
最后看到:3年2个月前
加入:2015-02-24 15:15
谢谢你的回应。

谢谢你的回应。
我不禁用中断。然而大约1.7 ms (100 hz 10 ms的期望Timer0中断处理程序段)计划花费在Timer0处理程序回调例程。
然而在Timer0初始化例程:
NVIC_SetPriority (SWTIM_IRQn 3);/ *设置优先级为TIM0中断* /最低
所以计时器最低优先级据我理解和更高层次BLE堆栈中断不应受到影响。我可能做错的假设吗?

代码发送鼠标钩子# 1利用检查报告低水平缓冲就像键盘报告:
如果(app_kbd_check_conn_status () & & l2cm_get_nb_buffer_available ()) {
send_mouse_keyreport ()
}

我也把调试针程序切换到低水平操作系统调用prf_server_send_event(…),看看操作系统请求直接发送通知从更高层次要求所有回调后HOGPD概要文件。这些调用的频率是我需要的。

我也试图在linux调试用wireshark蓝牙流。有大的时间差相应wireshark捕获输出。通常有~ 70毫秒2 notifiacations之间的时间差。然后遵循通常1 - 2 notificatins timedeltas低于1,然后再次~ 70 ms的差距。我在PDF附加帧速率图。Grafh显示平均报告频率举办30 hz看起来像真的。

me9atherion
离线
最后看到:3年2个月前
加入:2015-02-24 15:15
好。我收集

好。我将收集数据从mems芯片Timer0中断例程。现在Timer0 ISR执行时间很短——4.5微秒。看起来像现在平均包率作为wireshark捕获所需的相应统计(现在我有80 hz通知率和wireshark统计给我大约每秒80包),但报告率是不稳定的。
有很多短时间增量小于1 ms和通知包之间的差距与各5 - 6 ~ 70毫秒的延迟后包这些软件的修改。通知包应该到达每10毫秒。
操作系统例程在DA14580应用要求发送通知包执行所需的和稳定的频率。可以看出在示波器上。我把调试销给操作系统内核gattc_send_evt_cmd后切换程序。也许有一些同步的例程在堆栈祝福我小姐?

me9atherion
离线
最后看到:3年2个月前
加入:2015-02-24 15:15
出于测试目的,我已经尽力了

出于测试目的,我试图删除所有传感器滤波。我现在只有Timer0生成100 hz中断和改变全球的旗帜。鼠标报告发送例程从钩# 1 (app_async_trm()),它会检查国旗从Timer0中断并发送0鼠标报告之前检查空闲空间祝福缓冲区和连接状态关键报告。
然后我有100 hz调试输出(从低级别关贸总协定通知发送例程)。经过实际分配的内存和通过HOGPD发送鼠标报告概要app_asynch_trm()返回“true”所以rwip_schedule ()。
Wireshark输出显示大约100赫兹包率1秒。但帧速率是不稳定的。还有我获得一个巨大的差距~ 70毫秒之间的数据包与timedeltas非常低(小于1毫秒,实际上600 - 700 ms)。

MT_dialog
离线
最后看到:1年3个月前
工作人员
加入:2015-06-08 34