state_impl.cpp 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. #include "state_impl.h"
  2. //////////////////////////////////////////////////////////////////////////////////////////////////
  3. // STATE LOCK
  4. //////////////////////////////////////////////////////////////////////////////////////////////////
  5. void StateLock::setup()
  6. {
  7. // draw screen
  8. Dev.Drawer.draw_icon(LOCK_ICON, COL_ICON_FG, COL_ICON_BG_INACTIVE, LAY_ICON_YOFFSET);
  9. Dev.Drawer.draw_description("Odomknite", "podrzanim", LAY_DESC_YOFFSET);
  10. Dev.Drawer.draw_measure_number(GenericState::measure_num++);
  11. }
  12. StateTx StateLock::loop(int64_t duration)
  13. {
  14. // long press -> unlock
  15. if (Dev.M5Board.BtnB.pressedFor(TIM_LONG_PRESS))
  16. return {STATE_UNLOCK};
  17. // timer -> power off
  18. if (duration > TIM_POWER_OFF)
  19. Dev.M5Board.Power.powerOff();
  20. return {STATE_LOCK};
  21. }
  22. //////////////////////////////////////////////////////////////////////////////////////////////////
  23. // STATE UNLOCK
  24. //////////////////////////////////////////////////////////////////////////////////////////////////
  25. void StateUnlock::setup()
  26. {
  27. // draw screen
  28. Dev.Drawer.draw_icon(UNLOCK_ICON, COL_ICON_FG, COL_ICON_BG_ACTIVE, LAY_ICON_YOFFSET);
  29. Dev.Drawer.draw_description("Odomknute", "", LAY_DESC_YOFFSET);
  30. }
  31. StateTx StateUnlock::loop(int64_t duration)
  32. {
  33. // wait until button is released
  34. if (Dev.M5Board.BtnA.isReleased())
  35. return {STATE_TARGET, TIM_INFO_SCREEN};
  36. return {STATE_UNLOCK};
  37. }
  38. //////////////////////////////////////////////////////////////////////////////////////////////////
  39. // STATE TARGET
  40. //////////////////////////////////////////////////////////////////////////////////////////////////
  41. void StateTarget::setup()
  42. {
  43. // draw screen
  44. Dev.Drawer.draw_icon(TARGET_ICON, COL_ICON_FG, COL_ICON_BG_INACTIVE, LAY_ICON_YOFFSET);
  45. Dev.Drawer.draw_description("Zamerajte", "poziciu", LAY_DESC_YOFFSET);
  46. }
  47. StateTx StateTarget::loop(int64_t duration)
  48. {
  49. // long press -> cancel
  50. if (Dev.M5Board.BtnA.pressedFor(TIM_LONG_PRESS))
  51. return {STATE_CANCEL};
  52. // short press -> start
  53. if (Dev.M5Board.BtnA.wasReleased())
  54. {
  55. Dev.Drawer.draw_icon(TARGET_ICON, COL_ICON_FG, COL_ICON_BG_ACTIVE, LAY_ICON_YOFFSET);
  56. return {STATE_START, TIM_INFO_SCREEN};
  57. }
  58. return {STATE_TARGET};
  59. }
  60. //////////////////////////////////////////////////////////////////////////////////////////////////
  61. // STATE START
  62. //////////////////////////////////////////////////////////////////////////////////////////////////
  63. void StateStart::setup()
  64. {
  65. // draw screen
  66. Dev.Drawer.draw_icon(GO_ICON, COL_ICON_FG, COL_ICON_BG_INACTIVE, LAY_ICON_YOFFSET);
  67. Dev.Drawer.draw_description("Spustite", "meranie", LAY_DESC_YOFFSET);
  68. }
  69. StateTx StateStart::loop(int64_t duration)
  70. {
  71. // long press -> cancel
  72. if (Dev.M5Board.BtnA.pressedFor(TIM_LONG_PRESS))
  73. return {STATE_CANCEL};
  74. // short press -> run
  75. if (Dev.M5Board.BtnA.wasReleased())
  76. {
  77. Dev.Drawer.draw_icon(GO_ICON, COL_ICON_FG, COL_ICON_BG_ACTIVE, LAY_ICON_YOFFSET);
  78. return {STATE_RUN, TIM_INFO_SCREEN};
  79. }
  80. return {STATE_START};
  81. }
  82. //////////////////////////////////////////////////////////////////////////////////////////////////
  83. // STATE RUN
  84. //////////////////////////////////////////////////////////////////////////////////////////////////
  85. void StateRun::setup()
  86. {
  87. // draw screen
  88. Dev.Drawer.draw_icon(REC_ICON, COL_ICON_FG, COL_ICON_BG_INACTIVE, LAY_ICON_YOFFSET);
  89. Dev.Drawer.draw_description("Meranie", "pohybu", LAY_DESC_YOFFSET);
  90. }
  91. StateTx StateRun::loop(int64_t duration)
  92. {
  93. // long press -> cancel
  94. if (Dev.M5Board.BtnA.pressedFor(TIM_LONG_PRESS))
  95. return {STATE_CANCEL};
  96. // if need to refresh
  97. if (duration - _last_blink_time >= TIM_RUN_BLINK)
  98. {
  99. _icon_state ^= 1;
  100. _last_blink_time = duration;
  101. if (_icon_state)
  102. {
  103. Dev.Drawer.draw_icon(REC_ICON, COL_ICON_FG, COL_ICON_BG_REC, LAY_ICON_YOFFSET);
  104. return {STATE_RUN, TIM_RUN_REFRESH};
  105. }
  106. else
  107. {
  108. Dev.Drawer.draw_icon(REC_ICON, COL_ICON_FG, COL_ICON_BG_INACTIVE, LAY_ICON_YOFFSET);
  109. return {STATE_RUN, TIM_RUN_REFRESH};
  110. }
  111. }
  112. // short press -> stop
  113. if (Dev.M5Board.BtnA.wasReleased())
  114. {
  115. _last_blink_time = 0;
  116. _icon_state = false;
  117. return {STATE_STOP};
  118. }
  119. return {STATE_RUN};
  120. }
  121. //////////////////////////////////////////////////////////////////////////////////////////////////
  122. // STATE STOP
  123. //////////////////////////////////////////////////////////////////////////////////////////////////
  124. void StateStop::setup()
  125. {
  126. // draw screen
  127. Dev.Drawer.draw_icon(OK_ICON, COL_ICON_FG, COL_ICON_BG_INACTIVE, LAY_ICON_YOFFSET);
  128. Dev.Drawer.draw_description("Meranie", "dokoncene", LAY_DESC_YOFFSET);
  129. }
  130. StateTx StateStop::loop(int64_t duration)
  131. {
  132. if (duration > TIM_INFO_SCREEN)
  133. {
  134. Dev.Drawer.draw_icon(OK_ICON, COL_ICON_FG, COL_ICON_BG_ACTIVE, LAY_ICON_YOFFSET);
  135. return {STATE_LOCK, TIM_INFO_SCREEN};
  136. }
  137. return {STATE_STOP};
  138. }
  139. //////////////////////////////////////////////////////////////////////////////////////////////////
  140. // STATE CANCEL
  141. //////////////////////////////////////////////////////////////////////////////////////////////////
  142. void StateCancel::setup()
  143. {
  144. Dev.Drawer.draw_measure_number(--GenericState::measure_num);
  145. Dev.Drawer.draw_icon(CANCEL_ICON, COL_ICON_FG, COL_ICON_BG_CANCEL, LAY_ICON_YOFFSET);
  146. Dev.Drawer.draw_description("Meranie", "zrusene", LAY_DESC_YOFFSET);
  147. }
  148. StateTx StateCancel::loop(int64_t duration)
  149. {
  150. if (duration > TIM_INFO_SCREEN && Dev.M5Board.BtnA.isReleased())
  151. return {STATE_LOCK};
  152. return {STATE_CANCEL};
  153. }