30#include "../../../SensorBuildOpt.h"
31#if !SENSORLIB_EXCLUDE_PMIC_BQ25896
43 return rev == BQ25896_DEV_REV;
48 int val =
readReg(REG_DEVICE_REV);
49 return (val >= 0) ? (val & MASK_DEV_REV) : 0xFF;
54 int val =
readReg(REG_DEVICE_REV);
55 return (val >= 0) ? ((val >> SHIFT_PN) & 0x07) : 0xFF;
65 int val =
readReg(REG_ADC_BUSV);
66 return (val >= 0) && (val & MASK_VBUS_GD);
72 return (val >= 0) ? ((val >> SHIFT_VBUS_STAT) & 0x07) : 0;
78 return (val >= 0) ? ((val >> SHIFT_CHRG_STAT) & 0x03) : 0xFF;
84 return (val >= 0) && (val & MASK_PG_STAT);
105 return (val >= 0) && (val & MASK_VSYS_STAT);
110 int val =
readReg(REG_IDPM_STATUS);
111 return (val >= 0) && (val & MASK_VDPM_STAT);
116 int val =
readReg(REG_IDPM_STATUS);
117 return (val >= 0) && (val & MASK_IDPM_STAT);
123 if (val < 0)
return false;
124 fault =
static_cast<uint8_t
>(val);
130 int val =
readReg(REG_DEVICE_REV);
131 return (val >= 0) && (val & MASK_ICO_OPTIMIZED);
134bool BQ25896Core::initImpl(uint8_t param)
138 if (rev != BQ25896_DEV_REV) {
139 SENSORLIB_LOG_E(
"Device revision mismatch: expected 0x%02x, got 0x%02x",
140 static_cast<unsigned int>(BQ25896_DEV_REV),
141 static_cast<unsigned int>(rev));
154 return updateBits(REG_CHG_TIMER, MASK_WATCHDOG, 0) >= 0;
#define SENSORLIB_LOG_E(...)
void reset()
Reset device to default state.
bool isInputCurrentOptimizerOptimized()
Check if Input Current Optimizer has optimized.
uint8_t getChargeStatus()
Get charging status.
bool isOtg()
Check if in OTG (boost) mode.
bool isPowerGood()
Check if power is good.
uint8_t getDeviceConfig()
Get device configuration/part number.
bool isVsysInRegulation()
Check if VSYS is in regulation.
uint8_t getDeviceRevision() const
Get device revision.
bool isVindpmActive()
Get fault status.
bool getFaultStatus(uint8_t &fault)
Get fault status.
uint8_t getBusStatus()
Get USB port type status.
bool isValid() const
Check if device is valid/present.
bool isVbusPresent()
Check if VBUS (USB power) is present.
bool isCharging()
Check if actively charging.
bool isIindpmActive()
Check if IINDPM is active (input current limiting)
void end()
Deinitialize and release resources.
bool isChargeDone()
Check if charging is complete.
std::unique_ptr< SensorHal > hal
bool getRegBit(uint8_t reg, uint8_t bit)
int readReg(uint8_t reg) const
int updateBits(uint8_t reg, uint8_t mask, uint8_t value_shifted)
bool setRegBit(uint8_t reg, uint8_t bit)