Ahmad Alkaff / Mbed 2 deprecated CS3237

Dependencies:   mbed

Committer:
AhmadAlkaff
Date:
Wed Oct 09 09:38:09 2019 +0000
Revision:
0:7b5d37ca532f
Initial Commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AhmadAlkaff 0:7b5d37ca532f 1 /*******************************************************************************
AhmadAlkaff 0:7b5d37ca532f 2 * Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved.
AhmadAlkaff 0:7b5d37ca532f 3 *
AhmadAlkaff 0:7b5d37ca532f 4 * Permission is hereby granted, free of charge, to any person obtaining a
AhmadAlkaff 0:7b5d37ca532f 5 * copy of this software and associated documentation files (the "Software"),
AhmadAlkaff 0:7b5d37ca532f 6 * to deal in the Software without restriction, including without limitation
AhmadAlkaff 0:7b5d37ca532f 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
AhmadAlkaff 0:7b5d37ca532f 8 * and/or sell copies of the Software, and to permit persons to whom the
AhmadAlkaff 0:7b5d37ca532f 9 * Software is furnished to do so, subject to the following conditions:
AhmadAlkaff 0:7b5d37ca532f 10 *
AhmadAlkaff 0:7b5d37ca532f 11 * The above copyright notice and this permission notice shall be included
AhmadAlkaff 0:7b5d37ca532f 12 * in all copies or substantial portions of the Software.
AhmadAlkaff 0:7b5d37ca532f 13 *
AhmadAlkaff 0:7b5d37ca532f 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
AhmadAlkaff 0:7b5d37ca532f 15 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
AhmadAlkaff 0:7b5d37ca532f 16 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
AhmadAlkaff 0:7b5d37ca532f 17 * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
AhmadAlkaff 0:7b5d37ca532f 18 * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
AhmadAlkaff 0:7b5d37ca532f 19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
AhmadAlkaff 0:7b5d37ca532f 20 * OTHER DEALINGS IN THE SOFTWARE.
AhmadAlkaff 0:7b5d37ca532f 21 *
AhmadAlkaff 0:7b5d37ca532f 22 * Except as contained in this notice, the name of Maxim Integrated
AhmadAlkaff 0:7b5d37ca532f 23 * Products, Inc. shall not be used except as stated in the Maxim Integrated
AhmadAlkaff 0:7b5d37ca532f 24 * Products, Inc. Branding Policy.
AhmadAlkaff 0:7b5d37ca532f 25 *
AhmadAlkaff 0:7b5d37ca532f 26 * The mere transfer of this software does not imply any licenses
AhmadAlkaff 0:7b5d37ca532f 27 * of trade secrets, proprietary technology, copyrights, patents,
AhmadAlkaff 0:7b5d37ca532f 28 * trademarks, maskwork rights, or any other form of intellectual
AhmadAlkaff 0:7b5d37ca532f 29 * property whatsoever. Maxim Integrated Products, Inc. retains all
AhmadAlkaff 0:7b5d37ca532f 30 * ownership rights.
AhmadAlkaff 0:7b5d37ca532f 31 *******************************************************************************
AhmadAlkaff 0:7b5d37ca532f 32 */
AhmadAlkaff 0:7b5d37ca532f 33 #include "MAX30205.h"
AhmadAlkaff 0:7b5d37ca532f 34
AhmadAlkaff 0:7b5d37ca532f 35 //******************************************************************************
AhmadAlkaff 0:7b5d37ca532f 36 MAX30205::MAX30205(PinName sda, PinName scl, int slaveAddress) :
AhmadAlkaff 0:7b5d37ca532f 37 slaveAddress(slaveAddress) {
AhmadAlkaff 0:7b5d37ca532f 38 i2c = new I2C(sda, scl);
AhmadAlkaff 0:7b5d37ca532f 39 isOwner = true;
AhmadAlkaff 0:7b5d37ca532f 40 i2c->frequency(100000);
AhmadAlkaff 0:7b5d37ca532f 41 }
AhmadAlkaff 0:7b5d37ca532f 42
AhmadAlkaff 0:7b5d37ca532f 43 //******************************************************************************
AhmadAlkaff 0:7b5d37ca532f 44 MAX30205::MAX30205(I2C *i2c, int slaveAddress) : slaveAddress(slaveAddress) {
AhmadAlkaff 0:7b5d37ca532f 45 this->i2c = i2c;
AhmadAlkaff 0:7b5d37ca532f 46 i2c->frequency(100000);
AhmadAlkaff 0:7b5d37ca532f 47 isOwner = false;
AhmadAlkaff 0:7b5d37ca532f 48 }
AhmadAlkaff 0:7b5d37ca532f 49
AhmadAlkaff 0:7b5d37ca532f 50 //******************************************************************************
AhmadAlkaff 0:7b5d37ca532f 51 MAX30205::~MAX30205(void) {
AhmadAlkaff 0:7b5d37ca532f 52 if (isOwner == true) {
AhmadAlkaff 0:7b5d37ca532f 53 delete i2c;
AhmadAlkaff 0:7b5d37ca532f 54 }
AhmadAlkaff 0:7b5d37ca532f 55 }
AhmadAlkaff 0:7b5d37ca532f 56
AhmadAlkaff 0:7b5d37ca532f 57 //******************************************************************************
AhmadAlkaff 0:7b5d37ca532f 58 int MAX30205::reg_write(char reg, char value) {
AhmadAlkaff 0:7b5d37ca532f 59 int result;
AhmadAlkaff 0:7b5d37ca532f 60 char cmdData[2] = {(char)reg, value};
AhmadAlkaff 0:7b5d37ca532f 61 result = i2c->write(slaveAddress, cmdData, 2);
AhmadAlkaff 0:7b5d37ca532f 62 if (result != 0){
AhmadAlkaff 0:7b5d37ca532f 63 return -1;
AhmadAlkaff 0:7b5d37ca532f 64 }
AhmadAlkaff 0:7b5d37ca532f 65 return 0;
AhmadAlkaff 0:7b5d37ca532f 66 }
AhmadAlkaff 0:7b5d37ca532f 67
AhmadAlkaff 0:7b5d37ca532f 68 //******************************************************************************
AhmadAlkaff 0:7b5d37ca532f 69 int MAX30205::reg_write16(char reg, uint16_t value) {
AhmadAlkaff 0:7b5d37ca532f 70 int result;
AhmadAlkaff 0:7b5d37ca532f 71 char hi = (value >> 8) & 0xFF;
AhmadAlkaff 0:7b5d37ca532f 72 char lo = value & 0xFF;
AhmadAlkaff 0:7b5d37ca532f 73 char cmdData[3] = {reg, hi, lo};
AhmadAlkaff 0:7b5d37ca532f 74 result = i2c->write(slaveAddress, cmdData, 3);
AhmadAlkaff 0:7b5d37ca532f 75 if (result != 0) {
AhmadAlkaff 0:7b5d37ca532f 76 return -1;
AhmadAlkaff 0:7b5d37ca532f 77 }
AhmadAlkaff 0:7b5d37ca532f 78 return 0;
AhmadAlkaff 0:7b5d37ca532f 79 }
AhmadAlkaff 0:7b5d37ca532f 80
AhmadAlkaff 0:7b5d37ca532f 81 //******************************************************************************
AhmadAlkaff 0:7b5d37ca532f 82 int MAX30205::reg_read(char reg, char *value) {
AhmadAlkaff 0:7b5d37ca532f 83 int result;
AhmadAlkaff 0:7b5d37ca532f 84 char cmdData[1] = {reg};
AhmadAlkaff 0:7b5d37ca532f 85
AhmadAlkaff 0:7b5d37ca532f 86 result = i2c->write(slaveAddress, cmdData, 1);
AhmadAlkaff 0:7b5d37ca532f 87 if (result != 0) {
AhmadAlkaff 0:7b5d37ca532f 88 return -1;
AhmadAlkaff 0:7b5d37ca532f 89 }
AhmadAlkaff 0:7b5d37ca532f 90 result = i2c->read(slaveAddress, value, 1);
AhmadAlkaff 0:7b5d37ca532f 91 if (result != 0){
AhmadAlkaff 0:7b5d37ca532f 92 return -1;
AhmadAlkaff 0:7b5d37ca532f 93 }
AhmadAlkaff 0:7b5d37ca532f 94 return 0;
AhmadAlkaff 0:7b5d37ca532f 95 }
AhmadAlkaff 0:7b5d37ca532f 96
AhmadAlkaff 0:7b5d37ca532f 97 //******************************************************************************
AhmadAlkaff 0:7b5d37ca532f 98 int MAX30205::reg_read16(char reg, uint16_t *value) {
AhmadAlkaff 0:7b5d37ca532f 99 int result;
AhmadAlkaff 0:7b5d37ca532f 100 char data[2];
AhmadAlkaff 0:7b5d37ca532f 101 char cmdData[1] = {reg};
AhmadAlkaff 0:7b5d37ca532f 102 result = i2c->write(slaveAddress, cmdData, 1);
AhmadAlkaff 0:7b5d37ca532f 103 if (result != 0) {
AhmadAlkaff 0:7b5d37ca532f 104 return -1;
AhmadAlkaff 0:7b5d37ca532f 105 }
AhmadAlkaff 0:7b5d37ca532f 106 result = i2c->read(slaveAddress, data, 2);
AhmadAlkaff 0:7b5d37ca532f 107 if (result != 0) {
AhmadAlkaff 0:7b5d37ca532f 108 return -1;
AhmadAlkaff 0:7b5d37ca532f 109 }
AhmadAlkaff 0:7b5d37ca532f 110 *value = (data[0] << 8) + data[1];
AhmadAlkaff 0:7b5d37ca532f 111 return 0;
AhmadAlkaff 0:7b5d37ca532f 112 }
AhmadAlkaff 0:7b5d37ca532f 113
AhmadAlkaff 0:7b5d37ca532f 114 //******************************************************************************
AhmadAlkaff 0:7b5d37ca532f 115 int MAX30205::readTemperature(uint16_t *value) {
AhmadAlkaff 0:7b5d37ca532f 116 uint8_t data[2];
AhmadAlkaff 0:7b5d37ca532f 117 int status;
AhmadAlkaff 0:7b5d37ca532f 118 status = reg_read16(MAX30205_Temperature, (uint16_t *)&data);
AhmadAlkaff 0:7b5d37ca532f 119 *value = (data[0] << 8) + data[1];
AhmadAlkaff 0:7b5d37ca532f 120 return status;
AhmadAlkaff 0:7b5d37ca532f 121 }
AhmadAlkaff 0:7b5d37ca532f 122
AhmadAlkaff 0:7b5d37ca532f 123 //******************************************************************************
AhmadAlkaff 0:7b5d37ca532f 124 float MAX30205::toCelsius(unsigned int rawTemp) {
AhmadAlkaff 0:7b5d37ca532f 125 float val;
AhmadAlkaff 0:7b5d37ca532f 126 float val1, val2;
AhmadAlkaff 0:7b5d37ca532f 127 val1 = (float)(rawTemp >> 8);
AhmadAlkaff 0:7b5d37ca532f 128 val2 = (float)(rawTemp & 0xFF);
AhmadAlkaff 0:7b5d37ca532f 129 val = val2 + (val1 / 256.0f);
AhmadAlkaff 0:7b5d37ca532f 130 return val;
AhmadAlkaff 0:7b5d37ca532f 131 }
AhmadAlkaff 0:7b5d37ca532f 132
AhmadAlkaff 0:7b5d37ca532f 133 //******************************************************************************
AhmadAlkaff 0:7b5d37ca532f 134 float MAX30205::toFahrenheit(float temperatureC) {
AhmadAlkaff 0:7b5d37ca532f 135 return temperatureC * 9.0f / 5.0f + 32.0f;
AhmadAlkaff 0:7b5d37ca532f 136 }
AhmadAlkaff 0:7b5d37ca532f 137
AhmadAlkaff 0:7b5d37ca532f 138 //******************************************************************************
AhmadAlkaff 0:7b5d37ca532f 139 int MAX30205::reg_THYST_Read(uint16_t *value) {
AhmadAlkaff 0:7b5d37ca532f 140 return reg_read16(MAX30205_THYST, value);
AhmadAlkaff 0:7b5d37ca532f 141 }
AhmadAlkaff 0:7b5d37ca532f 142
AhmadAlkaff 0:7b5d37ca532f 143 //******************************************************************************
AhmadAlkaff 0:7b5d37ca532f 144 int MAX30205::reg_THYST_Write(uint16_t value) {
AhmadAlkaff 0:7b5d37ca532f 145 return reg_write16(MAX30205_THYST, value);
AhmadAlkaff 0:7b5d37ca532f 146 }