// Returrns null on failure.
@nullable int[] getAvailableDFSChannels();
- // Get the latest scan results from kernel.
+ // Get the latest single scan results from kernel.
NativeScanResult[] getScanResults();
+ // Get the latest pno scan results from the interface which has most recently
+ // completed disconnected mode PNO scans
+ NativeScanResult[] getPnoScanResults();
+
// Request a single scan using a SingleScanSettings parcelable object.
boolean scan(in SingleScanSettings scanSettings);
scan_started_(false),
pno_scan_started_(false),
offload_scan_supported_(false),
+ pno_scan_running_over_offload_(false),
+ pno_scan_results_from_offload_(false),
wiphy_index_(wiphy_index),
interface_index_(interface_index),
scan_capabilities_(scan_capabilities),
return Status::ok();
}
+Status ScannerImpl::getPnoScanResults(
+ vector<NativeScanResult>* out_scan_results) {
+ if (!CheckIsValid()) {
+ return Status::ok();
+ }
+ if (pno_scan_results_from_offload_) {
+ if (!offload_scan_manager_->getScanResults(out_scan_results)) {
+ LOG(ERROR) << "Failed to get scan results via Offload HAL";
+ }
+ } else {
+ if (!scan_utils_->GetScanResult(interface_index_, out_scan_results)) {
+ LOG(ERROR) << "Failed to get scan results via NL80211";
+ }
+ }
+ return Status::ok();
+}
+
Status ScannerImpl::scan(const SingleScanSettings& scan_settings,
bool* out_success) {
if (!CheckIsValid()) {
Status ScannerImpl::startPnoScan(const PnoSettings& pno_settings,
bool* out_success) {
pno_settings_ = pno_settings;
+ pno_scan_results_from_offload_ = false;
if (offload_scan_supported_ && StartPnoScanOffload(pno_settings)) {
// scanning over offload succeeded
*out_success = true;
return;
}
LOG(INFO) << "Offload Scan results received";
+ pno_scan_results_from_offload_ = true;
if (pno_scan_event_handler_ != nullptr) {
pno_scan_event_handler_->OnPnoNetworkFound();
} else {
// Returns a vector of available frequencies for DFS channels.
::android::binder::Status getAvailableDFSChannels(
::std::unique_ptr<::std::vector<int32_t>>* out_frequencies) override;
- // Get the latest scan results from kernel.
+ // Get the latest single scan results from kernel.
::android::binder::Status getScanResults(
std::vector<com::android::server::wifi::wificond::NativeScanResult>*
out_scan_results) override;
+ // Get the latest pno scan results from the interface that most recently
+ // completed PNO scans
+ ::android::binder::Status getPnoScanResults(
+ std::vector<com::android::server::wifi::wificond::NativeScanResult>*
+ out_scan_results) override;
::android::binder::Status scan(
const ::com::android::server::wifi::wificond::SingleScanSettings&
scan_settings,
bool pno_scan_started_;
bool offload_scan_supported_;
bool pno_scan_running_over_offload_;
+ bool pno_scan_results_from_offload_;
::com::android::server::wifi::wificond::PnoSettings pno_settings_;
const uint32_t wiphy_index_;