30#include "../../../SensorBuildOpt.h"
31#if !SENSORLIB_EXCLUDE_PMIC_AXP517
87 case 4000: voltCode = 0x00;
break;
88 case 4100: voltCode = 0x01;
break;
89 case 4200: voltCode = 0x02;
break;
90 case 4350: voltCode = 0x03;
break;
91 case 4400: voltCode = 0x04;
break;
92 case 3800: voltCode = 0x05;
break;
93 case 3600: voltCode = 0x06;
break;
94 case 5000: voltCode = 0x07;
break;
95 default:
return false;
101 regValue = (regValue & 0xF8) | voltCode;
114 uint8_t voltCode = regValue & 0x07;
116 case 0x00:
return 4000;
117 case 0x01:
return 4100;
118 case 0x02:
return 4200;
119 case 0x03:
return 4350;
120 case 0x04:
return 4400;
121 case 0x05:
return 3800;
122 case 0x06:
return 3600;
123 case 0x07:
return 5000;
132 uint8_t buffer[2] {};
137 status.vbusPresent = (buffer[0] >> 5) & 0x01;
138 status.batteryPresent = (buffer[0] >> 3) & 0x01;
146 if (status.batteryPresent && status.vbusPresent) {
147 uint8_t charging_status = buffer[1] & 0x03;
148 status.charging = charging_status < 3;
149 status.chargeDone = charging_status == 4;
151 status.charging =
false;
152 status.chargeDone =
false;
154 status.fault =
false;
158bool AXP517Charger::setCurrentWithStep(uint8_t reg, uint16_t milliamps,
159 uint16_t max, uint16_t step, uint8_t mask)
161 if (milliamps > max) milliamps = max;
162 uint8_t code = milliamps / step;
163 milliamps = code * step;
164 int regValue = _core.
readReg(reg);
168 regValue = (regValue & ~mask) | code;
169 if (_core.
writeReg(reg, regValue) < 0) {
175uint16_t AXP517Charger::getCurrentWithStep(uint8_t reg, uint16_t step, uint8_t mask)
177 int regValue = _core.
readReg(reg);
181 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).
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 setPreChargeCurrent(uint16_t mA) override
Set pre-charge current.
AXP517Charger(AXP517Core &core)
Construct an AXP517 charger driver.
AXP517 low-level core driver.
int readReg(uint8_t reg) const
int writeReg(uint8_t reg, uint8_t val)
int readRegBuff(uint8_t reg, uint8_t *buf, size_t len) const
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)
bool online
PMIC reachable / initialized.
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.