阅读:1082回复:0
【请教】读取HID设备数据的应用程序
最近刚做好了固件,端点1实现中断传输,使能了in和out。用bus hound测试了,能获得固件发送的report,固件也能收到out事务的数据。现在想用vc做个应用程序实现数据的读写。
参考了网上的程序,把我写的程序贴出来,请各位帮我看看出啥问题了,可以打开设备获得设备的路径等信息了,但是用readfile读数据一直得不到真。 程序如下 { GUID myhidguid; CString strShow,strShow1; HidD_GetHidGuid(&myhidguid); HDEVINFO hDevInfo = SetupDiGetClassDevs(&myhidguid,NULL,0, DIGCF_PRESENT|DIGCF_DEVICEINTERFACE ); if(hDevInfo==INVALID_HANDLE_VALUE) { strShow="查找USB设备出错!\r\n"; ShowMessage(strShow); return; } else { strShow="找到USB设备.\r\n"; ShowMessage(strShow); } UINT nIndex = 0; strShow= "正在查找可用的USB设备...\r\n"; ShowMessage(strShow); SP_DEVICE_INTERFACE_DATA strtInterfaceData; strtInterfaceData.cbSize=sizeof(SP_DEVICE_INTERFACE_DATA); BOOL bSuccess ; DWORD index=0; CString temp; for(int i=0;i<10;i++) { bSuccess= SetupDiEnumDeviceInterfaces(hDevInfo,NULL,&myhidguid,index, &strtInterfaceData); if (!bSuccess) { if(i==0) { strShow="查找USB设备出错!\r\n"; ShowMessage(strShow); } break; } else { if(strtInterfaceData.Flags==SPINT_ACTIVE ) { strShow1="%d 连接 \r\n"; temp.Format(strShow1,index+1); ShowMessage(temp); //ShowMore(hDevInfo,strtInterfaceData); PSP_DEVICE_INTERFACE_DETAIL_DATA strtDetailData; DWORD strSzie=0,requiesize=0; SetupDiGetDeviceInterfaceDetail(hDevInfo,&strtInterfaceData,NULL,0,&strSzie,NULL); requiesize=strSzie; strtDetailData=(PSP_DEVICE_INTERFACE_DETAIL_DATA)malloc(requiesize); strtDetailData->cbSize=sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA); SP_DEVINFO_DATA infodata; infodata.cbSize=sizeof(SP_DEVINFO_DATA); if (!SetupDiGetDeviceInterfaceDetail(hDevInfo,&strtInterfaceData, strtDetailData,strSzie,&requiesize,NULL)) { strShow="查找设备路径时出错!"; ShowMessage(strShow); SetupDiDestroyDeviceInfoList(hDevInfo); free(strtDetailData); return; } strShow1="设备路径:\r\n%s\r\n"; strShow.Format(strShow1,strtDetailData->DevicePath); ShowMessage(strShow); strShow="打开通信端口....\r\n"; ShowMessage(strShow); HANDLE hCom = CreateFile ( strtDetailData->DevicePath, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); if (hCom == INVALID_HANDLE_VALUE) { strShow="无法打开通信端口。不能读取设备信息!(设备连接可能不正确?)\r\n"; ShowMessage(strShow); SetupDiDestroyDeviceInfoList(hDevInfo); free(strtDetailData); return; } strShow="打开通信端口成功!\r\n"; ShowMessage(strShow); HIDD_ATTRIBUTES strtAttrib; strShow="正在读取设备的标识...\r\n"; ShowMessage(strShow); strtAttrib.Size=sizeof(HIDD_ATTRIBUTES); if (!HidD_GetAttributes(hCom,&strtAttrib)) { strShow="查询设备状态时出错!"; ShowMessage(strShow); CloseHandle(hCom); free(strtDetailData); return; } unsigned char reportbuffer[32]; DWORD reeee=8; DWORD reee; char success=0; success=ReadFile(hCom,reportbuffer,reeee,&reee,NULL)); } } index++; } strShow1="总共%d个设备连接"; temp.Format(strShow1,index); ShowMessage(temp); } |
|