fixed query of name/serial for devices

This commit is contained in:
Daniel Pavel 2012-11-08 00:29:07 +02:00
parent b2db0706c6
commit 6602d7ee13
1 changed files with 9 additions and 13 deletions

View File

@ -105,13 +105,11 @@ class _FeaturesArray(object):
class DeviceInfo(_api.PairedDevice):
"""A device attached to the receiver.
"""
def __init__(self, listener, number, serial_prefix, status=STATUS.UNKNOWN):
def __init__(self, listener, number, status=STATUS.UNKNOWN):
super(DeviceInfo, self).__init__(listener.handle, number)
self.LOG = _Logger("Device[%d]" % number)
self._listener = listener
self._pair_code = _pack('!B', 0x40 + number - 1)
self._serial_prefix = _base._hex(serial_prefix)
self._serial = None
self._codename = None
@ -182,18 +180,17 @@ class DeviceInfo(_api.PairedDevice):
@property
def serial(self):
if self._serial is None:
# dodgy
b = bytearray(self._pair_code)
b[0] -= 0x10
serial = _base.request(self.handle, 0xFF, b'\x83\xB5', bytes(b))
if serial:
self._serial = self._serial_prefix + '-' + _base._hex(serial[1:5])
return self._serial or self._serial_prefix + '-?'
prefix = _base.request(self.handle, 0xFF, b'\x83\xB5', 0x20 + self.number - 1)
prefix = (_base._hex(prefix[3:5]) + '-') if prefix else ''
serial = _base.request(self.handle, 0xFF, b'\x83\xB5', 0x30 + self.number - 1)
serial = _base._hex(serial[1:5]) if serial else '?'
self._serial = prefix + serial
return self._serial or '?'
@property
def codename(self):
if self._codename is None:
codename = _base.request(self.handle, 0xFF, b'\x83\xB5', self._pair_code)
codename = _base.request(self.handle, 0xFF, b'\x83\xB5', 0x40 + self.number - 1)
if codename:
self._codename = codename[2:].rstrip(b'\x00').decode('ascii')
return self._codename or '?'
@ -345,8 +342,7 @@ class ReceiverListener(_EventsListener):
status = self._device_status_from(event)
if status is not None:
serial_prefix = event.data[-1:] + event.data[-2:-1]
dev = DeviceInfo(self, event.devnumber, serial_prefix, status)
dev = DeviceInfo(self, event.devnumber, status)
self.LOG.info("new device %s", dev)
self.status_changed(dev, True)
return dev