esp32-sip-client-with-headset/main/bluetooth/bt_manager.h

146 lines
3.4 KiB
C

#pragma once
#include <stdbool.h>
#include <stdint.h>
#include "esp_err.h"
#include "esp_bt_defs.h"
#ifdef __cplusplus
extern "C" {
#endif
// Bluetooth-Gerätestatus
typedef enum {
BT_DEVICE_STATE_UNKNOWN = 0,
BT_DEVICE_STATE_DISCOVERED,
BT_DEVICE_STATE_PAIRING,
BT_DEVICE_STATE_PAIRED,
BT_DEVICE_STATE_CONNECTING,
BT_DEVICE_STATE_CONNECTED,
BT_DEVICE_STATE_DISCONNECTED
} bt_device_state_t;
// Bluetooth Audio-Status
typedef enum {
BT_AUDIO_STATE_IDLE = 0,
BT_AUDIO_STATE_OPENING,
BT_AUDIO_STATE_OPEN,
BT_AUDIO_STATE_STREAMING
} bt_audio_state_t;
// Entdecktes Bluetooth-Gerät
typedef struct {
esp_bd_addr_t address;
char name[32];
int rssi;
uint32_t cod; // Class of Device
bool is_headset;
} bt_discovered_device_t;
// Headset-Button Events
typedef enum {
BT_BUTTON_NONE = 0,
BT_BUTTON_ANSWER, // Anruf annehmen
BT_BUTTON_REJECT, // Anruf ablehnen
BT_BUTTON_HANGUP, // Anruf beenden
BT_BUTTON_REDIAL, // Wahlwiederholung
BT_BUTTON_VOLUME_UP,
BT_BUTTON_VOLUME_DOWN,
BT_BUTTON_MUTE
} bt_button_event_t;
// Event-Callbacks
typedef void (*bt_device_callback_t)(bt_device_state_t state, const esp_bd_addr_t address);
typedef void (*bt_discovery_callback_t)(const bt_discovered_device_t* device);
typedef void (*bt_audio_callback_t)(bt_audio_state_t state);
typedef void (*bt_button_callback_t)(bt_button_event_t event);
typedef void (*bt_audio_data_callback_t)(const uint8_t* data, size_t len);
/**
* Initialisiert den Bluetooth-Manager
*/
esp_err_t bt_manager_init(void);
/**
* Deinitalisiert den Bluetooth-Manager
*/
esp_err_t bt_manager_deinit(void);
/**
* Startet die Bluetooth-Gerätesuche
*/
esp_err_t bt_manager_start_discovery(void);
/**
* Stoppt die Bluetooth-Gerätesuche
*/
esp_err_t bt_manager_stop_discovery(void);
/**
* Pairt mit einem Gerät
*/
esp_err_t bt_manager_pair(const esp_bd_addr_t address);
/**
* Entfernt ein gepairtes Gerät
*/
esp_err_t bt_manager_unpair(const esp_bd_addr_t address);
/**
* Verbindet mit einem gepairten Headset
*/
esp_err_t bt_manager_connect(const esp_bd_addr_t address);
/**
* Trennt die Verbindung zu einem Headset
*/
esp_err_t bt_manager_disconnect(const esp_bd_addr_t address);
/**
* Trennt alle verbundenen Geräte
*/
esp_err_t bt_manager_disconnect_all(void);
/**
* Gibt zurück ob ein Headset verbunden ist
*/
bool bt_manager_is_connected(void);
/**
* Gibt die Adresse des verbundenen Headsets zurück
*/
esp_err_t bt_manager_get_connected_device(esp_bd_addr_t address);
/**
* Setzt die Sichtbarkeit
*/
esp_err_t bt_manager_set_discoverable(bool discoverable);
/**
* Sendet Audio-Daten zum Headset
*/
esp_err_t bt_manager_send_audio(const uint8_t* data, size_t len);
/**
* Registriert Callbacks
*/
void bt_manager_register_device_callback(bt_device_callback_t callback);
void bt_manager_register_discovery_callback(bt_discovery_callback_t callback);
void bt_manager_register_audio_callback(bt_audio_callback_t callback);
void bt_manager_register_button_callback(bt_button_callback_t callback);
void bt_manager_register_audio_data_callback(bt_audio_data_callback_t callback);
/**
* Konvertiert BD_ADDR zu String
*/
void bt_addr_to_str(const esp_bd_addr_t addr, char* str, size_t len);
/**
* Konvertiert String zu BD_ADDR
*/
esp_err_t bt_str_to_addr(const char* str, esp_bd_addr_t addr);
#ifdef __cplusplus
}
#endif