initial gamma radiation monitoring code for MAX32620FTHR, hackster.io contest

Committer:
gov1
Date:
Mon Jul 30 03:14:20 2018 +0000
Revision:
0:3c2caf995376
the hackster.io contest project

Who changed what in which revision?

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