feat(Power): support EXT_PWR_DETECT_MODE & EXT_PWR_DETECT_VALUE, simplify EXT_PWR_DETECT (#10140)
Assisted-by: Claude Sonnet 4.6 <noreply@anthropic.com> Signed-off-by: Andrew Yong <me@ndoo.sg>
This commit is contained in:
+21
-25
@@ -94,6 +94,20 @@ static const adc_atten_t atten = ADC_ATTENUATION;
|
|||||||
#endif
|
#endif
|
||||||
#endif // BATTERY_PIN && ARCH_ESP32
|
#endif // BATTERY_PIN && ARCH_ESP32
|
||||||
|
|
||||||
|
#ifdef EXT_PWR_DETECT
|
||||||
|
#ifndef EXT_PWR_DETECT_MODE
|
||||||
|
#define EXT_PWR_DETECT_MODE INPUT
|
||||||
|
// If using internal pull resistors, we can infer EXT_PWR_DETECT_VALUE
|
||||||
|
#elif EXT_PWR_DETECT_MODE == INPUT_PULLUP
|
||||||
|
#define EXT_PWR_DETECT_VALUE LOW
|
||||||
|
#elif EXT_PWR_DETECT_MODE == INPUT_PULLDOWN
|
||||||
|
#define EXT_PWR_DETECT_VALUE HIGH
|
||||||
|
#endif
|
||||||
|
#ifndef EXT_PWR_DETECT_VALUE
|
||||||
|
#define EXT_PWR_DETECT_VALUE HIGH
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef EXT_CHRG_DETECT
|
#ifdef EXT_CHRG_DETECT
|
||||||
#ifndef EXT_CHRG_DETECT_MODE
|
#ifndef EXT_CHRG_DETECT_MODE
|
||||||
#define EXT_CHRG_DETECT_MODE INPUT
|
#define EXT_CHRG_DETECT_MODE INPUT
|
||||||
@@ -470,28 +484,14 @@ class AnalogBatteryLevel : public HasBatteryLevel
|
|||||||
virtual bool isBatteryConnect() override { return getBatteryPercent() != -1; }
|
virtual bool isBatteryConnect() override { return getBatteryPercent() != -1; }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/// If we see a battery voltage higher than physics allows - assume charger is
|
// Detect if an external power source is connected if we don’t have a PMIC;
|
||||||
/// pumping in power On some boards we don't have the power management chip
|
// Firstly prefer EXT_PWR_DETECT GPIO if available,
|
||||||
/// (like AXPxxxx) so we use EXT_PWR_DETECT GPIO pin to detect external power
|
// secondly try an nRF52-specific routine on some variants,
|
||||||
/// source
|
// lastly provide a fallback to indicate external power when fully charged.
|
||||||
virtual bool isVbusIn() override
|
virtual bool isVbusIn() override
|
||||||
{
|
{
|
||||||
#ifdef EXT_PWR_DETECT
|
#ifdef EXT_PWR_DETECT
|
||||||
#if defined(HELTEC_CAPSULE_SENSOR_V3) || defined(HELTEC_SENSOR_HUB)
|
return digitalRead(EXT_PWR_DETECT) == EXT_PWR_DETECT_VALUE;
|
||||||
// if external powered that pin will be pulled down
|
|
||||||
if (digitalRead(EXT_PWR_DETECT) == LOW) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
// if it's not LOW - check the battery
|
|
||||||
#else
|
|
||||||
// if external powered that pin will be pulled up
|
|
||||||
if (digitalRead(EXT_PWR_DETECT) == HIGH) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
// if it's not HIGH - check the battery
|
|
||||||
#endif
|
|
||||||
// If we have an EXT_PWR_DETECT pin and it indicates no external power, believe it.
|
|
||||||
return false;
|
|
||||||
|
|
||||||
// technically speaking this should work for all(?) NRF52 boards
|
// technically speaking this should work for all(?) NRF52 boards
|
||||||
// but needs testing across multiple devices. NRF52 USB would not even work if
|
// but needs testing across multiple devices. NRF52 USB would not even work if
|
||||||
@@ -647,11 +647,7 @@ Power::Power() : OSThread("Power")
|
|||||||
bool Power::analogInit()
|
bool Power::analogInit()
|
||||||
{
|
{
|
||||||
#ifdef EXT_PWR_DETECT
|
#ifdef EXT_PWR_DETECT
|
||||||
#if defined(HELTEC_CAPSULE_SENSOR_V3) || defined(HELTEC_SENSOR_HUB)
|
pinMode(EXT_PWR_DETECT, EXT_PWR_DETECT_MODE);
|
||||||
pinMode(EXT_PWR_DETECT, INPUT_PULLUP);
|
|
||||||
#else
|
|
||||||
pinMode(EXT_PWR_DETECT, INPUT);
|
|
||||||
#endif
|
|
||||||
#endif
|
#endif
|
||||||
#ifdef EXT_CHRG_DETECT
|
#ifdef EXT_CHRG_DETECT
|
||||||
pinMode(EXT_CHRG_DETECT, EXT_CHRG_DETECT_MODE);
|
pinMode(EXT_CHRG_DETECT, EXT_CHRG_DETECT_MODE);
|
||||||
@@ -1907,7 +1903,7 @@ SerialBatteryLevel serialBatteryLevel;
|
|||||||
bool Power::serialBatteryInit()
|
bool Power::serialBatteryInit()
|
||||||
{
|
{
|
||||||
#ifdef EXT_PWR_DETECT
|
#ifdef EXT_PWR_DETECT
|
||||||
pinMode(EXT_PWR_DETECT, INPUT);
|
pinMode(EXT_PWR_DETECT, EXT_PWR_DETECT_MODE);
|
||||||
#endif
|
#endif
|
||||||
#ifdef EXT_CHRG_DETECT
|
#ifdef EXT_CHRG_DETECT
|
||||||
pinMode(EXT_CHRG_DETECT, EXT_CHRG_DETECT_MODE);
|
pinMode(EXT_CHRG_DETECT, EXT_CHRG_DETECT_MODE);
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
#define LED_POWER 33
|
#define LED_POWER 33
|
||||||
#define LED_POWER2 34
|
#define LED_POWER2 34
|
||||||
#define EXT_PWR_DETECT 35
|
#define EXT_PWR_DETECT 35
|
||||||
|
#define EXT_PWR_DETECT_MODE INPUT_PULLUP
|
||||||
|
|
||||||
#define BUTTON_PIN 18
|
#define BUTTON_PIN 18
|
||||||
#define BUTTON_ACTIVE_LOW false
|
#define BUTTON_ACTIVE_LOW false
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
#define EXT_PWR_DETECT 20
|
#define EXT_PWR_DETECT 20
|
||||||
|
#define EXT_PWR_DETECT_MODE INPUT_PULLUP
|
||||||
|
|
||||||
#define BUTTON_PIN 17
|
#define BUTTON_PIN 17
|
||||||
#define BUTTON_ACTIVE_LOW false
|
#define BUTTON_ACTIVE_LOW false
|
||||||
|
|||||||
Reference in New Issue
Block a user