ImageVerifierCode 换一换
格式:DOC , 页数:7 ,大小:73KB ,
资源ID:15403346      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/15403346.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Android中G-Sensor相关流程Word文件下载.doc)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Android中G-Sensor相关流程Word文件下载.doc

1、/JayLin add for Gsensorstruct lis331dl_platform_data lisGsensor_platform_data=.name=lis331dl,.pin_clk=0,.pin_data=0,.open_drain=1,.interrupt=IRQ_EINT(3),;该结构变量在i2c_devs1 _initdata中被引用。/kernel/arch/arm/mach-s3c6410/mach-ur6410.c 中需要包含lis331dl.h。在rootfs/system/etc/init.board.sh的最后一行加上mknod /dev/sensor

2、ioctl c 51 201&创建节点供ioctl使用。编译后的sensor.so放在/rootfs/system/lib/hw下。sensor.so和driver之间通过ioctl实现对G-sensor的状态控制。ioctl的命令编号定义在头文件sensorioctl.h中,分别放在kernel/include/linux下和androidsourcecode/hardware/libhardware/include/hardware下供driver和sensor.so使用。G-sensor driver工作的大致流程:系统开机后,先加载i2c总线驱动,然后加载设备驱动。在设备驱动中的ini

3、t函数中通过调用i2c_add_driver(&lis331dl_i2c_driver)注册i2c_driver;此函数将driver注册到i2c_bus_type的总线上,此总线的匹配规则是利用i2c_client的名称和i2c_driver中id_table中的名称作匹配。其中i2c_client是注册板载信息是系统自动创建的,注册板载信息的过程就是在/kernel/arch/arm/mach-s3c6410 /mach-ur6410.c文件中i2c chanel1的结构变量i2c_devs1 _initdata中需要添加G-sensor的设备信息。当匹配成功时,i2c_driver中的p

4、robe()函数开始执行。Probe()函数主要完成以下功能:1.从i2c_client结构中得到初始化信息2.创建G-sensor的工作队列2.注册input_device设备3.读取Chip ID4.设置寄存器,使能G-sensor5.设置并启动中断当G-sensor上报数据的时候会触发中断,然后在中断处理函数中提交一个报值的任务到队列中并禁止中断。在工作队列中读数G-sensor的数据并上报到input子系统中,最后使能中断。2.android上层应用apk到G-sensor driver的大致流程:Android对于Sensor的API定义在 hardware/libhardware/

5、include/hardware/sensor.h中, 要求在sensor.so提供以下8个API函数控制方面int (*open_data_source)(struct sensors_control_device_t *dev);int (*activate)(struct sensors_control_device_t *dev, int handle, int enabled);int (*set_delay)(struct sensors_control_device_t *dev, int32_t ms);int (*wake)(struct sensors_control_de

6、vice_t *dev);数据方面int (*data_open)(struct sensors_data_device_t *dev, int fd);int (*data_close)(struct sensors_data_device_t *dev);int (*poll)(struct sensors_data_device_t *dev, sensors_data_t* data);模块方面int (*get_sensors_list)(struct sensors_module_t* module, struct sensor_t const* list);在Java层Senso

7、r的状态控制由SensorService来负责,它的java代码和JNI代码分别位于:frameworks/base/services/java/com/android/server/SensorService.javaframeworks/base/services/jni/com_android_server_SensorService.cpp在Java层Sensor的数据控制由SensorManager来负责,它的java代码和JNI代码分别位于:frameworks/base/core/java/android/hardware/SensorManager.javaframeworks

8、/base/core/jni/android_hardware_SensorManager.cppandroid framework中与sensor通信的是sensorService.java和sensorManager.java。sensorService.java的具体通信是通过JNI调用sensorService.cpp中的方法实现的。sensorManager.java的具体通信是通过JNI调用sensorManager.cpp中的方法实现的。sensorService.cpp和sensorManger.cpp通过hardware.c与sensor.so通信。其中sensorServi

9、ce.cpp实现对sensor的状态控制,sensorManger.cpp实现对sensor的数据控制。sensor.so通过ioctl控制sensor driver的状态,通过打开sensor driver对应的设备文件读取G-sensor采集的数据。android SDK提供了4个类来于sensor通信,分别为 sensor,sensorEvent,sensorEventListener,sensorManager.其中 sensorEventListener用来在sensorManager中注册需要监听的sensor类型。sensorManager.java提供registrater()

10、,unregistrater()接口供sensorEventListener使用。sensorManager.java不断轮询从sensor.so中取数据。取到数据后送给负责监听此类型sensor的 sensorEventListener.java。sensorEventListener.java通过在sensorManager.java中注 册可以监听特定类型的sensor传来的数据。系统启动时执行systemProcess,会启动sensorService.java,在sensorService.java的构造函数中调用JNI方法_sensor_control_init()。sensorS

11、ervice.cpp中相应的方法android_int()会被执行。该函数会调用hardware.c中的方法hw_get_module()此函数又通过调用load()函数在system/lib/hw下查找sensor.so查找时会根据harware.c中定义好的sensor.*.so的扩展名的顺序查找,找到第一个匹配的时候即停止,并将该sensor.so中定义好的一个全局变量HAL_MODULE_INFO_SYM带回。该变量包含的一个重要信息是它的一个成员结构变量中包含的一个函数指针open,该指针所指函数会对一个device结构变量赋值,从而带出sensorService.cpp 和sens

12、orManager.cpp与sensor通信所需要的全部信息。device结构变量有两种变体分别供sensorService.cpp和sensorManaer.cpp使用。其中主要是一些函数指针指向与sensor通信的函数。sensorService.cpp和sensorManager.cpp在得到HAL_MODULE_INFO_SYM结构后都会调用 sensors.h的inline函数open()通过HAL_MODULE_INFO_SYM的open函数指针将所需的device信息取回。系统在启动activityManager.java时,它会启动sensorManager.java,它也会调

13、用hardware.c中的方法hw_get_module()带回HAL_MODULE_INFO_SYM。3.关于Rotate的实现:系统启动windowManger.java时,它会启动phoneWindowManager.java,该类有一个内部类myOrientationListener扩展自windowOrientationListener.java。windowOrientationListener.java是一个辅助类,当device的方向发生变化时,供windowManger.java调用,用来接收数据。windowOrientationListener.java 内部在senso

14、rManger.java中进行了注册,它回监听G-sensor传来的数据,即x,y,z方向的加速度,收到数据后经过转换处理,若满足Roate条件则调用IwindowManager接口的实现类windowManagerService.java中的setRotation()方法实现转屏。SensorManager通过polling的方式从设备得到Sensor数据, Sensor数据的结构定义在sensor.h里,其中SensorManager只处理了 vector.v, vector.status, time三个域, 分发给已注册的对这些消息的监听者比如第一项 vector.v包含x,y,z三个方向的信息值,就是由 WindowOrientataionLister注册的,当 SensorManager获取到这三个值之后,会传递给 WindowOrientataionLister,后者代码位于:frameworkd/base/core/java/android/view/WindowOrientationListener.javaWindowOrientataionLister接收到这三个值之后,会计算出设备对应的orientation,并且执行 onOrientationChanged函数进一步上传WindowOrientataionLister是

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1