MAX77658 Ultra-Low Power PMIC Mbed Driver
Embed:
(wiki syntax)
Show/hide line numbers
MAX77658.h
00001 /******************************************************************************* 00002 * Copyright(C) Analog Devices Inc., All Rights Reserved. 00003 * 00004 * Permission is hereby granted, free of charge, to any person obtaining a 00005 * copy of this software and associated documentation files(the "Software"), 00006 * to deal in the Software without restriction, including without limitation 00007 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 00008 * and/or sell copies of the Software, and to permit persons to whom the 00009 * Software is furnished to do so, subject to the following conditions: 00010 * 00011 * The above copyright notice and this permission notice shall be included 00012 * in all copies or substantial portions of the Software. 00013 * 00014 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 00015 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 00016 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 00017 * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES 00018 * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 00019 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 00020 * OTHER DEALINGS IN THE SOFTWARE. 00021 * 00022 * Except as contained in this notice, the name of Analog Devices Inc. 00023 * shall not be used except as stated in the Analog Devices Inc. 00024 * Branding Policy. 00025 * 00026 * The mere transfer of this software does not imply any licenses 00027 * of trade secrets, proprietary technology, copyrights, patents, 00028 * trademarks, maskwork rights, or any other form of intellectual 00029 * property whatsoever. Analog Devices Inc.retains all ownership rights. 00030 ******************************************************************************* 00031 */ 00032 00033 #ifndef _MAX77658_H_ 00034 #define _MAX77658_H_ 00035 00036 #include "mbed.h" 00037 #include "MAX77658_regs.h" 00038 00039 #define MAX77658_NO_ERROR 0 00040 #define MAX77658_VALUE_NULL -1 00041 #define MAX77658_WRITE_DATA_FAILED -2 00042 #define MAX77658_READ_DATA_FAILED -3 00043 #define MAX77658_INVALID_DATA -4 00044 00045 #define MAX77658_I2C_ADDRESS_PMIC_0 0x80 00046 #define MAX77658_I2C_ADDRESS_PMIC_1 0x90 00047 #define MAX77658_I2C_ADDRESS_FG 0x6C 00048 00049 /** 00050 * @brief MAX77658 Ultra-Low Power PMIC Featuring Single-Inductor, 3-Output Buck-Boost, 2-LDOs, 00051 * Power-Path Charger for Small Li+, Fuel Gauge M5. 00052 * 00053 * @details The MAX77658 provides highly-integrated battery charging and power supply solutions 00054 * for low-power applications where size and efficiency are critical. 00055 * 00056 * @code 00057 * @endcode 00058 */ 00059 00060 class MAX77658 00061 { 00062 private: 00063 I2C *i2c_handler; 00064 InterruptIn *irq_pin; // interrupt pin 00065 00066 /** 00067 * @brief Register Addresses 00068 * @details Enumerated MAX77658 register addresses 00069 */ 00070 typedef enum { 00071 /*Global*/ 00072 INT_GLBL0 = 0x00, // Interrupt Status 0 00073 INT_GLBL1 = 0x04, // Interrupt Status 1 00074 ERCFLAG = 0x05, // Flags 00075 STAT_GLBL = 0x06, // Global Status 00076 INTM_GLBL1 = 0x08, // Interrupt Mask 1 00077 INTM_GLBL0 = 0x09, // Interrupt Mask 0 00078 CNFG_GLBL = 0x10, // Configuration Global 00079 CNFG_GPIO0 = 0x11, // GPIO0 Configuration 00080 CNFG_GPIO1 = 0x12, // GPIO1 Configuration 00081 CNFG_GPIO2 = 0x13, // GPIO2 Configuration 00082 CID = 0x14, // Chip Identification Code 00083 CNFG_WDT = 0x17, // Configuration WatchDog Timer 00084 /*Charger*/ 00085 INT_CHG = 0x01, // Charger Interrupt Status 00086 STAT_CHG_A = 0x02, // Charger Status A 00087 STAT_CHG_B = 0x03, // Charger Status B 00088 INT_M_CHG = 0x07, // Charger Interrupt Mask 00089 CNFG_CHG_A = 0x20, // Charger Configuration A 00090 CNFG_CHG_B = 0x21, // Charger Configuration B 00091 CNFG_CHG_C = 0x22, // Charger Configuration C 00092 CNFG_CHG_D = 0x23, // Charger Configuration D 00093 CNFG_CHG_E = 0x24, // Charger Configuration E 00094 CNFG_CHG_F = 0x25, // Charger Configuration F 00095 CNFG_CHG_G = 0x26, // Charger Configuration G 00096 CNFG_CHG_H = 0x27, // Charger Configuration H 00097 CNFG_CHG_I = 0x28, // Charger Configuration I 00098 /*SBB*/ 00099 CNFG_SBB_TOP = 0x38, // SIMO Buck-Boost Configuration 00100 CNFG_SBB0_A = 0x39, // SIMO Buck-Boost 0 Configuration A 00101 CNFG_SBB0_B = 0x3A, // SIMO Buck-Boost 0 Configuration B 00102 CNFG_SBB1_A = 0x3B, // SIMO Buck-Boost 1 Configuration A 00103 CNFG_SBB1_B = 0x3C, // SIMO Buck-Boost 1 Configuration B 00104 CNFG_SBB2_A = 0x3D, // SIMO Buck-Boost 2 Configuration A 00105 CNFG_SBB2_B = 0x3E, // SIMO Buck-Boost 2 Configuration B 00106 CNFG_DVS_SBB0_A = 0x3F, // SIMO Buck-Boost 0 DVS Configuration A 00107 /*LDO*/ 00108 CNFG_LDO0_A = 0x48, // LDO0 Output Voltage 00109 CNFG_LDO0_B = 0x49, // LDO0 Output Voltage Configuration 00110 CNFG_LDO1_A = 0x4A, // LDO1 Output Voltage 00111 CNFG_LDO1_B = 0x4B, // LDO2 Output Voltage Configuration 00112 /*FuelGauge*/ 00113 Status = 0x00, // Interrupt status register for the FG block 00114 VAlrtTh = 0x01, // Voltage AIrt 00115 TAlrtTh = 0x02, // Temperature AIrt 00116 SAlrtTh = 0x03, // Soc AIrt 00117 FullSocThr = 0x13, // Full Soc Thr 00118 DesignCap = 0x18, // Design Cap 00119 Config = 0x1D, // Configuration 00120 IChgTerm = 0x1E, // IChg Term 00121 DevName = 0x21, // Dev Name 00122 FilterCfg = 0x29, // Filter Configuration 00123 IAvgEmpty = 0x36, // IAvgEmpty 00124 VEmpty = 0x3A, // VEmpty 00125 Config2 = 0xBB, // Configuration 2 00126 Temp = 0x08, // Temp 00127 Vcell = 0x09, // Vcell 00128 Current = 0x0A, // Current 00129 AvgCurrent = 0x0B, // AvgCurrent 00130 AvgTA = 0x16, // AvgTA 00131 AvgVCell = 0x19, // AvgVCell 00132 MaxMinTemp = 0x1A, // MaxMinTemp 00133 MaxMinVolt = 0x1B, // MaxMinVolt 00134 MaxMinCurr = 0x1C, // MaxMinCurr 00135 AIN0 = 0x27, // AIN0 00136 Timer = 0x3E, // Timer 00137 ShdnTimer = 0x3F, // ShdnTimer 00138 TimerH = 0xBE, // TimerH 00139 RepCap = 0x05, // RepCap 00140 RepSOC = 0x06, // RepSOC 00141 AvSOC = 0x0E, // AvSOC 00142 FullCapRep = 0x10, // FullCapRep 00143 TTE = 0x11, // TTE 00144 RCell = 0x14, // RCell 00145 Cycles = 0x17, // Cycles 00146 AvCap = 0x1F, // AvCap 00147 TTF = 0x20 // TTF 00148 } reg_t; 00149 00150 void interrupt_handler(); 00151 00152 void (MAX77658::*funcptr)(void); 00153 00154 void post_interrupt_work(); 00155 00156 Thread *post_intr_work_thread; 00157 00158 struct handler { 00159 void (*func)(void *); 00160 void *cb; 00161 }; 00162 00163 handler *interrupt_handler_list; 00164 00165 public: 00166 /** 00167 * @brief MAX77658 constructor. 00168 */ 00169 MAX77658(I2C *i2c, PinName IRQPin = NC); 00170 00171 /** 00172 * @brief MAX77658 destructor. 00173 */ 00174 ~MAX77658(); 00175 00176 /** 00177 * @brief Function pointer type to interrupt handler function 00178 */ 00179 typedef void (*interrupt_handler_function)(void *); 00180 00181 /** 00182 * @brief Read from a register. 00183 * 00184 * @param[in] reg Address of a register to be written. 00185 * @param[out] value Pointer to save result value. 00186 * 00187 * @returns 0 on success, negative error code on failure. 00188 */ 00189 int read_register(uint8_t reg, uint8_t *value); 00190 00191 /** 00192 * @brief Write to a register. 00193 * 00194 * @param[in] reg Address of a register to be written. 00195 * @param[out] value Pointer of value to be written to register. 00196 * 00197 * @returns 0 on success, negative error code on failure. 00198 */ 00199 int write_register(uint8_t reg, const uint8_t *value); 00200 00201 /** 00202 * @brief Read from a fuel-gauge register. 00203 * 00204 * @param[in] reg Address of a fuel-gauge register to be written. 00205 * @param[out] value Pointer to save result value. 00206 * 00207 * @returns 0 on success, negative error code on failure. 00208 */ 00209 int read_fg_register(uint8_t reg, uint8_t *value); 00210 00211 /** 00212 * @brief Write to a fuel-gauge register. 00213 * 00214 * @param[in] reg Address of a fuel-gauge register to be written. 00215 * @param[out] value Pointer of value to be written to fuel-gauge register. 00216 * 00217 * @returns 0 on success, negative error code on failure. 00218 */ 00219 int write_fg_register(uint8_t reg, const uint8_t *value); 00220 00221 /** 00222 * @brief Register Configuration. 00223 * All Interrupt Flags combined from INT_GLBL0, INT_GLBL1 and INT_CHG. 00224 * 00225 * @details 00226 * - Register : INT_GLBL0 (0x00), INT_GLBL1(0x04) and INT_CHG (0x01) 00227 * - Bit Fields : 00228 * - Default : 0x0 00229 * - Description : Enumerated interrupts. 00230 */ 00231 typedef enum { 00232 INT_GLBL0_GPI0_F, 00233 INT_GLBL0_GPI0_R, 00234 INT_GLBL0_NEN_F, 00235 INT_GLBL0_NEN_R, 00236 INT_GLBL0_TJAL1_R, 00237 INT_GLBL0_TJAL2_R, 00238 INT_GLBL0_DOD1_R, 00239 INT_GLBL0_DOD0_R, 00240 INT_GLBL1_GPI1_F, 00241 INT_GLBL1_GPI1_R, 00242 INT_GLBL1_SBB0_F, 00243 INT_GLBL1_SBB1_F, 00244 INT_GLBL1_SBB2_F, 00245 INT_GLBL1_LDO0_F, 00246 INT_GLBL1_LDO1_F, 00247 INT_GLBL1_RSVD, 00248 INT_CHG_THM_I, 00249 INT_CHG_CHG_I, 00250 INT_CHG_CHGIN_I, 00251 INT_CHG_TJ_REG_I, 00252 INT_CHG_CHGIN_CTRL_I, 00253 INT_CHG_SYS_CTRL_I, 00254 INT_CHG_SYS_CNFG_I, 00255 INT_CHG_RSVD, 00256 INT_CHG_END 00257 } reg_bit_int_glbl_t; 00258 00259 /** 00260 * @brief Register Configuration 00261 * 00262 * @details 00263 * - Register : ERCFLAG (0x05) 00264 * - Bit Fields : [7:0] 00265 * - Default : 0x0 00266 * - Description : Event Recorder Flags. 00267 */ 00268 typedef enum { 00269 ERCFLAG_TOVLD, 00270 ERCFLAG_SYSOVLO, 00271 ERCFLAG_SYSUVLO, 00272 ERCFLAG_MRST_F, 00273 ERCFLAG_SFT_OFF_F, 00274 ERCFLAG_SFT_CRST_F, 00275 ERCFLAG_WDT_OFF, 00276 ERCFLAG_WDT_RST 00277 }reg_bit_ercflag_t; 00278 00279 /** 00280 * @brief Get bit field of ERCFLAG (0x05) register. 00281 * 00282 * @param[in] bit_field ERCFLAG register bit field to be written. 00283 * @param[out] flag Pointer to save result of ercglag bit states. 00284 * For individual bit 00285 * 0x0: ERCFLAG has not occurred, 00286 * 0x1: ERCFLAG has occurred. 00287 * 00288 * @return 0 on success, error code on failure. 00289 */ 00290 int get_ercflag(reg_bit_ercflag_t bit_field, uint8_t *flag); 00291 00292 /** 00293 * @brief Register Configuration 00294 * 00295 * @details 00296 * - Register : STAT_GLBL (0x06) 00297 * - Bit Fields : [7:0] 00298 * - Default : 0x0 00299 * - Description : Event Recorder Flags. 00300 */ 00301 typedef enum { 00302 STAT_GLBL_STAT_IRQ, 00303 STAT_GLBL_STAT_EN, 00304 STAT_GLBL_TJAL1_S, 00305 STAT_GLBL_TJAL2_S, 00306 STAT_GLBL_DOD1_S, 00307 STAT_GLBL_DOD0_S, 00308 STAT_GLBL_BOK, 00309 STAT_GLBL_DIDM 00310 }reg_bit_stat_glbl_t; 00311 00312 /** 00313 * @brief Get bit field of STAT_GLBL (0x06) register. 00314 * 00315 * @param[in] bit_field STAT_GLBL register bit field to be written. 00316 * @param[out] status Pointer to save result of Status Global bit state. 00317 * 00318 * @return 0 on success, error code on failure. 00319 */ 00320 int get_stat_glbl(reg_bit_stat_glbl_t bit_field, uint8_t *status); 00321 00322 /** 00323 * @brief Register Configuration 00324 * 00325 * @details 00326 * - Register : INT_M_CHG (0x07), INTM_GLBL0 (0x08) and INTM_GLBL1 (0x09) 00327 * - Bit Fields : [7:0] 00328 * - Default : 0x0 00329 * - Description : All interrupt mask bits. 00330 */ 00331 typedef enum { 00332 INT_M_CHG_THM_M, 00333 INT_M_CHG_CHG_M, 00334 INT_M_CHG_CHGIN_M, 00335 INT_M_CHG_TJ_REG_M, 00336 INT_M_CHG_CHGIN_CTRL_M, 00337 INT_M_CHG_SYS_CTRL_M, 00338 INT_M_CHG_SYS_CNFG_M, 00339 INT_M_CHG_DIS_AICL, 00340 INTM_GLBL0_GPI0_FM, 00341 INTM_GLBL0_GPI0_RM, 00342 INTM_GLBL0_nEN_FM, 00343 INTM_GLBL0_nEN_RM, 00344 INTM_GLBL0_TJAL1_RM, 00345 INTM_GLBL0_TJAL2_RM, 00346 INTM_GLBL0_DOD1_RM, 00347 INTM_GLBL0_DOD0_RM, 00348 INTM_GLBL1_GPI1_FM, 00349 INTM_GLBL1_GPI1_RM, 00350 INTM_GLBL1_SBB0_FM, 00351 INTM_GLBL1_SBB1_FM, 00352 INTM_GLBL1_SBB2_FM, 00353 INTM_GLBL1_LDO0_M, 00354 INTM_GLBL1_LDO1_M, 00355 INTM_GLBL1_RSVD, 00356 INTM_NUM_OF_BIT 00357 }reg_bit_int_mask_t; 00358 00359 /** 00360 * @brief Set bit field of INT_M_CHG (0x07), INTM_GLBL0 (0x08) or INTM_GLBL1 (0x09) register. 00361 * 00362 * @param[in] bit_field Register bit field to be set. 00363 * @param[out] maskBit 0x0: Interrupt is unmasked, 00364 * 0x1: Interrupt is masked. 00365 * 00366 * @return 0 on success, error code on failure. 00367 */ 00368 int set_interrupt_mask(reg_bit_int_mask_t bit_field, uint8_t maskBit); 00369 00370 /** 00371 * @brief Get bit field of INT_M_CHG (0x07), INTM_GLBL0 (0x08) or INTM_GLBL1 (0x09) register. 00372 * 00373 * @param[in] bit_field Register bit field to be written. 00374 * @param[out] maskBit 0x0: Interrupt is unmasked, 00375 * 0x1: Interrupt is masked. 00376 * 00377 * @return 0 on success, error code on failure. 00378 */ 00379 int get_interrupt_mask(reg_bit_int_mask_t bit_field, uint8_t *maskBit); 00380 00381 /** 00382 * @brief Register Configuration 00383 * 00384 * @details 00385 * - Register : CNFG_GLBL (0x10) 00386 * - Bit Fields : [7:0] 00387 * - Default : 0x0 00388 * - Description : Event Recorder Flags. 00389 */ 00390 typedef enum { 00391 CNFG_GLBL_SFT_CTRL, 00392 CNFG_GLBL_DBEN_nEN, 00393 CNFG_GLBL_nEN_MODE, 00394 CNFG_GLBL_SBIA_LPM, 00395 CNFG_GLBL_T_MRST, 00396 CNFG_GLBL_PU_DIS 00397 }reg_bit_cnfg_glbl_t; 00398 00399 /** 00400 * @brief Set CNFG_GLBL (0x10) register. 00401 * 00402 * @param[in] bit_field Register bit field to be written. 00403 * @param[in] config Register bit field to be written. 00404 * 00405 * @return 0 on success, error code on failure. 00406 */ 00407 int set_cnfg_glbl(reg_bit_cnfg_glbl_t bit_field, uint8_t config); 00408 00409 /** 00410 * @brief Get CNFG_GLBL (0x10) register. 00411 * 00412 * @param[in] bit_field Register bit field to be written. 00413 * @param[out] config Pointer of value to be read. 00414 * 00415 * @return 0 on success, error code on failure. 00416 */ 00417 int get_cnfg_glbl(reg_bit_cnfg_glbl_t bit_field, uint8_t *config); 00418 00419 /** 00420 * @brief Register Configuration 00421 * 00422 * @details 00423 * - Register : CNFG_GPIO0 (0x11), CNFG_GPIO1 (0x12) or CNFG_GPIO2 (0x13) 00424 * - Bit Fields : [7:0] 00425 * - Default : 0x0 00426 * - Description : Event Recorder Flags. 00427 */ 00428 typedef enum { 00429 CNFG_GPIO_DIR, 00430 CNFG_GPIO_DI, 00431 CNFG_GPIO_DRV, 00432 CNFG_GPIO_DO, 00433 CNFG_GPIO_DBEN_GPI, 00434 CNFG_GPIO_ALT_GPIO, 00435 CNFG_GPIO_RSVD 00436 }reg_bit_cnfg_gpio_t; 00437 00438 /** 00439 * @brief Set either CNFG_GPIO0 (0x11), CNFG_GPIO1 (0x12) or CNFG_GPIO2 (0x13). 00440 * 00441 * @param[in] bit_field Register bit field to be written. 00442 * @param[in] channel Channel number: 0, 1 or 2 00443 * @param[in] config Register bit field to be written. 00444 * 00445 * @return 0 on success, error code on failure. 00446 */ 00447 int set_cnfg_gpio(reg_bit_cnfg_gpio_t bit_field, uint8_t channel, uint8_t config); 00448 00449 /** 00450 * @brief Get either CNFG_GPIO0 (0x11), CNFG_GPIO1 (0x12) or CNFG_GPIO2 (0x13). 00451 * 00452 * @param[in] bit_field Register bit field to be written. 00453 * @param[in] channel Channel number: 0, 1 or 2 00454 * @param[out] config Pointer of value to be read. 00455 * 00456 * @return 0 on success, error code on failure. 00457 */ 00458 int get_cnfg_gpio(reg_bit_cnfg_gpio_t bit_field, uint8_t channel, uint8_t *config); 00459 00460 /** 00461 * @brief Get bit field of CID (0x14) register. 00462 * 00463 * @return CID on success, error code on failure. 00464 */ 00465 int get_cid(void); 00466 00467 /** 00468 * @brief Register Configuration 00469 * 00470 * @details 00471 * - Register : CNFG_WDT (0x17) 00472 * - Bit Fields : [7:0] 00473 * - Default : 0x0 00474 * - Description : Watchdog Timer Configuration. 00475 */ 00476 typedef enum { 00477 CNFG_WDT_WDT_LOCK, 00478 CNFG_WDT_WDT_EN, 00479 CNFG_WDT_WDT_CLR, 00480 CNFG_WDT_WDT_MODE, 00481 CNFG_WDT_WDT_PER, 00482 CNFG_WDT_RSVD 00483 }reg_bit_cnfg_wdt_t; 00484 00485 /** 00486 * @brief Set CNFG_WDT (0x17) register. 00487 * 00488 * @param[in] bit_field Register bit field to be written. 00489 * @param[in] config Field value to be written. 00490 * 00491 * @return 0 on success, error code on failure. 00492 */ 00493 int set_cnfg_wdt(reg_bit_cnfg_wdt_t bit_field, uint8_t config); 00494 00495 /** 00496 * @brief Get CNFG_WDT (0x17) register. 00497 * 00498 * @param[in] bit_field Register bit field to be written. 00499 * @param[out] config Pointer of value to be read. 00500 * 00501 * @return 0 on success, error code on failure. 00502 */ 00503 int get_cnfg_wdt(reg_bit_cnfg_wdt_t bit_field, uint8_t *config); 00504 00505 /** 00506 * @brief Register Configuration 00507 * 00508 * @details 00509 * - Register : STAT_CHG_A (0x02) 00510 * - Bit Fields : [7:0] 00511 * - Default : 0x0 00512 * - Description : Watchdog Timer Configuration. 00513 */ 00514 typedef enum { 00515 STAT_CHG_A_THM_DTLS, 00516 STAT_CHG_A_TJ_REG_STAT, 00517 STAT_CHG_A_VSYS_MIN_STAT, 00518 STAT_CHG_A_ICHGIN_LIM_STAT, 00519 STAT_CHG_A_VCHGIN_MIN_STAT, 00520 STAT_CHG_A_RSVD 00521 }reg_bit_stat_chg_a_t; 00522 00523 /** 00524 * @brief Get STAT_CHG_A (0x02) register. 00525 * 00526 * @param[in] bit_field Register bit field to be written. 00527 * @param[out] status Pointer of value to be read. 00528 * For individual bit, 00529 * 0x0 = It is not engaged, 00530 * 0x1 = It is engaged. 00531 * 00532 * @return 0 on success, error code on failure. 00533 */ 00534 int get_stat_chg_a(reg_bit_stat_chg_a_t bit_field, uint8_t *status); 00535 00536 /** 00537 * @brief Register Configuration 00538 * 00539 * @details 00540 * - Register : STAT_CHG_A (0x02) 00541 * - Bit Fields : [2:0] 00542 * - Default : 0x0 00543 * - Description : Battery Temperature Details. 00544 */ 00545 typedef enum { 00546 THM_DTLS_THERMISTOR_DISABLED, 00547 THM_DTLS_BATTERY_COLD, 00548 THM_DTLS_BATTERY_COOL, 00549 THM_DTLS_BATTERY_WARM, 00550 THM_DTLS_BATTERY_HOT, 00551 THM_DTLS_BATTERY_NORMAL, 00552 THM_DTLS_RESERVED_0x06, 00553 THM_DTLS_RESERVED_0x07 00554 }decode_thm_dtls_t; 00555 00556 /** 00557 * @brief Get Battery Temperature Details. 00558 * Valid only when CHGIN_DTLS[1:0] = 0b11. 00559 * 00560 * @param[out] thm_dtls Battery temperature details field to be read. 00561 * 00562 * @return 0 on success, error code on failure. 00563 */ 00564 int get_thm_dtls(decode_thm_dtls_t *thm_dtls); 00565 00566 /** 00567 * @brief Register Configuration 00568 * 00569 * @details 00570 * - Register : STAT_CHG_B (0x03) 00571 * - Bit Fields : [7:0] 00572 * - Default : 0x0 00573 * - Description : Watchdog Timer Configuration. 00574 */ 00575 typedef enum { 00576 STAT_CHG_B_TIME_SUS, 00577 STAT_CHG_B_CHG, 00578 STAT_CHG_B_CHGIN_DTLS, 00579 STAT_CHG_B_CHG_DTLS 00580 }reg_bit_stat_chg_b_t; 00581 00582 /** 00583 * @brief Get STAT_CHG_B (0x03) register. 00584 * 00585 * @param[in] bit_field Register bit field to be written. 00586 * @param[out] status Pointer of value to be read. 00587 * 00588 * @return 0 on success, error code on failure. 00589 */ 00590 int get_stat_chg_b(reg_bit_stat_chg_b_t bit_field, uint8_t *status); 00591 00592 /** 00593 * @brief Register Configuration 00594 * 00595 * @details 00596 * - Register : STAT_CHG_B (0x03) 00597 * - Bit Fields : [7:4] 00598 * - Default : 0x0 00599 * - Description : Charger Details. 00600 */ 00601 typedef enum { 00602 CHG_DTLS_OFF, 00603 CHG_DTLS_PREQUALIFICATION_MODE, 00604 CHG_DTLS_FAST_CHARGE_CC, 00605 CHG_DTLS_JEITA_FAST_CHARGE_CC, 00606 CHG_DTLS_FAST_CHARGE_CV, 00607 CHG_DTLS_JEITA_FAST_CHARGE_CV, 00608 CHG_DTLS_TOP_OFF_MODE, 00609 CHG_DTLS_JEITA_MODIFIED_TOP_OFF_MODE, 00610 CHG_DTLS_DONE, 00611 CHG_DTLS_JEITA_MODIFIED_DONE, 00612 CHG_DTLS_PREQUALIFICATION_TIMER_FAULT, 00613 CHG_DTLS_FAST_CHARGE_TIMER_FAULT, 00614 CHG_DTLS_BATTERY_TEMPERATURE_FAULT, 00615 CHG_DTLS_RESERVED_0x0D, 00616 CHG_DTLS_RESERVED_0x0E, 00617 CHG_DTLS_RESERVED_0x0F 00618 }decode_chg_dtls_t; 00619 00620 /** 00621 * @brief Get Charger Details. 00622 * 00623 * @param[out] chg_dtls Charger details field to be read. 00624 * 00625 * @return 0 on success, error code on failure. 00626 */ 00627 int get_chg_dtls(decode_chg_dtls_t *chg_dtls); 00628 00629 /** 00630 * @brief Set the VHOT JEITA Temperature Threshold. 00631 * Bit 7:6 of CNFG_CHG_A (0x20) register. 00632 * 00633 * @param[in] tempDegC Register bit field to be read. 00634 * 45ºC, 50ºC, 55ºC or 60ºC. 00635 * 00636 * @return 0 on success, error code on failure. 00637 */ 00638 int set_thm_hot(int tempDegC); 00639 00640 /** 00641 * @brief Get the VHOT JEITA Temperature Threshold. 00642 * Bit 7:6 of CNFG_CHG_A (0x20) register. 00643 * 00644 * @param[out] tempDegC Pointer of value to be read. 00645 * 45ºC, 50ºC, 55ºC or 60ºC. 00646 * 00647 * @return 0 on success, error code on failure. 00648 */ 00649 int get_thm_hot(int *tempDegC); 00650 00651 /** 00652 * @brief Set the VWARM JEITA Temperature Threshold. 00653 * Bit 5:4 of CNFG_CHG_A (0x20) register. 00654 * 00655 * @param[in] tempDegC Register bit field to be read. 00656 * 35ºC, 40ºC, 45ºC or 50ºC. 00657 * 00658 * @return 0 on success, error code on failure. 00659 */ 00660 int set_thm_warm(int tempDegC); 00661 00662 /** 00663 * @brief Get the VWARM JEITA Temperature Threshold. 00664 * Bit 5:4 of CNFG_CHG_A (0x20) register. 00665 * 00666 * @param[out] tempDegC Pointer of value to be read. 00667 * 35ºC, 40ºC, 45ºC or 50ºC. 00668 * 00669 * @return 0 on success, error code on failure. 00670 */ 00671 int get_thm_warm(int *tempDegC); 00672 00673 /** 00674 * @brief Set the VCOOL JEITA Temperature Threshold. 00675 * Bit 3:2 of CNFG_CHG_A (0x20) register. 00676 * 00677 * @param[in] tempDegC Register bit field to be read. 00678 * 0ºC, 5ºC, 10ºC or 15ºC. 00679 * 00680 * @return 0 on success, error code on failure. 00681 */ 00682 int set_thm_cool(int tempDegC); 00683 00684 /** 00685 * @brief Get the VCOOL JEITA Temperature Threshold. 00686 * Bit 3:2 of CNFG_CHG_A (0x20) register. 00687 * 00688 * @param[out] tempDegC Pointer of value to be read. 00689 * 0ºC, 5ºC, 10ºC or 15ºC. 00690 * 00691 * @return 0 on success, error code on failure. 00692 */ 00693 int get_thm_cool(int *tempDegC); 00694 00695 /** 00696 * @brief Set the VCOLD JEITA Temperature Threshold. 00697 * Bit 1:0 of CNFG_CHG_A (0x20) register. 00698 * 00699 * @param[in] tempDegC Register bit field to be read. 00700 * -10ºC, -5ºC, 0ºC or 5ºC. 00701 * 00702 * @return 0 on success, error code on failure. 00703 */ 00704 int set_thm_cold(int tempDegC); 00705 00706 /** 00707 * @brief Get the VCOLD JEITA Temperature Threshold. 00708 * Bit 1:0 of CNFG_CHG_A (0x20) register. 00709 * 00710 * @param[out] tempDegC Pointer of value to be read. 00711 * -10ºC, -5ºC, 0ºC or 5ºC. 00712 * 00713 * @return 0 on success, error code on failure. 00714 */ 00715 int get_thm_cold(int *tempDegC); 00716 00717 /** 00718 * @brief Register Configuration 00719 * 00720 * @details 00721 * - Register : CNFG_CHG_B (0x21) 00722 * - Bit Fields : [7:0] 00723 * - Default : 0x0 00724 * - Description : Watchdog Timer Configuration. 00725 */ 00726 typedef enum { 00727 CNFG_CHG_B_CHG_EN, 00728 CNFG_CHG_B_I_PQ, 00729 CNFG_CHG_B_ICHGIN_LIM, 00730 CNFG_CHG_B_VCHGIN_MIN 00731 }reg_bit_cnfg_chg_b_t; 00732 00733 /** 00734 * @brief Set CNFG_CHG_B (0x21) register. 00735 * 00736 * @param[in] bit_field Register bit field to be written. 00737 * @param[in] config Register bit field to be written. 00738 * 00739 * @return 0 on success, error code on failure. 00740 */ 00741 int set_cnfg_chg_b(reg_bit_cnfg_chg_b_t bit_field, uint8_t config); 00742 00743 /** 00744 * @brief Get CNFG_CHG_B (0x21) register. 00745 * 00746 * @param[in] bit_field Register bit field to be written. 00747 * @param[out] config Pointer of value to be read. 00748 * 00749 * @return 0 on success, error code on failure. 00750 */ 00751 int get_cnfg_chg_b(reg_bit_cnfg_chg_b_t bit_field, uint8_t *config); 00752 00753 /** 00754 * @brief Set Minimum CHGIN Regulation Voltage. 00755 * Bit 7:5 of CNFG_CHG_B (0x21) register. 00756 * 00757 * @param[in] voltV 00758 * 4.0V, 4.1V, 4.2V, 4.3V, 00759 * 4.4V, 4.5V, 4.6V, 4.7V. 00760 * 00761 * @return 0 on success, error code on failure. 00762 */ 00763 int set_vchgin_min(float voltV); 00764 00765 /** 00766 * @brief Get Minimum CHGIN Regulation Voltage. 00767 * Bit 7:5 of CNFG_CHG_B (0x21) register. 00768 * 00769 * @param[in] voltV Pointer of value to be read. 00770 * 4.0V, 4.1V, 4.2V, 4.3V, 00771 * 4.4V, 4.5V, 4.6V, 4.7V. 00772 * 00773 * @return 0 on success, error code on failure. 00774 */ 00775 int get_vchgin_min(float *voltV); 00776 00777 /** 00778 * @brief Set CHGIN Input Current Limit. 00779 * Bit 4:2 of CNFG_CHG_B (0x21) register. 00780 * 00781 * @param[in] currentmA 00782 * 95mA, 190mA, 285mA, 380mA, 475mA. 00783 * 00784 * @return 0 on success, error code on failure. 00785 */ 00786 int set_ichgin_lim(int currentmA); 00787 00788 /** 00789 * @brief Get CHGIN Input Current Limit. 00790 * Bit 4:2 of CNFG_CHG_B (0x21) register. 00791 * 00792 * @param[out] currentmA Pointer of value to be read. 00793 * 95mA, 190mA, 285mA, 380mA, 475mA. 00794 * 00795 * @return 0 on success, error code on failure. 00796 */ 00797 int get_ichgin_lim(int *currentmA); 00798 00799 /** 00800 * @brief Set Battery Prequalification Voltage Threshold (VPQ). 00801 * Bit 7:5 of CNFG_CHG_C (0x22) register. 00802 * 00803 * @param[in] voltV 00804 * 2.3V, 2.4V, 2.5V, 2.6V, 00805 * 2.7V, 2.8V, 2.9V, 3.0V. 00806 * 00807 * @return 0 on success, error code on failure. 00808 */ 00809 int set_chg_pq(float voltV); 00810 00811 /** 00812 * @brief Get Battery Prequalification Voltage Threshold (VPQ). 00813 * Bit 7:5 of CNFG_CHG_C (0x22) register. 00814 * 00815 * @param[out] voltV Pointer of value to be read. 00816 * 2.3V, 2.4V, 2.5V, 2.6V, 00817 * 2.7V, 2.8V, 2.9V, 3.0V. 00818 * 00819 * @return 0 on success, error code on failure. 00820 */ 00821 int get_chg_pq(float *voltV); 00822 00823 /** 00824 * @brief Set Charger Termination Current (ITERM). 00825 * I_TERM[1:0] sets the charger termination current 00826 * as a percentage of the fast charge current IFAST-CHG. 00827 * Bit 4:3 of CNFG_CHG_C (0x22) register. 00828 * 00829 * @param[in] percent 00830 * 5%, 7.5%, 10%, 15%. 00831 * 00832 * @return 0 on success, error code on failure. 00833 */ 00834 int set_i_term(float percent); 00835 00836 /** 00837 * @brief Get Charger Termination Current (ITERM). 00838 * I_TERM[1:0] sets the charger termination current 00839 * as a percentage of the fast charge current IFAST-CHG. 00840 * Bit 4:3 of CNFG_CHG_C (0x22) register. 00841 * 00842 * @param[out] percent Pointer of value to be read. 00843 * 5%, 7.5%, 10%, 15%. 00844 * 00845 * @return 0 on success, error code on failure. 00846 */ 00847 int get_i_term(float *percent); 00848 00849 /** 00850 * @brief Set Top-off Timer Value. 00851 * Bit 2:0 of CNFG_CHG_C (0x22) register. 00852 * 00853 * @param[in] minute 00854 * 0 minutes, 5 minutes, 10 minutes 00855 * 15 minutes, 20 minutes, 25 minutes, 00856 * 30 minutes, 35 minutes. 00857 * 00858 * @return 0 on success, error code on failure. 00859 */ 00860 int set_t_topoff(uint8_t minute); 00861 00862 /** 00863 * @brief Get Top-off Timer Value. 00864 * Bit 2:0 of CNFG_CHG_C (0x22) register. 00865 * 00866 * @param[out] minute Pointer of value to be read. 00867 0 minutes, 5 minutes, 10 minutes 00868 * 15 minutes, 20 minutes, 25 minutes, 00869 * 30 minutes, 35 minutes. 00870 * 00871 * @return 0 on success, error code on failure. 00872 */ 00873 int get_t_topoff(uint8_t *minute); 00874 00875 /** 00876 * @brief Set the Die Junction Temperature Regulation Point, TJ-REG. 00877 * Bit 7:5 of CNFG_CHG_D (0x23) register. 00878 * 00879 * @param[in] tempDegC 60ºC, 70ºC, 80ºC, 00880 * 90ºC, 100ºC. 00881 * 00882 * @return 0 on success, error code on failure. 00883 */ 00884 int set_tj_reg(uint8_t tempDegC); 00885 00886 /** 00887 * @brief Get the Die Junction Temperature Regulation Point, TJ-REG. 00888 * Bit 7:5 of CNFG_CHG_D (0x23) register. 00889 * 00890 * @param[out] tempDegC Pointer of value to be read. 00891 * 60ºC, 70ºC, 80ºC, 90ºC, 100ºC. 00892 * 00893 * @return 0 on success, error code on failure. 00894 */ 00895 int get_tj_reg(uint8_t *tempDegC); 00896 00897 /** 00898 * @brief Set System Voltage Regulation (VSYS-REG). 00899 * Bit 4:0 of CNFG_CHG_D (0x23) register. 00900 * 00901 * @param[in] voltV 3.300V, 3.350V, 3.400V, ... 00902 * 4.750V, 4.800V. 00903 * 00904 * @return 0 on success, error code on failure. 00905 */ 00906 int set_vsys_reg(float voltV); 00907 00908 /** 00909 * @brief Get System Voltage Regulation (VSYS-REG). 00910 * Bit 4:0 of CNFG_CHG_D (0x23) register. 00911 * 00912 * @param[out] voltV Pointer of value to be read. 00913 * 3.300V, 3.350V, 3.400V, ... 00914 * 4.750V, 4.800V. 00915 * 00916 * @return 0 on success, error code on failure. 00917 */ 00918 int get_vsys_reg(float *voltV); 00919 00920 /** 00921 * @brief Set the Fast-Charge Constant Current Value, IFAST-CHG. 00922 * Bit 7:2 of CNFG_CHG_E (0x24) register. 00923 * 00924 * @param[in] currentmA 7.5mA, 15.0mA, 22.5mA, ... 00925 * 292.5mA, 300.0mA. 00926 * 00927 * @return 0 on success, error code on failure. 00928 */ 00929 int set_chg_cc(float currentmA); 00930 00931 /** 00932 * @brief Get the Fast-Charge Constant Current Value, IFAST-CHG. 00933 * Bit 7:2 of CNFG_CHG_E (0x24) register. 00934 * 00935 * @param[out] currentmA Pointer of value to be read. 00936 * 7.5mA, 15.0mA, 22.5mA, ... 00937 * 292.5mA, 300.0mA. 00938 * 00939 * @return 0 on success, error code on failure. 00940 */ 00941 int get_chg_cc(float *currentmA); 00942 00943 /** 00944 * @brief Register Configuration 00945 * 00946 * @details 00947 * - Register : CNFG_CHG_E (0x24) 00948 * - Bit Fields : [1:0] 00949 * - Default : 0x0 00950 * - Description : Fast-charge Safety timer, tFC. 00951 */ 00952 typedef enum { 00953 T_FAST_CHG_TIMER_DISABLED, 00954 T_FAST_CHG_HOUR_3H, 00955 T_FAST_CHG_HOUR_5H, 00956 T_FAST_CHG_HOUR_7H 00957 }decode_t_fast_chg_t; 00958 00959 /** 00960 * @brief Set the Fast-charge Safety timer, tFC. 00961 * Bit 1:0 of CNFG_CHG_E (0x24) register. 00962 * 00963 * @param[in] t_fast_chg Fast-charge safety timer field to be written. 00964 * 00965 * @return 0 on success, error code on failure. 00966 */ 00967 int set_t_fast_chg(decode_t_fast_chg_t t_fast_chg); 00968 00969 /** 00970 * @brief Get the Fast-charge Safety timer, tFC. 00971 * Bit 1:0 of CNFG_CHG_E (0x24) register. 00972 * 00973 * @param[out] t_fast_chg Fast-charge safety timer field to be read. 00974 * 00975 * @return 0 on success, error code on failure. 00976 */ 00977 int get_t_fast_chg(decode_t_fast_chg_t *t_fast_chg); 00978 00979 /** 00980 * @brief Set IFAST-CHG-JEITA 00981 * when the battery is either cool or warm as defined by the 00982 * VCOOL and VWARM temperature thresholds. 00983 * Bit 7:2 of CNFG_CHG_F (0x25) register. 00984 * 00985 * @param[in] currentmA 7.5mA, 15.0mA, 22.5mA, ... 00986 * 292.5mA, 300.0mA. 00987 * 00988 * @return 0 on success, error code on failure. 00989 */ 00990 int set_chg_cc_jeita(float currentmA); 00991 00992 /** 00993 * @brief Get IFAST-CHG-JEITA 00994 * when the battery is either cool or warm as defined by the 00995 * VCOOL and VWARM temperature thresholds. 00996 * Bit 7:2 of CNFG_CHG_F (0x25) register. 00997 * 00998 * @param[out] currentmA Pointer of value to be read. 00999 * 7.5mA, 15.0mA, 22.5mA, ... 01000 * 292.5mA, 300.0mA. 01001 * 01002 * @return 0 on success, error code on failure. 01003 */ 01004 int get_chg_cc_jeita(float *currentmA); 01005 01006 /** 01007 * @brief Register Configuration 01008 * 01009 * @details 01010 * - Register : CNFG_CHG_G (0x26) 01011 * - Bit Fields : [7:0] 01012 * - Default : 0x0 01013 * - Description : Watchdog Timer Configuration. 01014 */ 01015 typedef enum { 01016 CNFG_CHG_G_FUS_M, 01017 CNFG_CHG_G_USBS, 01018 CNFG_CHG_G_CHG_CV 01019 }reg_bit_cnfg_chg_g_t; 01020 01021 /** 01022 * @brief Set CNFG_CHG_G (0x26) register. 01023 * 01024 * @param[in] bit_field Register bit field to be written. 01025 * @param[in] config Register bit field to be written. 01026 * 01027 * @return 0 on success, error code on failure. 01028 */ 01029 int set_cnfg_chg_g(reg_bit_cnfg_chg_g_t bit_field, uint8_t config); 01030 01031 /** 01032 * @brief Get CNFG_CHG_G (0x26) register. 01033 * 01034 * @param[in] bit_field Register bit field to be written. 01035 * @param[out] config Pointer of value to be read. 01036 * 01037 * @return 0 on success, error code on failure. 01038 */ 01039 int get_cnfg_chg_g(reg_bit_cnfg_chg_g_t bit_field, uint8_t *config); 01040 01041 /** 01042 * @brief Set Fast-Charge Battery Regulation Voltage, VFAST-CHG. 01043 * Bit 7:2 of CNFG_CHG_G (0x26) register. 01044 * 01045 * @param[in] voltV 3.600V, 3.625V, 3.650V, ... 01046 * 4.575V, 4.600V. 01047 * 01048 * @return 0 on success, error code on failure. 01049 */ 01050 int set_chg_cv(float voltV); 01051 01052 /** 01053 * @brief Get Fast-Charge Battery Regulation Voltage, VFAST-CHG. 01054 * Bit 7:2 of CNFG_CHG_G (0x26) register. 01055 * 01056 * @param[out] voltV Pointer of value to be read. 01057 * 3.600V, 3.625V, 3.650V, ... 01058 * 4.575V, 4.600V. 01059 * 01060 * @return 0 on success, error code on failure. 01061 */ 01062 int get_chg_cv(float *voltV); 01063 01064 /** 01065 * @brief Register Configuration 01066 * 01067 * @details 01068 * - Register : CNFG_CHG_H (0x27) 01069 * - Bit Fields : [7:0] 01070 * - Default : 0x0 01071 * - Description : Watchdog Timer Configuration. 01072 */ 01073 typedef enum { 01074 CNFG_CHG_H_CHR_TH_DIS, 01075 CNFG_CHG_H_SYS_BAT_PRT, 01076 CNFG_CHG_H_CHG_CV_JEITA 01077 }reg_bit_cnfg_chg_h_t; 01078 01079 /** 01080 * @brief Set CNFG_CHG_H (0x27) register. 01081 * 01082 * @param[in] bit_field Register bit field to be written. 01083 * @param[in] config Register bit field to be written. 01084 * 01085 * @return 0 on success, error code on failure. 01086 */ 01087 int set_cnfg_chg_h(reg_bit_cnfg_chg_h_t bit_field, uint8_t config); 01088 01089 /** 01090 * @brief Get CNFG_CHG_H (0x27) register. 01091 * 01092 * @param[in] bit_field Register bit field to be written. 01093 * @param[out] config Pointer of value to be read. 01094 * 01095 * @return 0 on success, error code on failure. 01096 */ 01097 int get_cnfg_chg_h(reg_bit_cnfg_chg_h_t bit_field, uint8_t *config); 01098 01099 /** 01100 * @brief Set the modified VFAST-CHG-JEITA for when the battery is either 01101 * cool or warm as defined by the VCOOL and VWARM temperature thresholds. 01102 * Bit 7:2 of CNFG_CHG_H (0x27) register. 01103 * 01104 * @param[in] voltV Pointer of value to be read. 01105 * 3.600V, 3.625V, 3.650V, ... 01106 * 4.575V, 4.600V. 01107 * 01108 * @return 0 on success, error code on failure. 01109 */ 01110 int set_chg_cv_jeita(float voltV); 01111 01112 /** 01113 * @brief Get the modified VFAST-CHG-JEITA for when the battery is either 01114 * cool or warm as defined by the VCOOL and VWARM temperature thresholds. 01115 * Bit 7:2 of CNFG_CHG_H (0x27) register. 01116 * 01117 * @param[out] voltV Pointer of value to be read. 01118 * 3.600V, 3.625V, 3.650V, ... 01119 * 4.575V, 4.600V. 01120 * 01121 * @return 0 on success, error code on failure. 01122 */ 01123 int get_chg_cv_jeita(float *voltV); 01124 01125 /** 01126 * @brief Set the Battery Discharge Current Full-Scale Current Value. 01127 * Bit 7:4 of CNFG_CHG_I (0x28) register. 01128 * 01129 * @param[in] currentmA 8.2mA, 40.5mA, 72.3mA, 103.4mA, 01130 * 134.1mA, 164.1mA, 193.7mA, 222.7mA, 01131 * 251.2mA, 279.3mA, 300.0mA 01132 * 01133 * @return 0 on success, error code on failure. 01134 */ 01135 int set_imon_dischg_scale(float currentmA); 01136 01137 /** 01138 * @brief Get the Battery Discharge Current Full-Scale Current Value. 01139 * Bit 7:4 of CNFG_CHG_I (0x28) register. 01140 * 01141 * @param[out] currentmA Pointer of value to be read. 01142 * 8.2mA, 40.5mA, 72.3mA, 103.4mA, 01143 * 134.1mA, 164.1mA, 193.7mA, 222.7mA, 01144 * 251.2mA, 279.3mA, 300.0mA 01145 * 01146 * @return 0 on success, error code on failure. 01147 */ 01148 int get_imon_dischg_scale(float *currentmA); 01149 01150 /** 01151 * @brief Register Configuration 01152 * 01153 * @details 01154 * - Register : CNFG_CHG_I (0x28) 01155 * - Bit Fields : [3:0] 01156 * - Default : 0x0 01157 * - Description : Analog channel to connect to AMUX. 01158 */ 01159 typedef enum { 01160 MUX_SEL_MULTIPLEXER_DISABLED, 01161 MUX_SEL_CHGIN_VOLTAGE_MONITOR, 01162 MUX_SEL_CHGIN_CURRENT_MONITOR, 01163 MUX_SEL_BATTERY_VOLTAGE_MONITOR, 01164 MUX_SEL_BATTERY_CHARGE_CURRENT_MONITOR, 01165 MUX_SEL_BATTERY_DISCHARGE_CURRENT_MONITOR_NORMAL, 01166 MUX_SEL_BATTERY_DISCHARGE_CURRENT_MONITOR_NULL, 01167 MUX_SEL_RESERVED_0x07, 01168 MUX_SEL_RESERVED_0x08, 01169 MUX_SEL_AGND_VOLTAGE_MONITOR, 01170 MUX_SEL_SYS_VOLTAGE_MONITOR, 01171 MUX_SEL_SYS_VOLTAGE_MONITOR_0x0B, 01172 MUX_SEL_SYS_VOLTAGE_MONITOR_0x0C, 01173 MUX_SEL_SYS_VOLTAGE_MONITOR_0x0D, 01174 MUX_SEL_SYS_VOLTAGE_MONITOR_0x0E, 01175 MUX_SEL_SYS_VOLTAGE_MONITOR_0x0F 01176 }decode_mux_sel_t; 01177 01178 /** 01179 * @brief Set the analog channel to connect to AMUX. 01180 * 01181 * @param[in] selection AMUX value field to be written. 01182 * 01183 * @return 0 on success, error code on failure. 01184 */ 01185 int set_mux_sel(decode_mux_sel_t selection); 01186 01187 /** 01188 * @brief Get the analog channel to connect to AMUX. 01189 * 01190 * @param[out] selection AMUX value field to be read. 01191 * 01192 * @return 0 on success, error code on failure. 01193 */ 01194 int get_mux_sel(decode_mux_sel_t *selection); 01195 01196 /*SBB*/ 01197 01198 /** 01199 * @brief Register Configuration 01200 * 01201 * @details 01202 * - Register : CNFG_SBB_TOP (0x38) 01203 * - Bit Fields : [7:0] 01204 * - Default : 0x0 01205 * - Description : Watchdog Timer Configuration. 01206 */ 01207 typedef enum { 01208 CNFG_SBB_TOP_DRV_SBB, 01209 CNFG_SBB_TOP_DIS_LPM 01210 }reg_bit_cnfg_sbb_top_t; 01211 01212 /** 01213 * @brief Set CNFG_SBB_TOP (0x38) register. 01214 * 01215 * @param[in] bit_field Register bit field to be written. 01216 * @param[in] config Configuration value to be written. 01217 * 01218 * @return 0 on success, error code on failure. 01219 */ 01220 int set_cnfg_sbb_top(reg_bit_cnfg_sbb_top_t bit_field, uint8_t config); 01221 01222 /** 01223 * @brief Get CNFG_SBB_TOP (0x38) register. 01224 * 01225 * @param[in] bit_field Register bit field to be written. 01226 * @param[out] config Configuration value to be read. 01227 * 01228 * @return 0 on success, error code on failure. 01229 */ 01230 int get_cnfg_sbb_top(reg_bit_cnfg_sbb_top_t bit_field, uint8_t *config); 01231 01232 /** 01233 * @brief Set SIMO Buck-Boost Channel x Target Output Voltage. 01234 * CNFG_SBB0_A (0x39), CNFG_SBB1_A (0x3B) and CNFG_SBB2_A (0x3D) 01235 * 01236 * @param[in] channel Channel number: 0, 1 or 2. 01237 * @param[in] voltV SIMO buck-boost channel x target output voltage field to be written. 01238 * SBBx = 500mV + 25mV x TV_SBBx[7:0] 01239 * 0.500V, 0.525V, 0.550V, 0.575V, 0.600V, 0.625V, 01240 * 0.650V, 0.675V, 0.700V, ... 01241 * 5.425V, 5.450V, 5.475V, 5.500V. 01242 * 01243 * @return 0 on success, error code on failure. 01244 */ 01245 int set_tv_sbb_a(uint8_t channel, float voltV); 01246 01247 /** 01248 * @brief Get SIMO Buck-Boost Channel x Target Output Voltage. 01249 * CNFG_SBB0_A (0x39), CNFG_SBB1_A (0x3B) and CNFG_SBB2_A (0x3D) 01250 * 01251 * @param[in] channel Channel number: 0, 1 or 2. 01252 * @param[out] voltV SIMO buck-boost channel x target output voltage field to be read. 01253 * SBBx = 500mV + 25mV x TV_SBBx[7:0] 01254 * 0.500V, 0.525V, 0.550V, 0.575V, 0.600V, 0.625V, 01255 * 0.650V, 0.675V, 0.700V, ... 01256 * 5.425V, 5.450V, 5.475V, 5.500V. 01257 * 01258 * @return 0 on success, error code on failure. 01259 */ 01260 int get_tv_sbb_a(uint8_t channel, float *voltV); 01261 01262 /** 01263 * @brief Register Configuration 01264 * 01265 * @details 01266 * - Register : CNFG_SBB0_B (0x3A), CNFG_SBB1_B (0x3C) and CNFG_SBB2_B (0x3E) 01267 * - Bit Fields : [7:6] 01268 * - Default : 0x0 01269 * - Description : Operation mode of SBB0, 1 or 2. 01270 */ 01271 typedef enum { 01272 OP_MODE_AUTOMATIC, 01273 OP_MODE_BUCK_MODE, 01274 OP_MODE_BOOST_MODE, 01275 OP_MODE_BUCK_BOOST_MODE 01276 }decode_op_mode_t; 01277 01278 /** 01279 * @brief Set Operation mode of SBBx. 01280 * 01281 * @param[in] channel Channel number: 0, 1 or 2. 01282 * @param[in] mode Operation mode of SBBx bit to be written. 01283 * 01284 * @return 0 on success, error code on failure. 01285 */ 01286 int set_op_mode(uint8_t channel, decode_op_mode_t mode); 01287 01288 /** 01289 * @brief Get Operation mode of SBBx. 01290 * 01291 * @param[in] channel Channel number: 0, 1 or 2. 01292 * @param[out] mode Operation mode of SBBx bit to be read. 01293 * 01294 * @return 0 on success, error code on failure. 01295 */ 01296 int get_op_mode(uint8_t channel, decode_op_mode_t *mode); 01297 01298 /** 01299 * @brief Register Configuration 01300 * 01301 * @details 01302 * - Register : CNFG_SBB0_B (0x3A), CNFG_SBB1_B (0x3C) and CNFG_SBB2_B (0x3E) 01303 * - Bit Fields : [5:4] 01304 * - Default : 0x0 01305 * - Description : SIMO Buck-Boost Channel 0, 1 or 2 Peak Current Limit. 01306 */ 01307 typedef enum { 01308 IP_SBB_AMP_1_000A, 01309 IP_SBB_AMP_0_750A, 01310 IP_SBB_AMP_0_500A, 01311 IP_SBB_AMP_0_333A 01312 }decode_ip_sbb_t; 01313 01314 /** 01315 * @brief Set SIMO Buck-Boost Channel x Peak Current Limit. 01316 * 01317 * @param[in] channel Channel number: 0, 1 or 2. 01318 * @param[in] ip_sbb SIMO buck-boost channel 2 peak current limit field to be written. 01319 * 01320 * @return 0 on success, error code on failure. 01321 */ 01322 int set_ip_sbb(uint8_t channel, decode_ip_sbb_t ip_sbb); 01323 01324 /** 01325 * @brief Get SIMO Buck-Boost Channel x Peak Current Limit. 01326 * 01327 * @param[in] channel Channel number: 0, 1 or 2. 01328 * @param[out] ip_sbb SIMO buck-boost channel 2 peak current limit field to be read. 01329 * 01330 * @return 0 on success, error code on failure. 01331 */ 01332 int get_ip_sbb(uint8_t channel, decode_ip_sbb_t *ip_sbb); 01333 01334 /** 01335 * @brief Register Configuration 01336 * 01337 * @details 01338 * - Register : CNFG_SBB0_B (0x3A), CNFG_SBB1_B (0x3C) and CNFG_SBB2_B (0x3E) 01339 * - Bit Fields : [3] 01340 * - Default : 0x0 01341 * - Description : SIMO Buck-Boost Channel 0, 1 or 2 Active-Discharge Enable. 01342 */ 01343 typedef enum { 01344 ADE_SBB_DISABLED, 01345 ADE_SBB_ENABLED 01346 }decode_ade_sbb_t; 01347 01348 /** 01349 * @brief Set SIMO Buck-Boost Channel x Active-Discharge Enable. 01350 * 01351 * @param[in] channel Channel number: 0, 1 or 2. 01352 * @param[in] ade_sbb SIMO buck-boost channel 2 active-discharge enable bit to be written. 01353 * 01354 * @return 0 on success, error code on failure. 01355 */ 01356 int set_ade_sbb(uint8_t channel, decode_ade_sbb_t ade_sbb); 01357 01358 /** 01359 * @brief Get SIMO Buck-Boost Channel x Active-Discharge Enable. 01360 * 01361 * @param[in] channel Channel number: 0, 1 or 2. 01362 * @param[out] ade_sbb SIMO buck-boost channel 2 active-discharge enable bit to be read. 01363 * 01364 * @return 0 on success, error code on failure. 01365 */ 01366 int get_ade_sbb(uint8_t channel, decode_ade_sbb_t *ade_sbb); 01367 01368 /** 01369 * @brief Register Configuration 01370 * 01371 * @details 01372 * - Register : CNFG_SBB0_B (0x3A), CNFG_SBB1_B (0x3C) and CNFG_SBB2_B (0x3E) 01373 * - Bit Fields : [2:0] 01374 * - Default : 0x0 01375 * - Description : Enable Control for SIMO Buck-Boost Channel 0, 1 or 2. 01376 */ 01377 typedef enum { 01378 EN_SBB_FPS_SLOT_0, 01379 EN_SBB_FPS_SLOT_1, 01380 EN_SBB_FPS_SLOT_2, 01381 EN_SBB_FPS_SLOT_3, 01382 EN_SBB_OFF, 01383 EN_SBB_SAME_AS_0X04, 01384 EN_SBB_ON, 01385 EN_SBB_SAME_AS_0X06 01386 }decode_en_sbb_t; 01387 01388 /** 01389 * @brief Set Enable Control for SIMO Buck-Boost Channel x. 01390 * 01391 * @param[in] channel Channel number: 0, 1 or 2. 01392 * @param[in] en_sbb Enable control for SIMO buck-boost channel x field to be written. 01393 * 01394 * @return 0 on success, error code on failure. 01395 */ 01396 int set_en_sbb(uint8_t channel, decode_en_sbb_t en_sbb); 01397 01398 /** 01399 * @brief Get Enable Control for SIMO Buck-Boost Channel x. 01400 * 01401 * @param[in] channel Channel number: 0, 1 or 2. 01402 * @param[out] en_sbb Enable control for SIMO buck-boost channel x field to be read. 01403 * 01404 * @return 0 on success, error code on failure. 01405 */ 01406 int get_en_sbb(uint8_t channel, decode_en_sbb_t *en_sbb); 01407 01408 /** 01409 * @brief Set SIMO Buck-Boost Channel 0 Target Output Voltage. 01410 * Bit 7:0 of CNFG_DVS_SBB0_A (0x3F). 01411 * 01412 * @param[in] voltV SIMO buck-boost channel 0 target output voltage field to be written. 01413 * SBBx = 500mV + 25mV x TV_SBBx[7:0] 01414 * 0.500V, 0.525V, 0.550V, 0.575V, 0.600V, 0.625V, 01415 * 0.650V, 0.675V, 0.700V, ... 01416 * 5.425V, 5.450V, 5.475V, 5.500V. 01417 * 01418 * @return 0 on success, error code on failure. 01419 */ 01420 int set_tv_sbb_dvs(float voltV); 01421 01422 /** 01423 * @brief Get SIMO Buck-Boost Channel 0 Target Output Voltage. 01424 * Bit 7:0 of CNFG_DVS_SBB0_A (0x3F). 01425 * 01426 * @param[out] voltV SIMO buck-boost channel 0 target output voltage field to be read. 01427 * SBBx = 500mV + 25mV x TV_SBBx[7:0] 01428 * 0.500V, 0.525V, 0.550V, 0.575V, 0.600V, 0.625V, 01429 * 0.650V, 0.675V, 0.700V, ... 01430 * 5.425V, 5.450V, 5.475V, 5.500V. 01431 * 01432 * @return 0 on success, error code on failure. 01433 */ 01434 int get_tv_sbb_dvs(float *voltV); 01435 01436 /*LDO*/ 01437 01438 /** 01439 * @brief Set LDO Output Channel x Target Output Voltage. Bit 6:0. 01440 * CNFG_LDO0_A (0x48) and CNFG_LDO1_A (0x4A) 01441 * 01442 * @param[in] channel Channel number: 0 or 1. 01443 * @param[in] voltV LDO Output Channel x target output voltage field to be read. 01444 * LDOx = 500mV + 25mV x TV_LDOx[6:0] 01445 * 0.500V, 0.525V, 0.550V, 0.575V, 0.600V, 0.625V, 01446 * 0.650V, 0.675V, 0.700V, ... 01447 * 3.650, 3.675. 01448 * 01449 * When TV_LDO[7] = 0, TV_LDO[6:0] sets the 01450 * LDO's output voltage range from 0.5V to 3.675V. 01451 * When TV_LDO[7] = 1, TV_LDO[6:0] sets the 01452 * LDO's output voltage from 1.825V to 5V. 01453 * 01454 * @return 0 on success, error code on failure. 01455 */ 01456 int set_tv_ldo_volt_a(uint8_t channel, float voltV); 01457 01458 /** 01459 * @brief Get LDO Output Channel x Target Output Voltage. Bit 6:0. 01460 * CNFG_LDO0_A (0x48) and CNFG_LDO1_A (0x4A) 01461 * 01462 * @param[in] channel Channel number: 0 or 1. 01463 * @param[out] voltV LDO Output Channel x target output voltage field to be read. 01464 * LDOx = 500mV + 25mV x TV_LDOx[6:0] 01465 * 0.500V, 0.525V, 0.550V, 0.575V, 0.600V, 0.625V, 01466 * 0.650V, 0.675V, 0.700V, ... 01467 * 3.650, 3.675. 01468 * 01469 * When TV_LDO[7] = 0, TV_LDO[6:0] sets the 01470 * LDO's output voltage range from 0.5V to 3.675V. 01471 * When TV_LDO[7] = 1, TV_LDO[6:0] sets the 01472 * LDO's output voltage from 1.825V to 5V. 01473 * 01474 * @return 0 on success, error code on failure. 01475 */ 01476 int get_tv_ldo_volt_a(uint8_t channel, float *voltV); 01477 01478 /** 01479 * @brief Register Configuration 01480 * 01481 * @details 01482 * - Register : CNFG_LDO0_A (0x48) and CNFG_LDO1_A (0x4A) 01483 * - Bit Fields : [7] 01484 * - Default : 0x0 01485 * - Description : SIMO Buck-Boost Channel 0, 1 or 2 Peak Current Limit. 01486 */ 01487 typedef enum { 01488 TV_LDO0_A_NO_OFFSET, 01489 TV_LDO0_A_NO_1_325V 01490 }decode_tv_ldo_offset_a_t; 01491 01492 /** 01493 * @brief Set LDO Output Channel x Target Output Voltage. Bit 7. 01494 * CNFG_LDO0_A (0x48) and CNFG_LDO1_A (0x4A) 01495 * 01496 * @param[in] channel Channel number: 0 or 1. 01497 * @param[in] offset LDO Output Channel x target output voltage offset field to be read. 01498 * 0b0 = No Offset 01499 * 0b1 = 1.325V Offset 01500 * 01501 * 01502 * @return 0 on success, error code on failure. 01503 */ 01504 int set_tv_ldo_offset_a(uint8_t channel, decode_tv_ldo_offset_a_t offset); 01505 01506 /** 01507 * @brief Get LDO Output Channel x Target Output Voltage. Bit 7. 01508 * CNFG_LDO0_A (0x48) and CNFG_LDO1_A (0x4A) 01509 * 01510 * @param[in] channel Channel number: 0 or 1. 01511 * @param[out] offset LDO Output Channel x target output voltage offset field to be read. 01512 * 0b0 = No Offset 01513 * 0b1 = 1.325V Offset 01514 * 01515 * @return 0 on success, error code on failure. 01516 */ 01517 int get_tv_ldo_offset_a(uint8_t channel, decode_tv_ldo_offset_a_t *offset); 01518 01519 /** 01520 * @brief Register Configuration 01521 * 01522 * @details 01523 * - Register : CNFG_LDO0_B (0x49) and CNFG_LDO1_B (0x4B) 01524 * - Bit Fields : [2:0] 01525 * - Default : 0x0 01526 * - Description : Enable Control for LDO 0 or 1. 01527 */ 01528 typedef enum { 01529 EN_LDO_FPS_SLOT_0, 01530 EN_LDO_FPS_SLOT_1, 01531 EN_LDO_FPS_SLOT_2, 01532 EN_LDO_FPS_SLOT_3, 01533 EN_LDO_OFF, 01534 EN_LDO_SAME_AS_0X04, 01535 EN_LDO_ON, 01536 EN_LDO_SAME_AS_0X06 01537 }decode_en_ldo_t; 01538 01539 /** 01540 * @brief Set Enable Control for LDO Channel x. 01541 * 01542 * @param[in] channel Channel number: 0, 1 or 2. 01543 * @param[in] en_ldo Enable control for LDO channel x field to be written. 01544 * 01545 * @return 0 on success, error code on failure. 01546 */ 01547 int set_en_ldo(uint8_t channel, decode_en_ldo_t en_ldo); 01548 01549 /** 01550 * @brief Get Enable Control for LDO Channel x. 01551 * 01552 * @param[in] channel Channel number: 0, 1 or 2. 01553 * @param[out] en_ldo Enable control for LDO channel x field to be read. 01554 * 01555 * @return 0 on success, error code on failure. 01556 */ 01557 int get_en_ldo(uint8_t channel, decode_en_ldo_t *en_ldo); 01558 01559 /** 01560 * @brief Register Configuration 01561 * 01562 * @details 01563 * - Register : CNFG_LDO0_B (0x49) and CNFG_LDO1_B (0x4B) 01564 * - Bit Fields : [3] 01565 * - Default : 0x0 01566 * - Description : LDO Channel 0 or 1 Active-Discharge Enable. 01567 */ 01568 typedef enum { 01569 ADE_LDO_DISABLED, 01570 ADE_LDO_ENABLED 01571 }decode_ade_ldo_t; 01572 01573 /** 01574 * @brief Set LDO Channel x Active-Discharge Enable. 01575 * 01576 * @param[in] channel Channel number: 0 or 1. 01577 * @param[in] ade_ldo LDO channel x active-discharge enable bit to be written. 01578 * 01579 * @return 0 on success, error code on failure. 01580 */ 01581 int set_ade_ldo(uint8_t channel, decode_ade_ldo_t ade_ldo); 01582 01583 /** 01584 * @brief Get LDO Channel x Active-Discharge Enable. 01585 * 01586 * @param[in] channel Channel number: 0 or 1. 01587 * @param[out] ade_ldo LDO channel x active-discharge enable bit to be read. 01588 * 01589 * @return 0 on success, error code on failure. 01590 */ 01591 int get_ade_ldo(uint8_t channel, decode_ade_ldo_t *ade_ldo); 01592 01593 /** 01594 * @brief Register Configuration 01595 * 01596 * @details 01597 * - Register : CNFG_LDO0_B (0x49) and CNFG_LDO1_B (0x4B) 01598 * - Bit Fields : [4] 01599 * - Default : 0x0 01600 * - Description : Operation mode of LDO 0 or 1. 01601 */ 01602 typedef enum { 01603 LDO_MD_LDO_MODE, 01604 LDO_MD_LSW_MODE 01605 }decode_ldo_md_t; 01606 01607 /** 01608 * @brief Set Operation mode of LDOx. 01609 * 01610 * @param[in] channel Channel number: 0 or 1. 01611 * @param[in] mode Operation mode of LDOx bit to be written. 01612 * 01613 * @return 0 on success, error code on failure. 01614 */ 01615 int set_ldo_md(uint8_t channel, decode_ldo_md_t mode); 01616 01617 /** 01618 * @brief Get Operation mode of LDOx. 01619 * 01620 * @param[in] channel Channel number: 0 or 1. 01621 * @param[out] mode Operation mode of LDOx bit to be read. 01622 * 01623 * @return 0 on success, error code on failure. 01624 */ 01625 int get_ldo_md(uint8_t channel, decode_ldo_md_t *mode); 01626 01627 /*FuelGauge*/ 01628 /*Status and Configuration Registers*/ 01629 01630 /** 01631 * @brief Register Configuration 01632 * 01633 * @details 01634 * - Register : Fuel-gauge Status (0x00) 01635 * - Bit Fields : [15:0] 01636 * - Default : 0x0000 01637 * - Description : All Status register bit fields. 01638 */ 01639 typedef enum { 01640 Status_Imn, 01641 Status_POR, 01642 Status_SPR_2, 01643 Status_Bst, 01644 Status_Isysmx, 01645 Status_SPR_5, 01646 Status_ThmHot, 01647 Status_dSOCi, 01648 Status_Vmn, 01649 Status_Tmn, 01650 Status_Smn, 01651 Status_Bi, 01652 Status_Vmx, 01653 Status_Tmx, 01654 Status_Smx, 01655 Status_Br 01656 }reg_bit_status_t; 01657 01658 /** 01659 * @brief Set bit field of Fuel-gauge Status[15:0] (0x00) register. 01660 * 01661 * @param[in] bit_field Status bit field to be written to register. 01662 * @param[in] status to be written to register. 01663 * 01664 * @return 0 on success, error code on failure. 01665 */ 01666 int set_fg_status(reg_bit_status_t bit_field, uint8_t status); 01667 01668 /** 01669 * @brief Get bit field of Fuel-gauge Status[15:0] (0x00) register. 01670 * 01671 * @param[in] bit_field Status bit field to be written to register. 01672 * @param[out] status Pointer to save result value. 01673 * 01674 * @return 0 on success, error code on failure. 01675 */ 01676 int get_fg_status(reg_bit_status_t bit_field, uint8_t *status); 01677 01678 /** 01679 * @brief Register Configuration 01680 * 01681 * @details 01682 * - Register : Fuel-gauge VAlrtTh (0x01) 01683 * - Bit Fields : [15:0] 01684 * - Default : 0xFF00 (Disabled) 01685 * - Description : The VAlrtTh register sets upper and lower limits that generate an alert if exceeded by the VCell register value. 01686 */ 01687 typedef enum { 01688 VAlrtTh_MinVoltageAlrt, 01689 VAlrtTh_MaxVoltageAlrt 01690 }reg_bit_valrt_th_t; 01691 01692 /** 01693 * @brief Set bit field of fuel-gauge VAlrtTh (0x01) register. 01694 * 01695 * @param[in] bit_field VAlrtTh register bit field to be written. 01696 * @param[in] voltV to be written to register. 01697 * Interrupt threshold limits are selectable with 20mV resolution 01698 * over the full operating range of the VCell register. 01699 * 01700 * @return 0 on success, error code on failure. 01701 */ 01702 int set_fg_valrt_th(reg_bit_valrt_th_t bit_field, float voltV); 01703 01704 /** 01705 * @brief Get bit field of fuel-gauge VAlrtTh (0x01) register. 01706 * 01707 * @param[in] bit_field VAlrtTh register bit field to be written. 01708 * @param[out] voltV Pointer to save result value. 01709 * Interrupt threshold limits are selectable with 20mV resolution 01710 * over the full operating range of the VCell register. 01711 * 01712 * @return 0 on success, error code on failure. 01713 */ 01714 int get_fg_valrt_th(reg_bit_valrt_th_t bit_field, float *voltV); 01715 01716 /** 01717 * @brief Register Configuration 01718 * 01719 * @details 01720 * - Register : Fuel-gauge TAlrtTh (0x02) 01721 * - Bit Fields : [15:0] 01722 * - Default : 0x7F80 (Disabled) 01723 * - Description : All TAlrtTh register bit fields. 01724 */ 01725 typedef enum { 01726 TAlrtTh_MinTempAlrt, 01727 TAlrtTh_MaxTempAlrt 01728 }reg_bit_talrt_th_t; 01729 01730 /** 01731 * @brief Set bit field of fuel-gauge TAlrtTh (0x02) register. 01732 * 01733 * @param[in] bit_field TAlrtTh register bit field to be written. 01734 * @param[in] tempDegC to be written to register. 01735 * Interrupt threshold limits are stored in two’s-complement format 01736 * with 1°C resolution over the full operating range of the Temp register. 01737 * 01738 * @return 0 on success, error code on failure. 01739 */ 01740 int set_fg_talrt_th(reg_bit_talrt_th_t bit_field, int tempDegC); 01741 01742 /** 01743 * @brief Get bit field of fuel-gauge TAlrtTh (0x02) register. 01744 * 01745 * @param[in] bit_field TAlrtTh register bit field to be written. 01746 * @param[out] tempDegC Pointer to save result value. 01747 * Interrupt threshold limits are stored in two’s-complement format 01748 * with 1°C resolution over the full operating range of the Temp register. 01749 * 01750 * @return 0 on success, error code on failure. 01751 */ 01752 int get_fg_talrt_th(reg_bit_talrt_th_t bit_field, int *tempDegC); 01753 01754 /** 01755 * @brief Register Configuration 01756 * 01757 * @details 01758 * - Register : Fuel-gauge SAlrtTh (0x03) 01759 * - Bit Fields : [15:0] 01760 * - Default : 0xFF00 01761 * - Description : The SAlrtTh register sets upper and lower limits that generate an alert if exceeded by RepSOC. 01762 */ 01763 typedef enum { 01764 SAlrtTh_MinSocAlrt, 01765 SAlrtTh_MaxSocAlrt 01766 }reg_bit_salrt_th_t; 01767 01768 /** 01769 * @brief Set bit field of fuel-gauge SAlrtTh (0x03) register. 01770 * 01771 * @param[in] bit_field SAlrtTh register bit field to be written. 01772 * @param[in] soc to be written to register. 01773 * Interrupt threshold limits are configurable with 1% resolution 01774 * over the full operating range of the RepSOC register. 01775 * 01776 * @return 0 on success, error code on failure. 01777 */ 01778 int set_fg_salrt_th(reg_bit_salrt_th_t bit_field, uint8_t soc); 01779 01780 /** 01781 * @brief Get bit field of fuel-gauge SAlrtTh (0x03) register. 01782 * 01783 * @param[in] bit_field SAlrtTh register bit field to be written. 01784 * @param[out] soc Pointer to save result value. 01785 * Interrupt threshold limits are configurable with 1% resolution 01786 * over the full operating range of the RepSOC register. 01787 * 01788 * @return 0 on success, error code on failure. 01789 */ 01790 int get_fg_salrt_th(reg_bit_salrt_th_t bit_field, uint8_t *soc); 01791 01792 /** 01793 * @brief Set bit field of fuel-gauge FullSocThr (0x13) register. 01794 * 01795 * @param[in] soc_thr to be written to register. 01796 * FullSOCThr comes from OTP if the OTP register is enabled. 01797 * Otherwise it POR’s to a default of 95%. 01798 * LSB unit is 1/256%. 01799 * 01800 * @return 0 on success, error code on failure. 01801 */ 01802 int set_fg_full_soc_thr(float soc_thr); 01803 01804 /** 01805 * @brief Get bit field of fuel-gauge FullSocThr (0x13) register. 01806 * 01807 * @param[out] soc_thr Pointer to save result value. 01808 * FullSOCThr comes from OTP if the OTP register is enabled. 01809 * Otherwise it POR’s to a default of 95%. 01810 * LSB unit is 1/256%. 01811 * 01812 * @return 0 on success, error code on failure. 01813 */ 01814 int get_fg_full_soc_thr(float *soc_thr); 01815 01816 /** 01817 * @brief Set bit field of fuel-gauge DesignCap (0x18) register. 01818 * 01819 * @param[in] capacitymAh to be written to register. 01820 * LSB unit is 0.1mAh. Min is 0.0mAh and Max is 6553.5mAh. 01821 * 01822 * @return 0 on success, error code on failure. 01823 */ 01824 int set_fg_design_cap(float capacitymAh); 01825 01826 /** 01827 * @brief Get bit field of fuel-gauge DesignCap (0x18) register. 01828 * 01829 * @param[out] capacitymAh Pointer to save result value. 01830 * LSB unit is 0.1mAh. Min is 0.0mAh and Max is 6553.5mAh. 01831 * 01832 * @return 0 on success, error code on failure. 01833 */ 01834 int get_fg_design_cap(float *capacitymAh); 01835 01836 /** 01837 * @brief Register Configuration 01838 * 01839 * @details 01840 * - Register : Fuel-gauge Config (0x1D) 01841 * - Bit Fields : [15:0] 01842 * - Default : 0x0000 01843 * - Description : The Config registers hold all shutdown enable, alert enable, 01844 * and temperature enable control bits. 01845 */ 01846 typedef enum { 01847 Config_Ber, 01848 Config_Bei, 01849 Config_Aen, 01850 Config_FTHRM, 01851 Config_ETHRM, 01852 Config_SPR_5, 01853 Config_I2CSH, 01854 Config_SHDN, 01855 Config_Tex, 01856 Config_Ten, 01857 Config_AINSH, 01858 Config_SPR_11, 01859 Config_Vs, 01860 Config_Ts, 01861 Config_Ss, 01862 Config_SPR_15 01863 }reg_bit_config_t; 01864 01865 /** 01866 * @brief Set bit field of fuel-gauge Config (0x1D) register. 01867 * 01868 * @param[in] bit_field Config bit field to be written to register. 01869 * @param[in] config to be written to register. 01870 * 01871 * @return 0 on success, error code on failure. 01872 */ 01873 int set_fg_config(reg_bit_config_t bit_field, uint8_t config); 01874 01875 /** 01876 * @brief Get bit field of fuel-gauge Config (0x1D) register. 01877 * 01878 * @param[in] bit_field Config bit field to be written to register. 01879 * @param[out] config Pointer to save result value. 01880 * 01881 * @return 0 on success, error code on failure. 01882 */ 01883 int get_fg_config(reg_bit_config_t bit_field, uint8_t *config); 01884 01885 /** 01886 * @brief Set bit field of fuel-gauge IChgTerm (0x1E) register. 01887 * 01888 * @param[in] currentA to be written to register. 01889 * The current register has a LSB value of 156.25μA, 01890 * a register scale range of ± 5.12 A. 01891 * 01892 * @return 0 on success, error code on failure. 01893 */ 01894 int set_fg_ichg_term(float currentA); 01895 01896 /** 01897 * @brief Get bit field of fuel-gauge IChgTerm (0x1E) register. 01898 * 01899 * @param[out] currentA Pointer to save result value. 01900 * The current register has a LSB value of 156.25μA, 01901 * a register scale range of ± 5.12 A. 01902 * 01903 * @return 0 on success, error code on failure. 01904 */ 01905 int get_fg_ichg_term(float *currentA); 01906 01907 /** 01908 * @brief Get bit field of fuel-gauge DevName (0x21) register. 01909 * 01910 * @param[out] value Pointer to save result value. 01911 * 01912 * @return 0 on success, error code on failure. 01913 */ 01914 int get_fg_dev_name(uint16_t *value); 01915 01916 /** 01917 * @brief Set the filtering for empty learning for both the I_Avgempty and QRTable registers. 01918 * Bit 15:14 of FilterCfg (0x29) register. 01919 * 01920 * @param[in] nempty Iavg_empty is learned with(NEMPTY+3) right shifts. QRTable is learned with 01921 * (NEMPTY + sizeof(Iavgempty) – sizeof (AvgCurrent)) right shifts. 01922 * @return 0 on success, error code on failure. 01923 */ 01924 int set_fg_nempty(uint8_t nempty); 01925 01926 /** 01927 * @brief Get the filtering for empty learning for both the I_Avgempty and QRTable registers. 01928 * Bit 15:14 of FilterCfg (0x29) register. 01929 * 01930 * @param[out] nempty Iavg_empty is learned with(NEMPTY+3) right shifts. QRTable is learned with 01931 * (NEMPTY + sizeof(Iavgempty) – sizeof (AvgCurrent)) right shifts. 01932 * 01933 * @return 0 on success, error code on failure. 01934 */ 01935 int get_fg_nempty(uint8_t *nempty); 01936 01937 /** 01938 * @brief Set the time constant for the mixing algorithm. 01939 * Bit 10:7 of FilterCfg (0x29) register. 01940 * 01941 * @param[in] second The equation setting the period is: 01942 * Mixing Period = 175.8ms × 2^(5+NMIX) to be written. 01943 * 01944 * @return 0 on success, error code on failure. 01945 */ 01946 int set_fg_nmix(float second); 01947 01948 /** 01949 * @brief Get the time constant for the mixing algorithm. 01950 * Bit 10:7 of FilterCfg (0x29) register. 01951 * 01952 * @param[out] second The equation setting the period is: 01953 * Mixing Period = 175.8ms × 2^(5+NMIX) to be read. 01954 * 01955 * @return 0 on success, error code on failure. 01956 */ 01957 int get_fg_nmix(float *second); 01958 01959 /** 01960 * @brief Set the time constant for the AverageVCELL register. 01961 * Bit 6:4 of FilterCfg (0x29) register. 01962 * 01963 * @param[in] second The equation setting the period is: 01964 * AverageVCELL time constant = 175.8ms × 2^(6+NAVGVCELL) to be written. 01965 * 01966 * @return 0 on success, error code on failure. 01967 */ 01968 int set_fg_navgcell(float second); 01969 01970 /** 01971 * @brief Get the time constant for the AverageVCELL register. 01972 * Bit 6:4 of FilterCfg (0x29) register. 01973 * 01974 * @param[out] second The equation setting the period is: 01975 * AverageVCELL time constant = 175.8ms × 2^(6+NAVGVCELL) to be read. 01976 * 01977 * @return 0 on success, error code on failure. 01978 */ 01979 int get_fg_navgcell(float *second); 01980 01981 /** 01982 * @brief Set the time constant for the AverageCurrent register. 01983 * Bit 3:0 of FilterCfg (0x29) register. 01984 * 01985 * @param[in] second The equation setting the period is: 01986 * AverageCurrent time constant = 175.8ms × 2^(2+NCURR) to be written. 01987 * 01988 * @return 0 on success, error code on failure. 01989 */ 01990 int set_fg_ncurr(float second); 01991 01992 /** 01993 * @brief Get the time constant for the AverageCurrent register. 01994 * Bit 3:0 of FilterCfg (0x29) register. 01995 * 01996 * @param[out] second The equation setting the period is: 01997 * AverageCurrent time constant = 175.8ms × 2^(2+NCURR) to be read. 01998 * 01999 * @return 0 on success, error code on failure. 02000 */ 02001 int get_fg_ncurr(float *second); 02002 02003 /** 02004 * @brief Set bit field of fuel-gauge IAvgEmpty (0x36) register. 02005 * 02006 * @param[in] currentA to be written to register. 02007 * The current register has a LSB value of 156.25μA, 02008 * a register scale range of ± 5.12 A. 02009 * 02010 * @return 0 on success, error code on failure. 02011 */ 02012 int set_fg_iavg_empty(float currentA); 02013 02014 /** 02015 * @brief Get bit field of fuel-gauge IAvgEmpty (0x36) register. 02016 * 02017 * @param[out] currentA Pointer to save result value. 02018 * The current register has a LSB value of 156.25μA, 02019 * a register scale range of ± 5.12 A. 02020 * 02021 * @return 0 on success, error code on failure. 02022 */ 02023 int get_fg_iavg_empty(float *currentA); 02024 02025 /** 02026 * @brief Set the voltage level for detecting empty. 02027 * Bit 15:7 of VEmpty(0x3A) register. 02028 * 02029 * @param[in] voltV Empty voltage to be written. 02030 * A 10mV resolution gives a 0 to 5.11V range. 02031 * 02032 * @return 0 on success, error code on failure. 02033 */ 02034 int set_fg_v_empty(float voltV); 02035 02036 /** 02037 * @brief Get the voltage level for detecting empty. 02038 * Bit 15:7 of VEmpty(0x3A) register. 02039 * 02040 * @param[out] voltV Empty voltage to be read. 02041 * A 10mV resolution gives a 0 to 5.11V range. 02042 * 02043 * @return 0 on success, error code on failure. 02044 */ 02045 int get_fg_v_empty(float *voltV); 02046 02047 /** 02048 * @brief Set the voltage level for clearing empty detection. 02049 * Bit 6:0 of VEmpty(0x3A) register. 02050 * 02051 * @param[in] voltV Recovery voltage to be written. 02052 * A 40mV resolution gives a 0 to 5.08V range. 02053 * 02054 * @return 0 on success, error code on failure. 02055 */ 02056 int set_fg_v_recover(float voltV); 02057 02058 /** 02059 * @brief Get the voltage level for clearing empty detection. 02060 * Bit 6:0 of VEmpty(0x3A) register. 02061 * 02062 * @param[out] voltV Recovery voltage to be read. 02063 * A 40mV resolution gives a 0 to 5.08V range. 02064 * 02065 * @return 0 on success, error code on failure. 02066 */ 02067 int get_fg_v_recover(float *voltV); 02068 02069 /** 02070 * @brief Register Configuration 02071 * 02072 * @details 02073 * - Register : Fuel-gauge Config2 (0xBB) 02074 * - Bit Fields : [15:0] 02075 * - Default : 0x0000 02076 * - Description : The Config registers hold all shutdown enable, alert enable, 02077 * and temperature enable control bits. 02078 */ 02079 typedef enum { 02080 Config2_ISysNCurr, 02081 Config2_OCVQen, 02082 Config2_LdMdl, 02083 Config2_TAlrtEn, 02084 Config2_dSOCen, 02085 Config2_ThmHotAlrtEn, 02086 Config2_ThmHotEn, 02087 Config2_FCThmHot, 02088 Config2_SPR 02089 }reg_bit_config2_t; 02090 02091 /** 02092 * @brief Set Config2 (0xBB) register holding all shutdown enable, alert enable, 02093 * and temperature enable control bits. 02094 * 02095 * @param[in] bit_field Config bit field to be written to register. 02096 * @param[in] config2 value to be written. 02097 * 02098 * @return 0 on success, error code on failure. 02099 */ 02100 int set_fg_config2(reg_bit_config2_t bit_field, uint8_t config2); 02101 02102 /** 02103 * @brief Get Config2 (0xBB) register holding all shutdown enable, alert enable, 02104 * and temperature enable control bits. 02105 * 02106 * @param[in] bit_field Config bit field to be written to register. 02107 * @param[out] config2 value to be read. 02108 * 02109 * @return 0 on success, error code on failure. 02110 */ 02111 int get_fg_config2(reg_bit_config2_t bit_field, uint8_t *config2); 02112 02113 /** 02114 * @brief Set the time constant for the AvgISys register. 02115 * Bit 3:0 of Config2(0xBB) register. 02116 * 02117 * @param[in] second Time constant to be written. 02118 * The default POR value of 0100b gives a time constant of 5.625. 02119 * The equation setting the period is: AvgISys time constant = 45s x 2^(ISysNCurr-7). 02120 * 02121 * @return 0 on success, error code on failure. 02122 */ 02123 int set_fg_isys_ncurr(float second); 02124 02125 /** 02126 * @brief Get the time constant for the AvgISys register. 02127 * Bit 3:0 of Config2(0xBB) register. 02128 * 02129 * @param[out] second Time constant to be read. 02130 * The default POR value of 0100b gives a time constant of 5.625. 02131 * The equation setting the period is: AvgISys time constant = 45s x 2^(ISysNCurr-7). 02132 * 02133 * @return 0 on success, error code on failure. 02134 */ 02135 int get_fg_isys_ncurr(float *second); 02136 02137 /*Measurement Registers*/ 02138 02139 /** 02140 * @brief Set bit field of fuel-gauge Temp (0x08) register. 02141 * 02142 * @param[in] tempDegC to be written to register. 02143 * The LSB is 0.0039˚C. 02144 * 02145 * @return 0 on success, error code on failure. 02146 */ 02147 int set_fg_temp(float tempDegC); 02148 02149 /** 02150 * @brief Get bit field of fuel-gauge Temp (0x08) register. 02151 * 02152 * @param[out] tempDegC Pointer to save result value. 02153 * The LSB is 0.0039˚C. 02154 * 02155 * @return 0 on success, error code on failure. 02156 */ 02157 int get_fg_temp(float *tempDegC); 02158 02159 /** 02160 * @brief Set bit field of fuel-gauge Vcell (0x09) register. 02161 * VCell reports the voltage measured between BATT and GND. 02162 * 02163 * @param[in] voltV to be written to register. 02164 * VCell register reports the 2.5X the voltage measured at the CELLX pin. 02165 * 02166 * @return 0 on success, error code on failure. 02167 */ 02168 int set_fg_vcell(float voltV); 02169 02170 /** 02171 * @brief Get bit field of fuel-gauge Vcell (0x09) register. 02172 * VCell reports the voltage measured between BATT and GND. 02173 * 02174 * @param[out] voltV Pointer to save result value. 02175 * VCell register reports the 2.5X the voltage measured at the CELLX pin. 02176 * 02177 * @return 0 on success, error code on failure. 02178 */ 02179 int get_fg_vcell(float *voltV); 02180 02181 /** 02182 * @brief Set bit field of fuel-gauge Current (0x0A) register. 02183 * 02184 * @param[in] currentA to be written to register. 02185 * The current register has a LSB value of 31.25uA, a register scale of 1.024A 02186 * 02187 * @return 0 on success, error code on failure. 02188 */ 02189 int set_fg_current(float currentA); 02190 02191 /** 02192 * @brief Get bit field of fuel-gauge Current (0x0A) register. 02193 * 02194 * @param[out] currentA Pointer to save result value. 02195 * The current register has a LSB value of 31.25uA, a register scale of 1.024A. 02196 * 02197 * @return 0 on success, error code on failure. 02198 */ 02199 int get_fg_current(float *currentA); 02200 02201 /** 02202 * @brief Set bit field of fuel-gauge AvgCurrent (0x0B) register. 02203 * 02204 * @param[in] currentA to be written to register. 02205 * The current register has a LSB value of 31.25uA, a register scale of 1.024A 02206 * 02207 * @return 0 on success, error code on failure. 02208 */ 02209 int set_fg_avg_current(float currentA); 02210 02211 /** 02212 * @brief Get bit field of fuel-gauge AvgCurrent (0x0B) register. 02213 * 02214 * @param[out] currentA Pointer to save result value. 02215 * The current register has a LSB value of 31.25uA, a register scale of 1.024A 02216 * 02217 * @return 0 on success, error code on failure. 02218 */ 02219 int get_fg_avg_current(float *currentA); 02220 02221 /** 02222 * @brief Set bit field of fuel-gauge AvgTA (0x16) register. 02223 * 02224 * @param[in] tempDegC to be written to register. 02225 * LSB is 1/256°C. Min value is -128.0°C and Max value is 127.996°C. 02226 * 02227 * @return 0 on success, error code on failure. 02228 */ 02229 int set_fg_avgta(float tempDegC); 02230 02231 /** 02232 * @brief Get bit field of fuel-gauge AvgTA (0x16) register. 02233 * 02234 * @param[out] tempDegC Pointer to save result value. 02235 * LSB is 1/256°C. Min value is -128.0°C and Max value is 127.996°C. 02236 * 02237 * @return 0 on success, error code on failure. 02238 */ 02239 int get_fg_avgta(float *tempDegC); 02240 02241 /** 02242 * @brief Set bit field of fuel-gauge AvgVCell (0x19) register. 02243 * 02244 * @param[in] voltV to be written to register. 02245 * LSB is 1.25mV/16. Min value is 0.0V and Max value is 5.11992V. 02246 * 02247 * @return 0 on success, error code on failure. 02248 */ 02249 int set_fg_avgvcell(float voltV); 02250 02251 /** 02252 * @brief Get bit field of fuel-gauge AvgVCell (0x19) register. 02253 * 02254 * @param[out] voltV Pointer to save result value. 02255 * LSB is 1.25mV/16. Min value is 0.0V and Max value is 5.11992V. 02256 * 02257 * @return 0 on success, error code on failure. 02258 */ 02259 int get_fg_avgvcell(float *voltV); 02260 02261 /** 02262 * @brief Register Configuration 02263 * 02264 * @details 02265 * - Register : Fuel-gauge MaxMinTemp (0x1A) 02266 * - Bit Fields : [15:0] 02267 * - Default : 0x7F80 02268 * - Description : All MaxMinTemp register bit fields. 02269 */ 02270 typedef enum { 02271 MaxMinTemp_MinTemperature, 02272 MaxMinTemp_MaxTemperature 02273 }reg_bit_max_min_temp_t; 02274 02275 /** 02276 * @brief Set bit field of fuel-gauge MaxMinTemp (0x1A) register. 02277 * 02278 * @param[in] bit_field to be written to register. 02279 * @param[in] tempDegC to be written to register. 02280 * The maximum and minimum temperatures are each stored as two’s complement 02281 * 8-bit values with 1°C resolution. 02282 * 02283 * @return 0 on success, error code on failure. 02284 */ 02285 int set_fg_max_min_temp(reg_bit_max_min_temp_t bit_field, int tempDegC); 02286 02287 /** 02288 * @brief Get bit field of fuel-gauge MaxMinTemp (0x1A) register. 02289 * 02290 * @param[in] bit_field to be written to register. 02291 * @param[out] tempDegC Pointer to save result value. 02292 * The maximum and minimum temperatures are each stored as two’s complement 02293 * 8-bit values with 1°C resolution. 02294 * 02295 * @return 0 on success, error code on failure. 02296 */ 02297 int get_fg_max_min_temp(reg_bit_max_min_temp_t bit_field, int *tempDegC); 02298 02299 /** 02300 * @brief Register Configuration 02301 * 02302 * @details 02303 * - Register : Fuel-gauge MaxMinVolt (0x1B) 02304 * - Bit Fields : [15:0] 02305 * - Default : 0x00FF 02306 * - Description : All MaxMinVolt register bit fields. 02307 */ 02308 typedef enum { 02309 MaxMinVolt_MinVoltage, 02310 MaxMinVolt_MaxVoltage 02311 }reg_bit_max_min_volt_t; 02312 02313 /** 02314 * @brief Set bit field of fuel-gauge MaxMinVolt (0x1B) register. 02315 * 02316 * @param[in] bit_field MaxMinVolt register bit field to be written. 02317 * @param[in] voltV to be written to register. 02318 * The maximum and minimum voltages are each stored as 8-bit 02319 * values with a 20mV resolution. 02320 * 02321 * @return 0 on success, error code on failure. 02322 */ 02323 int set_fg_max_min_volt(reg_bit_max_min_volt_t bit_field, float voltV); 02324 02325 /** 02326 * @brief Get bit field of fuel-gauge MaxMinVolt (0x1B) register. 02327 * 02328 * @param[in] bit_field MaxMinVolt register bit field to be written. 02329 * @param[out] voltV Pointer to save result value. 02330 * The maximum and minimum voltages are each stored as 8-bit 02331 * values with a 20mV resolution. 02332 * 02333 * @return 0 on success, error code on failure. 02334 */ 02335 int get_fg_max_min_volt(reg_bit_max_min_volt_t bit_field, float *voltV); 02336 02337 /** 02338 * @brief Register Configuration 02339 * 02340 * @details 02341 * - Register : Fuel-gauge MaxMinCurr (0x1C) 02342 * - Bit Fields : [15:0] 02343 * - Default : 0x807F 02344 * - Description : All MaxMinCurr register bit fields. 02345 */ 02346 typedef enum { 02347 MaxMinCurr_MaxDisCurrent, 02348 MaxMinCurr_MaxChargeCurrent 02349 }reg_bit_max_min_curr_t; 02350 02351 /** 02352 * @brief Set bit field of fuel-gauge MaxMinCurr (0x1C) register. 02353 * 02354 * @param[in] bit_field MaxMinCurr register bit field to be written. 02355 * @param[in] currentA to be written to register. 02356 * The maximum and minimum currents are each stored 02357 * as two’s complement 8-bit values with 8mA resolution. 02358 * 02359 * @return 0 on success, error code on failure. 02360 */ 02361 int set_fg_max_min_curr(reg_bit_max_min_curr_t bit_field, float currentA); 02362 02363 /** 02364 * @brief Get bit field of fuel-gauge MaxMinCurr (0x1C) register. 02365 * 02366 * @param[in] bit_field MaxMinCurr register bit field to be written. 02367 * @param[out] currentA Pointer to save result value. 02368 * The maximum and minimum currents are each stored 02369 * as two’s complement 8-bit values with 8mA resolution. 02370 * 02371 * @return 0 on success, error code on failure. 02372 */ 02373 int get_fg_max_min_curr(reg_bit_max_min_curr_t bit_field, float *currentA); 02374 02375 /** 02376 * @brief Set bit field of fuel-gauge AIN0 (0x27) register. 02377 * 02378 * @param[in] percent to be written to register. 02379 * AIN register with an LSB of 0.0122%. The value from 0% to 100%. 02380 * 02381 * @return 0 on success, error code on failure. 02382 */ 02383 int set_fg_ain0(float percent); 02384 02385 /** 02386 * @brief Get bit field of fuel-gauge AIN0 (0x27) register. 02387 * 02388 * @param[out] percent Pointer to save result value. 02389 * AIN register with an LSB of 0.0122%. The value from 0% to 100%. 02390 * 02391 * @return 0 on success, error code on failure. 02392 */ 02393 int get_fg_ain0(float *percent); 02394 02395 /** 02396 * @brief Set bit field of fuel-gauge Timer (0x3E) register. 02397 * 02398 * @param[in] second to be written to register. 02399 * The Timer register LSB is 175.8ms, giving a full-scale range of 0 to 3.2 hours. 02400 * 02401 * @return 0 on success, error code on failure. 02402 */ 02403 int set_fg_timer(float second); 02404 02405 /** 02406 * @brief Get bit field of fuel-gauge Timer (0x3E) register. 02407 * 02408 * @param[out] second Pointer to save result value. 02409 * The Timer register LSB is 175.8ms, giving a full-scale range of 0 to 3.2 hours. 02410 * 02411 * @return 0 on success, error code on failure. 02412 */ 02413 int get_fg_timer(float *second); 02414 02415 /** 02416 * @brief Set bit field of fuel-gauge ShdnTimer (0x3F) register. 02417 * Shutdown Counter. Bit 12:0. 02418 * 02419 * @param[in] second to be written to register. 02420 * The counter LSB is 1.4s. 02421 * 02422 * @return 0 on success, error code on failure. 02423 */ 02424 int set_fg_shdnctr(float second); 02425 02426 /** 02427 * @brief Get bit field of fuel-gauge ShdnTimer (0x3F) register. 02428 * Shutdown Counter. Bit 12:0. 02429 * 02430 * @param[out] second Pointer to save result value. 02431 * The counter LSB is 1.4s. 02432 * 02433 * @return 0 on success, error code on failure. 02434 */ 02435 int get_fg_shdnctr(float *second); 02436 02437 /** 02438 * @brief Set bit field of fuel-gauge ShdnTimer (0x3F) register. 02439 * Shutdown timeout period from a minimum of 45s to a maximum of 1.6h. Bit 15:13. 02440 * 02441 * @param[in] second to be written to register. 02442 * Shutdown Timeout Period = 175.8ms × 2^(8+THR). 02443 * 02444 * @return 0 on success, error code on failure. 02445 */ 02446 int set_fg_shdn_thr(float second); 02447 02448 /** 02449 * @brief Get bit field of fuel-gauge ShdnTimer (0x3F) register. 02450 * Shutdown timeout period from a minimum of 45s to a maximum of 1.6h. Bit 15:13. 02451 * 02452 * @param[out] second Pointer to save result value. 02453 * Shutdown Timeout Period = 175.8ms × 2^(8+THR). 02454 * 02455 * @return 0 on success, error code on failure. 02456 */ 02457 int get_fg_shdn_thr(float *second); 02458 02459 /** 02460 * @brief Set bit field of fuel-gauge TimerH (0xBE) register. 02461 * 02462 * @param[in] hour to be written to register. 02463 * A 3.2-hour LSB gives a full-scale range for the register of up to 23.94 years. 02464 * 02465 * @return 0 on success, error code on failure. 02466 */ 02467 int set_fg_timerh(float hour); 02468 02469 /** 02470 * @brief Get bit field of fuel-gauge TimerH (0xBE) register. 02471 * 02472 * @param[out] hour Pointer to save result value. 02473 * A 3.2-hour LSB gives a full-scale range for the register of up to 23.94 years. 02474 * 02475 * @return 0 on success, error code on failure. 02476 */ 02477 int get_fg_timerh(float *hour); 02478 02479 /*ModelGauge m5 Output Registers*/ 02480 02481 /** 02482 * @brief Set bit field of fuel-gauge RepCap (0x05) register. 02483 * RepCap is the reported remaining capacity in mAh. 02484 * 02485 * @param[in] repCapmAh to be written to register. 02486 * LSB is 0.1mAh. Min value is 0.0mAh and Max value is 6553.5mAh. 02487 * 02488 * @return 0 on success, error code on failure. 02489 */ 02490 int set_fg_rep_cap(float repCapmAh); 02491 02492 /** 02493 * @brief Get bit field of fuel-gauge RepCap (0x05) register. 02494 * RepCap is the reported remaining capacity in mAh. 02495 * 02496 * @param[out] repCapmAh Pointer to save result value. 02497 * LSB is 0.1mAh. Min value is 0.0mAh and Max value is 6553.5mAh. 02498 * 02499 * @return 0 on success, error code on failure. 02500 */ 02501 int get_fg_rep_cap(float *repCapmAh); 02502 02503 /** 02504 * @brief Set bit field of fuel-gauge RepSOC (0x06) register. 02505 * 02506 * @param[in] percent to be written to register. 02507 * LSB is 1/256%. Min value is 0.0% and Max value is 255.9961%. 02508 * 02509 * @return 0 on success, error code on failure. 02510 */ 02511 int set_fg_rep_soc(float percent); 02512 02513 /** 02514 * @brief Get bit field of fuel-gauge RepSOC (0x06) register. 02515 * 02516 * @param[out] percent Pointer to save result value. 02517 * LSB is 1/256%. Min value is 0.0% and Max value is 255.9961%. 02518 * 02519 * @return 0 on success, error code on failure. 02520 */ 02521 int get_fg_rep_soc(float *percent); 02522 02523 /** 02524 * @brief Set bit field of fuel-gauge AvSOC (0x0E) register. 02525 * 02526 * @param[in] percent to be written to register. 02527 * LSB is 1/256%. Min value is 0.0% and Max value is 255.9961%. 02528 * 02529 * @return 0 on success, error code on failure. 02530 */ 02531 int set_fg_av_soc(float percent); 02532 02533 /** 02534 * @brief Get bit field of fuel-gauge AvSOC (0x0E) register. 02535 * 02536 * @param[out] percent Pointer to save result value. 02537 * LSB is 1/256%. Min value is 0.0% and Max value is 255.9961%. 02538 * 02539 * @return 0 on success, error code on failure. 02540 */ 02541 int get_fg_av_soc(float *percent); 02542 02543 /** 02544 * @brief Set bit field of fuel-gauge FullCapRep (0x10) register. 02545 * 02546 * @param[in] repCapmAh to be written to register. 02547 * LSB is 0.1mAh. Min value is 0.0mAh and Max value is 6553.5mAh. 02548 * 02549 * @return 0 on success, error code on failure. 02550 */ 02551 int set_fg_full_cap_reg(float repCapmAh); 02552 02553 /** 02554 * @brief Get bit field of fuel-gauge FullCapRep (0x10) register. 02555 * 02556 * @param[out] repCapmAh Pointer to save result value. 02557 * LSB is 0.1mAh. Min value is 0.0mAh and Max value is 6553.5mAh. 02558 * 02559 * @return 0 on success, error code on failure. 02560 */ 02561 int get_fg_full_cap_reg(float *repCapmAh); 02562 02563 /** 02564 * @brief Set bit field of fuel-gauge TTE (0x11) register. 02565 * 02566 * @param[in] minute to be written to register. 02567 * LSB is 5.625s. Min value is 0.0s and Max value is 102.3984h. 02568 * 02569 * @return 0 on success, error code on failure. 02570 */ 02571 int set_fg_tte(float minute); 02572 02573 /** 02574 * @brief Get bit field of fuel-gauge TTE (0x11) register. 02575 * 02576 * @param[out] minute Pointer to save result value. 02577 * LSB is 5.625s. Min value is 0.0s and Max value is 102.3984h. 02578 * 02579 * @return 0 on success, error code on failure. 02580 */ 02581 int get_fg_tte(float *minute); 02582 02583 /** 02584 * @brief Set bit field of fuel-gauge RCell (0x14) register. 02585 * 02586 * @param[in] resOhm to be written to register. 02587 * LSB is 1/4096Ohm. Min value is 0.0Ohm and Max value is 15.99976Ohm. 02588 * 02589 * @return 0 on success, error code on failure. 02590 */ 02591 int set_fg_rcell(float resOhm); 02592 02593 /** 02594 * @brief Get bit field of fuel-gauge RCell (0x14) register. 02595 * 02596 * @param[out] resOhm Pointer to save result value. 02597 * LSB is 1/4096Ohm. Min value is 0.0Ohm and Max value is 15.99976Ohm. 02598 * 02599 * @return 0 on success, error code on failure. 02600 */ 02601 int get_fg_rcell(float *resOhm); 02602 02603 /** 02604 * @brief Set bit field of fuel-gauge Cycles (0x17) register. 02605 * 02606 * @param[in] percent to be written to register. 02607 * The LSB indicates 1% of a battery cycle (1% charge + 1% discharge). 02608 * 02609 * @return 0 on success, error code on failure. 02610 */ 02611 int set_fg_cycles(uint16_t percent); 02612 02613 /** 02614 * @brief Get bit field of fuel-gauge Cycles (0x17) register. 02615 * 02616 * @param[out] percent Pointer to save result value. 02617 * The LSB indicates 1% of a battery cycle (1% charge + 1% discharge). 02618 * 02619 * @return 0 on success, error code on failure. 02620 */ 02621 int get_fg_cycles(uint16_t *percent); 02622 02623 /** 02624 * @brief Set bit field of fuel-gauge AvCap (0x1F) register. 02625 * 02626 * @param[in] avCapmAh to be written to register. 02627 * LSB is 0.1mAh. Min value is 0.0mAh and Max value is 6553.5mAh. 02628 * 02629 * @return 0 on success, error code on failure. 02630 */ 02631 int set_fg_av_cap(float avCapmAh); 02632 02633 /** 02634 * @brief Get bit field of fuel-gauge AvCap (0x1F) register. 02635 * 02636 * @param[out] avCapmAh Pointer to save result value. 02637 * LSB is 0.1mAh. Min value is 0.0mAh and Max value is 6553.5mAh. 02638 * 02639 * @return 0 on success, error code on failure. 02640 */ 02641 int get_fg_av_cap(float *avCapmAh); 02642 02643 /** 02644 * @brief Set bit field of fuel-gauge TTF (0x20) register. 02645 * 02646 * @param[in] second to be written to register. 02647 * LSB is 5.625s. Min value is 0.0s and Max value is 102.3984h. 02648 * 02649 * @return 0 on success, error code on failure. 02650 */ 02651 int set_fg_ttf(float second); 02652 02653 /** 02654 * @brief Get bit field of fuel-gauge TTF (0x20) register. 02655 * 02656 * @param[out] second Pointer to save result value. 02657 * LSB is 5.625s. Min value is 0.0s and Max value is 102.3984h. 02658 * 02659 * @return 0 on success, error code on failure. 02660 */ 02661 int get_fg_ttf(float *second); 02662 02663 /** 02664 * @brief Disable all interrupts 02665 * 02666 * @return 0 on success, error code on failure 02667 */ 02668 int irq_disable_all(); 02669 02670 /** 02671 * @brief Set Interrupt Handler for a Specific Interrupt ID. 02672 * 02673 * @param[in] id reg_bit_reg_bit_int_glbl_t id, one of INTR_ID_*. 02674 * @param[in] func Interrupt handler function. 02675 * @param[in] cb Interrupt handler data. 02676 */ 02677 void set_interrupt_handler(reg_bit_int_glbl_t id, interrupt_handler_function func, void *cb); 02678 }; 02679 #endif
Generated on Fri Aug 26 2022 12:03:39 by 1.7.2