refractoring/auracast_config (#3)
- use pydantic for configuration management Reviewed-on: https://gitea.pstruebi.xyz/auracaster/bumble-auracast/pulls/3
This commit was merged in pull request #3.
This commit is contained in:
@@ -1,40 +1,39 @@
|
||||
from bumble import hci
|
||||
from bumble.profiles import bap
|
||||
from dataclasses import dataclass
|
||||
from pydantic import BaseModel
|
||||
|
||||
# Define some base dataclasses to hold the relevant parameters
|
||||
@dataclass
|
||||
class AuracastQoSConfig:
|
||||
# Define some base to hold the relevant parameters
|
||||
class AuracastQoSConfig(BaseModel):
|
||||
iso_int_multiple_10ms: int
|
||||
number_of_retransmissions: int
|
||||
max_transport_latency_ms: int
|
||||
|
||||
class AuracastQosHigh(AuracastQoSConfig):
|
||||
iso_int_multiple_10ms: int = 1
|
||||
number_of_retransmissions:int = 4 #4
|
||||
max_transport_latency_ms:int = 43 #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_int_multiple_10ms = 2,
|
||||
number_of_retransmissions = 3,
|
||||
max_transport_latency_ms = 65
|
||||
)
|
||||
qos_config_mono_low_rel = AuracastQoSConfig( #highest latency
|
||||
iso_int_multiple_10ms = 3,
|
||||
number_of_retransmissions = 2,
|
||||
max_transport_latency_ms = 65
|
||||
)
|
||||
class AuracastQosMid(AuracastQoSConfig):
|
||||
iso_int_multiple_10ms: int = 2
|
||||
number_of_retransmissions:int = 3
|
||||
max_transport_latency_ms:int = 65
|
||||
|
||||
@dataclass
|
||||
class AuracastGlobalConfig:
|
||||
qos_config: AuracastQoSConfig
|
||||
class AuracastQosLow(AuracastQoSConfig):
|
||||
iso_int_multiple_10ms: int = 3
|
||||
number_of_retransmissions:int = 2 #4
|
||||
max_transport_latency_ms:int = 65 #varies from the default value in bumble (was 65)
|
||||
|
||||
|
||||
class AuracastGlobalConfig(BaseModel):
|
||||
qos_config: AuracastQoSConfig = AuracastQosHigh()
|
||||
debug: bool = False
|
||||
device_name: str = 'Auracaster'
|
||||
transport: str = ''
|
||||
auracast_device_address: hci.Address = hci.Address('F0:F1:F2:F3:F4:F5')
|
||||
auracast_device_address: str = 'F0:F1:F2:F3:F4:F5'
|
||||
auracast_sampling_rate_hz: int = 16000
|
||||
octets_per_frame: int = 40 #48kbps@24kHz # bitrate = octets_per_frame * 8 / frame len
|
||||
frame_duration_us: int = 10000
|
||||
presentation_delay_us: int = 40000
|
||||
manufacturer_data: tuple[int, bytes] = None
|
||||
manufacturer_data: tuple[int, bytes] |None = None # TODO:pydantic does not support bytes serialization
|
||||
|
||||
global_base_config = AuracastGlobalConfig(qos_config=AuracastQoSConfig())
|
||||
|
||||
# "Audio input. "
|
||||
# "'device' -> use the host's default sound input device, "
|
||||
@@ -42,13 +41,10 @@ global_base_config = AuracastGlobalConfig(qos_config=AuracastQoSConfig())
|
||||
# "(specify 'device:?' to get a list of available sound input devices), "
|
||||
# "'stdin' -> receive audio from stdin as int16 PCM, "
|
||||
# "'file:<filename> -> read audio from a .wav or raw int16 PCM file. "
|
||||
|
||||
|
||||
@dataclass
|
||||
class AuracastBigConfig:
|
||||
id: int = 123456,
|
||||
random_address: hci.Address = hci.Address('F1:F1:F2:F3:F4:F5')
|
||||
code: str = None # Broadcast_Code – a 16-octet parameter provided by the Host
|
||||
class AuracastBigConfig(BaseModel):
|
||||
id: int = 123456
|
||||
random_address: str = 'F1:F1:F2:F3:F4:F5'
|
||||
code: str | None = None # Broadcast_Code – a 16-octet parameter provided by the Host
|
||||
language: str = 'eng' # See: https://en.wikipedia.org/wiki/List_of_ISO_639_language_codes
|
||||
name: str = 'Broadcast0'
|
||||
program_info: str = 'Some Announcements'
|
||||
@@ -58,49 +54,45 @@ class AuracastBigConfig:
|
||||
precode_wav: bool = False
|
||||
iso_que_len: int = 64
|
||||
|
||||
class AuracastBigConfigDe(AuracastBigConfig):
|
||||
id: int = 12
|
||||
random_address: str = 'F1:F1:F2:F3:F4:F5'
|
||||
name: str = 'Broadcast0'
|
||||
language: str ='deu'
|
||||
program_info: str = 'Announcements German'
|
||||
audio_source: str = 'file:./testdata/announcement_de.wav'
|
||||
|
||||
# Instanciate some example configurations
|
||||
broadcast_de = AuracastBigConfig(
|
||||
id=12,
|
||||
random_address=hci.Address('F1:F1:F2:F3:F4:F5'),
|
||||
name = 'Broadcast0',
|
||||
language='deu',
|
||||
program_info = 'Announcements German',
|
||||
audio_source = 'file:./testdata/announcement_de.wav',
|
||||
)
|
||||
class AuracastBigConfigEn(AuracastBigConfig):
|
||||
id: int = 123
|
||||
random_address: str = 'F2:F1:F2:F3:F4:F5'
|
||||
name: str = 'Broadcast1'
|
||||
language: str ='eng'
|
||||
program_info: str = 'Announcements English'
|
||||
audio_source: str = 'file:./testdata/announcement_en.wav'
|
||||
|
||||
broadcast_en = AuracastBigConfig(
|
||||
id=123,
|
||||
random_address=hci.Address('F2:F1:F2:F3:F4:F5'),
|
||||
name = 'Broadcast1',
|
||||
language='eng',
|
||||
program_info = 'Announcements English',
|
||||
audio_source = 'file:./testdata/announcement_en.wav',
|
||||
)
|
||||
class AuracastBigConfigFr(AuracastBigConfig):
|
||||
id: int = 1234
|
||||
random_address: str = 'F3:F1:F2:F3:F4:F5'
|
||||
name: str = 'Broadcast2'
|
||||
language: str ='fra'
|
||||
program_info: str = 'Announcements French'
|
||||
audio_source: str = 'file:./testdata/announcement_fr.wav'
|
||||
|
||||
broadcast_fr = AuracastBigConfig(
|
||||
id=1234,
|
||||
random_address=hci.Address('F3:F1:F2:F3:F4:F5'),
|
||||
name = 'Broadcast2',
|
||||
language='fra',
|
||||
program_info = 'Announcements French',
|
||||
audio_source = 'file:./testdata/announcement_fr.wav',
|
||||
)
|
||||
class AuracastBigConfigEs(AuracastBigConfig):
|
||||
id: int =12345
|
||||
random_address: str = 'F4:F1:F2:F3:F4:F5'
|
||||
name: str = 'Broadcast3'
|
||||
language: str ='spa'
|
||||
program_info: str = 'Announcements Spanish'
|
||||
audio_source: str = 'file:./testdata/announcement_es.wav'
|
||||
|
||||
broadcast_es = AuracastBigConfig(
|
||||
id=12345,
|
||||
random_address=hci.Address('F4:F1:F2:F3:F4:F5'),
|
||||
name = 'Broadcast3',
|
||||
language='spa',
|
||||
program_info = 'Announcements Spanish',
|
||||
audio_source = 'file:./testdata/announcement_es.wav',
|
||||
)
|
||||
class AuracastBigConfigIt(AuracastBigConfig):
|
||||
id: int =1234567
|
||||
random_address: str = 'F5:F1:F2:F3:F4:F5'
|
||||
name: str = 'Broadcast4'
|
||||
language: str ='ita'
|
||||
program_info: str = 'Announcements Italian'
|
||||
audio_source: str = 'file:./testdata/announcement_it.wav'
|
||||
|
||||
broadcast_it = AuracastBigConfig(
|
||||
id=123456,
|
||||
random_address=hci.Address('F5:F1:F2:F3:F4:F5'),
|
||||
name = 'Broadcast4',
|
||||
language='ita',
|
||||
program_info = 'Announcements Italian',
|
||||
audio_source = 'file:./testdata/announcement_it.wav',
|
||||
)
|
||||
|
||||
# TODO: could be best to merge all in just one CONFIG class and give every language an enable parameter
|
||||
Reference in New Issue
Block a user