Androidスクリーン重力センサー
1327 ワード
重力センサーはプレートに取り付ける方向が異なるため、移植時に関連するコードを調整する必要があります.
画面表示の反転に関する問題を解決します.関連するコードは2つあります.
1.コア重力センサー駆動部、例えばMMA 7660
このファイルで似たようなコードを探します.
そしてあなた自身の板の必要に応じて、X,Yを交換し、逆数演算を行い、Zを逆算します.
実はもっと便利にすることができて、このいくつかの操作をKconfigの中に書いて、マクロを通じてこれらの演算を制御して、コードを変える必要はありません.
2.Android部分、メニュー表示が正常であれば、重力誘導ゲームで問題がある場合は、この部分を修正します(2.1)
画面表示の反転に関する問題を解決します.関連するコードは2つあります.
1.コア重力センサー駆動部、例えばMMA 7660
vi drivers/input/gsensor/mma7660.c
このファイルで似たようなコードを探します.
axis.y = mma7660_convert_to_int(buffer[MMA7660_REG_X_OUT]);
axis.x = mma7660_convert_to_int(buffer[MMA7660_REG_Y_OUT]);
axis.z = mma7660_convert_to_int(buffer[MMA7660_REG_Z_OUT]);
そしてあなた自身の板の必要に応じて、X,Yを交換し、逆数演算を行い、Zを逆算します.
実はもっと便利にすることができて、このいくつかの操作をKconfigの中に書いて、マクロを通じてこれらの演算を制御して、コードを変える必要はありません.
#ifdef CONFIG_SWAP_XY
{
typeof(x) __tmp;
__tmp = x;
x = y;
y = __tmp;
}
#endif
#ifdef CONFIG_REVERSE_X
x = -x;
#endif
#ifdef CONFIG_REVERSE_Y
y = -y;
#endif
/* X Y , 。 */
#ifdef CONFIG_REVERSE_Z
z = -z; /* , , , , , Z 。 */
#endif
2.Android部分、メニュー表示が正常であれば、重力誘導ゲームで問題がある場合は、この部分を修正します(2.1)
vim frameworks/base/core/java/android/view/WindowOrientationListener.java
public void onSensorChanged(SensorEvent event) {
float[] values = event.values;
float X = values[_DATA_X];
float Y = values[_DATA_Y];
float Z = values[_DATA_Z];
float OneEightyOverPi = 57.29577957855f;
float gravity = (float) Math.sqrt(X*X+Y*Y+Z*Z);