diff --git a/app/receiver.py b/app/receiver.py index 9c928ea2..7ec7625f 100644 --- a/app/receiver.py +++ b/app/receiver.py @@ -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