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

Commit 5ec54091 authored by Sunny Kapdi's avatar Sunny Kapdi Committed by William Escande
Browse files

BT5.3 Enhanced Connection update

Snapshot as of e71c3481c888c5dcb56c15d6b8e85f658152ef82

Bug: 248126637
Test: atest BluetoothInstrumentationTests
Change-Id: I88151930690bfdb2ed7ab0cbf27fd9fb661e0db3
parent eac654bc
Loading
Loading
Loading
Loading
+28 −0
Original line number Diff line number Diff line
@@ -143,6 +143,7 @@ static jmethodID method_onClientPhyUpdate;
static jmethodID method_onClientPhyRead;
static jmethodID method_onClientConnUpdate;
static jmethodID method_onServiceChanged;
static jmethodID method_onClientSubrateChange;

/**
 * Server callback methods
@@ -164,6 +165,7 @@ static jmethodID method_onServerMtuChanged;
static jmethodID method_onServerPhyUpdate;
static jmethodID method_onServerPhyRead;
static jmethodID method_onServerConnUpdate;
static jmethodID method_onServerSubrateChange;

/**
 * Advertiser callback methods
@@ -571,6 +573,18 @@ void btgattc_service_changed_cb(int conn_id) {
  sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onServiceChanged, conn_id);
}

void btgattc_subrate_change_cb(int conn_id, uint16_t subrate_factor,
                               uint16_t latency, uint16_t cont_num,
                               uint16_t timeout, uint8_t status) {
  std::shared_lock<std::shared_mutex> lock(callbacks_mutex);
  CallbackEnv sCallbackEnv(__func__);
  if (!sCallbackEnv.valid() || !mCallbacksObj) return;

  sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onClientSubrateChange,
                               conn_id, subrate_factor, latency, cont_num,
                               timeout, status);
}

static const btgatt_scanner_callbacks_t sGattScannerCallbacks = {
    btgattc_scan_result_cb,
    btgattc_batchscan_reports_cb,
@@ -599,6 +613,7 @@ static const btgatt_client_callbacks_t sGattClientCallbacks = {
    btgattc_phy_updated_cb,
    btgattc_conn_updated_cb,
    btgattc_service_changed_cb,
    btgattc_subrate_change_cb,
};

/**
@@ -795,6 +810,18 @@ void btgatts_conn_updated_cb(int conn_id, uint16_t interval, uint16_t latency,
                               conn_id, interval, latency, timeout, status);
}

void btgatts_subrate_change_cb(int conn_id, uint16_t subrate_factor,
                               uint16_t latency, uint16_t cont_num,
                               uint16_t timeout, uint8_t status) {
  std::shared_lock<std::shared_mutex> lock(callbacks_mutex);
  CallbackEnv sCallbackEnv(__func__);
  if (!sCallbackEnv.valid() || !mCallbacksObj) return;

  sCallbackEnv->CallVoidMethod(mCallbacksObj, method_onServerSubrateChange,
                               conn_id, subrate_factor, latency, cont_num,
                               timeout, status);
}

static const btgatt_server_callbacks_t sGattServerCallbacks = {
    btgatts_register_app_cb,
    btgatts_connection_cb,
@@ -812,6 +839,7 @@ static const btgatt_server_callbacks_t sGattServerCallbacks = {
    btgatts_mtu_changed_cb,
    btgatts_phy_updated_cb,
    btgatts_conn_updated_cb,
    btgatts_subrate_change_cb,
};

/**
+17 −0
Original line number Diff line number Diff line
@@ -4378,6 +4378,23 @@ void bta_dm_process_delete_key_RC_to_unpair(const RawAddress& bd_addr)
    bta_dm_cb.p_sec_cback(BTA_DM_REPORT_BONDING_EVT, &param);
}

/*******************************************************************************
 *
 * Function         bta_dm_ble_subrate_request
 *
 * Description      This function requests BLE subrate procedure.
 *
 * Parameters:
 *
 ******************************************************************************/
void bta_dm_ble_subrate_request(const RawAddress& bd_addr, uint16_t subrate_min,
                                uint16_t subrate_max, uint16_t max_latency,
                                uint16_t cont_num, uint16_t timeout) {
    // Logging done in l2c_ble.cc
    L2CA_SubrateRequest(bd_addr, subrate_min, subrate_max, max_latency,
                        cont_num, timeout);
}

