通过python获取USB设备地址

时间:2013-08-14 05:57:08

标签: python pyusb

出于测试目的,我想连接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的查询?

感谢您的帮助。

3 个答案:

答案 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)