30#include "../../../SensorBuildOpt.h"
31#if !SENSORLIB_EXCLUDE_PMIC_AXP517
57 enable ? 0x04 : 0x10) >= 0;
63 return regValue >= 0 && (regValue & 0x10) == 0;
101 case 4000: voltCode = 0x00;
break;
102 case 4100: voltCode = 0x01;
break;
103 case 4200: voltCode = 0x02;
break;
104 case 4350: voltCode = 0x03;
break;
105 case 4400: voltCode = 0x04;
break;
106 case 3800: voltCode = 0x05;
break;
107 case 3600: voltCode = 0x06;
break;
108 case 5000: voltCode = 0x07;
break;
109 default:
return false;
115 regValue = (regValue & 0xF8) | voltCode;
128 uint8_t voltCode = regValue & 0x07;
130 case 0x00:
return 4000;
131 case 0x01:
return 4100;
132 case 0x02:
return 4200;
133 case 0x03:
return 4350;
134 case 0x04:
return 4400;
135 case 0x05:
return 3800;
136 case 0x06:
return 3600;
137 case 0x07:
return 5000;
148 if (status0 < 0 || status1 < 0) {
151 status.online =
true;
152 status.vbusPresent = (status0 >> 5) & 0x01;
153 status.batteryPresent = (status0 >> 3) & 0x01;
161 if (!status.batteryPresent || !status.vbusPresent) {
165 const uint8_t chargingStatus =
static_cast<uint8_t
>(status1) & 0x07;
166 switch (chargingStatus) {
169 status.charging =
true;
174 status.charging =
true;
178 status.chargeDone =
true;
188 status.fault =
false;
192bool AXP517Charger::setCurrentWithStep(uint8_t reg, uint16_t milliamps,
193 uint16_t max, uint16_t step, uint8_t mask)
195 if (milliamps > max) milliamps = max;
196 uint8_t code = milliamps / step;
197 milliamps = code * step;
198 int regValue = _core.
readReg(reg);
202 regValue = (regValue & ~mask) | code;
203 if (_core.
writeReg(reg, regValue) < 0) {
209uint16_t AXP517Charger::getCurrentWithStep(uint8_t reg, uint16_t step, uint8_t mask)
211 int regValue = _core.
readReg(reg);
215 return (regValue & mask) * step;
uint16_t getChargeVoltage() override
Get charge voltage (CV).
uint16_t getPreChargeCurrent() override
Get pre-charge current.
bool setChargeVoltage(uint16_t mV) override
Set charge voltage (CV).
bool enableBatteryTemperatureProtection(bool enable)
Enable or disable TS-pin battery temperature protection.
uint16_t getFastChargeCurrent() override
Get fast charge (constant-current) current.
bool enableCharging(bool enable) override
Enable or disable charging.
Status getStatus() override
Get current charger status (best-effort).
bool setFastChargeCurrent(uint16_t mA) override
Set fast charge (constant-current) current.
bool isCharging() override
Check whether charger is currently charging (best-effort).
bool setTerminationCurrent(uint16_t mA) override
Set termination current.
uint16_t getTerminationCurrent() override
Get termination current.
bool isBatteryTemperatureProtectionEnabled()
Return true when the TS pin can affect charging.
bool setPreChargeCurrent(uint16_t mA) override
Set pre-charge current.
AXP517Charger(AXP517Core &core)
Construct an AXP517 charger driver.
AXP517 low-level core driver.
@ NO_CHARGING
Not charging, battery idle or disconnected.
@ PRE_CHARGE
Pre-charge phase (low current for weak battery)
@ UNKNOWN
Unable to determine status.
@ TERMINATION
Charging terminated (battery full)
@ FAST_CHARGE
Fast charge phase (constant current)
int readReg(uint8_t reg) const
int writeReg(uint8_t reg, uint8_t val)
int updateBits(uint8_t reg, uint8_t mask, uint8_t value_shifted)
Charger status structure.
bool charging
Charging state (coarse: true if in precharge/fastcharge)
static constexpr uint8_t STATUS1
BMU status1.
static constexpr uint8_t STATUS0
BMU status0.
static constexpr uint8_t ICC_SETTING
ICC setting.
static constexpr uint8_t IPRECHG_ITRICHG
Iprechg/Itrichg setting.
static constexpr uint8_t ITERM_CTRL
Iterm setting and control.
static constexpr uint8_t CV_CHG_VOLTAGE
CV charger voltage setting.
static constexpr uint8_t MODULE_EN1
Module enable control1.
static constexpr uint8_t PIN_CFG
TS pin configure.