# Sensor configuration options

# Copyright (c) 2016 Intel Corporation
# Copyright (c) 2024 Croxel Inc
# SPDX-License-Identifier: Apache-2.0

menuconfig SENSOR
	bool "Sensor drivers"
	help
	  Include sensor drivers in system config

if SENSOR

module = SENSOR
module-str = sensor
source "subsys/logging/Kconfig.template.log_config"

config SENSOR_INIT_PRIORITY
	int "Sensor init priority"
	default 90
	help
	  Sensor initialization priority.

config SENSOR_ASYNC_API
	bool "Async Sensor API"
	select RTIO
	select RTIO_SYS_MEM_BLOCKS
	select RTIO_CONSUME_SEM
	select RTIO_WORKQ
	help
	  Enables the asynchronous sensor API by leveraging the RTIO subsystem.

config SENSOR_SHELL
	bool "Sensor shell"
	depends on SHELL
	select CBPRINTF_FP_SUPPORT
	select SENSOR_ASYNC_API
	help
	  This shell provides access to basic sensor data.

config SENSOR_SHELL_STREAM
	bool "Sensor shell 'stream' command"
	depends on SENSOR_SHELL
	help
	  Add the 'stream' subcommand to the sensor shell. When run on drivers that
	  support streaming (usually hardware FIFO backed), the shell will continue
	  to print new values as they come until the stream is closed.

config SENSOR_SHELL_THREAD_STACK_SIZE
	int "Stack size for the sensor shell data processing thread"
	depends on SENSOR_SHELL_STREAM
	default 1024
	help
	  The sensor shell uses a dedicated thread to process data coming from the
	  sensors in either one-shot or streaming mode. Use this config to control
	  the size of that thread's stack.

config SENSOR_SHELL_BATTERY
	bool "Sensor shell 'battery' command"
	depends on SHELL
	help
	  This enables the 'battery' command which reports charging information
	  in a convenient format. It makes use of a fuel gauge to read its
	  information.

config SENSOR_SHELL_TRIG_PRINT_TIMEOUT_MS
	int "Timeout for printing the average sensor sample value"
	default 5000
	depends on SENSOR_SHELL
	help
	  Control the frequency of the sampling window over which the sensor
	  interrupt handler will collect data.

config SENSOR_SHELL_MAX_TRIGGER_DEVICES
	int "Maximum number of sensor devices that can have enabled triggers in shell"
	default 1
	depends on SENSOR_SHELL
	help
	  Maximum number of sensor devices that the shell cmd can have
	  enabled triggers for.

config SENSOR_INFO
	bool "Sensor Info iterable section"

comment "Device Drivers"

# zephyr-keep-sorted-start
source "drivers/sensor/adi/Kconfig"
source "drivers/sensor/ams/Kconfig"
source "drivers/sensor/aosong/Kconfig"
source "drivers/sensor/asahi_kasei/Kconfig"
source "drivers/sensor/bosch/Kconfig"
source "drivers/sensor/espressif/Kconfig"
source "drivers/sensor/honeywell/Kconfig"
source "drivers/sensor/infineon/Kconfig"
source "drivers/sensor/ite/Kconfig"
source "drivers/sensor/jedec/Kconfig"
source "drivers/sensor/maxim/Kconfig"
source "drivers/sensor/meas/Kconfig"
source "drivers/sensor/memsic/Kconfig"
source "drivers/sensor/microchip/Kconfig"
source "drivers/sensor/nordic/Kconfig"
source "drivers/sensor/nuvoton/Kconfig"
source "drivers/sensor/nxp/Kconfig"
source "drivers/sensor/renesas/Kconfig"
source "drivers/sensor/rohm/Kconfig"
source "drivers/sensor/seeed/Kconfig"
source "drivers/sensor/sensirion/Kconfig"
source "drivers/sensor/silabs/Kconfig"
source "drivers/sensor/st/Kconfig"
source "drivers/sensor/tdk/Kconfig"
source "drivers/sensor/ti/Kconfig"
source "drivers/sensor/vishay/Kconfig"
source "drivers/sensor/wsen/Kconfig"
# zephyr-keep-sorted-stop

source "drivers/sensor/a01nyub/Kconfig"
source "drivers/sensor/amd_sb_tsi/Kconfig"
source "drivers/sensor/amg88xx/Kconfig"
source "drivers/sensor/apds9253/Kconfig"
source "drivers/sensor/apds9960/Kconfig"
source "drivers/sensor/apds9306/Kconfig"
source "drivers/sensor/current_amp/Kconfig"
source "drivers/sensor/ens160/Kconfig"
source "drivers/sensor/explorir_m/Kconfig"
source "drivers/sensor/f75303/Kconfig"
source "drivers/sensor/fcx_mldx5/Kconfig"
source "drivers/sensor/grow_r502a/Kconfig"
source "drivers/sensor/hc_sr04/Kconfig"
source "drivers/sensor/hp206c/Kconfig"
source "drivers/sensor/ist8310/Kconfig"
source "drivers/sensor/lm35/Kconfig"
source "drivers/sensor/lm75/Kconfig"
source "drivers/sensor/lm77/Kconfig"
source "drivers/sensor/ltrf216a/Kconfig"
source "drivers/sensor/mhz19b/Kconfig"
source "drivers/sensor/nct75/Kconfig"
source "drivers/sensor/ntc_thermistor/Kconfig"
source "drivers/sensor/pms7003/Kconfig"
source "drivers/sensor/qdec_sam/Kconfig"
source "drivers/sensor/rpi_pico_temp/Kconfig"
source "drivers/sensor/s11059/Kconfig"
source "drivers/sensor/sbs_gauge/Kconfig"
source "drivers/sensor/sx9500/Kconfig"
source "drivers/sensor/th02/Kconfig"
source "drivers/sensor/tsic_xx6/Kconfig"
source "drivers/sensor/veaa_x_3/Kconfig"
source "drivers/sensor/voltage_divider/Kconfig"
source "drivers/sensor/ene_tach_kb1200/Kconfig"

endif # SENSOR
