blob: f1763703f1e349dda8b85eb6b3d15268c52dd8a8 [file] [log] [blame]
/*
* 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__ */