SensorLib 0.5.0
Multi-platform sensor driver library for Arduino, PlatformIO, and ESP-IDF
Loading...
Searching...
No Matches
axp2101_irq.ino
Go to the documentation of this file.
1
30#include <PmicXPowers.hpp>
31
32#ifndef PMIC_SDA
33#define PMIC_SDA 3
34#endif
35
36#ifndef PMIC_SCL
37#define PMIC_SCL 2
38#endif
39
40#ifndef PMIC_IRQ
41#define PMIC_IRQ 21
42#endif
43
45
46void printU64(uint64_t value)
47{
48 char buffer[20];
49 snprintf(buffer, sizeof(buffer), "0x%016llX", value);
50 Serial.print(buffer);
51}
52
53void setup()
54{
55 Serial.begin(115200);
56 delay(500);
57
58 Serial.println("\n=== AXP2101 IRQ Example ===\n");
59
60 if (!pmic.begin(Wire, AXP2101_SLAVE_ADDRESS, PMIC_SDA, PMIC_SCL)) {
61 Serial.println("Failed to init AXP2101!");
62 while (1) delay(1000);
63 }
64 Serial.println("AXP2101 initialized");
65
66 // Enable ADC and charger modules
67 pmic.enableModule(PmicAXP2101::Module::GENERAL_ADC, true);
68 pmic.enableModule(PmicAXP2101::Module::CELL_CHARGE, true);
69 pmic.enableModule(PmicAXP2101::Module::BAT_DETECT, true);
70
71 // Enable selected interrupt sources
72 pmic.irq().enable(
83 );
84 Serial.println("IRQ sources enabled");
85
86 // Clear any stale interrupts
88
89 Serial.println("\n=== Setup Complete ===\n");
90}
91
92void loop()
93{
94 uint64_t irqStatus = pmic.irq().readStatus(true);
95 if (irqStatus) {
96
97 Serial.print("\n--- Interrupt : 0x");
98 printU64(irqStatus);
99 Serial.print(" --- ");
100
101 if (pmic.irq().isVbusInsert(irqStatus))
102 Serial.println("VBUS inserted");
103 if (pmic.irq().isVbusRemove(irqStatus))
104 Serial.println("VBUS removed");
105 if (pmic.irq().isBatInsert(irqStatus))
106 Serial.println("Battery inserted");
107 if (pmic.irq().isBatRemove(irqStatus))
108 Serial.println("Battery removed");
109 if (pmic.irq().isBatChgStart(irqStatus))
110 Serial.println("Charge started");
111 if (pmic.irq().isBatChgDone(irqStatus))
112 Serial.println("Charge done");
113 if (pmic.irq().isPekeyShortPress(irqStatus)) {
114 Serial.println("PEKEY short press");
116
118 switch (state) {
120 Serial.println("LED is ON");
121 break;
123 Serial.println("LED is OFF");
124 break;
126 Serial.println("LED is HiZ");
127 break;
129 Serial.println("LED is blinking at 1Hz");
130 break;
132 Serial.println("LED is blinking at 4Hz");
133 break;
134 default:
135 break;
136 }
138 Serial.println("ON LED");
140 } else {
141 Serial.println("OFF LED");
143 }
144 }
145 if (pmic.irq().isPekeyLongPress(irqStatus))
146 Serial.println("PEKEY long press");
147 if (pmic.irq().isWdtExpire(irqStatus))
148 Serial.println("Watchdog expired");
149 if (pmic.irq().isDieOverTemp(irqStatus))
150 Serial.println("Die over-temperature");
151 if (pmic.irq().isLdoOverCurr(irqStatus))
152 Serial.println("LDO over-current");
153 if (pmic.irq().isBatfetOverCurr(irqStatus))
154 Serial.println("BATFET over-current");
155 if (pmic.irq().isBatOverVolt(irqStatus))
156 Serial.println("Battery over-voltage");
157 if (pmic.irq().isChgTimeout(irqStatus))
158 Serial.println("Charge timeout");
159 if (pmic.irq().isGaugeNewSoc(irqStatus))
160 Serial.println("New SOC reading");
161 if (pmic.irq().isBatOverTempWork(irqStatus))
162 Serial.println("Battery over-temp (work)");
163 if (pmic.irq().isBatUnderTempWork(irqStatus))
164 Serial.println("Battery under-temp (work)");
165 if (pmic.irq().isBatOverTempChg(irqStatus))
166 Serial.println("Battery charge over-temp");
167 if (pmic.irq().isBatUnderTempChg(irqStatus))
168 Serial.println("Battery charge under-temp");
169 if (pmic.irq().isPkeyNegativeEdge(irqStatus))
170 Serial.println("PEKEY negative edge");
171 if (pmic.irq().isPkeyPositiveEdge(irqStatus))
172 Serial.println("PEKEY positive edge");
173 }
174 delay(100);
175}
@license MIT License
#define PMIC_SDA
#define PMIC_SCL
void setup()
void printU64(uint64_t value)
PmicAXP2101 pmic
void loop()
static bool isBatfetOverCurr(uint64_t mask)
Check if BATFET over-current interrupt is set.
static constexpr uint64_t IRQ_PEKEY_LONG_PRESS
Power key held for a long press duration.
static bool isBatOverTempChg(uint64_t mask)
Check if battery over-temperature (charging range) interrupt is set.
static constexpr uint64_t IRQ_VBUS_REMOVE
VBUS power source removed.
static bool isPekeyShortPress(uint64_t mask)
Check if power key short press interrupt is set.
static constexpr uint64_t IRQ_BAT_CHG_START
Battery charging has started.
static bool isPekeyLongPress(uint64_t mask)
Check if power key long press interrupt is set.
static constexpr uint64_t IRQ_PEKEY_SHORT_PRESS
Power key pressed briefly (short press).
static bool isGaugeNewSoc(uint64_t mask)
Check if gauge new state-of-charge interrupt is set.
static bool isBatOverVolt(uint64_t mask)
Check if battery over-voltage interrupt is set.
static bool isWdtExpire(uint64_t mask)
Check if watchdog timer expired interrupt is set.
static bool isChgTimeout(uint64_t mask)
Check if charge timeout interrupt is set.
static bool isLdoOverCurr(uint64_t mask)
Check if LDO over-current interrupt is set.
static bool isBatInsert(uint64_t mask)
Check if battery insertion interrupt is set.
static bool isBatOverTempWork(uint64_t mask)
Check if battery over-temperature (working range) interrupt is set.
static constexpr uint64_t IRQ_VBUS_INSERT
VBUS power source inserted.
static bool isBatRemove(uint64_t mask)
Check if battery removal interrupt is set.
static bool isPkeyPositiveEdge(uint64_t mask)
Check if power key positive (rising) edge interrupt is set.
static bool isVbusInsert(uint64_t mask)
Check if VBUS insertion interrupt is set.
static bool isBatUnderTempWork(uint64_t mask)
Check if battery under-temperature (working range) interrupt is set.
static constexpr uint64_t IRQ_BAT_INSERT
Battery inserted into the system.
bool enable(uint64_t mask) override
Enable one or more interrupt sources.
static bool isVbusRemove(uint64_t mask)
Check if VBUS removal interrupt is set.
uint64_t readStatus(bool clear=true) override
Read the current interrupt status.
static constexpr uint64_t IRQ_WDT_EXPIRE
Watchdog timer expired.
static constexpr uint64_t IRQ_BAT_REMOVE
Battery removed from the system.
static bool isBatChgDone(uint64_t mask)
Check if battery charge done interrupt is set.
static constexpr uint64_t IRQ_BAT_CHG_DONE
Battery charging has completed.
static bool isPkeyNegativeEdge(uint64_t mask)
Check if power key negative (falling) edge interrupt is set.
static bool isDieOverTemp(uint64_t mask)
Check if die over-temperature interrupt is set.
bool clearStatus() override
Clear all pending interrupt status registers.
static constexpr uint64_t IRQ_DIE_OVER_TEMP
Die temperature exceeded the thermal shutdown threshold.
static bool isBatUnderTempChg(uint64_t mask)
Check if battery under-temperature (charging range) interrupt is set.
static bool isBatChgStart(uint64_t mask)
Check if battery charge start interrupt is set.
bool setManualState(ManualState state) override
For manual mode, set the LED output state.
bool setMode(Mode mode) override
Set the LED operating mode.
ManualState getManualState() override
Get the current manual LED state.
Top-level unified interface for the AXP2101 PMIC.
bool begin(SensorCommCustom::CustomCallback callback, SensorCommCustomHal::CustomHalCallback hal_cb, uint8_t addr)
Initialise the AXP2101 with custom communication callbacks.
bool enableModule(Module module, bool enable)
Enable or disable an internal functional module.
AXP2101Led & led()
Get the chip-specific LED module.
AXP2101Irq & irq()
Get the chip-specific IRQ controller.
ManualState
Manual LED state (portable subset).
@ MANUAL
Manual control through registers.