* [PATCH BlueZ v1] shared: rap: Defer CS Event registration until connection setup
@ 2026-06-22 6:29 Naga Bhavani Akella
2026-06-22 7:49 ` [BlueZ,v1] " bluez.test.bot
0 siblings, 1 reply; 2+ messages in thread
From: Naga Bhavani Akella @ 2026-06-22 6:29 UTC (permalink / raw)
To: linux-bluetooth
Cc: luiz.dentz, quic_mohamull, quic_hbandi, quic_anubhavg,
Naga Bhavani Akella
Move LE CS event registration from rap_probe()
to rap_accept(). rap_probe() runs during service discovery
while no ACL connection or connection handle exists,
so connection-scoped CS events cannot be delivered or
associated with a device. rap_accept() is called
after the ACL link is established, when a valid
connection handle is available and the HCI layer
can route events correctly.
Registering events at this point ensures
proper handling of CS events.
---
profiles/ranging/rap.c | 63 +++++++++++++++++++-----------------------
1 file changed, 29 insertions(+), 34 deletions(-)
diff --git a/profiles/ranging/rap.c b/profiles/ranging/rap.c
index dc57eeda6..fa3e27328 100644
--- a/profiles/ranging/rap.c
+++ b/profiles/ranging/rap.c
@@ -322,35 +322,6 @@ static int rap_probe(struct btd_service *service)
return -EINVAL;
}
- /* Get or create shared adapter-level HCI channel */
- data->adapter_data = rap_adapter_data_ref(adapter);
- if (!data->adapter_data) {
- error("Failed to get adapter HCI channel");
- bt_rap_unref(data->rap);
- free(data);
- return -EINVAL;
- }
-
- DBG("Using shared HCI channel for adapter (ref_count=%d)",
- data->adapter_data->ref_count);
-
- /* Create per-device HCI state machine with valid rap instance */
- DBG("Attaching per-device HCI state machine");
- data->hci_sm = bt_rap_attach_hci(data->rap, data->adapter_data->hci,
- btd_opts.defaults.bcs.role,
- btd_opts.defaults.bcs.cs_sync_ant_sel,
- btd_opts.defaults.bcs.max_tx_power);
-
- if (!data->hci_sm) {
- error("Failed to attach HCI state machine for device");
- rap_adapter_data_unref(data->adapter_data);
- bt_rap_unref(data->rap);
- free(data);
- return -EINVAL;
- }
-
- DBG("HCI state machine attached successfully for device");
-
rap_data_add(data);
data->ready_id = bt_rap_ready_register(data->rap, rap_ready, service,
@@ -382,6 +353,7 @@ static void rap_remove(struct btd_service *service)
static int rap_accept(struct btd_service *service)
{
struct btd_device *device = btd_service_get_device(service);
+ struct btd_adapter *adapter = device_get_adapter(device);
struct bt_gatt_client *client = btd_device_get_gatt_client(device);
struct rap_data *data = btd_service_get_user_data(service);
struct bt_att *att;
@@ -398,6 +370,33 @@ static int rap_accept(struct btd_service *service)
return -EINVAL;
}
+ /* init shared adapter HCI channel */
+ if (!data->adapter_data) {
+ data->adapter_data = rap_adapter_data_ref(adapter);
+ if (!data->adapter_data) {
+ error("Failed to get adapter HCI channel");
+ return -EINVAL;
+ }
+ DBG("Using shared HCI channel for adapter (ref_count=%d)",
+ data->adapter_data->ref_count);
+ }
+
+ /* per-device HCI state machine */
+ if (!data->hci_sm) {
+ data->hci_sm = bt_rap_attach_hci(data->rap,
+ data->adapter_data->hci,
+ btd_opts.defaults.bcs.role,
+ btd_opts.defaults.bcs.cs_sync_ant_sel,
+ btd_opts.defaults.bcs.max_tx_power);
+ if (!data->hci_sm) {
+ error("Failed to attach HCI state machine for device");
+ rap_adapter_data_unref(data->adapter_data);
+ data->adapter_data = NULL;
+ return -EINVAL;
+ }
+ DBG("HCI state machine attached successfully for device");
+ }
+
if (!bt_rap_attach(data->rap, client)) {
error("RAP unable to attach");
return -EINVAL;
@@ -408,11 +407,7 @@ static int rap_accept(struct btd_service *service)
bdaddr = device_get_address(device);
bdaddr_type = device_get_le_address_type(device);
- if (att && data->adapter_data && data->adapter_data->hci &&
- data->hci_sm) {
- /* Use bt_hci_get_conn_handle to find the connection handle
- * by bdaddr using HCIGETCONNLIST ioctl
- */
+ if (att && data->adapter_data->hci && data->hci_sm) {
if (bt_hci_get_conn_handle(data->adapter_data->hci,
(const uint8_t *) bdaddr, &handle)) {
DBG("Found conn handle 0x%04X for %s", handle, addr);
--
^ permalink raw reply related [flat|nested] 2+ messages in thread
end of thread, other threads:[~2026-06-22 7:49 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-06-22 6:29 [PATCH BlueZ v1] shared: rap: Defer CS Event registration until connection setup Naga Bhavani Akella
2026-06-22 7:49 ` [BlueZ,v1] " bluez.test.bot
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox