Loading system/gd/hci/hci_layer_fake.cc +4 −0 Original line number Diff line number Diff line Loading @@ -104,6 +104,10 @@ CommandView TestHciLayer::GetCommand() { return command_packet_view; } void TestHciLayer::AssertNoQueuedCommand() { EXPECT_TRUE(command_queue_.empty()); } void TestHciLayer::RegisterEventHandler( EventCode event_code, common::ContextualCallback<void(EventView)> event_handler) { registered_events_[event_code] = event_handler; Loading system/gd/hci/hci_layer_fake.h +2 −0 Original line number Diff line number Diff line Loading @@ -42,6 +42,8 @@ class TestHciLayer : public HciLayer { CommandView GetCommand(); void AssertNoQueuedCommand(); void RegisterEventHandler(EventCode event_code, common::ContextualCallback<void(EventView)> event_handler) override; void UnregisterEventHandler(EventCode event_code) override; Loading system/gd/hci/le_scanning_manager.cc +3 −0 Original line number Diff line number Diff line Loading @@ -542,6 +542,8 @@ struct LeScanningManager::impl : public LeAddressManagerCallback { } void scan(bool start) { // On-resume flag should always be reset if there is an explicit start/stop call. scan_on_resume_ = false; if (start) { configure_scan(); start_scan(); Loading Loading @@ -1610,6 +1612,7 @@ struct LeScanningManager::impl : public LeAddressManagerCallback { } paused_ = false; if (scan_on_resume_ == true) { scan_on_resume_ = false; start_scan(); } le_address_manager_->AckResume(this); Loading system/gd/hci/le_scanning_manager_test.cc +66 −0 Original line number Diff line number Diff line Loading @@ -611,6 +611,72 @@ TEST_F(LeScanningManagerExtendedTest, start_scan_test) { test_hci_layer_->IncomingLeMetaEvent(LeExtendedAdvertisingReportBuilder::Create({report})); } TEST_F(LeScanningManagerExtendedTest, start_scan_on_resume_conflict_test) { TestLeAddressManager* test_le_address_manager = (TestLeAddressManager*)test_acl_manager_->GetLeAddressManager(); // Enable scan le_scanning_manager->Scan(true); ASSERT_EQ(OpCode::LE_SET_EXTENDED_SCAN_PARAMETERS, test_hci_layer_->GetCommand().GetOpCode()); test_hci_layer_->IncomingEvent( LeSetExtendedScanParametersCompleteBuilder::Create(uint8_t{1}, ErrorCode::SUCCESS)); ASSERT_EQ(OpCode::LE_SET_EXTENDED_SCAN_ENABLE, test_hci_layer_->GetCommand().GetOpCode()); test_hci_layer_->IncomingEvent( LeSetExtendedScanEnableCompleteBuilder::Create(uint8_t{1}, ErrorCode::SUCCESS)); sync_client_handler(); // Pause scan test_le_address_manager->client_->OnPause(); ASSERT_EQ(OpCode::LE_SET_EXTENDED_SCAN_ENABLE, test_hci_layer_->GetCommand().GetOpCode()); test_hci_layer_->IncomingEvent( LeSetExtendedScanEnableCompleteBuilder::Create(uint8_t{1}, ErrorCode::SUCCESS)); // Disable scan le_scanning_manager->Scan(false); test_hci_layer_->AssertNoQueuedCommand(); // Enable Scan le_scanning_manager->Scan(true); ASSERT_EQ(OpCode::LE_SET_EXTENDED_SCAN_PARAMETERS, test_hci_layer_->GetCommand().GetOpCode()); test_hci_layer_->IncomingEvent( LeSetExtendedScanParametersCompleteBuilder::Create(uint8_t{1}, ErrorCode::SUCCESS)); ASSERT_EQ(OpCode::LE_SET_EXTENDED_SCAN_ENABLE, test_hci_layer_->GetCommand().GetOpCode()); test_hci_layer_->IncomingEvent( LeSetExtendedScanEnableCompleteBuilder::Create(uint8_t{1}, ErrorCode::SUCCESS)); // Ensure there is no double enable commands on resume test_le_address_manager->client_->OnResume(); sync_client_handler(); test_hci_layer_->AssertNoQueuedCommand(); } TEST_F(LeScanningManagerExtendedTest, on_pause_on_resume_test) { TestLeAddressManager* test_le_address_manager = (TestLeAddressManager*)test_acl_manager_->GetLeAddressManager(); // Enable scan le_scanning_manager->Scan(true); ASSERT_EQ(OpCode::LE_SET_EXTENDED_SCAN_PARAMETERS, test_hci_layer_->GetCommand().GetOpCode()); test_hci_layer_->IncomingEvent( LeSetExtendedScanParametersCompleteBuilder::Create(uint8_t{1}, ErrorCode::SUCCESS)); ASSERT_EQ(OpCode::LE_SET_EXTENDED_SCAN_ENABLE, test_hci_layer_->GetCommand().GetOpCode()); test_hci_layer_->IncomingEvent( LeSetExtendedScanEnableCompleteBuilder::Create(uint8_t{1}, ErrorCode::SUCCESS)); sync_client_handler(); // Pause scan test_le_address_manager->client_->OnPause(); ASSERT_EQ(OpCode::LE_SET_EXTENDED_SCAN_ENABLE, test_hci_layer_->GetCommand().GetOpCode()); test_hci_layer_->IncomingEvent( LeSetExtendedScanEnableCompleteBuilder::Create(uint8_t{1}, ErrorCode::SUCCESS)); // Ensure scan is resumed (enabled) test_le_address_manager->client_->OnResume(); ASSERT_EQ(OpCode::LE_SET_EXTENDED_SCAN_ENABLE, test_hci_layer_->GetCommand().GetOpCode()); test_hci_layer_->IncomingEvent( LeSetExtendedScanEnableCompleteBuilder::Create(uint8_t{1}, ErrorCode::SUCCESS)); } TEST_F(LeScanningManagerExtendedTest, ignore_on_pause_on_resume_after_unregistered) { TestLeAddressManager* test_le_address_manager = (TestLeAddressManager*)test_acl_manager_->GetLeAddressManager(); test_le_address_manager->ignore_unregister_for_testing = true; Loading Loading
system/gd/hci/hci_layer_fake.cc +4 −0 Original line number Diff line number Diff line Loading @@ -104,6 +104,10 @@ CommandView TestHciLayer::GetCommand() { return command_packet_view; } void TestHciLayer::AssertNoQueuedCommand() { EXPECT_TRUE(command_queue_.empty()); } void TestHciLayer::RegisterEventHandler( EventCode event_code, common::ContextualCallback<void(EventView)> event_handler) { registered_events_[event_code] = event_handler; Loading
system/gd/hci/hci_layer_fake.h +2 −0 Original line number Diff line number Diff line Loading @@ -42,6 +42,8 @@ class TestHciLayer : public HciLayer { CommandView GetCommand(); void AssertNoQueuedCommand(); void RegisterEventHandler(EventCode event_code, common::ContextualCallback<void(EventView)> event_handler) override; void UnregisterEventHandler(EventCode event_code) override; Loading
system/gd/hci/le_scanning_manager.cc +3 −0 Original line number Diff line number Diff line Loading @@ -542,6 +542,8 @@ struct LeScanningManager::impl : public LeAddressManagerCallback { } void scan(bool start) { // On-resume flag should always be reset if there is an explicit start/stop call. scan_on_resume_ = false; if (start) { configure_scan(); start_scan(); Loading Loading @@ -1610,6 +1612,7 @@ struct LeScanningManager::impl : public LeAddressManagerCallback { } paused_ = false; if (scan_on_resume_ == true) { scan_on_resume_ = false; start_scan(); } le_address_manager_->AckResume(this); Loading
system/gd/hci/le_scanning_manager_test.cc +66 −0 Original line number Diff line number Diff line Loading @@ -611,6 +611,72 @@ TEST_F(LeScanningManagerExtendedTest, start_scan_test) { test_hci_layer_->IncomingLeMetaEvent(LeExtendedAdvertisingReportBuilder::Create({report})); } TEST_F(LeScanningManagerExtendedTest, start_scan_on_resume_conflict_test) { TestLeAddressManager* test_le_address_manager = (TestLeAddressManager*)test_acl_manager_->GetLeAddressManager(); // Enable scan le_scanning_manager->Scan(true); ASSERT_EQ(OpCode::LE_SET_EXTENDED_SCAN_PARAMETERS, test_hci_layer_->GetCommand().GetOpCode()); test_hci_layer_->IncomingEvent( LeSetExtendedScanParametersCompleteBuilder::Create(uint8_t{1}, ErrorCode::SUCCESS)); ASSERT_EQ(OpCode::LE_SET_EXTENDED_SCAN_ENABLE, test_hci_layer_->GetCommand().GetOpCode()); test_hci_layer_->IncomingEvent( LeSetExtendedScanEnableCompleteBuilder::Create(uint8_t{1}, ErrorCode::SUCCESS)); sync_client_handler(); // Pause scan test_le_address_manager->client_->OnPause(); ASSERT_EQ(OpCode::LE_SET_EXTENDED_SCAN_ENABLE, test_hci_layer_->GetCommand().GetOpCode()); test_hci_layer_->IncomingEvent( LeSetExtendedScanEnableCompleteBuilder::Create(uint8_t{1}, ErrorCode::SUCCESS)); // Disable scan le_scanning_manager->Scan(false); test_hci_layer_->AssertNoQueuedCommand(); // Enable Scan le_scanning_manager->Scan(true); ASSERT_EQ(OpCode::LE_SET_EXTENDED_SCAN_PARAMETERS, test_hci_layer_->GetCommand().GetOpCode()); test_hci_layer_->IncomingEvent( LeSetExtendedScanParametersCompleteBuilder::Create(uint8_t{1}, ErrorCode::SUCCESS)); ASSERT_EQ(OpCode::LE_SET_EXTENDED_SCAN_ENABLE, test_hci_layer_->GetCommand().GetOpCode()); test_hci_layer_->IncomingEvent( LeSetExtendedScanEnableCompleteBuilder::Create(uint8_t{1}, ErrorCode::SUCCESS)); // Ensure there is no double enable commands on resume test_le_address_manager->client_->OnResume(); sync_client_handler(); test_hci_layer_->AssertNoQueuedCommand(); } TEST_F(LeScanningManagerExtendedTest, on_pause_on_resume_test) { TestLeAddressManager* test_le_address_manager = (TestLeAddressManager*)test_acl_manager_->GetLeAddressManager(); // Enable scan le_scanning_manager->Scan(true); ASSERT_EQ(OpCode::LE_SET_EXTENDED_SCAN_PARAMETERS, test_hci_layer_->GetCommand().GetOpCode()); test_hci_layer_->IncomingEvent( LeSetExtendedScanParametersCompleteBuilder::Create(uint8_t{1}, ErrorCode::SUCCESS)); ASSERT_EQ(OpCode::LE_SET_EXTENDED_SCAN_ENABLE, test_hci_layer_->GetCommand().GetOpCode()); test_hci_layer_->IncomingEvent( LeSetExtendedScanEnableCompleteBuilder::Create(uint8_t{1}, ErrorCode::SUCCESS)); sync_client_handler(); // Pause scan test_le_address_manager->client_->OnPause(); ASSERT_EQ(OpCode::LE_SET_EXTENDED_SCAN_ENABLE, test_hci_layer_->GetCommand().GetOpCode()); test_hci_layer_->IncomingEvent( LeSetExtendedScanEnableCompleteBuilder::Create(uint8_t{1}, ErrorCode::SUCCESS)); // Ensure scan is resumed (enabled) test_le_address_manager->client_->OnResume(); ASSERT_EQ(OpCode::LE_SET_EXTENDED_SCAN_ENABLE, test_hci_layer_->GetCommand().GetOpCode()); test_hci_layer_->IncomingEvent( LeSetExtendedScanEnableCompleteBuilder::Create(uint8_t{1}, ErrorCode::SUCCESS)); } TEST_F(LeScanningManagerExtendedTest, ignore_on_pause_on_resume_after_unregistered) { TestLeAddressManager* test_le_address_manager = (TestLeAddressManager*)test_acl_manager_->GetLeAddressManager(); test_le_address_manager->ignore_unregister_for_testing = true; Loading