From 233fd3c7a771e0f1b5a4bec5708fca4520609c72 Mon Sep 17 00:00:00 2001 From: Limor Fried Date: Sun, 10 Aug 2025 01:04:42 -0400 Subject: [PATCH] Format code with clang-format MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- Adafruit_BQ25628E.cpp | 838 +++++++++++++++++++++++++----------------- Adafruit_BQ25628E.h | 204 +++++----- 2 files changed, 619 insertions(+), 423 deletions(-) diff --git a/Adafruit_BQ25628E.cpp b/Adafruit_BQ25628E.cpp index 8e47a85..57c9081 100644 --- a/Adafruit_BQ25628E.cpp +++ b/Adafruit_BQ25628E.cpp @@ -51,7 +51,7 @@ Adafruit_BQ25628E::~Adafruit_BQ25628E() { * The Wire object to be used for I2C connections. * @return True if initialization was successful, otherwise false. */ -bool Adafruit_BQ25628E::begin(uint8_t i2c_addr, TwoWire *wire) { +bool Adafruit_BQ25628E::begin(uint8_t i2c_addr, TwoWire* wire) { if (i2c_dev) { delete i2c_dev; } @@ -63,14 +63,15 @@ bool Adafruit_BQ25628E::begin(uint8_t i2c_addr, TwoWire *wire) { } // Verify chip connection by reading part information register - Adafruit_BusIO_Register part_info_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_PART_INFORMATION); + Adafruit_BusIO_Register part_info_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_PART_INFORMATION); uint8_t part_info = part_info_reg.read(); - + // Check for valid BQ25628E part ID (0x22) if (part_info != 0x22) { return false; } - + return true; } @@ -84,7 +85,7 @@ bool Adafruit_BQ25628E::setChargeCurrentLimitA(float current_a) { // Convert current to register value: ICHG = (current_a - 0.04) / 0.04 + 1 // Range: 40mA-2000mA (1h-32h), so offset by 1 uint8_t ichg_value = (uint8_t)((current_a - 0.04f) / 0.04f + 1); - + // Clamp to valid range (1-50, where 50 = 32h) if (ichg_value < 1) { ichg_value = 1; @@ -92,13 +93,15 @@ bool Adafruit_BQ25628E::setChargeCurrentLimitA(float current_a) { if (ichg_value > 50) { ichg_value = 50; } - + // Create register object (16-bit register, little endian) - Adafruit_BusIO_Register charge_current_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGE_CURRENT_LIMIT, 2, LSBFIRST); - + Adafruit_BusIO_Register charge_current_reg = Adafruit_BusIO_Register( + i2c_dev, BQ25628E_REG_CHARGE_CURRENT_LIMIT, 2, LSBFIRST); + // Create register bits object for ICHG field (bits 10:5, 6 bits, shift by 5) - Adafruit_BusIO_RegisterBits ichg_bits = Adafruit_BusIO_RegisterBits(&charge_current_reg, 6, 5); - + Adafruit_BusIO_RegisterBits ichg_bits = + Adafruit_BusIO_RegisterBits(&charge_current_reg, 6, 5); + return ichg_bits.write(ichg_value); } @@ -108,13 +111,15 @@ bool Adafruit_BQ25628E::setChargeCurrentLimitA(float current_a) { */ float Adafruit_BQ25628E::getChargeCurrentLimitA() { // Create register object (16-bit register, little endian) - Adafruit_BusIO_Register charge_current_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGE_CURRENT_LIMIT, 2, LSBFIRST); - + Adafruit_BusIO_Register charge_current_reg = Adafruit_BusIO_Register( + i2c_dev, BQ25628E_REG_CHARGE_CURRENT_LIMIT, 2, LSBFIRST); + // Create register bits object for ICHG field (bits 10:5, 6 bits, shift by 5) - Adafruit_BusIO_RegisterBits ichg_bits = Adafruit_BusIO_RegisterBits(&charge_current_reg, 6, 5); - + Adafruit_BusIO_RegisterBits ichg_bits = + Adafruit_BusIO_RegisterBits(&charge_current_reg, 6, 5); + uint8_t ichg_value = ichg_bits.read(); - + // Convert register value to current: current_a = (ICHG - 1) * 0.04 + 0.04 return (ichg_value - 1) * 0.04f + 0.04f; } @@ -129,7 +134,7 @@ bool Adafruit_BQ25628E::setChargeVoltageLimitV(float voltage_v) { // Convert voltage to mV and then to register value uint16_t voltage_mv = (uint16_t)(voltage_v * 1000); uint16_t vreg_value = voltage_mv / 10; - + // Clamp to valid range (350-480 for 3.5V-4.8V) if (vreg_value < 350) { vreg_value = 350; @@ -137,13 +142,15 @@ bool Adafruit_BQ25628E::setChargeVoltageLimitV(float voltage_v) { if (vreg_value > 480) { vreg_value = 480; } - + // Create register object (16-bit register, little endian) - Adafruit_BusIO_Register charge_voltage_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGE_VOLTAGE_LIMIT, 2, LSBFIRST); - + Adafruit_BusIO_Register charge_voltage_reg = Adafruit_BusIO_Register( + i2c_dev, BQ25628E_REG_CHARGE_VOLTAGE_LIMIT, 2, LSBFIRST); + // Create register bits object for VREG field (bits 11:3, 9 bits, shift by 3) - Adafruit_BusIO_RegisterBits vreg_bits = Adafruit_BusIO_RegisterBits(&charge_voltage_reg, 9, 3); - + Adafruit_BusIO_RegisterBits vreg_bits = + Adafruit_BusIO_RegisterBits(&charge_voltage_reg, 9, 3); + return vreg_bits.write(vreg_value); } @@ -153,13 +160,15 @@ bool Adafruit_BQ25628E::setChargeVoltageLimitV(float voltage_v) { */ float Adafruit_BQ25628E::getChargeVoltageLimitV() { // Create register object (16-bit register, little endian) - Adafruit_BusIO_Register charge_voltage_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGE_VOLTAGE_LIMIT, 2, LSBFIRST); - + Adafruit_BusIO_Register charge_voltage_reg = Adafruit_BusIO_Register( + i2c_dev, BQ25628E_REG_CHARGE_VOLTAGE_LIMIT, 2, LSBFIRST); + // Create register bits object for VREG field (bits 11:3, 9 bits, shift by 3) - Adafruit_BusIO_RegisterBits vreg_bits = Adafruit_BusIO_RegisterBits(&charge_voltage_reg, 9, 3); - + Adafruit_BusIO_RegisterBits vreg_bits = + Adafruit_BusIO_RegisterBits(&charge_voltage_reg, 9, 3); + uint16_t vreg_value = vreg_bits.read(); - + // Convert register value to voltage: voltage_v = vreg_value * 0.01 return vreg_value * 0.01f; } @@ -174,7 +183,7 @@ bool Adafruit_BQ25628E::setInputCurrentLimitA(float current_a) { // Convert current to mA and then to register value uint16_t current_ma = (uint16_t)(current_a * 1000); uint8_t iindpm_value = current_ma / 20; - + // Clamp to valid range (5-160 for 0.1A-3.2A) if (iindpm_value < 5) { iindpm_value = 5; @@ -182,13 +191,15 @@ bool Adafruit_BQ25628E::setInputCurrentLimitA(float current_a) { if (iindpm_value > 160) { iindpm_value = 160; } - + // Create register object (16-bit register, little endian) - Adafruit_BusIO_Register input_current_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_INPUT_CURRENT_LIMIT, 2, LSBFIRST); - + Adafruit_BusIO_Register input_current_reg = Adafruit_BusIO_Register( + i2c_dev, BQ25628E_REG_INPUT_CURRENT_LIMIT, 2, LSBFIRST); + // Create register bits object for IINDPM field (8 bits, shift by 4) - Adafruit_BusIO_RegisterBits iindpm_bits = Adafruit_BusIO_RegisterBits(&input_current_reg, 8, 4); - + Adafruit_BusIO_RegisterBits iindpm_bits = + Adafruit_BusIO_RegisterBits(&input_current_reg, 8, 4); + return iindpm_bits.write(iindpm_value); } @@ -198,13 +209,15 @@ bool Adafruit_BQ25628E::setInputCurrentLimitA(float current_a) { */ float Adafruit_BQ25628E::getInputCurrentLimitA() { // Create register object (16-bit register, little endian) - Adafruit_BusIO_Register input_current_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_INPUT_CURRENT_LIMIT, 2, LSBFIRST); - + Adafruit_BusIO_Register input_current_reg = Adafruit_BusIO_Register( + i2c_dev, BQ25628E_REG_INPUT_CURRENT_LIMIT, 2, LSBFIRST); + // Create register bits object for IINDPM field (8 bits, shift by 4) - Adafruit_BusIO_RegisterBits iindpm_bits = Adafruit_BusIO_RegisterBits(&input_current_reg, 8, 4); - + Adafruit_BusIO_RegisterBits iindpm_bits = + Adafruit_BusIO_RegisterBits(&input_current_reg, 8, 4); + uint8_t iindpm_value = iindpm_bits.read(); - + // Convert register value to current: current_a = iindpm_value * 0.02 return iindpm_value * 0.02f; } @@ -219,7 +232,7 @@ bool Adafruit_BQ25628E::setInputVoltageLimitV(float voltage_v) { // Convert voltage to mV and then to register value uint16_t voltage_mv = (uint16_t)(voltage_v * 1000); uint16_t vindpm_value = voltage_mv / 40; - + // Clamp to valid range (95-420 for 3.8V-16.8V) if (vindpm_value < 95) { vindpm_value = 95; @@ -227,13 +240,15 @@ bool Adafruit_BQ25628E::setInputVoltageLimitV(float voltage_v) { if (vindpm_value > 420) { vindpm_value = 420; } - + // Create register object (16-bit register, little endian) - Adafruit_BusIO_Register input_voltage_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_INPUT_VOLTAGE_LIMIT, 2, LSBFIRST); - + Adafruit_BusIO_Register input_voltage_reg = Adafruit_BusIO_Register( + i2c_dev, BQ25628E_REG_INPUT_VOLTAGE_LIMIT, 2, LSBFIRST); + // Create register bits object for VINDPM field (9 bits, shift by 5) - Adafruit_BusIO_RegisterBits vindpm_bits = Adafruit_BusIO_RegisterBits(&input_voltage_reg, 9, 5); - + Adafruit_BusIO_RegisterBits vindpm_bits = + Adafruit_BusIO_RegisterBits(&input_voltage_reg, 9, 5); + return vindpm_bits.write(vindpm_value); } @@ -243,13 +258,15 @@ bool Adafruit_BQ25628E::setInputVoltageLimitV(float voltage_v) { */ float Adafruit_BQ25628E::getInputVoltageLimitV() { // Create register object (16-bit register, little endian) - Adafruit_BusIO_Register input_voltage_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_INPUT_VOLTAGE_LIMIT, 2, LSBFIRST); - + Adafruit_BusIO_Register input_voltage_reg = Adafruit_BusIO_Register( + i2c_dev, BQ25628E_REG_INPUT_VOLTAGE_LIMIT, 2, LSBFIRST); + // Create register bits object for VINDPM field (9 bits, shift by 5) - Adafruit_BusIO_RegisterBits vindpm_bits = Adafruit_BusIO_RegisterBits(&input_voltage_reg, 9, 5); - + Adafruit_BusIO_RegisterBits vindpm_bits = + Adafruit_BusIO_RegisterBits(&input_voltage_reg, 9, 5); + uint16_t vindpm_value = vindpm_bits.read(); - + // Convert register value to voltage: voltage_v = vindpm_value * 0.04 return vindpm_value * 0.04f; } @@ -264,7 +281,7 @@ bool Adafruit_BQ25628E::setMinimalSystemVoltageV(float voltage_v) { // Convert voltage to mV and then to register value uint16_t voltage_mv = (uint16_t)(voltage_v * 1000); uint8_t vsysmin_value = voltage_mv / 80; - + // Clamp to valid range (32-48 for 2.56V-3.84V) if (vsysmin_value < 32) { vsysmin_value = 32; @@ -272,13 +289,15 @@ bool Adafruit_BQ25628E::setMinimalSystemVoltageV(float voltage_v) { if (vsysmin_value > 48) { vsysmin_value = 48; } - + // Create register object (16-bit register, little endian) - Adafruit_BusIO_Register system_voltage_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_MINIMAL_SYSTEM_VOLTAGE, 2, LSBFIRST); - + Adafruit_BusIO_Register system_voltage_reg = Adafruit_BusIO_Register( + i2c_dev, BQ25628E_REG_MINIMAL_SYSTEM_VOLTAGE, 2, LSBFIRST); + // Create register bits object for VSYSMIN field (6 bits, shift by 6) - Adafruit_BusIO_RegisterBits vsysmin_bits = Adafruit_BusIO_RegisterBits(&system_voltage_reg, 6, 6); - + Adafruit_BusIO_RegisterBits vsysmin_bits = + Adafruit_BusIO_RegisterBits(&system_voltage_reg, 6, 6); + return vsysmin_bits.write(vsysmin_value); } @@ -288,13 +307,15 @@ bool Adafruit_BQ25628E::setMinimalSystemVoltageV(float voltage_v) { */ float Adafruit_BQ25628E::getMinimalSystemVoltageV() { // Create register object (16-bit register, little endian) - Adafruit_BusIO_Register system_voltage_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_MINIMAL_SYSTEM_VOLTAGE, 2, LSBFIRST); - + Adafruit_BusIO_Register system_voltage_reg = Adafruit_BusIO_Register( + i2c_dev, BQ25628E_REG_MINIMAL_SYSTEM_VOLTAGE, 2, LSBFIRST); + // Create register bits object for VSYSMIN field (6 bits, shift by 6) - Adafruit_BusIO_RegisterBits vsysmin_bits = Adafruit_BusIO_RegisterBits(&system_voltage_reg, 6, 6); - + Adafruit_BusIO_RegisterBits vsysmin_bits = + Adafruit_BusIO_RegisterBits(&system_voltage_reg, 6, 6); + uint8_t vsysmin_value = vsysmin_bits.read(); - + // Convert register value to voltage: voltage_v = vsysmin_value * 0.08 return vsysmin_value * 0.08f; } @@ -309,7 +330,7 @@ bool Adafruit_BQ25628E::setPrechargeCurrentLimitA(float current_a) { // Convert current to mA and then to register value uint16_t current_ma = (uint16_t)(current_a * 1000); uint8_t iprechg_value = current_ma / 10; - + // Clamp to valid range (1-31 for 0.01A-0.31A) if (iprechg_value < 1) { iprechg_value = 1; @@ -317,13 +338,15 @@ bool Adafruit_BQ25628E::setPrechargeCurrentLimitA(float current_a) { if (iprechg_value > 31) { iprechg_value = 31; } - + // Create register object (16-bit register, little endian) - Adafruit_BusIO_Register precharge_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_PRECHARGE_CONTROL, 2, LSBFIRST); - + Adafruit_BusIO_Register precharge_reg = Adafruit_BusIO_Register( + i2c_dev, BQ25628E_REG_PRECHARGE_CONTROL, 2, LSBFIRST); + // Create register bits object for IPRECHG field (5 bits, shift by 3) - Adafruit_BusIO_RegisterBits iprechg_bits = Adafruit_BusIO_RegisterBits(&precharge_reg, 5, 3); - + Adafruit_BusIO_RegisterBits iprechg_bits = + Adafruit_BusIO_RegisterBits(&precharge_reg, 5, 3); + return iprechg_bits.write(iprechg_value); } @@ -333,13 +356,15 @@ bool Adafruit_BQ25628E::setPrechargeCurrentLimitA(float current_a) { */ float Adafruit_BQ25628E::getPrechargeCurrentLimitA() { // Create register object (16-bit register, little endian) - Adafruit_BusIO_Register precharge_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_PRECHARGE_CONTROL, 2, LSBFIRST); - + Adafruit_BusIO_Register precharge_reg = Adafruit_BusIO_Register( + i2c_dev, BQ25628E_REG_PRECHARGE_CONTROL, 2, LSBFIRST); + // Create register bits object for IPRECHG field (5 bits, shift by 3) - Adafruit_BusIO_RegisterBits iprechg_bits = Adafruit_BusIO_RegisterBits(&precharge_reg, 5, 3); - + Adafruit_BusIO_RegisterBits iprechg_bits = + Adafruit_BusIO_RegisterBits(&precharge_reg, 5, 3); + uint8_t iprechg_value = iprechg_bits.read(); - + // Convert register value to current: current_a = iprechg_value * 0.01 return iprechg_value * 0.01f; } @@ -354,7 +379,7 @@ bool Adafruit_BQ25628E::setTerminationCurrentThresholdA(float current_a) { // Convert current to mA and then to register value uint16_t current_ma = (uint16_t)(current_a * 1000); uint8_t iterm_value = current_ma / 5; - + // Clamp to valid range (1-62 for 0.005A-0.31A) if (iterm_value < 1) { iterm_value = 1; @@ -362,13 +387,15 @@ bool Adafruit_BQ25628E::setTerminationCurrentThresholdA(float current_a) { if (iterm_value > 62) { iterm_value = 62; } - + // Create register object (16-bit register, little endian) - Adafruit_BusIO_Register termination_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_TERMINATION_CONTROL, 2, LSBFIRST); - + Adafruit_BusIO_Register termination_reg = Adafruit_BusIO_Register( + i2c_dev, BQ25628E_REG_TERMINATION_CONTROL, 2, LSBFIRST); + // Create register bits object for ITERM field (6 bits, shift by 2) - Adafruit_BusIO_RegisterBits iterm_bits = Adafruit_BusIO_RegisterBits(&termination_reg, 6, 2); - + Adafruit_BusIO_RegisterBits iterm_bits = + Adafruit_BusIO_RegisterBits(&termination_reg, 6, 2); + return iterm_bits.write(iterm_value); } @@ -378,13 +405,15 @@ bool Adafruit_BQ25628E::setTerminationCurrentThresholdA(float current_a) { */ float Adafruit_BQ25628E::getTerminationCurrentThresholdA() { // Create register object (16-bit register, little endian) - Adafruit_BusIO_Register termination_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_TERMINATION_CONTROL, 2, LSBFIRST); - + Adafruit_BusIO_Register termination_reg = Adafruit_BusIO_Register( + i2c_dev, BQ25628E_REG_TERMINATION_CONTROL, 2, LSBFIRST); + // Create register bits object for ITERM field (6 bits, shift by 2) - Adafruit_BusIO_RegisterBits iterm_bits = Adafruit_BusIO_RegisterBits(&termination_reg, 6, 2); - + Adafruit_BusIO_RegisterBits iterm_bits = + Adafruit_BusIO_RegisterBits(&termination_reg, 6, 2); + uint8_t iterm_value = iterm_bits.read(); - + // Convert register value to current: current_a = iterm_value * 0.005 return iterm_value * 0.005f; } @@ -396,9 +425,11 @@ float Adafruit_BQ25628E::getTerminationCurrentThresholdA() { * @return True if successful, otherwise false. */ bool Adafruit_BQ25628E::setTrickleCurrent(bool use_40ma) { - Adafruit_BusIO_Register charge_control_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGE_CONTROL, 1); - Adafruit_BusIO_RegisterBits itrickle_bit = Adafruit_BusIO_RegisterBits(&charge_control_reg, 1, 5); - + Adafruit_BusIO_Register charge_control_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGE_CONTROL, 1); + Adafruit_BusIO_RegisterBits itrickle_bit = + Adafruit_BusIO_RegisterBits(&charge_control_reg, 1, 5); + return itrickle_bit.write(use_40ma ? 1 : 0); } @@ -407,9 +438,11 @@ bool Adafruit_BQ25628E::setTrickleCurrent(bool use_40ma) { * @return True if 40mA trickle current, false if 10mA trickle current */ bool Adafruit_BQ25628E::getTrickleCurrent() { - Adafruit_BusIO_Register charge_control_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGE_CONTROL, 1); - Adafruit_BusIO_RegisterBits itrickle_bit = Adafruit_BusIO_RegisterBits(&charge_control_reg, 1, 5); - + Adafruit_BusIO_Register charge_control_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGE_CONTROL, 1); + Adafruit_BusIO_RegisterBits itrickle_bit = + Adafruit_BusIO_RegisterBits(&charge_control_reg, 1, 5); + return itrickle_bit.read() == 1; } @@ -420,9 +453,11 @@ bool Adafruit_BQ25628E::getTrickleCurrent() { * @return True if successful, otherwise false. */ bool Adafruit_BQ25628E::setEnableTermination(bool enable) { - Adafruit_BusIO_Register charge_control_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGE_CONTROL, 1); - Adafruit_BusIO_RegisterBits en_term_bit = Adafruit_BusIO_RegisterBits(&charge_control_reg, 1, 2); - + Adafruit_BusIO_Register charge_control_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGE_CONTROL, 1); + Adafruit_BusIO_RegisterBits en_term_bit = + Adafruit_BusIO_RegisterBits(&charge_control_reg, 1, 2); + return en_term_bit.write(enable ? 1 : 0); } @@ -431,9 +466,11 @@ bool Adafruit_BQ25628E::setEnableTermination(bool enable) { * @return True if termination enabled, false if disabled */ bool Adafruit_BQ25628E::getEnableTermination() { - Adafruit_BusIO_Register charge_control_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGE_CONTROL, 1); - Adafruit_BusIO_RegisterBits en_term_bit = Adafruit_BusIO_RegisterBits(&charge_control_reg, 1, 2); - + Adafruit_BusIO_Register charge_control_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGE_CONTROL, 1); + Adafruit_BusIO_RegisterBits en_term_bit = + Adafruit_BusIO_RegisterBits(&charge_control_reg, 1, 2); + return en_term_bit.read() == 1; } @@ -444,20 +481,25 @@ bool Adafruit_BQ25628E::getEnableTermination() { * @return True if successful, otherwise false. */ bool Adafruit_BQ25628E::setVINDPMbatTrack(bool enable) { - Adafruit_BusIO_Register charge_control_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGE_CONTROL, 1); - Adafruit_BusIO_RegisterBits vindpm_bat_track_bit = Adafruit_BusIO_RegisterBits(&charge_control_reg, 1, 1); - + Adafruit_BusIO_Register charge_control_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGE_CONTROL, 1); + Adafruit_BusIO_RegisterBits vindpm_bat_track_bit = + Adafruit_BusIO_RegisterBits(&charge_control_reg, 1, 1); + return vindpm_bat_track_bit.write(enable ? 1 : 0); } /*! * @brief Gets VINDPM battery voltage tracking status - * @return True if VBAT + 400mV tracking enabled, false if register-only VINDPM + * @return True if VBAT + 400mV tracking enabled, false if register-only + * VINDPM */ bool Adafruit_BQ25628E::getVINDPMbatTrack() { - Adafruit_BusIO_Register charge_control_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGE_CONTROL, 1); - Adafruit_BusIO_RegisterBits vindpm_bat_track_bit = Adafruit_BusIO_RegisterBits(&charge_control_reg, 1, 1); - + Adafruit_BusIO_Register charge_control_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGE_CONTROL, 1); + Adafruit_BusIO_RegisterBits vindpm_bat_track_bit = + Adafruit_BusIO_RegisterBits(&charge_control_reg, 1, 1); + return vindpm_bat_track_bit.read() == 1; } @@ -468,9 +510,11 @@ bool Adafruit_BQ25628E::getVINDPMbatTrack() { * @return True if successful, otherwise false. */ bool Adafruit_BQ25628E::setEnableSafetyTimers(bool enable) { - Adafruit_BusIO_Register timer_control_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGE_TIMER_CONTROL, 1); - Adafruit_BusIO_RegisterBits en_safety_tmrs_bit = Adafruit_BusIO_RegisterBits(&timer_control_reg, 1, 2); - + Adafruit_BusIO_Register timer_control_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGE_TIMER_CONTROL, 1); + Adafruit_BusIO_RegisterBits en_safety_tmrs_bit = + Adafruit_BusIO_RegisterBits(&timer_control_reg, 1, 2); + return en_safety_tmrs_bit.write(enable ? 1 : 0); } @@ -479,9 +523,11 @@ bool Adafruit_BQ25628E::setEnableSafetyTimers(bool enable) { * @return True if safety timers enabled, false if disabled */ bool Adafruit_BQ25628E::getEnableSafetyTimers() { - Adafruit_BusIO_Register timer_control_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGE_TIMER_CONTROL, 1); - Adafruit_BusIO_RegisterBits en_safety_tmrs_bit = Adafruit_BusIO_RegisterBits(&timer_control_reg, 1, 2); - + Adafruit_BusIO_Register timer_control_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGE_TIMER_CONTROL, 1); + Adafruit_BusIO_RegisterBits en_safety_tmrs_bit = + Adafruit_BusIO_RegisterBits(&timer_control_reg, 1, 2); + return en_safety_tmrs_bit.read() == 1; } @@ -492,9 +538,11 @@ bool Adafruit_BQ25628E::getEnableSafetyTimers() { * @return True if successful, otherwise false. */ bool Adafruit_BQ25628E::setPrechargeTimer(bool short_timer) { - Adafruit_BusIO_Register timer_control_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGE_TIMER_CONTROL, 1); - Adafruit_BusIO_RegisterBits prechg_tmr_bit = Adafruit_BusIO_RegisterBits(&timer_control_reg, 1, 1); - + Adafruit_BusIO_Register timer_control_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGE_TIMER_CONTROL, 1); + Adafruit_BusIO_RegisterBits prechg_tmr_bit = + Adafruit_BusIO_RegisterBits(&timer_control_reg, 1, 1); + return prechg_tmr_bit.write(short_timer ? 1 : 0); } @@ -503,9 +551,11 @@ bool Adafruit_BQ25628E::setPrechargeTimer(bool short_timer) { * @return True if 0.62 hours, false if 2.5 hours */ bool Adafruit_BQ25628E::getPrechargeTimer() { - Adafruit_BusIO_Register timer_control_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGE_TIMER_CONTROL, 1); - Adafruit_BusIO_RegisterBits prechg_tmr_bit = Adafruit_BusIO_RegisterBits(&timer_control_reg, 1, 1); - + Adafruit_BusIO_Register timer_control_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGE_TIMER_CONTROL, 1); + Adafruit_BusIO_RegisterBits prechg_tmr_bit = + Adafruit_BusIO_RegisterBits(&timer_control_reg, 1, 1); + return prechg_tmr_bit.read() == 1; } @@ -516,9 +566,11 @@ bool Adafruit_BQ25628E::getPrechargeTimer() { * @return True if successful, otherwise false. */ bool Adafruit_BQ25628E::setFastchargeTimer(bool long_timer) { - Adafruit_BusIO_Register timer_control_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGE_TIMER_CONTROL, 1); - Adafruit_BusIO_RegisterBits chg_tmr_bit = Adafruit_BusIO_RegisterBits(&timer_control_reg, 1, 0); - + Adafruit_BusIO_Register timer_control_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGE_TIMER_CONTROL, 1); + Adafruit_BusIO_RegisterBits chg_tmr_bit = + Adafruit_BusIO_RegisterBits(&timer_control_reg, 1, 0); + return chg_tmr_bit.write(long_timer ? 1 : 0); } @@ -527,9 +579,11 @@ bool Adafruit_BQ25628E::setFastchargeTimer(bool long_timer) { * @return True if 28 hours, false if 14.5 hours */ bool Adafruit_BQ25628E::getFastchargeTimer() { - Adafruit_BusIO_Register timer_control_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGE_TIMER_CONTROL, 1); - Adafruit_BusIO_RegisterBits chg_tmr_bit = Adafruit_BusIO_RegisterBits(&timer_control_reg, 1, 0); - + Adafruit_BusIO_Register timer_control_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGE_TIMER_CONTROL, 1); + Adafruit_BusIO_RegisterBits chg_tmr_bit = + Adafruit_BusIO_RegisterBits(&timer_control_reg, 1, 0); + return chg_tmr_bit.read() == 1; } @@ -540,9 +594,11 @@ bool Adafruit_BQ25628E::getFastchargeTimer() { * @return True if successful, otherwise false. */ bool Adafruit_BQ25628E::setAutoBatteryDischarge(bool enable) { - Adafruit_BusIO_Register charger_control_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_CONTROL_0, 1); - Adafruit_BusIO_RegisterBits en_auto_ibatdis_bit = Adafruit_BusIO_RegisterBits(&charger_control_reg, 1, 7); - + Adafruit_BusIO_Register charger_control_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_CONTROL_0, 1); + Adafruit_BusIO_RegisterBits en_auto_ibatdis_bit = + Adafruit_BusIO_RegisterBits(&charger_control_reg, 1, 7); + return en_auto_ibatdis_bit.write(enable ? 1 : 0); } @@ -551,9 +607,11 @@ bool Adafruit_BQ25628E::setAutoBatteryDischarge(bool enable) { * @return True if auto discharge enabled, false if disabled */ bool Adafruit_BQ25628E::getAutoBatteryDischarge() { - Adafruit_BusIO_Register charger_control_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_CONTROL_0, 1); - Adafruit_BusIO_RegisterBits en_auto_ibatdis_bit = Adafruit_BusIO_RegisterBits(&charger_control_reg, 1, 7); - + Adafruit_BusIO_Register charger_control_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_CONTROL_0, 1); + Adafruit_BusIO_RegisterBits en_auto_ibatdis_bit = + Adafruit_BusIO_RegisterBits(&charger_control_reg, 1, 7); + return en_auto_ibatdis_bit.read() == 1; } @@ -564,9 +622,11 @@ bool Adafruit_BQ25628E::getAutoBatteryDischarge() { * @return True if successful, otherwise false. */ bool Adafruit_BQ25628E::setForceBatteryDischarge(bool enable) { - Adafruit_BusIO_Register charger_control_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_CONTROL_0, 1); - Adafruit_BusIO_RegisterBits force_ibatdis_bit = Adafruit_BusIO_RegisterBits(&charger_control_reg, 1, 6); - + Adafruit_BusIO_Register charger_control_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_CONTROL_0, 1); + Adafruit_BusIO_RegisterBits force_ibatdis_bit = + Adafruit_BusIO_RegisterBits(&charger_control_reg, 1, 6); + return force_ibatdis_bit.write(enable ? 1 : 0); } @@ -575,9 +635,11 @@ bool Adafruit_BQ25628E::setForceBatteryDischarge(bool enable) { * @return True if discharge current forced, false if idle */ bool Adafruit_BQ25628E::getForceBatteryDischarge() { - Adafruit_BusIO_Register charger_control_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_CONTROL_0, 1); - Adafruit_BusIO_RegisterBits force_ibatdis_bit = Adafruit_BusIO_RegisterBits(&charger_control_reg, 1, 6); - + Adafruit_BusIO_Register charger_control_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_CONTROL_0, 1); + Adafruit_BusIO_RegisterBits force_ibatdis_bit = + Adafruit_BusIO_RegisterBits(&charger_control_reg, 1, 6); + return force_ibatdis_bit.read() == 1; } @@ -588,9 +650,11 @@ bool Adafruit_BQ25628E::getForceBatteryDischarge() { * @return True if successful, otherwise false. */ bool Adafruit_BQ25628E::setEnableCharging(bool enable) { - Adafruit_BusIO_Register charger_control_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_CONTROL_0, 1); - Adafruit_BusIO_RegisterBits en_chg_bit = Adafruit_BusIO_RegisterBits(&charger_control_reg, 1, 5); - + Adafruit_BusIO_Register charger_control_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_CONTROL_0, 1); + Adafruit_BusIO_RegisterBits en_chg_bit = + Adafruit_BusIO_RegisterBits(&charger_control_reg, 1, 5); + return en_chg_bit.write(enable ? 1 : 0); } @@ -599,9 +663,11 @@ bool Adafruit_BQ25628E::setEnableCharging(bool enable) { * @return True if charging enabled, false if disabled */ bool Adafruit_BQ25628E::getEnableCharging() { - Adafruit_BusIO_Register charger_control_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_CONTROL_0, 1); - Adafruit_BusIO_RegisterBits en_chg_bit = Adafruit_BusIO_RegisterBits(&charger_control_reg, 1, 5); - + Adafruit_BusIO_Register charger_control_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_CONTROL_0, 1); + Adafruit_BusIO_RegisterBits en_chg_bit = + Adafruit_BusIO_RegisterBits(&charger_control_reg, 1, 5); + return en_chg_bit.read() == 1; } @@ -612,9 +678,11 @@ bool Adafruit_BQ25628E::getEnableCharging() { * @return True if successful, otherwise false. */ bool Adafruit_BQ25628E::setHighZ(bool enable) { - Adafruit_BusIO_Register charger_control_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_CONTROL_0, 1); - Adafruit_BusIO_RegisterBits en_hiz_bit = Adafruit_BusIO_RegisterBits(&charger_control_reg, 1, 4); - + Adafruit_BusIO_Register charger_control_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_CONTROL_0, 1); + Adafruit_BusIO_RegisterBits en_hiz_bit = + Adafruit_BusIO_RegisterBits(&charger_control_reg, 1, 4); + return en_hiz_bit.write(enable ? 1 : 0); } @@ -623,9 +691,11 @@ bool Adafruit_BQ25628E::setHighZ(bool enable) { * @return True if HIZ mode enabled, false if disabled */ bool Adafruit_BQ25628E::getHighZ() { - Adafruit_BusIO_Register charger_control_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_CONTROL_0, 1); - Adafruit_BusIO_RegisterBits en_hiz_bit = Adafruit_BusIO_RegisterBits(&charger_control_reg, 1, 4); - + Adafruit_BusIO_Register charger_control_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_CONTROL_0, 1); + Adafruit_BusIO_RegisterBits en_hiz_bit = + Adafruit_BusIO_RegisterBits(&charger_control_reg, 1, 4); + return en_hiz_bit.read() == 1; } @@ -636,9 +706,11 @@ bool Adafruit_BQ25628E::getHighZ() { * @return True if successful, otherwise false. */ bool Adafruit_BQ25628E::setForcePMIDDischarge(bool enable) { - Adafruit_BusIO_Register charger_control_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_CONTROL_0, 1); - Adafruit_BusIO_RegisterBits force_pmid_dis_bit = Adafruit_BusIO_RegisterBits(&charger_control_reg, 1, 3); - + Adafruit_BusIO_Register charger_control_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_CONTROL_0, 1); + Adafruit_BusIO_RegisterBits force_pmid_dis_bit = + Adafruit_BusIO_RegisterBits(&charger_control_reg, 1, 3); + return force_pmid_dis_bit.write(enable ? 1 : 0); } @@ -647,9 +719,11 @@ bool Adafruit_BQ25628E::setForcePMIDDischarge(bool enable) { * @return True if PMID discharge forced, false if disabled */ bool Adafruit_BQ25628E::getForcePMIDDischarge() { - Adafruit_BusIO_Register charger_control_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_CONTROL_0, 1); - Adafruit_BusIO_RegisterBits force_pmid_dis_bit = Adafruit_BusIO_RegisterBits(&charger_control_reg, 1, 3); - + Adafruit_BusIO_Register charger_control_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_CONTROL_0, 1); + Adafruit_BusIO_RegisterBits force_pmid_dis_bit = + Adafruit_BusIO_RegisterBits(&charger_control_reg, 1, 3); + return force_pmid_dis_bit.read() == 1; } @@ -658,9 +732,11 @@ bool Adafruit_BQ25628E::getForcePMIDDischarge() { * @return True if successful, otherwise false. */ bool Adafruit_BQ25628E::resetWatchdog() { - Adafruit_BusIO_Register charger_control_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_CONTROL_0, 1); - Adafruit_BusIO_RegisterBits wd_rst_bit = Adafruit_BusIO_RegisterBits(&charger_control_reg, 1, 2); - + Adafruit_BusIO_Register charger_control_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_CONTROL_0, 1); + Adafruit_BusIO_RegisterBits wd_rst_bit = + Adafruit_BusIO_RegisterBits(&charger_control_reg, 1, 2); + return wd_rst_bit.write(1); } @@ -671,9 +747,11 @@ bool Adafruit_BQ25628E::resetWatchdog() { * @return True if successful, otherwise false. */ bool Adafruit_BQ25628E::setWatchdog(bq25628e_watchdog_t setting) { - Adafruit_BusIO_Register charger_control_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_CONTROL_0, 1); - Adafruit_BusIO_RegisterBits watchdog_bits = Adafruit_BusIO_RegisterBits(&charger_control_reg, 2, 0); - + Adafruit_BusIO_Register charger_control_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_CONTROL_0, 1); + Adafruit_BusIO_RegisterBits watchdog_bits = + Adafruit_BusIO_RegisterBits(&charger_control_reg, 2, 0); + return watchdog_bits.write((uint8_t)setting); } @@ -682,9 +760,11 @@ bool Adafruit_BQ25628E::setWatchdog(bq25628e_watchdog_t setting) { * @return Current watchdog timer setting */ bq25628e_watchdog_t Adafruit_BQ25628E::getWatchdog() { - Adafruit_BusIO_Register charger_control_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_CONTROL_0, 1); - Adafruit_BusIO_RegisterBits watchdog_bits = Adafruit_BusIO_RegisterBits(&charger_control_reg, 2, 0); - + Adafruit_BusIO_Register charger_control_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_CONTROL_0, 1); + Adafruit_BusIO_RegisterBits watchdog_bits = + Adafruit_BusIO_RegisterBits(&charger_control_reg, 2, 0); + return (bq25628e_watchdog_t)watchdog_bits.read(); } @@ -693,14 +773,16 @@ bq25628e_watchdog_t Adafruit_BQ25628E::getWatchdog() { * @return True if successful, otherwise false. */ bool Adafruit_BQ25628E::reset() { - Adafruit_BusIO_Register charger_control_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_CONTROL_1, 1); - Adafruit_BusIO_RegisterBits reg_rst_bit = Adafruit_BusIO_RegisterBits(&charger_control_reg, 1, 7); - + Adafruit_BusIO_Register charger_control_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_CONTROL_1, 1); + Adafruit_BusIO_RegisterBits reg_rst_bit = + Adafruit_BusIO_RegisterBits(&charger_control_reg, 1, 7); + // Set reset bit if (!reg_rst_bit.write(1)) { return false; } - + // Wait for bit to clear (indicates reset complete) uint32_t timeout = millis() + 1000; // 1 second timeout while (millis() < timeout) { @@ -709,7 +791,7 @@ bool Adafruit_BQ25628E::reset() { } delay(1); } - + return false; // Timeout - reset may have failed } @@ -720,9 +802,11 @@ bool Adafruit_BQ25628E::reset() { * @return True if successful, otherwise false. */ bool Adafruit_BQ25628E::setThermalRegulation(bool temp_120c) { - Adafruit_BusIO_Register charger_control_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_CONTROL_1, 1); - Adafruit_BusIO_RegisterBits treg_bit = Adafruit_BusIO_RegisterBits(&charger_control_reg, 1, 6); - + Adafruit_BusIO_Register charger_control_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_CONTROL_1, 1); + Adafruit_BusIO_RegisterBits treg_bit = + Adafruit_BusIO_RegisterBits(&charger_control_reg, 1, 6); + return treg_bit.write(temp_120c ? 1 : 0); } @@ -731,9 +815,11 @@ bool Adafruit_BQ25628E::setThermalRegulation(bool temp_120c) { * @return True if 120°C threshold, false if 60°C threshold */ bool Adafruit_BQ25628E::getThermalRegulation() { - Adafruit_BusIO_Register charger_control_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_CONTROL_1, 1); - Adafruit_BusIO_RegisterBits treg_bit = Adafruit_BusIO_RegisterBits(&charger_control_reg, 1, 6); - + Adafruit_BusIO_Register charger_control_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_CONTROL_1, 1); + Adafruit_BusIO_RegisterBits treg_bit = + Adafruit_BusIO_RegisterBits(&charger_control_reg, 1, 6); + return treg_bit.read() == 1; } @@ -744,9 +830,11 @@ bool Adafruit_BQ25628E::getThermalRegulation() { * @return True if successful, otherwise false. */ bool Adafruit_BQ25628E::setConverterFrequency(bq25628e_conv_freq_t frequency) { - Adafruit_BusIO_Register charger_control_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_CONTROL_1, 1); - Adafruit_BusIO_RegisterBits conv_freq_bits = Adafruit_BusIO_RegisterBits(&charger_control_reg, 2, 4); - + Adafruit_BusIO_Register charger_control_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_CONTROL_1, 1); + Adafruit_BusIO_RegisterBits conv_freq_bits = + Adafruit_BusIO_RegisterBits(&charger_control_reg, 2, 4); + return conv_freq_bits.write((uint8_t)frequency); } @@ -755,9 +843,11 @@ bool Adafruit_BQ25628E::setConverterFrequency(bq25628e_conv_freq_t frequency) { * @return Current frequency setting */ bq25628e_conv_freq_t Adafruit_BQ25628E::getConverterFrequency() { - Adafruit_BusIO_Register charger_control_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_CONTROL_1, 1); - Adafruit_BusIO_RegisterBits conv_freq_bits = Adafruit_BusIO_RegisterBits(&charger_control_reg, 2, 4); - + Adafruit_BusIO_Register charger_control_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_CONTROL_1, 1); + Adafruit_BusIO_RegisterBits conv_freq_bits = + Adafruit_BusIO_RegisterBits(&charger_control_reg, 2, 4); + return (bq25628e_conv_freq_t)conv_freq_bits.read(); } @@ -768,9 +858,11 @@ bq25628e_conv_freq_t Adafruit_BQ25628E::getConverterFrequency() { * @return True if successful, otherwise false. */ bool Adafruit_BQ25628E::setVBUSOvervoltage(bool high_threshold) { - Adafruit_BusIO_Register charger_control_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_CONTROL_1, 1); - Adafruit_BusIO_RegisterBits vbus_ovp_bit = Adafruit_BusIO_RegisterBits(&charger_control_reg, 1, 0); - + Adafruit_BusIO_Register charger_control_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_CONTROL_1, 1); + Adafruit_BusIO_RegisterBits vbus_ovp_bit = + Adafruit_BusIO_RegisterBits(&charger_control_reg, 1, 0); + return vbus_ovp_bit.write(high_threshold ? 1 : 0); } @@ -779,9 +871,11 @@ bool Adafruit_BQ25628E::setVBUSOvervoltage(bool high_threshold) { * @return True if 18.5V threshold, false if 6.3V threshold */ bool Adafruit_BQ25628E::getVBUSOvervoltage() { - Adafruit_BusIO_Register charger_control_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_CONTROL_1, 1); - Adafruit_BusIO_RegisterBits vbus_ovp_bit = Adafruit_BusIO_RegisterBits(&charger_control_reg, 1, 0); - + Adafruit_BusIO_Register charger_control_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_CONTROL_1, 1); + Adafruit_BusIO_RegisterBits vbus_ovp_bit = + Adafruit_BusIO_RegisterBits(&charger_control_reg, 1, 0); + return vbus_ovp_bit.read() == 1; } @@ -792,9 +886,11 @@ bool Adafruit_BQ25628E::getVBUSOvervoltage() { * @return True if successful, otherwise false. */ bool Adafruit_BQ25628E::setBATFETcontrol(bq25628e_batfet_ctrl_t control) { - Adafruit_BusIO_Register charger_control_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_CONTROL_2, 1); - Adafruit_BusIO_RegisterBits batfet_ctrl_bits = Adafruit_BusIO_RegisterBits(&charger_control_reg, 2, 0); - + Adafruit_BusIO_Register charger_control_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_CONTROL_2, 1); + Adafruit_BusIO_RegisterBits batfet_ctrl_bits = + Adafruit_BusIO_RegisterBits(&charger_control_reg, 2, 0); + return batfet_ctrl_bits.write((uint8_t)control); } @@ -803,9 +899,11 @@ bool Adafruit_BQ25628E::setBATFETcontrol(bq25628e_batfet_ctrl_t control) { * @return Current BATFET control setting */ bq25628e_batfet_ctrl_t Adafruit_BQ25628E::getBATFETcontrol() { - Adafruit_BusIO_Register charger_control_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_CONTROL_2, 1); - Adafruit_BusIO_RegisterBits batfet_ctrl_bits = Adafruit_BusIO_RegisterBits(&charger_control_reg, 2, 0); - + Adafruit_BusIO_Register charger_control_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_CONTROL_2, 1); + Adafruit_BusIO_RegisterBits batfet_ctrl_bits = + Adafruit_BusIO_RegisterBits(&charger_control_reg, 2, 0); + return (bq25628e_batfet_ctrl_t)batfet_ctrl_bits.read(); } @@ -816,9 +914,11 @@ bq25628e_batfet_ctrl_t Adafruit_BQ25628E::getBATFETcontrol() { * @return True if successful, otherwise false. */ bool Adafruit_BQ25628E::setPeakBattDischarge(bool peak_12a) { - Adafruit_BusIO_Register charger_control_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_CONTROL_3, 1); - Adafruit_BusIO_RegisterBits ibat_pk_bits = Adafruit_BusIO_RegisterBits(&charger_control_reg, 2, 6); - + Adafruit_BusIO_Register charger_control_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_CONTROL_3, 1); + Adafruit_BusIO_RegisterBits ibat_pk_bits = + Adafruit_BusIO_RegisterBits(&charger_control_reg, 2, 6); + return ibat_pk_bits.write(peak_12a ? 0b11 : 0b10); } @@ -827,9 +927,11 @@ bool Adafruit_BQ25628E::setPeakBattDischarge(bool peak_12a) { * @return True if 12A peak current, false if 6A peak current */ bool Adafruit_BQ25628E::getPeakBattDischarge() { - Adafruit_BusIO_Register charger_control_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_CONTROL_3, 1); - Adafruit_BusIO_RegisterBits ibat_pk_bits = Adafruit_BusIO_RegisterBits(&charger_control_reg, 2, 6); - + Adafruit_BusIO_Register charger_control_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_CONTROL_3, 1); + Adafruit_BusIO_RegisterBits ibat_pk_bits = + Adafruit_BusIO_RegisterBits(&charger_control_reg, 2, 6); + uint8_t value = ibat_pk_bits.read(); return (value == 0b11); // 11b = 12A, 10b = 6A } @@ -841,9 +943,11 @@ bool Adafruit_BQ25628E::getPeakBattDischarge() { * @return True if successful, otherwise false. */ bool Adafruit_BQ25628E::setVBatUVLO(bool low_threshold) { - Adafruit_BusIO_Register charger_control_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_CONTROL_3, 1); - Adafruit_BusIO_RegisterBits vbat_uvlo_bit = Adafruit_BusIO_RegisterBits(&charger_control_reg, 1, 5); - + Adafruit_BusIO_Register charger_control_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_CONTROL_3, 1); + Adafruit_BusIO_RegisterBits vbat_uvlo_bit = + Adafruit_BusIO_RegisterBits(&charger_control_reg, 1, 5); + return vbat_uvlo_bit.write(low_threshold ? 1 : 0); } @@ -852,9 +956,11 @@ bool Adafruit_BQ25628E::setVBatUVLO(bool low_threshold) { * @return True if 1.8V UVLO/1.85V SHORT, false if 2.2V UVLO/2.05V SHORT */ bool Adafruit_BQ25628E::getVBatUVLO() { - Adafruit_BusIO_Register charger_control_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_CONTROL_3, 1); - Adafruit_BusIO_RegisterBits vbat_uvlo_bit = Adafruit_BusIO_RegisterBits(&charger_control_reg, 1, 5); - + Adafruit_BusIO_Register charger_control_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_CONTROL_3, 1); + Adafruit_BusIO_RegisterBits vbat_uvlo_bit = + Adafruit_BusIO_RegisterBits(&charger_control_reg, 1, 5); + return vbat_uvlo_bit.read() == 1; } @@ -865,9 +971,11 @@ bool Adafruit_BQ25628E::getVBatUVLO() { * @return True if successful, otherwise false. */ bool Adafruit_BQ25628E::setChargeRate(bq25628e_charge_rate_t rate) { - Adafruit_BusIO_Register charger_control_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_CONTROL_3, 1); - Adafruit_BusIO_RegisterBits chg_rate_bits = Adafruit_BusIO_RegisterBits(&charger_control_reg, 2, 0); - + Adafruit_BusIO_Register charger_control_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_CONTROL_3, 1); + Adafruit_BusIO_RegisterBits chg_rate_bits = + Adafruit_BusIO_RegisterBits(&charger_control_reg, 2, 0); + return chg_rate_bits.write((uint8_t)rate); } @@ -876,9 +984,11 @@ bool Adafruit_BQ25628E::setChargeRate(bq25628e_charge_rate_t rate) { * @return Current charge rate setting */ bq25628e_charge_rate_t Adafruit_BQ25628E::getChargeRate() { - Adafruit_BusIO_Register charger_control_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_CONTROL_3, 1); - Adafruit_BusIO_RegisterBits chg_rate_bits = Adafruit_BusIO_RegisterBits(&charger_control_reg, 2, 0); - + Adafruit_BusIO_Register charger_control_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_CONTROL_3, 1); + Adafruit_BusIO_RegisterBits chg_rate_bits = + Adafruit_BusIO_RegisterBits(&charger_control_reg, 2, 0); + return (bq25628e_charge_rate_t)chg_rate_bits.read(); } @@ -889,9 +999,11 @@ bq25628e_charge_rate_t Adafruit_BQ25628E::getChargeRate() { * @return True if successful, otherwise false. */ bool Adafruit_BQ25628E::setIgnoreThermistor(bool ignore) { - Adafruit_BusIO_Register ntc_control_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_NTC_CONTROL_0, 1); - Adafruit_BusIO_RegisterBits ts_ignore_bit = Adafruit_BusIO_RegisterBits(&ntc_control_reg, 1, 7); - + Adafruit_BusIO_Register ntc_control_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_NTC_CONTROL_0, 1); + Adafruit_BusIO_RegisterBits ts_ignore_bit = + Adafruit_BusIO_RegisterBits(&ntc_control_reg, 1, 7); + return ts_ignore_bit.write(ignore ? 1 : 0); } @@ -900,9 +1012,11 @@ bool Adafruit_BQ25628E::setIgnoreThermistor(bool ignore) { * @return True if TS feedback ignored, false if TS feedback used */ bool Adafruit_BQ25628E::getIgnoreThermistor() { - Adafruit_BusIO_Register ntc_control_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_NTC_CONTROL_0, 1); - Adafruit_BusIO_RegisterBits ts_ignore_bit = Adafruit_BusIO_RegisterBits(&ntc_control_reg, 1, 7); - + Adafruit_BusIO_Register ntc_control_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_NTC_CONTROL_0, 1); + Adafruit_BusIO_RegisterBits ts_ignore_bit = + Adafruit_BusIO_RegisterBits(&ntc_control_reg, 1, 7); + return ts_ignore_bit.read() == 1; } @@ -912,10 +1026,13 @@ bool Adafruit_BQ25628E::getIgnoreThermistor() { * Current setting from bq25628e_therm_curr_t enum * @return True if successful, otherwise false. */ -bool Adafruit_BQ25628E::setCoolThermistorCurrent(bq25628e_therm_curr_t setting) { - Adafruit_BusIO_Register ntc_control_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_NTC_CONTROL_0, 1); - Adafruit_BusIO_RegisterBits ts_iset_cool_bits = Adafruit_BusIO_RegisterBits(&ntc_control_reg, 2, 0); - +bool Adafruit_BQ25628E::setCoolThermistorCurrent( + bq25628e_therm_curr_t setting) { + Adafruit_BusIO_Register ntc_control_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_NTC_CONTROL_0, 1); + Adafruit_BusIO_RegisterBits ts_iset_cool_bits = + Adafruit_BusIO_RegisterBits(&ntc_control_reg, 2, 0); + return ts_iset_cool_bits.write((uint8_t)setting); } @@ -924,9 +1041,11 @@ bool Adafruit_BQ25628E::setCoolThermistorCurrent(bq25628e_therm_curr_t setting) * @return Current cool zone setting */ bq25628e_therm_curr_t Adafruit_BQ25628E::getCoolThermistorCurrent() { - Adafruit_BusIO_Register ntc_control_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_NTC_CONTROL_0, 1); - Adafruit_BusIO_RegisterBits ts_iset_cool_bits = Adafruit_BusIO_RegisterBits(&ntc_control_reg, 2, 0); - + Adafruit_BusIO_Register ntc_control_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_NTC_CONTROL_0, 1); + Adafruit_BusIO_RegisterBits ts_iset_cool_bits = + Adafruit_BusIO_RegisterBits(&ntc_control_reg, 2, 0); + return (bq25628e_therm_curr_t)ts_iset_cool_bits.read(); } @@ -936,10 +1055,13 @@ bq25628e_therm_curr_t Adafruit_BQ25628E::getCoolThermistorCurrent() { * Current setting from bq25628e_therm_curr_t enum * @return True if successful, otherwise false. */ -bool Adafruit_BQ25628E::setWarmThermistorCurrent(bq25628e_therm_curr_t setting) { - Adafruit_BusIO_Register ntc_control_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_NTC_CONTROL_0, 1); - Adafruit_BusIO_RegisterBits ts_iset_warm_bits = Adafruit_BusIO_RegisterBits(&ntc_control_reg, 2, 2); - +bool Adafruit_BQ25628E::setWarmThermistorCurrent( + bq25628e_therm_curr_t setting) { + Adafruit_BusIO_Register ntc_control_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_NTC_CONTROL_0, 1); + Adafruit_BusIO_RegisterBits ts_iset_warm_bits = + Adafruit_BusIO_RegisterBits(&ntc_control_reg, 2, 2); + return ts_iset_warm_bits.write((uint8_t)setting); } @@ -948,9 +1070,11 @@ bool Adafruit_BQ25628E::setWarmThermistorCurrent(bq25628e_therm_curr_t setting) * @return Current warm zone setting */ bq25628e_therm_curr_t Adafruit_BQ25628E::getWarmThermistorCurrent() { - Adafruit_BusIO_Register ntc_control_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_NTC_CONTROL_0, 1); - Adafruit_BusIO_RegisterBits ts_iset_warm_bits = Adafruit_BusIO_RegisterBits(&ntc_control_reg, 2, 2); - + Adafruit_BusIO_Register ntc_control_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_NTC_CONTROL_0, 1); + Adafruit_BusIO_RegisterBits ts_iset_warm_bits = + Adafruit_BusIO_RegisterBits(&ntc_control_reg, 2, 2); + return (bq25628e_therm_curr_t)ts_iset_warm_bits.read(); } @@ -960,13 +1084,15 @@ bq25628e_therm_curr_t Adafruit_BQ25628E::getWarmThermistorCurrent() { */ uint16_t Adafruit_BQ25628E::getChargerStatusFlags() { // Read REG0x1D (Charger Status 0) - Adafruit_BusIO_Register status0_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_STATUS_0, 1); + Adafruit_BusIO_Register status0_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_STATUS_0, 1); uint8_t status0 = status0_reg.read(); - + // Read REG0x1E (Charger Status 1) - Adafruit_BusIO_Register status1_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_STATUS_1, 1); + Adafruit_BusIO_Register status1_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_STATUS_1, 1); uint8_t status1 = status1_reg.read(); - + // Combine into 16-bit value: high byte = status1, low byte = status0 return ((uint16_t)status1 << 8) | status0; } @@ -977,8 +1103,9 @@ uint16_t Adafruit_BQ25628E::getChargerStatusFlags() { */ uint8_t Adafruit_BQ25628E::getFaultStatusFlags() { // Read REG0x1F (FAULT Status 0) - Adafruit_BusIO_Register fault_status_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_FAULT_STATUS_0, 1); - + Adafruit_BusIO_Register fault_status_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_FAULT_STATUS_0, 1); + return fault_status_reg.read(); } @@ -989,13 +1116,15 @@ uint8_t Adafruit_BQ25628E::getFaultStatusFlags() { */ uint16_t Adafruit_BQ25628E::getChargerFlags() { // Read REG0x20 (Charger Flag 0) - clears flags on read - Adafruit_BusIO_Register flag0_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_FLAG_0, 1); + Adafruit_BusIO_Register flag0_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_FLAG_0, 1); uint8_t flag0 = flag0_reg.read(); - + // Read REG0x21 (Charger Flag 1) - clears flags on read - Adafruit_BusIO_Register flag1_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_FLAG_1, 1); + Adafruit_BusIO_Register flag1_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_FLAG_1, 1); uint8_t flag1 = flag1_reg.read(); - + // Combine into 16-bit value: high byte = flag1, low byte = flag0 return ((uint16_t)flag1 << 8) | flag0; } @@ -1007,8 +1136,9 @@ uint16_t Adafruit_BQ25628E::getChargerFlags() { */ uint8_t Adafruit_BQ25628E::getFaultFlags() { // Read REG0x22 (FAULT Flag 0) - clears flags on read - Adafruit_BusIO_Register fault_flag_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_FAULT_FLAG_0, 1); - + Adafruit_BusIO_Register fault_flag_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_FAULT_FLAG_0, 1); + return fault_flag_reg.read(); } @@ -1021,28 +1151,41 @@ uint8_t Adafruit_BQ25628E::getFaultFlags() { */ bool Adafruit_BQ25628E::setInterruptMask(uint32_t mask) { // Extract individual register values from 32-bit mask - // Mask0 (REG0x23): bits 6:0 (ADC_DONE, TREG, VSYS, IINDPM, VINDPM, SAFETY_TMR, WD) + // Mask0 (REG0x23): bits 6:0 (ADC_DONE, TREG, VSYS, IINDPM, VINDPM, + // SAFETY_TMR, WD) uint8_t mask0 = (mask >> 0) & 0x7F; - + // Mask1 (REG0x24): bits 3,0 (CHG=bit11, VBUS=bit8) uint8_t mask1 = 0; - if (mask & BQ25628E_INT_MASK_VBUS) mask1 |= BQ25628E_MASK1_VBUS_MASK; - if (mask & BQ25628E_INT_MASK_CHG) mask1 |= BQ25628E_MASK1_CHG_MASK; - - // FMask (REG0x25): bits 7,6,5,3,0 (VBUS_FAULT, BAT_FAULT, SYS_FAULT, TSHUT, TS) + if (mask & BQ25628E_INT_MASK_VBUS) + mask1 |= BQ25628E_MASK1_VBUS_MASK; + if (mask & BQ25628E_INT_MASK_CHG) + mask1 |= BQ25628E_MASK1_CHG_MASK; + + // FMask (REG0x25): bits 7,6,5,3,0 (VBUS_FAULT, BAT_FAULT, SYS_FAULT, TSHUT, + // TS) uint8_t fmask = 0; - if (mask & BQ25628E_INT_MASK_TS) fmask |= BQ25628E_FMASK_TS_MASK; - if (mask & BQ25628E_INT_MASK_TSHUT) fmask |= BQ25628E_FMASK_TSHUT_MASK; - if (mask & BQ25628E_INT_MASK_SYS_FAULT) fmask |= BQ25628E_FMASK_SYS_FAULT_MASK; - if (mask & BQ25628E_INT_MASK_BAT_FAULT) fmask |= BQ25628E_FMASK_BAT_FAULT_MASK; - if (mask & BQ25628E_INT_MASK_VBUS_FAULT) fmask |= BQ25628E_FMASK_VBUS_FAULT_MASK; - + if (mask & BQ25628E_INT_MASK_TS) + fmask |= BQ25628E_FMASK_TS_MASK; + if (mask & BQ25628E_INT_MASK_TSHUT) + fmask |= BQ25628E_FMASK_TSHUT_MASK; + if (mask & BQ25628E_INT_MASK_SYS_FAULT) + fmask |= BQ25628E_FMASK_SYS_FAULT_MASK; + if (mask & BQ25628E_INT_MASK_BAT_FAULT) + fmask |= BQ25628E_FMASK_BAT_FAULT_MASK; + if (mask & BQ25628E_INT_MASK_VBUS_FAULT) + fmask |= BQ25628E_FMASK_VBUS_FAULT_MASK; + // Write to all three mask registers - Adafruit_BusIO_Register mask0_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_MASK_0, 1); - Adafruit_BusIO_Register mask1_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_MASK_1, 1); - Adafruit_BusIO_Register fmask_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_FAULT_MASK_0, 1); - - return mask0_reg.write(mask0) && mask1_reg.write(mask1) && fmask_reg.write(fmask); + Adafruit_BusIO_Register mask0_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_MASK_0, 1); + Adafruit_BusIO_Register mask1_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_MASK_1, 1); + Adafruit_BusIO_Register fmask_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_FAULT_MASK_0, 1); + + return mask0_reg.write(mask0) && mask1_reg.write(mask1) && + fmask_reg.write(fmask); } /*! @@ -1051,31 +1194,41 @@ bool Adafruit_BQ25628E::setInterruptMask(uint32_t mask) { */ uint32_t Adafruit_BQ25628E::getInterruptMask() { // Read all three mask registers - Adafruit_BusIO_Register mask0_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_MASK_0, 1); - Adafruit_BusIO_Register mask1_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_MASK_1, 1); - Adafruit_BusIO_Register fmask_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_FAULT_MASK_0, 1); - + Adafruit_BusIO_Register mask0_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_MASK_0, 1); + Adafruit_BusIO_Register mask1_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_CHARGER_MASK_1, 1); + Adafruit_BusIO_Register fmask_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_FAULT_MASK_0, 1); + uint8_t mask0 = mask0_reg.read(); uint8_t mask1 = mask1_reg.read(); uint8_t fmask = fmask_reg.read(); - + // Combine into 32-bit mask uint32_t combined_mask = 0; - + // Mask0 (REG0x23): bits 6:0 map directly to bits 6:0 combined_mask |= (mask0 & 0x7F); - + // Mask1 (REG0x24): bits 3,0 map to specific bit positions - if (mask1 & BQ25628E_MASK1_VBUS_MASK) combined_mask |= BQ25628E_INT_MASK_VBUS; - if (mask1 & BQ25628E_MASK1_CHG_MASK) combined_mask |= BQ25628E_INT_MASK_CHG; - - // FMask (REG0x25): bits 7,6,5,3,0 map to specific bit positions - if (fmask & BQ25628E_FMASK_TS_MASK) combined_mask |= BQ25628E_INT_MASK_TS; - if (fmask & BQ25628E_FMASK_TSHUT_MASK) combined_mask |= BQ25628E_INT_MASK_TSHUT; - if (fmask & BQ25628E_FMASK_SYS_FAULT_MASK) combined_mask |= BQ25628E_INT_MASK_SYS_FAULT; - if (fmask & BQ25628E_FMASK_BAT_FAULT_MASK) combined_mask |= BQ25628E_INT_MASK_BAT_FAULT; - if (fmask & BQ25628E_FMASK_VBUS_FAULT_MASK) combined_mask |= BQ25628E_INT_MASK_VBUS_FAULT; - + if (mask1 & BQ25628E_MASK1_VBUS_MASK) + combined_mask |= BQ25628E_INT_MASK_VBUS; + if (mask1 & BQ25628E_MASK1_CHG_MASK) + combined_mask |= BQ25628E_INT_MASK_CHG; + + // FMask (REG0x25): bits 7,6,5,3,0 map to specific bit positions + if (fmask & BQ25628E_FMASK_TS_MASK) + combined_mask |= BQ25628E_INT_MASK_TS; + if (fmask & BQ25628E_FMASK_TSHUT_MASK) + combined_mask |= BQ25628E_INT_MASK_TSHUT; + if (fmask & BQ25628E_FMASK_SYS_FAULT_MASK) + combined_mask |= BQ25628E_INT_MASK_SYS_FAULT; + if (fmask & BQ25628E_FMASK_BAT_FAULT_MASK) + combined_mask |= BQ25628E_INT_MASK_BAT_FAULT; + if (fmask & BQ25628E_FMASK_VBUS_FAULT_MASK) + combined_mask |= BQ25628E_INT_MASK_VBUS_FAULT; + return combined_mask; } @@ -1086,9 +1239,11 @@ uint32_t Adafruit_BQ25628E::getInterruptMask() { * @return True if successful, otherwise false. */ bool Adafruit_BQ25628E::setADCEnable(bool enable) { - Adafruit_BusIO_Register adc_control_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_ADC_CONTROL, 1); - Adafruit_BusIO_RegisterBits adc_enable = Adafruit_BusIO_RegisterBits(&adc_control_reg, 1, 7); - + Adafruit_BusIO_Register adc_control_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_ADC_CONTROL, 1); + Adafruit_BusIO_RegisterBits adc_enable = + Adafruit_BusIO_RegisterBits(&adc_control_reg, 1, 7); + return adc_enable.write(enable); } @@ -1097,9 +1252,11 @@ bool Adafruit_BQ25628E::setADCEnable(bool enable) { * @return True if ADC is enabled, false otherwise */ bool Adafruit_BQ25628E::getADCEnable() { - Adafruit_BusIO_Register adc_control_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_ADC_CONTROL, 1); - Adafruit_BusIO_RegisterBits adc_enable = Adafruit_BusIO_RegisterBits(&adc_control_reg, 1, 7); - + Adafruit_BusIO_Register adc_control_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_ADC_CONTROL, 1); + Adafruit_BusIO_RegisterBits adc_enable = + Adafruit_BusIO_RegisterBits(&adc_control_reg, 1, 7); + return adc_enable.read(); } @@ -1110,9 +1267,11 @@ bool Adafruit_BQ25628E::getADCEnable() { * @return True if successful, otherwise false. */ bool Adafruit_BQ25628E::setADCOneShot(bool one_shot) { - Adafruit_BusIO_Register adc_control_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_ADC_CONTROL, 1); - Adafruit_BusIO_RegisterBits adc_rate = Adafruit_BusIO_RegisterBits(&adc_control_reg, 1, 6); - + Adafruit_BusIO_Register adc_control_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_ADC_CONTROL, 1); + Adafruit_BusIO_RegisterBits adc_rate = + Adafruit_BusIO_RegisterBits(&adc_control_reg, 1, 6); + return adc_rate.write(one_shot); } @@ -1121,9 +1280,11 @@ bool Adafruit_BQ25628E::setADCOneShot(bool one_shot) { * @return True if one-shot mode, false if continuous mode */ bool Adafruit_BQ25628E::getADCOneShot() { - Adafruit_BusIO_Register adc_control_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_ADC_CONTROL, 1); - Adafruit_BusIO_RegisterBits adc_rate = Adafruit_BusIO_RegisterBits(&adc_control_reg, 1, 6); - + Adafruit_BusIO_Register adc_control_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_ADC_CONTROL, 1); + Adafruit_BusIO_RegisterBits adc_rate = + Adafruit_BusIO_RegisterBits(&adc_control_reg, 1, 6); + return adc_rate.read(); } @@ -1134,9 +1295,11 @@ bool Adafruit_BQ25628E::getADCOneShot() { * @return True if successful, otherwise false. */ bool Adafruit_BQ25628E::setADCSampleRate(bq25628e_adc_sample_t sample_rate) { - Adafruit_BusIO_Register adc_control_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_ADC_CONTROL, 1); - Adafruit_BusIO_RegisterBits adc_sample = Adafruit_BusIO_RegisterBits(&adc_control_reg, 2, 4); - + Adafruit_BusIO_Register adc_control_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_ADC_CONTROL, 1); + Adafruit_BusIO_RegisterBits adc_sample = + Adafruit_BusIO_RegisterBits(&adc_control_reg, 2, 4); + return adc_sample.write(sample_rate); } @@ -1145,24 +1308,27 @@ bool Adafruit_BQ25628E::setADCSampleRate(bq25628e_adc_sample_t sample_rate) { * @return Current sample rate setting (see bq25628e_adc_sample_t) */ bq25628e_adc_sample_t Adafruit_BQ25628E::getADCSampleRate() { - Adafruit_BusIO_Register adc_control_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_ADC_CONTROL, 1); - Adafruit_BusIO_RegisterBits adc_sample = Adafruit_BusIO_RegisterBits(&adc_control_reg, 2, 4); - + Adafruit_BusIO_Register adc_control_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_ADC_CONTROL, 1); + Adafruit_BusIO_RegisterBits adc_sample = + Adafruit_BusIO_RegisterBits(&adc_control_reg, 2, 4); + return (bq25628e_adc_sample_t)adc_sample.read(); } /*! * @brief Sets ADC function disable flags * @param disable_flags - * Bitfield of ADC functions to disable (use BQ25628E_ADC_DIS_* flags) - * Setting a bit to 1 disables that ADC function - * Setting a bit to 0 enables that ADC function + * Bitfield of ADC functions to disable (use BQ25628E_ADC_DIS_* + * flags) Setting a bit to 1 disables that ADC function Setting a bit to 0 + * enables that ADC function * @return True if successful, otherwise false. * @note Use BQ25628E_ADC_DIS_* defines to construct the disable_flags */ bool Adafruit_BQ25628E::setDisableADC(uint8_t disable_flags) { - Adafruit_BusIO_Register adc_func_disable_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_ADC_FUNCTION_DISABLE_0, 1); - + Adafruit_BusIO_Register adc_func_disable_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_ADC_FUNCTION_DISABLE_0, 1); + return adc_func_disable_reg.write(disable_flags); } @@ -1172,26 +1338,29 @@ bool Adafruit_BQ25628E::setDisableADC(uint8_t disable_flags) { * @note Use BQ25628E_ADC_DIS_* defines to check individual flags */ uint8_t Adafruit_BQ25628E::getDisableADC() { - Adafruit_BusIO_Register adc_func_disable_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_ADC_FUNCTION_DISABLE_0, 1); - + Adafruit_BusIO_Register adc_func_disable_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_ADC_FUNCTION_DISABLE_0, 1); + return adc_func_disable_reg.read(); } /*! * @brief Gets IBUS current measurement from ADC - * @return Current in Amperes (positive = from VBUS to PMID, negative = reverse) + * @return Current in Amperes (positive = from VBUS to PMID, negative = + * reverse) * @note Requires ADC to be enabled. Returns 2's complement 15-bit value * converted to float with 2mA resolution */ float Adafruit_BQ25628E::getIBUScurrent() { // Read 16-bit IBUS ADC register (little endian) - Adafruit_BusIO_Register ibus_adc_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_IBUS_ADC, 2); - + Adafruit_BusIO_Register ibus_adc_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_IBUS_ADC, 2); + uint16_t raw_value = ibus_adc_reg.read(); - + // Extract 15-bit ADC value from bits 15:1 (shift right by 1) uint16_t adc_15bit = raw_value >> 1; - + // Convert from 15-bit 2's complement to signed 16-bit int16_t signed_value; if (adc_15bit & 0x4000) { @@ -1201,7 +1370,7 @@ float Adafruit_BQ25628E::getIBUScurrent() { // Positive value signed_value = (int16_t)adc_15bit; } - + // Convert to Amperes: 2mA per step return (float)signed_value * 0.002f; } @@ -1214,13 +1383,14 @@ float Adafruit_BQ25628E::getIBUScurrent() { */ float Adafruit_BQ25628E::getIBATcurrent() { // Read 16-bit IBAT ADC register (little endian) - Adafruit_BusIO_Register ibat_adc_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_IBAT_ADC, 2); - + Adafruit_BusIO_Register ibat_adc_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_IBAT_ADC, 2); + uint16_t raw_value = ibat_adc_reg.read(); - + // Extract 14-bit ADC value from bits 15:2 (shift right by 2) uint16_t adc_14bit = raw_value >> 2; - + // Convert from 14-bit 2's complement to signed 16-bit int16_t signed_value; if (adc_14bit & 0x2000) { @@ -1230,7 +1400,7 @@ float Adafruit_BQ25628E::getIBATcurrent() { // Positive value signed_value = (int16_t)adc_14bit; } - + // Convert to Amperes: 4mA per step return (float)signed_value * 0.004f; } @@ -1242,13 +1412,14 @@ float Adafruit_BQ25628E::getIBATcurrent() { */ float Adafruit_BQ25628E::getVBUSvoltage() { // Read 16-bit VBUS ADC register (little endian) - Adafruit_BusIO_Register vbus_adc_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_VBUS_ADC, 2); - + Adafruit_BusIO_Register vbus_adc_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_VBUS_ADC, 2); + uint16_t raw_value = vbus_adc_reg.read(); - + // Extract voltage value from bits 15:2 (shift right by 2) uint16_t voltage_value = raw_value >> 2; - + // Convert to Volts: 3.97mV per step return (float)voltage_value * 0.00397f; } @@ -1260,13 +1431,14 @@ float Adafruit_BQ25628E::getVBUSvoltage() { */ float Adafruit_BQ25628E::getVPMIDvoltage() { // Read 16-bit VPMID ADC register (little endian) - Adafruit_BusIO_Register vpmid_adc_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_VPMID_ADC, 2); - + Adafruit_BusIO_Register vpmid_adc_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_VPMID_ADC, 2); + uint16_t raw_value = vpmid_adc_reg.read(); - + // Extract voltage value from bits 15:2 (shift right by 2) uint16_t voltage_value = raw_value >> 2; - + // Convert to Volts: 3.97mV per step return (float)voltage_value * 0.00397f; } @@ -1278,13 +1450,14 @@ float Adafruit_BQ25628E::getVPMIDvoltage() { */ float Adafruit_BQ25628E::getVBATvoltage() { // Read 16-bit VBAT ADC register (little endian) - Adafruit_BusIO_Register vbat_adc_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_VBAT_ADC, 2); - + Adafruit_BusIO_Register vbat_adc_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_VBAT_ADC, 2); + uint16_t raw_value = vbat_adc_reg.read(); - + // Extract voltage value from bits 15:1 (shift right by 1) uint16_t voltage_value = raw_value >> 1; - + // Convert to Volts: 1.99mV per step return (float)voltage_value * 0.00199f; } @@ -1296,13 +1469,14 @@ float Adafruit_BQ25628E::getVBATvoltage() { */ float Adafruit_BQ25628E::getVSYSvoltage() { // Read 16-bit VSYS ADC register (little endian) - Adafruit_BusIO_Register vsys_adc_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_VSYS_ADC, 2); - + Adafruit_BusIO_Register vsys_adc_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_VSYS_ADC, 2); + uint16_t raw_value = vsys_adc_reg.read(); - + // Extract voltage value from bits 15:1 (shift right by 1) uint16_t voltage_value = raw_value >> 1; - + // Convert to Volts: 1.99mV per step return (float)voltage_value * 0.00199f; } @@ -1315,13 +1489,14 @@ float Adafruit_BQ25628E::getVSYSvoltage() { */ float Adafruit_BQ25628E::getThermistorPercent() { // Read 16-bit TS ADC register (little endian) - Adafruit_BusIO_Register ts_adc_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_TS_ADC, 2); - + Adafruit_BusIO_Register ts_adc_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_TS_ADC, 2); + uint16_t raw_value = ts_adc_reg.read(); - + // Extract 12-bit value from bits 11:0 (no shift needed) uint16_t ts_value = raw_value & 0x0FFF; - + // Convert to percentage: 0.0961% per step return (float)ts_value * 0.0961f; } @@ -1334,13 +1509,14 @@ float Adafruit_BQ25628E::getThermistorPercent() { */ float Adafruit_BQ25628E::getDieTempC() { // Read 16-bit TDIE ADC register (little endian) - Adafruit_BusIO_Register tdie_adc_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_TDIE_ADC, 2); - + Adafruit_BusIO_Register tdie_adc_reg = + Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_TDIE_ADC, 2); + uint16_t raw_value = tdie_adc_reg.read(); - + // Extract 12-bit value from bits 11:0 (no shift needed) uint16_t temp_12bit = raw_value & 0x0FFF; - + // Convert from 12-bit 2's complement to signed 16-bit int16_t signed_value; if (temp_12bit & 0x0800) { @@ -1350,7 +1526,7 @@ float Adafruit_BQ25628E::getDieTempC() { // Positive value signed_value = (int16_t)temp_12bit; } - + // Convert to Celsius: 0.5°C per step return (float)signed_value * 0.5f; } \ No newline at end of file diff --git a/Adafruit_BQ25628E.h b/Adafruit_BQ25628E.h index a1a175f..e381c3e 100644 --- a/Adafruit_BQ25628E.h +++ b/Adafruit_BQ25628E.h @@ -21,10 +21,11 @@ #ifndef _ADAFRUIT_BQ25628E_H #define _ADAFRUIT_BQ25628E_H -#include "Arduino.h" #include #include +#include "Arduino.h" + /*! Default I2C address for the BQ25628E */ #define BQ25628E_DEFAULT_ADDR 0x6A @@ -52,10 +53,10 @@ typedef enum { * @brief BATFET control settings */ typedef enum { - BQ25628E_BATFET_NORMAL = 0b00, /*!< Normal operation */ - BQ25628E_BATFET_SHUTDOWN = 0b01, /*!< Shutdown mode */ - BQ25628E_BATFET_SHIP = 0b10, /*!< Ship mode */ - BQ25628E_BATFET_RESET = 0b11 /*!< System power reset */ + BQ25628E_BATFET_NORMAL = 0b00, /*!< Normal operation */ + BQ25628E_BATFET_SHUTDOWN = 0b01, /*!< Shutdown mode */ + BQ25628E_BATFET_SHIP = 0b10, /*!< Ship mode */ + BQ25628E_BATFET_RESET = 0b11 /*!< System power reset */ } bq25628e_batfet_ctrl_t; /*! @@ -72,111 +73,130 @@ typedef enum { * @brief Thermistor current settings for cool/warm zones */ typedef enum { - BQ25628E_THERM_CURR_SUSPEND = 0b00, /*!< Charge suspended */ - BQ25628E_THERM_CURR_20PCT = 0b01, /*!< Set ICHG to 20% */ - BQ25628E_THERM_CURR_40PCT = 0b10, /*!< Set ICHG to 40% */ + BQ25628E_THERM_CURR_SUSPEND = 0b00, /*!< Charge suspended */ + BQ25628E_THERM_CURR_20PCT = 0b01, /*!< Set ICHG to 20% */ + BQ25628E_THERM_CURR_40PCT = 0b10, /*!< Set ICHG to 40% */ BQ25628E_THERM_CURR_UNCHANGED = 0b11 /*!< ICHG unchanged */ } bq25628e_therm_curr_t; /*! Status register bit flags for REG0x1D_Charger_Status_0 */ -#define BQ25628E_STATUS0_WD_STAT (1 << 0) /*!< WD timer expired */ +#define BQ25628E_STATUS0_WD_STAT (1 << 0) /*!< WD timer expired */ #define BQ25628E_STATUS0_SAFETY_TMR_STAT (1 << 1) /*!< Safety timer expired */ -#define BQ25628E_STATUS0_VINDPM_STAT (1 << 2) /*!< In VINDPM regulation */ -#define BQ25628E_STATUS0_IINDPM_STAT (1 << 3) /*!< In IINDPM/ILIM regulation */ -#define BQ25628E_STATUS0_VSYS_STAT (1 << 4) /*!< In VSYSMIN regulation */ -#define BQ25628E_STATUS0_TREG_STAT (1 << 5) /*!< In thermal regulation */ -#define BQ25628E_STATUS0_ADC_DONE_STAT (1 << 6) /*!< ADC conversion complete */ +#define BQ25628E_STATUS0_VINDPM_STAT (1 << 2) /*!< In VINDPM regulation */ +#define BQ25628E_STATUS0_IINDPM_STAT (1 << 3) /*!< In IINDPM/ILIM regulation \ + */ +#define BQ25628E_STATUS0_VSYS_STAT (1 << 4) /*!< In VSYSMIN regulation */ +#define BQ25628E_STATUS0_TREG_STAT (1 << 5) /*!< In thermal regulation */ +#define BQ25628E_STATUS0_ADC_DONE_STAT (1 << 6) /*!< ADC conversion complete \ + */ /*! Status register bit masks for REG0x1E_Charger_Status_1 */ -#define BQ25628E_STATUS1_VBUS_STAT_MASK (0x07) /*!< VBUS status mask bits 2:0 */ -#define BQ25628E_STATUS1_CHG_STAT_MASK (0x18) /*!< Charge status mask bits 4:3 */ -#define BQ25628E_STATUS1_CHG_STAT_SHIFT (3) /*!< Charge status bit shift */ +#define BQ25628E_STATUS1_VBUS_STAT_MASK (0x07) /*!< VBUS status mask bits 2:0 \ + */ +#define BQ25628E_STATUS1_CHG_STAT_MASK \ + (0x18) /*!< Charge status mask bits 4:3 */ +#define BQ25628E_STATUS1_CHG_STAT_SHIFT (3) /*!< Charge status bit shift */ /*! VBUS Status values */ -#define BQ25628E_VBUS_STAT_NOT_POWERED (0x00) /*!< Not powered from VBUS */ -#define BQ25628E_VBUS_STAT_UNKNOWN_ADAPTER (0x04) /*!< Unknown adapter */ +#define BQ25628E_VBUS_STAT_NOT_POWERED (0x00) /*!< Not powered from VBUS */ +#define BQ25628E_VBUS_STAT_UNKNOWN_ADAPTER (0x04) /*!< Unknown adapter */ /*! Charge Status values */ -#define BQ25628E_CHG_STAT_NOT_CHARGING (0x00) /*!< Not charging or terminated */ -#define BQ25628E_CHG_STAT_CHARGING (0x01) /*!< Trickle/Pre/Fast charge */ -#define BQ25628E_CHG_STAT_TAPER (0x02) /*!< Taper charge (CV mode) */ -#define BQ25628E_CHG_STAT_TOPOFF (0x03) /*!< Top-off timer active */ +#define BQ25628E_CHG_STAT_NOT_CHARGING (0x00) /*!< Not charging or terminated \ + */ +#define BQ25628E_CHG_STAT_CHARGING (0x01) /*!< Trickle/Pre/Fast charge */ +#define BQ25628E_CHG_STAT_TAPER (0x02) /*!< Taper charge (CV mode) */ +#define BQ25628E_CHG_STAT_TOPOFF (0x03) /*!< Top-off timer active */ /*! Fault status register bit flags for REG0x1F_FAULT_Status_0 */ -#define BQ25628E_FAULT_VBUS_FAULT_STAT (1 << 7) /*!< VBUS fault (OVP/sleep) */ -#define BQ25628E_FAULT_BAT_FAULT_STAT (1 << 6) /*!< Battery fault (OCP/OVP) */ -#define BQ25628E_FAULT_SYS_FAULT_STAT (1 << 5) /*!< System fault (short/OVP) */ -#define BQ25628E_FAULT_TSHUT_STAT (1 << 3) /*!< Thermal shutdown */ -#define BQ25628E_FAULT_TS_STAT_MASK (0x07) /*!< TS status mask bits 2:0 */ +#define BQ25628E_FAULT_VBUS_FAULT_STAT (1 << 7) /*!< VBUS fault (OVP/sleep) */ +#define BQ25628E_FAULT_BAT_FAULT_STAT (1 << 6) /*!< Battery fault (OCP/OVP) */ +#define BQ25628E_FAULT_SYS_FAULT_STAT (1 << 5) /*!< System fault (short/OVP) \ + */ +#define BQ25628E_FAULT_TSHUT_STAT (1 << 3) /*!< Thermal shutdown */ +#define BQ25628E_FAULT_TS_STAT_MASK (0x07) /*!< TS status mask bits 2:0 */ /*! TS Status values */ -#define BQ25628E_TS_STAT_NORMAL (0x00) /*!< TS Normal */ -#define BQ25628E_TS_STAT_COLD (0x01) /*!< TS Cold */ -#define BQ25628E_TS_STAT_HOT (0x02) /*!< TS Hot */ -#define BQ25628E_TS_STAT_COOL (0x03) /*!< TS Cool */ -#define BQ25628E_TS_STAT_WARM (0x04) /*!< TS Warm */ -#define BQ25628E_TS_STAT_PRECOOL (0x05) /*!< TS Pre-cool */ -#define BQ25628E_TS_STAT_PREWARM (0x06) /*!< TS Pre-warm */ -#define BQ25628E_TS_STAT_BIAS_FAULT (0x07) /*!< TS bias reference fault */ +#define BQ25628E_TS_STAT_NORMAL (0x00) /*!< TS Normal */ +#define BQ25628E_TS_STAT_COLD (0x01) /*!< TS Cold */ +#define BQ25628E_TS_STAT_HOT (0x02) /*!< TS Hot */ +#define BQ25628E_TS_STAT_COOL (0x03) /*!< TS Cool */ +#define BQ25628E_TS_STAT_WARM (0x04) /*!< TS Warm */ +#define BQ25628E_TS_STAT_PRECOOL (0x05) /*!< TS Pre-cool */ +#define BQ25628E_TS_STAT_PREWARM (0x06) /*!< TS Pre-warm */ +#define BQ25628E_TS_STAT_BIAS_FAULT (0x07) /*!< TS bias reference fault */ /*! Charger flag register bit flags for REG0x20_Charger_Flag_0 */ -#define BQ25628E_FLAG0_WD_FLAG (1 << 0) /*!< WD timer expired flag */ -#define BQ25628E_FLAG0_SAFETY_TMR_FLAG (1 << 1) /*!< Safety timer expired flag */ -#define BQ25628E_FLAG0_VINDPM_FLAG (1 << 2) /*!< VINDPM regulation flag */ -#define BQ25628E_FLAG0_IINDPM_FLAG (1 << 3) /*!< IINDPM/ILIM regulation flag */ -#define BQ25628E_FLAG0_VSYS_FLAG (1 << 4) /*!< VSYSMIN regulation flag */ -#define BQ25628E_FLAG0_TREG_FLAG (1 << 5) /*!< Thermal regulation flag */ -#define BQ25628E_FLAG0_ADC_DONE_FLAG (1 << 6) /*!< ADC conversion complete flag */ +#define BQ25628E_FLAG0_WD_FLAG (1 << 0) /*!< WD timer expired flag */ +#define BQ25628E_FLAG0_SAFETY_TMR_FLAG \ + (1 << 1) /*!< Safety timer expired flag */ +#define BQ25628E_FLAG0_VINDPM_FLAG (1 << 2) /*!< VINDPM regulation flag */ +#define BQ25628E_FLAG0_IINDPM_FLAG (1 << 3) /*!< IINDPM/ILIM regulation flag \ + */ +#define BQ25628E_FLAG0_VSYS_FLAG (1 << 4) /*!< VSYSMIN regulation flag */ +#define BQ25628E_FLAG0_TREG_FLAG (1 << 5) /*!< Thermal regulation flag */ +#define BQ25628E_FLAG0_ADC_DONE_FLAG \ + (1 << 6) /*!< ADC conversion complete flag */ /*! Charger flag register bit flags for REG0x21_Charger_Flag_1 */ -#define BQ25628E_FLAG1_VBUS_FLAG (1 << 0) /*!< VBUS status changed flag */ -#define BQ25628E_FLAG1_CHG_FLAG (1 << 3) /*!< Charge status changed flag */ +#define BQ25628E_FLAG1_VBUS_FLAG (1 << 0) /*!< VBUS status changed flag */ +#define BQ25628E_FLAG1_CHG_FLAG (1 << 3) /*!< Charge status changed flag */ /*! Fault flag register bit flags for REG0x22_FAULT_Flag_0 */ -#define BQ25628E_FAULT_FLAG_VBUS_FAULT (1 << 7) /*!< VBUS OVP/sleep fault flag */ -#define BQ25628E_FAULT_FLAG_BAT_FAULT (1 << 6) /*!< Battery OCP/OVP fault flag */ -#define BQ25628E_FAULT_FLAG_SYS_FAULT (1 << 5) /*!< System OVP/short fault flag */ -#define BQ25628E_FAULT_FLAG_TSHUT (1 << 3) /*!< Thermal shutdown fault flag */ -#define BQ25628E_FAULT_FLAG_TS_CHANGED (1 << 0) /*!< TS status changed flag */ +#define BQ25628E_FAULT_FLAG_VBUS_FAULT \ + (1 << 7) /*!< VBUS OVP/sleep fault flag */ +#define BQ25628E_FAULT_FLAG_BAT_FAULT \ + (1 << 6) /*!< Battery OCP/OVP fault flag */ +#define BQ25628E_FAULT_FLAG_SYS_FAULT \ + (1 << 5) /*!< System OVP/short fault flag */ +#define BQ25628E_FAULT_FLAG_TSHUT (1 << 3) /*!< Thermal shutdown fault flag */ +#define BQ25628E_FAULT_FLAG_TS_CHANGED (1 << 0) /*!< TS status changed flag */ /*! Interrupt mask register bit flags for REG0x23_Charger_Mask_0 */ -#define BQ25628E_MASK0_ADC_DONE_MASK (1 << 6) /*!< ADC conversion mask */ -#define BQ25628E_MASK0_TREG_MASK (1 << 5) /*!< Thermal regulation mask */ -#define BQ25628E_MASK0_VSYS_MASK (1 << 4) /*!< VSYSMIN regulation mask */ -#define BQ25628E_MASK0_IINDPM_MASK (1 << 3) /*!< IINDPM/ILIM regulation mask */ -#define BQ25628E_MASK0_VINDPM_MASK (1 << 2) /*!< VINDPM regulation mask */ -#define BQ25628E_MASK0_SAFETY_TMR_MASK (1 << 1) /*!< Safety timer mask */ -#define BQ25628E_MASK0_WD_MASK (1 << 0) /*!< Watchdog timer mask */ +#define BQ25628E_MASK0_ADC_DONE_MASK (1 << 6) /*!< ADC conversion mask */ +#define BQ25628E_MASK0_TREG_MASK (1 << 5) /*!< Thermal regulation mask */ +#define BQ25628E_MASK0_VSYS_MASK (1 << 4) /*!< VSYSMIN regulation mask */ +#define BQ25628E_MASK0_IINDPM_MASK (1 << 3) /*!< IINDPM/ILIM regulation mask \ + */ +#define BQ25628E_MASK0_VINDPM_MASK (1 << 2) /*!< VINDPM regulation mask */ +#define BQ25628E_MASK0_SAFETY_TMR_MASK (1 << 1) /*!< Safety timer mask */ +#define BQ25628E_MASK0_WD_MASK (1 << 0) /*!< Watchdog timer mask */ /*! Interrupt mask register bit flags for REG0x24_Charger_Mask_1 */ -#define BQ25628E_MASK1_CHG_MASK (1 << 3) /*!< Charge status change mask */ -#define BQ25628E_MASK1_VBUS_MASK (1 << 0) /*!< VBUS status change mask */ +#define BQ25628E_MASK1_CHG_MASK (1 << 3) /*!< Charge status change mask */ +#define BQ25628E_MASK1_VBUS_MASK (1 << 0) /*!< VBUS status change mask */ /*! Interrupt mask register bit flags for REG0x25_FAULT_Mask_0 */ -#define BQ25628E_FMASK_VBUS_FAULT_MASK (1 << 7) /*!< VBUS fault mask */ -#define BQ25628E_FMASK_BAT_FAULT_MASK (1 << 6) /*!< Battery fault mask */ -#define BQ25628E_FMASK_SYS_FAULT_MASK (1 << 5) /*!< System fault mask */ -#define BQ25628E_FMASK_TSHUT_MASK (1 << 3) /*!< Thermal shutdown mask */ -#define BQ25628E_FMASK_TS_MASK (1 << 0) /*!< TS status change mask */ +#define BQ25628E_FMASK_VBUS_FAULT_MASK (1 << 7) /*!< VBUS fault mask */ +#define BQ25628E_FMASK_BAT_FAULT_MASK (1 << 6) /*!< Battery fault mask */ +#define BQ25628E_FMASK_SYS_FAULT_MASK (1 << 5) /*!< System fault mask */ +#define BQ25628E_FMASK_TSHUT_MASK (1 << 3) /*!< Thermal shutdown mask */ +#define BQ25628E_FMASK_TS_MASK (1 << 0) /*!< TS status change mask */ /*! Combined interrupt mask positions for 32-bit interface */ -#define BQ25628E_INT_MASK_WD (1UL << 0) /*!< Watchdog timer interrupt */ -#define BQ25628E_INT_MASK_SAFETY_TMR (1UL << 1) /*!< Safety timer interrupt */ -#define BQ25628E_INT_MASK_VINDPM (1UL << 2) /*!< VINDPM regulation interrupt */ -#define BQ25628E_INT_MASK_IINDPM (1UL << 3) /*!< IINDPM/ILIM regulation interrupt */ -#define BQ25628E_INT_MASK_VSYS (1UL << 4) /*!< VSYSMIN regulation interrupt */ -#define BQ25628E_INT_MASK_TREG (1UL << 5) /*!< Thermal regulation interrupt */ -#define BQ25628E_INT_MASK_ADC_DONE (1UL << 6) /*!< ADC conversion interrupt */ -#define BQ25628E_INT_MASK_VBUS (1UL << 8) /*!< VBUS status change interrupt */ -#define BQ25628E_INT_MASK_CHG (1UL << 11) /*!< Charge status change interrupt */ -#define BQ25628E_INT_MASK_TS (1UL << 16) /*!< TS status change interrupt */ -#define BQ25628E_INT_MASK_TSHUT (1UL << 19) /*!< Thermal shutdown interrupt */ -#define BQ25628E_INT_MASK_SYS_FAULT (1UL << 21) /*!< System fault interrupt */ -#define BQ25628E_INT_MASK_BAT_FAULT (1UL << 22) /*!< Battery fault interrupt */ -#define BQ25628E_INT_MASK_VBUS_FAULT (1UL << 23) /*!< VBUS fault interrupt */ +#define BQ25628E_INT_MASK_WD (1UL << 0) /*!< Watchdog timer interrupt */ +#define BQ25628E_INT_MASK_SAFETY_TMR (1UL << 1) /*!< Safety timer interrupt */ +#define BQ25628E_INT_MASK_VINDPM (1UL << 2) /*!< VINDPM regulation interrupt \ + */ +#define BQ25628E_INT_MASK_IINDPM \ + (1UL << 3) /*!< IINDPM/ILIM regulation interrupt */ +#define BQ25628E_INT_MASK_VSYS (1UL << 4) /*!< VSYSMIN regulation interrupt */ +#define BQ25628E_INT_MASK_TREG (1UL << 5) /*!< Thermal regulation interrupt */ +#define BQ25628E_INT_MASK_ADC_DONE (1UL << 6) /*!< ADC conversion interrupt */ +#define BQ25628E_INT_MASK_VBUS (1UL << 8) /*!< VBUS status change interrupt */ +#define BQ25628E_INT_MASK_CHG (1UL << 11) /*!< Charge status change interrupt \ + */ +#define BQ25628E_INT_MASK_TS (1UL << 16) /*!< TS status change interrupt */ +#define BQ25628E_INT_MASK_TSHUT (1UL << 19) /*!< Thermal shutdown interrupt */ +#define BQ25628E_INT_MASK_SYS_FAULT (1UL << 21) /*!< System fault interrupt */ +#define BQ25628E_INT_MASK_BAT_FAULT (1UL << 22) /*!< Battery fault interrupt \ + */ +#define BQ25628E_INT_MASK_VBUS_FAULT (1UL << 23) /*!< VBUS fault interrupt */ -/*! Default interrupt mask: Enable only CHG and VBUS interrupts, disable all others */ -#define BQ25628E_INT_MASK_DEFAULT (~(BQ25628E_INT_MASK_CHG | BQ25628E_INT_MASK_VBUS)) +/*! Default interrupt mask: Enable only CHG and VBUS interrupts, disable all + * others */ +#define BQ25628E_INT_MASK_DEFAULT \ + (~(BQ25628E_INT_MASK_CHG | BQ25628E_INT_MASK_VBUS)) /*! * @brief ADC sample rate settings @@ -189,14 +209,14 @@ typedef enum { } bq25628e_adc_sample_t; /*! ADC function disable flags for REG0x27_ADC_Function_Disable_0 */ -#define BQ25628E_ADC_DIS_IBUS (1 << 7) /*!< Disable IBUS ADC */ -#define BQ25628E_ADC_DIS_IBAT (1 << 6) /*!< Disable IBAT ADC */ -#define BQ25628E_ADC_DIS_VBUS (1 << 5) /*!< Disable VBUS ADC */ -#define BQ25628E_ADC_DIS_VBAT (1 << 4) /*!< Disable VBAT ADC */ -#define BQ25628E_ADC_DIS_VSYS (1 << 3) /*!< Disable VSYS ADC */ -#define BQ25628E_ADC_DIS_TS (1 << 2) /*!< Disable TS ADC */ -#define BQ25628E_ADC_DIS_TDIE (1 << 1) /*!< Disable TDIE ADC */ -#define BQ25628E_ADC_DIS_VPMID (1 << 0) /*!< Disable VPMID ADC */ +#define BQ25628E_ADC_DIS_IBUS (1 << 7) /*!< Disable IBUS ADC */ +#define BQ25628E_ADC_DIS_IBAT (1 << 6) /*!< Disable IBAT ADC */ +#define BQ25628E_ADC_DIS_VBUS (1 << 5) /*!< Disable VBUS ADC */ +#define BQ25628E_ADC_DIS_VBAT (1 << 4) /*!< Disable VBAT ADC */ +#define BQ25628E_ADC_DIS_VSYS (1 << 3) /*!< Disable VSYS ADC */ +#define BQ25628E_ADC_DIS_TS (1 << 2) /*!< Disable TS ADC */ +#define BQ25628E_ADC_DIS_TDIE (1 << 1) /*!< Disable TDIE ADC */ +#define BQ25628E_ADC_DIS_VPMID (1 << 0) /*!< Disable VPMID ADC */ /*! Register addresses for the BQ25628E */ #define BQ25628E_REG_CHARGE_CURRENT_LIMIT 0x02 @@ -241,10 +261,10 @@ typedef enum { * the BQ25628E I2C Battery Charger */ class Adafruit_BQ25628E { -public: + public: Adafruit_BQ25628E(); ~Adafruit_BQ25628E(); - bool begin(uint8_t i2c_addr = BQ25628E_DEFAULT_ADDR, TwoWire *wire = &Wire); + bool begin(uint8_t i2c_addr = BQ25628E_DEFAULT_ADDR, TwoWire* wire = &Wire); bool setChargeCurrentLimitA(float current_a); float getChargeCurrentLimitA(); @@ -366,8 +386,8 @@ public: float getThermistorPercent(); float getDieTempC(); -private: - Adafruit_I2CDevice *i2c_dev; /*!< Pointer to I2C bus interface */ + private: + Adafruit_I2CDevice* i2c_dev; /*!< Pointer to I2C bus interface */ }; #endif \ No newline at end of file