forceDumpToDebugRingBuffer(string ringName) generates (WifiStatus status);
/**
+ * API to stop the debug data collection for all ring buffers.
+ *
+ * @return status WifiStatus of the operation.
+ * Possible status codes:
+ * |WifiStatusCode.SUCCESS|,
+ * |WifiStatusCode.ERROR_WIFI_CHIP_INVALID|,
+ * |WifiStatusCode.ERROR_NOT_SUPPORTED|,
+ * |WifiStatusCode.NOT_AVAILABLE|,
+ * |WifiStatusCode.UNKNOWN|
+ */
+ stopLoggingToDebugRingBuffer() generates (WifiStatus status);
+
+ /**
* API to retrieve the wifi wake up reason stats for debugging.
* The driver is expected to start maintaining these stats once the chip
* is configured using |configureChip|. These stats must be reset whenever
* |StaBackgroundScanBucketParameters.eventReportScheme|.
*
* @param cmdId command ID corresponding to the request.
+ * @param bucketsScanned Bitset where each bit indicates if the bucket with
+ * that index (starting at 0) was scanned.
* @parm result Full scan result for an AP.
*/
- oneway onBackgroundFullScanResult(CommandId cmdId, StaScanResult result);
+ oneway onBackgroundFullScanResult(
+ CommandId cmdId, uint32_t bucketsScanned, StaScanResult result);
/**
* Called when the |StaBackgroundScanBucketParameters.eventReportScheme| flags
hidl_scan_params.reportThresholdPercent;
legacy_scan_params->report_threshold_num_scans =
hidl_scan_params.reportThresholdNumScans;
- // TODO(b/33194311): Expose these max limits in the HIDL interface.
if (hidl_scan_params.buckets.size() > MAX_BUCKETS) {
return false;
}
convertHidlGscanReportEventFlagToLegacy(flag);
}
}
- // TODO(b/33194311): Expose these max limits in the HIDL interface.
if (hidl_bucket_spec.frequencies.size() > MAX_CHANNELS) {
return false;
}
ring_name);
}
+Return<void> WifiChip::stopLoggingToDebugRingBuffer(
+ stopLoggingToDebugRingBuffer_cb hidl_status_cb) {
+ return validateAndCall(this,
+ WifiStatusCode::ERROR_WIFI_CHIP_INVALID,
+ &WifiChip::stopLoggingToDebugRingBufferInternal,
+ hidl_status_cb);
+}
+
Return<void> WifiChip::getDebugHostWakeReasonStats(
getDebugHostWakeReasonStats_cb hidl_status_cb) {
return validateAndCall(this,
return createWifiStatusFromLegacyError(legacy_status);
}
+WifiStatus WifiChip::stopLoggingToDebugRingBufferInternal() {
+ legacy_hal::wifi_error legacy_status =
+ legacy_hal_.lock()->deregisterRingBufferCallbackHandler();
+ return createWifiStatusFromLegacyError(legacy_status);
+}
+
std::pair<WifiStatus, WifiDebugHostWakeReasonStats>
WifiChip::getDebugHostWakeReasonStatsInternal() {
legacy_hal::wifi_error legacy_status;
Return<void> forceDumpToDebugRingBuffer(
const hidl_string& ring_name,
forceDumpToDebugRingBuffer_cb hidl_status_cb) override;
+ Return<void> stopLoggingToDebugRingBuffer(
+ stopLoggingToDebugRingBuffer_cb hidl_status_cb) override;
Return<void> getDebugHostWakeReasonStats(
getDebugHostWakeReasonStats_cb hidl_status_cb) override;
Return<void> enableDebugErrorAlerts(
uint32_t max_interval_in_sec,
uint32_t min_data_size_in_bytes);
WifiStatus forceDumpToDebugRingBufferInternal(const hidl_string& ring_name);
+ WifiStatus stopLoggingToDebugRingBufferInternal();
std::pair<WifiStatus, WifiDebugHostWakeReasonStats>
getDebugHostWakeReasonStatsInternal();
WifiStatus enableDebugErrorAlertsInternal(bool enable);
const auto& on_full_result_callback = [weak_ptr_this](
legacy_hal::wifi_request_id id,
const legacy_hal::wifi_scan_result* result,
- uint32_t /* buckets_scanned */) {
+ uint32_t buckets_scanned) {
const auto shared_ptr_this = weak_ptr_this.promote();
if (!shared_ptr_this.get() || !shared_ptr_this->isValid()) {
LOG(ERROR) << "Callback invoked on an invalid object";
return;
}
for (const auto& callback : shared_ptr_this->getEventCallbacks()) {
- if (!callback->onBackgroundFullScanResult(id, hidl_scan_result).isOk()) {
+ if (!callback->onBackgroundFullScanResult(
+ id, buckets_scanned, hidl_scan_result).isOk()) {
LOG(ERROR) << "Failed to invoke onBackgroundFullScanResult callback";
}
}
};
/**
+ * Max limits for background scan.
+ */
+enum StaScanLimits : uint32_t {
+ MAX_CHANNELS = 16,
+ MAX_BUCKETS = 16,
+ MAX_AP_CACHE_PER_SCAN = 32
+};
+
+/**
* Background Scan parameters per bucket that can be specified in background
* scan requests.
*/
/**
* Channel frequencies (in Mhz) to scan if |band| is set to
* |BAND_UNSPECIFIED|.
+ * Max length: |StaScanLimits.MAX_CHANNELS|.
*/
vec<WifiChannelInMhz> frequencies;
/**
/**
* Maximum number of APs that must be stored for each scan. If the maximum
* is reached the highest RSSI results must be returned.
+ * Max length: |StaScanLimits.MAX_AP_CACHE_PER_SCAN|.
*/
uint32_t maxApPerScan;
/**
uint32_t reportThresholdNumScans;
/**
* List of buckets to be scheduled.
+ * Max length: |StaScanLimits.MAX_BUCKETS|.
*/
vec<StaBackgroundScanBucketParameters> buckets;
};
*/
bitfield<StaScanDataFlagMask> flags;
/**
- * Bitset where each bit indicates if the bucket with that index was
- * scanned.
+ * Bitset where each bit indicates if the bucket with that index (starting at
+ * 0) was scanned.
*/
uint32_t bucketsScanned;
/**