Commit graph

17 commits

Author SHA1 Message Date
George Kiagiadakis
e4b0f68e0b bluez5: telephony: implement asynchronous D-Bus calls
This removes the need to call poll() on the rfcomm socket in order
to wait for replies from the AG.

Use a queue to buffer all the commands that are to be sent to the AG
and match them to replies when they are received. Optionally associate
each command with a DBusMessage that is assumed to be a method call
from the telephony interface, which is then replied to when the rfcomm
command reply is received. Also associate each command with a state,
so that it is always deterministic what gets executed after the reply
is received.

On the telephony module, pass on the DBusMessage on the callbacks and
add a method to allow the receiver to send a reply. Only send FAILED
directly when the callback is not handled. Also, remove the return value
from the Dial() command (it was not advertised on the introspection
anyway) to make things easier.
2025-08-01 15:39:06 +00:00
Frédéric Danis
1af1fc846c bluez5: backend-native: Add volume support to HFP HF
The volume synchronization could be done even if there's no audio link
and so no transport opened.

This patch allows to send the Speaker (AT+VGS) and Microphone (AT+VGM)
commands at the end of the SLC. And to exchange volume updates using the
telephony DBus interface, even without a transport.
2025-03-12 11:01:50 +01:00
Frédéric Danis
b7c00e2f24 bluez5: telephony: Add CMEE support 2025-02-06 17:24:42 +01:00
Wim Taymans
4d502cb470 bluez: org.freedesktop.PipeWire -> org.pipewire
We have our own domain name.
2025-02-05 10:18:17 +01:00
George Kiagiadakis
b8e202f02e 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.
2025-02-05 08:50:24 +00:00
George Kiagiadakis
7de0419ca3 bluez5: telephony: add Address property on the AudioGateway interface
This allows associating the AG with a remote device on higher level
software.
2025-02-05 08:50:24 +00:00
George Kiagiadakis
9d1862a6f8 bluez5: telephony: use spa_callbacks instead of spa_hook_list 2025-02-05 08:50:24 +00:00
George Kiagiadakis
63e1c48c8b bluez5: telephony: report transport codec & state on D-Bus
This is useful for implementations that do hardware offloading of the
SCO audio channel and need to communicate state information to the
hardware (at least).
2025-02-05 08:50:24 +00:00
Frédéric Danis
bd5de6eb1c bluez5: backend-native: Manage 3way commands asynchronously
The call's states should not be updated on 3ways commands but wait for
CIEV or CLCC events.
This allows to manage user actions on the phone.
2025-02-05 08:50:24 +00:00
Frédéric Danis
8e7a1a5235 bluez5: telephony: Do not return call objects in CreateMultiparty
The call's state updates are asynchronous, and even if AT+CHLD=3
returns OK the network may not create the multiparty.
2025-02-05 08:50:24 +00:00
Frédéric Danis
f5e08677a2 bluez5: backend-native: add CLCC support
Start call id at 1 as for the index calls in HFP, and move this id
to spa_bt_telephony_[ag|call] so they can be used by CLCC to retrieve
the related call.

if enhanced call status is supported, send AT+CLCC on +CIEV events to
get the calls information.
2025-02-05 08:50:24 +00:00
George Kiagiadakis
03ab9dd771 bluez5: telephony: implement error reporting from all methods 2025-02-05 08:50:24 +00:00
George Kiagiadakis
159846d226 bluez5: telephony: implement ofono compatibility 2025-02-05 08:50:24 +00:00
George Kiagiadakis
5dacd77866 bluez5: telephony: make the call list public 2025-02-05 08:50:24 +00:00
George Kiagiadakis
a501c887ea bluez5: telephony: ensure NULL strings are converted to "" on D-Bus properties 2025-02-05 08:50:24 +00:00
George Kiagiadakis
6534b58d3b bluez5: telephony: add user_data space on the AG & Call structures
This is mostly useful to store the spa_hook for the event listener
2025-02-05 08:50:24 +00:00
George Kiagiadakis
b28399ac57 bluez5: add telephony D-Bus service implementation 2025-02-05 08:50:24 +00:00