Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 122f3af9 authored by Rahul Arya's avatar Rahul Arya
Browse files

Properly clean up HIDD control block on disconnect

Bug: 243458209
Test: CTSVerifier
Merged-In: Ia8f720bd2d90709c8165943b8d46fa87cc0571ec
Change-Id: I6dc8713f7b1a1e39bcf97743bad4ae4a38c01d08
parent 73e49b2e
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@ table InitFlagsData {
    btaa_hci_is_enabled:bool (privacy:"Any");
    bta_dm_clear_conn_id_on_client_close_is_enabled:bool (privacy:"Any");
    btm_dm_flush_discovery_queue_on_search_cancel_is_enabled:bool (privacy:"Any");
    clear_hidd_interrupt_cid_on_disconnect_is_enabled:bool (privacy:"Any");
    finite_att_timeout_is_enabled:bool (privacy:"Any");
    gatt_robust_caching_client_is_enabled:bool (privacy:"Any");
    gatt_robust_caching_server_is_enabled:bool (privacy:"Any");
+2 −0
Original line number Diff line number Diff line
@@ -39,6 +39,8 @@ flatbuffers::Offset<bluetooth::common::InitFlagsData> bluetooth::dumpsys::InitFl
      initFlags::bta_dm_clear_conn_id_on_client_close_is_enabled());
  builder.add_btm_dm_flush_discovery_queue_on_search_cancel_is_enabled(
      initFlags::btm_dm_flush_discovery_queue_on_search_cancel_is_enabled());
  builder.add_clear_hidd_interrupt_cid_on_disconnect_is_enabled(
      initFlags::clear_hidd_interrupt_cid_on_disconnect_is_enabled());
  builder.add_finite_att_timeout_is_enabled(initFlags::finite_att_timeout_is_enabled());
  builder.add_gatt_robust_caching_client_is_enabled(initFlags::gatt_robust_caching_client_is_enabled());
  builder.add_gatt_robust_caching_server_is_enabled(initFlags::gatt_robust_caching_server_is_enabled());
+1 −0
Original line number Diff line number Diff line
@@ -209,6 +209,7 @@ init_flags!(
        btaa_hci = true,
        bta_dm_clear_conn_id_on_client_close = true,
        btm_dm_flush_discovery_queue_on_search_cancel,
        clear_hidd_interrupt_cid_on_disconnect = true,
        finite_att_timeout = true,
        gatt_robust_caching_client = true,
        gatt_robust_caching_server,
+1 −0
Original line number Diff line number Diff line
@@ -8,6 +8,7 @@ mod ffi {
        fn btaa_hci_is_enabled() -> bool;
        fn bta_dm_clear_conn_id_on_client_close_is_enabled() -> bool;
        fn btm_dm_flush_discovery_queue_on_search_cancel_is_enabled() -> bool;
        fn clear_hidd_interrupt_cid_on_disconnect_is_enabled() -> bool;
        fn finite_att_timeout_is_enabled() -> bool;
        fn gatt_robust_caching_client_is_enabled() -> bool;
        fn gatt_robust_caching_server_is_enabled() -> bool;
+5 −1
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@

#include "bta/include/bta_api.h"
#include "btif/include/btif_hd.h"
#include "gd/common/init_flags.h"
#include "osi/include/allocator.h"
#include "stack/hid/hidd_int.h"
#include "stack/include/bt_hdr.h"
@@ -347,7 +348,6 @@ static void hidd_l2cif_disconnect_ind(uint16_t cid, bool ack_needed) {
static void hidd_l2cif_disconnect(uint16_t cid) {
  L2CA_DisconnectReq(cid);


  HIDD_TRACE_EVENT("%s: cid=%04x", __func__, cid);

  tHID_CONN* p_hcon = &hd_cb.device.conn;
@@ -365,6 +365,10 @@ static void hidd_l2cif_disconnect(uint16_t cid) {

    // now disconnect CTRL
    L2CA_DisconnectReq(p_hcon->ctrl_cid);
    if (bluetooth::common::init_flags::
            clear_hidd_interrupt_cid_on_disconnect_is_enabled()) {
      p_hcon->ctrl_cid = 0;
    }
  }

  if ((p_hcon->ctrl_cid == 0) && (p_hcon->intr_cid == 0)) {