0

答えが見つからないようです。私は専門家ではないので、単純なものが欠けている可能性があることを覚えておいてください。おそらく、必要なデバイスをどのように印刷しているかなどです。USBデバイスからデバイスのバージョン番号(ここからはdvm)を保存しようとしています。問題は、USBデバイスにレポート用の2つの列、機能と出力があることです。

したがって、デバイスを印刷すると、2セットの印刷ステートメントを受け取ります。

def device(target_usage、target_vendor_id):

hidDevice = False
all_devices = hid.HidDeviceFilter(vendor_id = target_vendor_id).get_devices()
print "\n", all_devices
if len(all_devices) == 0:
    # Exit if no devices found, report error.
    hidDevice = False
    time.sleep(0.2)
    print "No devices can be detected, please check device is connected."
    sys.exit(1)
    return
elif len(all_devices) > 2:
    # announce there are more than 1 device connected to prevent conflicting upgrades
    hidDevice = True
    time.sleep(0.2)
    print "Too many devices connected, ensure the only device connected is the device needed to test."
    sys.exit(1)

else:
    # loop through all devices
    for device in all_devices:
        try:
            device.open()

            # print device details
            device_name = unicode("=== INFO: Found %s %s (vID=[%04x], pID=[%04x], version number [%04x]) ===" % \
            (device.vendor_name, device.product_name, device.vendor_id, device.product_id, device.version_number))
            dvm = unicode("%04x" % \
            (device.version_number))
            print dvm;
            print device_name; 

        finally:
            device.close()

    hidDevice = True

return hidDevice

この関数を呼び出すと、すべてのデバイスが印刷されますが、次の結果になります(プライバシーの問題のためにpid / vidsなどを変更しました)。

[HIDデバイス(vID = 0x0000、pID = 0x0000、v = 0x0000); 作る; モデル、パス:\?\ hidden#vid_0000&pid_0000&col01#7&00000000&1&0000#{00000000-0000-0000-0000-000000000000}、HIDデバイス(vID = 0x0000、pID = 0x0000、v = 0x0000); 作る; モデル、パス:\?\ hidden#vid_0000&pid_0000&col02#7&00000000&1&0000#{00000000-0000-0000-0000-000000000000}

重要な部分はcol01とcol02です。

2番目に列挙されたHIDデバイスを除外するにはどうすればよいですか?

4

1 に答える 1

0

次のコードが含まれています。

for report in device.find_output_reports(): 
                    if target_usage in report:
                        # add to target list
                        Targets.append(device)

            finally:
                device.close()

        for item in Targets:        

            try:
                item.open(output_only = True)
                dvm = unicode("%04x" % \
                (device.version_number))
                print dvm
            finally:
                item.close()

問題は解決しました。

于 2013-02-14T11:41:29.487 に答える