diff --git a/driver/tef.py b/driver/tef.py index 127e278..ad8308a 100644 --- a/driver/tef.py +++ b/driver/tef.py @@ -17,6 +17,7 @@ def _command_wrapper(func: Callable[Concatenate[TEF6686, P], tuple[bytes, int | @wraps(func) def inner(self: TEF6686, *args: P.args, **kwargs: P.kwargs) -> bytes | T: data, read_bytes, out_parser = func(self, *args, **kwargs) + data, read_bytes, out_parser = self._pre_command_(func, data, read_bytes, out_parser) if read_bytes: data = self.p.write_read_i2c(self.address, data, read_bytes) else: data = self.p.write_i2c(self.address, data) @@ -33,6 +34,8 @@ def pack(*values: int | SignedInt): return struct.pack(struct_string, *values) class TEF6686(BaseTEF668X): + def _pre_command_(self, wrap: Callable, data: bytes, read_bytes: int | None, out_parser: Callable | None): return data, read_bytes, out_parser + class TuneTo_Mode(Enum): Preset = 1 Search = 2 @@ -333,6 +336,7 @@ def _7_command_wrapper(func: Callable[Concatenate[TEF6687, P], tuple[bytes, int @wraps(func) def inner(self: TEF6687, *args: P.args, **kwargs: P.kwargs) -> bytes | T: data, read_bytes, out_parser = func(self, *args, **kwargs) + data, read_bytes, out_parser = self._pre_command_(func, data, read_bytes, out_parser) if read_bytes: data = self.p.write_read_i2c(self.address, data, read_bytes) else: data = self.p.write_i2c(self.address, data) @@ -364,6 +368,7 @@ def _8_command_wrapper(func: Callable[Concatenate[TEF6688, P], tuple[bytes, int @wraps(func) def inner(self: TEF6688, *args: P.args, **kwargs: P.kwargs) -> bytes | T: data, read_bytes, out_parser = func(self, *args, **kwargs) + data, read_bytes, out_parser = self._pre_command_(func, data, read_bytes, out_parser) if read_bytes: data = self.p.write_read_i2c(self.address, data, read_bytes) else: data = self.p.write_i2c(self.address, data) diff --git a/xrd.py b/xrd.py index 012919a..8284454 100644 --- a/xrd.py +++ b/xrd.py @@ -46,7 +46,7 @@ def init_tef(): tef = TEF6686(p) tef.init(clock=CLOCK) tef.AUDIO_Set_Mute(False) - tef.AUDIO_Set_Volume(30) + tef.AUDIO_Set_Volume(20) tef.FM_Tune_To(TEF6686.TuneTo_Mode.Preset, INITIAL_FREQ) tef.FM_Set_RDS(1) tef.FM_Set_ChannelEqualizer(INITIAL_EQ) @@ -202,19 +202,19 @@ def send_rds_data(tef: TEF6686, conn: socket.socket, state: dict): data = b"" if (status & (1 << 13) == 0): err = 0 - err |= ((dec_error >> 8) & 0x30) >> 4 - err |= ((dec_error >> 8) & 0xC) - err |= ((dec_error >> 8) & 3) << 4 + err |= (dec_error & 0x30) >> 4 + err |= (dec_error & 0xC) + err |= (dec_error & 3) << 4 data = b"R" data += f"{B:04X}{C:04X}{D:04X}{err:02X}\n".encode() - pi_error = (dec_error >> 14) & 0b11 + pi_error = (dec_error >> 8) & 0b11 if pi_error < 3: data += b"P" + f"{A:04X}".encode() data += b"?" * pi_error + b"\n" elif status & (1 << 12): - pi_error = (dec_error >> 10) & 0b11 + pi_error = (dec_error >> 2) & 0b11 if pi_error < 3: data += b"P" + f"{C:04X}".encode() data += b"?" * pi_error + b"\n"