Add config for different qos
This commit is contained in:
@@ -3,8 +3,27 @@ from bumble.profiles import bap
|
|||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
|
|
||||||
# Define some base dataclasses to hold the relevant parameters
|
# Define some base dataclasses to hold the relevant parameters
|
||||||
|
@dataclass
|
||||||
|
class AuracastQoSConfig:
|
||||||
|
iso_interval_us: int = 10000
|
||||||
|
number_of_retransmissions:int = 4
|
||||||
|
max_transport_latency_ms:int = 43 # TODO: varies from the default value in bumble (was 65)
|
||||||
|
|
||||||
|
qos_config_mono_high_rel = AuracastQoSConfig() #highest rel + lowest latency
|
||||||
|
qos_config_mono_medium_rel = AuracastQoSConfig(
|
||||||
|
iso_interval_us = 10000,
|
||||||
|
number_of_retransmissions = 3,
|
||||||
|
max_transport_latency_ms = 65
|
||||||
|
)
|
||||||
|
qos_config_mono_low_rel = AuracastQoSConfig( #highest latency
|
||||||
|
iso_interval_us = 10000,
|
||||||
|
number_of_retransmissions = 2,
|
||||||
|
max_transport_latency_ms = 65
|
||||||
|
)
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class AuracastGlobalConfig:
|
class AuracastGlobalConfig:
|
||||||
|
qos_config: AuracastQoSConfig
|
||||||
device_name: str = 'Auracaster'
|
device_name: str = 'Auracaster'
|
||||||
transport: str = ''
|
transport: str = ''
|
||||||
auracast_device_address: hci.Address = hci.Address('F0:F1:F2:F3:F4:F5')
|
auracast_device_address: hci.Address = hci.Address('F0:F1:F2:F3:F4:F5')
|
||||||
@@ -13,7 +32,6 @@ class AuracastGlobalConfig:
|
|||||||
frame_duration_us: int = 10000
|
frame_duration_us: int = 10000
|
||||||
presentation_delay_us: int = 40000
|
presentation_delay_us: int = 40000
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class AuracastBigConfig:
|
class AuracastBigConfig:
|
||||||
broadcast_id: int =123456,
|
broadcast_id: int =123456,
|
||||||
@@ -24,7 +42,7 @@ class AuracastBigConfig:
|
|||||||
broadcast_program_info: str = 'Some Announcements'
|
broadcast_program_info: str = 'Some Announcements'
|
||||||
broacast_wav_file_path: str = './auracast/announcement_48_10_96000_en.wav'
|
broacast_wav_file_path: str = './auracast/announcement_48_10_96000_en.wav'
|
||||||
|
|
||||||
global_base_config = AuracastGlobalConfig()
|
global_base_config = AuracastGlobalConfig(qos_config=AuracastQoSConfig())
|
||||||
|
|
||||||
# Instanciate some example configurations
|
# Instanciate some example configurations
|
||||||
broadcast_de = AuracastBigConfig(
|
broadcast_de = AuracastBigConfig(
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
# Imports
|
# Imports
|
||||||
# -----------------------------------------------------------------------------
|
# -----------------------------------------------------------------------------
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
import pprint
|
||||||
import asyncio
|
import asyncio
|
||||||
import contextlib
|
import contextlib
|
||||||
import logging
|
import logging
|
||||||
@@ -43,7 +43,7 @@ from bumble.profiles import bass
|
|||||||
import bumble.device
|
import bumble.device
|
||||||
import bumble.transport
|
import bumble.transport
|
||||||
import bumble.utils
|
import bumble.utils
|
||||||
from bumble.device import Host
|
from bumble.device import Host, BIGInfoAdvertisement
|
||||||
|
|
||||||
import auracast_config
|
import auracast_config
|
||||||
|
|
||||||
@@ -184,7 +184,7 @@ async def run_broadcast(
|
|||||||
)
|
)
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
logging.info('Setup Advertising')
|
logger.info('Setup Advertising')
|
||||||
bigs[f'big{i}']['broadcast_audio_announcement'] = bap.BroadcastAudioAnnouncement(conf.broadcast_id)
|
bigs[f'big{i}']['broadcast_audio_announcement'] = bap.BroadcastAudioAnnouncement(conf.broadcast_id)
|
||||||
advertising_set = await device.create_advertising_set(
|
advertising_set = await device.create_advertising_set(
|
||||||
random_address=conf.broadcast_random_address,
|
random_address=conf.broadcast_random_address,
|
||||||
@@ -224,10 +224,10 @@ async def run_broadcast(
|
|||||||
bigs[f'big{i}']['advertising_set'] ,
|
bigs[f'big{i}']['advertising_set'] ,
|
||||||
parameters=bumble.device.BigParameters(
|
parameters=bumble.device.BigParameters(
|
||||||
num_bis=1,
|
num_bis=1,
|
||||||
sdu_interval=global_config.frame_duration_us,
|
sdu_interval=global_config.qos_config.iso_interval_us,
|
||||||
max_sdu=global_config.octets_per_frame, # is this octets per frame ?
|
max_sdu=global_config.octets_per_frame, # is this octets per frame ?
|
||||||
max_transport_latency=65,
|
max_transport_latency=global_config.qos_config.max_transport_latency_ms,
|
||||||
rtn=4,
|
rtn=global_config.qos_config.number_of_retransmissions,
|
||||||
broadcast_code=(
|
broadcast_code=(
|
||||||
bytes.fromhex(conf.broadcast_code) if conf.broadcast_code else None
|
bytes.fromhex(conf.broadcast_code) if conf.broadcast_code else None
|
||||||
),
|
),
|
||||||
@@ -243,6 +243,10 @@ async def run_broadcast(
|
|||||||
|
|
||||||
bigs[f'big{i}']['frames_iterator'] = itertools.cycle(frames)
|
bigs[f'big{i}']['frames_iterator'] = itertools.cycle(frames)
|
||||||
|
|
||||||
|
logging.debug(f'big{i} parameters are:')
|
||||||
|
logging.debug('%s', pprint.pformat(vars(big)))
|
||||||
|
logging.debug(f'Finished setup of big{i}.')
|
||||||
|
|
||||||
await asyncio.sleep(3) # Wait for advertising to set up
|
await asyncio.sleep(3) # Wait for advertising to set up
|
||||||
|
|
||||||
LOOP_FINITE_PKGS = -1 # set -1 to loop infinitely
|
LOOP_FINITE_PKGS = -1 # set -1 to loop infinitely
|
||||||
@@ -293,7 +297,10 @@ def broadcast(global_conf: auracast_config.AuracastGlobalConfig, big_conf: List[
|
|||||||
|
|
||||||
# -----------------------------------------------------------------------------
|
# -----------------------------------------------------------------------------
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
logging.basicConfig(level=logging.INFO)
|
logging.basicConfig(
|
||||||
|
level=logging.INFO,
|
||||||
|
format='%(module)s.py:%(lineno)d %(levelname)s: %(message)s'
|
||||||
|
)
|
||||||
|
|
||||||
global_conf = auracast_config.global_base_config
|
global_conf = auracast_config.global_base_config
|
||||||
|
|
||||||
@@ -301,8 +308,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_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/ttyACM1,115200,rtscts'
|
||||||
|
|
||||||
|
global_conf.qos_config = auracast_config.qos_config_mono_high_rel # TODO: low rel, actually advertising seems to work again- maybe then the problem is hci->controler
|
||||||
|
|
||||||
bigs = [
|
bigs = [
|
||||||
auracast_config.broadcast_de,
|
auracast_config.broadcast_de,
|
||||||
@@ -315,7 +325,12 @@ if __name__ == "__main__":
|
|||||||
global_conf.octets_per_frame = 40 # 32kbps@16kHz
|
global_conf.octets_per_frame = 40 # 32kbps@16kHz
|
||||||
|
|
||||||
# Note: 24kHz is only working with 2 streams - so this may be a host->controller interface bottleneck
|
# Note: 24kHz is only working with 2 streams - so this may be a host->controller interface bottleneck
|
||||||
# TODO: use thread usage debugger on controller to check actual cpu load
|
# use thread usage debugger on controller to check actual cpu load - not much load
|
||||||
|
|
||||||
|
# TODO; I dont think hci is really the bottleneck. probably limited airtime is the problem. Analyze this somehow.
|
||||||
|
# Advertising is still 1Mbit phy - use 2Mbit
|
||||||
|
# Check is the sdu interval (iso interval?) may really be varied - does not seem to work really
|
||||||
|
# # sdu per frame also needs to be adjusted somehow? is this even compatible with lc3?
|
||||||
|
|
||||||
broadcast(
|
broadcast(
|
||||||
global_conf,
|
global_conf,
|
||||||
|
|||||||
Reference in New Issue
Block a user