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 #ifndef _MAX17055_H_
jessexm 0:1520ede29bc1 35 #define _MAX17055_H_
jessexm 0:1520ede29bc1 36
jessexm 0:1520ede29bc1 37 #include "mbed.h"
jessexm 0:1520ede29bc1 38
jessexm 0:1520ede29bc1 39 #define MAX17055_I2C_ADDRESS 0x6C
jessexm 0:1520ede29bc1 40
jessexm 0:1520ede29bc1 41 #define MAX17055_NO_ERROR 0
jessexm 0:1520ede29bc1 42 #define MAX17055_ERROR -1
jessexm 0:1520ede29bc1 43
jessexm 0:1520ede29bc1 44 #define MAX17055_V_LSB_MV 7.8125E-5f
jessexm 0:1520ede29bc1 45 #define MAX17055_V_MAX_MIN_LSB_MV 2.0E-2f
jessexm 0:1520ede29bc1 46 #define MAX17055_I_LSB_UV 1.5625E-3f
jessexm 0:1520ede29bc1 47 #define MAX17055_I_MAX_MIN_LSB_MV 0.0004f
jessexm 0:1520ede29bc1 48
jessexm 0:1520ede29bc1 49 /**
jessexm 0:1520ede29bc1 50 * @brief MAX17055 7µA 1-Cell Fuel Gauge with ModelGauge m5 EZ
jessexm 0:1520ede29bc1 51 *
jessexm 0:1520ede29bc1 52 * @details The MAX17055 is a low 7μA operating current fuel gauge which
jessexm 0:1520ede29bc1 53 * implements Maxim ModelGauge™ m5 EZ algorithm. ModelGauge m5 EZ makes
jessexm 0:1520ede29bc1 54 * fuel gauge implementation easy by eliminating battery characterization
jessexm 0:1520ede29bc1 55 * requirements and simplifying host software interaction.
jessexm 0:1520ede29bc1 56 * The ModelGauge m5 EZ robust algorithm provides tolerance against battery
jessexm 0:1520ede29bc1 57 * diversity for most lithium batteries and applications.
jessexm 0:1520ede29bc1 58 * <br>https://www.maximintegrated.com/en/products/power/battery-management/MAX17055.html
jessexm 0:1520ede29bc1 59 *
jessexm 0:1520ede29bc1 60 * @code
jessexm 0:1520ede29bc1 61 * #include "mbed.h"
jessexm 0:1520ede29bc1 62 * #include "MAX17055.h"
jessexm 0:1520ede29bc1 63 *
jessexm 0:1520ede29bc1 64 * // I2C Master 2
jessexm 0:1520ede29bc1 65 * I2C i2c(I2C2_SDA, I2C2_SCL);
jessexm 0:1520ede29bc1 66 *
jessexm 0:1520ede29bc1 67 * MAX17055 max17055(i2c);
jessexm 0:1520ede29bc1 68 *
jessexm 0:1520ede29bc1 69 * int main()
jessexm 0:1520ede29bc1 70 * {
jessexm 0:1520ede29bc1 71 * int status;
jessexm 0:1520ede29bc1 72 * float f_value;
jessexm 0:1520ede29bc1 73 *
jessexm 0:1520ede29bc1 74 * // Set sense resistor value
jessexm 0:1520ede29bc1 75 * max17055.init(0.05f);
jessexm 0:1520ede29bc1 76 *
jessexm 0:1520ede29bc1 77 * // Print status
jessexm 0:1520ede29bc1 78 * max17055.status(&status);
jessexm 0:1520ede29bc1 79 * printf("MAX17055 status: %04X\r\n", (uint16_t)status);
jessexm 0:1520ede29bc1 80 *
jessexm 0:1520ede29bc1 81 * for (;;) {
jessexm 0:1520ede29bc1 82 * // Print formatted voltage, current and temperature values
jessexm 0:1520ede29bc1 83 * max17055.v_cell(&f_value);
jessexm 0:1520ede29bc1 84 * printf("%6.3fV ", f_value);
jessexm 0:1520ede29bc1 85 * max17055.current(&f_value);
jessexm 0:1520ede29bc1 86 * printf("%6.3fI ", f_value);
jessexm 0:1520ede29bc1 87 * max17055.temp(&f_value);
jessexm 0:1520ede29bc1 88 * printf("%6.3fC ", f_value);
jessexm 0:1520ede29bc1 89 * printf("\r\n");
jessexm 0:1520ede29bc1 90 *
jessexm 0:1520ede29bc1 91 * Thread::wait(3000);
jessexm 0:1520ede29bc1 92 * }
jessexm 0:1520ede29bc1 93 * }
jessexm 0:1520ede29bc1 94 * @endcode
jessexm 0:1520ede29bc1 95 */
jessexm 0:1520ede29bc1 96
jessexm 0:1520ede29bc1 97 class MAX17055
jessexm 0:1520ede29bc1 98 {
jessexm 0:1520ede29bc1 99 public:
jessexm 0:1520ede29bc1 100
jessexm 0:1520ede29bc1 101 /**
jessexm 0:1520ede29bc1 102 * @brief Register Address
jessexm 0:1520ede29bc1 103 * @details MAX17055 register addresses
jessexm 0:1520ede29bc1 104 */
jessexm 0:1520ede29bc1 105 typedef enum {
jessexm 0:1520ede29bc1 106 STATUS = 0x00,
jessexm 0:1520ede29bc1 107 V_ALRT_TH,
jessexm 0:1520ede29bc1 108 T_ALRT_TH,
jessexm 0:1520ede29bc1 109 S_ALRT_TH,
jessexm 0:1520ede29bc1 110 AT_RATE,
jessexm 0:1520ede29bc1 111 REP_CAP,
jessexm 0:1520ede29bc1 112 REP_SOC,
jessexm 0:1520ede29bc1 113 AGE,
jessexm 0:1520ede29bc1 114 TEMP,
jessexm 0:1520ede29bc1 115 V_CELL,
jessexm 0:1520ede29bc1 116 CURRENT,
jessexm 0:1520ede29bc1 117 AVG_CURRENT,
jessexm 0:1520ede29bc1 118 Q_RESIDUAL,
jessexm 0:1520ede29bc1 119 MIX_SOC,
jessexm 0:1520ede29bc1 120 AV_SOC,
jessexm 0:1520ede29bc1 121 MIX_CAP,
jessexm 0:1520ede29bc1 122 FULL_CAP_REP,
jessexm 0:1520ede29bc1 123 TTE,
jessexm 0:1520ede29bc1 124 QR_TABLE_00,
jessexm 0:1520ede29bc1 125 FULL_SOC_THR,
jessexm 0:1520ede29bc1 126 R_CELL,
jessexm 0:1520ede29bc1 127 AVG_TA = 0x16,
jessexm 0:1520ede29bc1 128 CYCLES,
jessexm 0:1520ede29bc1 129 DESIGN_CAP,
jessexm 0:1520ede29bc1 130 AVG_V_CELL,
jessexm 0:1520ede29bc1 131 MAX_MIN_TEMP,
jessexm 0:1520ede29bc1 132 MAX_MIN_VOLT,
jessexm 0:1520ede29bc1 133 MAX_MIN_CURR,
jessexm 0:1520ede29bc1 134 CONFIG,
jessexm 0:1520ede29bc1 135 I_CHG_TERM,
jessexm 0:1520ede29bc1 136 AV_CAP,
jessexm 0:1520ede29bc1 137 TTF,
jessexm 0:1520ede29bc1 138 DEV_NAME,
jessexm 0:1520ede29bc1 139 QR_TABLE_10,
jessexm 0:1520ede29bc1 140 FULL_CAP_NOM,
jessexm 0:1520ede29bc1 141 AIN = 0x27,
jessexm 0:1520ede29bc1 142 LEARN_CFG,
jessexm 0:1520ede29bc1 143 FILTER_CFG,
jessexm 0:1520ede29bc1 144 RELAX_CFG,
jessexm 0:1520ede29bc1 145 MISC_CFG,
jessexm 0:1520ede29bc1 146 T_GAIN,
jessexm 0:1520ede29bc1 147 T_OFF,
jessexm 0:1520ede29bc1 148 C_GAIN,
jessexm 0:1520ede29bc1 149 C_OFF,
jessexm 0:1520ede29bc1 150 QR_TABLE_20 = 0x32,
jessexm 0:1520ede29bc1 151 DIE_TEMP = 0x34,
jessexm 0:1520ede29bc1 152 FULL_CAP,
jessexm 0:1520ede29bc1 153 R_COMP0 = 0x38,
jessexm 0:1520ede29bc1 154 TEMP_CO,
jessexm 0:1520ede29bc1 155 V_EMPTY,
jessexm 0:1520ede29bc1 156 F_STAT = 0x3D,
jessexm 0:1520ede29bc1 157 TIMER,
jessexm 0:1520ede29bc1 158 SHDN_TIMER,
jessexm 0:1520ede29bc1 159 USER_MEM1,
jessexm 0:1520ede29bc1 160 QR_TABLE_30 = 0x42,
jessexm 0:1520ede29bc1 161 R_GAIN,
jessexm 0:1520ede29bc1 162 DQ_ACC = 0x45,
jessexm 0:1520ede29bc1 163 DP_ACC,
jessexm 0:1520ede29bc1 164 CONVG_CFG = 0x49,
jessexm 0:1520ede29bc1 165 VF_REM_CAP,
jessexm 0:1520ede29bc1 166 QH = 0x4D,
jessexm 0:1520ede29bc1 167 STATUS_2 = 0xB0,
jessexm 0:1520ede29bc1 168 POWER,
jessexm 0:1520ede29bc1 169 ID_USER_MEM2,
jessexm 0:1520ede29bc1 170 AVG_POWER,
jessexm 0:1520ede29bc1 171 I_ALRT_TH,
jessexm 0:1520ede29bc1 172 TTF_CFG,
jessexm 0:1520ede29bc1 173 CV_MIX_CAP,
jessexm 0:1520ede29bc1 174 CV_HALF_TIME,
jessexm 0:1520ede29bc1 175 CG_TEMP_CO,
jessexm 0:1520ede29bc1 176 CURVE,
jessexm 0:1520ede29bc1 177 HIB_CFG,
jessexm 0:1520ede29bc1 178 CONFIG2,
jessexm 0:1520ede29bc1 179 V_RIPPLE,
jessexm 0:1520ede29bc1 180 RIPPLE_CFG,
jessexm 0:1520ede29bc1 181 TIMER_H,
jessexm 0:1520ede29bc1 182 R_SENSE_USER_MEM3 = 0xD0,
jessexm 0:1520ede29bc1 183 SC_OCV_LIM,
jessexm 0:1520ede29bc1 184 SOC_HOLD,
jessexm 0:1520ede29bc1 185 MAX_PEAK_POWER,
jessexm 0:1520ede29bc1 186 SUS_PEAK_POWER,
jessexm 0:1520ede29bc1 187 PACK_RESISTANCE,
jessexm 0:1520ede29bc1 188 SYS_RESISTANCE,
jessexm 0:1520ede29bc1 189 MIN_SYS_VOLTAGE,
jessexm 0:1520ede29bc1 190 MPP_CURRENT,
jessexm 0:1520ede29bc1 191 SPP_CURRENT,
jessexm 0:1520ede29bc1 192 MODEL_CFG,
jessexm 0:1520ede29bc1 193 AT_Q_RESIDUAL,
jessexm 0:1520ede29bc1 194 AT_TTE,
jessexm 0:1520ede29bc1 195 AT_AV_SOC,
jessexm 0:1520ede29bc1 196 AT_AV_CA
jessexm 0:1520ede29bc1 197 } reg_t;
jessexm 0:1520ede29bc1 198
jessexm 0:1520ede29bc1 199 /**
jessexm 0:1520ede29bc1 200 * MAX17055 constructor
jessexm 0:1520ede29bc1 201 *
jessexm 0:1520ede29bc1 202 * @param i2c I2C object to use.
jessexm 0:1520ede29bc1 203 * @param address Slave Address of the device.
jessexm 0:1520ede29bc1 204 */
jessexm 0:1520ede29bc1 205 MAX17055(I2C &i2c, int address = MAX17055_I2C_ADDRESS);
jessexm 0:1520ede29bc1 206
jessexm 0:1520ede29bc1 207 /**
jessexm 0:1520ede29bc1 208 * MAX17055 destructor
jessexm 0:1520ede29bc1 209 */
jessexm 0:1520ede29bc1 210 ~MAX17055();
jessexm 0:1520ede29bc1 211
jessexm 0:1520ede29bc1 212 /**
jessexm 0:1520ede29bc1 213 * @brief Initialize driver state
jessexm 0:1520ede29bc1 214 * @details Initialize driver with supplied sense resistor value.
jessexm 0:1520ede29bc1 215 * @param value The sense resistor value in ohms
jessexm 0:1520ede29bc1 216 * @returns 0 if no errors, -1 if error
jessexm 0:1520ede29bc1 217 */
jessexm 0:1520ede29bc1 218 void init(float r_sense);
jessexm 0:1520ede29bc1 219
jessexm 0:1520ede29bc1 220 /**
jessexm 0:1520ede29bc1 221 * @brief Read status register
jessexm 0:1520ede29bc1 222 * @details Read status register.
jessexm 0:1520ede29bc1 223 * @param value The location to store value read
jessexm 0:1520ede29bc1 224 * @returns 0 if no errors, -1 if error
jessexm 0:1520ede29bc1 225 */
jessexm 0:1520ede29bc1 226 int status(int *value);
jessexm 0:1520ede29bc1 227
jessexm 0:1520ede29bc1 228 /**
jessexm 0:1520ede29bc1 229 * @brief Read VCell register
jessexm 0:1520ede29bc1 230 * @details Read VCell register reports the voltage measured between
jessexm 0:1520ede29bc1 231 * BATT and CSP.
jessexm 0:1520ede29bc1 232 * @param value The location to store value read
jessexm 0:1520ede29bc1 233 * @returns 0 if no errors, -1 if error
jessexm 0:1520ede29bc1 234 */
jessexm 0:1520ede29bc1 235 int v_cell(int *value);
jessexm 0:1520ede29bc1 236
jessexm 0:1520ede29bc1 237 /**
jessexm 0:1520ede29bc1 238 * @brief Read VCell register
jessexm 0:1520ede29bc1 239 * @details The VCell register reports the voltage measured between
jessexm 0:1520ede29bc1 240 * BATT and CSP.
jessexm 0:1520ede29bc1 241 * @param value The location to store value read
jessexm 0:1520ede29bc1 242 * @returns 0 if no errors, -1 if error
jessexm 0:1520ede29bc1 243 */
jessexm 0:1520ede29bc1 244 int v_cell(float *value);
jessexm 0:1520ede29bc1 245
jessexm 0:1520ede29bc1 246 /**
jessexm 0:1520ede29bc1 247 * @brief Read AvgVCell register
jessexm 0:1520ede29bc1 248 * @details The AvgVCell register reports an average of the VCell
jessexm 0:1520ede29bc1 249 * register readings.
jessexm 0:1520ede29bc1 250 * @param value The location to store value read
jessexm 0:1520ede29bc1 251 * @returns 0 if no errors, -1 if error
jessexm 0:1520ede29bc1 252 */
jessexm 0:1520ede29bc1 253 int avg_v_cell(int *value);
jessexm 0:1520ede29bc1 254
jessexm 0:1520ede29bc1 255 /**
jessexm 0:1520ede29bc1 256 * @brief Read AvgVCell register
jessexm 0:1520ede29bc1 257 * @details The AvgVCell register reports an average of the VCell
jessexm 0:1520ede29bc1 258 * register readings.
jessexm 0:1520ede29bc1 259 * @param value The location to store value read
jessexm 0:1520ede29bc1 260 * @returns 0 if no errors, -1 if error
jessexm 0:1520ede29bc1 261 */
jessexm 0:1520ede29bc1 262 int avg_v_cell(float *value);
jessexm 0:1520ede29bc1 263
jessexm 0:1520ede29bc1 264 /**
jessexm 0:1520ede29bc1 265 * @brief Read MaxMinVolt register
jessexm 0:1520ede29bc1 266 * @details The MaxMinVolt register maintains the maximum and minimum
jessexm 0:1520ede29bc1 267 * of VCell register values since device reset.
jessexm 0:1520ede29bc1 268 * @param value The location to store value read
jessexm 0:1520ede29bc1 269 * @returns 0 if no errors, -1 if error
jessexm 0:1520ede29bc1 270 */
jessexm 0:1520ede29bc1 271 int max_min_volt(int *max, int *min);
jessexm 0:1520ede29bc1 272
jessexm 0:1520ede29bc1 273 /**
jessexm 0:1520ede29bc1 274 * @brief Read MaxMinVolt register
jessexm 0:1520ede29bc1 275 * @details The MaxMinVolt register maintains the maximum and minimum
jessexm 0:1520ede29bc1 276 * of VCell register values since device reset.
jessexm 0:1520ede29bc1 277 * @param value The location to store value read
jessexm 0:1520ede29bc1 278 * @returns 0 if no errors, -1 if error
jessexm 0:1520ede29bc1 279 */
jessexm 0:1520ede29bc1 280 int max_min_volt(float *max, float *min);
jessexm 0:1520ede29bc1 281
jessexm 0:1520ede29bc1 282 /**
jessexm 0:1520ede29bc1 283 * @brief Read Current register
jessexm 0:1520ede29bc1 284 * @details The Current register reports the voltage between the
jessexm 0:1520ede29bc1 285 * CSP and CSN pins.
jessexm 0:1520ede29bc1 286 * @param value The location to store value read
jessexm 0:1520ede29bc1 287 * @returns 0 if no errors, -1 if error
jessexm 0:1520ede29bc1 288 */
jessexm 0:1520ede29bc1 289 int current(int *value);
jessexm 0:1520ede29bc1 290
jessexm 0:1520ede29bc1 291 /**
jessexm 0:1520ede29bc1 292 * @brief Read Current register
jessexm 0:1520ede29bc1 293 * @details The Current register reports the voltage between the
jessexm 0:1520ede29bc1 294 * CSP and CSN pins.
jessexm 0:1520ede29bc1 295 * @param value The location to store value read
jessexm 0:1520ede29bc1 296 * @returns 0 if no errors, -1 if error
jessexm 0:1520ede29bc1 297 */
jessexm 0:1520ede29bc1 298 int current(float *value);
jessexm 0:1520ede29bc1 299
jessexm 0:1520ede29bc1 300 /**
jessexm 0:1520ede29bc1 301 * @brief Read AvgCurrent register
jessexm 0:1520ede29bc1 302 * @details The AvgCurrent register reports an average of Current
jessexm 0:1520ede29bc1 303 * register readings.
jessexm 0:1520ede29bc1 304 * @param value The location to store value read
jessexm 0:1520ede29bc1 305 * @returns 0 if no errors, -1 if error
jessexm 0:1520ede29bc1 306 */
jessexm 0:1520ede29bc1 307 int avg_current(int *value);
jessexm 0:1520ede29bc1 308
jessexm 0:1520ede29bc1 309 /**
jessexm 0:1520ede29bc1 310 * @brief Read AvgCurrent register
jessexm 0:1520ede29bc1 311 * @details The AvgCurrent register reports an average of Current
jessexm 0:1520ede29bc1 312 * register readings.
jessexm 0:1520ede29bc1 313 * @param value The location to store value read
jessexm 0:1520ede29bc1 314 * @returns 0 if no errors, -1 if error
jessexm 0:1520ede29bc1 315 */
jessexm 0:1520ede29bc1 316 int avg_current(float *value);
jessexm 0:1520ede29bc1 317
jessexm 0:1520ede29bc1 318 /**
jessexm 0:1520ede29bc1 319 * @brief Read MinMaxCurr register
jessexm 0:1520ede29bc1 320 * @details The MaxMinCurr register maintains the maximum and
jessexm 0:1520ede29bc1 321 * minimum Current register values since the last IC reset
jessexm 0:1520ede29bc1 322 * or until cleared by host software.
jessexm 0:1520ede29bc1 323 * @param value The location to store value read
jessexm 0:1520ede29bc1 324 * @returns 0 if no errors, -1 if error
jessexm 0:1520ede29bc1 325 */
jessexm 0:1520ede29bc1 326 int max_min_curr(int *max, int *min);
jessexm 0:1520ede29bc1 327
jessexm 0:1520ede29bc1 328 /**
jessexm 0:1520ede29bc1 329 * @brief Read MinMaxCurrent register
jessexm 0:1520ede29bc1 330 * @details The MaxMinCurr register maintains the maximum and
jessexm 0:1520ede29bc1 331 * minimum Current register values since the last IC reset
jessexm 0:1520ede29bc1 332 * or until cleared by host software.
jessexm 0:1520ede29bc1 333 * @param value The location to store value read
jessexm 0:1520ede29bc1 334 * @returns 0 if no errors, -1 if error
jessexm 0:1520ede29bc1 335 */
jessexm 0:1520ede29bc1 336 int max_min_curr(float *max, float *min);
jessexm 0:1520ede29bc1 337
jessexm 0:1520ede29bc1 338 /**
jessexm 0:1520ede29bc1 339 * @brief Read Temp register
jessexm 0:1520ede29bc1 340 * @details The Temp register provides the temperature measured
jessexm 0:1520ede29bc1 341 * by the thermistor or die temperature.
jessexm 0:1520ede29bc1 342 * @param value The location to store value read
jessexm 0:1520ede29bc1 343 * @returns 0 if no errors, -1 if error
jessexm 0:1520ede29bc1 344 */
jessexm 0:1520ede29bc1 345 int temp(int *value);
jessexm 0:1520ede29bc1 346
jessexm 0:1520ede29bc1 347 /**
jessexm 0:1520ede29bc1 348 * @brief Read Temp register
jessexm 0:1520ede29bc1 349 * @details The Temp register provides the temperature measured
jessexm 0:1520ede29bc1 350 * by the thermistor or die temperature.
jessexm 0:1520ede29bc1 351 * @param value The location to store value read
jessexm 0:1520ede29bc1 352 * @returns 0 if no errors, -1 if error
jessexm 0:1520ede29bc1 353 */
jessexm 0:1520ede29bc1 354 int temp(float *value);
jessexm 0:1520ede29bc1 355
jessexm 0:1520ede29bc1 356 /**
jessexm 0:1520ede29bc1 357 * @brief Read AvgTA register
jessexm 0:1520ede29bc1 358 * @details The AvgTA register reports an average of the readings
jessexm 0:1520ede29bc1 359 * from the Temp register.
jessexm 0:1520ede29bc1 360 * @param value The location to store value read
jessexm 0:1520ede29bc1 361 * @returns 0 if no errors, -1 if error
jessexm 0:1520ede29bc1 362 */
jessexm 0:1520ede29bc1 363 int avg_ta(int *value);
jessexm 0:1520ede29bc1 364
jessexm 0:1520ede29bc1 365 /**
jessexm 0:1520ede29bc1 366 * @brief Read AvgTA register
jessexm 0:1520ede29bc1 367 * @details The AvgTA register reports an average of the readings
jessexm 0:1520ede29bc1 368 * from the Temp register.
jessexm 0:1520ede29bc1 369 * @param value The location to store value read
jessexm 0:1520ede29bc1 370 * @returns 0 if no errors, -1 if error
jessexm 0:1520ede29bc1 371 */
jessexm 0:1520ede29bc1 372 int avg_ta(float *value);
jessexm 0:1520ede29bc1 373
jessexm 0:1520ede29bc1 374 /**
jessexm 0:1520ede29bc1 375 * @brief Read MaxMinTemp register
jessexm 0:1520ede29bc1 376 * @details The MaxMinTemp register maintains the maximum and
jessexm 0:1520ede29bc1 377 * minimum Temp register values since the last fuel-gauge reset
jessexm 0:1520ede29bc1 378 * or until cleared by host software.
jessexm 0:1520ede29bc1 379 * @param value The location to store value read
jessexm 0:1520ede29bc1 380 * @returns 0 if no errors, -1 if error
jessexm 0:1520ede29bc1 381 */
jessexm 0:1520ede29bc1 382 int max_min_temp(int *max, int *min);
jessexm 0:1520ede29bc1 383
jessexm 0:1520ede29bc1 384 /**
jessexm 0:1520ede29bc1 385 * @brief Read MaxMinTemp register
jessexm 0:1520ede29bc1 386 * @details The MaxMinTemp register maintains the maximum and
jessexm 0:1520ede29bc1 387 * minimum Temp register values since the last fuel-gauge reset
jessexm 0:1520ede29bc1 388 * or until cleared by host software.
jessexm 0:1520ede29bc1 389 * @param value The location to store value read
jessexm 0:1520ede29bc1 390 * @returns 0 if no errors, -1 if error
jessexm 0:1520ede29bc1 391 */
jessexm 0:1520ede29bc1 392 int max_min_temp(float *max, float *min);
jessexm 0:1520ede29bc1 393
jessexm 0:1520ede29bc1 394 /**
jessexm 0:1520ede29bc1 395 * @brief Write 8-Bit Register
jessexm 0:1520ede29bc1 396 * @details Writes the given value to the specified register.
jessexm 0:1520ede29bc1 397 * @param reg The register to be written
jessexm 0:1520ede29bc1 398 * @param value The data to be written
jessexm 0:1520ede29bc1 399 * @param verify Verify data after write
jessexm 0:1520ede29bc1 400 * @returns 0 if no errors, -1 if error.
jessexm 0:1520ede29bc1 401 */
jessexm 0:1520ede29bc1 402 int writeReg(reg_t reg, char value, bool verify = false);
jessexm 0:1520ede29bc1 403
jessexm 0:1520ede29bc1 404 /**
jessexm 0:1520ede29bc1 405 * @brief Write 16-Bit Register
jessexm 0:1520ede29bc1 406 * @details Writes the given value to the specified register.
jessexm 0:1520ede29bc1 407 * @param reg The register to be written
jessexm 0:1520ede29bc1 408 * @param value The data to be written
jessexm 0:1520ede29bc1 409 * @param verify Verify data after write
jessexm 0:1520ede29bc1 410 * @returns 0 if no errors, -1 if error.
jessexm 0:1520ede29bc1 411 */
jessexm 0:1520ede29bc1 412 int writeReg(reg_t reg, uint16_t value, bool verify = false);
jessexm 0:1520ede29bc1 413
jessexm 0:1520ede29bc1 414 /**
jessexm 0:1520ede29bc1 415 * @brief Read 8-Bit Register
jessexm 0:1520ede29bc1 416 * @details Reads from the specified register
jessexm 0:1520ede29bc1 417 * @param reg The register to be read
jessexm 0:1520ede29bc1 418 * @param value Pointer for where to store the data
jessexm 0:1520ede29bc1 419 * @returns 0 if no errors, -1 if error.
jessexm 0:1520ede29bc1 420 */
jessexm 0:1520ede29bc1 421 int readReg(reg_t reg, char *value);
jessexm 0:1520ede29bc1 422
jessexm 0:1520ede29bc1 423 /**
jessexm 0:1520ede29bc1 424 * @brief Read 8-Bit Register(s)
jessexm 0:1520ede29bc1 425 * @details Reads len bytes starting from the specified register
jessexm 0:1520ede29bc1 426 * @param reg The register to be read
jessexm 0:1520ede29bc1 427 * @param value Pointer for where to store the data
jessexm 0:1520ede29bc1 428 * @param len Number of bytes to read
jessexm 0:1520ede29bc1 429 * @returns 0 if no errors, -1 if error.
jessexm 0:1520ede29bc1 430 */
jessexm 0:1520ede29bc1 431 int readReg(reg_t reg, char *buf, int len);
jessexm 0:1520ede29bc1 432
jessexm 0:1520ede29bc1 433 /**
jessexm 0:1520ede29bc1 434 * @brief Read 16-Bit Register
jessexm 0:1520ede29bc1 435 * @details Reads from the specified register
jessexm 0:1520ede29bc1 436 * @param reg The register to be read
jessexm 0:1520ede29bc1 437 * @param value Pointer for where to store the data
jessexm 0:1520ede29bc1 438 * @returns 0 if no errors, -1 if error.
jessexm 0:1520ede29bc1 439 */
jessexm 0:1520ede29bc1 440 int readReg16(reg_t reg, int *value);
jessexm 0:1520ede29bc1 441
jessexm 0:1520ede29bc1 442 private:
jessexm 0:1520ede29bc1 443 I2C &i2c;
jessexm 0:1520ede29bc1 444 int addr;
jessexm 0:1520ede29bc1 445
jessexm 0:1520ede29bc1 446 float r_sense;
jessexm 0:1520ede29bc1 447 float i_lsb;
jessexm 0:1520ede29bc1 448 float i_min_max_lsb;
jessexm 0:1520ede29bc1 449 };
jessexm 0:1520ede29bc1 450
jessexm 0:1520ede29bc1 451 #endif