OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2525|回复: 3

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

[复制链接]

1

主题

4

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2017-7-7
在线时间
12 小时
发表于 2017-7-25 11:48:48 | 显示全部楼层 |阅读模式
10金钱
求助大神帮忙,我用的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);               
        }       

}

QQ截图20170725112907.png

最佳答案

查看完整内容[请看2#楼]

已解决,修改了两个地方,一是 设备描述符中的协议和hid描述符 hid协议都修改成 0x10 0x01, 二是hid描述符中的下级描述符修改为0x03
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

4

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2017-7-7
在线时间
12 小时
 楼主| 发表于 2017-7-25 11:48:49 | 显示全部楼层
已解决,修改了两个地方,一是 设备描述符中的协议和hid描述符 hid协议都修改成 0x10 0x01,
二是hid描述符中的下级描述符修改为0x03
回复

使用道具 举报

1

主题

4

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2017-7-7
在线时间
12 小时
 楼主| 发表于 2017-7-25 13:41:44 | 显示全部楼层
求助各位大佬啊
回复

使用道具 举报

15

主题

338

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1269
金钱
1269
注册时间
2016-3-16
在线时间
280 小时
发表于 2017-7-29 09:31:03 | 显示全部楼层
楼主可以把程序共享一下吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-4-19 16:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表