1. 模块介绍
2.1.模块功能介绍
在人机交互过程中,G-sensor起着非常重要的作用,gsensor作为输入设备,能感知当前G-sensor传感器所处的空间状态,附着在pad上配合使用,能测量出pad在空间上的坐标状态,从而获知pad用户的操作意图:横竖屏切换,转弯等。
2.2.硬件介绍
目前G-sensor与HOST的连接有4个pin脚,分别为VCC,GND,SDA,SCL。引脚正常工作时候的高电平均为3.3V。
G-sensor的调试中,首先确认硬件的正确性。硬件调试中,需要确认下列项:
(1)、确认各个引脚与HOST连接的正确性。
(2)、电源电压是不是正常的,VCC是否为3.3V,GND是否为0。
(3)、I2C引脚电平是否匹配。
(4)、确认设备使用的I2C地址,特别是设备可以设置为多个地址时。
2.3.源码结构介绍
G-sensor驱动源码位于如下两个目录中。
mma7660,mma8452,mma865x,afa750,kxtik的源码位于linux-3.4\drivers\hwmon中。
bma250,lis3de,lis3dh,dmard10,mxc622x的源码位于linux-3.4\drivers\gsensor中。
linux-3.4
drivers/hwmon/
├── mma7660.c
├── mma8452.c
├── mma865x.c
├── afa750.c
├── kxtik.c
drivers/G-sensor/
├── bma250.c
├── lis3de_acc.c
├── lis3dh_acc.c
├── dmard10.c
├── mxc622x.c
2.4.模块配置介绍
2.4.1. sys_config.fex配置
(1)Gsensor 使用配置
配置文件的位置:\lichee\tools\pack\chips\sun7i\configs\android\wing-XXX目录下。
配置文件sys_config.fex中关于G-sensor的配置项如下:
--------------------------------------------------------------------------------
G sensor configuration
gs_twi_id --- TWI ID for controlling G-sensor (0: TWI0, 1: TWI1, 2: TWI2)
--------------------------------------------------------------------------------
[G-sensor_para]
G-sensor_used = 1
G-sensor_twi_id = 2
G-sensor_int1 =
G-sensor_int2 =
文件配置说明如下:
配置项 |
配置项含义 |
G-sensor_used=xx |
是否支持G-sensor |
G-sensor_twi_id =xx |
I2C的BUS控制选择,0:TWI0;1:TWI1;2:TWI2 |
G-sensor_int1=xx |
中断1的GPIO配置,目前暂不使用 |
G-sensor_int2=xx |
中断2的GPIO配置,目前暂不使用 |
目前G-sensor采用轮询工作方式,在sysconfig中只需指定如下两个信息即可:
G-sensor_used设为1,代表启用G-sensor;
G-sensor_twi_id根据具体的电路,选择对应的I2C;
(2)gsensor自动检测配置
使用自动检测功能时,需要增加以下配置信息,增加设备的可选择性。
如果gsensor_used 设置为0 则将退出gsensor的自动检测。
;--------------------------------------------------------------------------------
; G sensor automatic detection configuration
;gsensor_detect_used --- Whether startup automatic inspection function. 1:used,0:unused
;Module name postposition 1 said detection, 0 means no detection.
;--------------------------------------------------------------------------------
[gsensor_list_para]
gsensor_det_used = 1 //设置为1时,启动自动检测,设置为0时,退出自动检测。
bma250 = 1 //设置为1,该模块支持的I2C地址添加到扫描列表
mma8452 = 1
mma7660 = 1
mma865x = 1
afa750 = 1
lis3de_acc = 1
lis3dh_acc = 1
Kxtik = 1
dmard10 = 0 //设置为0,该模块支持的I2C地址从扫描列表中剔除
dmard06 = 1
mxc622x = 1
fxos8700 = 0
lsm303d = 0
当gsensor_det_used 设置为1时,启用自动检测,将设置为0时,退出自动检测。模块的名称后面写 1表示添加到自动检测扫描列表,写0表示剔除自动检测扫描列表。
gsensor_list_para列表中的名称顺序必须与 sw_device.c中gsensors的名称顺序一一对应。
2.4.2. menuconfig的配置
对于G-sensor的的内核配置,可通过命令make ARCH=arm menuconfig进入配置主界面,并按以下步骤操作:
首先,选择Device Drivers选项进入下一级配置,如图2所示:
进入Device Drivers配置后,如果需要配置mma7660,mma8452,mma865x,afa750等,选择Hardware Monitoring support,如图3所示:
Hardware Monitoring support选项配置下的驱动如下图所示:
进入Device Drivers配置后,如果需要配置bma250,lis3de,lis3dh等,选择G-sensor support,如图5所示:
最后,选择相应的G-sensor模块驱动选项,可选择直接编译进内核,也可以选择编译成模块。如图6所示:
1. 模块体系结构描述
G-sensor模块的体系结构图,如图6所示。
G-sensor设备为使用I2C总线进行通信的输入设备,G-sensor driver通过调用I2C驱动的相应接口来实现对G-sensor设备的控制、通信,如G-sensor driver对G-sensor设备硬件各寄存器的读写访问等。
G-sensor driver将底层硬件对用户输入访问的响应转换为标准的输入事件,再通过核心层(Input Core)提交给事件处理层;而核心层对下提供了G-sensor driver的编程接口,对上又提供了事件处理层的编程接口;而事件处理层(input Event Driver)就为我们用户空间的应用程序提供了统一访问设备的接口和驱动层提交来的事件处理。用户空间将根据设备的节点进行数据的读取以及相应的处理。
<