dos2004
驱动牛犊
驱动牛犊
  • 注册日期2007-10-29
  • 最后登录2009-07-03
  • 粉丝0
  • 关注0
  • 积分56分
  • 威望56点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
阅读:5410回复:6

跪地求答案,createfile打开USB读写的问题

楼主#
更多 发布于:2009-07-02 16:48
公司有一设备,是一种USB TO MIDI 的适配器,一端通过USB接PC,不需要外加驱动,电脑不能认出来。(我也不知道是HID,还是什么)
没有任何的资料,更别说驱动的资料了。

我就用以下的方法来找到它。
GUID myguid={0xA5DCBF10L,0x6530,0x11D2,{0x90,0x1F,0x00,0xC0,0x4F,0xB9,0x51,0xED}};
hDevInfo=SetupDiGetClassDevs(pGuid,0,0,DIGCF_PRESENT|DIGCF_INTERFACEDEVICE);
SetupDiEnumDeviceInterfaces(hDevInfo,NULL,pGuid,nIndex,&deviceInfoData);
SetupDiGetInterfaceDeviceDetail(hDvcInfo,DvcInfoData,pDevData,iReqLen,NULL,NULL);

来取得pDevData->DevicePath,
\\?\usb#vid_0763&pid_0150#5&ce1c55b&0&2#{a5dcbf10-6530-11d2-901f-00c04fb951ed}

因为该设备是连接在电子琴上的,当弹奏电子琴时会有MIDI数据传输到PC上,而我需要把这个数据读出来。
我用USBVIEW查看设备的信息:
Device Descriptor:
bcdUSB:             0x0100
bDeviceClass:         0x00
bDeviceSubClass:      0x00
bDeviceProtocol:      0x00
bMaxPacketSize0:      0x40 (64)
idVendor:           0x0763
idProduct:          0x0150
bcdDevice:          0x0125
iManufacturer:        0x01
iProduct:             0x02
iSerialNumber:        0x00
bNumConfigurations:   0x01

ConnectionStatus: DeviceConnected
Current Config Value: 0x01
Device Bus Speed:     Full
Device Address:       0x01
Open Pipes:              2

Endpoint Descriptor:
bEndpointAddress:     0x81
Transfer Type:        Bulk
wMaxPacketSize:     0x0040 (64)
wInterval:          0x0000
bSyncAddress:         0x00

Endpoint Descriptor:
bEndpointAddress:     0x02
Transfer Type:        Bulk
wMaxPacketSize:     0x0040 (64)
wInterval:          0x0000
bSyncAddress:         0x00

跟我取得的pDevData->DevicePath相同,所以我设备是找到了。
直接createfile(pDevData->DevicePath,.....),这样读不到任何东西,找了好多资料在网上,说需要管道PIPE,而且PIPE名字是驱动里面规定的,我汗了。。。。,我这没有任何驱动的资料呀,T.T,T.T

求救各位大牛,PIPE应该是多少,除了这个方法外,还有没有其他的方法可以读数据?
USB没有统一的PIPE命名吗?我试过了pipe0,pipe1,读数据的时候,ReadFile会返回-1,GetLastError说句柄出错....
我没办法了,求救,跪地求救!!!
gutian98
禁止发言
禁止发言
  • 注册日期2003-01-12
  • 最后登录2016-12-11
  • 粉丝4
  • 关注2
  • 积分760分
  • 威望8026点
  • 贡献值1点
  • 好评度364点
  • 原创分0分
  • 专家分21分
  • 金点子奖
  • 社区居民
沙发#
发布于:2009-07-02 17:48
用户被禁言,该主题自动屏蔽!
dos2004
驱动牛犊
驱动牛犊
  • 注册日期2007-10-29
  • 最后登录2009-07-03
  • 粉丝0
  • 关注0
  • 积分56分
  • 威望56点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2009-07-02 18:01
