Android传感器

Android系统支持加速度传感器(accelerometer)、陀螺仪(gyroscope)、环境光照传感器(light)、磁力传感器(magnetic field)、方向传感器(orientation)、压力传感器(pressure)、距离传感器(proximity)和温度传感器(temperature)八种物理传感器和三种虚拟传感器重力加速度传感器GRAVITY、线性加速度传感器LINEAR_ACCELERATION和旋转矢量传感器ROTATION_VECTOR。

传感器与硬件抽象层的数据交互

在Android系统中,有一个库专门用于处理传感器数据,通常该库的名称为libsensor.so。也就是sensor框架的HAL层,也称之为硬件抽象层。这个硬件抽象层负责从传感器驱动中获取传感器数据。通常,这个库提供了一个pool函数,对传感器上报的input事件进行处理,并对不支持input驱动的传感器进行轮询取数。

根据这种硬件抽象层和传感器驱动的交互形式,传感器驱动一般会有如下的数据传输形式:input event设备驱动、MISC驱动、SYS驱动、HWMON设备驱动以及ioctl五种。

传感器数据总线

总线是作为驱动和硬件之间数据交互而存在的。想对于SPI等总线,IIC总线是传感器和CPU之间的首选。而作为IIC设备,传感器的驱动有两种实现形式,一种是platform设备,一种是非platform的adapter挂载形式。

作为IIC总线来说,SMB总线是IIC总线的子协议,通常来说,温度传感器和气压传感器以SMB协议取传感器数据。其它的传感器以IIC协议进行数据传输。

总结

本系列文章,有浅入深,介绍整个传感器驱动的实现。我在每个文章里面都附上了一个例子代码,可能我文档写的不好,但是我的例子都做过测试了的。代码如下:

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