No Description
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

states.cpp 2.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. #include <Arduino.h>
  2. #include "config.h"
  3. #include "config_pins.h"
  4. #include "data.h"
  5. #include "common.h"
  6. #include "lcd.h"
  7. #include "steppers.h"
  8. #include "statemachine.h"
  9. #include "states.h"
  10. // --------------------------------------
  11. StateText sm_ask_homing = StateText();
  12. StateText sm_do_homing = StateText(&sm_ask_homing);
  13. StateMenu sm_menu = StateMenu(&sm_do_homing);
  14. StateMenu sm_auto = StateMenu(&sm_menu);
  15. StateDynamicMenu sm_presets = StateDynamicMenu(&sm_auto);
  16. StateDynamicMenu sm_new_preset = StateDynamicMenu(&sm_auto);
  17. StateDynamicMenu sm_mod_preset = StateDynamicMenu(&sm_auto);
  18. StateDynamicMenu sm_del_preset = StateDynamicMenu(&sm_auto);
  19. StateMenu sm_config = StateMenu(&sm_menu);
  20. // --------------------------------------
  21. State *current_state = NULL;
  22. void states_init(void) {
  23. // ----------------------------------
  24. sm_ask_homing.setHeading("Homing Required!");
  25. sm_ask_homing.setText("Click to home all four axes.");
  26. // ----------------------------------
  27. sm_do_homing.setTitle("Home all axes");
  28. sm_do_homing.setHeading("Homing");
  29. sm_do_homing.onEnter([]() {
  30. steppers_start_homing();
  31. });
  32. sm_do_homing.whenIn([](StateMachineInput smi) {
  33. if (smi.motors_done) {
  34. if (steppers_homed()) {
  35. async_beep(100, 2000);
  36. states_go_to(&sm_menu);
  37. }
  38. }
  39. // TODO update text with current axis
  40. });
  41. // ----------------------------------
  42. sm_menu.setTitle("Main Menu");
  43. sm_menu.addChild(&sm_do_homing, 1);
  44. // ----------------------------------
  45. sm_auto.setTitle("Filling Menu");
  46. sm_auto.setChild(&sm_menu);
  47. sm_presets.setTitle("Presets");
  48. sm_presets.dataCount([]() {
  49. return (int)data_preset_count();
  50. });
  51. sm_presets.dataGet([](int i) {
  52. // TODO can not build a name string here
  53. // dynamically. need to have a name stored
  54. // somewhere, in data/eeprom, for each preset
  55. // that we can pass here
  56. });
  57. sm_new_preset.setTitle("New Preset");
  58. sm_mod_preset.setTitle("Modify Preset");
  59. sm_del_preset.setTitle("Delete Preset");
  60. // ----------------------------------
  61. sm_config.setTitle("Configuration");
  62. sm_auto.setChild(&sm_menu);
  63. // ----------------------------------
  64. states_go_to(&sm_ask_homing);
  65. }
  66. void states_run(StateMachineInput smi) {
  67. if (current_state != NULL) {
  68. current_state->inState(smi);
  69. }
  70. }
  71. State *states_get(void) {
  72. return current_state;
  73. }
  74. void states_go_to(State *state) {
  75. current_state = state;
  76. if (current_state != NULL) {
  77. current_state->enterState();
  78. }
  79. }