receiver: return null values if no pairing information available

This commit is contained in:
Peter F. Patel-Schneider 2022-08-14 20:26:48 -04:00
parent 4059b377b4
commit 2fbaa4a3aa
2 changed files with 8 additions and 10 deletions

View File

@ -227,7 +227,7 @@ class Device:
return self._tid_map return self._tid_map
def update_pairing_information(self): def update_pairing_information(self):
if self.receiver: if self.receiver and (not self.wpid or self._kind is None or self._polling_rate is None):
wpid, kind, polling_rate = self.receiver.device_pairing_information(self.number) wpid, kind, polling_rate = self.receiver.device_pairing_information(self.number)
if not self.wpid: if not self.wpid:
self.wpid = wpid self.wpid = wpid

View File

@ -171,8 +171,10 @@ class Receiver:
return wpid, kind, 0 return wpid, kind, 0
else: else:
raise _base.NoSuchDevice(number=n, receiver=self, error='read Bolt wpid') raise _base.NoSuchDevice(number=n, receiver=self, error='read Bolt wpid')
wpid = 0
kind = None
polling_rate = None
pair_info = self.read_register(_R.receiver_info, _IR.pairing_information + n - 1) pair_info = self.read_register(_R.receiver_info, _IR.pairing_information + n - 1)
polling_rate = 0
if pair_info: # may be either a Unifying receiver, or an Unifying-ready receiver if pair_info: # may be either a Unifying receiver, or an Unifying-ready receiver
wpid = _strhex(pair_info[3:5]) wpid = _strhex(pair_info[3:5])
kind = _hidpp10.DEVICE_KIND[ord(pair_info[7:8]) & 0x0F] kind = _hidpp10.DEVICE_KIND[ord(pair_info[7:8]) & 0x0F]
@ -183,14 +185,11 @@ class Receiver:
_log.error('Unable to get wpid from udev for device %d of %s', n, self) _log.error('Unable to get wpid from udev for device %d of %s', n, self)
raise _base.NoSuchDevice(number=n, receiver=self, error='Not present 27Mhz device') raise _base.NoSuchDevice(number=n, receiver=self, error='Not present 27Mhz device')
kind = _hidpp10.DEVICE_KIND[self.get_kind_from_index(n, self)] kind = _hidpp10.DEVICE_KIND[self.get_kind_from_index(n, self)]
else: else: # unifying protocol not supported, may be an old Nano receiver
# unifying protocol not supported, probably an old Nano receiver
device_info = self.read_register(_R.receiver_info, 0x04) device_info = self.read_register(_R.receiver_info, 0x04)
if device_info is None: if device_info:
_log.error('failed to read Nano wpid for device %d of %s', n, self) wpid = _strhex(device_info[3:5])
raise _base.NoSuchDevice(number=n, receiver=self, error='read Nano wpid') kind = _hidpp10.DEVICE_KIND[0x00] # unknown kind
wpid = _strhex(device_info[3:5])
kind = _hidpp10.DEVICE_KIND[0x00] # unknown kind
return wpid, kind, polling_rate return wpid, kind, polling_rate
def device_extended_pairing_information(self, n): def device_extended_pairing_information(self, n):
@ -246,7 +245,6 @@ class Receiver:
try: try:
dev = Device(self, number, notification) dev = Device(self, number, notification)
assert dev.wpid
if _log.isEnabledFor(_INFO): if _log.isEnabledFor(_INFO):
_log.info('%s: found new device %d (%s)', self, number, dev.wpid) _log.info('%s: found new device %d (%s)', self, number, dev.wpid)
self._devices[number] = dev self._devices[number] = dev