esp32-sip-client-with-headset/main/sip/sip_client.h

140 lines
3.0 KiB
C

#pragma once
#include <stdbool.h>
#include <stdint.h>
#include "esp_err.h"
#ifdef __cplusplus
extern "C" {
#endif
// SIP-Registrierungsstatus
typedef enum {
SIP_REG_STATE_UNREGISTERED = 0,
SIP_REG_STATE_REGISTERING,
SIP_REG_STATE_REGISTERED,
SIP_REG_STATE_FAILED
} sip_reg_state_t;
// Anrufstatus
typedef enum {
SIP_CALL_STATE_IDLE = 0,
SIP_CALL_STATE_INCOMING, // Eingehender Anruf
SIP_CALL_STATE_OUTGOING, // Ausgehender Anruf
SIP_CALL_STATE_RINGING, // Klingelt
SIP_CALL_STATE_CONNECTED, // Verbunden
SIP_CALL_STATE_HOLD, // Gehalten
SIP_CALL_STATE_DISCONNECTING,
SIP_CALL_STATE_DISCONNECTED
} sip_call_state_t;
// Anrufinformationen
typedef struct {
char call_id[64];
char remote_uri[128]; // SIP URI des Gegenübers
char remote_name[64]; // Display Name
char remote_number[32]; // Telefonnummer
sip_call_state_t state;
uint32_t duration_sec; // Anrufdauer in Sekunden
bool is_incoming;
} sip_call_info_t;
// RTP Audio Format
typedef struct {
uint32_t sample_rate; // Typisch 8000 oder 16000 Hz
uint8_t payload_type; // 0=PCMU, 8=PCMA, etc.
uint8_t channels;
} sip_audio_format_t;
// Callbacks
typedef void (*sip_reg_callback_t)(sip_reg_state_t state, const char* message);
typedef void (*sip_call_callback_t)(const sip_call_info_t* call_info);
typedef void (*sip_audio_callback_t)(const uint8_t* data, size_t len, const sip_audio_format_t* format);
/**
* Initialisiert den SIP-Client
*/
esp_err_t sip_client_init(void);
/**
* Deinitalisiert den SIP-Client
*/
esp_err_t sip_client_deinit(void);
/**
* Registriert bei der TK-Anlage
* Verwendet Konfiguration aus config_manager
*/
esp_err_t sip_client_register(void);
/**
* Meldet sich von der TK-Anlage ab
*/
esp_err_t sip_client_unregister(void);
/**
* Gibt den Registrierungsstatus zurück
*/
sip_reg_state_t sip_client_get_reg_state(void);
/**
* Nimmt einen eingehenden Anruf an
*/
esp_err_t sip_client_answer(void);
/**
* Lehnt einen eingehenden Anruf ab
*/
esp_err_t sip_client_reject(void);
/**
* Beendet den aktuellen Anruf
*/
esp_err_t sip_client_hangup(void);
/**
* Tätigt einen ausgehenden Anruf
*/
esp_err_t sip_client_call(const char* number);
/**
* Sendet DTMF-Töne
*/
esp_err_t sip_client_send_dtmf(char digit);
/**
* Setzt den Anruf auf Hold
*/
esp_err_t sip_client_hold(void);
/**
* Holt den Anruf von Hold zurück
*/
esp_err_t sip_client_unhold(void);
/**
* Gibt Informationen über den aktuellen Anruf zurück
*/
esp_err_t sip_client_get_call_info(sip_call_info_t* info);
/**
* Gibt den aktuellen Anrufstatus zurück
*/
sip_call_state_t sip_client_get_call_state(void);
/**
* Sendet Audio-Daten (RTP)
*/
esp_err_t sip_client_send_audio(const uint8_t* data, size_t len);
/**
* Registriert Callbacks
*/
void sip_client_register_reg_callback(sip_reg_callback_t callback);
void sip_client_register_call_callback(sip_call_callback_t callback);
void sip_client_register_audio_callback(sip_audio_callback_t callback);
#ifdef __cplusplus
}
#endif