receiver: use last_id as maximum device number not max_devices
This commit is contained in:
parent
a36a6297f3
commit
4059b377b4
|
@ -44,7 +44,7 @@ class Device:
|
||||||
self.product_id = None
|
self.product_id = None
|
||||||
|
|
||||||
if receiver:
|
if receiver:
|
||||||
assert number > 0 and number <= receiver.max_devices
|
assert number > 0 and number <= 15 # some receivers have devices past their max # of devices
|
||||||
self.number = number # will be None at this point for directly connected devices
|
self.number = number # will be None at this point for directly connected devices
|
||||||
# 'device active' flag; requires manual management.
|
# 'device active' flag; requires manual management.
|
||||||
self.online = None
|
self.online = None
|
||||||
|
|
|
@ -62,6 +62,7 @@ class Receiver:
|
||||||
self.receiver_kind = product_info.get('receiver_kind', 'unknown')
|
self.receiver_kind = product_info.get('receiver_kind', 'unknown')
|
||||||
|
|
||||||
# read the serial immediately, so we can find out max_devices
|
# read the serial immediately, so we can find out max_devices
|
||||||
|
self.last_id = 0
|
||||||
if self.receiver_kind == 'bolt':
|
if self.receiver_kind == 'bolt':
|
||||||
serial_reply = self.read_register(_R.bolt_uniqueId)
|
serial_reply = self.read_register(_R.bolt_uniqueId)
|
||||||
self.serial = _strhex(serial_reply)
|
self.serial = _strhex(serial_reply)
|
||||||
|
@ -72,6 +73,7 @@ class Receiver:
|
||||||
if serial_reply:
|
if serial_reply:
|
||||||
self.serial = _strhex(serial_reply[1:5])
|
self.serial = _strhex(serial_reply[1:5])
|
||||||
self.max_devices = ord(serial_reply[6:7])
|
self.max_devices = ord(serial_reply[6:7])
|
||||||
|
self.last_id = ord(serial_reply[7:8])
|
||||||
if self.max_devices <= 0 or self.max_devices > 6:
|
if self.max_devices <= 0 or self.max_devices > 6:
|
||||||
self.max_devices = product_info.get('max_devices', 1)
|
self.max_devices = product_info.get('max_devices', 1)
|
||||||
# TODO _properly_ figure out which receivers do and which don't support unpairing
|
# TODO _properly_ figure out which receivers do and which don't support unpairing
|
||||||
|
@ -84,6 +86,7 @@ class Receiver:
|
||||||
self.serial = None
|
self.serial = None
|
||||||
self.max_devices = product_info.get('max_devices', 1)
|
self.max_devices = product_info.get('max_devices', 1)
|
||||||
self.may_unpair = product_info.get('may_unpair', False)
|
self.may_unpair = product_info.get('may_unpair', False)
|
||||||
|
self.last_id = self.last_id if self.last_id else self.max_devices
|
||||||
|
|
||||||
self.name = product_info.get('name', '')
|
self.name = product_info.get('name', '')
|
||||||
self.re_pairs = product_info.get('re_pairs', False)
|
self.re_pairs = product_info.get('re_pairs', False)
|
||||||
|
@ -295,7 +298,7 @@ class Receiver:
|
||||||
write_register = _hidpp10.write_register
|
write_register = _hidpp10.write_register
|
||||||
|
|
||||||
def __iter__(self):
|
def __iter__(self):
|
||||||
for number in range(1, 1 + self.max_devices):
|
for number in range(1, 16): # some receivers have devices past their max # devices
|
||||||
if number in self._devices:
|
if number in self._devices:
|
||||||
dev = self._devices[number]
|
dev = self._devices[number]
|
||||||
else:
|
else:
|
||||||
|
@ -313,7 +316,7 @@ class Receiver:
|
||||||
|
|
||||||
if not isinstance(key, int):
|
if not isinstance(key, int):
|
||||||
raise TypeError('key must be an integer')
|
raise TypeError('key must be an integer')
|
||||||
if key < 1 or key > self.max_devices:
|
if key < 1 or key > 15: # some receivers have devices past their max # devices
|
||||||
raise IndexError(key)
|
raise IndexError(key)
|
||||||
|
|
||||||
return self.register_new_device(key)
|
return self.register_new_device(key)
|
||||||
|
|
|
@ -157,7 +157,7 @@ def _find_device(receivers, name):
|
||||||
|
|
||||||
for r in receivers:
|
for r in receivers:
|
||||||
if not r.isDevice: # look for nth device of receiver
|
if not r.isDevice: # look for nth device of receiver
|
||||||
if number and number <= r.max_devices:
|
if number:
|
||||||
dev = r[number]
|
dev = r[number]
|
||||||
if dev:
|
if dev:
|
||||||
yield dev
|
yield dev
|
||||||
|
|
|
@ -205,7 +205,7 @@ class ReceiverListener(_listener.EventsListener):
|
||||||
return
|
return
|
||||||
|
|
||||||
# a device notification
|
# a device notification
|
||||||
if not (0 < n.devnumber <= self.receiver.max_devices):
|
if not (0 < n.devnumber <= 16): # some receivers have devices past their max # devices
|
||||||
if _log.isEnabledFor(_WARNING):
|
if _log.isEnabledFor(_WARNING):
|
||||||
_log.warning('Unexpected device number (%s) in notification %s.', n.devnumber, n)
|
_log.warning('Unexpected device number (%s) in notification %s.', n.devnumber, n)
|
||||||
return
|
return
|
||||||
|
|
Loading…
Reference in New Issue