首页 > 其他分享 >HID类的触摸屏TouchScreen描述符

HID类的触摸屏TouchScreen描述符

时间:2023-06-29 14:13:16浏览次数:40  
标签:TouchScreen 0x09 0x00 0x01 0x02 触摸屏 HID 0x81 0x75

 

 

本文主要分析触摸屏的报表描述符,设备、配置描述符和其他描述符就不赘述了,可以参考HID类的JoyStick描述符 - JayWell - 博客园 (cnblogs.com)

// 设备描述符
const uint8_t MyDevDescr[] = {0x12, 0x01, 0x10, 0x00, 0x00, 0x00, 0x00, 0x40,
                                0x00, 0x00, //厂商ID
                                0x00, 0x00, //产品ID
                                0x00, 0x00, 0x01, 0x02, 0x00, 0x01};
// 配置描述符
const uint8_t MyCfgDescr[] = {
    0x09, 0x02, 0x22, 0x00, 0x01, 0x01, 0x00, 0xA0, 0x20, //配置描述符
    0x09, 0x04, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, //接口描述符
    0x09, 0x21, 0x00, 0x01, 0x00, 0x01, 0x22, 0x86, 0x01, //HID类描述符
    0x07, 0x05, 0x81, 0x03, 0x40, 0x00, 0x01,             //端点描述符
};

触摸屏报表可以实现最多5指触控。

/*HID类报表描述符*/
const uint8_t TouchDesc[] = {
        0x05, 0x0d,  //Digitizers
        0x09, 0x04,  //Touch Screen
        0xa1, 0x01,

        0x85, 0x01,  //Report ID 01  <第0字节> 多手指共用同一个Teport ID
        0x09, 0x22,  //Useage finger      手指1  
        0xa1, 0x02,
        0x09, 0x42,  //Tip Switch
        0x15, 0x00,
        0x25, 0x01,
        0x75, 0x01,  //1位/段
        0x95, 0x01,  //1段
        0x81, 0x02,

        0x95, 0x07,  //填充7段
        0x81, 0x01,  //       <1字节>

        0x75, 0x08,  //8位/段
        0x09, 0x51,  //Contact Identifier
        0x95, 0x01,  //1段
        0x81, 0x02,  //       <2字节>

        0x05, 0x01,
        0x26, 0x00, 0x10,
        0x75, 0x10,  //16位/段*1
        0x55, 0x0e,
        0x65, 0x11,

        0x09, 0x30,  //X轴坐标
        0x35, 0x00,
        0x46, 0x79, 0x08,
        0x81, 0x02,  //         <4字节>

        0x26, 0x00, 0x10,
        0x46, 0x4c, 0x05,

        0x09, 0x31,  //Y轴坐标
        0x81, 0x02,  //         <6字节>

        0x05, 0x0d,  //宽度
        0x09, 0x48,
        0x81, 0x02,  //    <8字节>...  到此报表描述了第一根手指按下时的采集信息,接下来再同样的格式描述其他四根手指,没有手指按下时对应的8字节为0

        0xc0,

        0x09, 0x22,                   //手指2
        0xa1, 0x02,
        0x09, 0x42,
        0x15, 0x00,
        0x25, 0x01,
        0x75, 0x01,
        0x95, 0x01,
        0x81, 0x02,
        0x95, 0x07,
        0x81, 0x01,
        0x75, 0x08,
        0x09, 0x51,
        0x95, 0x01,
        0x81, 0x02,
        0x05, 0x01,
        0x26, 0x00, 0x10,
        0x75, 0x10,
        0x55, 0x0e,
        0x65, 0x11,
        0x09, 0x30,
        0x35, 0x00,
        0x46, 0x79, 0x08,
        0x81, 0x02,
        0x26, 0x00, 0x10,
        0x46, 0x4c, 0x05,
        0x09, 0x31,
        0x81, 0x02,
        0x05, 0x0d,
        0x09, 0x48,
        0x81, 0x02,
        0xc0,

        0x09, 0x22,                   //手指3
        0xa1, 0x02,
        0x09, 0x42,
        0x15, 0x00,
        0x25, 0x01,
        0x75, 0x01,
        0x95, 0x01,
        0x81, 0x02,
        0x95, 0x07,
        0x81, 0x01,
        0x75, 0x08,
        0x09, 0x51,
        0x95, 0x01,
        0x81, 0x02,
        0x05, 0x01,
        0x26, 0x00, 0x10,
        0x75, 0x10,
        0x55, 0x0e,
        0x65, 0x11,
        0x09, 0x30,
        0x35, 0x00,
        0x46, 0x79, 0x08,
        0x81, 0x02,
        0x26, 0x00, 0x10,
        0x46, 0x4c, 0x05,
        0x09, 0x31,
        0x81, 0x02,
        0x05, 0x0d,
        0x09, 0x48,
        0x81, 0x02,
        0xc0,


        0x09, 0x22,                   //手指4
        0xa1, 0x02,
        0x09, 0x42,
        0x15, 0x00,
        0x25, 0x01,
        0x75, 0x01,
        0x95, 0x01,
        0x81, 0x02,
        0x95, 0x07,
        0x81, 0x01,
        0x75, 0x08,
        0x09, 0x51,
        0x95, 0x01,
        0x81, 0x02,
        0x05, 0x01,
        0x26, 0x00, 0x10,
        0x75, 0x10,
        0x55, 0x0e,
        0x65, 0x11,
        0x09, 0x30,
        0x35, 0x00,
        0x46, 0x79, 0x08,
        0x81, 0x02,
        0x26, 0x00, 0x10,
        0x46, 0x4c, 0x05,
        0x09, 0x31,
        0x81, 0x02,
        0x05, 0x0d,
        0x09, 0x48,
        0x81, 0x02,
        0xc0,

        0x09, 0x22,                   //手指5
        0xa1, 0x02,
        0x09, 0x42,
        0x15, 0x00,
        0x25, 0x01,
        0x75, 0x01,
        0x95, 0x01,
        0x81, 0x02,
        0x95, 0x07,
        0x81, 0x01,
        0x75, 0x08,
        0x09, 0x51,
        0x95, 0x01,
        0x81, 0x02,
        0x05, 0x01,
        0x26, 0x00, 0x10,
        0x75, 0x10,
        0x55, 0x0e,
        0x65, 0x11,
        0x09, 0x30,
        0x35, 0x00,
        0x46, 0x79, 0x08,
        0x81, 0x02,
        0x26, 0x00, 0x10,
        0x46, 0x4c, 0x05,
        0x09, 0x31,
        0x81, 0x02,
        0x05, 0x0d,
        0x09, 0x48,
        0x81, 0x02,
        0xc0,

        0x05, 0x0d,
        0x27, 0xff, 0xff, 0x00, 0x00,
        0x75, 0x10,  //16位/段
        0x95, 0x01,  //1段
        0x09, 0x56,  //Scan Time   占用报表尾部的2个字节
        0x81, 0x02,

        0x09, 0x54,  //Contact Count  占用报表尾部最后1个字节
        0x15, 0x00,
        0x25, 0x7f,
        0x95, 0x01,  //1段
        0x75, 0x08,  //8位/段
        0x81, 0x02,

        0x85, 0x02,  //Report ID 02
        0x09, 0x55,  //Contact Count Maximum
        0x95, 0x01,  //1段
        0x25, 0x0a,
        0xb1, 0x02,

        0x85, 0x03,  //report id 03
        0x06, 0x00, 0xff,  //Vendor Usage Page
        0x09, 0xc5,  //Vendor Usage
        0x15, 0x00,
        0x26, 0xff, 0x00,
        0x75, 0x08,  //8位/段
        0x96, 0x00, 0x01,  //1段
        0xb1, 0x02,
        0xc0,
};

 根据报表描述符,可以推测出触摸屏检测到手指按下时上传的报表格式。以下测试代码可以实现再WIN11电脑上显示点击屏幕的光圈,屏幕左上角有两指点击效果。

 

