129 lines
2.8 KiB
C
129 lines
2.8 KiB
C
#pragma once
|
|
|
|
#include <stdbool.h>
|
|
#include <stdint.h>
|
|
#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
|