85 lines
2.8 KiB
Python
85 lines
2.8 KiB
Python
#!/usr/bin/env python
|
|
|
|
|
|
def print_receiver(receiver):
|
|
print (str(receiver))
|
|
|
|
print (" Serial : %s" % receiver.serial)
|
|
for f in receiver.firmware:
|
|
print (" %-10s: %s" % (f.kind, f.version))
|
|
|
|
notifications = receiver.request(0x8100)
|
|
if notifications:
|
|
notifications = ord(notifications[0:1]) << 16 | ord(notifications[1:2]) << 8
|
|
if notifications:
|
|
print (" Enabled notifications: %s." % lur.hidpp10.NOTIFICATION_FLAG.flag_names(notifications))
|
|
else:
|
|
print (" All notifications disabled.")
|
|
|
|
print (" Reported %d paired device(s)." % len(receiver))
|
|
activity = receiver.request(0x83B3)
|
|
if activity:
|
|
activity = [(d, ord(activity[d - 1])) for d in range(1, receiver.max_devices)]
|
|
print(" Device activity counters: %s" % ', '.join(('%d=%d' % (d, a)) for d, a in activity if a > 0))
|
|
|
|
def scan_devices(receiver):
|
|
for dev in receiver:
|
|
print ("--------")
|
|
print (str(dev))
|
|
print ("Codename : %s" % dev.codename)
|
|
print ("Kind : %s" % dev.kind)
|
|
print ("Name : %s" % dev.name)
|
|
print ("Device number: %d" % dev.number)
|
|
print ("Wireless PID : %s" % dev.wpid)
|
|
print ("Serial number: %s" % dev.serial)
|
|
print ("Power switch : on the %s" % dev.power_switch_location)
|
|
|
|
if not dev.ping():
|
|
print ("Device is not connected at this time, no further info available.")
|
|
continue
|
|
|
|
print ("HID protocol : HID++ %01.1f" % dev.protocol)
|
|
if not dev.features:
|
|
print ("Features query not supported by this device.")
|
|
continue
|
|
|
|
for fw in dev.firmware:
|
|
print (" %-11s: %s %s" % (fw.kind, fw.name, fw.version))
|
|
|
|
print (" %d features:" % len(dev.features))
|
|
for index, feature in enumerate(dev.features):
|
|
feature = dev.features[index]
|
|
if feature:
|
|
flags = dev.request(0x0000, feature.bytes(2))
|
|
flags = 0 if flags is None else ord(flags[1:2])
|
|
flags = lur.hidpp20.FEATURE_FLAG.flag_names(flags)
|
|
print (" %2d: %-20s {%04X} %s" % (index, feature, feature, flags))
|
|
|
|
if dev.keys:
|
|
print (" %d reprogrammable keys:" % len(dev.keys))
|
|
for k in dev.keys:
|
|
flags = lur.hidpp20.KEY_FLAG.flag_names(k.flags)
|
|
print (" %2d: %-20s => %-20s %s" % (k.index, lur.hidpp20.KEY[k.key], lur.hidpp20.KEY[k.task], flags))
|
|
|
|
|
|
if __name__ == '__main__':
|
|
import argparse
|
|
arg_parser = argparse.ArgumentParser(prog='scan')
|
|
arg_parser.add_argument('-v', '--verbose', action='store_true', default=False,
|
|
help='log the HID data traffic')
|
|
args = arg_parser.parse_args()
|
|
|
|
import logging
|
|
log_format='%(asctime)s %(levelname)8s %(name)s: %(message)s'
|
|
logging.basicConfig(level=logging.DEBUG if args.verbose else logging.WARNING, format=log_format)
|
|
|
|
from . import unifying_receiver as lur
|
|
|
|
receiver = lur.Receiver.open()
|
|
if receiver is None:
|
|
print ("Logitech Unifying Receiver not found.")
|
|
else:
|
|
print_receiver(receiver)
|
|
scan_devices(receiver)
|
|
receiver.close()
|