From a70bf09bfa57522a0b2a2de0ad6dd3565f1df935 Mon Sep 17 00:00:00 2001 From: pstruebi Date: Thu, 5 Dec 2024 18:07:05 +0100 Subject: [PATCH] Add broadcaster with python --- broadcaster_config.txt | 2 +- config_broadcaster.py | 90 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 91 insertions(+), 1 deletion(-) create mode 100644 config_broadcaster.py diff --git a/broadcaster_config.txt b/broadcaster_config.txt index c101fc3..effbd3e 100644 --- a/broadcaster_config.txt +++ b/broadcaster_config.txt @@ -8,4 +8,4 @@ nac file select right-channel_24kHz_left_48kbps_10ms.lc3 1 0 0 nac file select right-channel_24kHz_left_48kbps_10ms.lc3 1 0 1 nac broadcast_name broadcast2 1 -nac start \ No newline at end of file +nac start \ No newline at end of file diff --git a/config_broadcaster.py b/config_broadcaster.py new file mode 100644 index 0000000..90845a4 --- /dev/null +++ b/config_broadcaster.py @@ -0,0 +1,90 @@ +import serial +import time + + +def write_to_serial_read_respone(port, cmd, timeout = 2): + # Initialize serial connection + ser = serial.Serial(timeout = timeout) + ser.port = port + ser.baudrate = 115200 + ser.bytesize = serial.EIGHTBITS + ser.parity = serial.PARITY_NONE + ser.stopbits = serial.STOPBITS_ONE + + try: + # Try to open the serial connection + #if not ser.is_open: + ser.open() + + # Send string to serial port and get response + command = f"{cmd.strip()}\r\n" + ser.write(command.encode()) + time.sleep(1) # wait a bit for response + + readlines = [] + for _ in range(20): + line = ser.readline().decode('utf-8').strip() + if not line: + ser.close() + break + else: + readlines.append(line) + + except serial.SerialException as e: + print(f"Error communicating with serial port: {e}") + finally: + # Close serial connection before returning + if ser.is_open: + ser.close() + return readlines + + + +def gen_broadcast_config_cmd(serial_port, preset, broadcast_config: dict): + """ + Writes broadcaster configuration to the given serial port. + + Args: + serial_port (str): Device path of the serial port (e.g., '/dev/ttyACM0') + preset (str): Preset string used in nac preset line + broadcast_names (list): List of names for each broadcast group + """ + cmds = [] + with serial.Serial(serial_port, 115200) as ser: + ser.write(f"nac stop".encode() + b'\r\n') + time.sleep(.5) + + for ch, d in enumerate(broadcast_config.items()): + broadcast_name, file_name = d + + left_channel_file = file_name + right_channel_file = file_name + + cmds.append(f"nac preset {preset} {ch}") + cmds.append(f"nac broadcast_name {broadcast_name} {ch}") + cmds.append(f"nac file select {left_channel_file} {ch} 0 0") + #cmds.append(f"nac file select {right_channel_file} {ch} 0 1") + + cmds.append(f"nac start") + + return cmds + +if __name__ == "__main__": + serial_port = "/dev/ttyACM0" + broadcast_config = { + "broadcast1": "left24kHz_48kbps.lc3", + "broadcast2": "right-channel_24kHz_left_48kbps_10ms.lc3" + } + + #write_config_to_tty(serial_port, "24_2_1", broadcast_config) + # Example usage: + cmds = gen_broadcast_config_cmd(serial_port, "24_2_1", broadcast_config) + + for cmd in cmds: + ret = write_to_serial_read_respone(serial_port, cmd, timeout=0.1) + print("\n".join(ret)) + + ret = write_to_serial_read_respone(serial_port, "nac show", timeout=0.1) + print("\n".join(ret)) + +