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
           
         &

 
                   
                   
                   
                   本文主要介绍了Android系统中Sensor的移植过程,重点讲解了G-Sensor和LightSensor的移植。移植工作涉及Linux Kernel中的驱动开发、Android HAL层的库开发以及应用层测试程序的开发。在Kernel驱动开发中,涉及Sensor数据的采集和上报,通过中断或轮询方式采集数据,并通过Linux内核输入子系统上报。在HAL层,需要编写C程序生成库“libsensor.so”。在应用层,可以通过SensorManager进行Sensor的监控和数据处理。
本文主要介绍了Android系统中Sensor的移植过程,重点讲解了G-Sensor和LightSensor的移植。移植工作涉及Linux Kernel中的驱动开发、Android HAL层的库开发以及应用层测试程序的开发。在Kernel驱动开发中,涉及Sensor数据的采集和上报,通过中断或轮询方式采集数据,并通过Linux内核输入子系统上报。在HAL层,需要编写C程序生成库“libsensor.so”。在应用层,可以通过SensorManager进行Sensor的监控和数据处理。
           最低0.47元/天 解锁文章
最低0.47元/天 解锁文章
                           
                       
       
           
                 
                 
                 
                 
                 
                
               
                 
                 
                 
                 
                
               
                 
                 扫一扫
扫一扫
                     
              
             
                   1090
					1090
					
 被折叠的  条评论
		 为什么被折叠?
被折叠的  条评论
		 为什么被折叠?
		 
		  到【灌水乐园】发言
到【灌水乐园】发言                                
		 
		 
    
   
    
   
             
            


 
            