#include "state_impl.h" ////////////////////////////////////////////////////////////////////////////////////////////////// // STATE LOCK ////////////////////////////////////////////////////////////////////////////////////////////////// void StateLock::setup() { // draw screen 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_measure_number(GenericState::measure_num++); } StateTx StateLock::loop(int64_t duration) { // long press -> unlock if (Dev.M5Board.BtnB.pressedFor(TIM_LONG_PRESS)) return {STATE_UNLOCK}; // timer -> power off if (duration > TIM_POWER_OFF) Dev.M5Board.Power.powerOff(); 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) { // wait until button is released if (Dev.M5Board.BtnA.isReleased()) return {STATE_TARGET, TIM_INFO_SCREEN}; return {STATE_UNLOCK}; } ////////////////////////////////////////////////////////////////////////////////////////////////// // STATE TARGET ////////////////////////////////////////////////////////////////////////////////////////////////// void StateTarget::setup() { // draw screen Dev.Drawer.draw_icon(TARGET_ICON, COL_ICON_FG, COL_ICON_BG_INACTIVE, LAY_ICON_YOFFSET); Dev.Drawer.draw_description("Zamerajte", "poziciu", LAY_DESC_YOFFSET); } StateTx StateTarget::loop(int64_t duration) { // long press -> cancel if (Dev.M5Board.BtnA.pressedFor(TIM_LONG_PRESS)) return {STATE_CANCEL}; // short press -> start 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_TARGET}; } ////////////////////////////////////////////////////////////////////////////////////////////////// // STATE START ////////////////////////////////////////////////////////////////////////////////////////////////// void StateStart::setup() { // draw screen 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); } StateTx StateStart::loop(int64_t duration) { // long press -> cancel if (Dev.M5Board.BtnA.pressedFor(TIM_LONG_PRESS)) return {STATE_CANCEL}; // short press -> run 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_START}; } ////////////////////////////////////////////////////////////////////////////////////////////////// // STATE RUN ////////////////////////////////////////////////////////////////////////////////////////////////// void StateRun::setup() { // 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); } StateTx StateRun::loop(int64_t duration) { // long press -> cancel if (Dev.M5Board.BtnA.pressedFor(TIM_LONG_PRESS)) return {STATE_CANCEL}; // if need to refresh if (duration - _last_blink_time >= TIM_RUN_BLINK) { _icon_state ^= 1; _last_blink_time = duration; if (_icon_state) { Dev.Drawer.draw_icon(REC_ICON, COL_ICON_FG, COL_ICON_BG_REC, LAY_ICON_YOFFSET); return {STATE_RUN, TIM_RUN_REFRESH}; } else { Dev.Drawer.draw_icon(REC_ICON, COL_ICON_FG, COL_ICON_BG_INACTIVE, LAY_ICON_YOFFSET); return {STATE_RUN, TIM_RUN_REFRESH}; } } // short press -> stop if (Dev.M5Board.BtnA.wasReleased()) { _last_blink_time = 0; _icon_state = false; return {STATE_STOP}; } return {STATE_RUN}; } ////////////////////////////////////////////////////////////////////////////////////////////////// // STATE STOP ////////////////////////////////////////////////////////////////////////////////////////////////// void StateStop::setup() { // draw screen 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); } StateTx StateStop::loop(int64_t duration) { 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_STOP}; } ////////////////////////////////////////////////////////////////////////////////////////////////// // STATE CANCEL ////////////////////////////////////////////////////////////////////////////////////////////////// void StateCancel::setup() { 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); } StateTx StateCancel::loop(int64_t duration) { if (duration > TIM_INFO_SCREEN && Dev.M5Board.BtnA.isReleased()) return {STATE_LOCK}; return {STATE_CANCEL}; }