From f2335df4a7a81f45ed04d477258c0c4d301a86a7 Mon Sep 17 00:00:00 2001 From: pstruebi Date: Thu, 20 Feb 2025 12:51:16 +0100 Subject: [PATCH] refractoring --- .gitignore | 6 +- .vscode/launch.json | 19 ++ .vscode/tasks.json | 12 ++ auracast/auracast_config.py | 1 + auracast/multicast.py | 408 +++++++++++++++++++----------------- pyproject.toml | 2 +- 6 files changed, 247 insertions(+), 201 deletions(-) create mode 100644 .vscode/launch.json create mode 100644 .vscode/tasks.json diff --git a/.gitignore b/.gitignore index 22923a2..32b1bbf 100644 --- a/.gitignore +++ b/.gitignore @@ -4,7 +4,6 @@ coverage/ # Coverage results after running tests with coverage tools .dist-info/ # Wheel metadata (use poetry build to handle this) *.egg-info/ # Egg info directory (automatically created by pip) auracast.egg-info/ -.vscode/ # IDE configuration (edit in VS Code) # Ignore these file types and extensions *.pyc # Compiled Python files (.pyc, .pyo are automatically ignored by git) @@ -16,11 +15,11 @@ venv/ env/ # Ignore any IDE configurations or project-specific metadata -.vscode/** .pycharm/** *.iml .project .settings +.vscode/settings.json # Ignore test results and logs (adjust to your specific testing framework) /testresults/** @@ -35,4 +34,5 @@ env/ __pycache__/ # Exclude .env file from all platforms -*/.env \ No newline at end of file +*/.env + diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..8f20a7e --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,19 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Python Debugger: current file", + "type": "debugpy", + "request": "launch", + "program": "${file}", + "console": "integratedTerminal", + "justMyCode": true, + "args": [ + + ] + } + ] +} diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..9d813cc --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,12 @@ +{ + // See https://go.microsoft.com/fwlink/?LinkId=733558 + // for the documentation about the tasks.json format + "version": "2.0.0", + "tasks": [ + { + "label": "pip install -e bumble", + "type": "shell", + "command": "pip install -e ../bumble --config-settings editable_mode=compat" + } + ] +} \ No newline at end of file diff --git a/auracast/auracast_config.py b/auracast/auracast_config.py index 5393e96..80978c0 100644 --- a/auracast/auracast_config.py +++ b/auracast/auracast_config.py @@ -53,6 +53,7 @@ class AuracastBigConfig: name: str = 'Broadcast0' program_info: str = 'Some Announcements' audio_source: str = 'file:./auracast/announcement_48_10_96000_en.wav' + iso_que_len: int = 64 loop_wav: bool = True diff --git a/auracast/multicast.py b/auracast/multicast.py index 2633a4f..7579d30 100644 --- a/auracast/multicast.py +++ b/auracast/multicast.py @@ -97,228 +97,243 @@ def run_async(async_command: Coroutine) -> None: ) async def setup_broadcast( + device, global_config : auracast_config.AuracastGlobalConfig, big_config: List[auracast_config.AuracastBigConfig] + ) -> dict: -) -> None: - async with create_device(global_config) as device: - if not device.supports_le_periodic_advertising: - logger.error(color('Periodic advertising not supported', 'red')) - return - - bap_sampling_freq = getattr(bap.SamplingFrequency, f"FREQ_{global_config.auracast_sampling_rate_hz}") - bigs = {} - for i, conf in enumerate(big_config): - bigs[f'big{i}'] = {} - # Config advertising set - bigs[f'big{i}']['basic_audio_announcement'] = bap.BasicAudioAnnouncement( - presentation_delay=global_config.presentation_delay_us, - subgroups=[ - bap.BasicAudioAnnouncement.Subgroup( - codec_id=hci.CodingFormat(codec_id=hci.CodecID.LC3), - codec_specific_configuration=bap.CodecSpecificConfiguration( - sampling_frequency=bap_sampling_freq, - frame_duration=bap.FrameDuration.DURATION_10000_US, - octets_per_codec_frame=global_config.octets_per_frame, - ), - metadata=le_audio.Metadata( - [ - le_audio.Metadata.Entry( - tag=le_audio.Metadata.Tag.LANGUAGE, data=conf.language.encode() - ), - le_audio.Metadata.Entry( - tag=le_audio.Metadata.Tag.PROGRAM_INFO, data=conf.program_info.encode() - ), - le_audio.Metadata.Entry( - tag=le_audio.Metadata.Tag.BROADCAST_NAME, data=conf.name.encode() - ), - ] - ), - bis=[ - bap.BasicAudioAnnouncement.BIS( - index=1, - codec_specific_configuration=bap.CodecSpecificConfiguration( - audio_channel_allocation=bap.AudioLocation.FRONT_LEFT - ), + bap_sampling_freq = getattr(bap.SamplingFrequency, f"FREQ_{global_config.auracast_sampling_rate_hz}") + bigs = {} + for i, conf in enumerate(big_config): + bigs[f'big{i}'] = {} + # Config advertising set + bigs[f'big{i}']['basic_audio_announcement'] = bap.BasicAudioAnnouncement( + presentation_delay=global_config.presentation_delay_us, + subgroups=[ + bap.BasicAudioAnnouncement.Subgroup( + codec_id=hci.CodingFormat(codec_id=hci.CodecID.LC3), + codec_specific_configuration=bap.CodecSpecificConfiguration( + sampling_frequency=bap_sampling_freq, + frame_duration=bap.FrameDuration.DURATION_10000_US, + octets_per_codec_frame=global_config.octets_per_frame, + ), + metadata=le_audio.Metadata( + [ + le_audio.Metadata.Entry( + tag=le_audio.Metadata.Tag.LANGUAGE, data=conf.language.encode() ), - ], - ) - ], - ) - logger.info('Setup Advertising') - advertising_manufacturer_data = ( - b'' - if global_config.manufacturer_data is None - else bytes( - core.AdvertisingData( - [ - ( - core.AdvertisingData.MANUFACTURER_SPECIFIC_DATA, - struct.pack('