# Kconfig.sht3xd - SHT3xD temperature and humidity sensor configuration options

#
# Copyright (c) 2016 Intel Corporation
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

menuconfig SHT3XD
	bool
	prompt "SHT3xD Temperature and Humidity Sensor"
	depends on SENSOR && I2C
	default n
	help
	  Enable driver for SHT3xD temperature and humidity sensors.

config SHT3XD_SYS_LOG_LEVEL
	int "SHT3XD Log level"
	depends on SYS_LOG && SHT3XD
	default 0
	range 0 4
	help
	  Sets log level for SHT3XD driver.
	  Levels are:
	  0 OFF, do not write
	  1 ERROR, only write SYS_LOG_ERR
	  2 WARNING, write SYS_LOG_WRN in addition to previous level
	  3 INFO, write SYS_LOG_INF in addition to previous levels
	  4 DEBUG, write SYS_LOG_DBG in addition to previous levels

config SHT3XD_NAME
	string
	prompt "Driver name"
	default "SHT3XD"
	depends on SHT3XD
	help
	  Device name with which the SHT3xD sensor is identified.

config SHT3XD_INIT_PRIORITY
	int
	prompt "Init priority"
	depends on SHT3XD
	default 70
	help
	  Device driver initialization priority.

choice
	prompt "I2C address"
	depends on SHT3XD
	default SHT3XD_I2C_ADDR_A
	help
	  I2C address of the SHT3xD sensor.

config SHT3XD_I2C_ADDR_A
	bool
	prompt "0x44"
	help
	  Choose this option if the ADDR pin is connected to VSS.

config SHT3XD_I2C_ADDR_B
	bool
	prompt "0x45"
	help
	  Choose this option if the ADDR pin is connected to VDD.

endchoice

config SHT3XD_I2C_MASTER_DEV_NAME
	string
	prompt "I2C master where SHT3xD is connected"
	depends on SHT3XD
	default "I2C_0"
	help
	  Specify the device name of the I2C master device to which the
	  SHT3xD chip is connected.

choice
	prompt "Trigger mode"
	depends on SHT3XD
	default SHT3XD_TRIGGER_NONE
	help
	  Specify the type of triggering to be used by the driver.

config SHT3XD_TRIGGER_NONE
	bool
	prompt "No trigger"

config SHT3XD_TRIGGER_GLOBAL_FIBER
	bool
	prompt "Use global fiber"
	depends on GPIO && SYSTEM_WORKQUEUE
	select SHT3XD_TRIGGER

config SHT3XD_TRIGGER_OWN_FIBER
	bool
	prompt "Use own fiber"
	depends on GPIO
	select SHT3XD_TRIGGER

endchoice

config SHT3XD_TRIGGER
	bool
	depends on SHT3XD

config SHT3XD_GPIO_DEV_NAME
	string
	prompt "GPIO device"
	default "GPIO_0"
	depends on SHT3XD && SHT3XD_TRIGGER
	help
	  The device name of the GPIO device to which the SHT3xD interrupt
	  pins are connected.

config SHT3XD_GPIO_PIN_NUM
	int
	prompt "Interrupt GPIO pin number"
	default 0
	depends on SHT3XD && SHT3XD_TRIGGER
	help
	  The number of the GPIO on which the interrupt signal from the
	  SHT3xD chip will be received.

config SHT3XD_FIBER_PRIORITY
	int
	prompt "Fiber priority"
	depends on SHT3XD && SHT3XD_TRIGGER_OWN_FIBER
	default 10
	help
	  Priority of fiber used by the driver to handle interrupts.

config SHT3XD_FIBER_STACK_SIZE
	int
	prompt "Fiber stack size"
	depends on SHT3XD && SHT3XD_TRIGGER_OWN_FIBER
	default 1024
	help
	  Stack size of fiber used by the driver to handle interrupts.

choice
	prompt "Measurement repeatability"
	depends on SHT3XD
	default SHT3XD_REPEATABILITY_HIGH
	help
	  Repeatability modes differ with respect to measurement duration,
	  noise level and energy consumption.

config SHT3XD_REPEATABILITY_LOW
	bool
	prompt "low"

config SHT3XD_REPEATABILITY_MEDIUM
	bool
	prompt "medium"

config SHT3XD_REPEATABILITY_HIGH
	bool
	prompt "high"

endchoice

choice
	prompt "Measurements per second"
	depends on SHT3XD
	default SHT3XD_MPS_1
	help
	  Number of measurements per second.

config SHT3XD_MPS_05
	bool
	prompt "0.5"

config SHT3XD_MPS_1
	bool
	prompt "1"

config SHT3XD_MPS_2
	bool
	prompt "2"

config SHT3XD_MPS_4
	bool
	prompt "4"

config SHT3XD_MPS_10
	bool
	prompt "10"

endchoice
