Linux Audio
Check our new training course
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161
/* * Copyright (c) 2016, 2017 Intel Corporation * Copyright (c) 2017 IpTronix S.r.l. * Copyright (c) 2021 Nordic Semiconductor ASA * * SPDX-License-Identifier: Apache-2.0 */ #ifndef ZEPHYR_DRIVERS_SENSOR_BME280_BME280_H_ #define ZEPHYR_DRIVERS_SENSOR_BME280_BME280_H_ #include <zephyr/types.h> #include <zephyr/device.h> #include <zephyr/devicetree.h> #include <zephyr/drivers/spi.h> #include <zephyr/drivers/i2c.h> #define DT_DRV_COMPAT bosch_bme280 #define BME280_BUS_SPI DT_ANY_INST_ON_BUS_STATUS_OKAY(spi) #define BME280_BUS_I2C DT_ANY_INST_ON_BUS_STATUS_OKAY(i2c) union bme280_bus { #if BME280_BUS_SPI struct spi_dt_spec spi; #endif #if BME280_BUS_I2C struct i2c_dt_spec i2c; #endif }; typedef int (*bme280_bus_check_fn)(const union bme280_bus *bus); typedef int (*bme280_reg_read_fn)(const union bme280_bus *bus, uint8_t start, uint8_t *buf, int size); typedef int (*bme280_reg_write_fn)(const union bme280_bus *bus, uint8_t reg, uint8_t val); struct bme280_bus_io { bme280_bus_check_fn check; bme280_reg_read_fn read; bme280_reg_write_fn write; }; #if BME280_BUS_SPI #define BME280_SPI_OPERATION (SPI_WORD_SET(8) | SPI_TRANSFER_MSB | \ SPI_MODE_CPOL | SPI_MODE_CPHA) extern const struct bme280_bus_io bme280_bus_io_spi; #endif #if BME280_BUS_I2C extern const struct bme280_bus_io bme280_bus_io_i2c; #endif #define BME280_REG_PRESS_MSB 0xF7 #define BME280_REG_COMP_START 0x88 #define BME280_REG_HUM_COMP_PART1 0xA1 #define BME280_REG_HUM_COMP_PART2 0xE1 #define BME280_REG_ID 0xD0 #define BME280_REG_CONFIG 0xF5 #define BME280_REG_CTRL_MEAS 0xF4 #define BME280_REG_CTRL_HUM 0xF2 #define BME280_REG_STATUS 0xF3 #define BME280_REG_RESET 0xE0 #define BMP280_CHIP_ID_SAMPLE_1 0x56 #define BMP280_CHIP_ID_SAMPLE_2 0x57 #define BMP280_CHIP_ID_MP 0x58 #define BME280_CHIP_ID 0x60 #define BME280_MODE_SLEEP 0x00 #define BME280_MODE_FORCED 0x01 #define BME280_MODE_NORMAL 0x03 #define BME280_SPI_3W_DISABLE 0x00 #define BME280_CMD_SOFT_RESET 0xB6 #define BME280_STATUS_MEASURING 0x08 #define BME280_STATUS_IM_UPDATE 0x01 #if defined CONFIG_BME280_MODE_NORMAL #define BME280_MODE BME280_MODE_NORMAL #elif defined CONFIG_BME280_MODE_FORCED #define BME280_MODE BME280_MODE_FORCED #endif #if defined CONFIG_BME280_TEMP_OVER_1X #define BME280_TEMP_OVER (1 << 5) #elif defined CONFIG_BME280_TEMP_OVER_2X #define BME280_TEMP_OVER (2 << 5) #elif defined CONFIG_BME280_TEMP_OVER_4X #define BME280_TEMP_OVER (3 << 5) #elif defined CONFIG_BME280_TEMP_OVER_8X #define BME280_TEMP_OVER (4 << 5) #elif defined CONFIG_BME280_TEMP_OVER_16X #define BME280_TEMP_OVER (5 << 5) #endif #if defined CONFIG_BME280_PRESS_OVER_1X #define BME280_PRESS_OVER (1 << 2) #elif defined CONFIG_BME280_PRESS_OVER_2X #define BME280_PRESS_OVER (2 << 2) #elif defined CONFIG_BME280_PRESS_OVER_4X #define BME280_PRESS_OVER (3 << 2) #elif defined CONFIG_BME280_PRESS_OVER_8X #define BME280_PRESS_OVER (4 << 2) #elif defined CONFIG_BME280_PRESS_OVER_16X #define BME280_PRESS_OVER (5 << 2) #endif #if defined CONFIG_BME280_HUMIDITY_OVER_1X #define BME280_HUMIDITY_OVER 1 #elif defined CONFIG_BME280_HUMIDITY_OVER_2X #define BME280_HUMIDITY_OVER 2 #elif defined CONFIG_BME280_HUMIDITY_OVER_4X #define BME280_HUMIDITY_OVER 3 #elif defined CONFIG_BME280_HUMIDITY_OVER_8X #define BME280_HUMIDITY_OVER 4 #elif defined CONFIG_BME280_HUMIDITY_OVER_16X #define BME280_HUMIDITY_OVER 5 #endif #if defined CONFIG_BME280_STANDBY_05MS #define BME280_STANDBY 0 #elif defined CONFIG_BME280_STANDBY_62MS #define BME280_STANDBY (1 << 5) #elif defined CONFIG_BME280_STANDBY_125MS #define BME280_STANDBY (2 << 5) #elif defined CONFIG_BME280_STANDBY_250MS #define BME280_STANDBY (3 << 5) #elif defined CONFIG_BME280_STANDBY_500MS #define BME280_STANDBY (4 << 5) #elif defined CONFIG_BME280_STANDBY_1000MS #define BME280_STANDBY (5 << 5) #elif defined CONFIG_BME280_STANDBY_2000MS #define BME280_STANDBY (6 << 5) #elif defined CONFIG_BME280_STANDBY_4000MS #define BME280_STANDBY (7 << 5) #endif #if defined CONFIG_BME280_FILTER_OFF #define BME280_FILTER 0 #elif defined CONFIG_BME280_FILTER_2 #define BME280_FILTER (1 << 2) #elif defined CONFIG_BME280_FILTER_4 #define BME280_FILTER (2 << 2) #elif defined CONFIG_BME280_FILTER_8 #define BME280_FILTER (3 << 2) #elif defined CONFIG_BME280_FILTER_16 #define BME280_FILTER (4 << 2) #endif #define BME280_CTRL_MEAS_VAL (BME280_PRESS_OVER | \ BME280_TEMP_OVER | \ BME280_MODE) #define BME280_CONFIG_VAL (BME280_STANDBY | \ BME280_FILTER | \ BME280_SPI_3W_DISABLE) #define BME280_CTRL_MEAS_OFF_VAL (BME280_PRESS_OVER | \ BME280_TEMP_OVER | \ BME280_MODE_SLEEP) #endif /* ZEPHYR_DRIVERS_SENSOR_BME280_BME280_H_ */