This version is the one to be submitted as a part the Hackster.io contest, Unleash Invisible Intelligence

Committer:
gov1
Date:
Tue Jul 31 16:30:32 2018 +0000
Revision:
0:a761fba7f8a8
complete version with emer. batt low check

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gov1 0:a761fba7f8a8 1 /*******************************************************************************
gov1 0:a761fba7f8a8 2 * Copyright (C) 2018 Maxim Integrated Products, Inc., All Rights Reserved.
gov1 0:a761fba7f8a8 3 *
gov1 0:a761fba7f8a8 4 * Permission is hereby granted, free of charge, to any person obtaining a
gov1 0:a761fba7f8a8 5 * copy of this software and associated documentation files (the "Software"),
gov1 0:a761fba7f8a8 6 * to deal in the Software without restriction, including without limitation
gov1 0:a761fba7f8a8 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
gov1 0:a761fba7f8a8 8 * and/or sell copies of the Software, and to permit persons to whom the
gov1 0:a761fba7f8a8 9 * Software is furnished to do so, subject to the following conditions:
gov1 0:a761fba7f8a8 10 *
gov1 0:a761fba7f8a8 11 * The above copyright notice and this permission notice shall be included
gov1 0:a761fba7f8a8 12 * in all copies or substantial portions of the Software.
gov1 0:a761fba7f8a8 13 *
gov1 0:a761fba7f8a8 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
gov1 0:a761fba7f8a8 15 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
gov1 0:a761fba7f8a8 16 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
gov1 0:a761fba7f8a8 17 * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
gov1 0:a761fba7f8a8 18 * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
gov1 0:a761fba7f8a8 19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
gov1 0:a761fba7f8a8 20 * OTHER DEALINGS IN THE SOFTWARE.
gov1 0:a761fba7f8a8 21 *
gov1 0:a761fba7f8a8 22 * Except as contained in this notice, the name of Maxim Integrated
gov1 0:a761fba7f8a8 23 * Products, Inc. shall not be used except as stated in the Maxim Integrated
gov1 0:a761fba7f8a8 24 * Products, Inc. Branding Policy.
gov1 0:a761fba7f8a8 25 *
gov1 0:a761fba7f8a8 26 * The mere transfer of this software does not imply any licenses
gov1 0:a761fba7f8a8 27 * of trade secrets, proprietary technology, copyrights, patents,
gov1 0:a761fba7f8a8 28 * trademarks, maskwork rights, or any other form of intellectual
gov1 0:a761fba7f8a8 29 * property whatsoever. Maxim Integrated Products, Inc. retains all
gov1 0:a761fba7f8a8 30 * ownership rights.
gov1 0:a761fba7f8a8 31 *******************************************************************************
gov1 0:a761fba7f8a8 32 */
gov1 0:a761fba7f8a8 33
gov1 0:a761fba7f8a8 34 #include "MAX17055.h"
gov1 0:a761fba7f8a8 35
gov1 0:a761fba7f8a8 36 //******************************************************************************
gov1 0:a761fba7f8a8 37 MAX17055::MAX17055(I2C &i2c, int address) :
gov1 0:a761fba7f8a8 38 i2c(i2c),
gov1 0:a761fba7f8a8 39 addr(address)
gov1 0:a761fba7f8a8 40 {
gov1 0:a761fba7f8a8 41 }
gov1 0:a761fba7f8a8 42
gov1 0:a761fba7f8a8 43 //******************************************************************************
gov1 0:a761fba7f8a8 44 MAX17055::~MAX17055()
gov1 0:a761fba7f8a8 45 {
gov1 0:a761fba7f8a8 46 }
gov1 0:a761fba7f8a8 47
gov1 0:a761fba7f8a8 48 //******************************************************************************
gov1 0:a761fba7f8a8 49 void MAX17055::init(float r_sense)
gov1 0:a761fba7f8a8 50 {
gov1 0:a761fba7f8a8 51 this->r_sense = r_sense;
gov1 0:a761fba7f8a8 52 i_lsb = MAX17055_I_LSB_UV / r_sense;
gov1 0:a761fba7f8a8 53 i_min_max_lsb = MAX17055_I_MAX_MIN_LSB_MV / r_sense;
gov1 0:a761fba7f8a8 54 }
gov1 0:a761fba7f8a8 55
gov1 0:a761fba7f8a8 56 //******************************************************************************
gov1 0:a761fba7f8a8 57 int MAX17055::status(int *value)
gov1 0:a761fba7f8a8 58 {
gov1 0:a761fba7f8a8 59 char buf[2];
gov1 0:a761fba7f8a8 60
gov1 0:a761fba7f8a8 61 if (readReg(MAX17055::STATUS, buf, 2)) {
gov1 0:a761fba7f8a8 62 return MAX17055_ERROR;
gov1 0:a761fba7f8a8 63 }
gov1 0:a761fba7f8a8 64
gov1 0:a761fba7f8a8 65 *value = (unsigned int)((buf[1] << 8) | buf[0]);
gov1 0:a761fba7f8a8 66
gov1 0:a761fba7f8a8 67 return MAX17055_NO_ERROR;
gov1 0:a761fba7f8a8 68 }
gov1 0:a761fba7f8a8 69
gov1 0:a761fba7f8a8 70 //******************************************************************************
gov1 0:a761fba7f8a8 71 int MAX17055::v_cell(int *value)
gov1 0:a761fba7f8a8 72 {
gov1 0:a761fba7f8a8 73 char buf[2];
gov1 0:a761fba7f8a8 74
gov1 0:a761fba7f8a8 75 if (readReg(MAX17055::V_CELL, buf, 2)) {
gov1 0:a761fba7f8a8 76 return MAX17055_ERROR;
gov1 0:a761fba7f8a8 77 }
gov1 0:a761fba7f8a8 78
gov1 0:a761fba7f8a8 79 *value = (unsigned int)((buf[1] << 8) | buf[0]);
gov1 0:a761fba7f8a8 80
gov1 0:a761fba7f8a8 81 return MAX17055_NO_ERROR;
gov1 0:a761fba7f8a8 82 }
gov1 0:a761fba7f8a8 83
gov1 0:a761fba7f8a8 84 //******************************************************************************
gov1 0:a761fba7f8a8 85 int MAX17055::v_cell(float *value)
gov1 0:a761fba7f8a8 86 {
gov1 0:a761fba7f8a8 87 int v;
gov1 0:a761fba7f8a8 88
gov1 0:a761fba7f8a8 89 if (v_cell(&v)) {
gov1 0:a761fba7f8a8 90 return MAX17055_ERROR;
gov1 0:a761fba7f8a8 91 }
gov1 0:a761fba7f8a8 92
gov1 0:a761fba7f8a8 93 *value = v * MAX17055_V_LSB_MV;
gov1 0:a761fba7f8a8 94
gov1 0:a761fba7f8a8 95 return MAX17055_NO_ERROR;
gov1 0:a761fba7f8a8 96 }
gov1 0:a761fba7f8a8 97
gov1 0:a761fba7f8a8 98 /** ************************************************************************ **/
gov1 0:a761fba7f8a8 99 /** ************************ added by gv 7/8/2018 ************************** **/
gov1 0:a761fba7f8a8 100 /** ************************************************************************ **/
gov1 0:a761fba7f8a8 101 int MAX17055::soc1(int *value)
gov1 0:a761fba7f8a8 102 {
gov1 0:a761fba7f8a8 103 char buf[2];
gov1 0:a761fba7f8a8 104
gov1 0:a761fba7f8a8 105 if (readReg(MAX17055::REP_SOC,buf,2))
gov1 0:a761fba7f8a8 106 {
gov1 0:a761fba7f8a8 107 return MAX17055_ERROR;
gov1 0:a761fba7f8a8 108 }
gov1 0:a761fba7f8a8 109
gov1 0:a761fba7f8a8 110 *value = (unsigned int)((buf[1]<<8) | buf[0]);
gov1 0:a761fba7f8a8 111
gov1 0:a761fba7f8a8 112 return MAX17055_NO_ERROR;
gov1 0:a761fba7f8a8 113 }
gov1 0:a761fba7f8a8 114
gov1 0:a761fba7f8a8 115 int MAX17055::soc2(int *valueLow, int *valueHigh)
gov1 0:a761fba7f8a8 116 {
gov1 0:a761fba7f8a8 117
gov1 0:a761fba7f8a8 118 char buf[2];
gov1 0:a761fba7f8a8 119
gov1 0:a761fba7f8a8 120 if (readReg(MAX17055::REP_SOC, buf, 2)) {
gov1 0:a761fba7f8a8 121 return MAX17055_ERROR;
gov1 0:a761fba7f8a8 122 }
gov1 0:a761fba7f8a8 123
gov1 0:a761fba7f8a8 124 *valueHigh = (unsigned char)buf[1];
gov1 0:a761fba7f8a8 125 *valueLow = (unsigned char)buf[0];
gov1 0:a761fba7f8a8 126 return MAX17055_NO_ERROR;
gov1 0:a761fba7f8a8 127
gov1 0:a761fba7f8a8 128 }
gov1 0:a761fba7f8a8 129
gov1 0:a761fba7f8a8 130 int MAX17055::reportSOC(int *valueHigh)
gov1 0:a761fba7f8a8 131 {
gov1 0:a761fba7f8a8 132
gov1 0:a761fba7f8a8 133 char buf[2];
gov1 0:a761fba7f8a8 134
gov1 0:a761fba7f8a8 135 if (readReg(MAX17055::REP_SOC, buf, 2)) {
gov1 0:a761fba7f8a8 136 return MAX17055_ERROR;
gov1 0:a761fba7f8a8 137 }
gov1 0:a761fba7f8a8 138
gov1 0:a761fba7f8a8 139 *valueHigh = (unsigned char)buf[1];
gov1 0:a761fba7f8a8 140
gov1 0:a761fba7f8a8 141 return MAX17055_NO_ERROR;
gov1 0:a761fba7f8a8 142
gov1 0:a761fba7f8a8 143 }
gov1 0:a761fba7f8a8 144
gov1 0:a761fba7f8a8 145 int MAX17055::tte1(int *value)
gov1 0:a761fba7f8a8 146 {
gov1 0:a761fba7f8a8 147 char buf[2];
gov1 0:a761fba7f8a8 148
gov1 0:a761fba7f8a8 149 if (readReg(MAX17055::TTE,buf,2))
gov1 0:a761fba7f8a8 150 {
gov1 0:a761fba7f8a8 151 return MAX17055_ERROR;
gov1 0:a761fba7f8a8 152 }
gov1 0:a761fba7f8a8 153
gov1 0:a761fba7f8a8 154 *value = (unsigned int)((buf[1]<<8) | buf[0]);
gov1 0:a761fba7f8a8 155
gov1 0:a761fba7f8a8 156 return MAX17055_NO_ERROR;
gov1 0:a761fba7f8a8 157 }
gov1 0:a761fba7f8a8 158
gov1 0:a761fba7f8a8 159 int MAX17055::tte2(int *valueLow, int *valueHigh)
gov1 0:a761fba7f8a8 160 {
gov1 0:a761fba7f8a8 161
gov1 0:a761fba7f8a8 162 char buf[2];
gov1 0:a761fba7f8a8 163
gov1 0:a761fba7f8a8 164 if (readReg(MAX17055::TTE, buf, 2)) {
gov1 0:a761fba7f8a8 165 return MAX17055_ERROR;
gov1 0:a761fba7f8a8 166 }
gov1 0:a761fba7f8a8 167
gov1 0:a761fba7f8a8 168 *valueHigh = (unsigned char)buf[1];
gov1 0:a761fba7f8a8 169 *valueLow = (unsigned char)buf[0];
gov1 0:a761fba7f8a8 170
gov1 0:a761fba7f8a8 171 return MAX17055_NO_ERROR;
gov1 0:a761fba7f8a8 172 }
gov1 0:a761fba7f8a8 173
gov1 0:a761fba7f8a8 174
gov1 0:a761fba7f8a8 175 /** ************************************************************************ **/
gov1 0:a761fba7f8a8 176 /** ************************************************************************ **/
gov1 0:a761fba7f8a8 177
gov1 0:a761fba7f8a8 178 //******************************************************************************
gov1 0:a761fba7f8a8 179 int MAX17055::avg_v_cell(int *value)
gov1 0:a761fba7f8a8 180 {
gov1 0:a761fba7f8a8 181 char buf[2];
gov1 0:a761fba7f8a8 182
gov1 0:a761fba7f8a8 183 if (readReg(MAX17055::AVG_V_CELL, buf, 2)) {
gov1 0:a761fba7f8a8 184 return MAX17055_ERROR;
gov1 0:a761fba7f8a8 185 }
gov1 0:a761fba7f8a8 186
gov1 0:a761fba7f8a8 187 *value = (unsigned int)((buf[1] << 8) | buf[0]);
gov1 0:a761fba7f8a8 188
gov1 0:a761fba7f8a8 189 return MAX17055_NO_ERROR;
gov1 0:a761fba7f8a8 190 }
gov1 0:a761fba7f8a8 191
gov1 0:a761fba7f8a8 192 //******************************************************************************
gov1 0:a761fba7f8a8 193 int MAX17055::avg_v_cell(float *value)
gov1 0:a761fba7f8a8 194 {
gov1 0:a761fba7f8a8 195 int avc;
gov1 0:a761fba7f8a8 196
gov1 0:a761fba7f8a8 197 if (avg_v_cell(&avc)) {
gov1 0:a761fba7f8a8 198 return MAX17055_ERROR;
gov1 0:a761fba7f8a8 199 }
gov1 0:a761fba7f8a8 200
gov1 0:a761fba7f8a8 201 *value = avc * MAX17055_V_LSB_MV;
gov1 0:a761fba7f8a8 202
gov1 0:a761fba7f8a8 203 return MAX17055_NO_ERROR;
gov1 0:a761fba7f8a8 204 }
gov1 0:a761fba7f8a8 205
gov1 0:a761fba7f8a8 206 //******************************************************************************
gov1 0:a761fba7f8a8 207 int MAX17055::max_min_volt(int *max, int *min)
gov1 0:a761fba7f8a8 208 {
gov1 0:a761fba7f8a8 209 char buf[2];
gov1 0:a761fba7f8a8 210
gov1 0:a761fba7f8a8 211 if (readReg(MAX17055::MAX_MIN_VOLT, buf, 2)) {
gov1 0:a761fba7f8a8 212 return MAX17055_ERROR;
gov1 0:a761fba7f8a8 213 }
gov1 0:a761fba7f8a8 214
gov1 0:a761fba7f8a8 215 *max = (unsigned char)buf[1];
gov1 0:a761fba7f8a8 216 *min = (unsigned char)buf[0];
gov1 0:a761fba7f8a8 217
gov1 0:a761fba7f8a8 218 return MAX17055_NO_ERROR;
gov1 0:a761fba7f8a8 219 }
gov1 0:a761fba7f8a8 220
gov1 0:a761fba7f8a8 221 //******************************************************************************
gov1 0:a761fba7f8a8 222 int MAX17055::max_min_volt(float *max, float *min)
gov1 0:a761fba7f8a8 223 {
gov1 0:a761fba7f8a8 224 int v_max, v_min;
gov1 0:a761fba7f8a8 225
gov1 0:a761fba7f8a8 226 if (max_min_volt(&v_max, &v_min)) {
gov1 0:a761fba7f8a8 227 return MAX17055_ERROR;
gov1 0:a761fba7f8a8 228 }
gov1 0:a761fba7f8a8 229
gov1 0:a761fba7f8a8 230 *max = v_max * MAX17055_V_MAX_MIN_LSB_MV;
gov1 0:a761fba7f8a8 231 *min = v_min * MAX17055_V_MAX_MIN_LSB_MV;
gov1 0:a761fba7f8a8 232
gov1 0:a761fba7f8a8 233 return MAX17055_NO_ERROR;
gov1 0:a761fba7f8a8 234 }
gov1 0:a761fba7f8a8 235
gov1 0:a761fba7f8a8 236 //******************************************************************************
gov1 0:a761fba7f8a8 237 int MAX17055::current(int *value)
gov1 0:a761fba7f8a8 238 {
gov1 0:a761fba7f8a8 239 char buf[2];
gov1 0:a761fba7f8a8 240
gov1 0:a761fba7f8a8 241 if (readReg(MAX17055::CURRENT, buf, 2)) {
gov1 0:a761fba7f8a8 242 return MAX17055_ERROR;
gov1 0:a761fba7f8a8 243 }
gov1 0:a761fba7f8a8 244
gov1 0:a761fba7f8a8 245 *value = (short int)((buf[1] << 8) | buf[0]);
gov1 0:a761fba7f8a8 246
gov1 0:a761fba7f8a8 247 return MAX17055_NO_ERROR;
gov1 0:a761fba7f8a8 248 }
gov1 0:a761fba7f8a8 249
gov1 0:a761fba7f8a8 250 //******************************************************************************
gov1 0:a761fba7f8a8 251 int MAX17055::current(float *value)
gov1 0:a761fba7f8a8 252 {
gov1 0:a761fba7f8a8 253 int i;
gov1 0:a761fba7f8a8 254
gov1 0:a761fba7f8a8 255 if (current(&i)) {
gov1 0:a761fba7f8a8 256 return MAX17055_ERROR;
gov1 0:a761fba7f8a8 257 }
gov1 0:a761fba7f8a8 258
gov1 0:a761fba7f8a8 259 *value = i * i_lsb;
gov1 0:a761fba7f8a8 260
gov1 0:a761fba7f8a8 261 return MAX17055_NO_ERROR;
gov1 0:a761fba7f8a8 262 }
gov1 0:a761fba7f8a8 263
gov1 0:a761fba7f8a8 264 //******************************************************************************
gov1 0:a761fba7f8a8 265 int MAX17055::avg_current(int *value)
gov1 0:a761fba7f8a8 266 {
gov1 0:a761fba7f8a8 267 char buf[2];
gov1 0:a761fba7f8a8 268
gov1 0:a761fba7f8a8 269 if (readReg(MAX17055::AVG_CURRENT, buf, 2)) {
gov1 0:a761fba7f8a8 270 return MAX17055_ERROR;
gov1 0:a761fba7f8a8 271 }
gov1 0:a761fba7f8a8 272
gov1 0:a761fba7f8a8 273 *value = (short int)((buf[1] << 8) | buf[0]);
gov1 0:a761fba7f8a8 274
gov1 0:a761fba7f8a8 275 return MAX17055_NO_ERROR;
gov1 0:a761fba7f8a8 276 }
gov1 0:a761fba7f8a8 277
gov1 0:a761fba7f8a8 278 //******************************************************************************
gov1 0:a761fba7f8a8 279 int MAX17055::avg_current(float *value)
gov1 0:a761fba7f8a8 280 {
gov1 0:a761fba7f8a8 281 int i_a;
gov1 0:a761fba7f8a8 282
gov1 0:a761fba7f8a8 283 if (avg_current(&i_a)) {
gov1 0:a761fba7f8a8 284 return MAX17055_ERROR;
gov1 0:a761fba7f8a8 285 }
gov1 0:a761fba7f8a8 286
gov1 0:a761fba7f8a8 287 *value = i_a * i_lsb;
gov1 0:a761fba7f8a8 288
gov1 0:a761fba7f8a8 289 return MAX17055_NO_ERROR;
gov1 0:a761fba7f8a8 290 }
gov1 0:a761fba7f8a8 291
gov1 0:a761fba7f8a8 292 //******************************************************************************
gov1 0:a761fba7f8a8 293 int MAX17055::max_min_curr(int *max, int *min)
gov1 0:a761fba7f8a8 294 {
gov1 0:a761fba7f8a8 295 char buf[2];
gov1 0:a761fba7f8a8 296
gov1 0:a761fba7f8a8 297 if (readReg(MAX17055::MAX_MIN_CURR, buf, 2)) {
gov1 0:a761fba7f8a8 298 return MAX17055_ERROR;
gov1 0:a761fba7f8a8 299 }
gov1 0:a761fba7f8a8 300
gov1 0:a761fba7f8a8 301 *max = (signed char)buf[1];
gov1 0:a761fba7f8a8 302 *min = (signed char)buf[0];
gov1 0:a761fba7f8a8 303
gov1 0:a761fba7f8a8 304 return MAX17055_NO_ERROR;
gov1 0:a761fba7f8a8 305 }
gov1 0:a761fba7f8a8 306
gov1 0:a761fba7f8a8 307 //******************************************************************************
gov1 0:a761fba7f8a8 308 int MAX17055::max_min_curr(float *max, float *min)
gov1 0:a761fba7f8a8 309 {
gov1 0:a761fba7f8a8 310 int i_max, i_min;
gov1 0:a761fba7f8a8 311
gov1 0:a761fba7f8a8 312 if (max_min_curr(&i_max, &i_min)) {
gov1 0:a761fba7f8a8 313 return MAX17055_ERROR;
gov1 0:a761fba7f8a8 314 }
gov1 0:a761fba7f8a8 315
gov1 0:a761fba7f8a8 316 *max = i_max * i_min_max_lsb;
gov1 0:a761fba7f8a8 317 *min = i_min * i_min_max_lsb;
gov1 0:a761fba7f8a8 318
gov1 0:a761fba7f8a8 319 return MAX17055_NO_ERROR;
gov1 0:a761fba7f8a8 320 }
gov1 0:a761fba7f8a8 321
gov1 0:a761fba7f8a8 322 //******************************************************************************
gov1 0:a761fba7f8a8 323 int MAX17055::temp(int *value)
gov1 0:a761fba7f8a8 324 {
gov1 0:a761fba7f8a8 325 char buf[2];
gov1 0:a761fba7f8a8 326
gov1 0:a761fba7f8a8 327 if (readReg(MAX17055::TEMP, buf, 2)) {
gov1 0:a761fba7f8a8 328 return MAX17055_ERROR;
gov1 0:a761fba7f8a8 329 }
gov1 0:a761fba7f8a8 330
gov1 0:a761fba7f8a8 331 *value = (short int)((buf[1] << 8) | buf[0]);
gov1 0:a761fba7f8a8 332
gov1 0:a761fba7f8a8 333 return MAX17055_NO_ERROR;
gov1 0:a761fba7f8a8 334 }
gov1 0:a761fba7f8a8 335
gov1 0:a761fba7f8a8 336 //******************************************************************************
gov1 0:a761fba7f8a8 337 int MAX17055::temp(float *value)
gov1 0:a761fba7f8a8 338 {
gov1 0:a761fba7f8a8 339 int t;
gov1 0:a761fba7f8a8 340
gov1 0:a761fba7f8a8 341 if (temp(&t)) {
gov1 0:a761fba7f8a8 342 return MAX17055_ERROR;
gov1 0:a761fba7f8a8 343 }
gov1 0:a761fba7f8a8 344
gov1 0:a761fba7f8a8 345 *value = t * (1.0f / 256);
gov1 0:a761fba7f8a8 346
gov1 0:a761fba7f8a8 347 return MAX17055_NO_ERROR;
gov1 0:a761fba7f8a8 348 }
gov1 0:a761fba7f8a8 349
gov1 0:a761fba7f8a8 350
gov1 0:a761fba7f8a8 351 //******************************************************************************
gov1 0:a761fba7f8a8 352 int MAX17055::avg_ta(int *value)
gov1 0:a761fba7f8a8 353 {
gov1 0:a761fba7f8a8 354 char buf[2];
gov1 0:a761fba7f8a8 355
gov1 0:a761fba7f8a8 356 if (readReg(MAX17055::AVG_TA, buf, 2)) {
gov1 0:a761fba7f8a8 357 return MAX17055_ERROR;
gov1 0:a761fba7f8a8 358 }
gov1 0:a761fba7f8a8 359
gov1 0:a761fba7f8a8 360 *value = (short int)((buf[1] << 8) | buf[0]);
gov1 0:a761fba7f8a8 361
gov1 0:a761fba7f8a8 362 return MAX17055_NO_ERROR;
gov1 0:a761fba7f8a8 363 }
gov1 0:a761fba7f8a8 364
gov1 0:a761fba7f8a8 365 //******************************************************************************
gov1 0:a761fba7f8a8 366 int MAX17055::avg_ta(float *value)
gov1 0:a761fba7f8a8 367 {
gov1 0:a761fba7f8a8 368 int ta;
gov1 0:a761fba7f8a8 369
gov1 0:a761fba7f8a8 370 if (avg_ta(&ta)) {
gov1 0:a761fba7f8a8 371 return MAX17055_ERROR;
gov1 0:a761fba7f8a8 372 }
gov1 0:a761fba7f8a8 373
gov1 0:a761fba7f8a8 374 *value = ta * (1.0f / 256);
gov1 0:a761fba7f8a8 375
gov1 0:a761fba7f8a8 376 return MAX17055_NO_ERROR;
gov1 0:a761fba7f8a8 377 }
gov1 0:a761fba7f8a8 378
gov1 0:a761fba7f8a8 379 //******************************************************************************
gov1 0:a761fba7f8a8 380 int MAX17055::max_min_temp(int *max, int *min)
gov1 0:a761fba7f8a8 381 {
gov1 0:a761fba7f8a8 382 char buf[2];
gov1 0:a761fba7f8a8 383
gov1 0:a761fba7f8a8 384 if (readReg(MAX17055::MAX_MIN_TEMP, buf, 2)) {
gov1 0:a761fba7f8a8 385 return MAX17055_ERROR;
gov1 0:a761fba7f8a8 386 }
gov1 0:a761fba7f8a8 387
gov1 0:a761fba7f8a8 388 *max = (signed char)buf[1];
gov1 0:a761fba7f8a8 389 *min = (signed char)buf[0];
gov1 0:a761fba7f8a8 390
gov1 0:a761fba7f8a8 391 return MAX17055_NO_ERROR;
gov1 0:a761fba7f8a8 392 }
gov1 0:a761fba7f8a8 393
gov1 0:a761fba7f8a8 394 //******************************************************************************
gov1 0:a761fba7f8a8 395 int MAX17055::max_min_temp(float *max, float *min)
gov1 0:a761fba7f8a8 396 {
gov1 0:a761fba7f8a8 397 int t_max, t_min;
gov1 0:a761fba7f8a8 398
gov1 0:a761fba7f8a8 399 if (max_min_temp(&t_max, &t_min)) {
gov1 0:a761fba7f8a8 400 return MAX17055_ERROR;
gov1 0:a761fba7f8a8 401 }
gov1 0:a761fba7f8a8 402
gov1 0:a761fba7f8a8 403 *max = t_max;
gov1 0:a761fba7f8a8 404 *min = t_min;
gov1 0:a761fba7f8a8 405
gov1 0:a761fba7f8a8 406 return MAX17055_NO_ERROR;
gov1 0:a761fba7f8a8 407 }
gov1 0:a761fba7f8a8 408
gov1 0:a761fba7f8a8 409 //******************************************************************************
gov1 0:a761fba7f8a8 410 int MAX17055::writeReg(reg_t reg, char value, bool verify)
gov1 0:a761fba7f8a8 411 {
gov1 0:a761fba7f8a8 412 char buf[] = { (char)reg, value };
gov1 0:a761fba7f8a8 413
gov1 0:a761fba7f8a8 414 if (i2c.write(addr, buf, sizeof(buf))) {
gov1 0:a761fba7f8a8 415 return MAX17055_ERROR;
gov1 0:a761fba7f8a8 416 }
gov1 0:a761fba7f8a8 417
gov1 0:a761fba7f8a8 418 return MAX17055_NO_ERROR;
gov1 0:a761fba7f8a8 419 }
gov1 0:a761fba7f8a8 420
gov1 0:a761fba7f8a8 421 /** ************************************************************************ **/
gov1 0:a761fba7f8a8 422 /** ************ Special to write config to use Thermistor ***************** **/
gov1 0:a761fba7f8a8 423 /** ************************************************************************ **/
gov1 0:a761fba7f8a8 424 int MAX17055::writeConfig()
gov1 0:a761fba7f8a8 425 {
gov1 0:a761fba7f8a8 426 char cmd[3];
gov1 0:a761fba7f8a8 427 cmd[0] = MAX17055::CONFIG;
gov1 0:a761fba7f8a8 428 cmd[1] = 0xA2;
gov1 0:a761fba7f8a8 429 cmd[2] = 0x10;
gov1 0:a761fba7f8a8 430
gov1 0:a761fba7f8a8 431
gov1 0:a761fba7f8a8 432 if (i2c.write(0x6C, cmd, 3))
gov1 0:a761fba7f8a8 433 {
gov1 0:a761fba7f8a8 434 return MAX17055_ERROR;
gov1 0:a761fba7f8a8 435 }
gov1 0:a761fba7f8a8 436 Thread::wait(1);
gov1 0:a761fba7f8a8 437 return MAX17055_NO_ERROR;
gov1 0:a761fba7f8a8 438 }
gov1 0:a761fba7f8a8 439
gov1 0:a761fba7f8a8 440
gov1 0:a761fba7f8a8 441
gov1 0:a761fba7f8a8 442 //******************************************************************************
gov1 0:a761fba7f8a8 443 int MAX17055::writeReg(reg_t reg, uint16_t value, bool verify)
gov1 0:a761fba7f8a8 444 {
gov1 0:a761fba7f8a8 445 char wbuf[3];
gov1 0:a761fba7f8a8 446 char rbuf[2];
gov1 0:a761fba7f8a8 447 int attempt;
gov1 0:a761fba7f8a8 448
gov1 0:a761fba7f8a8 449 wbuf[0] = reg;
gov1 0:a761fba7f8a8 450 wbuf[1] = value;
gov1 0:a761fba7f8a8 451 wbuf[2] = value >> 8;
gov1 0:a761fba7f8a8 452
gov1 0:a761fba7f8a8 453 attempt = 0;
gov1 0:a761fba7f8a8 454
gov1 0:a761fba7f8a8 455 do {
gov1 0:a761fba7f8a8 456 if (i2c.write(addr, wbuf, 3)) return MAX17055_ERROR;
gov1 0:a761fba7f8a8 457
gov1 0:a761fba7f8a8 458 if (!verify) break;
gov1 0:a761fba7f8a8 459
gov1 0:a761fba7f8a8 460 Thread::wait(1);
gov1 0:a761fba7f8a8 461
gov1 0:a761fba7f8a8 462 if (i2c.read(addr, rbuf, 2)) return MAX17055_ERROR;
gov1 0:a761fba7f8a8 463
gov1 0:a761fba7f8a8 464 } while ((((rbuf[1] << 8) | rbuf[0]) != value) && (attempt++ < 3));
gov1 0:a761fba7f8a8 465
gov1 0:a761fba7f8a8 466 if (attempt == 3) return MAX17055_ERROR;
gov1 0:a761fba7f8a8 467
gov1 0:a761fba7f8a8 468 return MAX17055_NO_ERROR;
gov1 0:a761fba7f8a8 469 }
gov1 0:a761fba7f8a8 470
gov1 0:a761fba7f8a8 471 //******************************************************************************
gov1 0:a761fba7f8a8 472 int MAX17055::readReg(reg_t reg, char *value)
gov1 0:a761fba7f8a8 473 {
gov1 0:a761fba7f8a8 474 char buf[] = { (char)reg };
gov1 0:a761fba7f8a8 475
gov1 0:a761fba7f8a8 476 if (i2c.write(addr, buf, sizeof(buf))) {
gov1 0:a761fba7f8a8 477 return MAX17055_ERROR;
gov1 0:a761fba7f8a8 478 }
gov1 0:a761fba7f8a8 479
gov1 0:a761fba7f8a8 480 if (i2c.read(addr, value, 1)) {
gov1 0:a761fba7f8a8 481 return MAX17055_ERROR;
gov1 0:a761fba7f8a8 482 }
gov1 0:a761fba7f8a8 483
gov1 0:a761fba7f8a8 484 return MAX17055_NO_ERROR;
gov1 0:a761fba7f8a8 485 }
gov1 0:a761fba7f8a8 486
gov1 0:a761fba7f8a8 487 //******************************************************************************
gov1 0:a761fba7f8a8 488 int MAX17055::readReg(reg_t reg, char *buf, int len)
gov1 0:a761fba7f8a8 489 {
gov1 0:a761fba7f8a8 490 *buf = (char)reg;
gov1 0:a761fba7f8a8 491
gov1 0:a761fba7f8a8 492 if (i2c.write(addr, buf, 1)) {
gov1 0:a761fba7f8a8 493 return MAX17055_ERROR;
gov1 0:a761fba7f8a8 494 }
gov1 0:a761fba7f8a8 495
gov1 0:a761fba7f8a8 496 if (i2c.read(addr, buf, len)) {
gov1 0:a761fba7f8a8 497 return MAX17055_ERROR;
gov1 0:a761fba7f8a8 498 }
gov1 0:a761fba7f8a8 499
gov1 0:a761fba7f8a8 500 return MAX17055_NO_ERROR;
gov1 0:a761fba7f8a8 501 }