/********************************************************************
函数功能:产生多点触摸事件。
入口参数: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); 不知道对不对
,请了解的帮忙看下
|