esp32-sip-client-with-headset/main/usb_audio/usb_audio_host.h

109 lines
2.3 KiB
C

#pragma once
#include <stdbool.h>
#include <stdint.h>
#include "esp_err.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);
#ifdef __cplusplus
}
#endif