MT8765 LCD屏幕/TP显示触摸180°旋转

将LCD显示180°旋转,需要做系统底层的修改,具体实现方法如下(以实际项目为例):
1. 更改MTK_LCM_PHYSICAL_ROTATION的值
    MTK_LCM_PHYSICAL_ROTATION = 180
    所涉及到的文件有:
    bootable/bootloader/lk/project/xxxxxx.mk
    device/mediateksample/tb8765ap1_bsp_1g/ProjectConfig.mk
    device/mediateksample/tb8765ap1_bsp_1g//xxxxx_defconfig
    device/mediateksample/tb8765ap1_bsp_1g//xxxxxx_debug_defconfig
2. 触摸屏坐标的修改
    显示屏旋转了180°,那么触摸屏也要旋转180°,这样才能方便使用。
    涉及到的文件:

   kernel-4.4/drivers/input/touchscreen/mediatek/ft5x06_new/focaltech_core.c

打开宏:
    
    #define CONFIG_TPD_ROTATE_180
    
    驱动中有:(没有可以自己实现)
    #if defined(CONFIG_TPD_ROTATE_90) || defined(CONFIG_TPD_ROTATE_270) || defined(CONFIG_TPD_ROTATE_180)
    static void tpd_rotate_180(int *x, int *y)
    {
        *y = TPD_RES_Y + 1 - *y;                // TPD_RES_Y -- mtk_tpd.c从defconfig的CONFIG_LCM_HEIGT获得()
        *x = TPD_RES_X + 1 - *x;
    }
    #endif
    static void tpd_down(int x, int y, int p, int id)
    {
    #if defined(CONFIG_TPD_ROTATE_180)
        tpd_rotate_180(&x, &y);
    #endif
        ...
        input_report_abs(tpd->dev, ABS_MT_POSITION_X, x);
    }
   
    或者再直接一点,在上报之前:
    +    events[i].x =   720 + 1 - events[i].x;   // 具体的高宽感觉具体项目tp的烧入坐标固件的分辨率为准,如果没有对应信息
    +    events[i].y =   1440 + 1 - events[i].y; //  请使用adb shell 使用 getevent -lt /dev/input/event2 ,分辨获取 高宽(需16进制转)
        input_report_abs(tpd->dev, ABS_MT_TOUCH_MAJOR, events[i].area);
        input_report_abs(tpd->dev, ABS_MT_POSITION_X, events[i].x);
        input_report_abs(tpd->dev, ABS_MT_POSITION_Y, events[i].y);

 

以下是 触摸旋转函数例子代码(可参照来写):


#ifdef TPD_ROTATION_SUPPORT
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)
{
    *x = SCREEN_MAX_X + 1 - *x;

    *x = (*x * SCREEN_MAX_Y) / SCREEN_MAX_X;
    *y = (*y * SCREEN_MAX_X) / SCREEN_MAX_Y;

    tpd_swap_xy(x, y);
}
static void tpd_rotate_180(int *x, int *y)
{
    *y = SCREEN_MAX_Y + 1 - *y;
    *x = SCREEN_MAX_X + 1 - *x;
}
static void tpd_rotate_270(int *x, int *y)
{
    *y = SCREEN_MAX_Y + 1 - *y;

    *x = (*x * SCREEN_MAX_Y) / SCREEN_MAX_X;
    *y = (*y * SCREEN_MAX_X) / SCREEN_MAX_Y;

    tpd_swap_xy(x, y);
}
#endif

例: getevent -lt /dev/input/event2

将标好进行十六进制转换获得对应的分辨率以及坐标

个别情况下修改以上部分开机动画还没有旋转,请按下方进行修改
3. 开机动画的旋转
   涉及到的文件:
   frameworks/native/services/surfaceflinger/DisplayDevice.cpp
   将setProjection(DisplayState::eOrientationDefault, mViewport, mFrame);修改为:setProjection(DisplayState::eOrientation180, mViewport, mFrame);
   修改的参数是:eOrientationDefault 改为 eOrientation180
 

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Healer_S

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值