求助大神帮忙,我用的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);
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>