版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、文档编码 : CM5N7B4Q2S5 HN3E10T10S8L5 ZQ1O4V5X1G10使用一个 GUIDguidHID_1 查找并打开一个 USB设备 extern C int PASCAL SearchUSBDevice HANDLE hUsb; int nCount, i, j;/ 标记同一设备个数 HDEVINFO hDevInfoSet; BOOL bResult; PSP_DEVICE_INTERFACE_DETAIL_DATA pDetail =NULL; memsetm_sysversion, 0, 20; GetSysVersionm_sysversion; / 检索相关
2、GUID的 USB设备总设备个数 if .GetUSBList return 0; / 取得一个该GUID相关的设备信息集句柄hDevInfoSet = :SetupDiGetClassDevsLPGUID&guidHID_1,/GUID_CLASS_USB_DEVICE, / class GUI D NULL, / 无关键字 NULL, / 不指定父窗口句柄 DIGCF_PRESENT | DIGCF_DEVICEINTERFACE; / 目前存在的设备/ 失败 . if hDevInfoSet = INVALID_HANDLE_VALUE return NULL; / 申请设备接口数据空间
3、nCount = 0; bResult = TRUE; for i=0; icbSize = sizeofSP_DEVICE_INTERFACE_DETAIL_DATA; bResult = SetupDiGetInterfaceDeviceDetail hDevInfoSet, / 设备信息集句柄&ifdata, / 设备接口信息pDetail, / 设备接口细节 设备路径 predictedLength, / 输出缓冲区大小&requiredLength, / 不需运算输出缓冲区大小 直接用设定值 NULL; / 不需额外的设备描述if bResult / 复制设备路径到输出缓冲区 /:s
4、trcpypszDevicePathnCount, pDetail-DevicePath; if strcmpm_sysversion, winnt=0 char ch18; fori=0;iDevicePath+8+i; ch17=0; if strcmpch,vid_0471&pid_0666=0/ 比较版本号,防止意外出错 memset &READ_OS, 0, sizeof OVERLAPPED ; memset &WRITE_OS, 0, sizeof OVERLAPPED ; READ_OS.hEvent = CreateEvent NULL, / no security TRUE
5、, / explicit reset req FALSE, / initial event reset NULL ; / no name if READ_OS.hEvent = NULL break; WRITE_OS.hEvent = CreateEvent NULL, / no security TRUE, / explicit reset req FALSE, / initial event reset NULL ; / no name if NULL = WRITE_OS.hEvent CloseHandle READ_OS.hEvent ; break; hUsb=CreateFil
6、epDetail-DevicePath,/&guidHID_1,/ GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL/*| FILE_FLAG_OVERLAPPED*/, NULL; if hUsb .= NULL / 比较定位找到的USB在哪个 USB PORT上char id30; memsetid, 0, 30; i=0; do idi=*pDetail-DevicePath+26+i; i+; whileidi-1.=#; id
7、i-1 = 0; for j=0; jDevicePath; m_USBPositionMapnCount = j+1; break; CloseHandlehUsb; nCount+; / break; / 比较驱动版本 / 比较操作系统版本 else memset &READ_OS, 0, sizeof OVERLAPPED ; memset &WRITE_OS, 0, sizeof OVERLAPPED ; READ_OS.hEvent = CreateEvent NULL, / no security TRUE, / explicit reset req FALSE, / initia
8、l event reset NULL ; / no name if READ_OS.hEvent = NULL break; WRITE_OS.hEvent = CreateEvent NULL, / no security TRUE, / explicit reset req FALSE, / initial event reset NULL ; / no name if NULL = WRITE_OS.hEvent CloseHandle READ_OS.hEvent ; break; hUsb=CreateFilepDetail-DevicePath,/&guidHID_1,/ GENE
9、RIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL/*| FILE_FLAG_OVERLAPPED*/, NULL; if hUsb .= NULL ifstrcmppDetail-DevicePath, m_USBListj=0 sprintfm_DeviceDescj+1, %s, pDetail-DevicePath; m_USBPositionMapnCount = j+1; break; CloseHandlehUsb; nCount+
10、; / break; / 释放设备接口数据空间:GlobalFreepDetail; / 关闭设备信息集句柄:SetupDiDestroyDeviceInfoListhDevInfoSet; iDeviceCount = nCount; return nCount; / 写 BOOL Writestrchar *buf,int buflen, int index BOOL fWriteStat; DWORD dwErrorFlags; DWORD dwError; COMSTAT ComStat; char szError 10 ; DWORD ret; int len, i, j, pack
11、et; div_t div_result; BYTE sendpacket65; BYTE xorcode=0 x00; if m_gphdComindex = NULL / no usb devicejk100c return -1; div_result = divbuflen, 58; if div_result.rem = 0 packet = div_result.quot; else packet = div_result.quot+1; for i=0; ipacket; i+ memsetsendpacket, 0, 65; ifi=packet-1 / end packet
12、if div_result.rem = 0 len = 58; else len = div_result.rem; else len = 58; sendpacket0 = 0 x13; sendpacket1 = 3+len; sendpacket2 = 0 x01; sendpacket3 = packet*16+i+1; memcpysendpacket+4, buf+i*58, len; forj=0;jlen+3;j+ xorcode=sendpacketj+1; sendpacketlen+4 = charxorcode; sendpacketlen+5 = 0 x23; Pur
13、geCommm_gphdComindex,PURGE_RXCLEAR|PURGE_TXCLEAR; / Sleep10; fWriteStat = WriteFilem_gphdComindex, sendpacket, len+6,&ret, NULL; if .fWriteStat ifGetLastError = ERROR_IO_PENDING dwError = GetLastError; / an error occurred, try to recover wsprintf szError, nr , dwError ; OutputDebugStringszError; Cle
14、arCommErrorm_gphdComindex, &dwErrorFlags, &ComStat ; if dwErrorFlags 0 wsprintf szError, nr , dwErrorFlags ; OutputDebugStringszError; else / some other error occurred ClearCommErrorm_gphdComindex, &dwErrorFlags, &ComStat ; if dwErrorFlags 0 wsprintf szError, nr , dwErrorFlags ; OutputDebugStringszE
15、rror; return FALSE; if i .= packet-1 / should be receive ack if ReceivePacketAnswerindex .= 0 return FALSE; return TRUE; / 读 int Readstrchar *buf,int nMaxLength, int index BOOL fReadStat ; COMSTAT ComStat; DWORD dwErrorFlags; DWORD dwLength; DWORD dwError; char szError 10 ; if fCOMMOpened=0 return F
16、ALSE; / 串口未打开 / only try to read number of bytes in queue ClearCommErrorm_gphdComindex, &dwErrorFlags, &ComStat ; /dwLength = min DWORD nMaxLength, ComStat.cbInQue ; dwLength=nMaxLength; if dwLength 0 if olap=TRUE fReadStat = ReadFilem_gphdComindex,buf, dwLength, &dwLength,&READ_OS ; if .fReadStat i
17、f GetLastError = ERROR_IO_PENDING OutputDebugStringnrIO Pending; while.GetOverlappedResultm_gphdComindex, &READ_OS, &dwLength, TRUE dwError = GetLastError; ifdwError = ERROR_IO_INCOMPLETE continue; else / an error occurred, try to recover ClearCommErrorm_gphdComindex,&dwErrorFlags, &ComStat ; break;
18、 else / end-if GetLastError = ERROR_IO_PENDING / some other error occurred dwLength = 0 ; ClearCommErrorm_gphdComindex, &dwErrorFlags, &ComStat ; if dwErrorFlags 0 wsprintf szError, nr , dwErrorFlags ; OutputDebugStringszError; / end-if .fReadStat / end-if olap=TRUE else fReadStat = ReadFile m_gphdCo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安全门禁系统维护协议(2024年版)
- 2024年医用供应装置项目建议书
- 2024年工业淀粉合作协议书
- 二年级数学计算题专项练习1000题汇编
- 签约卖货合同范本
- 街舞合伙合同范本
- 厂家付款合同范本
- 2024年皮肤化学品:沐浴液合作协议书
- 2024年煤制合成氨项目发展计划
- 安徽好的代理记账合同范本
- 幕墙竣工验收自评报告7页
- 机动车维修企业安全生产标准化考评方法和考评实施细则(完整版)
- 外研版小学英语外研版(一起)五上Module 10《Unit 1 You should tidy your toys》ppt课件2
- 江西省职业培训补贴范围及标准-江西省职业技能鉴定指导中心
- 七年级生物上册(济南版)知识点归纳
- 应急联防联动协议
- 财务会计职业生涯人物访谈报告
- (完整版)电渣压力焊施工施工工艺
- D600变频器说明书
- 上海英皇明星城初步设计(图文)
- 隧道盾构超限质量事故报告(完整版)
评论
0/150
提交评论