Commit graph

1115 commits

Author SHA1 Message Date
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
Frédéric Danis
a0356cf4ae bluez5: backend-native: Fix parsing of +CLCC event for PTS
PTS 8.7.3 Build 6 send +CLCC events without space after '+CLCC:'
Found with PTS test HFP/HF/ICA/BV-04-C
2025-02-05 08:50:24 +00:00
Frédéric Danis
99fa7efc2c bluez5: backend-native: Add eSCO S4 feature.
eSCO S4 feature is mandatory since HFP 1.7.
Found with PTS test HFP/HF/SLC/BV-03-C.
2025-02-05 08:50:24 +00:00
George Kiagiadakis
abd96e592b bluez5: telephony: improve +CLCC parsing
Make sure we don't crash or do anything stupid if the incoming
command is malformed
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
Frédéric Danis
627515f641 bluez5: backend-native: Check current calls on SLC completion
This allows to create the calls existing before the HFP connection.
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
George Kiagiadakis
dc5b85fe57 bluez5: backend-native: fallthrough to report volume instead of duplicating code 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
9f37ab25f5 bluez5: backend-native: Destroy only active calls on +CIEV:(call,0) 2025-02-05 08:50:24 +00:00
Frédéric Danis
056c2dd535 bluez5: backend-native: Create call on +CLCC event if supported
Wait for +CLCC event to create the call so the remote phone number can
be set.
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
Frédéric Danis
a8363ff92b bluez5: backend-native: Fix dialing call-setup management
The call should be created if it is started from the phone, i.e. if it
doesn't yet exist.
2025-02-05 08:50:24 +00:00
Frédéric Danis
ffb19547b0 bluez5: backend-native: Fix supported HF features
The HF should declare the features supported before trying to send
related AT commands.
It should only send AT+CHLD related commands if the remote AG supports
them.
2025-02-05 08:50:24 +00:00
George Kiagiadakis
37fb79b9b8 bluez5: backend-native: hangup held/active calls respectively only if they exist
On some phones (at least), sending AT+CHLD=0 while there is no held
call returns an error. Make sure we don't do this to avoid returning
an error on D-Bus when in fact hangup_all actually succeeds.
2025-02-05 08:50:24 +00:00
George Kiagiadakis
a2fc92ee69 bluez5: backend-native: allow hanging up DIALING/ALERTING calls 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
e02eedb5a7 bluez5: README-Telephony: document ofono service compatibility 2025-02-05 08:50:24 +00:00
Frédéric Danis
613021137c bluez: native-backend: Handle AT commands replies for HFP HF 2025-02-05 08:50:24 +00:00
Frédéric Danis
18c447b0a4 bluez: native-backend: Add three-way call handling support in HFP HF 2025-02-05 08:50:24 +00:00
Frédéric Danis
224f6a10f5 bluez: native-backend: Add call support in HFP HF
This commit implements the dial, answer and hangup callbacks to manage
call when connected to HFP AG device.
This adds +CLIP support to be able to get remote party phone number.
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
a7f7e65b92 bluez5: initialize telephony service in backend-native 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
George Kiagiadakis
16c4cd05a9 bluez5: initial telephony service API documentation 2025-02-05 08:50:24 +00:00
Sanchayan Maity
ab5f81b9a4 bluez5: g722: Make sequence number handling consistent with other codecs 2025-01-27 18:43:24 +05:30
Sanchayan Maity
23ae55015d bluez5-dbus: Do not setup ASHA profile for unconnected devices
Do not add/connect the profile for unconnected devices.

