Loading system/gd/hci/acl_manager/le_acl_connection.cc +8 −0 Original line number Diff line number Diff line Loading @@ -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) } Loading system/gd/hci/acl_manager/le_connection_management_callbacks.h +5 −0 Original line number Diff line number Diff line Loading @@ -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( Loading system/gd/hci/acl_manager/le_connection_management_callbacks_mock.h +8 −0 Original line number Diff line number Diff line Loading @@ -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, Loading system/gd/hci/acl_manager/le_impl.h +6 −12 Original line number Diff line number Diff line Loading @@ -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()); }); } Loading system/gd/hci/acl_manager/le_impl_test.cc +9 −10 Original line number Diff line number Diff line Loading @@ -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" Loading Loading @@ -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); Loading @@ -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 Loading
system/gd/hci/acl_manager/le_acl_connection.cc +8 −0 Original line number Diff line number Diff line Loading @@ -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) } Loading
system/gd/hci/acl_manager/le_connection_management_callbacks.h +5 −0 Original line number Diff line number Diff line Loading @@ -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( Loading
system/gd/hci/acl_manager/le_connection_management_callbacks_mock.h +8 −0 Original line number Diff line number Diff line Loading @@ -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, Loading
system/gd/hci/acl_manager/le_impl.h +6 −12 Original line number Diff line number Diff line Loading @@ -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()); }); } Loading
system/gd/hci/acl_manager/le_impl_test.cc +9 −10 Original line number Diff line number Diff line Loading @@ -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" Loading Loading @@ -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); Loading @@ -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