欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOCX文档下载  

    编写在USB接口读写数据的C++程序.docx

    • 资源ID:3125490       资源大小:39.03KB        全文页数:10页
    • 资源格式: DOCX        下载积分:6.99金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要6.99金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    编写在USB接口读写数据的C++程序.docx

    编写在USB接口读写数据的C+程序使用一个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); / 检索相关GUID的USB设备总设备个数 if (!GetUSBList) return 0; / 取得一个该GUID相关的设备信息集句柄 hDevInfoSet = :SetupDiGetClassDevs(LPGUID)&guidHID_1,/GUID_CLASS_USB_DEVICE, / class GUID NULL, / 无关键字 NULL, / 不指定父窗口句柄 DIGCF_PRESENT | DIGCF_DEVICEINTERFACE); / 目前存在的设备 / 失败. if (hDevInfoSet = INVALID_HANDLE_VALUE) return NULL; / 申请设备接口数据空间 nCount = 0; bResult = TRUE; for (i=0; i< 34; i+) bDeviceOpeni = FALSE; memset(m_DeviceDesci, 0, 256); SP_DEVICE_INTERFACE_DATA ifdata; / 设备序号=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); / 设备接口信息 if (bResult) ULONG predictedLength = 0; ULONG requiredLength = 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); / 不需额外的设备描述 if (bResult) / 复制设备路径到输出缓冲区 /:strcpy(pszDevicePathnCount, pDetail->DevicePath); if (strcmp(m_sysversion, "winnt")=0) char ch18; for(i=0;i<17;i+) chi=*(pDetail->DevicePath+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, / no security TRUE, / 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=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 PORT上 char id30; memset(id, 0, 30); i=0; do idi=*(pDetail->DevicePath+26+i); i+; while(idi-1!='#'); idi-1 = '0' for (j=0; j<34; j+) if(strcmp(id, m_USBListj)=0) sprintf(m_DeviceDescj+1, "%s", pDetail->DevicePath); m_USBPositionMapnCount = j+1; break; CloseHandle(hUsb); 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, / 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=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) if(strcmp(pDetail->DevicePath, m_USBListj)=0) sprintf(m_DeviceDescj+1, "%s", pDetail->DevicePath); m_USBPositionMapnCount = j+1; break; CloseHandle(hUsb); 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, 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; i<packet; i+) memset(sendpacket, 0, 65); if(i=packet-1) / end packet if (div_result.rem = 0) len = 58; else len = 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;j<len+3;j+) xorcode=sendpacketj+1; sendpacketlen+4 = (char)xorcode; sendpacketlen+5 = 0x23; 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 recover wsprintf( szError, "nr <CE-%u>", dwError ) ; OutputDebugString(szError); ClearCommError(m_gphdComindex, &dwErrorFlags, &ComStat ) ; if (dwErrorFlags >0) wsprintf( szError, "nr <CE-%u>", dwErrorFlags ) ; OutputDebugString(szError); else / some other error occurred ClearCommError(m_gphdComindex, &dwErrorFlags, &ComStat ) ; if (dwErrorFlags > 0) wsprintf( szError, "nr <CE-%u>", dwErrorFlags ) ; OutputDebugString(szError); return FALSE; if (i != packet-1) / should be receive ack if (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 (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, &dwLength,&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 recover ClearCommError(m_gphdComindex,&dwErrorFlags, &ComStat ) ; break; else / end-if (GetLastError = ERROR_IO_PENDING) / some other error occurred dwLength = 0 ; ClearCommError(m_gphdComindex, &dwErrorFlags, &ComStat ) ; if (dwErrorFlags >0) wsprintf( szError, "nr <CE-%u>", dwErrorFlags ) ; OutputDebugString(szError); / end-if (!fReadStat) / end-if (olap=TRUE) else fReadStat = ReadFile( m_gphdComindex,buf, dwLength, &dwLength, NULL ) ; if (!fReadStat) dwError = GetLastError; ClearCommError(m_gphdComindex,&dwErrorFlags, &ComStat ) ; if (dwErrorFlags >0) wsprintf( szError, "nr <CE-%u>", dwErrorFlags ) ; OutputDebugString(szError); PurgeComm(m_gphdComindex,PURGE_RXCLEAR|PURGE_TXCLEAR); return dwLength;

    注意事项

    本文(编写在USB接口读写数据的C++程序.docx)为本站会员(牧羊曲112)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开