My Marlin configs for Fabrikator Mini and CTC i3 Pro B
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. /******************
  2. * screen_types.h *
  3. ******************/
  4. /****************************************************************************
  5. * Written By Marcio Teixeira 2018 - Aleph Objects, Inc. *
  6. * *
  7. * This program is free software: you can redistribute it and/or modify *
  8. * it under the terms of the GNU General Public License as published by *
  9. * the Free Software Foundation, either version 3 of the License, or *
  10. * (at your option) any later version. *
  11. * *
  12. * This program is distributed in the hope that it will be useful, *
  13. * but WITHOUT ANY WARRANTY; without even the implied warranty of *
  14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
  15. * GNU General Public License for more details. *
  16. * *
  17. * To view a copy of the GNU General Public License, go to the following *
  18. * location: <http://www.gnu.org/licenses/>. *
  19. ****************************************************************************/
  20. #include "ftdi_extended.h"
  21. #ifdef FTDI_EXTENDED
  22. /********************** VIRTUAL DISPATCH DATA TYPE ******************************/
  23. uint8_t ScreenRef::lookupScreen(onRedraw_func_t onRedraw_ptr) {
  24. for(uint8_t type = 0; type < functionTableSize; type++) {
  25. if (GET_METHOD(type, onRedraw) == onRedraw_ptr) {
  26. return type;
  27. }
  28. }
  29. #if ENABLED(TOUCH_UI_DEBUG)
  30. SERIAL_ECHO_START();
  31. SERIAL_ECHOPAIR("Screen not found: ", (uintptr_t) onRedraw_ptr);
  32. #endif
  33. return 0xFF;
  34. }
  35. void ScreenRef::setScreen(onRedraw_func_t onRedraw_ptr) {
  36. uint8_t type = lookupScreen(onRedraw_ptr);
  37. if (type != 0xFF) {
  38. setType(type);
  39. #if ENABLED(TOUCH_UI_DEBUG)
  40. SERIAL_ECHO_START();
  41. SERIAL_ECHOLNPAIR("New screen: ", type);
  42. #endif
  43. }
  44. }
  45. void ScreenRef::initializeAll() {
  46. for(uint8_t type = 0; type < functionTableSize; type++) {
  47. GET_METHOD(type, onStartup)();
  48. }
  49. }
  50. /********************** SCREEN STACK ******************************/
  51. void ScreenStack::start() {
  52. initializeAll();
  53. onEntry();
  54. }
  55. void ScreenStack::push(onRedraw_func_t onRedraw_ptr) {
  56. stack[3] = stack[2];
  57. stack[2] = stack[1];
  58. stack[1] = stack[0];
  59. stack[0] = lookupScreen(onRedraw_ptr);
  60. }
  61. void ScreenStack::push() {
  62. stack[3] = stack[2];
  63. stack[2] = stack[1];
  64. stack[1] = stack[0];
  65. stack[0] = getType();
  66. }
  67. void ScreenStack::pop() {
  68. setType(stack[0]);
  69. forget();
  70. }
  71. void ScreenStack::forget() {
  72. stack[0] = stack[1];
  73. stack[1] = stack[2];
  74. stack[2] = stack[3];
  75. stack[3] = 0;
  76. }
  77. void ScreenStack::goTo(onRedraw_func_t s) {
  78. push();
  79. onExit();
  80. setScreen(s);
  81. onEntry();
  82. }
  83. void ScreenStack::goBack() {
  84. onExit();
  85. pop();
  86. onEntry();
  87. }
  88. ScreenStack current_screen;
  89. #endif // FTDI_EXTENDED