• MT9632/MT9630/MT9950 USB+UART方案触摸缩放


    目录

    一:需求 满足触摸跟随画面缩放或者下移

    二:触摸缩放的协议

    三:代码逻辑的实现


    一:需求 满足触摸跟随画面缩放或者下移

    缩放:全屏
             左下角
             右下角
             居中
       下移
             画面下移1/2
    画面展现效果
    左下角,画面缩放到左下角,触摸跟随缩放到左下角

    右下角:画面整体缩放到右下角,此时触摸也要同步

    底部居中:

    下移

     

    二:触摸缩放的协议


    1:F框的触摸缩放有两个协议分别是 0x54 和0x6d
       0x54指令是缩放,0x55 是取消PC缩放----全屏 
     

     6d:这个指令是做给欧帝的

    三:代码逻辑的实现


    1:0x6d
      应用层传下来的坐标只有四个 x y h w  x坐标 y坐标 高度 宽度
    对于0x6d的由于取值范围是0~0x7fff 计算的时候要放大0x7fff倍数
     

    公式:转化后的坐标:
            ox  = (x*TOUCH_ZOOM_NUM)/OSD_WIDTH;
            oy  = (y*TOUCH_ZOOM_NUM)/OSD_HEIGHT;
            ow =  (w*TOUCH_ZOOM_NUM)/OSD_WIDTH;
            oh =  (h*TOUCH_ZOOM_NUM)/OSD_HEIGHT;
    其中:
    #define TOUCH_ZOOM_NUM  0x7FFF 就算放大系数
    #ifdef OSD_4K
    #define OSD_WIDTH   3840   ---4k对应的分辨率
    #define OSD_HEIGHT  2160    
    #else
    #define OSD_WIDTH   1920   ---2k对应的分辨率
    #define OSD_HEIGHT  1080 
    #endif

    发到框的数据要求是13位 
    其中:前四位是固定值IMW_U8  cmd_zoom_buf[]   = {0x55, 0xaa, 0x6d, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; 

    X1 X2 是转换后X坐标的低字节和高字节
    Y1 Y2 W1 W2 H1 H2同理 分别存放到数组 如下:
            cmd_zoom_buf[4] = LOW(ox);
            cmd_zoom_buf[5] = HIGH(ox);
            cmd_zoom_buf[6] = LOW(oy);
            cmd_zoom_buf[7] = HIGH(oy);
            cmd_zoom_buf[8] = LOW(ow);
            cmd_zoom_buf[9] = HIGH(ow);
            cmd_zoom_buf[10] = LOW(oh);
            cmd_zoom_buf[11] = HIGH(oh);
    最后一位就算校验和 数组0-12 的和加起来取低16位的值
            for(int i=0;i<13;i++){
                tmp = (tmp + cmd_zoom_buf[i]);
            }
            cmd_zoom_buf[12] = tmp&0xff;    
            write(touch_uart_fd,cmd_zoom_buf,13);        

    2:0x54和0x55
    0x55 是取消PC触摸缩放指令是固定值
    IMW_U8 reset_buf[] = {0x55, 0xaa, 0x55, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60};

    0x54 缩放指令就比较复杂,协议涉及到的缩放系数比较多,并且跟给过来的触摸协议解释不一致,需要调试才能找到规律。但最终还是要a b c d e f 这个几个系数写到触摸框
    a: x轴缩放系数要恒大于1
    b:固定为0
    c:缩放后的参数 x轴坐标
    d:固定为0
    e:y轴缩放系数 要恒大于1
    F:缩放后的参数 y轴坐标


    假设下面这个矩形就是屏幕
    原点坐标是左上角
    (0,0)

    当左下角的时候

    先确定缩放的系数是多少
    放大4096
    (4096*分辨率w)/w------ 这个值就是a
    (4096*分辨率h)/h ------- 这个值就是e
    接着确定缩放后相对于原点的坐标:因为原点在左上角 所以是负值
    x轴
    C = 0 - ((放大4096*x)/分辨率w)/a
    F= 0 - ((放大4096*y)/分辨率h)/e

  • 相关阅读:
    C51 - 定时器
    QImage相关
    mysql出现提示错误10061的解决方法
    【计算机组成原理】第一章单元测试
    当变速箱密封件损坏时会发生什么?
    [BUUCTF newstar week2] crypto/pwn/reverse
    java基于微信小程序的大学生心理测试 uniapp小程序
    基于Springboot+vue的学生毕业离校系统 elementui
    使用JavaMailSender进行邮件发送
    golang 中的go指针
  • 原文地址:https://blog.csdn.net/niaohaoge/article/details/126008113