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

Commit 108bffa4 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "PAST: Pipe methods and callbacks through GD" into tm-dev

parents 454aa859 09f13eed
Loading
Loading
Loading
Loading
+24 −0
Original line number Diff line number Diff line
@@ -148,6 +148,30 @@ class LeScanningManagerFacadeService : public LeScanningManagerFacade::Service,
  void OnFilterConfigCallback(
      ApcfFilterType filter_type, uint8_t available_spaces, ApcfAction action, uint8_t status){};

  void OnPeriodicSyncStarted(
      int reg_id,
      uint8_t status,
      uint16_t sync_handle,
      uint8_t advertising_sid,
      AddressWithType address_with_type,
      uint8_t phy,
      uint16_t interval) override {
    LOG_INFO("OnPeriodicSyncStarted in LeScanningManagerFacadeService");
  };

  void OnPeriodicSyncReport(
      uint16_t sync_handle, int8_t tx_power, int8_t rssi, uint8_t status, std::vector<uint8_t> data) override {
    LOG_INFO("OnPeriodicSyncReport in LeScanningManagerFacadeService");
  };

  void OnPeriodicSyncLost(uint16_t sync_handle) override {
    LOG_INFO("OnPeriodicSyncLost in LeScanningManagerFacadeService");
  };

  void OnPeriodicSyncTransferred(int pa_source, uint8_t status, Address address) override {
    LOG_INFO("OnPeriodicSyncTransferred in LeScanningManagerFacadeService");
  };

  LeScanningManager* le_scanning_manager_;
  os::Handler* facade_handler_;
  ::bluetooth::grpc::GrpcEventQueue<AdvertisingReportMsg> advertising_reports_{"advertising reports"};
+12 −0
Original line number Diff line number Diff line
@@ -75,6 +75,18 @@ class ScanningCallback {
  virtual void OnFilterParamSetup(uint8_t available_spaces, ApcfAction action, uint8_t status) = 0;
  virtual void OnFilterConfigCallback(
      ApcfFilterType filter_type, uint8_t available_spaces, ApcfAction action, uint8_t status) = 0;
  virtual void OnPeriodicSyncStarted(
      int request_id,
      uint8_t status,
      uint16_t sync_handle,
      uint8_t advertising_sid,
      AddressWithType address_with_type,
      uint8_t phy,
      uint16_t interval) = 0;
  virtual void OnPeriodicSyncReport(
      uint16_t sync_handle, int8_t tx_power, int8_t rssi, uint8_t status, std::vector<uint8_t> data) = 0;
  virtual void OnPeriodicSyncLost(uint16_t sync_handle) = 0;
  virtual void OnPeriodicSyncTransferred(int pa_source, uint8_t status, Address address) = 0;
};

