|
@@ -1,23 +1,53 @@
|
|
|
#include "state_impl.h"
|
|
#include "state_impl.h"
|
|
|
|
|
|
|
|
|
|
+//////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
+// GENERIC STATE
|
|
|
|
|
+//////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
+
|
|
|
|
|
+void GenericState::send_start()
|
|
|
|
|
+{
|
|
|
|
|
+ GenericState::_nbus_comm.cmd_set_start();
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+void GenericState::send_phase(int8_t phase)
|
|
|
|
|
+{
|
|
|
|
|
+ GenericState::_nbus_comm.cmd_set_data(PhaseCmd{NBUS_MEAS_ID, (uint8_t)GenericState::_measure_num, (uint8_t)phase}.data, sizeof(PhaseCmd));
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+void GenericState::send_stop()
|
|
|
|
|
+{
|
|
|
|
|
+ GenericState::_nbus_comm.cmd_set_stop();
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
// STATE LOCK
|
|
// STATE LOCK
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
-void StateLock::setup()
|
|
|
|
|
|
|
+void StateLock::begin()
|
|
|
{
|
|
{
|
|
|
|
|
+ GenericState::send_stop();
|
|
|
|
|
+
|
|
|
// draw screen
|
|
// draw screen
|
|
|
Dev.Drawer.draw_icon(LOCK_ICON, COL_ICON_FG, COL_ICON_BG_INACTIVE, LAY_ICON_YOFFSET);
|
|
Dev.Drawer.draw_icon(LOCK_ICON, COL_ICON_FG, COL_ICON_BG_INACTIVE, LAY_ICON_YOFFSET);
|
|
|
Dev.Drawer.draw_description("Odomknite", "podrzanim", LAY_DESC_YOFFSET);
|
|
Dev.Drawer.draw_description("Odomknite", "podrzanim", LAY_DESC_YOFFSET);
|
|
|
- Dev.Drawer.draw_measure_number(GenericState::measure_num++);
|
|
|
|
|
|
|
+ Dev.Drawer.draw_measure_number(GenericState::_measure_num++);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
StateTx StateLock::loop(int64_t duration)
|
|
StateTx StateLock::loop(int64_t duration)
|
|
|
{
|
|
{
|
|
|
- // long press -> unlock
|
|
|
|
|
- if (Dev.M5Board.BtnB.pressedFor(TIM_LONG_PRESS))
|
|
|
|
|
- return {STATE_UNLOCK};
|
|
|
|
|
|
|
+ // long press -> enter unlock mode
|
|
|
|
|
+ if (Dev.M5Board.BtnA.pressedFor(TIM_LONG_PRESS))
|
|
|
|
|
+ {
|
|
|
|
|
+ // draw unlock screen
|
|
|
|
|
+ Dev.Drawer.draw_icon(UNLOCK_ICON, COL_ICON_FG, COL_ICON_BG_ACTIVE, LAY_ICON_YOFFSET);
|
|
|
|
|
+ Dev.Drawer.draw_description("Ovladac", "odomknuty", LAY_DESC_YOFFSET);
|
|
|
|
|
+ return {STATE_LOCK, REFRESH_WAIT, TIM_INFO_SCREEN};
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // released button -> go to target
|
|
|
|
|
+ else if (Dev.M5Board.BtnA.wasReleased())
|
|
|
|
|
+ return {STATE_TARGET};
|
|
|
|
|
|
|
|
// timer -> power off
|
|
// timer -> power off
|
|
|
if (duration > TIM_POWER_OFF)
|
|
if (duration > TIM_POWER_OFF)
|
|
@@ -26,25 +56,9 @@ StateTx StateLock::loop(int64_t duration)
|
|
|
return {STATE_LOCK};
|
|
return {STATE_LOCK};
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-
|
|
|
|
|
-//////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
-// STATE UNLOCK
|
|
|
|
|
-//////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
-
|
|
|
|
|
-void StateUnlock::setup()
|
|
|
|
|
-{
|
|
|
|
|
- // draw screen
|
|
|
|
|
- Dev.Drawer.draw_icon(UNLOCK_ICON, COL_ICON_FG, COL_ICON_BG_ACTIVE, LAY_ICON_YOFFSET);
|
|
|
|
|
- Dev.Drawer.draw_description("Odomknute", "", LAY_DESC_YOFFSET);
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-StateTx StateUnlock::loop(int64_t duration)
|
|
|
|
|
|
|
+void StateLock::end()
|
|
|
{
|
|
{
|
|
|
- // wait until button is released
|
|
|
|
|
- if (Dev.M5Board.BtnA.isReleased())
|
|
|
|
|
- return {STATE_TARGET, TIM_INFO_SCREEN};
|
|
|
|
|
-
|
|
|
|
|
- return {STATE_UNLOCK};
|
|
|
|
|
|
|
+ return;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@@ -52,7 +66,7 @@ StateTx StateUnlock::loop(int64_t duration)
|
|
|
// STATE TARGET
|
|
// STATE TARGET
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
-void StateTarget::setup()
|
|
|
|
|
|
|
+void StateTarget::begin()
|
|
|
{
|
|
{
|
|
|
// draw screen
|
|
// draw screen
|
|
|
Dev.Drawer.draw_icon(TARGET_ICON, COL_ICON_FG, COL_ICON_BG_INACTIVE, LAY_ICON_YOFFSET);
|
|
Dev.Drawer.draw_icon(TARGET_ICON, COL_ICON_FG, COL_ICON_BG_INACTIVE, LAY_ICON_YOFFSET);
|
|
@@ -63,26 +77,34 @@ StateTx StateTarget::loop(int64_t duration)
|
|
|
{
|
|
{
|
|
|
// long press -> cancel
|
|
// long press -> cancel
|
|
|
if (Dev.M5Board.BtnA.pressedFor(TIM_LONG_PRESS))
|
|
if (Dev.M5Board.BtnA.pressedFor(TIM_LONG_PRESS))
|
|
|
- return {STATE_CANCEL};
|
|
|
|
|
|
|
+ return {STATE_CANCEL, ERROR};
|
|
|
|
|
|
|
|
|
|
|
|
|
// short press -> start
|
|
// short press -> start
|
|
|
if (Dev.M5Board.BtnA.wasReleased())
|
|
if (Dev.M5Board.BtnA.wasReleased())
|
|
|
- {
|
|
|
|
|
- Dev.Drawer.draw_icon(TARGET_ICON, COL_ICON_FG, COL_ICON_BG_ACTIVE, LAY_ICON_YOFFSET);
|
|
|
|
|
- return {STATE_START, TIM_INFO_SCREEN};
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ return {STATE_START, REFRESH_WAIT, TIM_INFO_SCREEN};
|
|
|
|
|
|
|
|
return {STATE_TARGET};
|
|
return {STATE_TARGET};
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+void StateTarget::end()
|
|
|
|
|
+{
|
|
|
|
|
+ GenericState::send_start();
|
|
|
|
|
+ GenericState::send_phase(NBUS_PHASE_TARGET);
|
|
|
|
|
+
|
|
|
|
|
+ Dev.Drawer.draw_icon(TARGET_ICON, COL_ICON_FG, COL_ICON_BG_ACTIVE, LAY_ICON_YOFFSET);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
// STATE START
|
|
// STATE START
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
-void StateStart::setup()
|
|
|
|
|
|
|
+void StateStart::begin()
|
|
|
{
|
|
{
|
|
|
|
|
+ // set measuring phase
|
|
|
|
|
+ GenericState::send_phase(NBUS_PHASE_INTERLUDE);
|
|
|
|
|
+
|
|
|
// draw screen
|
|
// draw screen
|
|
|
Dev.Drawer.draw_icon(GO_ICON, COL_ICON_FG, COL_ICON_BG_INACTIVE, LAY_ICON_YOFFSET);
|
|
Dev.Drawer.draw_icon(GO_ICON, COL_ICON_FG, COL_ICON_BG_INACTIVE, LAY_ICON_YOFFSET);
|
|
|
Dev.Drawer.draw_description("Spustite", "meranie", LAY_DESC_YOFFSET);
|
|
Dev.Drawer.draw_description("Spustite", "meranie", LAY_DESC_YOFFSET);
|
|
@@ -92,23 +114,27 @@ StateTx StateStart::loop(int64_t duration)
|
|
|
{
|
|
{
|
|
|
// long press -> cancel
|
|
// long press -> cancel
|
|
|
if (Dev.M5Board.BtnA.pressedFor(TIM_LONG_PRESS))
|
|
if (Dev.M5Board.BtnA.pressedFor(TIM_LONG_PRESS))
|
|
|
- return {STATE_CANCEL};
|
|
|
|
|
|
|
+ return {STATE_CANCEL, ERROR};
|
|
|
|
|
|
|
|
// short press -> run
|
|
// short press -> run
|
|
|
if (Dev.M5Board.BtnA.wasReleased())
|
|
if (Dev.M5Board.BtnA.wasReleased())
|
|
|
- {
|
|
|
|
|
- Dev.Drawer.draw_icon(GO_ICON, COL_ICON_FG, COL_ICON_BG_ACTIVE, LAY_ICON_YOFFSET);
|
|
|
|
|
- return {STATE_RUN, TIM_INFO_SCREEN};
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
|
|
+ return {STATE_RUN, REFRESH_WAIT, TIM_INFO_SCREEN};
|
|
|
|
|
+
|
|
|
return {STATE_START};
|
|
return {STATE_START};
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+void StateStart::end()
|
|
|
|
|
+{
|
|
|
|
|
+ GenericState::send_phase(NBUS_PHASE_START);
|
|
|
|
|
+
|
|
|
|
|
+ Dev.Drawer.draw_icon(GO_ICON, COL_ICON_FG, COL_ICON_BG_ACTIVE, LAY_ICON_YOFFSET);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
// STATE RUN
|
|
// STATE RUN
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
-void StateRun::setup()
|
|
|
|
|
|
|
+void StateRun::begin()
|
|
|
{
|
|
{
|
|
|
// draw screen
|
|
// draw screen
|
|
|
Dev.Drawer.draw_icon(REC_ICON, COL_ICON_FG, COL_ICON_BG_INACTIVE, LAY_ICON_YOFFSET);
|
|
Dev.Drawer.draw_icon(REC_ICON, COL_ICON_FG, COL_ICON_BG_INACTIVE, LAY_ICON_YOFFSET);
|
|
@@ -119,7 +145,7 @@ StateTx StateRun::loop(int64_t duration)
|
|
|
{
|
|
{
|
|
|
// long press -> cancel
|
|
// long press -> cancel
|
|
|
if (Dev.M5Board.BtnA.pressedFor(TIM_LONG_PRESS))
|
|
if (Dev.M5Board.BtnA.pressedFor(TIM_LONG_PRESS))
|
|
|
- return {STATE_CANCEL};
|
|
|
|
|
|
|
+ return {STATE_CANCEL, ERROR};
|
|
|
|
|
|
|
|
// if need to refresh
|
|
// if need to refresh
|
|
|
if (duration - _last_blink_time >= TIM_RUN_BLINK)
|
|
if (duration - _last_blink_time >= TIM_RUN_BLINK)
|
|
@@ -130,32 +156,40 @@ StateTx StateRun::loop(int64_t duration)
|
|
|
if (_icon_state)
|
|
if (_icon_state)
|
|
|
{
|
|
{
|
|
|
Dev.Drawer.draw_icon(REC_ICON, COL_ICON_FG, COL_ICON_BG_REC, LAY_ICON_YOFFSET);
|
|
Dev.Drawer.draw_icon(REC_ICON, COL_ICON_FG, COL_ICON_BG_REC, LAY_ICON_YOFFSET);
|
|
|
- return {STATE_RUN, TIM_RUN_REFRESH};
|
|
|
|
|
|
|
+ return {STATE_RUN, REFRESH};
|
|
|
}
|
|
}
|
|
|
else
|
|
else
|
|
|
{
|
|
{
|
|
|
|
|
+
|
|
|
Dev.Drawer.draw_icon(REC_ICON, COL_ICON_FG, COL_ICON_BG_INACTIVE, LAY_ICON_YOFFSET);
|
|
Dev.Drawer.draw_icon(REC_ICON, COL_ICON_FG, COL_ICON_BG_INACTIVE, LAY_ICON_YOFFSET);
|
|
|
- return {STATE_RUN, TIM_RUN_REFRESH};
|
|
|
|
|
|
|
+ return {STATE_RUN, REFRESH};
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// short press -> stop
|
|
// short press -> stop
|
|
|
if (Dev.M5Board.BtnA.wasReleased())
|
|
if (Dev.M5Board.BtnA.wasReleased())
|
|
|
- {
|
|
|
|
|
- _last_blink_time = 0;
|
|
|
|
|
- _icon_state = false;
|
|
|
|
|
- return {STATE_STOP};
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ return {STATE_STOP, REFRESH};
|
|
|
|
|
|
|
|
return {STATE_RUN};
|
|
return {STATE_RUN};
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+void StateRun::end()
|
|
|
|
|
+{
|
|
|
|
|
+ _last_blink_time = 0;
|
|
|
|
|
+ _icon_state = false;
|
|
|
|
|
+ GenericState::send_phase(NBUS_PHASE_MOVEMENT);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
// STATE STOP
|
|
// STATE STOP
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
-void StateStop::setup()
|
|
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+void StateStop::begin()
|
|
|
{
|
|
{
|
|
|
|
|
+ GenericState::send_phase(NBUS_PHASE_ACK);
|
|
|
|
|
+
|
|
|
// draw screen
|
|
// draw screen
|
|
|
Dev.Drawer.draw_icon(OK_ICON, COL_ICON_FG, COL_ICON_BG_INACTIVE, LAY_ICON_YOFFSET);
|
|
Dev.Drawer.draw_icon(OK_ICON, COL_ICON_FG, COL_ICON_BG_INACTIVE, LAY_ICON_YOFFSET);
|
|
|
Dev.Drawer.draw_description("Meranie", "dokoncene", LAY_DESC_YOFFSET);
|
|
Dev.Drawer.draw_description("Meranie", "dokoncene", LAY_DESC_YOFFSET);
|
|
@@ -164,22 +198,24 @@ void StateStop::setup()
|
|
|
StateTx StateStop::loop(int64_t duration)
|
|
StateTx StateStop::loop(int64_t duration)
|
|
|
{
|
|
{
|
|
|
if (duration > TIM_INFO_SCREEN)
|
|
if (duration > TIM_INFO_SCREEN)
|
|
|
- {
|
|
|
|
|
- Dev.Drawer.draw_icon(OK_ICON, COL_ICON_FG, COL_ICON_BG_ACTIVE, LAY_ICON_YOFFSET);
|
|
|
|
|
- return {STATE_LOCK, TIM_INFO_SCREEN};
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ return {STATE_LOCK, REFRESH_WAIT, TIM_INFO_SCREEN};
|
|
|
|
|
|
|
|
return {STATE_STOP};
|
|
return {STATE_STOP};
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+void StateStop::end()
|
|
|
|
|
+{
|
|
|
|
|
+ Dev.Drawer.draw_icon(OK_ICON, COL_ICON_FG, COL_ICON_BG_ACTIVE, LAY_ICON_YOFFSET);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
// STATE CANCEL
|
|
// STATE CANCEL
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
-void StateCancel::setup()
|
|
|
|
|
|
|
+void StateCancel::begin()
|
|
|
{
|
|
{
|
|
|
- Dev.Drawer.draw_measure_number(--GenericState::measure_num);
|
|
|
|
|
|
|
+ Dev.Drawer.draw_measure_number(--GenericState::_measure_num);
|
|
|
Dev.Drawer.draw_icon(CANCEL_ICON, COL_ICON_FG, COL_ICON_BG_CANCEL, LAY_ICON_YOFFSET);
|
|
Dev.Drawer.draw_icon(CANCEL_ICON, COL_ICON_FG, COL_ICON_BG_CANCEL, LAY_ICON_YOFFSET);
|
|
|
Dev.Drawer.draw_description("Meranie", "zrusene", LAY_DESC_YOFFSET);
|
|
Dev.Drawer.draw_description("Meranie", "zrusene", LAY_DESC_YOFFSET);
|
|
|
}
|
|
}
|
|
@@ -190,4 +226,9 @@ StateTx StateCancel::loop(int64_t duration)
|
|
|
return {STATE_LOCK};
|
|
return {STATE_LOCK};
|
|
|
|
|
|
|
|
return {STATE_CANCEL};
|
|
return {STATE_CANCEL};
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+void StateCancel::end()
|
|
|
|
|
+{
|
|
|
|
|
+ return;
|
|
|
}
|
|
}
|