diff --git a/auracast/auracast.py b/auracast/auracast.py index 566cf74..cf9b7e4 100644 --- a/auracast/auracast.py +++ b/auracast/auracast.py @@ -84,6 +84,7 @@ async def create_device(config: auracast_config.AuracastGlobalConfig) -> AsyncGe name=config.device_name, address=config.auracast_device_address, keystore='JsonKeyStore', + le_simultaneous_enabled=True #TODO: needed ? ) device = bumble.device.Device.from_config_with_hci( @@ -111,6 +112,9 @@ def run_async(async_command: Coroutine) -> None: color('!!! An error occurred while executing the command:', 'red'), message ) +PKGS_COUNT = 0 +ADVERTISING_INTERVAL_SLOWDOWN_FACTOR = 2 + async def run_broadcast( global_config : auracast_config.AuracastGlobalConfig, big_config: List[auracast_config.AuracastBigConfig] @@ -184,9 +188,9 @@ async def run_broadcast( advertising_event_properties=bumble.device.AdvertisingEventProperties( is_connectable=False ), - primary_advertising_interval_min=100, - primary_advertising_interval_max=200, - advertising_sid=0 + primary_advertising_interval_min=100*ADVERTISING_INTERVAL_SLOWDOWN_FACTOR, + primary_advertising_interval_max=200*ADVERTISING_INTERVAL_SLOWDOWN_FACTOR, + advertising_sid=i # TODO: use 2mbit phy ), advertising_data=( @@ -198,8 +202,8 @@ async def run_broadcast( ) ), periodic_advertising_parameters=bumble.device.PeriodicAdvertisingParameters( - periodic_advertising_interval_min=80, - periodic_advertising_interval_max=160, + periodic_advertising_interval_min=80*ADVERTISING_INTERVAL_SLOWDOWN_FACTOR, + periodic_advertising_interval_max=160*ADVERTISING_INTERVAL_SLOWDOWN_FACTOR, ), periodic_advertising_data=bigs[f'big{i}']['basic_audio_announcement'].get_advertising_data(), auto_restart=True, @@ -234,11 +238,21 @@ async def run_broadcast( bigs[f'big{i}']['frames_iterator'] = itertools.cycle(frames) + LOOP_FINITE_PKGS = -1 # set -1 to loop infinitely + logging.info("Broadcasting...") def on_packet_complete(event): - for val in bigs.values(): - frame = next(val['frames_iterator'] ) - val['big'].bis_links[0].write(frame) + global PKGS_COUNT + #for val in bigs.values(): # loop over bigs + #frame = next(val['frames_iterator'] ) + #val['big'].bis_links[0].write(frame) + #global pkgs_count + PKGS_COUNT = PKGS_COUNT + 1 + if PKGS_COUNT < LOOP_FINITE_PKGS or LOOP_FINITE_PKGS == -1 : + frame = next(bigs[f'big0']['frames_iterator'] ) + bigs[f'big0']['big'].bis_links[0].write(frame) + bigs[f'big1']['big'].bis_links[0].write(frame) + device.host.on('hci_number_of_completed_packets_event', on_packet_complete) @@ -264,7 +278,7 @@ def broadcast(global_conf: auracast_config.AuracastGlobalConfig, big_conf: List[ # ----------------------------------------------------------------------------- if __name__ == "__main__": - logging.basicConfig(level=logging.INFO) + logging.basicConfig(level=logging.DEBUG) global_conf = auracast_config.global_base_config @@ -273,14 +287,16 @@ 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 + # TODO: why are nrf54l15 and nrf52 not streaming - no sound can be heard. Advertising starts, streaming too but no sound # nrf5340 audio dk log says: audio_datapath: Pres comp state never gets to locked + # Look at le audio transmitted packages with wireshark next ?? bigs = [ auracast_config.broadcast_de, - #auracast_config.broadcast_en + auracast_config.broadcast_en ] global_conf.octets_per_frame=60# 48kbps@24kHz