bluez5: telephony: add call transfer with user interaction capability

This allows implementing UI mechanisms to transfer the audio of a call
to the HF (pipewire) only when the user explicitly asks/allows it.

Normally, when a call is connected, the phone initiates a SCO connection
and the HF accepts it, transfering audio automatically. In order to
allow for user interaction, this patch enables the UI to set the RejectSCO
property to 'true' in order to automatically reject the SCO connection.
Later on, at the UI's discression, the audio may be reconnected by calling
the Activate() method, which sends AT+BCC to re-initialize the SCO channel.

A configuration file option is also added to configure the default value
of the RejectSCO property. By setting this to 'true' in the config file,
it is possible to implement rejecting the audio of a call that is already
active at the time the Bluetooth connection to the phone initializes.
This commit is contained in:
George Kiagiadakis 2024-12-05 16:13:01 +02:00 committed by Wim Taymans
parent 7de0419ca3
commit b8e202f02e
3 changed files with 110 additions and 1 deletions

View file

@ -33,6 +33,7 @@ struct spa_bt_telephony {
struct spa_bt_telephony_ag_transport {
int8_t codec;
enum spa_bt_transport_state state;
dbus_bool_t rejectSCO;
};
struct spa_bt_telephony_ag {
@ -72,6 +73,8 @@ struct spa_bt_telephony_ag_callbacks {
void (*hangup_all)(void *data, enum spa_bt_telephony_error *err);
void (*create_multiparty)(void *data, enum spa_bt_telephony_error *err);
void (*send_tones)(void *data, const char *tones, enum spa_bt_telephony_error *err);
void (*transport_activate)(void *data, enum spa_bt_telephony_error *err);
};
struct spa_bt_telephony_call_callbacks {