diff --git a/lib/HwTools/include/HwTools.h b/lib/HwTools/include/HwTools.h index 653115f4..ab297659 100644 --- a/lib/HwTools/include/HwTools.h +++ b/lib/HwTools/include/HwTools.h @@ -55,7 +55,7 @@ public: bool ledOn(uint8_t color); bool ledOff(uint8_t color); bool ledBlink(uint8_t color, uint8_t blink); - void setBootSuccessful(); + void setBootSuccessful(bool value); HwTools() {}; private: diff --git a/lib/HwTools/src/HwTools.cpp b/lib/HwTools/src/HwTools.cpp index 556c9e44..63b3e081 100644 --- a/lib/HwTools/src/HwTools.cpp +++ b/lib/HwTools/src/HwTools.cpp @@ -237,19 +237,7 @@ void HwTools::setup(GpioConfig* config) { } if(config->ledDisablePin > 0 && config->ledDisablePin < 40) { pinMode(config->ledDisablePin, OUTPUT_OPEN_DRAIN); - switch(config->ledBehaviour) { - case LED_BEHAVIOUR_ERROR_ONLY: - case LED_BEHAVIOUR_OFF: - digitalWrite(config->ledDisablePin, LOW); - break; - case LED_BEHAVIOUR_BOOT: - if(bootSuccessful) { - digitalWrite(config->ledDisablePin, LOW); - } - break; - default: - digitalWrite(config->ledDisablePin, HIGH); - } + setBootSuccessful(false); } } @@ -538,11 +526,25 @@ int HwTools::getWifiRssi() { return isnan(rssi) ? -100.0 : rssi; } -void HwTools::setBootSuccessful() { - if(bootSuccessful) return; - bootSuccessful = true; - if(config->ledBehaviour != LED_BEHAVIOUR_DEFAULT) { - digitalWrite(config->ledDisablePin, LOW); +void HwTools::setBootSuccessful(bool value) { + if(bootSuccessful && value) return; + bootSuccessful = value; + if(config->ledDisablePin > 0 && config->ledDisablePin < 40) { + switch(config->ledBehaviour) { + case LED_BEHAVIOUR_ERROR_ONLY: + case LED_BEHAVIOUR_OFF: + digitalWrite(config->ledDisablePin, LOW); + break; + case LED_BEHAVIOUR_BOOT: + if(bootSuccessful) { + digitalWrite(config->ledDisablePin, LOW); + } else { + digitalWrite(config->ledDisablePin, HIGH); + } + break; + default: + digitalWrite(config->ledDisablePin, HIGH); + } } } diff --git a/src/AmsToMqttBridge.cpp b/src/AmsToMqttBridge.cpp index 665c1763..539f139d 100644 --- a/src/AmsToMqttBridge.cpp +++ b/src/AmsToMqttBridge.cpp @@ -716,12 +716,6 @@ void loop() { if(dnsServer != NULL) { dnsServer->processNextRequest(); } - // Continously flash the LED when AP mode - if (now / 50 % 64 == 0) { - if(!hw.ledBlink(LED_YELLOW, 1)) { - hw.ledBlink(LED_INTERNAL, 1); - } - } ws.loop(); } @@ -811,7 +805,7 @@ void loop() { } handleTemperature(now); handleSystem(now); - hw.setBootSuccessful(); + hw.setBootSuccessful(true); } else { end = millis(); if(end - start > 1000) { @@ -1092,6 +1086,7 @@ void errorBlink() { if(lastError == 3) lastError = 0; lastErrorBlink = millis64(); + if(setupMode) return; while(lastError < 3) { switch(lastError++) { case 0: @@ -1207,6 +1202,11 @@ void toggleSetupMode() { Debug.begin(F("192.168.4.1"), 23, RemoteDebug::VERBOSE); #endif setupMode = true; + + hw.setBootSuccessful(false); + if(gpioConfig.ledDisablePin != 0xFF) { + digitalWrite(gpioConfig.ledDisablePin, LOW); + } } else { if(Debug.isActive(RemoteDebug::INFO)) debugI_P(PSTR("Exiting setup mode")); if(dnsServer != NULL) { @@ -1215,10 +1215,11 @@ void toggleSetupMode() { } connectToNetwork(); setupMode = false; - } - delay(500); - if(!hw.ledOff(LED_YELLOW)) { - hw.ledOff(LED_INTERNAL); + delay(500); + if(!hw.ledOff(LED_YELLOW)) { + hw.ledOff(LED_INTERNAL); + } + hw.setBootSuccessful(true); } } @@ -1258,7 +1259,7 @@ bool readHanPort() { } void handleDataSuccess(AmsData* data) { - if(!hw.ledBlink(LED_GREEN, 1)) + if(!setupMode && !hw.ledBlink(LED_GREEN, 1)) hw.ledBlink(LED_INTERNAL, 1); if(mqttHandler != NULL) {