# Copyright (c) 2023 Nordic Semiconductor ASA
# SPDX-License-Identifier: Apache-2.0

config WIFI_MGMT_RAW_SCAN_RESULTS
	bool "Raw scan results"
	help
	  This option enables raw scan results. When enabled, the raw scan
	  results (beacons or probe responses) are provided to the application.
	  Enabling this config will increase the net_mgmt event size
	  considerably.

if WIFI_MGMT_RAW_SCAN_RESULTS

config WIFI_MGMT_RAW_SCAN_RESULT_LENGTH
	int "Maximum length of raw scan results"
	default 512
	help
	  This option defines the maximum length of raw scan results.

config WIFI_MGMT_RAW_SCAN_RESULTS_ONLY
	bool "Only raw scan results"
	help
	  This option enables only raw scan results. When enabled, the raw scan
	  results (beacons or probe responses) are provided to the application.
	  The scan results are not parsed and the application is responsible
	  for parsing the scan results. Normal scan results are not provided
	  to the application.

endif # WIFI_MGMT_RAW_SCAN_RESULTS
