出于测试目的,我想连接USB设备并想检查速度(HS / FS / LS)。 我能够访问设备描述符,端点描述符,接口描述符,但我想知道操作系统分配的设备地址(Windows 7)
到目前为止我的代码:
import usb
busses = usb.busses()
for bus in busses:
for dev in bus.devices:
if dev.idVendor == vendor_id and dev.idProduct == product_id:
print ("Test vehicle %s device FOUND!" %protocol)
print ("iManufacturer : %s" %usb.util.get_string(dev.dev, 256, 1))
print ("iProduct : %s" %usb.util.get_string(dev.dev, 256, 2))
print ("iSerialNumber : %s" %usb.util.get_string(dev.dev, 256, 3))
return dev
print ("Test vehicle %s device NOT FOUND!" %protocol)
返回:
C:\Python27\Lib\site-packages>python example.py
Test vehicle HS device FOUND!
iManufacturer : Kingston
iProduct : DataTraveler 2.0
iSerialNumber : 5B720A82364A
在非常有用的USBview软件中,有一节:
ConnectionStatus: DeviceConnected
Current Config Value: 0x01
Device Bus Speed: High
Device Address: 0x09
Open Pipes: 2
我如何获得这些信息?它是使用pyUSB查询USB设备吗?或者是对sys的查询?
感谢您的帮助。
答案 0 :(得分:0)
设备对象中还有其他几个字段(在您的代码中,这些字段名为dev
)。
快速而肮脏的方式来看待它们
def print_internals(dev):
for attrib in dir(dev):
if not attrib.startswith('_') and not attrib == 'configurations':
x=getattr(dev, attrib)
print " ", attrib, x
for config in dev.configurations:
for attrib in dir(config):
if not attrib.startswith('_'):
x=getattr(config, attrib)
print " ", attrib, x
并在“for dev in bus.devices
”循环中调用它。看起来文件名可能对应于'设备地址',虽然总线速度有点深(dev.configurations [i] .interfaces [j] [k] .interfaceProtocol),而且它只有一个整数。 usb.util
可能能够根据这些整数为您提供更多信息,但我没有可用的模块。
pyUSB的文档似乎不是很广泛,但SO question指向它所包含的libusb docs。
答案 1 :(得分:0)
您可以使用此补丁https://github.com/DeliangFan/pyusb/commit/a882829859cd6ef3c91ca11870937dfff93fea9d通过pyUSB获取USB设备速度信息。
因为libusb1.0已经支持获取USB速度信息。
答案 2 :(得分:0)
(现在)可以轻松访问这些属性。至少对我有用。 https://github.com/pyusb/pyusb/blob/master/usb/core.py
import usb.core
devices = usb.core.find(find_all=True)
dev = next(devices)
print("device bus:", dev.bus)
print("device address:", dev.address)
print("device port:", dev.port_number)
print("device speed:", dev.speed)