class AdvertisingPacketContentFilterCommand {
+114 −10
Original line number Diff line number Diff line
@@ -136,10 +136,10 @@ class AdvertisingCache {
};

class NullScanningCallback : public ScanningCallback {
  void OnScannerRegistered(const bluetooth::hci::Uuid app_uuid, ScannerId scanner_id, ScanningStatus status) {
  void OnScannerRegistered(const bluetooth::hci::Uuid app_uuid, ScannerId scanner_id, ScanningStatus status) override {
    LOG_INFO("OnScannerRegistered in NullScanningCallback");
  }
  void OnSetScannerParameterComplete(ScannerId scanner_id, ScanningStatus status) {
  void OnSetScannerParameterComplete(ScannerId scanner_id, ScanningStatus status) override {
    LOG_INFO("OnSetScannerParameterComplete in NullScanningCallback");
  }
  void OnScanResult(
@@ -152,31 +152,52 @@ class NullScanningCallback : public ScanningCallback {
      int8_t tx_power,
      int8_t rssi,
      uint16_t periodic_advertising_interval,
      std::vector<uint8_t> advertising_data) {
      std::vector<uint8_t> advertising_data) override {
    LOG_INFO("OnScanResult in NullScanningCallback");
  }
  void OnTrackAdvFoundLost(AdvertisingFilterOnFoundOnLostInfo on_found_on_lost_info) {
  void OnTrackAdvFoundLost(AdvertisingFilterOnFoundOnLostInfo on_found_on_lost_info) override {
    LOG_INFO("OnTrackAdvFoundLost in NullScanningCallback");
  }
  void OnBatchScanReports(int client_if, int status, int report_format, int num_records, std::vector<uint8_t> data) {
  void OnBatchScanReports(
      int client_if, int status, int report_format, int num_records, std::vector<uint8_t> data) override {
    LOG_INFO("OnBatchScanReports in NullScanningCallback");
  }
  void OnBatchScanThresholdCrossed(int client_if) {
  void OnBatchScanThresholdCrossed(int client_if) override {
    LOG_INFO("OnBatchScanThresholdCrossed in NullScanningCallback");
  }
  void OnTimeout() {
  void OnTimeout() override {
    LOG_INFO("OnTimeout in NullScanningCallback");
  }
  void OnFilterEnable(Enable enable, uint8_t status) {
  void OnFilterEnable(Enable enable, uint8_t status) override {
    LOG_INFO("OnFilterEnable in NullScanningCallback");
  }
  void OnFilterParamSetup(uint8_t available_spaces, ApcfAction action, uint8_t status) {
  void OnFilterParamSetup(uint8_t available_spaces, ApcfAction action, uint8_t status) override {
    LOG_INFO("OnFilterParamSetup in NullScanningCallback");
  }
  void OnFilterConfigCallback(
      ApcfFilterType filter_type, uint8_t available_spaces, ApcfAction action, uint8_t status) {
      ApcfFilterType filter_type, uint8_t available_spaces, ApcfAction action, uint8_t status) override {
    LOG_INFO("OnFilterConfigCallback in NullScanningCallback");
  }
  void OnPeriodicSyncStarted(
      int reg_id,
      uint8_t status,
      uint16_t sync_handle,
      uint8_t advertising_sid,
      AddressWithType address_with_type,
      uint8_t phy,
      uint16_t interval) override {
    LOG_INFO("OnPeriodicSyncStarted in NullScanningCallback");
  };
  void OnPeriodicSyncReport(
      uint16_t sync_handle, int8_t tx_power, int8_t rssi, uint8_t status, std::vector<uint8_t> data) override {
    LOG_INFO("OnPeriodicSyncReport in NullScanningCallback");
  };
  void OnPeriodicSyncLost(uint16_t sync_handle) override {
    LOG_INFO("OnPeriodicSyncLost in NullScanningCallback");
  };
  void OnPeriodicSyncTransferred(int pa_source, uint8_t status, Address address) override {
    LOG_INFO("OnPeriodicSyncTransferred in NullScanningCallback");
  };
};

enum class BatchScanState {
@@ -234,6 +255,8 @@ struct LeScanningManager::impl : public bluetooth::hci::LeAddressManagerCallback
    }
    is_filter_support_ = controller_->IsSupported(OpCode::LE_ADV_FILTER);
    is_batch_scan_support_ = controller->IsSupported(OpCode::LE_BATCH_SCAN);
    is_periodic_advertising_sync_transfer_sender_support_ =
        controller_->SupportsBlePeriodicAdvertisingSyncTransferSender();
    total_num_of_advt_tracked_ = controller->GetVendorCapabilities().total_num_of_advt_tracked_;
    if (is_batch_scan_support_) {
      vendor_specific_event_manager_->RegisterEventHandler(
@@ -1043,6 +1066,58 @@ struct LeScanningManager::impl : public bluetooth::hci::LeAddressManagerCallback
        module_handler_->BindOnceOn(this, &impl::on_batch_scan_read_result_complete, scanner_id, total_num_of_records));
  }

  void start_sync(
      uint8_t sid, const AddressWithType& address_with_type, uint16_t skip, uint16_t timeout, int request_id) {
    if (!is_periodic_advertising_sync_transfer_sender_support_) {
      LOG_WARN("PAST sender not supported on this device");
      int status = static_cast<int>(ErrorCode::UNSUPPORTED_FEATURE_OR_PARAMETER_VALUE);
      scanning_callbacks_->OnPeriodicSyncStarted(request_id, status, -1, sid, address_with_type, 0, 0);
      return;
    }
  }

  void stop_sync(uint16_t handle) {
    if (!is_periodic_advertising_sync_transfer_sender_support_) {
      LOG_WARN("PAST sender not supported on this device");
      return;
    }
  }

  void cancel_create_sync(uint8_t sid, const Address& address) {
    if (!is_periodic_advertising_sync_transfer_sender_support_) {
      LOG_WARN("PAST sender not supported on this device");
      return;
    }
  }

  void transfer_sync(const Address& address, uint16_t service_data, uint16_t sync_handle, int pa_source) {
    if (!is_periodic_advertising_sync_transfer_sender_support_) {
      LOG_WARN("PAST sender not supported on this device");
      int status = static_cast<int>(ErrorCode::UNSUPPORTED_FEATURE_OR_PARAMETER_VALUE);
      scanning_callbacks_->OnPeriodicSyncTransferred(pa_source, status, address);
      return;
    }
  }

  void transfer_set_info(const Address& address, uint16_t service_data, uint8_t adv_handle, int pa_source) {
    if (!is_periodic_advertising_sync_transfer_sender_support_) {
      LOG_WARN("PAST sender not supported on this device");
      int status = static_cast<int>(ErrorCode::UNSUPPORTED_FEATURE_OR_PARAMETER_VALUE);
      scanning_callbacks_->OnPeriodicSyncTransferred(pa_source, status, address);
      return;
    }
  }

  void sync_tx_parameters(const Address& address, uint8_t mode, uint16_t skip, uint16_t timeout, int reg_id) {
    if (!is_periodic_advertising_sync_transfer_sender_support_) {
      LOG_WARN("PAST sender not supported on this device");
      int status = static_cast<int>(ErrorCode::UNSUPPORTED_FEATURE_OR_PARAMETER_VALUE);
      AddressWithType address_with_type(address, AddressType::RANDOM_DEVICE_ADDRESS);
      scanning_callbacks_->OnPeriodicSyncStarted(reg_id, status, -1, -1, address_with_type, 0, 0);
      return;
    }
  }

  void track_advertiser(uint8_t filter_index, ScannerId scanner_id) {
    if (total_num_of_advt_tracked_ <= 0) {
      LOG_WARN("advertisement tracking is not supported");
@@ -1323,6 +1398,7 @@ struct LeScanningManager::impl : public bluetooth::hci::LeAddressManagerCallback
  AdvertisingCache advertising_cache_;
  bool is_filter_support_ = false;
  bool is_batch_scan_support_ = false;
  bool is_periodic_advertising_sync_transfer_sender_support_ = false;

  LeScanType le_scan_type_ = LeScanType::ACTIVE;
  uint32_t interval_ms_{1000};
@@ -1454,6 +1530,34 @@ void LeScanningManager::BatchScanReadReport(ScannerId scanner_id, BatchScanMode
  CallOn(pimpl_.get(), &impl::batch_scan_read_results, scanner_id, 0, scan_mode);
}

void LeScanningManager::StartSync(
    uint8_t sid, const AddressWithType& address_with_type, uint16_t skip, uint16_t timeout, int reg_id) {
  CallOn(pimpl_.get(), &impl::start_sync, sid, address_with_type, skip, timeout, reg_id);
}

void LeScanningManager::StopSync(uint16_t handle) {
  CallOn(pimpl_.get(), &impl::stop_sync, handle);
}

void LeScanningManager::CancelCreateSync(uint8_t sid, const Address& address) {
  CallOn(pimpl_.get(), &impl::cancel_create_sync, sid, address);
}

void LeScanningManager::TransferSync(
    const Address& address, uint16_t service_data, uint16_t sync_handle, int pa_source) {
  CallOn(pimpl_.get(), &impl::transfer_sync, address, service_data, sync_handle, pa_source);
}

void LeScanningManager::TransferSetInfo(
    const Address& address, uint16_t service_data, uint8_t adv_handle, int pa_source) {
  CallOn(pimpl_.get(), &impl::transfer_set_info, address, service_data, adv_handle, pa_source);
}

void LeScanningManager::SyncTxParameters(
    const Address& address, uint8_t mode, uint16_t skip, uint16_t timeout, int reg_id) {
  CallOn(pimpl_.get(), &impl::sync_tx_parameters, address, mode, skip, timeout, reg_id);
}

void LeScanningManager::TrackAdvertiser(uint8_t filter_index, ScannerId scanner_id) {
  CallOn(pimpl_.get(), &impl::track_advertiser, filter_index, scanner_id);
}
+12 −0
Original line number Diff line number Diff line
@@ -76,6 +76,18 @@ class LeScanningManager : public bluetooth::Module {
  virtual void BatchScanDisable();
  virtual void BatchScanReadReport(ScannerId scanner_id, BatchScanMode scan_mode);

  virtual void StartSync(uint8_t sid, const AddressWithType& address, uint16_t skip, uint16_t timeout, int reg_id);

  virtual void StopSync(uint16_t handle);

  virtual void CancelCreateSync(uint8_t sid, const Address& address);

  virtual void TransferSync(const Address& address, uint16_t service_data, uint16_t sync_handle, int pa_source);

  virtual void TransferSetInfo(const Address& address, uint16_t service_data, uint8_t adv_handle, int pa_source);

  virtual void SyncTxParameters(const Address& addr, uint8_t mode, uint16_t skip, uint16_t timeout, int reg_id);

  virtual void TrackAdvertiser(uint8_t filter_index, ScannerId scanner_id);

  virtual void RegisterScanningCallback(ScanningCallback* scanning_callback);
+10 −0
Original line number Diff line number Diff line
@@ -41,6 +41,10 @@ class MockScanningCallback : public ScanningCallback {
  MOCK_METHOD(void, OnFilterEnable, (Enable, uint8_t));
  MOCK_METHOD(void, OnFilterParamSetup, (uint8_t, ApcfAction, uint8_t));
  MOCK_METHOD(void, OnFilterConfigCallback, (ApcfFilterType, uint8_t, ApcfAction, uint8_t));
  MOCK_METHOD(void, OnPeriodicSyncStarted, (int, uint8_t, uint16_t, uint8_t, AddressWithType, uint8_t, uint16_t));
  MOCK_METHOD(void, OnPeriodicSyncReport, (uint16_t, int8_t, int8_t, uint8_t, std::vector<uint8_t>));
  MOCK_METHOD(void, OnPeriodicSyncLost, (uint16_t));
  MOCK_METHOD(void, OnPeriodicSyncTransferred, (int, uint8_t, Address));
};

class MockLeScanningManager : public LeScanningManager {
@@ -58,6 +62,12 @@ class MockLeScanningManager : public LeScanningManager {
  MOCK_METHOD(void, BatchScanReadReport, (ScannerId, BatchScanMode));
  MOCK_METHOD(void, TrackAdvertiser, (uint8_t, ScannerId));
  MOCK_METHOD(void, RegisterScanningCallback, (ScanningCallback*));
  MOCK_METHOD(void, StartSync, (uint8_t, const AddressWithType&, uint16_t, uint16_t, int));
  MOCK_METHOD(void, StopSync, (uint16_t));
  MOCK_METHOD(void, CancelCreateSync, (uint8_t, const Address&));
  MOCK_METHOD(void, TransferSync, (const Address&, uint16_t, uint16_t sync_handle, int pa_source));
  MOCK_METHOD(void, TransferSetInfo, (const Address&, uint16_t, uint8_t, int));
  MOCK_METHOD(void, SyncTxParameters, (const Address&, uint8_t, uint16_t, uint16_t, int));
};

}  // namespace testing
Loading