USB多点触摸枚举成功,无法通信,求各位帮帮忙

2019-08-16 18:46发布

求助大神帮忙,我用的mini板,报告描述符用的电脑圈圈的多点触摸报告描述符,已经枚举成功,win7下弹出了 笔势 图标,可是一发送数据就会进入err中断,然后reset,我是在触控鼠标实验上修改的,usb_prop.c 中 data_setup()中加了set_report  get_report 的散转,还修改了report描述符,之前用bus hound抓包的时候,发现set_IDEL后面有个stall_pid,就在nodata_setup()中加了 set_idel 的散转
extern __IO uint8_t PrevXferComplete;
RESULT Joystick_SetIdle()
{
        if(pInformation->USBwValue==0x00)
        {
                PrevXferComplete=0;
        }
        return USB_SUCCESS;
}



报告描述符中定义了三个报告,第一个是单点报告,第二个是多点触摸的报告,第三个是特性报告,主机set_report 发送03 02 00 到设备,设置为多点触摸,多点触摸报告中需要 IN 14 个字节(包含一字节报告ID)
发送数据的函数,
void MulTouch_Send(u16 *x,u16 *y,u8 *s,u8 n)
{
        u8 i;
u8 ReportBuf[14];

if(n == 0) return;
if(n > MAX_TOUCH_POINT) //如果超过最大支持的点数,则只发送最多点数
{
  n = MAX_TOUCH_POINT;
}
ReportBuf[0] = 0x02;
for(i = 0; i < n;) //分别发送各个点
{
  ReportBuf[1] = s[i]; //状态
  ReportBuf[2] = i + 1; //ID号
  ReportBuf[3] = x[i] & 0xFF; //X轴低8位
  ReportBuf[4] = (x[i] >> 8) & 0xFF; //X轴高8位
  ReportBuf[5] = y[i] & 0xFF; //Y轴低8位
  ReportBuf[6] = (y[i] >> 8) & 0xFF; //Y轴高8位
  if(i == 0) //第一个包
  {
   ReportBuf[13] = n; //触摸的点数
  }
  else //其它包,设置为0
  {
   ReportBuf[13] = 0;
  }
  i ++;
  if(i < n) //还有数据需要发送
  {
   ReportBuf[7] = s[i]; //状态
   ReportBuf[8] = i + 1; //ID号
   ReportBuf[9] = x[i] & 0xFF; //X轴低8位
   ReportBuf[10] = (x[i] >> 8) & 0xFF; //X轴高8位
   ReportBuf[11] = y[i] & 0xFF; //Y轴低8位
   ReportBuf[12] = (y[i] >> 8) & 0xFF; //Y轴高8位
   i ++;
  }
  else //没有更多的数据需要发送,后面的清0
  {
   u8 j;
   for(j = 7; j < 13; j++)
   {
    ReportBuf[j] = 0;
   }
  }
                /*while(PrevXferComplete==0)
                {
                        m++;
                        if(m>5000) return;
                }*/
                //PrevXferComplete=0;
                /* Copy mouse position info in ENDP1 Tx Packet Memory Area*/
                USB_SIL_Write(EP1_IN, ReportBuf,64);
                /* Enable endpoint for transmission */
                SetEPTxValid(ENDP1);               
        }       

}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。