Android上Sensor移植的总结

本文主要介绍了Android系统中Sensor的移植过程,重点讲解了G-Sensor和LightSensor的移植。移植工作涉及Linux Kernel中的驱动开发、Android HAL层的库开发以及应用层测试程序的开发。在Kernel驱动开发中,涉及Sensor数据的采集和上报,通过中断或轮询方式采集数据,并通过Linux内核输入子系统上报。在HAL层,需要编写C程序生成库“libsensor.so”。在应用层,可以通过SensorManager进行Sensor的监控和数据处理。

    Sensor作为Android系统的一个输入设备,对Android设备来说是必不可少的。Sensor主要报告G-Sensor、LightsSensor、ProximitySensor、TemperatureSensor等。由于各个Sensor的移植大同小异。本文就主要对G-Sensor和LightSensor进行说明。

 

Sensor的移植主要包括三部分的工作:

Linux Kernel中相关设备的驱动开发、Android中HAL中相关库的开发以及Android中应用层中测试程序的开发。

 

一、Linux Kernel中相关设备的驱动的开发。

      对于Sensor驱动的开发,主要分为两部分:Sensor数据的采集以及上报和Sensor的控制。

      1、Sensor数据的采集和上报。

           a、Sensor数据的采集是指从硬件设备读出相关的数据。

                数据的采集主要有两种方式:     

                通过注册中断,当有中断发生时,驱动去采集数据;

                通过轮询主动去采集数据。主要是通过定时器定期采集数据。

           b、Sensor数据的上报

                由于Sensor是属于输入设备,所以Sensor的数据上报要上报到Linux Kernel输入子系统里面。上层只要到相应的子系统里面

                读数据就可以了。

                需要把数据上报的Linux Kernel输入子系统的设备还有TouchScreen,Keyboard,Mouse,Sensor等。

                上报数据的code大致是

                static void report_abs(void)
                {
                     short x,y,z,tilt;
                     if(read_data(&x,&y,&z,&tilt) != 0) {
                     /* report the absulate sensor data to input device */
                     input_report_abs(idev, ABS_X, y);
                     input_report_abs(idev, ABS_Y, x);
                     input_report_abs(idev, ABS_Z, z);
                     input_sync(idev);
                }

 

       2、Sensor的控制。

            Sensor的控制包括设备的打开、关闭、设置才数据采集的频率、enable/disable,等等。

            Sensor的控制主要通过IOCTL方式来实现的。

      对于驱动的开发,其实都是大同小异的,只要实现相应的回调函数就行了,另外注意以上两点就行了。

       

二、Android中HAL层相关库的开发。

      Android中Framework对Sensor的相关支持,Android中已经弄好了。但是由于HAL层是很硬件密切相连的,与每个硬件相对应的HAL中的东西都有所不同,所以Anroid中HAL层对Sensor的支持是没有的。所以需要开发。只要变出的库的名字“libsensor.so”,然后放到固定的目录下就可以了。

       本文一下的关于libsensor.so的开发是基于Android2.2的,在Android2.3上代码的整体结构有所不同,但是也是大同小异的东西。只要知道核心内容就可以了。

       对于libsensor.so库的开发,只要写个C程序,然后编译成库就行了。对于Android2.2来说,我们不需要自己一点点的开发这个库,因为Android2.2里面提供了htc相关的源文件,我们只要拿过来把里面关键的几点改一下就行了。

       以下对关键的几点加以说明。参考android目录下 device/htc/passion-common/libsensors/Sensors.c

      1、open_sensors(...)

           这个函数比较重要。在Sensors.c文件里面实现的函数大多是系统的回调函数。在这个函数里面主要的作用就是把自己写的函数,注

           册成系统用的回调函数。

      

      2、定义支持的sensors

          
         &

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值