MAX17055 driver

Dependents:   MAX32620FTHR_FuelGauge MAX32620FTHR_GPS_Tracker

Committer:
jessexm
Date:
Tue May 01 17:07:51 2018 +0000
Revision:
0:1520ede29bc1
Initial commit

Who changed what in which revision?

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