Merge pull request #1303 from evilpete/clean_battery_libs

Reworked BatteryInterface to not include superfluous libraries
This commit is contained in:
Just Call Me Koko
2026-06-16 10:31:24 -04:00
committed by GitHub
6 changed files with 182 additions and 121 deletions
+97 -71
View File
@@ -1,7 +1,10 @@
// #ifdef HAS_BATTERY
#include "BatteryInterface.h"
#include "lang_var.h"
BatteryInterface::BatteryInterface() {
}
void BatteryInterface::main(uint32_t currentTime) {
@@ -27,96 +30,119 @@ void BatteryInterface::RunSetup() {
#ifdef HAS_BATTERY
#ifdef BATTERY_ADC_PIN
analogReadResolution(12);
pinMode(BATTERY_ADC_PIN, INPUT);
this->has_adc_battery = true;
this->i2c_supported = true;
Serial.println(F("Battery: ADC mode"));
#elif !defined(HAS_AXP2101)
Wire.begin(I2C_SDA, I2C_SCL);
analogReadResolution(12);
pinMode(BATTERY_ADC_PIN, INPUT);
this->has_adc_battery = true;
// this->i2c_supported = true;
Serial.println(F("Battery: ADC mode"));
Wire.beginTransmission(IP5306_ADDR);
error = Wire.endTransmission();
#elif defined(HAS_AXP2101) && defined(I2C_SDA)
bool result = this->power.begin(Wire, AXP2101_SLAVE_ADDRESS, I2C_SDA, I2C_SCL);
if (!result)
return;
Serial.println(F("Detected AXP2101"));
if (error == 0) {
Serial.println(F("Detected IP5306"));
this->has_ip5306 = true;
this->i2c_supported = true;
}
this->has_axp2101 = true;
Wire.beginTransmission(MAX17048_ADDR);
error = Wire.endTransmission();
#elif defined(I2C_SDA) // other i2c (shared)
if (error == 0) {
if (maxlipo.begin()) {
Serial.println(F("Detected MAX17048"));
this->has_max17048 = true;
this->i2c_supported = true;
}
}
#else
bool result = this->power.begin(Wire, AXP2101_SLAVE_ADDRESS, I2C_SDA, I2C_SCL);
Wire.begin(I2C_SDA, I2C_SCL);
if (!result)
return;
#ifdef HAS_IP5306
Wire.beginTransmission(IP5306_ADDR);
error = Wire.endTransmission();
Serial.println(F("Detected AXP2101"));
if (error == 0) {
Serial.println(F("Detected IP5306"));
this->has_ip5306 = true;
this->i2c_supported = true;
}
#endif
this->i2c_supported = true;
this->has_axp2101 = true;
#endif
#ifdef HAS_AXP192
axp192_obj.begin();
#endif
#ifdef HAS_MAX1704X
Wire.beginTransmission(MAX17048_ADDR);
error = Wire.endTransmission();
if (error == 0) {
if (maxlipo.begin()) {
Serial.println(F("Detected MAX17048"));
this->has_max17048 = true;
this->i2c_supported = true;
}
}
#endif
#endif // other i2c
this->initTime = millis();
#endif
#endif // HAS_BATTERY
}
int8_t BatteryInterface::getBatteryLevel() {
#ifdef BATTERY_ADC_PIN
if (this->has_adc_battery) {
int voltage_mv = analogReadMilliVolts(BATTERY_ADC_PIN) * 2; // voltage divider ratio 2:1
if (voltage_mv <= 3300) return 0;
if (voltage_mv >= 4150) return 100;
return (int8_t)(((voltage_mv - 3300) * 100) / 850);
}
#endif
#ifdef HAS_BATTERY
if (this->has_ip5306) {
Wire.beginTransmission(IP5306_ADDR);
Wire.write(0x78);
if (Wire.endTransmission(false) == 0 &&
Wire.requestFrom(IP5306_ADDR, 1)) {
this->i2c_supported = true;
switch (Wire.read() & 0xF0) {
case 0xE0: return 25;
case 0xC0: return 50;
case 0x80: return 75;
case 0x00: return 100;
default: return 0;
#ifdef BATTERY_ADC_PIN
if (this->has_adc_battery) {
int voltage_mv = analogReadMilliVolts(BATTERY_ADC_PIN) * 2; // voltage divider ratio 2:1
if (voltage_mv <= 3300) return 0;
if (voltage_mv >= 4150) return 100;
return (int8_t)(((voltage_mv - 3300) * 100) / 850);
}
}
this->i2c_supported = false;
return -1;
}
#endif
#ifdef HAS_IP5306
if (this->has_ip5306) {
Wire.beginTransmission(IP5306_ADDR);
Wire.write(0x78);
if (Wire.endTransmission(false) == 0 &&
Wire.requestFrom(IP5306_ADDR, 1)) {
this->i2c_supported = true;
switch (Wire.read() & 0xF0) {
case 0xE0: return 25;
case 0xC0: return 50;
case 0x80: return 75;
case 0x00: return 100;
default: return 0;
}
}
this->i2c_supported = false;
return -1;
}
#endif
if (this->has_max17048) {
float percent = this->maxlipo.cellPercent();
#ifdef HAS_MAX1704X
if (this->has_max17048) {
float percent = this->maxlipo.cellPercent();
// Sometimes we dumb
if (percent >= 100)
return 100;
else if (percent <= 0)
return 0;
else
return percent;
}
// Sometimes we dumb
if (percent >= 100)
return 100;
else if (percent <= 0)
return 0;
else
return percent;
}
#endif
#ifdef HAS_AXP2101
if (this->has_axp2101) {
return this->power.getBatteryPercent();
}
#endif
#ifdef HAS_AXP2101
if (this->has_axp2101) {
return this->power.getBatteryPercent();
}
#endif
#endif // HAS_BATTERY
return -1;
}
// #endif // HAS_BATTERY
+22 -4
View File
@@ -1,19 +1,31 @@
#pragma once
// #ifdef HAS_BATTERY
#ifndef BatteryInterface_h
#define BatteryInterface_h
#include <Arduino.h>
#include "configs.h"
#include "Adafruit_MAX1704X.h"
#ifdef HAS_MAX1704X
#include "Adafruit_MAX1704X.h"
#endif
#ifdef HAS_AXP2101
#define XPOWERS_CHIP_AXP2101
#include "XPowersLib.h"
#endif
#include <Wire.h>
#ifdef HAS_AXP192
#include "AXP192.h"
AXP192 axp192_obj;
#endif
#ifndef BATTERY_ADC_PIN // not 12c
#include <Wire.h>
#endif
#define IP5306_ADDR 0x75
#define MAX17048_ADDR 0x36
@@ -21,7 +33,10 @@
class BatteryInterface {
private:
uint32_t initTime = 0;
Adafruit_MAX17048 maxlipo;
#ifdef HAS_MAX1704X
Adafruit_MAX17048 maxlipo;
#endif
#ifdef HAS_AXP2101
XPowersPMU power;
@@ -43,4 +58,7 @@ class BatteryInterface {
int8_t getBatteryLevel();
};
#endif
#endif // ifndef BatteryInterface_h
// #endif // HAS_BATTERY
+2
View File
@@ -43,7 +43,9 @@
extern WiFiScan wifi_scan_obj;
extern SDInterface sd_obj;
// #ifdef HAS_BATTERY
extern BatteryInterface battery_obj;
// #endif
extern Settings settings_obj;
#define FLASH_BUTTON 0
+1 -1
View File
@@ -3945,7 +3945,7 @@ void WiFiScan::RunInfo() {
#endif
Serial.println(text_table4[34]);
}
#endif
#endif // HAS_BATTERY
if (this->wifi_connected)
showNetworkInfo();
+59 -36
View File
@@ -124,6 +124,11 @@
//#define FLIPPER_ZERO_HAT
#define HAS_MINI_KB
#define HAS_BATTERY
#if defined(MARAUDER_M5STICKC)
#define HAS_AXP192
#else
#define HAS_TP4057
#endif
#define HAS_BT
#define HAS_BUTTONS
//#define HAS_NEOPIXEL_LED
@@ -237,6 +242,7 @@
#define HAS_TOUCH
//#define FLIPPER_ZERO_HAT
#define HAS_BATTERY
#define HAS_IP5306
#define HAS_BT
//#define HAS_BUTTONS
#define HAS_NEOPIXEL_LED
@@ -256,6 +262,7 @@
#define HAS_TOUCH
//#define FLIPPER_ZERO_HAT
#define HAS_BATTERY
#define HAS_IP5306
#define HAS_BT
#define HAS_BT_REMOTE
#define HAS_BUTTONS
@@ -554,7 +561,7 @@
//// POWER MANAGEMENT
#ifdef HAS_PWR_MGMT
#if defined(MARAUDER_M5STICKC) || defined(MARAUDER_M5STICKCP2)
#if defined(HAS_AXP192)
#include "AXP192.h"
#endif
@@ -2640,72 +2647,88 @@
//// BATTERY STUFF
#ifdef HAS_BATTERY
#ifdef MARAUDER_V4
#if defined(MARAUDER_M5STICKC) || defined(MARAUDER_M5STICKCP2)
#define I2C_SDA 33
#define I2C_SCL 22
#endif
#ifdef MARAUDER_V6
#elif defined(MARAUDER_V4) || defined(MARAUDER_V6) || defined(MARAUDER_V6_1) || defined(MARAUDER_KIT)
#define I2C_SDA 33
#define I2C_SCL 22
#endif
#define HAS_IP5306
#ifdef MARAUDER_V6_1
#define I2C_SDA 33
#define I2C_SCL 22
#endif
#ifdef MARAUDER_M5STICKC
#define I2C_SDA 33
#define I2C_SCL 22
#endif
#ifdef MARAUDER_KIT
#define I2C_SDA 33
#define I2C_SCL 22
#endif
#ifdef MARAUDER_MINI
#elif defined(MARAUDER_MINI)
#define I2C_SDA 33
#define I2C_SCL 26
#endif
#ifdef MARAUDER_V7
#elif defined(MARAUDER_V7)
#define I2C_SDA 33
#define I2C_SCL 16
#endif
#define HAS_IP5306
#ifdef MARAUDER_V7_1
#elif defined(MARAUDER_V7_1)
#define I2C_SDA 33
#define I2C_SCL 27
#endif
#ifdef MARAUDER_CYD_MICRO
#elif defined(MARAUDER_CYD_MICRO)
#define I2C_SDA 22
#define I2C_SCL 27
#endif
#ifdef MARAUDER_CYD_2USB
#elif defined(MARAUDER_CYD_2USB)
#define I2C_SDA 22
#define I2C_SCL 27
#endif
#ifdef MARAUDER_CYD_3_5_INCH
#elif defined(MARAUDER_CYD_3_5_INCH)
#define I2C_SDA 32
#define I2C_SCL 25
#endif
#ifdef MARAUDER_CYD_GUITION
#elif defined(MARAUDER_CYD_GUITION)
#define I2C_SDA 22
#define I2C_SCL 21
#endif
#ifdef MARAUDER_V8
#elif defined(MARAUDER_V8)
#define I2C_SCL 4
#define I2C_SDA 5
#elif defined(MARAUDER_REV_FEATHER)
#define I2C_SCL 4
#define I2C_SDA 3
#define HAS_MAX1704X
#undef HAS_AXP2101
#undef HAS_IP5306
#endif
#endif
// If we know what we have, we can delete what we're not using
#ifdef BATTERY_ADC_PIN
#undef HAS_AXP2101
#undef HAS_IP5306
#undef HAS_MAX1704X
#undef HAS_AXP192
// No driver for this LiPo charger
#elif defined(HAS_TP4057)
#undef HAS_AXP2101
#undef HAS_IP5306
#undef HAS_MAX1704X
#undef HAS_AXP192
#elif defined(HAS_AXP192)
#undef HAS_AXP2101
#undef HAS_IP5306
#undef HAS_MAX1704X
#elif defined(HAS_AXP2101)
#undef HAS_IP5306
#undef HAS_MAX1704X
#else // punt
// #define HAS_AXP2101
#define HAS_IP5306
#define HAS_MAX1704X
#define HAS_AXP192
#endif
#endif // HAS_BATTERY
//// MARAUDER TITLE STUFF
#ifdef MARAUDER_V4
+1 -9
View File
@@ -1,6 +1,6 @@
/* FLASH SETTINGS
Board: LOLIN D32
Flash Frequency: 80MHz
Frequency: 80MHz
Partition Scheme: Minimal SPIFFS
https://www.online-utility.org/image/convert/to/XBM
*/
@@ -92,10 +92,6 @@ CommandLine cli_obj;
SDInterface sd_obj;
#endif
#ifdef MARAUDER_M5STICKC
AXP192 axp192_obj;
#endif
#ifdef HAS_FLIPPER_LED
flipperLED flipper_led;
#elif defined(XIAO_ESP32_S3)
@@ -252,10 +248,6 @@ void setup()
delay(100);
#endif
#ifdef defined(MARAUDER_M5STICKC) && !defined(MARAUDER_M5STICKCP2)
axp192_obj.begin();
#endif
#if defined(MARAUDER_M5STICKCP2) // Prevent StickCP2 from turning off when disconnect USB cable
pinMode(POWER_HOLD_PIN, OUTPUT);
digitalWrite(POWER_HOLD_PIN, HIGH);