int main()
{
    SetSysClock(CLK_SOURCE_PLL_60MHz);

    DebugInit();
    PRINT("start\n");

    pEP0_RAM_Addr = EP0_Databuf;
    pEP1_RAM_Addr = EP1_Databuf;
    pEP2_RAM_Addr = EP2_Databuf;
    pEP3_RAM_Addr = EP3_Databuf;

    USB_DeviceInit();

    PFIC_EnableIRQ(USB_IRQn);
    mDelaymS(3000);
    while(1)
    {
        char report_array[44] = {0x01,  //report id
                0x01,   //是否按下
                0x00,   //手指编号,从0开始
                0x64, 0x00, //X轴坐标
                0x64, 0x00, //Y轴坐标
                0x30, 0x00, //宽度(单位同X轴)    //手指1
                0x01, 0x01, 0x00, 0x01, 0x00, 0x01, 0x30, 0x00,
                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,//手指5
                0x01, 0x01, 0x02,       //扫描时间、手指按下个数
        };

        mDelaymS(100);
        TouchReport(report_array, sizeof report_array);

        memset(report_array+1, 0, 43);
        mDelaymS(300);
        TouchReport(report_array, sizeof report_array);  //模拟手指离开屏幕
    }
}

 

标签:TouchScreen,0x09,0x00,0x01,0x02,触摸屏,HID,0x81,0x75
From: https://www.cnblogs.com/JayWellsBlog/p/17514079.html

