from bumble import hci from bumble.profiles import bap from dataclasses import dataclass # 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 class AuracastGlobalConfig: qos_config: AuracastQoSConfig device_name: str = 'Auracaster' transport: str = '' auracast_device_address: hci.Address = hci.Address('F0:F1:F2:F3:F4:F5') auracast_sampling_rate_hz: int = 24000 octets_per_frame: int = 60 #48kbps@24kHz # bitrate = octets_per_frame * 8 / frame len frame_duration_us: int = 10000 presentation_delay_us: int = 40000 @dataclass class AuracastBigConfig: broadcast_id: int =123456, broadcast_random_address: hci.Address = hci.Address('F1:F1:F2:F3:F4:F5') broadcast_code: str = None # a hexstr broadcast_language: str = 'eng' # See: https://en.wikipedia.org/wiki/List_of_ISO_639_language_codes broadcast_name: str = 'Broadcast0' broadcast_program_info: str = 'Some Announcements' broacast_wav_file_path: str = './auracast/announcement_48_10_96000_en.wav' global_base_config = AuracastGlobalConfig(qos_config=AuracastQoSConfig()) # Instanciate some example configurations broadcast_de = AuracastBigConfig( broadcast_id=12, broadcast_random_address=hci.Address('F1:F1:F2:F3:F4:F5'), broadcast_name = 'Broadcast0', broadcast_language='deu', broadcast_program_info = 'Announcements German', broacast_wav_file_path = './auracast/announcement_48_10_96000_de.wav', ) broadcast_en = AuracastBigConfig( broadcast_id=123, broadcast_random_address=hci.Address('F2:F1:F2:F3:F4:F5'), broadcast_name = 'Broadcast1', broadcast_language='eng', broadcast_program_info = 'Announcements English', broacast_wav_file_path = './auracast/announcement_48_10_96000_en.wav', ) broadcast_fr = AuracastBigConfig( broadcast_id=1234, broadcast_random_address=hci.Address('F3:F1:F2:F3:F4:F5'), broadcast_name = 'Broadcast2', broadcast_language='fra', broadcast_program_info = 'Announcements French', broacast_wav_file_path = './auracast/announcement_48_10_96000_fr.wav', ) broadcast_es = AuracastBigConfig( broadcast_id=12345, broadcast_random_address=hci.Address('F4:F1:F2:F3:F4:F5'), broadcast_name = 'Broadcast3', broadcast_language='spa', broadcast_program_info = 'Announcements Spanish', broacast_wav_file_path = './auracast/announcement_48_10_96_es.wav', ) broadcast_it = AuracastBigConfig( broadcast_id=123456, broadcast_random_address=hci.Address('F5:F1:F2:F3:F4:F5'), broadcast_name = 'Broadcast4', broadcast_language='ita', broadcast_program_info = 'Announcements Italian', broacast_wav_file_path = './auracast/announcement_48_10_96_it.wav', )