From d3534cda526f7b39911887f8d6601d819dcff14a Mon Sep 17 00:00:00 2001 From: Phat Nguyen Date: Sun, 1 Sep 2024 20:19:18 +0700 Subject: [PATCH] handle `ledBarTestRequested` on `OpenAir` --- examples/OneOpenAir/OneOpenAir.ino | 3 ++ src/AgStateMachine.cpp | 67 ++++++++++++++++++------------ src/AirGradient.cpp | 4 ++ src/AirGradient.h | 8 ++++ 4 files changed, 56 insertions(+), 26 deletions(-) diff --git a/examples/OneOpenAir/OneOpenAir.ino b/examples/OneOpenAir/OneOpenAir.ino index 5f9e0fe..5c80112 100644 --- a/examples/OneOpenAir/OneOpenAir.ino +++ b/examples/OneOpenAir/OneOpenAir.ino @@ -939,6 +939,9 @@ static void configUpdateHandle() { stateMachine.executeLedBarTest(); } + else if(ag->isOpenAir()) { + stateMachine.executeLedBarTest(); + } appDispHandler(); appLedHandler(); diff --git a/src/AgStateMachine.cpp b/src/AgStateMachine.cpp index b6e9610..e5566e2 100644 --- a/src/AgStateMachine.cpp +++ b/src/AgStateMachine.cpp @@ -1,5 +1,6 @@ #include "AgStateMachine.h" +#define LED_TEST_BLINK_DELAY 50 /** ms */ #define LED_FAST_BLINK_DELAY 250 /** ms */ #define LED_SLOW_BLINK_DELAY 1000 /** ms */ #define LED_SHORT_BLINK_DELAY 500 /** ms */ @@ -305,18 +306,23 @@ void StateMachine::co2Calibration(void) { void StateMachine::ledBarTest(void) { if (config.isLedBarTestRequested()) { - if (config.getCountry() == "TH") { - uint32_t tstart = millis(); - logInfo("Start run LED test for 2 min"); - while (1) { - ledBarRunTest(); - uint32_t ms = (uint32_t)(millis() - tstart); - if (ms >= (60 * 1000 * 2)) { - logInfo("LED test after 2 min finish"); - break; + if (ag->isOne()) { + if (config.getCountry() == "TH") { + uint32_t tstart = millis(); + logInfo("Start run LED test for 2 min"); + while (1) { + ledBarRunTest(); + uint32_t ms = (uint32_t)(millis() - tstart); + if (ms >= (60 * 1000 * 2)) { + logInfo("LED test after 2 min finish"); + break; + } } + } else { + ledBarRunTest(); } - } else { + } + else if(ag->isOpenAir()) { ledBarRunTest(); } } @@ -325,22 +331,31 @@ void StateMachine::ledBarTest(void) { void StateMachine::ledBarPowerUpTest(void) { ledBarRunTest(); } void StateMachine::ledBarRunTest(void) { - disp.setText("LED Test", "running", "....."); - runLedTest('r'); - ag->ledBar.show(); - delay(1000); - runLedTest('g'); - ag->ledBar.show(); - delay(1000); - runLedTest('b'); - ag->ledBar.show(); - delay(1000); - runLedTest('w'); - ag->ledBar.show(); - delay(1000); - runLedTest('n'); - ag->ledBar.show(); - delay(1000); + if (ag->isOne()) { + disp.setText("LED Test", "running", "....."); + runLedTest('r'); + ag->ledBar.show(); + delay(1000); + runLedTest('g'); + ag->ledBar.show(); + delay(1000); + runLedTest('b'); + ag->ledBar.show(); + delay(1000); + runLedTest('w'); + ag->ledBar.show(); + delay(1000); + runLedTest('n'); + ag->ledBar.show(); + delay(1000); + } else if (ag->isOpenAir()) { + for (int i = 0; i < 100; i++) { + ag->statusLed.setOn(); + delay(LED_TEST_BLINK_DELAY); + ag->statusLed.setOff(); + delay(LED_TEST_BLINK_DELAY); + } + } } void StateMachine::runLedTest(char color) { diff --git a/src/AirGradient.cpp b/src/AirGradient.cpp index 46ed874..a1b70d9 100644 --- a/src/AirGradient.cpp +++ b/src/AirGradient.cpp @@ -65,6 +65,10 @@ bool AirGradient::isOne(void) { return boardType == BoardType::ONE_INDOOR; } +bool AirGradient::isOpenAir(void) { + return boardType == BoardType::OPEN_AIR_OUTDOOR; +} + bool AirGradient::isPro4_2(void) { return boardType == BoardType::DIY_PRO_INDOOR_V4_2; } diff --git a/src/AirGradient.h b/src/AirGradient.h index e94b25e..0666d1a 100644 --- a/src/AirGradient.h +++ b/src/AirGradient.h @@ -135,6 +135,14 @@ public: */ bool isOne(void); + /** + * @brief Check that Airgradient object is OPEN_AIR + * + * @return true + * @return false + */ + bool isOpenAir(void); + /** * @brief Check that Airgradient object is DIY_PRO 4.2 indoor *