相关文章

  • BOSHIDA DC电源模块低温试验检测详细分析
    BOSHIDADC电源模块低温试验检测详细分析DC电源模块的低温试验是电源应用领域中的一项重要测试,它可以检测模块在低温环境下的性能表现是否与设计要求相符。这是因为在一些极端环境下,电源模块的性能会受到影响,从而影响整个系统的运行稳定性和可靠性。因此,对DC电源模块的低温试验检......
  • PLC触摸屏高低温控制系统如何远程监控并在故障时自动报警?
    随着工业经济与技术的飞速发展,目前自动化已经应用在工业的多个场景内,PLC的推广应用是工业自动化的重要动力。在工业生产中,温度是一项关键工艺参数,事关设备运行状态、产品工艺品质、现场生产环境等,需要将温度数据采集起来进行监控,以便于对生产进行更精准、更及时的管理与控制。结合P......
  • 恒压供水一拖二(程序图纸) 1.采用西门子224xp plc ,昆仑通态触摸屏
    恒压供水一拖二(程序图纸)1.采用西门子224xpplc,昆仑通态触摸屏;2.适用于大小功率,工变频互锁控制,安全,可靠;3.西门子224xpplc模拟量输出调速,适用市场所有变频器;4.采用双PID段数,恒压更快速,系统更稳定;7.此程序也可以用做一拖二一对一使用,懂得改下电路就可以,实现多重选择;原创文章,......
  • BOSHIDA DC电源模块输入电压与体积的关系
    BOSHIDADC电源模块输入电压与体积的关系DC电源模块是一种将交流电转换为直流电的电源设备,可以为各种家庭电器和电子设备提供稳定的直流电供电。输入电压是DC电源模块最基本的参数,也是使用者最需要关注的参数之一,因为它能决定这个设备的适用范围。在选择DC电源模块时,通常需要根据......
  • BOSHIDA DC电源模块在PLC控制器中的应用
    BOSHIDADC电源模块在PLC控制器中的应用DC电源模块广泛应用于PLC控制器中,主要用于提供稳定的直流电源给控制器的各个部件,包括CPU、输入/输出模块、通讯模块等。 在PLC控制器中,DC电源模块通常作为控制器的一个模块,不同型号的控制器可能有不同的DC电源模块,但是它们的主要功能都......
  • 欧姆龙OMRON PLC程序,威纶触摸屏螺丝机 配方程序。 用ST语言编
    欧姆龙OMRONPLC程序,威纶触摸屏螺丝机配方程序。用ST语言编写程序+威纶触摸屏程序。触摸屏带催款功能,转给学习自动化控制的盆友参考运用。实用于CJ2M,CP1HPLCID:7929609799920477......
  • 昆仑通态触摸屏通讯ABB变频器恒压供水(一拖二) 1.采用ABB变
    昆仑通态触摸屏通讯ABB变频器恒压供水(一拖二)1.采用ABB变频器Acs510自带恒压供水功能;2.用昆仑通态触摸屏直接通讯变频器;3.变频器自身自带供水功能,省去plc,节约成本,稳定,可靠;4.里面含大部分通讯协议,适用一拖二,参数设置直接载入,减少变频器参数设置麻烦;5.如下图;需要学习的可参考ID......
  • 西门子1200PLC和KTP700触摸屏控制西门子V90伺服电机例子程序 程序简介
    西门子1200PLC和KTP700触摸屏控制西门子V90伺服电机例子程序程序简介:可以实现V90伺服电机的正转、反转控制,相对位置和绝对位置运行,设置电机的当前位置、速度,显示电机的运行状态等功能,5000个脉冲对应一圈,参数设定和显示单位是脉冲硬件平台:西门子S7-1200PLC(CPU1215C)+KTP700触摸屏+......
  • 西门子S7-1200PLC和KTP700触摸屏控制步进程序 西门子S7-1200P
    西门子S7-1200PLC和KTP700触摸屏控制步进程序西门子S7-1200PLC和KTP700触摸屏控制步进电机运动控制程序3;博途V13.1可以实现步进电机的正转、反转控制,相对和绝对位置运动,显示电机的当前位置、速度和运行状态ID:5220607120190854......
  • 西门子s7 200smart与台达变频器485通讯 目标:用触摸屏和西门子sm
    西门子s7200smart与台达变频器485通讯目标:用触摸屏和西门子smart控制变频器通讯器件:西门子s7200smartPLC,台达VFD-M变频器,昆仑通态触摸屏(带以太网),中途可以加路由器控制方式:触摸屏与plc以太网通讯,PLC与变频器通讯485口相连功能:触摸屏控制变频器设定频率,启停,读取输出频率,电流,......