#pragma once #include #include #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