This fixes the issue where a previously paired ASHA device
would show up in the pavucontrol output device list even
when not connected.
2025-01-27 09:22:41 +00:00
Pauli Virtanen
50437fb4eb bluez5: set device.routes on device set nodes
Device set node props are controlled by a Route, so set device.routes=1
to avoid Wireplumber restoring node props on it.
2025-01-26 21:04:49 +02:00
Pauli Virtanen
de0f54c324 bluez5: support BAP hardware volume on device sets
Enable hardware volume for device sets, when all devices in the set
support HW volume.
2025-01-25 15:37:52 +00:00
Pauli Virtanen
34ac0d8256 bluez5: support BAP hardware volume
Support BAP HW volume now that it's implemented in BlueZ, with the
volume range 0-255 per spec.
2025-01-25 15:37:52 +00:00
Sanchayan Maity
6e67b3a2d7 bluez5: media-sink: Use correct profile name for ASHA 2025-01-23 10:13:48 +05:30
George Kiagiadakis
d0b3c00d29 bluez: enable delay reporting for a2dp-source
This allows our a2dp-source (sink endpoint) to report delay to the
remote source endpoint. Setting the "Delay" property is already
implemented, but by failing to configure DelayReporting, bluez rejects
the property change.
2025-01-21 16:11:08 +00:00
Pauli Virtanen
29a6552cc9 bluez5: take fractional resampler delay into account for reference time
Improve sample reference time accuracy by including the fractional part
of the resampler delay.
2025-01-19 17:11:13 +02:00
Pauli Virtanen
b952cfbe38 bluez5: remove resampler delay fudge factor
The resampler delay was off by one sample, so remove the corresponding
fudge factor here.  This matters for BAP output synchronization.

The resampler has also some fractional delay, so there can still be
sub-sample offset between the original and resampled timelines.  This is
not currently taken into account.
2025-01-13 19:05:58 +02:00
Sanchayan Maity
fc102e517a bluez5: g722: Fix format specifiers for log
This fixes build failure on 32-bit systems.
2025-01-10 13:24:23 +05:30
Pauli Virtanen
65f6e5ffa7 bluez5: clean up ASHA transport handling
Don't mix endpoint and transport paths, they're generally different.

If ASHA transport already existed, free the old one but not the device,
as the ASHA device existence should track how it appears in DBus.
2025-01-09 22:15:03 +00:00
Sanchayan Maity
b1e4799ea6 bluez5: Ensure codec_id comparison is against codec of right type
G722 codec id for ASHA is chosen arbitrarily to be different from
A2DP and BAP codec IDs. ASHA spec does not specify a codec ID like
A2DP/BAP.

In places where codec_id comparisons are done, ensure that the check
is done against the codec of the right type viz. A2DP/BAP/ASHA.
2025-01-09 14:51:50 +00:00
Sanchayan Maity
c7496c847f bluez5: asha/g722: bump media_codec version 2025-01-09 14:51:50 +00:00
Sanchayan Maity
e83f01a33b bluez5: Clean up ASHA implementation 2025-01-09 14:51:50 +00:00
Sanchayan Maity
13c026417b bluez5: Implement support for ASHA
ASHA is a Bluetooth specification for hearing aids.

For a high level overview of the ASHA Specification for BlueZ.
https://asymptotic.notion.site/ASHA-Spec-for-Bluez-61a46027fd46458d8235e14d6bedb2ce

The original specification in Android.
https://source.android.com/docs/core/connect/bluetooth/asha

Corresponding support in BlueZ.
https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/profiles/audio/asha.c

This only implements handling of one side of a ASHA device
pair. Stereo support/handling of both "left" & "right" side
will follow later requiring work on clock synchronization
between the pair.
2025-01-09 14:51:50 +00:00
Sanchayan Maity
41d099a580 bluez5: Add G722 codec for ASHA
For documentation on ASHA, see
https://source.android.com/docs/core/connect/bluetooth/asha
2025-01-09 14:51:50 +00:00
Sanchayan Maity
6a5f2bbd1f bluez5: media-sink: Log need_flush in flush_buffer 2025-01-09 14:51:50 +00:00
Pauli Virtanen
a4e2d9cbb0 bluez5: lc3: bump media_codec version 2024-12-14 10:57:23 +00:00
Pauli Virtanen
bf12fe6d8b bluez5: lc3: simplify parsing 2024-12-14 10:57:23 +00:00
Pauli Virtanen
8f1983d14c bluez5: lc3: fix log name conflict 2024-12-14 10:57:23 +00:00