/
/
/
1"""Constants for HEOS Player Provider."""
2
3from typing import Final
4
5from music_assistant_models.enums import MediaType, PlaybackState
6from pyheos import MediaType as HeosMediaType
7from pyheos import PlayState as HeosPlayState
8from pyheos import const
9
10HEOS_MEDIA_TYPE_TO_MEDIA_TYPE: dict[HeosMediaType | None, MediaType] = {
11 HeosMediaType.ALBUM: MediaType.ALBUM,
12 HeosMediaType.ARTIST: MediaType.ARTIST,
13 HeosMediaType.CONTAINER: MediaType.FOLDER,
14 HeosMediaType.GENRE: MediaType.GENRE,
15 HeosMediaType.HEOS_SERVER: MediaType.FOLDER,
16 HeosMediaType.HEOS_SERVICE: MediaType.FOLDER,
17 HeosMediaType.MUSIC_SERVICE: MediaType.FOLDER,
18 HeosMediaType.PLAYLIST: MediaType.PLAYLIST,
19 HeosMediaType.SONG: MediaType.TRACK,
20 HeosMediaType.STATION: MediaType.TRACK,
21}
22
23HEOS_PLAY_STATE_TO_PLAYBACK_STATE: dict[HeosPlayState | None, PlaybackState] = {
24 HeosPlayState.PLAY: PlaybackState.PLAYING,
25 HeosPlayState.PAUSE: PlaybackState.PAUSED,
26 HeosPlayState.STOP: PlaybackState.IDLE,
27 HeosPlayState.UNKNOWN: PlaybackState.UNKNOWN,
28}
29
30HEOS_PASSIVE_SOURCES = [const.MUSIC_SOURCE_AUX_INPUT]
31
32
33CONF_TIMEOUT: Final[str] = "timeout"
34DEFAULT_TIMEOUT: Final = 25.0
35CONF_PLAYBACK_TRANSITION_TIMEOUT: Final[str] = "playback_transition_timeout"
36DEFAULT_PLAYBACK_TRANSITION_TIMEOUT: Final = 5
37
38CONNECT_MAX_ATTEMPTS: Final = 3
39CONNECT_INITIAL_RETRY_DELAY: Final = 5
40CONNECT_RETRY_BACKOFF_FACTOR: Final = 1.5
41
42# Gen 1 HEOS hardware (HS1) is limited to 48kHz/16-bit playback. Gen 2 (HS2)
43# and newer Denon/Marantz HEOS-enabled receivers support up to 192kHz/24-bit.
44# The "HS2" suffix is the canonical Gen 2 indicator; models in this allowlist
45# predate it and need to be capped.
46NON_HIRES_HEOS_MODELS: Final[tuple[str, ...]] = (
47 "HEOS 1",
48 "HEOS 3",
49 "HEOS 5",
50 "HEOS 7",
51 "HEOS Amp",
52 "HEOS Link",
53 "HEOS HomeCinema",
54)
55