fixed pairing in solaar-cli

This commit is contained in:
Daniel Pavel 2013-07-05 14:33:20 +02:00
parent 58f598fc88
commit 373b07f271
1 changed files with 14 additions and 14 deletions

View File

@ -202,45 +202,45 @@ def pair_device(receiver, args):
# get all current devices # get all current devices
known_devices = [dev.number for dev in receiver] known_devices = [dev.number for dev in receiver]
from logitech.unifying_receiver import base, hidpp10, status from logitech.unifying_receiver import base, hidpp10, status, notifications
r_status = status.ReceiverStatus(receiver, lambda *args, **kwargs: None) receiver.status = status.ReceiverStatus(receiver, lambda *args, **kwargs: None)
# check if it's necessary to set the notification flags # check if it's necessary to set the notification flags
notification_flags = hidpp10.get_notification_flags(receiver) or 0 old_notification_flags = hidpp10.get_notification_flags(receiver) or 0
if not notification_flags & hidpp10.NOTIFICATION_FLAG.wireless: if not (old_notification_flags & hidpp10.NOTIFICATION_FLAG.wireless):
hidpp10.set_notification_flags(receiver, notification_flags | hidpp10.NOTIFICATION_FLAG.wireless) hidpp10.set_notification_flags(receiver, old_notification_flags | hidpp10.NOTIFICATION_FLAG.wireless)
class HandleWithNotificationHook(int): class HandleWithNotificationHook(int):
def notifications_hook(self, n): def notifications_hook(self, n):
assert n assert n
if n.devnumber == 0xFF: if n.devnumber == 0xFF:
r_status.process_notification(n) notifications.process(receiver, n)
elif n.sub_id == 0x41 and n.address == 0x04: elif n.sub_id == 0x41 and n.address == 0x04:
if n.devnumber not in known_devices: if n.devnumber not in known_devices:
r_status.new_device = receiver[n.devnumber] receiver.status.new_device = receiver[n.devnumber]
timeout = 20 # seconds timeout = 20 # seconds
receiver.handle = HandleWithNotificationHook(receiver.handle) receiver.handle = HandleWithNotificationHook(receiver.handle)
receiver.set_lock(False, timeout=timeout) receiver.set_lock(False, timeout=timeout)
print ("Pairing: turn your new device on (timing out in", timeout, "seconds).") print ("Pairing: turn your new device on (timing out in", timeout, "seconds).")
while r_status.lock_open: while receiver.status.lock_open:
n = base.read(receiver.handle) n = base.read(receiver.handle)
if n: if n:
n = base.make_notification(*n) n = base.make_notification(*n)
if n: if n:
receiver.handle.notifications_hook(n) receiver.handle.notifications_hook(n)
if not notification_flags & hidpp10.NOTIFICATION_FLAG.wireless: if not (old_notification_flags & hidpp10.NOTIFICATION_FLAG.wireless):
# only clear the flags if they weren't set before, otherwise a # only clear the flags if they weren't set before, otherwise a
# concurrently running Solaar app might stop working properly # concurrently running Solaar app might stop working properly
hidpp10.set_notification_flags(receiver, notification_flags) hidpp10.set_notification_flags(receiver, old_notification_flags)
if r_status.new_device: if receiver.status.new_device:
dev = r_status.new_device dev = receiver.status.new_device
print ("Paired device %d: %s [%s:%s]" % (dev.number, dev.name, dev.codename, dev.serial)) print ("Paired device %d: %s [%s:%s:%s]" % (dev.number, dev.name, dev.wpid, dev.codename, dev.serial))
else: else:
_fail(r_status[status.ERROR]) _fail(receiver.status[status.KEYS.ERROR])
def unpair_device(receiver, args): def unpair_device(receiver, args):