版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、用VC+实现USB接口读写数据的程序2009-08-15 11:55用VC+实现USB接口读写数据的程序使用一个 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;memset(m_sysversion, 0, 20);GetSysVersion(m_sysversion);/检索相关
2、GUID的USB设备总设备个数if (!GetUSBList()return 0;/取得一个该GUID相关的设备信息集句柄hDevInfoSet = :SetupDiGetClassDevs(LPGUID)&guidHID_1,/GUID_CLASS_USB_DEVICE, / class GUIDNULL, / 无关键字NULL, / 不指定父窗口句柄DIGCF_PRESENT | DIGCF_DEVICEINTERFACE); / 目前存在的设备/ 失败 .if (hDevInfoSet = INVALID_HANDLE_VALUE)return NULL;/ 申请设备接口数据空间nCou
3、nt = 0;bResult = TRUE;for (i=0; icbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA); bResult = SetupDiGetInterfaceDeviceDetail( hDevInfoSet, / 设备信息集句柄&ifdata, /设备接口信息pDetail, / 设备接口细节(设备路径) predictedLength, /输出缓冲区大小&requiredLength, /不需计算输出缓冲区大小 ( 直接用设定值 )NULL); / 不需额外的设备描述if (bResult)/ 复制设备路径到输出缓冲区/:s
4、trcpy(pszDevicePathnCount, pDetail-DevicePath);if (strcmp(m_sysversion, winnt)=0)char ch18;for(i=0;iDevicePath+8+i);ch17=0;if (strcmp(ch,vid_0471&pid_0666)=0)/ 比较版本号,防止意外出错 memset( &READ_OS, 0, sizeof( OVERLAPPED ) ) ;memset( &WRITE_OS, 0, sizeof( OVERLAPPED ) ) ;READ_OS.hEvent = CreateEvent( NULL,
5、/ no securityTRUE, / explicit reset reqFALSE, / initial event resetNULL ) ; / no nameif (READ_OS.hEvent = NULL)break;WRITE_OS.hEvent = CreateEvent( NULL, / no securityTRUE, / explicit reset reqFALSE, / initial event resetNULL ) ; / no nameif (NULL = WRITE_OS.hEvent)CloseHandle( READ_OS.hEvent );brea
6、k;hUsb=CreateFile(pDetail-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 PORTtchar id30; memset(id, 0, 30);i=0;do id=*(pDetail-DevicePath+26+i);i+; while(id
7、!=#);id = 0;for (j=0; jDevicePath); m_USBPositionMapnCount = j+1;break;CloseHandle(hUsb); nCount+;/ break;/ 比较驱动版本/ 比较操作系统版本elsememset( &READ_OS, 0, sizeof( OVERLAPPED ) ) ; memset( &WRITE_OS, 0, sizeof( OVERLAPPED ) ) ;READ_OS.hEvent = CreateEvent( NULL, / no security TRUE, / explicit reset reqFALS
8、E, / initial event resetNULL ) ; / no nameif (READ_OS.hEvent = NULL) break;WRITE_OS.hEvent = CreateEvent( NULL, / no securityTRUE, / explicit reset reqFALSE, / initial event resetNULL ) ; / no nameif (NULL = WRITE_OS.hEvent)CloseHandle( READ_OS.hEvent );break;hUsb=CreateFile(pDetail-DevicePath,/&gui
9、dHID_1,/GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL/*|FILE_FLAG_OVERLAPPED*/,NULL);if (hUsb != NULL)if(strcmp(pDetail-DevicePath, m_USBListj)=0)sprintf(m_DeviceDescj+1, %s, pDetail-DevicePath);m_USBPositionMapnCount = j+1;break;CloseHandle(hUs
10、b);nCount+;/ break;/ 释放设备接口数据空间:GlobalFree(pDetail);/ 关闭设备信息集句柄:SetupDiDestroyDeviceInfoList(hDevInfoSet);iDeviceCount = nCount;return nCount;/ 写BOOL Writestr(char *buf,int buflen, int index)BOOL fWriteStat;DWORD dwErrorFlags;DWORD dwError;COMSTAT ComStat; char szError 10 ;DWORD ret; int len, i, j,
11、packet; div_t div_result;BYTE sendpacket65;BYTE xorcode=0x00;if (m_gphdComindex = NULL) / no usb device(jk100c) return -1;div_result = div(buflen, 58);if (div_result.rem = 0) packet = div_result.quot; else packet = div_result.quot+1;for (i=0; ipacket; i+) memset(sendpacket, 0, 65);if(i=packet-1)/ en
12、d packetif (div_result.rem = 0) len = 58; elselen = div_result.rem;else len = 58;sendpacket0 = 0x13;sendpacket1 = 3+len;sendpacket2 = 0x01;sendpacket3 = packet*16+i+1;memcpy(sendpacket+4, buf+(i*58), len);for(j=0;jlen+3;j+)xorcodeA=se ndpacketj+1;sendpacketlen+4 = (char)xorcode;sendpacketlen+5 = 0x2
13、3;PurgeComm(m_gphdComindex,PURGE_RXCLEAR|PURGE_TXCLEAR); / Sleep(10);fWriteStat = WriteFile(m_gphdComindex, sendpacket, len+6,&ret, NULL);if (!fWriteStat)if(GetLastError() = ERROR_IO_PENDING)dwError = GetLastError();/ an error occurred, try to recoverwsprintf( szError, nr , dwError ) ; OutputDebugSt
14、ring(szError);ClearCommError(m_gphdComindex, &dwErrorFlags, &ComStat ) ;if (dwErrorFlags 0)wsprintf( szError, nr , dwErrorFlags ) ;OutputDebugString(szError);else/ some other error occurredClearCommError(m_gphdComindex, &dwErrorFlags, &ComStat ) ;if (dwErrorFlags 0)wsprintf( szError, nr , dwErrorFla
15、gs ) ;OutputDebugString(szError);return FALSE;if (i != packet-1)/ should be receive ackif (ReceivePacketAnswer(index) != 0)return FALSE;return TRUE;/ 读int Readstr(char *buf,int nMaxLength, int index)BOOL fReadStat ;COMSTAT ComStat;DWORD dwErrorFlags;DWORD dwLength;DWORD dwError;char szError 10 ;if (
16、fCOMMOpened=0)return FALSE; / 串口未打开/ only try to read number of bytes in queue ClearCommError(m_gphdComindex, &dwErrorFlags, &ComStat) ;/dwLength = min( (DWORD) nMaxLength, ComStat.cbInQue ) ;dwLength=nMaxLength;if (dwLength 0)if (olap=TRUE)fReadStat = ReadFile(m_gphdComindex,buf, dwLength, &dwLengt
17、h,&READ_OS) ; if (!fReadStat)if (GetLastError() = ERROR_IO_PENDING)OutputDebugString(nrIO Pending);while(!GetOverlappedResult(m_gphdComindex, &READ_OS, &dwLength, TRUE )dwError = GetLastError();if(dwError = ERROR_IO_INCOMPLETE) continue;else/ an error occurred, try to recoverClearCommError(m_gphdCom
18、index,&dwErrorFlags, &ComStat ) ; break;else / endif (GetLastError() = ERROR_IO_PENDING)/ some other error occurreddwLength = 0 ;ClearCommError(m_gphdComindex, &dwErrorFlags, &ComStat ) ;if (dwErrorFlags 0)wsprintf( szError, nr , dwErrorFlags ) ; OutputDebugString(szError); / endif (!fReadStat) / endif (olap=TRUE)elsefReadStat = ReadFile( m_gphdComindex,buf
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年江苏省邳州市高三数学下册期末考试模拟检测卷附答案(培优A卷)
- 2026年江苏省泰兴市高三数学下册期末考试模拟卷【全优】附答案
- 2026年湖北省大冶市高三数学下册期末考试模拟检测卷含完整答案【易错题】
- 农业科技农场主农业生产效率与农产品质量绩效衡量表
- 关于2026年年终奖发放预案说明函(7篇)
- 技术创新与产品性能提升绩效评估表
- 智能楼宇能源管理系统实施要点
- 读后续写话题练(八) 冒险篇
- 银行业风险控制部门风险评估与防控能力绩效衡量表
- 请求解决办公区域网络延迟问题函7篇范本
- 信息流广告培训
- 陕西交控集团内部竞聘笔试题
- 晋升等级实施方案
- 基于整本书阅读的《快乐读书吧》教学设计与实施-以三年级下册“寓言故事”为例
- 2025年合肥水投线上笔试题目及答案
- 机械制造技术基础 课件 第6章 机械装配工艺基础
- 职工年度体检常见异常报告解读指南
- 五级咖啡师资格理论考试题库(附答案)
- 2025年东营辅警协警招聘考试真题及1套完整答案详解
- 直读光谱仪培训课件
- 项目部管理人员安全教育内容
评论
0/150
提交评论