Android Sensor驱动开发实例

来源:互联网 发布:微信排队叫号系统源码 编辑:程序博客网 时间:2024/06/01 03:59

Android Sensor驱动开发实例

平台说明:

    CPU : RK3288 Kernel : 3.10Android : 4.4 Sensor : HDC1000

有一个需求是为平台添加一个温度传感器,普通的APP可以通过Android标准的API获取温度值。温度传感器的驱动一般不会特别的难,但是如果要实现后者,那么就得对Android的API有很好的了解。单说Android平台其实也有三个步骤来走:1.在Windows平台测试该IC(连上EVM板) 2.在Linux应用层直接通过I2C来开发测试。 3.读懂目标板上的内核Sensor驱动;Sensor HAL架构,按照其规范进行编程。

1.在Windows平台测试该IC

拿到手上的是EVM模块,不是一个单独的IC,通过USB连接电脑后有专门的测试程序。温度测试出来后,证明硬件无问题。

2.Linux应用层测试

能够直接使用I2C通信的Linux系统也只能在嵌入式设备上,测试见过PC上有直接留出I2C接口的。I2C设备调试的第一步是我叫你一声你敢答应吗?
用专业术语叫使用I2C扫描工具(i2cdetect)进行扫描,看能否扫描到该设备。当然你需要先确认你的IC地址是多少。比如以0x40地址为例:

//TODO

IC应答后就开始后续的开发,需要按照数据手册要求的时序进行读写数据。这个就是将数据手册翻译成代码的过程。如果这个做完了,那么这说明这个设备以及驱动就算是通了。

I2C的Host端在Linux中不是像其它一样叫Controller(控制器)而是叫Adapter(适配器)。和其它总线一样,适配器端的驱动是由CPU厂商写好了。对驱动对应用的API都是标准的。一个使用到I2C总线的设备驱动才不会理会具体的I2C适配器驱动是哪个CPU厂家写的呢。

3.移植到Android中

其实如果只是在普通的嵌入式设备中,完成第二步就已经完成了整个驱动开发工作,但是对于有秩序的Android世界就不一样了。
应用层是统一的,可以下载一个程序Phone tester程序以备测试。

HAL层有标准,但是要看具体的平台厂家的实现了,因为你的东西要在他们平台上跑,也只能在他们本来的HAL中添加自己的代码,RK3288上而言是有Sensor HAL框架,大致是通过读取input event来进行数据的解析的,这一点利用了输入子系统。

同样内核中也看有没有实现好的框架,然后编写具体的程序。就RK3288上而言是有Sensor内核驱动框架。

没有记录具体的代码如何编写,但是将整体流程记录下来了,以后其它Sensor开发也可以按照这个流程来。

参与文档:
1. Android Sensors Overview Sensor应用程序开发
2. Android Sensors HAL Sensors hal-interface
3. i2c 编程接口

0 0
原创粉丝点击