Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2964340
  • 博文数量: 674
  • 博客积分: 17881
  • 博客等级: 上将
  • 技术积分: 4849
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-17 10:15
文章分类

全部博文(674)

文章存档

2013年(34)

2012年(146)

2011年(197)

2010年(297)

分类: 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发送消息。

http://blog.csdn.net/echoff/article/details/6405949

阅读(1299) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~