|
|
@@ -11,7 +11,14 @@ void GenericState::send_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));
|
|
|
+ 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()
|
|
|
@@ -24,8 +31,14 @@ void GenericState::send_stop()
|
|
|
// STATE LOCK
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
+StateID StateLock::whoami()
|
|
|
+{
|
|
|
+ return STATE_LOCK;
|
|
|
+}
|
|
|
+
|
|
|
void StateLock::begin()
|
|
|
{
|
|
|
+ // send nbus command
|
|
|
GenericState::send_stop();
|
|
|
|
|
|
// draw screen
|
|
|
@@ -46,7 +59,7 @@ StateTx StateLock::loop(int64_t duration)
|
|
|
}
|
|
|
|
|
|
// released button -> go to target
|
|
|
- else if (Dev.M5Board.BtnA.wasReleased())
|
|
|
+ else if (Dev.M5Board.BtnA.wasReleasedAfterHold())
|
|
|
return {STATE_TARGET};
|
|
|
|
|
|
// timer -> power off
|
|
|
@@ -66,6 +79,11 @@ void StateLock::end()
|
|
|
// STATE TARGET
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
+StateID StateTarget::whoami()
|
|
|
+{
|
|
|
+ return STATE_TARGET;
|
|
|
+}
|
|
|
+
|
|
|
void StateTarget::begin()
|
|
|
{
|
|
|
// draw screen
|
|
|
@@ -89,9 +107,11 @@ StateTx StateTarget::loop(int64_t duration)
|
|
|
|
|
|
void StateTarget::end()
|
|
|
{
|
|
|
+ // send nbus command
|
|
|
GenericState::send_start();
|
|
|
GenericState::send_phase(NBUS_PHASE_TARGET);
|
|
|
|
|
|
+ // draw screen
|
|
|
Dev.Drawer.draw_icon(TARGET_ICON, COL_ICON_FG, COL_ICON_BG_ACTIVE, LAY_ICON_YOFFSET);
|
|
|
}
|
|
|
|
|
|
@@ -100,6 +120,11 @@ void StateTarget::end()
|
|
|
// STATE START
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
+StateID StateStart::whoami()
|
|
|
+{
|
|
|
+ return STATE_START;
|
|
|
+}
|
|
|
+
|
|
|
void StateStart::begin()
|
|
|
{
|
|
|
// set measuring phase
|
|
|
@@ -125,8 +150,10 @@ StateTx StateStart::loop(int64_t duration)
|
|
|
|
|
|
void StateStart::end()
|
|
|
{
|
|
|
+ // send nbus command
|
|
|
GenericState::send_phase(NBUS_PHASE_START);
|
|
|
|
|
|
+ // draw screen
|
|
|
Dev.Drawer.draw_icon(GO_ICON, COL_ICON_FG, COL_ICON_BG_ACTIVE, LAY_ICON_YOFFSET);
|
|
|
}
|
|
|
|
|
|
@@ -134,8 +161,17 @@ void StateStart::end()
|
|
|
// STATE RUN
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
+StateID StateRun::whoami()
|
|
|
+{
|
|
|
+ return STATE_RUN;
|
|
|
+}
|
|
|
+
|
|
|
void StateRun::begin()
|
|
|
{
|
|
|
+ // reset state variables
|
|
|
+ _last_blink_time = 0;
|
|
|
+ _icon_state = false;
|
|
|
+
|
|
|
// draw screen
|
|
|
Dev.Drawer.draw_icon(REC_ICON, COL_ICON_FG, COL_ICON_BG_INACTIVE, LAY_ICON_YOFFSET);
|
|
|
Dev.Drawer.draw_description("Meranie", "pohybu", LAY_DESC_YOFFSET);
|
|
|
@@ -150,6 +186,7 @@ StateTx StateRun::loop(int64_t duration)
|
|
|
// if need to refresh
|
|
|
if (duration - _last_blink_time >= TIM_RUN_BLINK)
|
|
|
{
|
|
|
+ // change blinking state
|
|
|
_icon_state ^= 1;
|
|
|
_last_blink_time = duration;
|
|
|
|
|
|
@@ -175,8 +212,7 @@ StateTx StateRun::loop(int64_t duration)
|
|
|
|
|
|
void StateRun::end()
|
|
|
{
|
|
|
- _last_blink_time = 0;
|
|
|
- _icon_state = false;
|
|
|
+ // send nbus command
|
|
|
GenericState::send_phase(NBUS_PHASE_MOVEMENT);
|
|
|
}
|
|
|
|
|
|
@@ -184,10 +220,14 @@ void StateRun::end()
|
|
|
// STATE STOP
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
-
|
|
|
+StateID StateStop::whoami()
|
|
|
+{
|
|
|
+ return STATE_STOP;
|
|
|
+}
|
|
|
|
|
|
void StateStop::begin()
|
|
|
{
|
|
|
+ // send nbus command
|
|
|
GenericState::send_phase(NBUS_PHASE_ACK);
|
|
|
|
|
|
// draw screen
|
|
|
@@ -197,6 +237,7 @@ void StateStop::begin()
|
|
|
|
|
|
StateTx StateStop::loop(int64_t duration)
|
|
|
{
|
|
|
+ // timer -> lock
|
|
|
if (duration > TIM_INFO_SCREEN)
|
|
|
return {STATE_LOCK, REFRESH_WAIT, TIM_INFO_SCREEN};
|
|
|
|
|
|
@@ -205,6 +246,7 @@ StateTx StateStop::loop(int64_t duration)
|
|
|
|
|
|
void StateStop::end()
|
|
|
{
|
|
|
+ // draw screen
|
|
|
Dev.Drawer.draw_icon(OK_ICON, COL_ICON_FG, COL_ICON_BG_ACTIVE, LAY_ICON_YOFFSET);
|
|
|
}
|
|
|
|
|
|
@@ -213,8 +255,14 @@ void StateStop::end()
|
|
|
// STATE CANCEL
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
+StateID StateCancel::whoami()
|
|
|
+{
|
|
|
+ return STATE_CANCEL;
|
|
|
+}
|
|
|
+
|
|
|
void StateCancel::begin()
|
|
|
{
|
|
|
+ // draw screen
|
|
|
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_description("Meranie", "zrusene", LAY_DESC_YOFFSET);
|
|
|
@@ -222,7 +270,12 @@ void StateCancel::begin()
|
|
|
|
|
|
StateTx StateCancel::loop(int64_t duration)
|
|
|
{
|
|
|
- if (duration > TIM_INFO_SCREEN && Dev.M5Board.BtnA.isReleased())
|
|
|
+ // timer -> delay sceen
|
|
|
+ if (duration < TIM_INFO_SCREEN)
|
|
|
+ return {STATE_CANCEL, WAIT, TIM_INFO_SCREEN};
|
|
|
+
|
|
|
+ // button released -> lock
|
|
|
+ if (Dev.M5Board.BtnA.wasReleasedAfterHold())
|
|
|
return {STATE_LOCK};
|
|
|
|
|
|
return {STATE_CANCEL};
|