打印

GD407 USB模拟多点触控

[复制链接]
699|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
shanzhihun|  楼主 | 2020-11-4 16:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/********************************************************************
函数功能:产生多点触摸事件。
入口参数: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] = {0}; //总共为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;
        }                               
            
        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
        {
            for(uint8_t j = 7; j < 13; j++)
            {
                ReportBuf[j] = 0;
            }
        }
        i ++;      

                                  custom_hid_report_send (&usbhs_core_dev, ReportBuf, 14);
    }
                 delay_1ms(20);
}

//////////////////////////////////////
uint8_t  custom_hid_report_send (usb_core_handle_struct *pudev, uint8_t *report, uint16_t len)
{
    usbd_ep_tx (pudev, CUSTOMHID_IN_EP, report, len);

    return USBD_OK;
}
/////////////////////////////////////
  /* check if USB device is enumerated successfully */
    while (usbhs_core_dev.dev.status != USB_STATUS_CONFIGURED) {
    }

    while (1)
                        {

                                   for(x=1000;x<3996;x+=10)
                                         {         
                                                 mtx[0]=x; mty[0]=1300; mts[0]=MULTI_TOUCH_DOWN;
                                                 mtx[1]=x; mty[1]=1600; mts[1]=MULTI_TOUCH_DOWN;
                                                 mtx[2]=x; mty[2]=1900; mts[2]=MULTI_TOUCH_DOWN;
                                                 MultiPointReport(mtx, mty, mts, 3);
                                                 delay_1ms(10);
                                         }       

                        }   

USB  多点都识别出来了,但是我想让光标移动,为什么没反应呢,
这个函数                                  custom_hid_report_send (&usbhs_core_dev, ReportBuf, 14);  不知道对不对
,请了解的帮忙看下

使用特权

评论回复
沙发
liangshuang95| | 2020-11-5 14:02 | 只看该作者
没玩过,帮顶一下。

使用特权

评论回复
板凳
zeshoufx| | 2020-11-5 14:10 | 只看该作者
谢谢分享【USB模拟多点触控】

使用特权

评论回复
地板
lvben5d| | 2020-11-5 15:37 | 只看该作者
触摸后,中断MCU,MCU读取触摸芯片给的坐标数值可以出来了吗?  然后就是塞入USB的对应发送EP的 TX FIFO  

使用特权

评论回复
5
lxb_gd| | 2020-11-10 09:06 | 只看该作者
有偿提供帮助,需要开发触摸HID设备请联系: QQ 1103052187

使用特权

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

本版积分规则

13

主题

41

帖子

2

粉丝