Android(4.2) Sensors 学习——G-sensor,Gyroscope驱动移植
来源:互联网 发布:电子商务平台软件下载 编辑:程序博客网 时间:2024/06/14 01:18
Sensors 种类和功能
从Android 官方的API可以找到Android 支持的sensor类型如下:
ACCELEROMETER (加速度传感器)
又名G-sersor,侦测物体的加速度,利用装置内配置的两个电容点,并在电容点之间放置一个导电且可晃动物质,通过侦测导电物质的移动改变电容点间的电压,借此计算感应器的状态。 GRAVITY
(重力传感器)
又名GV-sensor
。 GYROSCOPE(陀螺仪传感器)又名Gyro-sensor角速度器,利用内部震动机械结构侦测物体转动所产生的角速度,进而计算出物体移动的角度。侦测水平改变的状态,但无法计算移动的激烈程度。 LIGHT
(光线传感器)侦测光线的强弱MAGNETIC_FIELD
(磁力传感器)又名M-sensor。PRESSURE
(压力传感器)返回当前的压强。PROXIMITY
(距离传感器)
侦测物体与传感器之间的距离。HUMIDITY
(湿度传感器) 返回当前的湿度 ROTATION
(方向传感器)又名O-sensorTEMPERATURE
(温度传感器)
返回当前的温度 以上加速度传感器,重力传感器,陀螺仪传感器,光线传感器 是Android中最长用的Sensor了。下面介绍下G-sensor,Gyroscope驱动的移植。
G-sensor驱动code
通过咨询硬件同事,知道我们当前用的G-sensor是LSM303D,Gyroscope是L3GD2。接下来按照这两个关键grep查找。结果找到如下的驱动相关的文件:
- kernal_path/drivers/misc/lsm303d.c
- kernal_path/drivers/misc/l3gd20_gyr.c
- kernal_path/include/linux/i2c/l3gd20.h
- kernal/include/linux/input/lsm303d.h
kernal_path/drivers/misc/Makefile:
- obj-$(CONFIG_SENSORS_LSM303D) += lsm303d.o
- obj-$(CONFIG_ST_L3GD20_GYR) += l3gd20_gyr.o
kernal_path/drivers/misc/Kconfig:
- config SENSORS_LSM303D
- tristate "LSM303 sensor driver"
- depends on I2C=y
- help
- Say yes here to support the sensor
- config ST_L3GD20_GYR
- tristate "L3GD20_GYR gyroscope sensor support"
- depends on I2C=y
- help
- If you say yes here you get support for ST's
- gyroscope sensors L3GD20_GYR.
修改defconfig:
kernal_path/configs/XXX_defconfig:
- CONFIG_SENSORS_LSM303D=y
- CONFIG_ST_L3GD20_GYR=y
注册I2C:
上面Kconfig中提到depends on I2C =y,它既然依赖I2C,那肯定需要让I2C知道的它的存在,现向I2C注册LSM303D,L3GD2信息。
- #ifdef CONFIG_SENSORS_LSM303D
- {
- I2C_BOARD_INFO("lsm303d", 0x1d),
- },
- #endif
- #ifdef CONFIG_ST_L3GD20_GYR
- {
- I2C_BOARD_INFO("l3gd20_gyr", 0x6a),
- },
- #endif
G-sensor HAL
这一部分直接从android4.1 copy到android 4.2,路径放在hardware/sensors/ST_lsm303d/,查看它的Makefile发现它最后编译生成一个sensor.so的文件,存在在system/lib/hw中以供上层条用。要把这个sensor.so包含到img文件中,需要在
- PRODUCT_PACKAGES += \
- sensors.amlogic
这里提出如下两个文件:
hardware/sensors/ST_lsm303d/AccSensor.cpp
hardware/sensors/ST_lsm303d/GyroSensor.cpp
打开后有个宏定义:
- <pre name="code" class="html">#define INPUT_SYSFS_PATH_ACC "/sys/devices/i2c-1/1-001d/accelerometer/"
- #define INPUT_SYSFS_PATH_GYRO "/sys/devices/i2c-1/1-006a/"</pre>
sensor权限
从上面两个宏定义可以看出,它要访问的sys/devices/i2c-1/的文件,那就需要给它一个权限啦。在init.rc中改变这两个文件的权限:
- chmod 0666 /dev/mpu
- chmod 0666 /dev/mpuirq
- chmod 0666 /dev/timerirq
- chown system system /sys/devices/i2c-1/1-001d/magnetometer/pollrate_us
- chown system system /sys/devices/i2c-1/1-001d/accelerometer/enable_device
- chown system system /sys/devices/i2c-1/1-001d/accelerometer/pollrate_us
- chown system system /sys/devices/i2c-1/1-001d/magnetometer/enable_device
- chown system system /sys/devices/i2c-1/1-006a/pollrate_ms
- chown system system /sys/devices/i2c-1/1-006a/enable_device
- chown system system /sys/devices/i2c-1/1-006a/range
- chown system system /sys/devices/i2c-1/1-006a/enable_polling
在进行Android CTS测试时,会有sensor的features项目。这时也需要配置些文件:
- PRODUCT_COPY_FILES += \
- frameworks/native/data/etc/android.hardware.sensor.accelerometer.xml:system/etc/permissions/android.hardware.sensor.accelerometer.xml
- frameworks/native/data/etc/android.hardware.sensor.compass.xml:system/etc/permissions/android.hardware.sensor.compass.xml \
- frameworks/native/data/etc/android.hardware.sensor.gyroscope.xml:system/etc/permissions/android.hardware.sensor.gyroscope.xml \
它不仅是Android CTS feature,同时也决定这运行于此平台上APPS有没有这些相关的权限。打开文件android.hardware.sensor.accelerometer.xml:
- <!-- Feature for devices with an accelerometer sensor. -->
- <permissions>
- <feature name="android.hardware.sensor.accelerometer" />
- </permissions>
注1-1,注1-2,注1-3
这三个地方的1-001d,1-006a必须一样。否则sensor没功能。至于1-001d,1-006a这个值是怎么来的,暂时还不知道。(评论:1-001d,1-006a 是I2c挂载的地址)
From: http://blog.csdn.net/nxh_love/article/details/11804841
- Android(4.2) Sensors 学习——G-sensor,Gyroscope驱动移植
- Android(4.2) Sensors 学习——G-sensor,Gyroscope驱动移植
- Android(4.2) Sensors 学习——G-sensor,Gyroscope驱动移植
- Android(4.2) Sensors 学习——G-sensor,Gyroscope驱动移植
- android sensor驱动移植
- android APK 调用G—sensor驱动的过程
- Android之G-sensor驱动
- 重力感应器G—sensor 驱动分析
- <1>Android sensors移植文档
- android Sensors学习笔记
- ICS g-sensor,light sensor移植记录
- G-sensor & TP --- MID 驱动
- G-sensor On Android
- G-sensor On Android
- android g-sensor porting
- Android Sensor 移植
- android sensor移植
- android sensor移植
- LeetCode(066) Plus One (Java)
- android2.3.4增加gsensor
- [Leetcode] 138. Copy List with Random Pointer
- UVa 1225
- 从AndroidStudio的启动参数了解到的下JVM的一些东西(内存使用,JIT等)
- Android(4.2) Sensors 学习——G-sensor,Gyroscope驱动移植
- 初学Linux进程的描述和进程的创建
- 前端那些事儿(1) --- javascript模块化(上)
- Set Matrix Zeroes
- 织梦后台添加文章时,提示标题不能为空
- CStatic控件的基本使用
- 微信注册请求链接
- mac下安装memcache扩展出现问题
- C++内存分配方式 ——堆、栈、自由存储区、全局/静态存储区和常量存储区