refractoring and more tests

This commit is contained in:
2024-12-19 14:01:32 +01:00
parent daa2d92257
commit 5d2f0f4fdf
10 changed files with 185 additions and 122 deletions

View File

@@ -2,6 +2,20 @@ import serial
import time
import logging as log
SAMPLING_RATE_KHZ = 16
FRAME_DUR_MS = 10
PRESET = f'{SAMPLING_RATE_KHZ}_2_1'
if SAMPLING_RATE_KHZ == 8:
BITRATE_KBPS = 16
elif SAMPLING_RATE_KHZ == 16:
BITRATE_KBPS = 32
elif SAMPLING_RATE_KHZ == 24:
BITRATE_KBPS = 48
else:
raise NotImplemented()
def write_to_serial_read_respone(port, cmd, timeout = 2):
# Initialize serial connection
ser = serial.Serial(timeout = timeout)
@@ -40,7 +54,7 @@ def write_to_serial_read_respone(port, cmd, timeout = 2):
def gen_broadcast_config_cmd(serial_port, preset, broadcast_config: dict):
def gen_broadcast_config_cmd(preset, broadcast_config: dict):
"""
Writes broadcaster configuration to the given serial port.
@@ -50,45 +64,55 @@ def gen_broadcast_config_cmd(serial_port, preset, broadcast_config: dict):
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')
ser.write(f"nac clear".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
for ch, file_name in broadcast_config.items():
cmds.append(f"nac preset {preset} {ch}")
cmds.append(f"nac broadcast_name {broadcast_name} {ch}")
cmds.append(f"nac file select_play_once {left_channel_file} {ch} 0 0")
cmds.append(f"nac broadcast_name broadcast{ch} {ch}")
cmds.append(f"nac file select_play_once {file_name} {ch} 0 0")
cmds.append(f"nac num_bises 1 {ch} 0")
#cmds.append(f"nac immediate 1 {ch} 0")
cmds.append(f"nac start")
return cmds
def broadcaster_config():
serial_port = "/dev/ttyACM0"
broadcast_config = {
"broadcast1": "left24kHz_48kbps.lc3",
"broadcast2": "right-channel_24kHz_left_48kbps_10ms.lc3"
}
# TODO: Advertising interval wird ungelmäßig bei mehr als 3 broadcasts 10ms -> 1s< bei 24kHz sampling rate
BROADCAST_CONFIG = {
0: f"announcement_{SAMPLING_RATE_KHZ}_{FRAME_DUR_MS}_{BITRATE_KBPS}_de.lc3",
1: f"announcement_{SAMPLING_RATE_KHZ}_{FRAME_DUR_MS}_{BITRATE_KBPS}_en.lc3",
2: f"announcement_{SAMPLING_RATE_KHZ}_{FRAME_DUR_MS}_{BITRATE_KBPS}_fr.lc3",
#3: f"announcement_{SAMPLING_RATE_KHZ}_{FRAME_DUR_MS}_{BITRATE_KBPS}_es.lc3",
#4: f"announcement_{SAMPLING_RATE_KHZ}_{FRAME_DUR_MS}_{BITRATE_KBPS}_it.lc3"
}
def broadcaster_config():
import subprocess
PORT = "/dev/ttyACM0"
total_ret= ""
cmds = gen_broadcast_config_cmd(PRESET, BROADCAST_CONFIG)
subprocess.run(["nrfjprog", "--reset", "-s", "1050109484"], check=True)
time.sleep(2)
ret = write_to_serial_read_respone(PORT, f"nac en_usb_mass", timeout=0.1)
total_ret += "\n".join(ret)
log.info("\n".join(ret))
time.sleep(1)
#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)
ret = write_to_serial_read_respone(PORT, cmd, timeout=0.1)
log.info("\n".join(ret))
ret = write_to_serial_read_respone(serial_port, "nac show", timeout=0.1)
ret_str = "\n".join(ret)
log.info(ret_str)
total_ret += "\n".join(ret)
time.sleep(1)
for i in BROADCAST_CONFIG.keys():
ret = write_to_serial_read_respone(PORT, f"nac start_idx {i}", timeout=0.1)
total_ret += "\n".join(ret)
log.info("\n".join(ret))
time.sleep(0.2)
return total_ret
return ret_str

View File

@@ -3,21 +3,26 @@ from .broadcaster_config import write_to_serial_read_respone
import time
import logging as log
def broadcaster_play_file(broadcast_ch, file):
def broadcaster_play_file(broadcast_ch, file, wait_after_stop = 1):
serial_port = "/dev/ttyACM0"
ret_all_str = ""
for i in range(3):
ret = write_to_serial_read_respone(serial_port, f"nac file stream_close {broadcast_ch} 0 0", timeout=0.1)
time.sleep(0.5)
if wait_after_stop is not None:
time.sleep(wait_after_stop)
ret += "\n"
ret += write_to_serial_read_respone(serial_port, f"nac file select_play_once {file} {broadcast_ch} 0 0", timeout=0.1)
ret_str = "\n".join(ret)
log.info(ret_str)
ret = "\n".join(ret)
ret_all_str += ret
if not "Failed" in ret:
if (not "Failed" in ret) and (not "err" in ret):
log.info("Breaking after %s retries.", i)
break
log.info(ret_all_str)
return ret
return ret_str
log.error("Failed to play file after 3 retries.")
log.error(ret_all_str)
return ret_all_str