# Kconfig.bmp280 - BMP280 temperature and pressure 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 BME280
	bool "BME280/BMP280 sensor"
	depends on SENSOR && I2C
	default n
	help
	 Enable driver for BME280 I2C-based temperature and pressure sensor.

config BME280_SYS_LOG_LEVEL
	int "BME280 Log level"
	depends on SYS_LOG && BME280
	default 0
	range 0 4
	help
	  Sets log level for BMP280 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 BME280_DEV_NAME
	string "BME280 device name"
	depends on BME280
	default "BME280"

config BME280_INIT_PRIORITY
	int
	depends on BME280
	default 70
	prompt "Init priority"
	help
	 Device driver initialization priority.

choice
	prompt "BME280 I2C slave address"
	default BME280_I2C_ADDR_76
	depends on BME280
	help
	  Specify the I2C slave address for the BME280.

config BME280_I2C_ADDR_76
	bool
	prompt "0x76 (GND)"

config BME280_I2C_ADDR_77
	bool
	prompt "0x77 (VCC)"

endchoice

config BME280_I2C_MASTER_DEV_NAME
	string "I2C master where BME280 is connected"
	depends on BME280
	default "I2C_0"
	help
	 Specify the device name of the I2C master device to which BME280 is
	 connected.

menu "Attributes"
	depends on BME280

choice
	prompt "BME280 temperature oversampling"
	depends on BME280
	default BME280_TEMP_OVER_2X
	help
	  Select temperature oversampling for the BME280 sensor.  Higher values
	  lead to more accurate readings, but higher power consumption.
config BME280_TEMP_OVER_1X
	bool "x1"
config BME280_TEMP_OVER_2X
	bool "x2"
config BME280_TEMP_OVER_4X
	bool "x4"
config BME280_TEMP_OVER_8X
	bool "x8"
config BME280_TEMP_OVER_16X
	bool "x16"
endchoice

choice
	prompt "BME280 pressure oversampling"
	depends on BME280
	default BME280_PRESS_OVER_16X
	help
	  Select pressure oversampling for the BME280 sensor.  Higher values
	  lead to more accurate readings, but higher power consumption.
config BME280_PRESS_OVER_1X
	bool "x1"
config BME280_PRESS_OVER_2X
	bool "x2"
config BME280_PRESS_OVER_4X
	bool "x4"
config BME280_PRESS_OVER_8X
	bool "x8"
config BME280_PRESS_OVER_16X
	bool "x16"
endchoice

choice
	prompt "BME280 humidity oversampling"
	depends on BME280
	default BME280_HUMIDITY_OVER_16X
	help
	  Select humidity oversampling for the BME280 sensor.  Higher values
	  lead to more accurate readings, but higher power consumption.
config BME280_HUMIDITY_OVER_1X
	bool "x1"
config BME280_HUMIDITY_OVER_2X
	bool "x2"
config BME280_HUMIDITY_OVER_4X
	bool "x4"
config BME280_HUMIDITY_OVER_8X
	bool "x8"
config BME280_HUMIDITY_OVER_16X
	bool "x16"
endchoice

choice
	prompt "BME280 standby time"
	depends on BME280
	default BME280_STANDBY_1000MS
	help
	  Select standby time between measeurements for the BME280 sensor.
	  Higher values lead to lower power consumption.
config BME280_STANDBY_05MS
	bool "0.5ms"
config BME280_STANDBY_62MS
	bool "62.5ms"
config BME280_STANDBY_125MS
	bool "125ms"
config BME280_STANDBY_250MS
	bool "250ms"
config BME280_STANDBY_500MS
	bool "500ms"
config BME280_STANDBY_1000MS
	bool "1000ms"
config BME280_STANDBY_2000MS
	bool "2000ms BMP280 / 10ms BME280"
config BME280_STANDBY_4000MS
	bool "4000ms BMP280 / 20ms BME280"
endchoice

choice
	prompt "BME280 filter coefficient"
	depends on BME280
	default BME280_FILTER_4
	help
	  Select the filter coefficient for the BME280 sensor.
config BME280_FILTER_OFF
	bool "filter off"
config BME280_FILTER_2
	bool "2"
config BME280_FILTER_4
	bool "4"
config BME280_FILTER_8
	bool "8"
config BME280_FILTER_16
	bool "16"
endchoice

endmenu
