1
0

add bandwidth setting to xrd

This commit is contained in:
2026-02-20 18:02:01 +01:00
parent 9576fbae3a
commit 0fd3e08766

64
xrd.py
View File

@@ -47,33 +47,40 @@ def authenticate(conn):
if data.strip() == expected_hash.strip(): return True
def process_command(tef: TEF6686, data: bytes, state):
if data.startswith(b"T"):
freq = int(data.decode().removeprefix("T").strip()) // 10
state['last_tune'] = freq
tef.FM_Tune_To(1, freq)
return f"T{freq*10}\n".encode()
elif data.startswith(b"G"):
eqims = int(data.decode().removeprefix("G").strip(), 2)
state['last_eqims'] = eqims
tef.FM_Set_ChannelEqualizer((eqims & 1) == 1)
tef.FM_Set_MphSuppression((eqims & 2) == 2)
return f"G{bin(eqims).removeprefix('0b').zfill(2)}\n".encode()
elif data.startswith(b"B"):
mono = bool(int(data.decode().removeprefix("B").strip(), 2))
state['forced_mono'] = mono
tef.FM_Set_Stereo_Min(2 if mono else 0)
return f"B{int(mono)}\n".encode()
elif data.startswith(b"D"):
deemp = int(data.decode().removeprefix("D").strip())
time = 500 if deemp == 0 else (750 if deemp == 1 else 0)
state['deemp'] = deemp
tef.FM_Set_Deemphasis(time)
return f"D{deemp}\n".encode()
if data.startswith(b"x"):
return b"OK"
out = b""
for cmd in data.splitlines():
if cmd.startswith(b"T"):
freq = int(cmd.decode().removeprefix("T").strip()) // 10
state['last_tune'] = freq
tef.FM_Tune_To(1, freq)
out += f"T{freq*10}\n".encode()
elif cmd.startswith(b"G"):
eqims = int(cmd.decode().removeprefix("G").strip(), 2)
state['last_eqims'] = eqims
tef.FM_Set_ChannelEqualizer((eqims & 1) == 1)
tef.FM_Set_MphSuppression((eqims & 2) == 2)
out += f"G{bin(eqims).removeprefix('0b').zfill(2)}\n".encode()
elif cmd.startswith(b"B"):
mono = bool(int(cmd.decode().removeprefix("B").strip(), 2))
state['forced_mono'] = mono
tef.FM_Set_Stereo_Min(2 if mono else 0)
out += f"B{int(mono)}\n".encode()
elif cmd.startswith(b"D"):
deemp = int(cmd.decode().removeprefix("D").strip())
time = 500 if deemp == 0 else (750 if deemp == 1 else 0)
state['deemp'] = deemp
tef.FM_Set_Deemphasis(time)
out += f"D{deemp}\n".encode()
elif cmd.startswith(b"x"):
out += b"OK\n"
elif cmd.startswith(b"W"):
bw = int(cmd.decode().removeprefix("W").strip())
auto = (bw == 0)
tef.FM_Set_Bandwidth(auto, 2360 if auto else (bw // 100))
state['bw'] = bw
out += f"W{bw}\n".encode()
return None
return out
def send_signal_status(tef: TEF6686, conn, state):
_, _, stereo, _ = tef.FM_Get_Processing_Status()
@@ -124,7 +131,8 @@ def run_server():
'last_tune': 9500,
'last_eqims': 0b11,
'forced_mono': False,
'deemp': 0
'deemp': 0,
'bw': 0
}
try:
@@ -146,6 +154,7 @@ def run_server():
conn.sendall(f"G{bin(state['last_eqims']).removeprefix('0b').zfill(2)}\n".encode())
conn.sendall(f"B{int(state['forced_mono'])}\n".encode())
conn.sendall(f"D{state['deemp']}\n".encode())
conn.sendall(f"W{state['bw']}\n".encode())
conn.setblocking(False)
ss_timer = libtimer.Timer()
@@ -155,6 +164,7 @@ def run_server():
try:
data = conn.recv(1024)
if not data: break
print(data)
resp = process_command(tef, data, state)
if resp: conn.sendall(resp)
except ConnectionResetError: break