• 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

  • 相关阅读:
    vscode代码拼写错误检测插件
    哈工大-公差基础-配合(互换性和测量基础)-3
    基于Java的驾校收支管理可视化平台设计与实现(源码+lw+部署文档+讲解等)
    [游戏开发][UE5]引擎学习记录
    【AntDesign】多环境配置和启动
    【洛谷 P1518】[USACO2.4] 两只塔姆沃斯牛 The Tamworth Two 题解(模拟+循环)
    kube-apiserver限流机制原理
    使用Flink的各种技术实现WordCount逻辑
    WMS仓储管理系统在电商领域的应用与影响
    XA分布式事务处理
  • 原文地址:https://blog.csdn.net/niaohaoge/article/details/126008113