WIN7下USB多点触摸,一次发多个数据包的延迟问题,重要!

Posted 机械狂魔

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WIN7下USB多点触摸,一次发多个数据包的延迟问题,重要!相关的知识,希望对你有一定的参考价值。

这个问题很常见, 花了差不多一个星期时间来解决。硬件相关的东西太多坑了,而且这些坑不像代码那样可见。
 
使用混合模式,每次最多报告2个点。如果是5点则需要上报三次。
问题就来了,atmel的CTP最块报点是3ms,3点以上就很卡。
发送USB数据总是没准备好,导致发送不成功,要等好几十ms才能继续发送。
最后发现端点的查询时间设置为32ms,改为10ms果然好狠多,再改为5ms,1ms都没有问题。
WIN7下不用考虑省电,直接1ms查询间隔就好。
 
配置描述符的端点描述符
    /* 27 */
    0x07,          /*bLength: Endpoint Descriptor size*/
    USB_ENDPOINT_DESCRIPTOR_TYPE, /*bDescriptorType:*/

    0x81,          /*bEndpointAddress: Endpoint Address (IN)*/
    0x03,          /*bmAttributes: Interrupt endpoint*/
     0x0e ,          /*wMaxPacketSize: 14 Byte max */
    0x00,
    0x01,          /*bInterval: Polling Interval (32 ms)*/
    /* 34 */
  }

 

但3,4个点还会超时不响应中断怎么办?因为要报告两次,代码设置延迟已经是2ms,加上一对代码,绝对超过3ms。
故把分成2个数据包上报时那个延迟从1ms下降到500us如下:
           
 else //其它包,设置为0
            {
                    delay_us(500);
                 ReportBuf[13] = 0;
            }

 

 
最后还是不能5个点,5个点直接乱报。看来是真正的固件不支持5点了,那就只读4个点吧
 
     for(i=0;i<4;i++)
          {
          if(finger[i].x>4095 ||finger[i].y>4095)
               {
               break;
               }

以上是关于WIN7下USB多点触摸,一次发多个数据包的延迟问题,重要!的主要内容,如果未能解决你的问题,请参考以下文章

USB HID多点触控串行报告

sis9280触摸ic 基于rk3288 的安卓4.4的 多点触摸

欧姆龙NB系列触摸屏第一次连接无法安装驱动gadget serial v2.4怎么办?系统是64位WIN7。用USB连接线

WPF中的多点触摸事件

WPF 多点触摸开发[2]:WPF触摸的几个手势的执行顺序

多点触摸屏——电容屏驱动程序