Lucas Lim / Mbed 2 deprecated HSP_Temperature_Barometer_CS3237

Dependencies:   mbed

Committer:
lucaslwl
Date:
Mon Aug 26 08:11:41 2019 +0000
Revision:
22:5c07298d3383
add library folder

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lucaslwl 22:5c07298d3383 1 ///*******************************************************************************
lucaslwl 22:5c07298d3383 2 // * Copyright (C) 2017 Maxim Integrated Products, Inc., All Rights Reserved.
lucaslwl 22:5c07298d3383 3 // *
lucaslwl 22:5c07298d3383 4 // * Permission is hereby granted, free of charge, to any person obtaining a
lucaslwl 22:5c07298d3383 5 // * copy of this software and associated documentation files (the "Software"),
lucaslwl 22:5c07298d3383 6 // * to deal in the Software without restriction, including without limitation
lucaslwl 22:5c07298d3383 7 // * the rights to use, copy, modify, merge, publish, distribute, sublicense,
lucaslwl 22:5c07298d3383 8 // * and/or sell copies of the Software, and to permit persons to whom the
lucaslwl 22:5c07298d3383 9 // * Software is furnished to do so, subject to the following conditions:
lucaslwl 22:5c07298d3383 10 // *
lucaslwl 22:5c07298d3383 11 // * The above copyright notice and this permission notice shall be included
lucaslwl 22:5c07298d3383 12 // * in all copies or substantial portions of the Software.
lucaslwl 22:5c07298d3383 13 // *
lucaslwl 22:5c07298d3383 14 // * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
lucaslwl 22:5c07298d3383 15 // * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
lucaslwl 22:5c07298d3383 16 // * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
lucaslwl 22:5c07298d3383 17 // * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
lucaslwl 22:5c07298d3383 18 // * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
lucaslwl 22:5c07298d3383 19 // * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
lucaslwl 22:5c07298d3383 20 // * OTHER DEALINGS IN THE SOFTWARE.
lucaslwl 22:5c07298d3383 21 // *
lucaslwl 22:5c07298d3383 22 // * Except as contained in this notice, the name of Maxim Integrated
lucaslwl 22:5c07298d3383 23 // * Products, Inc. shall not be used except as stated in the Maxim Integrated
lucaslwl 22:5c07298d3383 24 // * Products, Inc. Branding Policy.
lucaslwl 22:5c07298d3383 25 // *
lucaslwl 22:5c07298d3383 26 // * The mere transfer of this software does not imply any licenses
lucaslwl 22:5c07298d3383 27 // * of trade secrets, proprietary technology, copyrights, patents,
lucaslwl 22:5c07298d3383 28 // * trademarks, maskwork rights, or any other form of intellectual
lucaslwl 22:5c07298d3383 29 // * property whatsoever. Maxim Integrated Products, Inc. retains all
lucaslwl 22:5c07298d3383 30 // * ownership rights.
lucaslwl 22:5c07298d3383 31 // *******************************************************************************
lucaslwl 22:5c07298d3383 32 // */
lucaslwl 22:5c07298d3383 33 //
lucaslwl 22:5c07298d3383 34 //
lucaslwl 22:5c07298d3383 35 //#include "MAX30205.h"
lucaslwl 22:5c07298d3383 36 //
lucaslwl 22:5c07298d3383 37 //
lucaslwl 22:5c07298d3383 38 ////******************************************************************************
lucaslwl 22:5c07298d3383 39 //MAX30205::MAX30205(I2C &i2c, uint8_t slaveAddress):
lucaslwl 22:5c07298d3383 40 //m_i2c(i2c), m_writeAddress(slaveAddress << 1),
lucaslwl 22:5c07298d3383 41 //m_readAddress((slaveAddress << 1) | 1)
lucaslwl 22:5c07298d3383 42 //{
lucaslwl 22:5c07298d3383 43 //}
lucaslwl 22:5c07298d3383 44 //
lucaslwl 22:5c07298d3383 45 //
lucaslwl 22:5c07298d3383 46 ////******************************************************************************
lucaslwl 22:5c07298d3383 47 //MAX30205::~MAX30205(void)
lucaslwl 22:5c07298d3383 48 //{
lucaslwl 22:5c07298d3383 49 // //empty block
lucaslwl 22:5c07298d3383 50 //}
lucaslwl 22:5c07298d3383 51 //
lucaslwl 22:5c07298d3383 52 //
lucaslwl 22:5c07298d3383 53 ////******************************************************************************
lucaslwl 22:5c07298d3383 54 //int32_t MAX30205::readTemperature(uint16_t &value)
lucaslwl 22:5c07298d3383 55 //{
lucaslwl 22:5c07298d3383 56 // return readRegister(MAX30205::Temperature, value);
lucaslwl 22:5c07298d3383 57 //
lucaslwl 22:5c07298d3383 58 //}
lucaslwl 22:5c07298d3383 59 //
lucaslwl 22:5c07298d3383 60 //
lucaslwl 22:5c07298d3383 61 ////******************************************************************************
lucaslwl 22:5c07298d3383 62 //int32_t MAX30205::readConfiguration(Configuration_u &config)
lucaslwl 22:5c07298d3383 63 //{
lucaslwl 22:5c07298d3383 64 // uint16_t data;
lucaslwl 22:5c07298d3383 65 //
lucaslwl 22:5c07298d3383 66 // int32_t result = readRegister(MAX30205::Configuration, data);
lucaslwl 22:5c07298d3383 67 // if(result == 0)
lucaslwl 22:5c07298d3383 68 // {
lucaslwl 22:5c07298d3383 69 // config.all = (0x00FF & data);
lucaslwl 22:5c07298d3383 70 // }
lucaslwl 22:5c07298d3383 71 //
lucaslwl 22:5c07298d3383 72 // return result;
lucaslwl 22:5c07298d3383 73 //
lucaslwl 22:5c07298d3383 74 //}
lucaslwl 22:5c07298d3383 75 //
lucaslwl 22:5c07298d3383 76 //
lucaslwl 22:5c07298d3383 77 ////******************************************************************************
lucaslwl 22:5c07298d3383 78 //int32_t MAX30205::writeConfiguration(const Configuration_u config)
lucaslwl 22:5c07298d3383 79 //{
lucaslwl 22:5c07298d3383 80 // uint16_t local_config = (0x00FF & config.all);
lucaslwl 22:5c07298d3383 81 //
lucaslwl 22:5c07298d3383 82 // return writeRegister(MAX30205::Configuration, local_config);
lucaslwl 22:5c07298d3383 83 //}
lucaslwl 22:5c07298d3383 84 //
lucaslwl 22:5c07298d3383 85 //
lucaslwl 22:5c07298d3383 86 ////******************************************************************************
lucaslwl 22:5c07298d3383 87 //int32_t MAX30205::readTHYST(uint16_t &value)
lucaslwl 22:5c07298d3383 88 //{
lucaslwl 22:5c07298d3383 89 // return readRegister(MAX30205::THYST, value);
lucaslwl 22:5c07298d3383 90 //}
lucaslwl 22:5c07298d3383 91 //
lucaslwl 22:5c07298d3383 92 //
lucaslwl 22:5c07298d3383 93 ////******************************************************************************
lucaslwl 22:5c07298d3383 94 //int32_t MAX30205::writeTHYST(uint16_t value)
lucaslwl 22:5c07298d3383 95 //{
lucaslwl 22:5c07298d3383 96 // return writeRegister(MAX30205::THYST, value);
lucaslwl 22:5c07298d3383 97 //}
lucaslwl 22:5c07298d3383 98 //
lucaslwl 22:5c07298d3383 99 //
lucaslwl 22:5c07298d3383 100 ////******************************************************************************
lucaslwl 22:5c07298d3383 101 //int32_t MAX30205::readTOS(uint16_t &value)
lucaslwl 22:5c07298d3383 102 //{
lucaslwl 22:5c07298d3383 103 // return readRegister(MAX30205::TOS, value);
lucaslwl 22:5c07298d3383 104 //}
lucaslwl 22:5c07298d3383 105 //
lucaslwl 22:5c07298d3383 106 //
lucaslwl 22:5c07298d3383 107 ////******************************************************************************
lucaslwl 22:5c07298d3383 108 //int32_t MAX30205::writeTOS(const uint16_t value)
lucaslwl 22:5c07298d3383 109 //{
lucaslwl 22:5c07298d3383 110 // return writeRegister(MAX30205::TOS, value);
lucaslwl 22:5c07298d3383 111 //}
lucaslwl 22:5c07298d3383 112 //
lucaslwl 22:5c07298d3383 113 //
lucaslwl 22:5c07298d3383 114 ////******************************************************************************
lucaslwl 22:5c07298d3383 115 //float MAX30205::toCelsius(uint32_t rawTemp)
lucaslwl 22:5c07298d3383 116 //{
lucaslwl 22:5c07298d3383 117 // uint8_t val1, val2;
lucaslwl 22:5c07298d3383 118 // float result;
lucaslwl 22:5c07298d3383 119 //
lucaslwl 22:5c07298d3383 120 // val1 = (rawTemp >> 8);
lucaslwl 22:5c07298d3383 121 // val2 = (rawTemp & 0xFF);
lucaslwl 22:5c07298d3383 122 //
lucaslwl 22:5c07298d3383 123 // result = static_cast<float>(val1 + (val2/ 256.0F));
lucaslwl 22:5c07298d3383 124 //
lucaslwl 22:5c07298d3383 125 // return result;
lucaslwl 22:5c07298d3383 126 //}
lucaslwl 22:5c07298d3383 127 //
lucaslwl 22:5c07298d3383 128 //
lucaslwl 22:5c07298d3383 129 ////******************************************************************************
lucaslwl 22:5c07298d3383 130 //float MAX30205::toFahrenheit(float temperatureC)
lucaslwl 22:5c07298d3383 131 //{
lucaslwl 22:5c07298d3383 132 // return((temperatureC * 1.8F) + 32.0f);
lucaslwl 22:5c07298d3383 133 //}
lucaslwl 22:5c07298d3383 134 //
lucaslwl 22:5c07298d3383 135 //
lucaslwl 22:5c07298d3383 136 ////******************************************************************************
lucaslwl 22:5c07298d3383 137 //int32_t MAX30205::writeRegister(Registers_e reg, uint16_t value)
lucaslwl 22:5c07298d3383 138 //{
lucaslwl 22:5c07298d3383 139 // int32_t result;
lucaslwl 22:5c07298d3383 140 //
lucaslwl 22:5c07298d3383 141 // uint8_t hi = ((value >> 8) & 0xFF);
lucaslwl 22:5c07298d3383 142 // uint8_t lo = (value & 0xFF);
lucaslwl 22:5c07298d3383 143 // char cmdData[3] = {reg, hi, lo};
lucaslwl 22:5c07298d3383 144 //
lucaslwl 22:5c07298d3383 145 // result = m_i2c.write(m_writeAddress, cmdData, 3);
lucaslwl 22:5c07298d3383 146 //
lucaslwl 22:5c07298d3383 147 // return result;
lucaslwl 22:5c07298d3383 148 //}
lucaslwl 22:5c07298d3383 149 //
lucaslwl 22:5c07298d3383 150 //
lucaslwl 22:5c07298d3383 151 ////******************************************************************************
lucaslwl 22:5c07298d3383 152 //int32_t MAX30205::readRegister(Registers_e reg, uint16_t &value)
lucaslwl 22:5c07298d3383 153 //{
lucaslwl 22:5c07298d3383 154 // int32_t result;
lucaslwl 22:5c07298d3383 155 //
lucaslwl 22:5c07298d3383 156 // char data[2];
lucaslwl 22:5c07298d3383 157 // char cmdData[1] = {reg};
lucaslwl 22:5c07298d3383 158 //
lucaslwl 22:5c07298d3383 159 // result = m_i2c.write(m_writeAddress, cmdData, 1);
lucaslwl 22:5c07298d3383 160 // if(result == 0)
lucaslwl 22:5c07298d3383 161 // {
lucaslwl 22:5c07298d3383 162 // result = m_i2c.read(m_readAddress, data, 2);
lucaslwl 22:5c07298d3383 163 // if (result == 0)
lucaslwl 22:5c07298d3383 164 // {
lucaslwl 22:5c07298d3383 165 // value = (data[0] << 8) + data[1];
lucaslwl 22:5c07298d3383 166 // }
lucaslwl 22:5c07298d3383 167 // }
lucaslwl 22:5c07298d3383 168 //
lucaslwl 22:5c07298d3383 169 // return result;
lucaslwl 22:5c07298d3383 170 //}
lucaslwl 22:5c07298d3383 171
lucaslwl 22:5c07298d3383 172
lucaslwl 22:5c07298d3383 173 /*******************************************************************************
lucaslwl 22:5c07298d3383 174 * Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved.
lucaslwl 22:5c07298d3383 175 *
lucaslwl 22:5c07298d3383 176 * Permission is hereby granted, free of charge, to any person obtaining a
lucaslwl 22:5c07298d3383 177 * copy of this software and associated documentation files (the "Software"),
lucaslwl 22:5c07298d3383 178 * to deal in the Software without restriction, including without limitation
lucaslwl 22:5c07298d3383 179 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
lucaslwl 22:5c07298d3383 180 * and/or sell copies of the Software, and to permit persons to whom the
lucaslwl 22:5c07298d3383 181 * Software is furnished to do so, subject to the following conditions:
lucaslwl 22:5c07298d3383 182 *
lucaslwl 22:5c07298d3383 183 * The above copyright notice and this permission notice shall be included
lucaslwl 22:5c07298d3383 184 * in all copies or substantial portions of the Software.
lucaslwl 22:5c07298d3383 185 *
lucaslwl 22:5c07298d3383 186 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
lucaslwl 22:5c07298d3383 187 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
lucaslwl 22:5c07298d3383 188 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
lucaslwl 22:5c07298d3383 189 * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
lucaslwl 22:5c07298d3383 190 * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
lucaslwl 22:5c07298d3383 191 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
lucaslwl 22:5c07298d3383 192 * OTHER DEALINGS IN THE SOFTWARE.
lucaslwl 22:5c07298d3383 193 *
lucaslwl 22:5c07298d3383 194 * Except as contained in this notice, the name of Maxim Integrated
lucaslwl 22:5c07298d3383 195 * Products, Inc. shall not be used except as stated in the Maxim Integrated
lucaslwl 22:5c07298d3383 196 * Products, Inc. Branding Policy.
lucaslwl 22:5c07298d3383 197 *
lucaslwl 22:5c07298d3383 198 * The mere transfer of this software does not imply any licenses
lucaslwl 22:5c07298d3383 199 * of trade secrets, proprietary technology, copyrights, patents,
lucaslwl 22:5c07298d3383 200 * trademarks, maskwork rights, or any other form of intellectual
lucaslwl 22:5c07298d3383 201 * property whatsoever. Maxim Integrated Products, Inc. retains all
lucaslwl 22:5c07298d3383 202 * ownership rights.
lucaslwl 22:5c07298d3383 203 *******************************************************************************
lucaslwl 22:5c07298d3383 204 */
lucaslwl 22:5c07298d3383 205 #include "MAX30205.h"
lucaslwl 22:5c07298d3383 206
lucaslwl 22:5c07298d3383 207 //******************************************************************************
lucaslwl 22:5c07298d3383 208 MAX30205::MAX30205(PinName sda, PinName scl, int slaveAddress) :
lucaslwl 22:5c07298d3383 209 slaveAddress(slaveAddress) {
lucaslwl 22:5c07298d3383 210 i2c = new I2C(sda, scl);
lucaslwl 22:5c07298d3383 211 isOwner = true;
lucaslwl 22:5c07298d3383 212 i2c->frequency(100000);
lucaslwl 22:5c07298d3383 213 }
lucaslwl 22:5c07298d3383 214
lucaslwl 22:5c07298d3383 215 //******************************************************************************
lucaslwl 22:5c07298d3383 216 MAX30205::MAX30205(I2C *i2c, int slaveAddress) : slaveAddress(slaveAddress) {
lucaslwl 22:5c07298d3383 217 this->i2c = i2c;
lucaslwl 22:5c07298d3383 218 i2c->frequency(100000);
lucaslwl 22:5c07298d3383 219 isOwner = false;
lucaslwl 22:5c07298d3383 220 }
lucaslwl 22:5c07298d3383 221
lucaslwl 22:5c07298d3383 222 //******************************************************************************
lucaslwl 22:5c07298d3383 223 MAX30205::~MAX30205(void) {
lucaslwl 22:5c07298d3383 224 if (isOwner == true) {
lucaslwl 22:5c07298d3383 225 delete i2c;
lucaslwl 22:5c07298d3383 226 }
lucaslwl 22:5c07298d3383 227 }
lucaslwl 22:5c07298d3383 228
lucaslwl 22:5c07298d3383 229 //******************************************************************************
lucaslwl 22:5c07298d3383 230 int MAX30205::reg_write(char reg, char value) {
lucaslwl 22:5c07298d3383 231 int result;
lucaslwl 22:5c07298d3383 232 char cmdData[2] = {(char)reg, value};
lucaslwl 22:5c07298d3383 233 result = i2c->write(slaveAddress, cmdData, 2);
lucaslwl 22:5c07298d3383 234 if (result != 0){
lucaslwl 22:5c07298d3383 235 return -1;
lucaslwl 22:5c07298d3383 236 }
lucaslwl 22:5c07298d3383 237 return 0;
lucaslwl 22:5c07298d3383 238 }
lucaslwl 22:5c07298d3383 239
lucaslwl 22:5c07298d3383 240 //******************************************************************************
lucaslwl 22:5c07298d3383 241 int MAX30205::reg_write16(char reg, uint16_t value) {
lucaslwl 22:5c07298d3383 242 int result;
lucaslwl 22:5c07298d3383 243 char hi = (value >> 8) & 0xFF;
lucaslwl 22:5c07298d3383 244 char lo = value & 0xFF;
lucaslwl 22:5c07298d3383 245 char cmdData[3] = {reg, hi, lo};
lucaslwl 22:5c07298d3383 246 result = i2c->write(slaveAddress, cmdData, 3);
lucaslwl 22:5c07298d3383 247 if (result != 0) {
lucaslwl 22:5c07298d3383 248 return -1;
lucaslwl 22:5c07298d3383 249 }
lucaslwl 22:5c07298d3383 250 return 0;
lucaslwl 22:5c07298d3383 251 }
lucaslwl 22:5c07298d3383 252
lucaslwl 22:5c07298d3383 253 //******************************************************************************
lucaslwl 22:5c07298d3383 254 int MAX30205::reg_read(char reg, char *value) {
lucaslwl 22:5c07298d3383 255 int result;
lucaslwl 22:5c07298d3383 256 char cmdData[1] = {reg};
lucaslwl 22:5c07298d3383 257
lucaslwl 22:5c07298d3383 258 result = i2c->write(slaveAddress, cmdData, 1);
lucaslwl 22:5c07298d3383 259 if (result != 0) {
lucaslwl 22:5c07298d3383 260 return -1;
lucaslwl 22:5c07298d3383 261 }
lucaslwl 22:5c07298d3383 262 result = i2c->read(slaveAddress, value, 1);
lucaslwl 22:5c07298d3383 263 if (result != 0){
lucaslwl 22:5c07298d3383 264 return -1;
lucaslwl 22:5c07298d3383 265 }
lucaslwl 22:5c07298d3383 266 return 0;
lucaslwl 22:5c07298d3383 267 }
lucaslwl 22:5c07298d3383 268
lucaslwl 22:5c07298d3383 269 //******************************************************************************
lucaslwl 22:5c07298d3383 270 int MAX30205::reg_read16(char reg, uint16_t *value) {
lucaslwl 22:5c07298d3383 271 int result;
lucaslwl 22:5c07298d3383 272 char data[2];
lucaslwl 22:5c07298d3383 273 char cmdData[1] = {reg};
lucaslwl 22:5c07298d3383 274 result = i2c->write(slaveAddress, cmdData, 1);
lucaslwl 22:5c07298d3383 275 if (result != 0) {
lucaslwl 22:5c07298d3383 276 return -1;
lucaslwl 22:5c07298d3383 277 }
lucaslwl 22:5c07298d3383 278 result = i2c->read(slaveAddress, data, 2);
lucaslwl 22:5c07298d3383 279 if (result != 0) {
lucaslwl 22:5c07298d3383 280 return -1;
lucaslwl 22:5c07298d3383 281 }
lucaslwl 22:5c07298d3383 282 *value = (data[0] << 8) + data[1];
lucaslwl 22:5c07298d3383 283 return 0;
lucaslwl 22:5c07298d3383 284 }
lucaslwl 22:5c07298d3383 285
lucaslwl 22:5c07298d3383 286 //******************************************************************************
lucaslwl 22:5c07298d3383 287 int MAX30205::readTemperature(uint16_t *value) {
lucaslwl 22:5c07298d3383 288 uint8_t data[2];
lucaslwl 22:5c07298d3383 289 int status;
lucaslwl 22:5c07298d3383 290 status = reg_read16(MAX30205_Temperature, (uint16_t *)&data);
lucaslwl 22:5c07298d3383 291 *value = (data[0] << 8) + data[1];
lucaslwl 22:5c07298d3383 292 return status;
lucaslwl 22:5c07298d3383 293 }
lucaslwl 22:5c07298d3383 294
lucaslwl 22:5c07298d3383 295 //******************************************************************************
lucaslwl 22:5c07298d3383 296 float MAX30205::toCelsius(unsigned int rawTemp) {
lucaslwl 22:5c07298d3383 297 float val;
lucaslwl 22:5c07298d3383 298 float val1, val2;
lucaslwl 22:5c07298d3383 299 val1 = (float)(rawTemp >> 8);
lucaslwl 22:5c07298d3383 300 val2 = (float)(rawTemp & 0xFF);
lucaslwl 22:5c07298d3383 301 val = val2 + (val1 / 256.0f);
lucaslwl 22:5c07298d3383 302 return val;
lucaslwl 22:5c07298d3383 303 }
lucaslwl 22:5c07298d3383 304
lucaslwl 22:5c07298d3383 305 //******************************************************************************
lucaslwl 22:5c07298d3383 306 float MAX30205::toFahrenheit(float temperatureC) {
lucaslwl 22:5c07298d3383 307 return temperatureC * 9.0f / 5.0f + 32.0f;
lucaslwl 22:5c07298d3383 308 }
lucaslwl 22:5c07298d3383 309
lucaslwl 22:5c07298d3383 310 //******************************************************************************
lucaslwl 22:5c07298d3383 311 int MAX30205::reg_THYST_Read(uint16_t *value) {
lucaslwl 22:5c07298d3383 312 return reg_read16(MAX30205_THYST, value);
lucaslwl 22:5c07298d3383 313 }
lucaslwl 22:5c07298d3383 314
lucaslwl 22:5c07298d3383 315 //******************************************************************************
lucaslwl 22:5c07298d3383 316 int MAX30205::reg_THYST_Write(uint16_t value) {
lucaslwl 22:5c07298d3383 317 return reg_write16(MAX30205_THYST, value);
lucaslwl 22:5c07298d3383 318 }