extend power statemachine

This commit is contained in:
2022-01-02 18:50:22 +01:00
parent 7509858aa4
commit c340ab9d2a
8 changed files with 178 additions and 39 deletions

View File

@@ -9,6 +9,7 @@ uint64_t measure_timer = 0;
POWERSTATES powerstate = off;
Button buttonPower(PWR_BTN, 250UL, 1U, 0);
extern OtaProcess_class ota;
Battery battery(VBATTMIN, VBATTMAX, MEAS_ADC, &getvbatt);
@@ -46,7 +47,7 @@ void powerOff(void)
digitalWrite(DAC_SDMODE, LOW);
digitalWrite(PWR_HOLD, LOW);
delay(1000);
ESP.restart();
// ESP.restart();
}
bool measureBattery(void)
@@ -83,6 +84,7 @@ void handlePowerState(void)
powerstate = poweringOn;
}
powerOff();
SetLedColor(CRGB::Red);
log_w("Powered-off");
}
break;
@@ -91,17 +93,22 @@ void handlePowerState(void)
if (buttonPower.pressedFor(POWERBUTTONDELAY))
{
powerstate = poweringOn2;
SetLedColor(CRGB::White);
log_i("poweron 3/3 => Go");
}
else if (buttonPower.pressedFor(500))
else if (buttonPower.pressedFor(POWERBUTTONDELAY / 2))
{
log_i("poweron 2/3");
SetLedColor(CRGB::WhiteSmoke);
}
else if (buttonPower.pressedFor(200))
{
log_i("poweron 1/3");
SetLedColor(CRGB::GhostWhite);
}
else
if (!buttonread)
{
powerstate = off;
}
@@ -119,12 +126,21 @@ void handlePowerState(void)
// powerstate = lowBatt;
// }
}
else
{
log_i("Release for poweron, hold for %d to OTA", (POWERBUTTONOTADELAY - buttonPower.getPressedFor()));
}
if (buttonPower.pressedFor(POWERBUTTONOTADELAY))
{
powerstate = overTheAir;
}
}
break;
case powerinit:
{
// init all
log_i("powerinit");
SetLedColor(CRGB::Green);
powerstate = on;
}
break;
@@ -149,15 +165,19 @@ void handlePowerState(void)
{
powerstate = poweringOff2;
setAudioState(false);
SetLedColor(CRGB::Red, true);
log_w("poweringoff: 3/3 ==> powerOff");
}
else if (buttonPower.pressedFor(500))
{
log_w("poweringoff: 2/3");
SetLedColor(CRGB::Orange, true);
}
else if (buttonPower.pressedFor(200))
{
log_w("poweringoff: 1/3");
SetLedColor(CRGB::Brown, true);
}
else
{
@@ -170,6 +190,7 @@ void handlePowerState(void)
if (!buttonread)
{
powerstate = off;
SetLedColor(CRGB::Red, true);
}
}
break;
@@ -177,6 +198,7 @@ void handlePowerState(void)
{
log_w("timeout ==> off");
powerstate = off;
SetLedColor(CRGB::Red);
powerOff();
delay(5000);
}
@@ -189,6 +211,33 @@ void handlePowerState(void)
log_w("lowbatt");
}
}
case overTheAir:
{
if (!buttonread)
{
powerstate = overTheAir2;
otaEnable();
SetLedColor(CRGB::Blue);
powerOn();
}
log_i("ota state active, release powerbutton");
}
case overTheAir2:
{
if (getOtaState() == OTASTATES::otaBusy)
{
SetLedColor(CRGB::Blue, true);
log_i("ota state active, ota busy ==> On");
}
if (getOtaState() == OTASTATES::otaDone)
{
log_i("ota state active, ota Done ==> On");
powerstate = POWERSTATES::on;
SetLedColor(CRGB::Green, true);
}
}
break;
}
}