# 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_DEV_NAME
	string "BME280 device name"
	depends on BME280
	default "BME280"

config BME280_I2C_ADDR
	hex "BME280 I2C slave address"
	default 0x76
	depends on BME280
	help
	  Specify the I2C slave address for the BME280.

	  0x76: Ground
	  0x77: VCC

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
