打印
[圈圈教你玩USB]

USB触摸屏设备单击,双击,右键报告怎么实现

[复制链接]
5661|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jiayu_daemon|  楼主 | 2017-4-20 11:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
学习了《圈圈教你玩usb 第二版》的第11章,有疑问,想知道,usb触摸屏 单击,双击,右键的 报告怎么实现。

圈圈的代码,主要实现了鼠标的移动。
/********************************************************************
函数功能:产生多点触摸事件。
入口参数:x:x轴坐标数组;y:y轴坐标数组;
          s:状态数组,例如是否触摸,是否有效;n:触摸的点数。
返    回:无。
备    注:无。
********************************************************************/
void MultiPointReport(uint16_t *x, uint16_t *y, uint8_t *s, uint8_t n)
{
        uint8_t i;
  uint8_t ReportBuf[14]; //总共为14字节,第1字节为报告ID。
  //第2字节为第一点状态,第3字节为第一点的触摸ID号;
  //第4、5字节为第一点x轴,第6、7字节为第一点y轴;
  //第8字节为第二点状态,第9字节为第二点的触摸ID号;
  //第10、11字节为第二点x轴,第12、13字节为第二点y轴;
  //第14字节为当前触摸的点数。我们定义的报告中,每次只能
  //发送2个点,如果超过两个点,则另外再增加额外的报告,
  //这时额外的报告的触摸点数都要设置为0。
  if(n == 0)
                return;
  if(n > MAX_TOUCH_POINT) //如果超过最大支持的点数,则只发送最多点数
  {
     n = MAX_TOUCH_POINT;
  }
  ReportBuf[0] = REPORTID_MTOUCH; //多点报告的报告ID为REPORTID_MTOUCH
  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
                {
                        uint8_t j;
                        for(j = 7; j < 13; j++)
                        {
                                ReportBuf[j] = 0;
                        }
                }
                //
                USBD_TOUCH_SendReport(&USB_Device_dev,ReportBuf,sizeof(ReportBuf));
}

}

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

2

帖子

0

粉丝