由于重力感应器在板上安装的方向不同,而移植时需要调整相关的代码。
解决屏幕显示颠倒相关问题,相关的有两部分代码:
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 里面,通过宏来控制这些运算,就不用再改代码了。
10 | #ifdef CONFIG_REVERSE_X |
14 | #ifdef CONFIG_REVERSE_Y |
18 | #ifdef CONFIG_REVERSE_Z |
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); |
|