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

Commit a71c5c44 authored by Rahul Arya's avatar Rahul Arya
Browse files

Properly clean up HIDD control block on disconnect

Bug: 243458209
Test: CTSVerifier
Change-Id: Ia8f720bd2d90709c8165943b8d46fa87cc0571ec
parent 11c3f1f7
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -17,6 +17,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");
    device_iot_config_logging_is_enabled:bool (privacy:"Any");
    dynamic_avrcp_version_enhancement_is_enabled:bool (privacy:"Any");
    finite_att_timeout_is_enabled:bool (privacy:"Any");
+2 −0
Original line number Diff line number Diff line
@@ -43,6 +43,8 @@ flatbuffers::Offset<bluetooth::common::InitFlagsData> bluetooth::dumpsys::InitFl
      initFlags::btm_dm_flush_discovery_queue_on_search_cancel_is_enabled());
  builder.add_device_iot_config_logging_is_enabled(
      initFlags::device_iot_config_logging_is_enabled());
  builder.add_clear_hidd_interrupt_cid_on_disconnect_is_enabled(
      initFlags::clear_hidd_interrupt_cid_on_disconnect_is_enabled());
  builder.add_dynamic_avrcp_version_enhancement_is_enabled(
      initFlags::dynamic_avrcp_version_enhancement_is_enabled());
  builder.add_gd_hal_snoop_logger_filtering_is_enabled(
+1 −0
Original line number Diff line number Diff line
@@ -256,6 +256,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,
        device_iot_config_logging,
        dynamic_avrcp_version_enhancement = true,
        finite_att_timeout = true,
+1 −0
Original line number Diff line number Diff line
@@ -10,6 +10,7 @@ mod ffi {
        fn bta_dm_clear_conn_id_on_client_close_is_enabled() -> bool;
        fn gd_hal_snoop_logger_filtering_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 device_iot_config_logging_is_enabled() -> bool;
        fn dynamic_avrcp_version_enhancement_is_enabled() -> bool;
        fn finite_att_timeout_is_enabled() -> bool;
+5 −1
Original line number Diff line number Diff line
@@ -31,6 +31,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"
@@ -353,7 +354,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;
@@ -371,6 +371,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)) {