SensorLib 0.5.0
Multi-platform sensor driver library for Arduino, PlatformIO, and ESP-IDF
Loading...
Searching...
No Matches
AXP1xxPower.hpp
Go to the documentation of this file.
1
41#pragma once
42#include "../../PmicPowerBase.hpp"
43#include "../../../platform/SensorCommWrapper.hpp"
44
45template<typename Regs>
47{
48public:
53 explicit AXP1xxPower(SensorCommWrapper &core) : _core(core) {}
54
66 bool setMinimumSystemVoltage(uint32_t mv) override
67 {
68 if (mv < 2600) mv = 2600;
69 if (mv > 3300) mv = 3300;
70 uint8_t code = (mv - 2600) / 100;
71 return _core.updateBits(Regs::pmu::VOFF_SET, 0x07, code) >= 0;
72 }
73
78 uint32_t getMinimumSystemVoltage() const override
79 {
80 int val = _core.readReg(Regs::pmu::VOFF_SET);
81 if (val < 0) return 0;
82 return 2600 + (val & 0x07) * 100;
83 }
84
90 bool setInputVoltageLimit(uint32_t mv) override
91 {
92 (void)mv;
93 return false;
94 }
95
100 uint32_t getInputVoltageLimit() const override
101 {
102 return 0;
103 }
104
117 bool setInputCurrentLimit(uint32_t mA) override
118 {
119 uint8_t code = Regs::pmu::encodeInputCurrentLimit(mA);
120 return _core.updateBits(Regs::pmu::IPS_SET, Regs::pmu::INPUT_CURR_MASK, code) >= 0;
121 }
122
127 uint32_t getInputCurrentLimit() const override
128 {
129 int val = _core.readReg(Regs::pmu::IPS_SET);
130 if (val < 0) return 0;
131 return Regs::pmu::decodeInputCurrentLimit(static_cast<uint8_t>(val));
132 }
133
145 bool enableShipMode(bool enable) override
146 {
147 if (enable) {
148 return _core.setRegBit(Regs::pmu::OFF_CTL, 7);
149 }
150 return _core.clrRegBit(Regs::pmu::OFF_CTL, 7);
151 }
152
157 bool isShipModeEnabled() const override
158 {
159 return _core.getRegBit(Regs::pmu::OFF_CTL, 7);
160 }
161
162private:
163 SensorCommWrapper &_core;
164};
bool setMinimumSystemVoltage(uint32_t mv) override
Set minimum system voltage.
bool isShipModeEnabled() const override
Check if ship mode is enabled.
bool setInputCurrentLimit(uint32_t mA) override
Set input current limit.
uint32_t getInputVoltageLimit() const override
Get input voltage limit (not supported by AXP1xx).
AXP1xxPower(SensorCommWrapper &core)
Construct power management interface.
bool setInputVoltageLimit(uint32_t mv) override
Set input voltage limit (not supported by AXP1xx).
bool enableShipMode(bool enable) override
Enable or disable ship mode.
uint32_t getMinimumSystemVoltage() const override
Get minimum system voltage.
uint32_t getInputCurrentLimit() const override
Get input current limit.
bool clrRegBit(uint8_t reg, uint8_t bit)
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)