From 0e062197c7f9e712ee2bf6a0e0b154bd67f569ab Mon Sep 17 00:00:00 2001 From: hg Date: Tue, 16 Feb 2016 21:19:45 +0100 Subject: [PATCH] start sequence added --- src/hmi.cpp | 69 ++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 47 insertions(+), 22 deletions(-) diff --git a/src/hmi.cpp b/src/hmi.cpp index 6b72635..111fbd0 100644 --- a/src/hmi.cpp +++ b/src/hmi.cpp @@ -109,45 +109,49 @@ private: class Led { public: - enum e_flashType { FLASH_SHORT, FLASH_LONG }; + enum e_flashType { FLASH_SHORT, FLASH_LONG, FLASH_EXTRA_LONG }; Led() : m_state(STATE_IDLE), m_timeout(0) { } void start(e_flashType ft) { m_state = STATE_START; - if (FLASH_LONG == ft) { + if (FLASH_EXTRA_LONG == ft) { + m_timeout = LED_WAIT_TIME_EXTRA_LONG; + } else if (FLASH_LONG == ft) { m_timeout = LED_WAIT_TIME_LONG; } else { m_timeout = LED_WAIT_TIME_SHORT; } } virtual void set(bool v) {}; + bool isIdle() { return m_state == STATE_IDLE; }; void exec() { switch (m_state) { - case STATE_IDLE: - break; - case STATE_START: - set(true); - m_startTime = getMillis(); - m_state = STATE_ON; - break; - case STATE_ON: - if (getMillis() > m_timeout + m_startTime) { - m_state = STATE_OFF; - } - m_timeout--; - break; - case STATE_OFF: - set(false); - m_state = STATE_IDLE; - break; - default: - m_state = STATE_IDLE; - break; + case STATE_IDLE: + break; + case STATE_START: + set(true); + m_startTime = getMillis(); + m_state = STATE_ON; + break; + case STATE_ON: + if (getMillis() > m_timeout + m_startTime) { + m_state = STATE_OFF; + } + m_timeout--; + break; + case STATE_OFF: + set(false); + m_state = STATE_IDLE; + break; + default: + m_state = STATE_IDLE; + break; } } private: static const uint32_t LED_WAIT_TIME_SHORT = 500; static const uint32_t LED_WAIT_TIME_LONG = 5000; + static const uint32_t LED_WAIT_TIME_EXTRA_LONG = 50000; enum e_state { STATE_IDLE, STATE_START, STATE_ON, STATE_OFF }; e_state m_state; uint32_t m_timeout; @@ -202,6 +206,27 @@ void hmiInit() { } void hmiExec() { + static bool starting = true; + if (starting) { + ledGreen.start(Led::FLASH_EXTRA_LONG); + while (! ledGreen.isIdle()) { + ledGreen.exec(); + } + ledRed.start(Led::FLASH_EXTRA_LONG); + while (! ledRed.isIdle()) { + ledRed.exec(); + } + ledGreen.start(Led::FLASH_EXTRA_LONG); + while (! ledGreen.isIdle()) { + ledGreen.exec(); + } + ledRed.start(Led::FLASH_EXTRA_LONG); + while (! ledRed.isIdle()) { + ledRed.exec(); + } + starting = false; + } + SwitchPort::e_switchResult switchResult = intensitySwitch.get(); if (switchResult == SwitchPort::SWITCH_SHORT) { if (engineIncPwmValue()) {