第一范文网 - 专业文章范例文档资料分享平台

传感器SensorService详细分析

来源:用户分享 时间:2025/7/15 12:37:40 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

Native层。如果没有读取到事件,则继续下一次循环,知道读取到事件为止。

7.2 SensorEventConnection::sendEvents()

threadLoop中获取到HAL上报的数据后,会对数据进行判断和处理,然后通过SensorEventConnection::sendEvents()方法将数据通过对应的数据通道上报给应用层。

从下面的代码可以看出,数据会在当前所有活跃的Connection中都处理一遍,同时,如果connection中包含数据上报类型为One-Shot的传感器,则上报一次数据后,会将本数据通道自动停用。

虽然从代码看,数据在当前所有活跃的Connection中都处理了一次,但每个Connection只传递自己特定类型传感器的数据才是正解,而不是不管什么类型传感器的数据都传递一遍。

在SensorEventConnection对象中保存了一个Sensor Handle集合,标识了该Connection可以传递哪些类型传感器的数据。由第6节流程可知,在SensorService::enable()函数中,会调用mConnection->addSensor(handle)函数,将本次要enable的Sensor handle保存到Connection对象中。

在sendEvents()函数中,会将数据依次取出,获取其所属传感器的类型,如果有与本Connection中保存的Sensor handle类型相同的数据,则传递之;否则,不传递。由此可以确保每个Connection只传递指定类型Sensor数据。

如果有满足本mConnection数据传输要求的数据,则通过如下方法将数据写入到构造SensorEventConnection对象时创建的BitTube共享内存中。

BitTube中创建了一对匿名套接字,并将发送数据的socket赋值给mSendFd,将接收数据的Socket赋值给mReceiveFd。在JNI层,Receiver类中的MessageQueue添加了mReceiveFd为监听节点,SensorService中通过mSendFd将数据写入后,MessageQueue监听到有事件产生,会回调Receiver::handleEvent()函数。handleEvent()首先通过SensorEventQueue::read()函数从BitTube中读取ASensorEvent类型数据,每次最多读取16个。read()函数的实质就是Socket通信中的recv()函数,通过mReceiveFd读取数据。

当读取到数据后,handleEvent会按照传感器类型对数据进行简单处理,然后回调Java层BaseEventQueue类的dispatchSensorEvent方法。

BaseEventQueue的dispatchSensorEvent方法是一个abstract方法,具体实现是在BaseEventQueue的子类SensorEventQueue和TriggerEventQueue中。对于事件上报类型为OneShot的Sensor,register时会创建TriggerEventQueue,其他类型的创建SensorEventQueue。dispatchSensorEvent中的主要操作就是将JNI回调时传过来的数据转换成SensorEvent对象,然后通过mListener.onSensorChanged()将数据分发给应用层进行处理。

总结:一个SensorEventListener对象只能对应一个SensorEventQueue和一个SensorEventConnection,每个SensorEventConnection对象中都保存了一个Sensor handle列表,用于标识该数据通道允许传输的Sensor数据类型。如果一个SensorEventListener中同时对多种传感器数据进行处理,不会创建多个数据通道,只是将Sensor 添加到SensorEventConnection的Sensor handle列表中。

搜索更多关于: 传感器SensorService详细分析 的文档
传感器SensorService详细分析.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c0y5n47mjjp6ehs74cpcj_5.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top