zoukankan      html  css  js  c++  java
  • 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;
                   }
  • 相关阅读:
    linux解压缩各种命令
    memset
    STRUCT_OFFSET( s, m )宏
    请问这个宏是什么意思 #define NOTUSED(v) ((void) v)?
    typedef特殊用法:typedef void* (*fun)(void*)
    localtime、localtime_s、localtime_r的使用
    Git使用(一)
    【转】linux gcc _attribute__((weak)) 简介及作用
    我的技术博客
    .net 4.0(2.0)“检测到有潜在危险的 Request.Form 值”的解决方法
  • 原文地址:https://www.cnblogs.com/zkp2010/p/5510748.html
Copyright © 2011-2022 走看看