namespace bluetooth {
namespace legacy {
namespace testing {
+25 −0
Original line number Diff line number Diff line
@@ -777,3 +777,28 @@ void BTA_DmBleResetId(void) {
  APPL_TRACE_API("BTA_DmBleResetId");
  do_in_main_thread(FROM_HERE, base::Bind(bta_dm_ble_reset_id));
}

/*******************************************************************************
 *
 * Function         BTA_DmBleSubrateRequest
 *
 * Description      subrate request, can only be used when connection is up.
 *
 * Parameters:      bd_addr       - BD address of the peer
 *                  subrate_min   - subrate factor minimum, [0x0001 - 0x01F4]
 *                  subrate_max   - subrate factor maximum, [0x0001 - 0x01F4]
 *                  max_latency   - max peripheral latency [0x0000 - 01F3]
 *                  cont_num      - continuation number [0x0000 - 01F3]
 *                  timeout       - supervision timeout [0x000a - 0xc80]
 *
 * Returns          void
 *
 ******************************************************************************/
void BTA_DmBleSubrateRequest(const RawAddress& bd_addr, uint16_t subrate_min,
                             uint16_t subrate_max, uint16_t max_latency,
                             uint16_t cont_num, uint16_t timeout) {
  APPL_TRACE_API("%s", __func__);
  do_in_main_thread(FROM_HERE,
                    base::Bind(bta_dm_ble_subrate_request, bd_addr, subrate_min,
                               subrate_max, max_latency, cont_num, timeout));
}
+4 −0
Original line number Diff line number Diff line
@@ -588,5 +588,9 @@ void bta_dm_search_set_state(uint8_t state);
void bta_dm_eir_update_uuid(uint16_t uuid16, bool adding);
void bta_dm_eir_update_cust_uuid(const tBTA_CUSTOM_UUID &curr, bool adding);

void bta_dm_ble_subrate_request(const RawAddress& bd_addr, uint16_t subrate_min,
                                uint16_t subrate_max, uint16_t max_latency,
                                uint16_t cont_num, uint16_t timeout);

#undef CASE_RETURN_TEXT
#endif /* BTA_DM_INT_H */
+26 −0
Original line number Diff line number Diff line
@@ -74,6 +74,10 @@ static void bta_gattc_phy_update_cback(tGATT_IF gatt_if, uint16_t conn_id,
static void bta_gattc_conn_update_cback(tGATT_IF gatt_if, uint16_t conn_id,
                                        uint16_t interval, uint16_t latency,
                                        uint16_t timeout, tGATT_STATUS status);
static void bta_gattc_subrate_chg_cback(tGATT_IF gatt_if, uint16_t conn_id,
                                        uint16_t subrate_factor,
                                        uint16_t latency, uint16_t cont_num,
                                        uint16_t timeout, tGATT_STATUS status);
static void bta_gattc_init_bk_conn(const tBTA_GATTC_API_OPEN* p_data,
                                   tBTA_GATTC_RCB* p_clreg);

@@ -87,6 +91,7 @@ static tGATT_CBACK bta_gattc_cl_cback = {
    .p_congestion_cb = bta_gattc_cong_cback,
    .p_phy_update_cb = bta_gattc_phy_update_cback,
    .p_conn_update_cb = bta_gattc_conn_update_cback,
    .p_subrate_chg_cb = bta_gattc_subrate_chg_cback,
};

/* opcode(tGATTC_OPTYPE) order has to be comply with internal event order */
@@ -1574,3 +1579,24 @@ static void bta_gattc_conn_update_cback(tGATT_IF gatt_if, uint16_t conn_id,
  cb_data.conn_update.status = status;
  (*p_clreg->p_cback)(BTA_GATTC_CONN_UPDATE_EVT, &cb_data);
}

static void bta_gattc_subrate_chg_cback(tGATT_IF gatt_if, uint16_t conn_id,
                                        uint16_t subrate_factor,
                                        uint16_t latency, uint16_t cont_num,
                                        uint16_t timeout, tGATT_STATUS status) {
  tBTA_GATTC_RCB* p_clreg = bta_gattc_cl_get_regcb(gatt_if);

  if (!p_clreg || !p_clreg->p_cback) {
    LOG(ERROR) << __func__ << ": client_if=" << gatt_if << " not found";
    return;
  }

  tBTA_GATTC cb_data;
  cb_data.subrate_chg.conn_id = conn_id;
  cb_data.subrate_chg.subrate_factor = subrate_factor;
  cb_data.subrate_chg.latency = latency;
  cb_data.subrate_chg.cont_num = cont_num;
  cb_data.subrate_chg.timeout = timeout;
  cb_data.subrate_chg.status = status;
  (*p_clreg->p_cback)(BTA_GATTC_SUBRATE_CHG_EVT, &cb_data);
}
Loading