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

Commit 6b8fc0bf authored by Chienyuan's avatar Chienyuan Committed by Myles Watson
Browse files

gd HCI: Post AckPause/AckResume to the handler of LeAddressRotator

Tag: #gd-refactor
Bug: 152348535
Test: gd/cert/run --host
Test: atest bluetooth_test_gd
Change-Id: I7af5afce745af9a3a3fcf7696ef1dbb2224cd943
parent bf2d36c9
Loading
Loading
Loading
Loading
+19 −11
Original line number Diff line number Diff line
@@ -79,20 +79,11 @@ void LeAddressRotator::Unregister(LeAddressRotatorCallback* callback) {
}

void LeAddressRotator::AckPause(LeAddressRotatorCallback* callback) {
  ASSERT(registered_clients_.find(callback) != registered_clients_.end());
  registered_clients_.find(callback)->second = ClientState::PAUSED;
  for (auto client : registered_clients_) {
    if (client.second != ClientState::PAUSED) {
      // make sure all client paused
      return;
    }
  }
  rotate_random_address();
  handler_->Post(common::BindOnce(&LeAddressRotator::ack_pause, common::Unretained(this), callback));
}

void LeAddressRotator::AckResume(LeAddressRotatorCallback* callback) {
  ASSERT(registered_clients_.find(callback) != registered_clients_.end());
  registered_clients_.find(callback)->second = ClientState::RESUMED;
  handler_->Post(common::BindOnce(&LeAddressRotator::ack_resume, common::Unretained(this), callback));
}

void LeAddressRotator::OnLeSetRandomAddressComplete(bool success) {
@@ -136,6 +127,18 @@ void LeAddressRotator::pause_registered_clients() {
  }
}

void LeAddressRotator::ack_pause(LeAddressRotatorCallback* callback) {
  ASSERT(registered_clients_.find(callback) != registered_clients_.end());
  registered_clients_.find(callback)->second = ClientState::PAUSED;
  for (auto client : registered_clients_) {
    if (client.second != ClientState::PAUSED) {
      // make sure all client paused
      return;
    }
  }
  rotate_random_address();
}

void LeAddressRotator::resume_registered_clients() {
  std::lock_guard<std::mutex> lock(mutex_);
  for (auto client : registered_clients_) {
@@ -144,6 +147,11 @@ void LeAddressRotator::resume_registered_clients() {
  }
}

void LeAddressRotator::ack_resume(LeAddressRotatorCallback* callback) {
  ASSERT(registered_clients_.find(callback) != registered_clients_.end());
  registered_clients_.find(callback)->second = ClientState::RESUMED;
}

void LeAddressRotator::rotate_random_address() {
  if (address_policy_ != AddressPolicy::USE_RESOLVABLE_ADDRESS &&
      address_policy_ != AddressPolicy::USE_NON_RESOLVABLE_ADDRESS) {
+2 −0
Original line number Diff line number Diff line
@@ -63,7 +63,9 @@ class LeAddressRotator {

 private:
  void pause_registered_clients();
  void ack_pause(LeAddressRotatorCallback* callback);
  void resume_registered_clients();
  void ack_resume(LeAddressRotatorCallback* callback);
  void rotate_random_address();
  hci::Address generate_rpa(const crypto_toolbox::Octet16& irk, std::array<uint8_t, 8> prand);
  hci::Address generate_nrpa();