#pragma once #include #include #include "esp_err.h" #ifdef __cplusplus extern "C" { #endif // Audio-Quelle typedef enum { AUDIO_SOURCE_NONE = 0, AUDIO_SOURCE_USB, // USB Headset (höchste Priorität) AUDIO_SOURCE_BLUETOOTH // Bluetooth Headset } audio_source_t; // Audio-Format typedef struct { uint32_t sample_rate; uint8_t channels; uint8_t bits_per_sample; } audio_format_t; // Audio-Statistiken typedef struct { uint32_t packets_sent; uint32_t packets_received; uint32_t underruns; uint32_t overruns; int16_t input_level_db; int16_t output_level_db; } audio_stats_t; // Button Event Callback (vereinheitlicht USB und BT) typedef enum { HEADSET_BUTTON_ANSWER = 0, HEADSET_BUTTON_HANGUP, HEADSET_BUTTON_REJECT, HEADSET_BUTTON_MUTE, HEADSET_BUTTON_VOLUME_UP, HEADSET_BUTTON_VOLUME_DOWN } headset_button_t; typedef void (*headset_button_callback_t)(headset_button_t button, audio_source_t source); typedef void (*audio_source_change_callback_t)(audio_source_t old_source, audio_source_t new_source); /** * Initialisiert den Audio-Router */ esp_err_t audio_router_init(void); /** * Deinitalisiert den Audio-Router */ esp_err_t audio_router_deinit(void); /** * Gibt die aktuell aktive Audio-Quelle zurück * USB hat immer Priorität über Bluetooth */ audio_source_t audio_router_get_active_source(void); /** * Prüft ob eine Audio-Quelle verfügbar ist */ bool audio_router_is_source_available(audio_source_t source); /** * Startet Audio-Routing für einen Anruf */ esp_err_t audio_router_start_call(void); /** * Stoppt Audio-Routing */ esp_err_t audio_router_stop_call(void); /** * Sendet Audio-Daten von SIP zum aktiven Headset */ esp_err_t audio_router_send_to_headset(const uint8_t* data, size_t len, const audio_format_t* format); /** * Empfängt Audio-Daten vom aktiven Headset für SIP * Wird intern über Callback verarbeitet */ typedef void (*audio_from_headset_callback_t)(const uint8_t* data, size_t len, const audio_format_t* format); void audio_router_register_input_callback(audio_from_headset_callback_t callback); /** * Registriert Callback für Headset-Button-Events */ void audio_router_register_button_callback(headset_button_callback_t callback); /** * Registriert Callback für Quellenwechsel */ void audio_router_register_source_change_callback(audio_source_change_callback_t callback); /** * Setzt die Master-Lautstärke (0-100) */ esp_err_t audio_router_set_volume(uint8_t volume); /** * Gibt die aktuelle Lautstärke zurück */ uint8_t audio_router_get_volume(void); /** * Setzt Mute */ esp_err_t audio_router_set_mute(bool mute); /** * Gibt den Mute-Status zurück */ bool audio_router_is_muted(void); /** * Gibt Audio-Statistiken zurück */ esp_err_t audio_router_get_stats(audio_stats_t* stats); #ifdef __cplusplus } #endif