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

Commit f6506775 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge changes I9dee4893,Id30ad44e,I77837cc5,Iebd60d4e,Ie2237ad8, ...

* changes:
  Re-log stack/btm/btm_ble::BTM_BleSetPhy
  Use common API to set hci handle
  Add common API to set hci handle
  gd: Add monitor ability to receive packet credits
  Move _process_num_completed_pkts into acl
  Streamline stack/l2cap/l2c_link::l2c_link_process_num_completed_pkts
parents 2f46d2bc c0d3763f
Loading
Loading
Loading
Loading
+32 −0
Original line number Diff line number Diff line
@@ -149,6 +149,9 @@ struct Controller::impl {
      uint16_t handle = completed_packets.connection_handle_;
      uint16_t credits = completed_packets.host_num_of_completed_packets_;
      acl_credits_callback_.Invoke(handle, credits);
      if (!acl_monitor_credits_callback_.IsEmpty()) {
        acl_monitor_credits_callback_.Invoke(handle, credits);
      }
    }
  }

@@ -162,6 +165,26 @@ struct Controller::impl {
    acl_credits_callback_ = {};
  }

  void register_completed_monitor_acl_packets_callback(CompletedAclPacketsCallback callback) {
    ASSERT(acl_monitor_credits_callback_.IsEmpty());
    acl_monitor_credits_callback_ = callback;
  }

  void unregister_completed_monitor_acl_packets_callback() {
    ASSERT(!acl_monitor_credits_callback_.IsEmpty());
    acl_monitor_credits_callback_ = {};
  }

  void register_monitor_completed_acl_packets_callback(CompletedAclPacketsCallback callback) {
    ASSERT(acl_monitor_credits_callback_.IsEmpty());
    acl_monitor_credits_callback_ = callback;
  }

  void unregister_monitor_completed_acl_packets_callback() {
    ASSERT(!acl_monitor_credits_callback_.IsEmpty());
    acl_monitor_credits_callback_ = {};
  }

  void read_local_name_complete_handler(CommandCompleteView view) {
    auto complete_view = ReadLocalNameCompleteView::Create(view);
    ASSERT(complete_view.IsValid());
@@ -777,6 +800,7 @@ struct Controller::impl {
  HciLayer* hci_;

  CompletedAclPacketsCallback acl_credits_callback_{};
  CompletedAclPacketsCallback acl_monitor_credits_callback_{};
  LocalVersionInformation local_version_information_;
  std::array<uint8_t, 64> local_supported_commands_;
  uint8_t maximum_page_number_;
@@ -813,6 +837,14 @@ void Controller::UnregisterCompletedAclPacketsCallback() {
  CallOn(impl_.get(), &impl::unregister_completed_acl_packets_callback);
}

void Controller::RegisterCompletedMonitorAclPacketsCallback(CompletedAclPacketsCallback cb) {
  CallOn(impl_.get(), &impl::register_completed_monitor_acl_packets_callback, cb);
}

void Controller::UnregisterCompletedMonitorAclPacketsCallback() {
  CallOn(impl_.get(), &impl::unregister_completed_monitor_acl_packets_callback);
}

std::string Controller::GetLocalName() const {
  return impl_->local_name_;
}
+3 −0
Original line number Diff line number Diff line
@@ -37,6 +37,9 @@ class Controller : public Module {

  virtual void UnregisterCompletedAclPacketsCallback();

  virtual void RegisterCompletedMonitorAclPacketsCallback(CompletedAclPacketsCallback cb);
  virtual void UnregisterCompletedMonitorAclPacketsCallback();

  virtual std::string GetLocalName() const;

  virtual LocalVersionInformation GetLocalVersionInformation() const;
+6 −0
Original line number Diff line number Diff line
@@ -55,6 +55,7 @@
#include "stack/include/acl_api.h"
#include "stack/include/acl_hci_link_interface.h"
#include "stack/include/btm_api.h"
#include "stack/include/btm_iso_api.h"
#include "stack/include/btu.h"
#include "stack/include/hcimsgs.h"
#include "stack/include/l2cap_acl_interface.h"
@@ -2893,3 +2894,8 @@ void acl_rcv_acl_data(BT_HDR* p_msg) {
void acl_link_segments_xmitted(BT_HDR* p_msg) {
  l2c_link_segments_xmitted(p_msg);
}

void acl_process_num_completed_pkts(uint8_t* p, uint8_t evt_len) {
  l2c_link_process_num_completed_pkts(p, evt_len);
  bluetooth::hci::IsoManager::GetInstance()->HandleNumComplDataPkts(p, evt_len);
}
+5 −25
Original line number Diff line number Diff line
@@ -784,21 +784,6 @@ void BTM_BleReadPhy(

void doNothing(uint8_t* data, uint16_t len) {}

/*******************************************************************************
 *
 * Function         BTM_BleSetPhy
 *
 * Description      To set PHY preferences for specified LE connection
 *
 *
 * Returns          BTM_SUCCESS if command successfully sent to controller,
 *                  BTM_MODE_UNSUPPORTED if local controller doesn't support LE
 *                  2M or LE Coded PHY,
 *                  BTM_ILLEGAL_VALUE if specified remote doesn't support LE 2M
 *                  or LE Coded PHY,
 *                  BTM_WRONG_MODE if Device in wrong mode for request.
 *
 ******************************************************************************/
void BTM_BleSetPhy(const RawAddress& bd_addr, uint8_t tx_phys, uint8_t rx_phys,
                   uint16_t phy_options) {
  if (bluetooth::shim::is_gd_shim_enabled()) {
@@ -806,8 +791,9 @@ void BTM_BleSetPhy(const RawAddress& bd_addr, uint8_t tx_phys, uint8_t rx_phys,
                                          phy_options);
  }
  if (!BTM_IsAclConnectionUp(bd_addr, BT_TRANSPORT_LE)) {
    BTM_TRACE_ERROR("%s: Wrong mode: no LE link exist or LE not supported",
                    __func__);
    LOG_INFO(
        "Unable to set phy preferences because no le acl is connected to "
        "device");
    return;
  }

@@ -815,25 +801,19 @@ void BTM_BleSetPhy(const RawAddress& bd_addr, uint8_t tx_phys, uint8_t rx_phys,
  if (tx_phys == 0) all_phys &= 0x01;
  if (rx_phys == 0) all_phys &= 0x02;

  BTM_TRACE_DEBUG(
      "%s: all_phys = 0x%02x, tx_phys = 0x%02x, rx_phys = 0x%02x, phy_options "
      "= 0x%04x",
      __func__, all_phys, tx_phys, rx_phys, phy_options);

  uint16_t handle = acl_get_hci_handle_for_hcif(bd_addr, BT_TRANSPORT_LE);

  // checking if local controller supports it!
  if (!controller_get_interface()->supports_ble_2m_phy() &&
      !controller_get_interface()->supports_ble_coded_phy()) {
    BTM_TRACE_ERROR("%s failed, request not supported in local controller!",
                    __func__);
    LOG_INFO("Local controller unable to support setting of le phy parameters");
    gatt_notify_phy_updated(GATT_REQ_NOT_SUPPORTED, handle, tx_phys, rx_phys);
    return;
  }

  if (!acl_peer_supports_ble_2m_phy(handle) &&
      !acl_peer_supports_ble_coded_phy(handle)) {
    BTM_TRACE_ERROR("%s failed, peer does not support request", __func__);
    LOG_INFO("Remote device unable to support setting of le phy parameter");
    gatt_notify_phy_updated(GATT_REQ_NOT_SUPPORTED, handle, tx_phys, rx_phys);
    return;
  }
+1 −2
Original line number Diff line number Diff line
@@ -324,8 +324,7 @@ void btu_hcif_process_event(UNUSED_ATTR uint8_t controller_id, BT_HDR* p_msg) {
      btu_hcif_role_change_evt(p);
      break;
    case HCI_NUM_COMPL_DATA_PKTS_EVT:
      l2c_link_process_num_completed_pkts(p, hci_evt_len);
      IsoManager::GetInstance()->HandleNumComplDataPkts(p, hci_evt_len);
      acl_process_num_completed_pkts(p, hci_evt_len);
      break;
    case HCI_MODE_CHANGE_EVT:
      btu_hcif_mode_change_evt(p);
Loading