谁知道上层在Gsensor翻转的时候,如何对TP报点进行坐标转换?
顶一个!
有两种方法,一种是在 kernel 的 TP 驱动上报坐标前进行转换,另一种方法就是在 system 层在 TP 坐标的分发事件之前进行转换;
下面的代码是我在 kernel 的 TP 驱动添加的适配LCD旋转 90,180,270 三个旋转角度相关部分代码,可以根据自己的实际情况修改一下,然后在 system 层也是类似这样进行转换。
#define TPD_ROTATE_90
//#define TPD_ROTATE_180
//#define TPD_ROTATE_270
#define TPD_RES_X 1080 // 在MTK 的 kernel 代码里,这个宏不需要定义,是全局的宏,这里我添加是为了说明情况
#define TPD_RES_Y 1920 // 在MTK 的 kernel 代码里,这个宏不需要定义,是全局的宏,这里我添加是为了说明情况
#if defined(TPD_ROTATE_90) || defined(TPD_ROTATE_270)|| defined(TPD_ROTATE_180)
static void tpd_swap_xy(int *x, int *y)
{
int temp = 0;
temp = *x;
*x = *y;
*y = temp;
}
static void tpd_rotate_90(int *x, int *y)
{
int temp;
*x = TPD_RES_X + 1 - *x;
*x = (*x * TPD_RES_Y) / TPD_RES_X;
*y = (*y * TPD_RES_X) / TPD_RES_Y;
tpd_swap_xy(x, y);
}
static void tpd_rotate_180(int *x, int *y)
{
*y = TPD_RES_Y + 1 - *y;
*x = TPD_RES_X + 1 - *x;
}
static void tpd_rotate_270(int *x, int *y)
{
int temp;
*y = TPD_RES_Y + 1 - *y;
*x = (*x * TPD_RES_Y) / TPD_RES_X;
*y = (*y * TPD_RES_X) / TPD_RES_Y;
tpd_swap_xy(x, y);
}
#endif