用VC++实现USB接口读写数据的程序

上传人:z**** 文档编号:113638310 上传时间:2022-06-26 格式:DOC 页数:3 大小:25KB
返回 下载 相关 举报
用VC++实现USB接口读写数据的程序_第1页
第1页 / 共3页
用VC++实现USB接口读写数据的程序_第2页
第2页 / 共3页
用VC++实现USB接口读写数据的程序_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述
用VC+实现USB接口读写数据的程序用VC+实现USB接口读写数据的程序使用一个GUIDguidHID_l查找并打开一个USB设备externCintPASCALSearchUSBDevice()HANDLEhUsb;intnCount,i,j;/标记同一设备个数HDEVINFOhDevInfoSet;BOOLbResult;PSP_DEVICE_INTERFACE_DETAIL_DATApDetail=NULL;memset(m_sysversion,0,20);GetSysVersion(m_sysversion);/检索相关GUID的USB设备总设备个数if(!GetUSBList()return0;/取得一个该GUID相关的设备信息集句柄hDevInfoSet=:SetupDiGetClassDevs(LPGUID)&guidHID_l,/GUID_CLASS_USB_DEVICE,/classGUIDNULL,/无关键字NULL,/不指定父窗口句柄DIGCF_PRESENT|DIGCF_DEVICEINTERFACE);/目前存在的设备/失败if(hDevInfoSet=INVALID_HANDLE_VALUE)returnNULL;/申请设备接口数据空间nCount=0;bResult=TRUE;for(i=0;i34;i+)bDeviceOpen=FALSE;memset(m_DeviceDesc,0,256);SP_DEVICE_INTERFACE_DATAifdata;/设备序号=0,1,2.逐一测试设备接口,到失败为止while(bResult)ifdata.cbSize=sizeof(ifdata);/枚举符合该GUID的设备接口bResult=:SetupDiEnumDeviceInterfaces(hDevInfoSet,/设备信息集句柄NULL,/不需额外的设备描述(LPGUID)&guidHID_1,/GUID_CLASS_USB_DEVICE,/GUID(ULONG)nCount,/设备信息集里的设备序号&ifdata);/设备接口信息辻(bResult)ULONGpredictedLength=0;ULONGrequiredLength=0;/取得该设备接口的细节设备路径)bResult=SetupDiGetInterfaceDeviceDetail(hDevInfoSet,/设备信息集句柄&ifdata,/设备接口信息NULL,/设备接口细节(设备路径)0,/输出缓冲区大小&requiredLength,/不需计算输出缓冲区大小直接用设定值NULL);/不需额外的设备描述/取得该设备接口的细节设备路径)predictedLength二requiredLength;/if(pDetail)/pDetail=NULL;/pDetail=(PSP_INTERFACE_DEVICE_DETAIL_DATA):GlobalAlloc(LMEM_ZEROINIT,predictedLength);pDetail-cbSize=sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);bResult=SetupDiGetInterfaceDeviceDetail(hDevInfoSet,/设备信息集句柄&ifdata,/设备接口信息pDetail,/设备接口细节(设备路径)predictedLength,/输出缓冲区大小&requiredLength,/不需计算输出缓冲区大小直接用设定值NULL);/不需额外的设备描述f(bResult)/复制设备路径到输出缓冲区/:strcpy(pszDevicePathnCount,pDetail-DevicePath);if(strcmp(m_sysversion,winnt)=O)charch18;for(i=0;i17;i+)ch=*(pDetail-DevicePath+8+i);ch17=0;f(strcmp(ch,vid_0471&pid_0666)=0)比较版本号,防止意外出错memset(&READ_OS,0,sizeof(OVERLAPPED);memset(&WRITE_OS,0,sizeof(OVERLAPPED);READ_OS.hEvent二CreateEvent(NULL,/nosecurityTRUE,/explicitresetreqFALSE,/initialeventresetNULL);/nonamef(READ_OS.hEvent=NULL)break;WRITE_OS.hEvent二CreateEvent(NULL,/nosecurityTRUE,/explicitresetreqFALSE,/initialeventresetNULL);/nonamef(NULL=WRITE_OS.hEvent)CloseHandle(READ_OS.hEvent);break;hUsb=CreateFile(pDetail-DevicePath,/&guidHID_l,/GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL/*|FILE_FLAG_OVERLAPPED*/,NULL);f(hUsb!=NULL)/比较定位找到的USB在哪个USBPORT上charid30;memset(id,0,30);i=0;doid=*(pDetail-DevicePath+26+i);i+;while(id!二#);id=0;for(j=0;j34;j+)if(strcmp(id,m_USBListj)=0)sprintf(m_DeviceDescj+l,%s,pDetail-DevicePath);m_USBPositionMapnCount二j+1;break;CloseHandle(hUsb);nCount+;/break;/比较驱动版本/比较操作系统版本elsememset(&READ_0S,0,sizeof(OVERLAPPED);memset(&WRITE_0S,0,sizeof(OVERLAPPED);READ_0S.hEvent二CreateEvent(NULL,/nosecurityTRUE,/explicitresetreqFALSE,/initialeventresetNULL);/nonamef(READ_0S.hEvent=NULL)break;WRITE_0S.hEvent二CreateEvent(NULL,/nosecurityTRUE,/explicitresetreqFALSE,/initialeventresetNULL);/nonamef(NULL=WRITE_OS.hEvent)CloseHandle(READ_OS.hEvent);break;hUsb=CreateFile(pDetail-DevicePath,/&guidHID_l,/GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL/*|FILE_FLAG_OVERLAPPED*/,NULL);f(hUsb!=NULL)if(strcmp(pDetail-DevicePath,m_USBListj)=O)sprintf(m_DeviceDescj+l,%s,pDetail-DevicePath);m_USBPositionMapnCount二j+1;break;CloseHandle(hUsb);nCount+;/break;/释放设备接口数据空间:GlobalFree(pDetail);/关闭设备信息集句柄:SetupDiDestroyDevicelnfoList(hDevInfoSet);iDeviceCount二nCount;returnnCount;/写BOOLWritestr(char*buf,intbuflen,intindex)BOOLfWriteStat;DWORDdwErrorFlags;DWORDdwError;COMSTATComStat;charszError10;DWORDret;intlen,i,j,packet;div_tdiv_result;BYTEsendpacket65;BYTExorcode二0x00;if(m_gphdComindex=NULL)/nousbdevice(jkl00c)returnT;div_result二div(buflen,58);if(div_result.rem=0)packet二div_result.quot;elsepacket二div_result.quot+1;for(i=0;i0)wsprintf(szError,nr,dwErrorFlags);OutputDebugString(szError);else/someothererroroccurredClearCommError(m_gphdComindex,&dwErrorFlags,&ComStat);if(dwErrorFlags0)wsprintf(szError,nr,dwErrorFlags);OutputDebugString(szError);returnFALSE;if(i!=packet-1)/shouldbereceiveackif(ReceivePacketAnswer(index)!=0)returnFALSE;returnTRUE;/读intReadstr(char*buf,intnMaxLength,intindex)BOOLfReadStat;COMSTATComStat;DWORDdwErrorFlags;DWORDdwLength;DWORDdwError;charszError10;辻(fCOMMOpened=O)returnFALSE;/串口未打开/onlytrytoreadnumberofbytesinqueueClearCommError(m_gphdComindex,&dwErrorFlags,&ComStat);/dwLength=min(DWORD)nMaxLength,ComStat.cblnQue);dwLength二nMaxLength;辻(dwLength0)辻(olap=TRUE)fReadStat二ReadFile(m_gphdComindex,buf,dwLength,&dwLength,&READ_OS)辻(!fReadStat)辻(GetLastError()=ERROR_IO_PENDING)OutputDebugString(nrIOPending);while(!GetOverlappedResult(m_gphdComindex,&READ_OS,&dwLength,TRUE)dwError=GetLastError();f(dwError=ERROR_IO_INCOMPLETE)continue;else/anerroroccurred,trytorecoverClearCommError(m_gphdComindex,&dwErrorFlags,&ComStat);break;else/endf(GetLastError()=ERROR_IO_PENDING)/someothererroroccurreddwLength=0;ClearCommError(m_gphdComindex,&dwErrorFlags,&ComStat);if(dwErrorFlags0)wsprintf(szError,nr,dwErrorFlags);OutputDebugString(szError);/endf(!fReadStat)/endif(olap=TRUE)elsefReadStat二ReadFile(m_gphdComindex,buf,dwLength,&dwLength,NULL)f(!fReadStat)dwError=GetLastError();ClearCommError(m_gphdComindex,&dwErrorFlags,&ComStat);if(dwErrorFlags0)wsprintf(szError,nr,dwErrorFlags);OutputDebugString(szError);PurgeComm(m_gphdComindex,PURGE_RXCLEAR|PURGE_TXCLEAR);returndwLength;
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 活动策划


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!