| /* |
| * 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 __MS5837_H__ |
| #define __MS5837_H__ |
| |
| #include "os/mynewt.h" |
| #include "sensor/sensor.h" |
| |
| #define MS5837_I2C_ADDRESS 0x76 |
| #define MS5837_NUMBER_COEFFS 7 |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| struct ms5837_pdd { |
| uint16_t eeprom_coeff[MS5837_NUMBER_COEFFS + 1]; |
| }; |
| |
| struct ms5837_cfg { |
| uint8_t mc_s_temp_res_osr; |
| uint8_t mc_s_press_res_osr; |
| sensor_type_t mc_s_mask; |
| }; |
| |
| struct ms5837 { |
| struct os_dev dev; |
| struct sensor sensor; |
| struct ms5837_cfg cfg; |
| struct ms5837_pdd pdd; |
| os_time_t last_read_time; |
| }; |
| |
| #define MS5837_RES_OSR_256 0x0 |
| #define MS5837_RES_OSR_512 0x2 |
| #define MS5837_RES_OSR_1024 0x4 |
| #define MS5837_RES_OSR_2048 0x6 |
| #define MS5837_RES_OSR_4096 0x8 |
| #define MS5837_RES_OSR_8192 0xA |
| |
| /** |
| * Initialize the ms5837. |
| * |
| * @param dev Pointer to the ms5837_dev device descriptor |
| * |
| * @return 0 on success, and non-zero error code on failure |
| */ |
| int |
| ms5837_init(struct os_dev *dev, void *arg); |
| |
| /** |
| * Reads the temperature ADC value |
| * |
| * @param the sensor interface |
| * @param raw adc temperature value |
| * @param resolution osr |
| * |
| * @return 0 on success, non-zero on failure |
| */ |
| int |
| ms5837_get_rawtemp(struct sensor_itf *itf, uint32_t *rawtemp, |
| uint8_t res_osr); |
| |
| /** |
| * Reads the pressure ADC value |
| * |
| * @param the sensor interface |
| * @param raw adc pressure value |
| * @param resolution osr |
| * |
| * @return 0 on success, non-zero on failure |
| */ |
| int |
| ms5837_get_rawpress(struct sensor_itf *itf, uint32_t *rawpress, |
| uint8_t res_osr); |
| |
| /** |
| * Resets the MS5837 chip |
| * |
| * @param The sensor interface |
| * @return 0 on success, non-zero on failure |
| */ |
| int |
| ms5837_reset(struct sensor_itf *itf); |
| |
| /** |
| * Configure MS5837 sensor |
| * |
| * @param Sensor device MS5837 structure |
| * @param Sensor device MS5837 config |
| * |
| * @return 0 on success, and non-zero error code on failure |
| */ |
| int |
| ms5837_config(struct ms5837 *ms5837, struct ms5837_cfg *cfg); |
| |
| /** |
| * crc4 check for MS5837 EEPROM |
| * |
| * @param buffer containing EEPROM coefficients |
| * @param crc to compare with |
| * |
| * return 0 on success (CRC is OK), non-zero on failure |
| */ |
| int |
| ms5837_crc_check(uint16_t *prom, uint8_t crc); |
| |
| /** |
| * Reads the ms5837 EEPROM coefficients for computation and |
| * does a CRC check on them |
| * |
| * @param the sensor interface |
| * @param buffer to fill up the coefficients |
| * |
| * @return 0 on success, non-zero on failure |
| */ |
| int |
| ms5837_read_eeprom(struct sensor_itf *itf, uint16_t *coeff); |
| |
| /** |
| * Compensate for pressure using coefficients from the EEPROM |
| * |
| * @param ptr to coefficients |
| * @param first order compensated temperature |
| * @param raw pressure |
| * @param deltat temperature |
| * |
| * @return second order temperature compensated pressure |
| */ |
| float |
| ms5837_compensate_pressure(uint16_t *coeffs, int32_t temp, |
| uint32_t rawpress, int32_t deltat); |
| |
| /** |
| * Compensate for temperature using coefficients from the EEPROM |
| * |
| * @param ptr to coefficients |
| * @param compensated temperature |
| * @param raw temperature |
| * @param optional ptr to fill up first order compensated temperature |
| * @param optional ptr to fill up delta temperature |
| * |
| * @return second order temperature compensated temperature |
| */ |
| float |
| ms5837_compensate_temperature(uint16_t *coeffs, uint32_t rawtemp, |
| int32_t *comptemp, int32_t *deltat); |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif /* __MS5837_H__ */ |