相棒第十五季下载:Android 屏幕重力感应
来源:百度文库 编辑:中财网 时间:2024/05/09 04:00:43
由于重力感应器在板上安装的方向不同,而移植时需要调整相关的代码。
解决屏幕显示颠倒相关问题,相关的有两部分代码:
1. 内核重力感应器驱动部分,如 MMA7660
1
vi
drivers/input/gsensor/mma7660.c
在这个文件中寻找相似以下的代码
1
axis.y = mma7660_convert_to_int(buffer[MMA7660_REG_X_OUT]);
2
axis.x = mma7660_convert_to_int(buffer[MMA7660_REG_Y_OUT]);
3
axis.z = mma7660_convert_to_int(buffer[MMA7660_REG_Z_OUT]);
然后按照你自己板的需要,将 X,Y 进行交换,进行相反数运算,将 Z 进行相反运算。
其实可以做得更方便一些,把这几个操作写到 Kconfig 里面,通过宏来控制这些运算,就不用再改代码了。
01
#ifdef CONFIG_SWAP_XY
02
{
03
typeof(x) __tmp;
04
__tmp = x;
05
x = y;
06
y = __tmp;
07
}
08
#endif
09
10
#ifdef CONFIG_REVERSE_X
11
x = -x;
12
#endif
13
14
#ifdef CONFIG_REVERSE_Y
15
y = -y;
16
#endif
17
/* X Y 感应方向有问题,这很容易看出来。 */
18
#ifdef CONFIG_REVERSE_Z
19
z = -z;
/* 按正常情况下拿着设备,屏幕斜向上,如果不灵敏,把屏幕朝下试试,如果灵敏了,一般是 Z 反了。 */
20
#endif
2. Android部分,如果出现菜单显示正常,但是玩重力感应游戏时有问题,这部分就要修改(2.1)
1
vim frameworks/base/core/java/android/view/WindowOrientationListener.java
1
public
void
onSensorChanged(SensorEvent event) {
2
float
[] values = event.values;
3
float
X = values[_DATA_X];
4
float
Y = values[_DATA_Y];
5
float
Z = values[_DATA_Z];
6
float
OneEightyOverPi =
57
.29577957855f;
7
float
gravity = (
float
) Math.sqrt(X*X+Y*Y+Z*Z);