MAX32620HSP (MAXREFDES100) RPC Example for Graphical User Interface

Dependencies:   USBDevice

Fork of HSP_Release by Jerry Bradshaw

This is an example program for the MAX32620HSP (MAXREFDES100 Health Sensor Platform). It demonstrates all the features of the platform and works with a companion graphical user interface (GUI) to help evaluate/configure/monitor the board. Go to the MAXREFDES100 product page and click on "design resources" to download the companion software. The GUI connects to the board through an RPC interface on a virtual serial port over the USB interface.

The RPC interface provides access to all the features of the board and is available to interface with other development environments such Matlab. This firmware provides realtime data streaming through the RPC interface over USB, and also provides the ability to log the data to flash for untethered battery operation. The data logging settings are configured through the GUI, and the GUI also provides the interface to download logged data.

Details on the RPC interface can be found here: HSP RPC Interface Documentation

Windows

With this program loaded, the MAX32620HSP will appear on your computer as a serial port. On Mac and Linux, this will happen by default. For Windows, you need to install a driver: HSP serial port windows driver

For more details about this platform and how to use it, see the MAXREFDES100 product page.

Committer:
jbradshaw
Date:
Tue Oct 25 15:22:11 2016 +0000
Revision:
0:e4a10ed6eb92
Child:
1:9490836294ea
tewt

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jbradshaw 0:e4a10ed6eb92 1 /*******************************************************************************
jbradshaw 0:e4a10ed6eb92 2 * Copyright (C) 2015 Maxim Integrated Products, Inc., All Rights Reserved.
jbradshaw 0:e4a10ed6eb92 3 *
jbradshaw 0:e4a10ed6eb92 4 * Permission is hereby granted, free of charge, to any person obtaining a
jbradshaw 0:e4a10ed6eb92 5 * copy of this software and associated documentation files (the "Software"),
jbradshaw 0:e4a10ed6eb92 6 * to deal in the Software without restriction, including without limitation
jbradshaw 0:e4a10ed6eb92 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
jbradshaw 0:e4a10ed6eb92 8 * and/or sell copies of the Software, and to permit persons to whom the
jbradshaw 0:e4a10ed6eb92 9 * Software is furnished to do so, subject to the following conditions:
jbradshaw 0:e4a10ed6eb92 10 *
jbradshaw 0:e4a10ed6eb92 11 * The above copyright notice and this permission notice shall be included
jbradshaw 0:e4a10ed6eb92 12 * in all copies or substantial portions of the Software.
jbradshaw 0:e4a10ed6eb92 13 *
jbradshaw 0:e4a10ed6eb92 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
jbradshaw 0:e4a10ed6eb92 15 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
jbradshaw 0:e4a10ed6eb92 16 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
jbradshaw 0:e4a10ed6eb92 17 * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
jbradshaw 0:e4a10ed6eb92 18 * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
jbradshaw 0:e4a10ed6eb92 19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
jbradshaw 0:e4a10ed6eb92 20 * OTHER DEALINGS IN THE SOFTWARE.
jbradshaw 0:e4a10ed6eb92 21 *
jbradshaw 0:e4a10ed6eb92 22 * Except as contained in this notice, the name of Maxim Integrated
jbradshaw 0:e4a10ed6eb92 23 * Products, Inc. shall not be used except as stated in the Maxim Integrated
jbradshaw 0:e4a10ed6eb92 24 * Products, Inc. Branding Policy.
jbradshaw 0:e4a10ed6eb92 25 *
jbradshaw 0:e4a10ed6eb92 26 * The mere transfer of this software does not imply any licenses
jbradshaw 0:e4a10ed6eb92 27 * of trade secrets, proprietary technology, copyrights, patents,
jbradshaw 0:e4a10ed6eb92 28 * trademarks, maskwork rights, or any other form of intellectual
jbradshaw 0:e4a10ed6eb92 29 * property whatsoever. Maxim Integrated Products, Inc. retains all
jbradshaw 0:e4a10ed6eb92 30 * ownership rights.
jbradshaw 0:e4a10ed6eb92 31 *******************************************************************************/
jbradshaw 0:e4a10ed6eb92 32 /**
jbradshaw 0:e4a10ed6eb92 33 * Bosch BMP280 Digital Pressure Sensor
jbradshaw 0:e4a10ed6eb92 34 *
jbradshaw 0:e4a10ed6eb92 35 * @code
jbradshaw 0:e4a10ed6eb92 36 * #include <stdio.h>
jbradshaw 0:e4a10ed6eb92 37 * #include "mbed.h"
jbradshaw 0:e4a10ed6eb92 38 * #include "xxx.h"
jbradshaw 0:e4a10ed6eb92 39 *
jbradshaw 0:e4a10ed6eb92 40 * I2C i2c(I2C_SDA, I2C_SCL);
jbradshaw 0:e4a10ed6eb92 41 * xxx xxx(&i2c);
jbradshaw 0:e4a10ed6eb92 42 *
jbradshaw 0:e4a10ed6eb92 43 * int main(void) {
jbradshaw 0:e4a10ed6eb92 44 * printf("Initialized xxx\n");
jbradshaw 0:e4a10ed6eb92 45 * while(1) {
jbradshaw 0:e4a10ed6eb92 46 * if (xxx.init() != 0) {
jbradshaw 0:e4a10ed6eb92 47 * printf("Error communicating with xxx\n");
jbradshaw 0:e4a10ed6eb92 48 * } else {
jbradshaw 0:e4a10ed6eb92 49 * printf("Initialized xxx\n");
jbradshaw 0:e4a10ed6eb92 50 * break;
jbradshaw 0:e4a10ed6eb92 51 * }
jbradshaw 0:e4a10ed6eb92 52 * wait(1);
jbradshaw 0:e4a10ed6eb92 53 * }
jbradshaw 0:e4a10ed6eb92 54 *
jbradshaw 0:e4a10ed6eb92 55 * while(1) {
jbradshaw 0:e4a10ed6eb92 56 * printf("");
jbradshaw 0:e4a10ed6eb92 57 * wait(1);
jbradshaw 0:e4a10ed6eb92 58 * }
jbradshaw 0:e4a10ed6eb92 59 * }
jbradshaw 0:e4a10ed6eb92 60 * @endcode
jbradshaw 0:e4a10ed6eb92 61 */
jbradshaw 0:e4a10ed6eb92 62
jbradshaw 0:e4a10ed6eb92 63 #ifndef BMP280_H_
jbradshaw 0:e4a10ed6eb92 64 #define BMP280_H_
jbradshaw 0:e4a10ed6eb92 65
jbradshaw 0:e4a10ed6eb92 66 #include "mbed.h"
jbradshaw 0:e4a10ed6eb92 67
jbradshaw 0:e4a10ed6eb92 68 #define BMP280_READID (0x58)
jbradshaw 0:e4a10ed6eb92 69
jbradshaw 0:e4a10ed6eb92 70 #define BMP280_TEMP_XLSB (0xFC)
jbradshaw 0:e4a10ed6eb92 71 #define BMP280_TEMP_LSB (0xFB)
jbradshaw 0:e4a10ed6eb92 72 #define BMP280_TEMP_MSB (0xFA)
jbradshaw 0:e4a10ed6eb92 73
jbradshaw 0:e4a10ed6eb92 74 #define BMP280_PRESS_XLSB (0xF9)
jbradshaw 0:e4a10ed6eb92 75 #define BMP280_PRESS_LSB (0xF8)
jbradshaw 0:e4a10ed6eb92 76 #define BMP280_PRESS_MSB (0xF7)
jbradshaw 0:e4a10ed6eb92 77
jbradshaw 0:e4a10ed6eb92 78 #define BMP280_CONFIG (0xF5)
jbradshaw 0:e4a10ed6eb92 79 #define BMP280_CTRL_MEAS (0xF4)
jbradshaw 0:e4a10ed6eb92 80 #define BMP280_STATUS (0xF3)
jbradshaw 0:e4a10ed6eb92 81 #define BMP280_RESET (0xE0)
jbradshaw 0:e4a10ed6eb92 82 #define BMP280_ID (0xD0)
jbradshaw 0:e4a10ed6eb92 83
jbradshaw 0:e4a10ed6eb92 84 // calib25-calib00: 0xA1-0x88
jbradshaw 0:e4a10ed6eb92 85 #define BMP280_CALIB25 (0xA1) // Beginning address
jbradshaw 0:e4a10ed6eb92 86 #define BMP280_CALIB00 (0x88) // Ending address
jbradshaw 0:e4a10ed6eb92 87
jbradshaw 0:e4a10ed6eb92 88 #define BMP280_REGISTER_CHIPID (0xD0)
jbradshaw 0:e4a10ed6eb92 89 #define BMP280_REGISTER_VERSION (0xD1)
jbradshaw 0:e4a10ed6eb92 90 #define BMP280_REGISTER_SOFTRESET (0xE0)
jbradshaw 0:e4a10ed6eb92 91
jbradshaw 0:e4a10ed6eb92 92 #define BMP280_REGISTER_CAL26 (0xE1) // R calibration stored in 0xE1-0xF0
jbradshaw 0:e4a10ed6eb92 93
jbradshaw 0:e4a10ed6eb92 94 #define BMP280_REGISTER_CONTROL (0xF4)
jbradshaw 0:e4a10ed6eb92 95 #define BMP280_REGISTER_CONFIG (0xF5)
jbradshaw 0:e4a10ed6eb92 96 #define BMP280_REGISTER_PRESSUREDATA (0xF7)
jbradshaw 0:e4a10ed6eb92 97 #define BMP280_REGISTER_TEMPDATA (0xFA)
jbradshaw 0:e4a10ed6eb92 98
jbradshaw 0:e4a10ed6eb92 99 /**
jbradshaw 0:e4a10ed6eb92 100 * @brief Bosch BMP280 Digital Pressure Sensor
jbradshaw 0:e4a10ed6eb92 101 */
jbradshaw 0:e4a10ed6eb92 102 class BMP280 {
jbradshaw 0:e4a10ed6eb92 103
jbradshaw 0:e4a10ed6eb92 104 public:
jbradshaw 0:e4a10ed6eb92 105 /**
jbradshaw 0:e4a10ed6eb92 106 * BMP280 constructor.
jbradshaw 0:e4a10ed6eb92 107 *
jbradshaw 0:e4a10ed6eb92 108 * @param sda mbed pin to use for SDA line of I2C interface.
jbradshaw 0:e4a10ed6eb92 109 * @param scl mbed pin to use for SCL line of I2C interface.
jbradshaw 0:e4a10ed6eb92 110 * @param slaveAddress Slave Address of the device.
jbradshaw 0:e4a10ed6eb92 111 */
jbradshaw 0:e4a10ed6eb92 112 BMP280(PinName sda, PinName scl, int slaveAddress);
jbradshaw 0:e4a10ed6eb92 113
jbradshaw 0:e4a10ed6eb92 114 /**
jbradshaw 0:e4a10ed6eb92 115 * BMP280 constructor.
jbradshaw 0:e4a10ed6eb92 116 *
jbradshaw 0:e4a10ed6eb92 117 * @param i2c I2C object to use.
jbradshaw 0:e4a10ed6eb92 118 * @param slaveAddress Slave Address of the device.
jbradshaw 0:e4a10ed6eb92 119 */
jbradshaw 0:e4a10ed6eb92 120 BMP280(I2C *i2c, int slaveAddress);
jbradshaw 0:e4a10ed6eb92 121
jbradshaw 0:e4a10ed6eb92 122 char loggingEnabled;
jbradshaw 0:e4a10ed6eb92 123 char loggingSampleRate;
jbradshaw 0:e4a10ed6eb92 124
jbradshaw 0:e4a10ed6eb92 125 /**
jbradshaw 0:e4a10ed6eb92 126 * Write a device register
jbradshaw 0:e4a10ed6eb92 127 */
jbradshaw 0:e4a10ed6eb92 128 int writeReg(char reg, char value);
jbradshaw 0:e4a10ed6eb92 129 /**
jbradshaw 0:e4a10ed6eb92 130 * Read a device register
jbradshaw 0:e4a10ed6eb92 131 */
jbradshaw 0:e4a10ed6eb92 132 int readReg(char reg, char *value);
jbradshaw 0:e4a10ed6eb92 133
jbradshaw 0:e4a10ed6eb92 134 /// @brief TEMP_XLSB (0xFC)
jbradshaw 0:e4a10ed6eb92 135 char bmp280_temp_xlsb; // Lower 4-bits are all 0's
jbradshaw 0:e4a10ed6eb92 136
jbradshaw 0:e4a10ed6eb92 137 /// @brief TEMP_LSB (0xFB)
jbradshaw 0:e4a10ed6eb92 138 char bmp280_temp_lsb;
jbradshaw 0:e4a10ed6eb92 139
jbradshaw 0:e4a10ed6eb92 140 /// @brief TEMP_MSB (0xFA)
jbradshaw 0:e4a10ed6eb92 141 char bmp280_temp_msb;
jbradshaw 0:e4a10ed6eb92 142
jbradshaw 0:e4a10ed6eb92 143 /// @brief PRESS_XLSB (0xF9)
jbradshaw 0:e4a10ed6eb92 144 char bmp280_press_xlsb; // Lower 4-bits are all 0's
jbradshaw 0:e4a10ed6eb92 145
jbradshaw 0:e4a10ed6eb92 146 /// @brief PRESS_LSB (0xF8)
jbradshaw 0:e4a10ed6eb92 147 char bmp280_press_lsb;
jbradshaw 0:e4a10ed6eb92 148
jbradshaw 0:e4a10ed6eb92 149 /// @brief PRESS_MSB (0xF7)
jbradshaw 0:e4a10ed6eb92 150 char bmp280_press_msb;
jbradshaw 0:e4a10ed6eb92 151
jbradshaw 0:e4a10ed6eb92 152 /// @brief CONFIG_REG (0xF5)
jbradshaw 0:e4a10ed6eb92 153 union bmp280_config_reg {
jbradshaw 0:e4a10ed6eb92 154 char all;
jbradshaw 0:e4a10ed6eb92 155 struct {
jbradshaw 0:e4a10ed6eb92 156 char spi3w_en : 1;
jbradshaw 0:e4a10ed6eb92 157 char reserved : 1;
jbradshaw 0:e4a10ed6eb92 158 char filter : 3;
jbradshaw 0:e4a10ed6eb92 159 char t_sb : 3;
jbradshaw 0:e4a10ed6eb92 160 } bit;
jbradshaw 0:e4a10ed6eb92 161 } bmp280_config;
jbradshaw 0:e4a10ed6eb92 162
jbradshaw 0:e4a10ed6eb92 163 /// @brief CTRL_MEAS (0xF4)
jbradshaw 0:e4a10ed6eb92 164 union bmp280_ctrl_meas {
jbradshaw 0:e4a10ed6eb92 165 char all;
jbradshaw 0:e4a10ed6eb92 166 struct {
jbradshaw 0:e4a10ed6eb92 167 char mode : 2;
jbradshaw 0:e4a10ed6eb92 168 char osrs_p : 3;
jbradshaw 0:e4a10ed6eb92 169 char osrs_t : 3;
jbradshaw 0:e4a10ed6eb92 170 } bit;
jbradshaw 0:e4a10ed6eb92 171 } bmp280_ctrl_meas;
jbradshaw 0:e4a10ed6eb92 172
jbradshaw 0:e4a10ed6eb92 173 /// @brief STATUS (0xF3)
jbradshaw 0:e4a10ed6eb92 174 union bmp280_status {
jbradshaw 0:e4a10ed6eb92 175 char all;
jbradshaw 0:e4a10ed6eb92 176 struct {
jbradshaw 0:e4a10ed6eb92 177 char im_update : 1;
jbradshaw 0:e4a10ed6eb92 178 char reserved1 : 2;
jbradshaw 0:e4a10ed6eb92 179 char measuring : 1;
jbradshaw 0:e4a10ed6eb92 180 char reserved2 : 4;
jbradshaw 0:e4a10ed6eb92 181 } bit;
jbradshaw 0:e4a10ed6eb92 182 } bmp280_status;
jbradshaw 0:e4a10ed6eb92 183
jbradshaw 0:e4a10ed6eb92 184 /// @brief RESET (0xE0)
jbradshaw 0:e4a10ed6eb92 185 char bmp280_reset;
jbradshaw 0:e4a10ed6eb92 186
jbradshaw 0:e4a10ed6eb92 187 /// @brief ID (0xD0)
jbradshaw 0:e4a10ed6eb92 188 char bmp280_id;
jbradshaw 0:e4a10ed6eb92 189
jbradshaw 0:e4a10ed6eb92 190 typedef enum {
jbradshaw 0:e4a10ed6eb92 191 SKIPPED_P = 0,
jbradshaw 0:e4a10ed6eb92 192 OVERSAMPLING_X1_P = 1,
jbradshaw 0:e4a10ed6eb92 193 OVERSAMPLING_X2_P = 2,
jbradshaw 0:e4a10ed6eb92 194 OVERSAMPLING_X4_P = 3,
jbradshaw 0:e4a10ed6eb92 195 OVERSAMPLING_X8_P = 4,
jbradshaw 0:e4a10ed6eb92 196 OVERSAMPLING_X16_P = 5
jbradshaw 0:e4a10ed6eb92 197 } bmp280_osrs_P_t;
jbradshaw 0:e4a10ed6eb92 198
jbradshaw 0:e4a10ed6eb92 199 typedef enum {
jbradshaw 0:e4a10ed6eb92 200 SKIPPED_T = 0,
jbradshaw 0:e4a10ed6eb92 201 OVERSAMPLING_X1_T = 1,
jbradshaw 0:e4a10ed6eb92 202 OVERSAMPLING_X2_T = 2,
jbradshaw 0:e4a10ed6eb92 203 OVERSAMPLING_X4_T = 3,
jbradshaw 0:e4a10ed6eb92 204 OVERSAMPLING_X8_T = 4,
jbradshaw 0:e4a10ed6eb92 205 OVERSAMPLING_X16_T = 5
jbradshaw 0:e4a10ed6eb92 206 } bmp280_osrs_T_t;
jbradshaw 0:e4a10ed6eb92 207
jbradshaw 0:e4a10ed6eb92 208 typedef enum {
jbradshaw 0:e4a10ed6eb92 209 FILT_OFF = 1,
jbradshaw 0:e4a10ed6eb92 210 FILT_2 = 2,
jbradshaw 0:e4a10ed6eb92 211 FILT_3 = 4,
jbradshaw 0:e4a10ed6eb92 212 FILT_4 = 8,
jbradshaw 0:e4a10ed6eb92 213 FILT_5 = 16
jbradshaw 0:e4a10ed6eb92 214 } bmp280_FILT_t;
jbradshaw 0:e4a10ed6eb92 215
jbradshaw 0:e4a10ed6eb92 216 typedef enum {
jbradshaw 0:e4a10ed6eb92 217 SLEEP_MODE = 0,
jbradshaw 0:e4a10ed6eb92 218 FORCED_MODE = 1,
jbradshaw 0:e4a10ed6eb92 219 NORMAL_MODE = 3
jbradshaw 0:e4a10ed6eb92 220 } bmp280_MODE_t;
jbradshaw 0:e4a10ed6eb92 221
jbradshaw 0:e4a10ed6eb92 222 typedef enum {
jbradshaw 0:e4a10ed6eb92 223 T_0_5 = 0,
jbradshaw 0:e4a10ed6eb92 224 T_62_5 = 1,
jbradshaw 0:e4a10ed6eb92 225 T_125 = 2,
jbradshaw 0:e4a10ed6eb92 226 T_250 = 3,
jbradshaw 0:e4a10ed6eb92 227 T_500 = 4,
jbradshaw 0:e4a10ed6eb92 228 T_1000 = 5,
jbradshaw 0:e4a10ed6eb92 229 T_2000 = 6,
jbradshaw 0:e4a10ed6eb92 230 T_4000 = 7
jbradshaw 0:e4a10ed6eb92 231 } bmp280_TSB_t;
jbradshaw 0:e4a10ed6eb92 232
jbradshaw 0:e4a10ed6eb92 233 /// @brief calib25... calib00 (0xA1...0x88)
jbradshaw 0:e4a10ed6eb92 234 char bmp280_Calib[26];
jbradshaw 0:e4a10ed6eb92 235
jbradshaw 0:e4a10ed6eb92 236 uint16_t dig_T1;
jbradshaw 0:e4a10ed6eb92 237 int16_t dig_T2;
jbradshaw 0:e4a10ed6eb92 238 int16_t dig_T3;
jbradshaw 0:e4a10ed6eb92 239
jbradshaw 0:e4a10ed6eb92 240 uint16_t dig_P1;
jbradshaw 0:e4a10ed6eb92 241 int16_t dig_P2;
jbradshaw 0:e4a10ed6eb92 242 int16_t dig_P3;
jbradshaw 0:e4a10ed6eb92 243 int16_t dig_P4;
jbradshaw 0:e4a10ed6eb92 244 int16_t dig_P5;
jbradshaw 0:e4a10ed6eb92 245 int16_t dig_P6;
jbradshaw 0:e4a10ed6eb92 246 int16_t dig_P7;
jbradshaw 0:e4a10ed6eb92 247 int16_t dig_P8;
jbradshaw 0:e4a10ed6eb92 248 int16_t dig_P9;
jbradshaw 0:e4a10ed6eb92 249
jbradshaw 0:e4a10ed6eb92 250 int32_t t_fine; // This is calculated int the temperature to be used by the
jbradshaw 0:e4a10ed6eb92 251 // pressure
jbradshaw 0:e4a10ed6eb92 252
jbradshaw 0:e4a10ed6eb92 253 int32_t bmp280_rawPress;
jbradshaw 0:e4a10ed6eb92 254 int32_t bmp280_rawTemp;
jbradshaw 0:e4a10ed6eb92 255
jbradshaw 0:e4a10ed6eb92 256 float Temp_degC; // Deg C.
jbradshaw 0:e4a10ed6eb92 257 float Press_Pa; // Pascal.
jbradshaw 0:e4a10ed6eb92 258
jbradshaw 0:e4a10ed6eb92 259 /**
jbradshaw 0:e4a10ed6eb92 260 * BMP280 constructor.
jbradshaw 0:e4a10ed6eb92 261 *
jbradshaw 0:e4a10ed6eb92 262 * @param sda mbed pin to use for SDA line of I2C interface.
jbradshaw 0:e4a10ed6eb92 263 * @param scl mbed pin to use for SCL line of I2C interface.
jbradshaw 0:e4a10ed6eb92 264 */
jbradshaw 0:e4a10ed6eb92 265 BMP280(PinName sda, PinName scl);
jbradshaw 0:e4a10ed6eb92 266
jbradshaw 0:e4a10ed6eb92 267 /**
jbradshaw 0:e4a10ed6eb92 268 * BMP280 constructor.
jbradshaw 0:e4a10ed6eb92 269 *
jbradshaw 0:e4a10ed6eb92 270 * @param i2c I2C object to use.
jbradshaw 0:e4a10ed6eb92 271 */
jbradshaw 0:e4a10ed6eb92 272 BMP280(I2C *i2c);
jbradshaw 0:e4a10ed6eb92 273
jbradshaw 0:e4a10ed6eb92 274 /**
jbradshaw 0:e4a10ed6eb92 275 * BMP280 destructor.
jbradshaw 0:e4a10ed6eb92 276 */
jbradshaw 0:e4a10ed6eb92 277 ~BMP280(void);
jbradshaw 0:e4a10ed6eb92 278
jbradshaw 0:e4a10ed6eb92 279 // Function Prototypes
jbradshaw 0:e4a10ed6eb92 280
jbradshaw 0:e4a10ed6eb92 281 /**
jbradshaw 0:e4a10ed6eb92 282 * @brief This initializes the BMP280
jbradshaw 0:e4a10ed6eb92 283 * @brief The BMP280 has 2 modes. FORCED mode and NORMAL mode. FORCED Mode gives more
jbradshaw 0:e4a10ed6eb92 284 * @brief control to the processor as the processor sends out the Mode to initiate a conversion
jbradshaw 0:e4a10ed6eb92 285 * @brief and a data is sent out then. NORMAL mode is initialized once and it just runs and sends
jbradshaw 0:e4a10ed6eb92 286 * @brief out data at a programmed timed interval. (In this example the main() will set this to Normal
jbradshaw 0:e4a10ed6eb92 287 * @brief function)
jbradshaw 0:e4a10ed6eb92 288 * @param Osrs_p- Pressure oversampling
jbradshaw 0:e4a10ed6eb92 289 * @param Osrs_t- Temperature oversampling
jbradshaw 0:e4a10ed6eb92 290 * @param Filter- Filter Settings
jbradshaw 0:e4a10ed6eb92 291 * @param Mode- Power Modes
jbradshaw 0:e4a10ed6eb92 292 * @param T_sb- Standby time (used with Normal mode)
jbradshaw 0:e4a10ed6eb92 293 * @param dig_T1, dig_T2, dig_T3- Coeffs used for temp conversion - GLOBAL variables (output)
jbradshaw 0:e4a10ed6eb92 294 * @param dig_P1, .... , dig_P9- Coeffs used for press conversion - GLOBAL variables (output)
jbradshaw 0:e4a10ed6eb92 295 * @returns 0-if no error. A non-zero value indicates an error.
jbradshaw 0:e4a10ed6eb92 296 */
jbradshaw 0:e4a10ed6eb92 297 int init(bmp280_osrs_P_t Osrs_p, bmp280_osrs_T_t Osrs_t, bmp280_FILT_t Filter,
jbradshaw 0:e4a10ed6eb92 298 bmp280_MODE_t Mode, bmp280_TSB_t T_sb);
jbradshaw 0:e4a10ed6eb92 299
jbradshaw 0:e4a10ed6eb92 300 /**
jbradshaw 0:e4a10ed6eb92 301 * @brief The BMP280 has 2 modes. FORCED mode and NORMAL mode. FORCED Mode
jbradshaw 0:e4a10ed6eb92 302 * gives more
jbradshaw 0:e4a10ed6eb92 303 * @brief control to the processor as the processor sends out the Mode to
jbradshaw 0:e4a10ed6eb92 304 * initiate a conversion
jbradshaw 0:e4a10ed6eb92 305 * @brief and a data is sent out then. NORMAL mode is initialized once and it
jbradshaw 0:e4a10ed6eb92 306 * just runs and sends
jbradshaw 0:e4a10ed6eb92 307 * @brief out data at a programmed timed interval. (In this example the
jbradshaw 0:e4a10ed6eb92 308 * main() will set this to Normal
jbradshaw 0:e4a10ed6eb92 309 * @brief function)
jbradshaw 0:e4a10ed6eb92 310 * @param *Temp_degC - Pointer to temperature (result in deg C)
jbradshaw 0:e4a10ed6eb92 311 * @param *Press_Pa - Pointer to pressure (resul in Pascal)
jbradshaw 0:e4a10ed6eb92 312 * @returns 0-if no error. A non-zero value indicates an error.
jbradshaw 0:e4a10ed6eb92 313 */
jbradshaw 0:e4a10ed6eb92 314 int ReadCompData(float *Temp_degC, float *Press_Pa);
jbradshaw 0:e4a10ed6eb92 315
jbradshaw 0:e4a10ed6eb92 316 /**
jbradshaw 0:e4a10ed6eb92 317 * @brief This function allows writing to a register.
jbradshaw 0:e4a10ed6eb92 318 * @param reg- Address of the register to write to
jbradshaw 0:e4a10ed6eb92 319 * @param value- Data written to the register
jbradshaw 0:e4a10ed6eb92 320 * @returns 0-if no error. A non-zero value indicates an error.
jbradshaw 0:e4a10ed6eb92 321 */
jbradshaw 0:e4a10ed6eb92 322 int reg_write(char reg, char value);
jbradshaw 0:e4a10ed6eb92 323
jbradshaw 0:e4a10ed6eb92 324 /**
jbradshaw 0:e4a10ed6eb92 325 * @brief This function allows writing to a register.
jbradshaw 0:e4a10ed6eb92 326 * @params reg- Address of the register to read from (input)
jbradshaw 0:e4a10ed6eb92 327 * @params *value- Pointer to the value read from the register (output)
jbradshaw 0:e4a10ed6eb92 328 * @returns 0-if no error. A non-zero value indicates an error.
jbradshaw 0:e4a10ed6eb92 329 */
jbradshaw 0:e4a10ed6eb92 330 int reg_read(char reg, char *value, char number);
jbradshaw 0:e4a10ed6eb92 331
jbradshaw 0:e4a10ed6eb92 332 /**
jbradshaw 0:e4a10ed6eb92 333 * @brief Performs a soft reset on the BMP280
jbradshaw 0:e4a10ed6eb92 334 * @param none
jbradshaw 0:e4a10ed6eb92 335 * @returns none
jbradshaw 0:e4a10ed6eb92 336 */
jbradshaw 0:e4a10ed6eb92 337 void Reset(void);
jbradshaw 0:e4a10ed6eb92 338
jbradshaw 0:e4a10ed6eb92 339 /**
jbradshaw 0:e4a10ed6eb92 340 * @brief Detects if the BMP280 is present
jbradshaw 0:e4a10ed6eb92 341 * @param none
jbradshaw 0:e4a10ed6eb92 342 * @returns 1 for found, 0 for not found, -1 for comm error
jbradshaw 0:e4a10ed6eb92 343 */
jbradshaw 0:e4a10ed6eb92 344 int Detect(void);
jbradshaw 0:e4a10ed6eb92 345
jbradshaw 0:e4a10ed6eb92 346 /**
jbradshaw 0:e4a10ed6eb92 347 * @brief Performs calculations on the raw temperature data to convert to
jbradshaw 0:e4a10ed6eb92 348 * @brief temperature in deg C, based on Bosch's algorithm
jbradshaw 0:e4a10ed6eb92 349 * @param Raw Temp ADC value, Global dig_T1, dig_T2, dig_T3
jbradshaw 0:e4a10ed6eb92 350 * @returns The Temperature in deg C
jbradshaw 0:e4a10ed6eb92 351 */
jbradshaw 0:e4a10ed6eb92 352 float compensate_T_float(int32_t adc_T); // returned value Deg C.
jbradshaw 0:e4a10ed6eb92 353
jbradshaw 0:e4a10ed6eb92 354 /**
jbradshaw 0:e4a10ed6eb92 355 * @brief Performs calculations on the raw pressure data to convert to
jbradshaw 0:e4a10ed6eb92 356 * @brief pressure in Pascal, based on Bosch's algorithm
jbradshaw 0:e4a10ed6eb92 357 * @param adc_P Raw Press ADC value, Global dig_P1, dig_P2,..., dig_P9
jbradshaw 0:e4a10ed6eb92 358 * @returns The Pressure in Pascals
jbradshaw 0:e4a10ed6eb92 359 */
jbradshaw 0:e4a10ed6eb92 360 float compensate_P_float(int32_t adc_P); // returned value Pascal.
jbradshaw 0:e4a10ed6eb92 361
jbradshaw 0:e4a10ed6eb92 362 /**
jbradshaw 0:e4a10ed6eb92 363 * @brief Puts the BMP280 in low power Sleep mode
jbradshaw 0:e4a10ed6eb92 364 * @param none
jbradshaw 0:e4a10ed6eb92 365 * @returns 0 if no errors, -1 if error.
jbradshaw 0:e4a10ed6eb92 366 */
jbradshaw 0:e4a10ed6eb92 367 int Sleep(void);
jbradshaw 0:e4a10ed6eb92 368
jbradshaw 0:e4a10ed6eb92 369 /**
jbradshaw 0:e4a10ed6eb92 370 * @brief This reads the raw BMP280 data
jbradshaw 0:e4a10ed6eb92 371 * @param *bmp280_rawData- array of raw output data
jbradshaw 0:e4a10ed6eb92 372 * @returns 0-if no error. A non-zero value indicates an error.
jbradshaw 0:e4a10ed6eb92 373 *
jbradshaw 0:e4a10ed6eb92 374 */
jbradshaw 0:e4a10ed6eb92 375 int ReadCompDataRaw(char *bmp280_rawData);
jbradshaw 0:e4a10ed6eb92 376 /**
jbradshaw 0:e4a10ed6eb92 377 * @brief This reads the raw BMP280 data uses the Bosch algorithm to get the
jbradshaw 0:e4a10ed6eb92 378 * data
jbradshaw 0:e4a10ed6eb92 379 * @brief in float, then the float gets converted to an String
jbradshaw 0:e4a10ed6eb92 380 * @param *bmp280_rawData- array of raw output data
jbradshaw 0:e4a10ed6eb92 381 * @returns 0-if no error. A non-zero value indicates an error.
jbradshaw 0:e4a10ed6eb92 382 *
jbradshaw 0:e4a10ed6eb92 383 */
jbradshaw 0:e4a10ed6eb92 384 int ReadCompDataRaw2(char *bmp280_rawData);
jbradshaw 0:e4a10ed6eb92 385 /**
jbradshaw 0:e4a10ed6eb92 386 * @brief This converts the raw BMP280 data to couble based on Bosch's
jbradshaw 0:e4a10ed6eb92 387 * algorithm
jbradshaw 0:e4a10ed6eb92 388 * @param *bmp280_rawData- array of raw input data
jbradshaw 0:e4a10ed6eb92 389 * @param *Temp_degC- pointer to output, Temp value in deg C
jbradshaw 0:e4a10ed6eb92 390 * @param *Press_Pa- pointer to output, Press value in Pascals
jbradshaw 0:e4a10ed6eb92 391 * @returns 0-if no error. A non-zero value indicates an error.
jbradshaw 0:e4a10ed6eb92 392 *
jbradshaw 0:e4a10ed6eb92 393 */
jbradshaw 0:e4a10ed6eb92 394 void ToFloat(char *bmp280_rawData, float *Temp_degC, float *Press_Pa);
jbradshaw 0:e4a10ed6eb92 395 /**
jbradshaw 0:e4a10ed6eb92 396 * @brief converts to Farenhite from Centigrade
jbradshaw 0:e4a10ed6eb92 397 * @param temperature in Centigrade
jbradshaw 0:e4a10ed6eb92 398 * @returns temperature value in Farenhite
jbradshaw 0:e4a10ed6eb92 399 */
jbradshaw 0:e4a10ed6eb92 400 float ToFahrenheit(float temperature);
jbradshaw 0:e4a10ed6eb92 401
jbradshaw 0:e4a10ed6eb92 402 /**
jbradshaw 0:e4a10ed6eb92 403 * @brief Reads a unique ID from the register
jbradshaw 0:e4a10ed6eb92 404 * @param none
jbradshaw 0:e4a10ed6eb92 405 * @returns The correct id value which is 0x58
jbradshaw 0:e4a10ed6eb92 406 */
jbradshaw 0:e4a10ed6eb92 407 int ReadId(void);
jbradshaw 0:e4a10ed6eb92 408
jbradshaw 0:e4a10ed6eb92 409 private:
jbradshaw 0:e4a10ed6eb92 410 /// I2C pointer
jbradshaw 0:e4a10ed6eb92 411 I2C *i2c;
jbradshaw 0:e4a10ed6eb92 412 /// Is this object the owner of the I2C object
jbradshaw 0:e4a10ed6eb92 413 bool isOwner;
jbradshaw 0:e4a10ed6eb92 414 /// Device slave address
jbradshaw 0:e4a10ed6eb92 415 int slaveAddress;
jbradshaw 0:e4a10ed6eb92 416 };
jbradshaw 0:e4a10ed6eb92 417
jbradshaw 0:e4a10ed6eb92 418 #endif // BMP280_H_