140 lines
3.0 KiB
C
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
|