分类: LINUX
2011-08-29 21:05:19
1)Sensor HAL
应用层通过sensor manager控制sensor.so,sensor.so通过ioctl控制sensor driver,driver通过i2c 访问sensor device,同时将sensor 返回的数据通过输入子系统发送到sensor.so,进而发送到上层。
android/hardware/msm7k/libsensors/*
sensor manager
<- HAL ->
sensors.so
<- ioctl / input system ->
sensor driver
<- i2c ->
sensor hardware
2)Sensor Driver
a. G/Compass/Light/Near 等稍复杂的sensor;
Driver 基本实现:
- sensor 上电,初始化;
- 注册ioctl device,并实现ioctl相关接口,比如打开关闭sensor;
- 注册input device,选择需要的消息类型与消息;
- 注册中断,在中断触发时发送input 消息到上层;
注:不要忘了修改ioctl 文件的属性及owner;
android/system/core/rootdir/ueventd.rc
/dev/kxud9 0660 system system
b. MR sensor 等单个中断型的sensor;
Android为此类sensor提供了2中机制可供选择:
- Gpio-keys
android/kernel/drivers/input/keyboard/Gpio_keys.c
通过中断触发,并读取电平,然后发送input 消息到EVENTHUB的机制。
- Gpio-switchs
android/kernel/drivers/switch/Switch_gpio.c
通过中断触发,并读取电平,然后发送UEVENT 消息到相关OBserver接受者的机制。
这里为MR sensor 选择Gpio-keys机制,因为EVENTHUB中有开合盖相关的消息处理,故选择input发送消息。