pipewire/spa/plugins/bluez5/telephony.h

107 lines
3.2 KiB
C
Raw Normal View History

/* Spa Bluez5 Telephony D-Bus service */
/* SPDX-FileCopyrightText: Copyright © 2024 Collabora Ltd. */
/* SPDX-License-Identifier: MIT */
#ifndef SPA_BLUEZ5_TELEPHONY_H
#define SPA_BLUEZ5_TELEPHONY_H
#include "defs.h"
enum spa_bt_telephony_call_state {
CALL_STATE_ACTIVE,
CALL_STATE_HELD,
CALL_STATE_DIALING,
CALL_STATE_ALERTING,
CALL_STATE_INCOMING,
CALL_STATE_WAITING,
CALL_STATE_DISCONNECTED,
};
struct spa_bt_telephony {
};
struct spa_bt_telephony_ag {
struct spa_bt_telephony *telephony;
};
struct spa_bt_telephony_call {
struct spa_bt_telephony_ag *ag;
/* D-Bus properties */
char *line_identification;
char *incoming_line;
char *name;
bool multiparty;
enum spa_bt_telephony_call_state state;
};
struct spa_bt_telephony_ag_events {
#define SPA_VERSION_BT_TELEPHONY_AG_EVENTS 0
uint32_t version;
int (*dial)(void *data, const char *number);
int (*swap_calls)(void *data);
int (*release_and_answer)(void *data);
int (*release_and_swap)(void *data);
int (*hold_and_answer)(void *data);
int (*hangup_all)(void *data);
int (*create_multiparty)(void *data);
int (*send_tones)(void *data, const char *tones);
};
struct spa_bt_telephony_call_events {
#define SPA_VERSION_BT_TELEPHONY_CALL_EVENTS 0
uint32_t version;
int (*answer)(void *data);
int (*hangup)(void *data);
};
struct spa_bt_telephony *telephony_new(struct spa_log *log, struct spa_dbus *dbus,
const struct spa_dict *info);
void telephony_free(struct spa_bt_telephony *telephony);
/* create/destroy the ag object */
struct spa_bt_telephony_ag * telephony_ag_new(struct spa_bt_telephony *telephony,
size_t user_data_size);
void telephony_ag_destroy(struct spa_bt_telephony_ag *ag);
/* get the user data structure; struct size is set when creating the AG */
void *telephony_ag_get_user_data(struct spa_bt_telephony_ag *ag);
void telephony_ag_add_listener(struct spa_bt_telephony_ag *ag,
struct spa_hook *listener,
const struct spa_bt_telephony_ag_events *events,
void *data);
/* register/unregister AudioGateway object on the bus */
int telephony_ag_register(struct spa_bt_telephony_ag *ag);
void telephony_ag_unregister(struct spa_bt_telephony_ag *ag);
//TODO
//struct spa_bt_telephony_call *telephony_ag_find_call_by_????(struct spa_bt_telephony_ag *ag, ???);
//void telephony_ag_iterate_calls(struct spa_bt_telephony_ag *ag, callback, userdata);
/* create/destroy the call object */
struct spa_bt_telephony_call * telephony_call_new(struct spa_bt_telephony_ag *ag,
size_t user_data_size);
void telephony_call_destroy(struct spa_bt_telephony_call *call);
/* get the user data structure; struct size is set when creating the Call */
void *telephony_call_get_user_data(struct spa_bt_telephony_call *call);
/* register/unregister Call object on the bus */
int telephony_call_register(struct spa_bt_telephony_call *call);
void telephony_call_unregister(struct spa_bt_telephony_call *call);
/* send message to notify about property changes */
void telephony_call_notify_updated_props(struct spa_bt_telephony_call *call);
void telephony_call_add_listener(struct spa_bt_telephony_call *call,
struct spa_hook *listener,
const struct spa_bt_telephony_call_events *events,
void *data);
#endif