From 692f35d27a0032e1ebc8647347195cb1da7b541f Mon Sep 17 00:00:00 2001 From: pstruebi Date: Wed, 19 Feb 2025 09:37:35 +0100 Subject: [PATCH] Adaptions for new bumble version --- auracast/auracast_config.py | 1 + auracast/multicast.py | 55 ++++++++++++++++++------------------- 2 files changed, 28 insertions(+), 28 deletions(-) diff --git a/auracast/auracast_config.py b/auracast/auracast_config.py index 50632d2..1eca56e 100644 --- a/auracast/auracast_config.py +++ b/auracast/auracast_config.py @@ -31,6 +31,7 @@ class AuracastGlobalConfig: octets_per_frame: int = 60 #48kbps@24kHz # bitrate = octets_per_frame * 8 / frame len frame_duration_us: int = 10000 presentation_delay_us: int = 40000 + debug: bool = False @dataclass class AuracastBigConfig: diff --git a/auracast/multicast.py b/auracast/multicast.py index 2628935..eedc9a4 100644 --- a/auracast/multicast.py +++ b/auracast/multicast.py @@ -95,7 +95,7 @@ def run_async(async_command: Coroutine) -> None: color('!!! An error occurred while executing the command:', 'red'), message ) -ADVERTISING_SLOWDOWN_FACTOR=1 +ADVERTISING_SLOWDOWN_FACTOR=1.25 async def run_broadcast( global_config : auracast_config.AuracastGlobalConfig, big_config: List[auracast_config.AuracastBigConfig] @@ -183,7 +183,7 @@ async def run_broadcast( primary_advertising_phy=hci.Phy.LE_1M, # 2m phy config throws error - because for primary advertising channels, 1mbit is only supported secondary_advertising_phy=hci.Phy.LE_2M, # this is the secondary advertising beeing send on non advertising channels (extendend advertising) #advertising_tx_power= # tx power in dbm (max 20) - secondary_advertising_max_skip=10, + #secondary_advertising_max_skip=10, ), advertising_data=( bigs[f'big{i}']['broadcast_audio_announcement'].get_advertising_data() @@ -228,18 +228,17 @@ async def run_broadcast( ) bigs[f'big{i}']['big'] = big - iso_queues = [ - bumble.device.IsoPacketStream(big.bis_links[0], 64), - #bumble.device.IsoPacketStream(big.bis_links[1], 64), # right channel - ] - - logging.info('Setup ISO Data Path') - for queue in iso_queues: - await queue.iso_link.setup_data_path( - direction=queue.iso_link.Direction.HOST_TO_CONTROLLER + for bis_link in big.bis_links: + await bis_link.setup_data_path( + direction=bis_link.Direction.HOST_TO_CONTROLLER ) - bigs[f'big{i}']['iso_queues'] = iso_queues + iso_queue =bumble.device.IsoPacketStream(big.bis_links[0], 64), + + logging.info('Setup ISO Data Path') + + + bigs[f'big{i}']['iso_queues'] = iso_queue logging.debug(f'big{i} parameters are:') logging.debug('%s', pprint.pformat(vars(big))) @@ -250,7 +249,7 @@ async def run_broadcast( logging.info("Broadcasting...") def on_flow(): - data_packet_queue = iso_queues[0].data_packet_queue + data_packet_queue = iso_queue.data_packet_queue print( f'\rPACKETS: pending={data_packet_queue.pending}, ' f'queued={data_packet_queue.queued}, ' @@ -258,21 +257,20 @@ async def run_broadcast( end='', ) - bigs[f'big{0}']['iso_queues'][0].data_packet_queue.on('flow', on_flow) - async def streamer(queue, iterator): + if global_conf.debug: + bigs[f'big{0}']['iso_queues'][0].data_packet_queue.on('flow', on_flow) + + async def streamer(bigs): while True: - frame = next(iterator) - await queue[0].write(frame) + for big in bigs.values(): + # write one frame to each queue + frame = next(big['frames_iterator']) + await big['iso_queues'][0].write(frame) - streams = [] - for big in bigs.values(): - streams.append( - asyncio.create_task( - streamer(big['iso_queues'], big['frames_iterator']) - ) - ) + stream = streamer(bigs) + + await stream # running endlessly - await asyncio.wait(streams) print("Done.") @@ -303,11 +301,11 @@ if __name__ == "__main__": #global_conf.transport='serial:/dev/serial/by-id/usb-SEGGER_J-Link_001050076061-if02,1000000,rtscts' # transport for nrf53dk - #global_conf.transport='serial:/dev/serial/by-id/usb-SEGGER_J-Link_001057705357-if02,1000000,rtscts' # transport for nrf54l15dk + global_conf.transport='serial:/dev/serial/by-id/usb-SEGGER_J-Link_001057705357-if02,1000000,rtscts' # transport for nrf54l15dk - global_conf.transport='serial:/dev/serial/by-id/usb-ZEPHYR_Zephyr_HCI_UART_sample_81BD14B8D71B5662-if00,115200,rtscts' #nrf52dongle hci_uart usb cdc + #global_conf.transport='serial:/dev/serial/by-id/usb-ZEPHYR_Zephyr_HCI_UART_sample_81BD14B8D71B5662-if00,115200,rtscts' #nrf52dongle hci_uart usb cdc - # global_conf.transport='usb:2fe3:000b' #nrf52dongle hci_usb #TODO: iso packet over usb seems not to be supported + # global_conf.transport='usb:2fe3:000b' #nrf52dongle hci_usb # TODO: iso packet over usb not supported #global_conf.qos_config = auracast_config.qos_config_mono_medium_rel global_conf.qos_config = auracast_config.qos_config_mono_high_rel @@ -326,6 +324,7 @@ if __name__ == "__main__": global_conf.auracast_sampling_rate_hz = 16000 global_conf.octets_per_frame = 40 # 32kbps@16kHz + #global_conf.debug = True # TODO: How can we use other iso interval than 10ms ?(medium or low rel) ? - nrf53audio receiver repports I2S tx underrun broadcast(