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