diff options
Diffstat (limited to 'peripheral/libupm/src/hp20x/hp20x.h')
-rw-r--r-- | peripheral/libupm/src/hp20x/hp20x.h | 385 |
1 files changed, 0 insertions, 385 deletions
diff --git a/peripheral/libupm/src/hp20x/hp20x.h b/peripheral/libupm/src/hp20x/hp20x.h deleted file mode 100644 index 9831341..0000000 --- a/peripheral/libupm/src/hp20x/hp20x.h +++ /dev/null @@ -1,385 +0,0 @@ -/* - * Author: Jon Trulson <jtrulson@ics.com> - * Copyright (c) 2015 Intel Corporation. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE - * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ -#pragma once - -#include <string> -#include <mraa/common.hpp> -#include <mraa/i2c.hpp> - -#define HP20X_I2C_BUS 0 -#define HP20X_DEFAULT_I2C_ADDR 0x76 - -namespace upm { - - /** - * @brief HP20X I2C Barometer (High-Accuracy) library - * @defgroup hp20x libupm-hp20x - * @ingroup seeed i2c pressure - */ - - /** - * @library hp20x - * @sensor hp20x - * @comname Grove Barometer (High-Accuracy) - * @altname HP20X Barometer (High-Accuracy) - * @type pressure - * @man seeed - * @web http://www.seeedstudio.com/depot/Grove-Barometer-HighAccuracy-p-1865.html - * @con i2c - * - * @brief API for the HP20X-based Grove Barometer (High-Accuracy) - * - * This is a high-accuracy barometer providing pressure, altitude, - * and temperature data. It can be calibrated for a given altitude - * offset, and a wide range of interrupt generating capabilities are - * supported. As usual, see the HP20X datasheet for more details. - * - * This module was developed using a Grove Barometer (High-Accuracy) - * based on an HP206C chip. - * - * @image html hp20x.jpg - * @snippet hp20x.cxx Interesting - */ - class HP20X { - public: - - /** - * HP20X commands - */ - typedef enum { - CMD_SOFT_RST = 0x06, - - CMD_ADC_CVT = 0x40, // mask - ANDed with DSR and CHNL bits - - CMD_READ_PT = 0x10, // read pressure/temp - CMD_READ_AT = 0x11, // read alt/temp - - CMD_READ_P = 0x30, // read pressure only - CMD_READ_A = 0x31, // read alt only - CMD_READ_T = 0x32, // read temp only - - CMD_ANA_CAL = 0x28, // recalibrate internal analog blocks - - CMD_READ_REG = 0x80, // mask - ANDed with reg addr - CMD_WRITE_REG = 0xc0 // mask - ANDed with reg addr - } HP20X_CMD_T; - - /** - * CHNL bits - */ - typedef enum { - CHNL_PT = 0x00, // pressure and temperature - CHNL_T = 0x02, // temperature - - CHNL_SHIFT = 0 // don't use, indicates position in REG - } CHNL_BITS_T; - - /** - * DSR bits - */ - typedef enum { - DSR_4096 = 0x00, // decimation rate of digital filter - DSR_2048 = 0x01, - DSR_1024 = 0x02, - DSR_512 = 0x03, - DSR_256 = 0x04, - DSR_128 = 0x05, - - DSR_SHIFT = 2 // don't use, indicates position in REG - } DSR_BITS_T; - - - /** - * HP20X registers - */ - typedef enum { - REG_ALT_OFF_LSB = 0x00, - REG_ALT_OFF_MSB = 0x01, - - REG_PA_H_TH_LSB = 0x02, // Pres/Alt high threshold - REG_PA_H_TH_MSB = 0x03, - - REG_PA_M_TH_LSB = 0x04, // Pres/Alt medium threshold - REG_PA_M_TH_MSB = 0x05, - - REG_PA_L_TH_LSB = 0x06, // Pres/Alt low threshold - REG_PA_L_TH_MSB = 0x07, - - REG_T_H_TH = 0x08, // temperature high threshold - REG_T_M_TH = 0x09, - REG_T_L_TH = 0x0a, - - REG_INT_EN = 0x0b, // interrupt enables - REG_INT_CFG = 0x0c, // interrupt configuration - REG_INT_SRC = 0x0d, // interrupt sources - - REG_PARA = 0x0e // parameters config - } HP20X_REG_T; - - /** - * INT_EN bits - */ - typedef enum { - INT_EN_T_WIN_EN = 0x01, - INT_EN_PA_WIN_EN = 0x02, - - INT_EN_T_TRAV_EN = 0x04, - INT_EN_PA_TRAV_EN = 0x08, - - INT_EN_T_RDY_EN = 0x10, - INT_EN_PA_RDY_EN = 0x20 - // 0x40, 0x80 reserved - } INT_EN_BITS_T; - - /** - * INT_CFG bits - */ - typedef enum { - INT_CFG_T_WIN_CFG = 0x01, - INT_CFG_PA_WIN_CFG = 0x02, - - INT_CFG_T_TRAV_CFG = 0x04, - INT_CFG_PA_TRAV_CFG = 0x08, - - INT_CFG_T_RDY_CFG = 0x10, - INT_CFG_PA_RDY_CFG = 0x20, - - INT_CFG_PA_MODE = 0x40 - // 0x80 reserved - } INT_CFG_BITS_T; - - /** - * INT_SRC bits - */ - typedef enum { - INT_SRC_T_WIN = 0x01, - INT_SRC_PA_WIN = 0x02, - - INT_SRC_T_TRAV = 0x04, - INT_SRC_PA_TRAV = 0x08, - - INT_SRC_T_RDY = 0x10, - INT_SRC_PA_RDY = 0x20, - - INT_SRC_DEV_RDY = 0x40, // device is ready - - INT_SRC_TH_ERR = 0x80 // threshold error - } INT_SRC_BITS_T; - - /** - * PARA bits - */ - typedef enum { - // 0x01-0x40 reserved - PARA_CMPS_EN = 0x80 // compensation enable - } PARA_BITS_T; - - /** - * HP20X constructor - * - * @param bus I2C bus to use - * @param address Address for this device - */ - HP20X(int bus=HP20X_I2C_BUS, uint8_t address=HP20X_DEFAULT_I2C_ADDR); - - /** - * HP20X destructor - */ - ~HP20X(); - - /** - * Sets up initial values and starts operation - * - * @param dsr Data sampling rate; one of the DSR_BITS_T values - * @return True if successful - */ - bool init(DSR_BITS_T dsr=DSR_4096); - - /** - * Sends a command to the device - * - * @param cmd Command to send; usually, one of the HP20X_CMD_T values - * @return True if successful - */ - bool writeCmd(uint8_t cmd); - - /** - * Writes a value to a register - * - * @param reg Register to write to; one of the HP20X_REG_T values - * @param data Value to write - * @return True if successful - */ - bool writeReg(HP20X_REG_T reg, uint8_t data); - - /** - * Reads a register and returns its value - * - * @param reg Register to read; one of the HP20X_REG_T values - * @return Value of a specified register - */ - uint8_t readReg(HP20X_REG_T reg); - - /** - * Reads 3 bytes of data in response to a conversion request, and - * converts it to an integer - * - * @return Value read back (temperature, pressure, etc.) - */ - int readData(); - - /** - * Checks to see if the DR_RDY bit is set, indicating the device - * can accept commands - * - * @return True if the device is ready, false otherwise - */ - bool isReady(); - - /** - * Checks to see if the device is ready, and sleeps/retries if not. - * Returns once the device indicates it's ready. - * - * @return True if the device is ready; false if retries are exhausted - */ - bool waitforDeviceReady(); - - /** - * Returns the temperature in Celsius - * - * @return Temperature - */ - float getTemperature(); - - /** - * Returns the pressure in millibars - * - * @return Pressure - */ - float getPressure(); - - /** - * Returns the computed altitude in meters - * - * @return Altitude - */ - float getAltitude(); - - /** - * Enables or disables the on-chip compensator. This allows the - * chip to filter and clean up the output data. - * - * @param enable True to enable, false otherwise - */ - void compensationEnable(bool enable); - - /** - * Sets up the interrupt enable register. This register defines - * which events can cause a hardware interrupt pin to be pulled high - * (active). - * - * @param bits One or more of the INT_EN_BITS_T bits - * @return True if successful, false otherwise - */ - bool setInterruptEnable(uint8_t bits); - - /** - * Sets up the interrupt configuration register. This register - * defines which events can cause an interrupt to be indicated. - * - * @param bits One or more of the INT_EN_BITS_T bits - * @return True if successful, false otherwise - */ - bool setInterruptConfig(uint8_t bits); - - /** - * Gets the interrupt source register. This register indicates - * which interrupts have been triggered. In addition, it - * indicates when certain operations have been completed. - * - * @return One of more of the INT_SRC_BITS_T values - */ - uint8_t getInterruptSource(); - - /** - * Sets the data sampling rate. Higher rates are more precise, but - * take more time per measurement. - * - * @param dsr One of the DSR_BITS_T values - */ - void setDSR(DSR_BITS_T dsr); - - - /** - * Starts an internal recalibration of analog blocks. This is - * faster than a soft reset. - */ - void recalibrateInternal(); - - /** - * Executes a soft reset. All register values are reset to power-on - * defaults. This function returns when the reset is - * complete and the device reports it is ready. - */ - void softReset(); - - /** - * Sets the altitude offset for your region. See the datasheet for - * more details. Setting this correctly for your region is - * required for accurate altitude data. - * - * @param off Offset - */ - void setAltitudeOffset(int16_t off); - - /** - * Sets pressure/altitude thresholds for interrupt generation - * - * @param low Low threshold to generate an interrupt - * @param med Medium threshold to generate an interrupt - * @param high High threshold to generate an interrupt - */ - void setPAThreshholds(int16_t low, int16_t med, int16_t high); - - /** - * Sets temperature thresholds for interrupt generation - * - * @param low Low threshold to generate an interrupt - * @param med Medium threshold to generate an interrupt - * @param high High threshold to generate an interrupt - */ - void setTemperatureThreshholds(int8_t low, int8_t med, int8_t high); - - - protected: - mraa::I2c m_i2c; - - private: - uint8_t m_addr; - uint8_t m_dsr; - - }; -} - - |