| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you 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. |
| */ |
| |
| |
| #ifndef __bmp280_H__ |
| #define __bmp280_H__ |
| |
| #include "os/mynewt.h" |
| #include "sensor/sensor.h" |
| |
| #define BMP280_SPI_READ_CMD_BIT 0x80 |
| |
| /* Sampling */ |
| #define BMP280_SAMPLING_NONE 0x0 |
| #define BMP280_SAMPLING_X1 0x1 |
| #define BMP280_SAMPLING_X2 0x2 |
| #define BMP280_SAMPLING_X4 0x3 |
| #define BMP280_SAMPLING_X8 0x4 |
| #define BMP280_SAMPLING_X16 0x5 |
| |
| /* Operating modes */ |
| #define BMP280_MODE_SLEEP 0x0 |
| #define BMP280_MODE_FORCED 0x1 |
| #define BMP280_MODE_NORMAL 0x3 |
| |
| /* Filter settings */ |
| #define BMP280_FILTER_OFF 0x0 |
| #define BMP280_FILTER_X2 0x1 |
| #define BMP280_FILTER_X4 0x2 |
| #define BMP280_FILTER_X8 0x3 |
| #define BMP280_FILTER_X16 0x4 |
| |
| /* Standby durations in ms */ |
| #define BMP280_STANDBY_MS_0_5 0x0 |
| #define BMP280_STANDBY_MS_10 0x6 |
| #define BMP280_STANDBY_MS_20 0x7 |
| #define BMP280_STANDBY_MS_62_5 0x1 |
| #define BMP280_STANDBY_MS_125 0x2 |
| #define BMP280_STANDBY_MS_250 0x3 |
| #define BMP280_STANDBY_MS_500 0x4 |
| #define BMP280_STANDBY_MS_1000 0x5 |
| |
| #define BMP280_DFLT_I2C_ADDR 0x77 |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| struct bmp280_calib_data { |
| uint16_t bcd_dig_T1; |
| int16_t bcd_dig_T2; |
| int16_t bcd_dig_T3; |
| |
| uint16_t bcd_dig_P1; |
| int16_t bcd_dig_P2; |
| int16_t bcd_dig_P3; |
| int16_t bcd_dig_P4; |
| int16_t bcd_dig_P5; |
| int16_t bcd_dig_P6; |
| int16_t bcd_dig_P7; |
| int16_t bcd_dig_P8; |
| int16_t bcd_dig_P9; |
| }; |
| |
| struct bmp280_over_cfg { |
| sensor_type_t boc_type; |
| uint8_t boc_oversample; |
| }; |
| |
| struct bmp280_cfg { |
| uint8_t bc_iir; |
| struct bmp280_over_cfg bc_boc[2]; |
| uint8_t bc_mode; |
| uint8_t bc_sby_dur; |
| sensor_type_t bc_s_mask; |
| }; |
| |
| struct bmp280_pdd { |
| struct bmp280_calib_data bcd; |
| int32_t t_fine; |
| }; |
| |
| struct bmp280 { |
| struct os_dev dev; |
| struct sensor sensor; |
| struct bmp280_cfg cfg; |
| struct bmp280_pdd pdd; |
| os_time_t last_read_time; |
| }; |
| |
| /** |
| * Initialize the bmp280. |
| * |
| * @param dev Pointer to the bmp280_dev device descriptor |
| * |
| * @return 0 on success, and non-zero error code on failure |
| */ |
| int bmp280_init(struct os_dev *dev, void *arg); |
| |
| /** |
| * Sets IIR filter |
| * |
| * @param The sensor interface |
| * @param filter setting |
| * |
| * @return 0 on success, and non-zero error code on failure |
| */ |
| int bmp280_set_iir(struct sensor_itf *itf, uint8_t iir); |
| |
| /** |
| * Get IIR filter setting |
| * |
| * @param The sensor interface |
| * @param ptr to fill up iir setting into |
| * |
| * @return 0 on success, and non-zero error code on failure |
| */ |
| int bmp280_get_iir(struct sensor_itf *itf, uint8_t *iir); |
| |
| /** |
| * Gets temperature |
| * |
| * @param The sensor interface |
| * @param temperature |
| * |
| * @return 0 on success, and non-zero error code on failure |
| */ |
| int bmp280_get_temperature(struct sensor_itf *itf, int32_t *temp); |
| |
| /** |
| * Gets pressure |
| * |
| * @param The sensor interface |
| * @param pressure |
| * |
| * @return 0 on success, and non-zero error code on failure |
| */ |
| int bmp280_get_pressure(struct sensor_itf *itf, int32_t *press); |
| |
| /** |
| * Sets the sampling rate |
| * |
| * @param The sensor interface |
| * @param sensor type |
| * @param sampling rate |
| * |
| * @return 0 on success, and non-zero error code on failure |
| */ |
| int bmp280_set_oversample(struct sensor_itf *itf, sensor_type_t type, |
| uint8_t rate); |
| |
| /** |
| * Gets the current sampling rate for the type of sensor |
| * |
| * @param The sensor interface |
| * @param Type of sensor to return sampling rate |
| * |
| * @return 0 on success, non-zero on failure |
| */ |
| int bmp280_get_oversample(struct sensor_itf *itf, sensor_type_t type, |
| uint8_t *rate); |
| |
| /** |
| * Sets the operating mode |
| * |
| * @param The sensor interface |
| * @param mode |
| * |
| * @return 0 on success, and non-zero error code on failure |
| */ |
| int bmp280_set_mode(struct sensor_itf *itf, uint8_t mode); |
| |
| /** |
| * Gets the operating mode |
| * |
| * @param The sensor interface |
| * @param ptr to the mode variable to be filled up |
| * |
| * @return 0 on success, and non-zero error code on failure |
| */ |
| int bmp280_get_mode(struct sensor_itf *itf, uint8_t *mode); |
| |
| /** |
| * Resets the bmp280 chip |
| * |
| * @param The sensor interface |
| * @return 0 on success, non-zero on failure |
| */ |
| int |
| bmp280_reset(struct sensor_itf *itf); |
| |
| /** |
| * Configure bmp280 sensor |
| * |
| * @param Sensor device bmp280 structure |
| * @param Sensor device bmp280 config |
| * |
| * @return 0 on success, and non-zero error code on failure |
| */ |
| int bmp280_config(struct bmp280 *bmp280, struct bmp280_cfg *cfg); |
| |
| /** |
| * Get the chip id |
| * |
| * @param The sensor interface |
| * @param ptr to fill up the chip id |
| * |
| * @return 0 on success, and non-zero error code on failure |
| */ |
| int |
| bmp280_get_chipid(struct sensor_itf *itf, uint8_t *chipid); |
| |
| /** |
| * Set the standy duration setting |
| * |
| * @param The sensor interface |
| * @param duration |
| * @return 0 on success, non-zero on failure |
| */ |
| int |
| bmp280_set_sby_duration(struct sensor_itf *itf, uint8_t dur); |
| |
| /** |
| * Get the standy duration setting |
| * |
| * @param The sensor interface |
| * @param ptr to duration |
| * @return 0 on success, non-zero on failure |
| */ |
| int |
| bmp280_get_sby_duration(struct sensor_itf *itf, uint8_t *dur); |
| |
| /** |
| * Take forced measurement |
| * |
| * @param The sensor interface |
| * @return 0 on success, non-zero on failure |
| */ |
| int |
| bmp280_forced_mode_measurement(struct sensor_itf *itf); |
| |
| #if MYNEWT_VAL(BMP280_CLI) |
| int bmp280_shell_init(void); |
| #endif |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif /* __bmp280_H__ */ |