2024-01-03 05:13:44 +01:00
|
|
|
#include "configuration.h"
|
|
|
|
|
#include "power_utils.h"
|
|
|
|
|
#include "pins_config.h"
|
|
|
|
|
|
2024-01-28 02:08:18 +01:00
|
|
|
#if defined(HAS_AXP192) || defined(HAS_AXP2101)
|
2024-01-03 05:13:44 +01:00
|
|
|
#define I2C_SDA 21
|
|
|
|
|
#define I2C_SCL 22
|
|
|
|
|
#define IRQ_PIN 35
|
|
|
|
|
#endif
|
|
|
|
|
|
2024-01-28 02:08:18 +01:00
|
|
|
#ifdef HAS_AXP192
|
2024-01-03 05:13:44 +01:00
|
|
|
XPowersAXP192 PMU;
|
|
|
|
|
#endif
|
2024-01-28 02:08:18 +01:00
|
|
|
#ifdef HAS_AXP2101
|
2024-01-03 05:13:44 +01:00
|
|
|
XPowersAXP2101 PMU;
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
extern Configuration Config;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
namespace POWER_Utils {
|
|
|
|
|
|
|
|
|
|
bool BatteryIsConnected = false;
|
|
|
|
|
String batteryVoltage = "";
|
|
|
|
|
String batteryChargeDischargeCurrent = "";
|
|
|
|
|
|
|
|
|
|
void activateMeasurement() {
|
2024-01-28 02:08:18 +01:00
|
|
|
#if defined(HAS_AXP192) || defined(HAS_AXP2101)
|
2024-01-03 05:13:44 +01:00
|
|
|
PMU.disableTSPinMeasure();
|
|
|
|
|
PMU.enableBattDetection();
|
|
|
|
|
PMU.enableVbusVoltageMeasure();
|
|
|
|
|
PMU.enableBattVoltageMeasure();
|
|
|
|
|
PMU.enableSystemVoltageMeasure();
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void activateLoRa() {
|
2024-01-28 02:08:18 +01:00
|
|
|
#ifdef HAS_AXP192
|
2024-01-03 05:13:44 +01:00
|
|
|
PMU.setLDO2Voltage(3300);
|
|
|
|
|
PMU.enableLDO2();
|
|
|
|
|
#endif
|
2024-01-28 02:08:18 +01:00
|
|
|
#ifdef HAS_AXP2101
|
2024-01-03 05:13:44 +01:00
|
|
|
PMU.setALDO2Voltage(3300);
|
|
|
|
|
PMU.enableALDO2();
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void deactivateLoRa() {
|
2024-01-28 02:08:18 +01:00
|
|
|
#ifdef HAS_AXP192
|
2024-01-03 05:13:44 +01:00
|
|
|
PMU.disableLDO2();
|
|
|
|
|
#endif
|
2024-01-28 02:08:18 +01:00
|
|
|
#ifdef HAS_AXP2101
|
2024-01-03 05:13:44 +01:00
|
|
|
PMU.disableALDO2();
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool begin(TwoWire &port) {
|
2024-01-05 11:44:55 +01:00
|
|
|
#if defined (TTGO_T_LORA32_V2_1) || defined(HELTEC_V2) || defined(ESP32_DIY_LoRa) || defined(HELTEC_V3) || defined(ESP32_DIY_1W_LoRa)
|
2024-01-03 05:13:44 +01:00
|
|
|
return true;
|
|
|
|
|
#endif
|
|
|
|
|
|
2024-01-28 02:08:18 +01:00
|
|
|
#ifdef HAS_AXP192
|
2024-01-03 05:13:44 +01:00
|
|
|
bool result = PMU.begin(Wire, AXP192_SLAVE_ADDRESS, I2C_SDA, I2C_SCL);
|
|
|
|
|
if (result) {
|
|
|
|
|
PMU.disableDC2();
|
|
|
|
|
PMU.disableLDO2();
|
|
|
|
|
PMU.disableLDO3();
|
|
|
|
|
PMU.setDC1Voltage(3300);
|
|
|
|
|
PMU.enableDC1();
|
|
|
|
|
PMU.setProtectedChannel(XPOWERS_DCDC3);
|
|
|
|
|
PMU.disableIRQ(XPOWERS_AXP192_ALL_IRQ);
|
|
|
|
|
}
|
|
|
|
|
return result;
|
|
|
|
|
#endif
|
|
|
|
|
|
2024-01-28 02:08:18 +01:00
|
|
|
#ifdef HAS_AXP2101
|
2024-01-03 05:13:44 +01:00
|
|
|
bool result = PMU.begin(Wire, AXP2101_SLAVE_ADDRESS, I2C_SDA, I2C_SCL);
|
|
|
|
|
if (result) {
|
|
|
|
|
PMU.disableDC2();
|
|
|
|
|
PMU.disableDC3();
|
|
|
|
|
PMU.disableDC4();
|
|
|
|
|
PMU.disableDC5();
|
|
|
|
|
PMU.disableALDO1();
|
|
|
|
|
PMU.disableALDO4();
|
|
|
|
|
PMU.disableBLDO1();
|
|
|
|
|
PMU.disableBLDO2();
|
|
|
|
|
PMU.disableDLDO1();
|
|
|
|
|
PMU.disableDLDO2();
|
|
|
|
|
PMU.setDC1Voltage(3300);
|
|
|
|
|
PMU.enableDC1();
|
2024-01-05 11:44:55 +01:00
|
|
|
PMU.setButtonBatteryChargeVoltage(3300);
|
|
|
|
|
PMU.enableButtonBatteryCharge();
|
2024-01-03 05:13:44 +01:00
|
|
|
PMU.disableIRQ(XPOWERS_AXP2101_ALL_IRQ);
|
|
|
|
|
}
|
|
|
|
|
return result;
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void setup() {
|
|
|
|
|
Wire.end();
|
2024-01-28 02:08:18 +01:00
|
|
|
#ifdef HAS_AXP192
|
2024-01-03 05:13:44 +01:00
|
|
|
Wire.begin(SDA, SCL);
|
|
|
|
|
if (begin(Wire)) {
|
|
|
|
|
Serial.println("AXP192 init done!");
|
|
|
|
|
} else {
|
|
|
|
|
Serial.println("AXP192 init failed!");
|
|
|
|
|
}
|
|
|
|
|
activateLoRa();
|
|
|
|
|
activateMeasurement();
|
|
|
|
|
PMU.setChargerTerminationCurr(XPOWERS_AXP192_CHG_ITERM_LESS_10_PERCENT);
|
|
|
|
|
PMU.setChargeTargetVoltage(XPOWERS_AXP192_CHG_VOL_4V2);
|
|
|
|
|
PMU.setChargerConstantCurr(XPOWERS_AXP192_CHG_CUR_780MA);
|
|
|
|
|
PMU.setSysPowerDownVoltage(2600);
|
|
|
|
|
#endif
|
|
|
|
|
|
2024-01-28 02:08:18 +01:00
|
|
|
#ifdef HAS_AXP2101
|
2024-01-03 05:13:44 +01:00
|
|
|
Wire.begin(SDA, SCL);
|
|
|
|
|
if (begin(Wire)) {
|
|
|
|
|
Serial.println("AXP2101 init done!");
|
|
|
|
|
} else {
|
|
|
|
|
Serial.println("AXP2101 init failed!");
|
|
|
|
|
}
|
|
|
|
|
activateLoRa();
|
|
|
|
|
activateMeasurement();
|
|
|
|
|
PMU.setPrechargeCurr(XPOWERS_AXP2101_PRECHARGE_200MA);
|
|
|
|
|
PMU.setChargerTerminationCurr(XPOWERS_AXP2101_CHG_ITERM_25MA);
|
|
|
|
|
PMU.setChargeTargetVoltage(XPOWERS_AXP2101_CHG_VOL_4V2);
|
|
|
|
|
PMU.setChargerConstantCurr(XPOWERS_AXP2101_CHG_CUR_800MA);
|
|
|
|
|
PMU.setSysPowerDownVoltage(2600);
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*void lowerCpuFrequency() {
|
2024-01-05 11:44:55 +01:00
|
|
|
#if defined(TTGO_T_Beam_V1_0) || defined(TTGO_T_Beam_V1_0_SX1268) || defined(TTGO_T_Beam_V1_2) || defined(ESP32_DIY_LoRa_GPS) || defined(TTGO_T_LORA32_V2_1_GPS) || defined(TTGO_T_LORA32_V2_1_TNC) || defined(ESP32_DIY_1W_LoRa_GPS) || defined(TTGO_T_Beam_V1_2_SX1262)
|
2024-01-03 05:13:44 +01:00
|
|
|
if (setCpuFrequencyMhz(80)) {
|
|
|
|
|
logger.log(logging::LoggerLevel::LOGGER_LEVEL_INFO, "Main", "CPU frequency set to 80MHz");
|
|
|
|
|
} else {
|
|
|
|
|
logger.log(logging::LoggerLevel::LOGGER_LEVEL_WARN, "Main", "CPU frequency unchanged");
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
}*/
|
|
|
|
|
|
|
|
|
|
}
|