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

Commit 353b4dd8 authored by Myles Watson's avatar Myles Watson Committed by Automerger Merge Worker
Browse files

Merge "Call l2cble_process_rc_param_request_evt" into main am: be47de30

parents c9312d8f be47de30
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -59,6 +59,14 @@ class LeAclConnectionTracker : public LeConnectionManagementCallbacks {
    SAVE_OR_CALL(OnConnectionUpdate, hci_status, conn_interval, conn_latency, supervision_timeout)
  }

  void OnParameterUpdateRequest(
      uint16_t interval_min,
      uint16_t interval_max,
      uint16_t latency,
      uint16_t supervision_timeout) override {
    SAVE_OR_CALL(OnParameterUpdateRequest, interval_min, interval_max, latency, supervision_timeout)
  }

  void OnDataLengthChange(uint16_t tx_octets, uint16_t tx_time, uint16_t rx_octets, uint16_t rx_time) override {
    SAVE_OR_CALL(OnDataLengthChange, tx_octets, tx_time, rx_octets, rx_time)
  }
+5 −0
Original line number Diff line number Diff line
@@ -30,6 +30,11 @@ class LeConnectionManagementCallbacks {
      uint16_t connection_interval,
      uint16_t connection_latency,
      uint16_t supervision_timeout) = 0;
  virtual void OnParameterUpdateRequest(
      uint16_t interval_min,
      uint16_t interval_max,
      uint16_t latency,
      uint16_t supervision_timeout) = 0;
  virtual void OnDataLengthChange(uint16_t tx_octets, uint16_t tx_time, uint16_t rx_octets, uint16_t rx_time) = 0;
  virtual void OnDisconnection(hci::ErrorCode reason) = 0;
  virtual void OnReadRemoteVersionInformationComplete(
+8 −0
Original line number Diff line number Diff line
@@ -37,6 +37,14 @@ class MockLeConnectionManagementCallbacks : public LeConnectionManagementCallbac
       uint16_t connection_latency,
       uint16_t supervision_timeout),
      (override));
  MOCK_METHOD(
      void,
      OnParameterUpdateRequest,
      (uint16_t interval_min,
       uint16_t interval_max,
       uint16_t latency,
       uint16_t supervision_timeout),
      (override));
  MOCK_METHOD(
      void,
      OnDataLengthChange,
+6 −12
Original line number Diff line number Diff line
@@ -613,20 +613,14 @@ struct le_impl : public bluetooth::hci::LeAddressManagerCallback {
      return;
    }

    auto handle = request_view.GetConnectionHandle();
    connections.execute(handle, [=, this](LeConnectionManagementCallbacks* /* callbacks */) {
      // TODO: this is blindly accepting any parameters, just so we don't hang connection
      // have proper parameter negotiation
      le_acl_connection_interface_->EnqueueCommand(
          LeRemoteConnectionParameterRequestReplyBuilder::Create(
              handle,
    connections.execute(
        request_view.GetConnectionHandle(),
        [request_view](LeConnectionManagementCallbacks* callbacks) {
          callbacks->OnParameterUpdateRequest(
              request_view.GetIntervalMin(),
              request_view.GetIntervalMax(),
              request_view.GetLatency(),
              request_view.GetTimeout(),
              0,
              0),
          handler_->BindOnce([](CommandCompleteView /* status */) {}));
              request_view.GetTimeout());
        });
  }

+9 −10
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@
#include <gtest/gtest.h>

#include <chrono>
#include <future>

#include "common/bidi_queue.h"
#include "hci/acl_manager/le_connection_callbacks.h"
@@ -1114,6 +1115,13 @@ TEST_F(LeImplWithConnectionTest, on_le_event__DATA_LENGTH_CHANGE) {
}

TEST_F(LeImplWithConnectionTest, on_le_event__REMOTE_CONNECTION_PARAMETER_REQUEST) {
  std::promise<void> request_promise;
  auto request = request_promise.get_future();
  EXPECT_CALL(
      connection_management_callbacks_,
      OnParameterUpdateRequest(kIntervalMin, kIntervalMax, kLatency, kTimeout))
      .WillOnce([&request_promise]() { request_promise.set_value(); });

  // Send a remote connection parameter request
  auto command = hci::LeRemoteConnectionParameterRequestBuilder::Create(
      kHciHandle, kIntervalMin, kIntervalMax, kLatency, kTimeout);
@@ -1124,16 +1132,7 @@ TEST_F(LeImplWithConnectionTest, on_le_event__REMOTE_CONNECTION_PARAMETER_REQUES
    le_impl_->on_le_event(view);
  }

  sync_handler();

  auto view = CreateLeConnectionManagementCommandView<LeRemoteConnectionParameterRequestReplyView>(
      hci_layer_->GetCommand());
  ASSERT_TRUE(view.IsValid());

  ASSERT_EQ(kIntervalMin, view.GetIntervalMin());
  ASSERT_EQ(kIntervalMax, view.GetIntervalMax());
  ASSERT_EQ(kLatency, view.GetLatency());
  ASSERT_EQ(kTimeout, view.GetTimeout());
  ASSERT_EQ(std::future_status::ready, request.wait_for(std::chrono::seconds(1)));
}

// b/260920739
Loading