#pragma once #include #include #include "esp_err.h" #include "sdkconfig.h" #ifdef __cplusplus extern "C" { #endif // USB Audio Status typedef enum { USB_AUDIO_STATE_NOT_CONNECTED = 0, USB_AUDIO_STATE_CONNECTED, USB_AUDIO_STATE_CONFIGURED, USB_AUDIO_STATE_STREAMING, USB_AUDIO_STATE_ERROR } usb_audio_state_t; // USB Headset Button Events (HID) typedef enum { USB_BUTTON_NONE = 0, USB_BUTTON_ANSWER, USB_BUTTON_HANGUP, USB_BUTTON_MUTE, USB_BUTTON_VOLUME_UP, USB_BUTTON_VOLUME_DOWN } usb_button_event_t; // USB Audio Info typedef struct { uint16_t vendor_id; uint16_t product_id; char product_name[64]; char manufacturer[64]; uint32_t sample_rate; uint8_t channels; uint8_t bit_depth; bool has_microphone; bool has_speaker; bool has_hid; // Hat HID-Tasten } usb_audio_info_t; // Callbacks typedef void (*usb_audio_state_callback_t)(usb_audio_state_t state); typedef void (*usb_audio_data_callback_t)(const uint8_t* data, size_t len); typedef void (*usb_button_callback_t)(usb_button_event_t event); /** * Initialisiert den USB Audio Host */ esp_err_t usb_audio_host_init(void); /** * Deinitialisiert den USB Audio Host */ esp_err_t usb_audio_host_deinit(void); /** * Gibt den aktuellen Status zurück */ usb_audio_state_t usb_audio_host_get_state(void); /** * Prüft ob ein USB-Headset angeschlossen ist */ bool usb_audio_host_is_connected(void); /** * Gibt Informationen über das angeschlossene Gerät zurück */ esp_err_t usb_audio_host_get_info(usb_audio_info_t* info); /** * Startet Audio-Streaming */ esp_err_t usb_audio_host_start_stream(void); /** * Stoppt Audio-Streaming */ esp_err_t usb_audio_host_stop_stream(void); /** * Sendet Audio-Daten zum USB-Headset (Speaker) */ esp_err_t usb_audio_host_send(const uint8_t* data, size_t len); /** * Setzt die Lautstärke (0-100) */ esp_err_t usb_audio_host_set_volume(uint8_t volume); /** * Setzt Mute */ esp_err_t usb_audio_host_set_mute(bool mute); /** * Registriert Callbacks */ void usb_audio_host_register_state_callback(usb_audio_state_callback_t callback); void usb_audio_host_register_data_callback(usb_audio_data_callback_t callback); void usb_audio_host_register_button_callback(usb_button_callback_t callback); /** * Prüft ob USB Audio Host verfügbar ist (Hardware-Support) */ bool usb_audio_host_is_available(void); #ifdef __cplusplus } #endif