Androidスクリーン重力センサー


重力センサーはプレートに取り付ける方向が異なるため、移植時に関連するコードを調整する必要があります.
画面表示の反転に関する問題を解決します.関連するコードは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);