引用第1楼gutian98于2009-07-02 17:48发表的  :
USB设备可以通过:
1、设备Interface GUID来打开
2、命名设备(符号连接)来打开
3、命名管道来打开
所有这些方式都取决于设备驱动的实现,你如果不熟悉驱动的话,即使打开了设备,IO Code是什么你不知道还是控制不了设备。或者你打开设备后用ReadFile/WriteFile读写设备,你也必须知道数据是怎么组织的。不知道你的设备是不是属于某一类的,比如像USB Audio/Video这样的类型,这样的话就可以根据协议去了解数据的组织。

首先谢谢回复,
我是通过GUID,找到设备路径,也就是符号链接吧,CreateFile是可以返回句柄,但用句柄来读写的时候就出错了。
的确不知道驱动是怎么实现的,我的设备没有外载驱动,接上PC,WINDOWS自带就识别了,属于USB AUDIO类的吧。
我只需要ReadFile能读到数据就可以了,数据组织的话我知道MIDI流的格式。目前ReadFile不能读取数据,这应该是打开设备句柄的时候出错了。USBVIEW里面显示打开了两个OPENENDPOINT,我也不知道管道名是怎么命名的,

直接ReadFile,应该可以不知道IO CODE
spin
驱动小牛
驱动小牛
  • 注册日期2001-04-17
  • 最后登录2015-10-27
  • 粉丝1
  • 关注0
  • 积分46分
  • 威望354点
  • 贡献值0点
  • 好评度41点
  • 原创分0分
  • 专家分0分
地板#
发布于:2009-07-02 18:24
有可能驱动中就不提供ReadFile(),WriteFile()接口,只有IOControl,两个端点是什么?
dos2004
驱动牛犊
驱动牛犊
  • 注册日期2007-10-29
  • 最后登录2009-07-03
  • 粉丝0
  • 关注0
  • 积分56分
  • 威望56点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2009-07-03 10:32
引用第3楼spin于2009-07-02 18:24发表的  :
有可能驱动中就不提供ReadFile(),WriteFile()接口,只有IOControl,两个端点是什么?

如果不提供ReadFile那就真没办法了。
两个端点是什么我也不知道,我对驱动不熟悉,手头没有任何该设备的资料。
USBVIEW的显示信息:
Device Descriptor:
bcdUSB:             0x0100
bDeviceClass:         0x00
bDeviceSubClass:      0x00
bDeviceProtocol:      0x00
bMaxPacketSize0:      0x40 (64)
idVendor:           0x0763
idProduct:          0x0150
bcdDevice:          0x0125
iManufacturer:        0x01
iProduct:             0x02
iSerialNumber:        0x00
bNumConfigurations:   0x01

ConnectionStatus: DeviceConnected
Current Config Value: 0x01
Device Bus Speed:     Full
Device Address:       0x01
Open Pipes:              2

Endpoint Descriptor:
bEndpointAddress:     0x81
Transfer Type:        Bulk
wMaxPacketSize:     0x0040 (64)
wInterval:          0x0000
bSyncAddress:         0x00

Endpoint Descriptor:
bEndpointAddress:     0x02
Transfer Type:        Bulk
wMaxPacketSize:     0x0040 (64)
wInterval:          0x0000
bSyncAddress:         0x00

我现在应该怎么做呢?
spin
驱动小牛
驱动小牛
  • 注册日期2001-04-17
  • 最后登录2015-10-27
  • 粉丝1
  • 关注0
  • 积分46分
  • 威望354点
  • 贡献值0点
  • 好评度41点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2009-07-03 12:21
这个设备不需要驱动?如果不需要驱动,他一定是某一类Windows支持的设备,你可以查一下设备的类型.    
dos2004
驱动牛犊
驱动牛犊
  • 注册日期2007-10-29
  • 最后登录2009-07-03
  • 粉丝0
  • 关注0
  • 积分56分
  • 威望56点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2009-07-03 18:08
引用第5楼spin于2009-07-03 12:21发表的  :
这个设备不需要驱动?如果不需要驱动,他一定是某一类Windows支持的设备,你可以查一下设备的类型.    


怎么查设备的类型呀?
知道类型后又能怎么样?我现在头大了
游客

返回顶部