首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > windows >

基于windows7的usb多点触控装置

2013-09-26 
基于windows7的usb多点触控设备前段时间,朋友要做一个windows7的usb多点触控设备,我就帮了个小忙,负责搞定

基于windows7的usb多点触控设备


前段时间,朋友要做一个windows7的usb多点触控设备,我就帮了个小忙,负责搞定了设备 与PC通信相关的这块。整个项目我做了两个东西,一是下位机的usb设备描述符,一个是上位机的测试软件,下面我会把这两个过程都写一下,跟大家共享!!!

一、下位机部分

我仔细查了不少关于windows7的usb多点触控设备的资料,这里先跟大家共享一下

http://blog.csdn.net/cazicaquw/article/details/6771582

http://blog.csdn.net/yunwen3344/article/details/8107439

http://msdn.microsoft.com/en-us/windows/hardware/gg487437.aspx

http://msdn.microsoft.com/en-us/library/ff553745(v=vs.85).aspx

http://msdn.microsoft.com/library/windows/hardware/jj248722.aspx

http://msdn.microsoft.com/en-us/library/windows/hardware/dn383592.aspx

我主要参考的是微软官方的几个网址,大家多点一下旁边的选项有很多资料在里面,这里并没有全贴出来。

对于这个项目来讲,首先要知道usb的枚举过程以及usb描述符的意义,这个网上有太多的教程了,我也是现学的不敢卖弄,大家可以百度一下。

下面我们讲主要的:

硬件平台: stm32f103ZE

软件平台:keil MDK-ARM 4.70.0.0

为了开发方便我们找了keil官方带的usb工程,在这个工程上修改,减少了不小的工作量。如果大家跟我装同一个版本的话应该都可以找到这个工程。这个工程是一个自定义的HID设备,我们所要做的就是在这个工程基础上,把自定义HID设备的描述符改成多点触控的描述符。

描述符在usbdesc.c这个文件中,我们修改的仅仅是设备描述符,其他的都不用动。直接贴修改后的描述符:


基于windows7的usb多点触控装置

这时候可以打开控制面板 ,并且以图标方式显示, 看是否有 “笔和触摸”这个选项。如下图

基于windows7的usb多点触控装置

基于windows7的usb多点触控装置

 在开始菜单的搜索框中输入 “笔和触摸” 看能否搜索出相同的选项。打开这个选项卡,勾上 “在通知区域显示比势图标” 然后确定

基于windows7的usb多点触控装置

基于windows7的usb多点触控装置

这个时候再任务栏的右下角应该可以看到这个图标基于windows7的usb多点触控装置 基于windows7的usb多点触控装置

此时说明设备已经识别成功了,下面是发送触摸的数据包,

BOOL CTouchDlg::OnTouchInputMove(PTOUCHINPUT pInputs){CDC* pDC = GetDC();pDC->SelectObject(&m_pen);POINT point;point.x=pInputs->x/100;point.y=pInputs->y/100;for(int i=0;i<4;i++){if(m_CurrentPoint[i]==pInputs->dwID){pDC->MoveTo(m_OldPoint[i]);pDC->LineTo(point);m_OldPoint[i]=point;}}ReleaseDC(pDC);return TRUE;}BOOL CTouchDlg::OnTouchInputDown(PTOUCHINPUT pInputs){POINT point;point.x=pInputs->x/100;point.y=pInputs->y/100;for(int i=0;i<4;i++){if((m_nPointNum & (1<<i))==0 ){m_CurrentPoint[i]=pInputs->dwID;//保存当前点的IDm_OldPoint[i]=point;//保存当前点位置m_nPointNum |= (1<<i);//保存点标志break;}}CString str;str.Format("PtFlag:%d %d %d %d %d",m_nPointNum,m_CurrentPoint[0],m_CurrentPoint[1],m_CurrentPoint[2],m_CurrentPoint[3]);this->GetDlgItem(IDC_STATI1_DD)->SetWindowTextA(str);return TRUE;}BOOL CTouchDlg::OnTouchInputUp(PTOUCHINPUT pInputs){for(int i=0;i<4;i++){if(m_CurrentPoint[i]==pInputs->dwID){m_CurrentPoint[i]=0;m_nPointNum &=( ~(1<<i));}}CString str;str.Format("PtFlag:%d %d %d %d %d",m_nPointNum,m_CurrentPoint[0],m_CurrentPoint[1],m_CurrentPoint[2],m_CurrentPoint[3]);this->GetDlgItem(IDC_STATI1_DD)->SetWindowTextA(str);return TRUE;}

到了这里,这个程序已经可以完成最多4点画线,显示多点触摸事件的功能了。







热点排行