Browse Source

Enhance and fix FTDI Eve Touch UI (#21607)

Marcio T 4 years ago
parent
commit
3ec5cd312b
No account linked to committer's email address

+ 1
- 0
Marlin/src/lcd/extui/lib/ftdi_eve_touch_ui/language/language_en.h View File

147
   PROGMEM Language_Str MSG_PROBE_BED                = u8"Probe Mesh";
147
   PROGMEM Language_Str MSG_PROBE_BED                = u8"Probe Mesh";
148
   PROGMEM Language_Str MSG_SHOW_MESH                = u8"View Mesh";
148
   PROGMEM Language_Str MSG_SHOW_MESH                = u8"View Mesh";
149
   PROGMEM Language_Str MSG_PRINT_TEST               = u8"Print Test";
149
   PROGMEM Language_Str MSG_PRINT_TEST               = u8"Print Test";
150
+  PROGMEM Language_Str MSG_MOVE_Z_TO_TOP            = u8"Raise Z to Top";
150
 
151
 
151
   #if ENABLED(TOUCH_UI_LULZBOT_BIO)
152
   #if ENABLED(TOUCH_UI_LULZBOT_BIO)
152
     PROGMEM Language_Str MSG_MOVE_TO_HOME           = u8"Move to Home";
153
     PROGMEM Language_Str MSG_MOVE_TO_HOME           = u8"Move to Home";

+ 15
- 5
Marlin/src/lcd/extui/lib/ftdi_eve_touch_ui/screens/bed_mesh_edit_screen.cpp View File

30
 using namespace ExtUI;
30
 using namespace ExtUI;
31
 
31
 
32
 constexpr static BedMeshEditScreenData &mydata = screen_data.BedMeshEditScreen;
32
 constexpr static BedMeshEditScreenData &mydata = screen_data.BedMeshEditScreen;
33
-constexpr static float gaugeThickness = 0.25;
33
+constexpr static float gaugeThickness = 0.1;
34
 
34
 
35
 #if ENABLED(TOUCH_UI_PORTRAIT)
35
 #if ENABLED(TOUCH_UI_PORTRAIT)
36
   #define GRID_COLS 3
36
   #define GRID_COLS 3
54
   #define SAVE_POS    BTN_POS(5,5), BTN_SIZE(1,1)
54
   #define SAVE_POS    BTN_POS(5,5), BTN_SIZE(1,1)
55
 #endif
55
 #endif
56
 
56
 
57
+constexpr uint8_t NONE = 255;
58
+
57
 static float meshGetter(uint8_t x, uint8_t y, void*) {
59
 static float meshGetter(uint8_t x, uint8_t y, void*) {
58
   xy_uint8_t pos;
60
   xy_uint8_t pos;
59
   pos.x = x;
61
   pos.x = x;
60
   pos.y = y;
62
   pos.y = y;
61
-  return ExtUI::getMeshPoint(pos) + (mydata.highlight.x != -1 && mydata.highlight == pos ? mydata.zAdjustment : 0);
63
+  return ExtUI::getMeshPoint(pos) + (mydata.highlight.x != NONE && mydata.highlight == pos ? mydata.zAdjustment : 0);
62
 }
64
 }
63
 
65
 
64
 void BedMeshEditScreen::onEntry() {
66
 void BedMeshEditScreen::onEntry() {
65
   mydata.needSave = false;
67
   mydata.needSave = false;
66
-  mydata.highlight.x = -1;
68
+  mydata.highlight.x = NONE;
67
   mydata.zAdjustment = 0;
69
   mydata.zAdjustment = 0;
70
+  mydata.savedMeshLevelingState = ExtUI::getLevelingActive();
71
+  mydata.savedEndstopState = ExtUI::getSoftEndstopState();
68
   BaseScreen::onEntry();
72
   BaseScreen::onEntry();
69
 }
73
 }
70
 
74
 
75
+void BedMeshEditScreen::onExit() {
76
+  ExtUI::setLevelingActive(mydata.savedMeshLevelingState);
77
+  ExtUI::setSoftEndstopState(mydata.savedEndstopState);
78
+}
79
+
71
 float BedMeshEditScreen::getHighlightedValue() {
80
 float BedMeshEditScreen::getHighlightedValue() {
72
   const float val = ExtUI::getMeshPoint(mydata.highlight);
81
   const float val = ExtUI::getMeshPoint(mydata.highlight);
73
   return (ISNAN(val) ? 0 : val) + mydata.zAdjustment;
82
   return (ISNAN(val) ? 0 : val) + mydata.zAdjustment;
80
 void BedMeshEditScreen::moveToHighlightedValue() {
89
 void BedMeshEditScreen::moveToHighlightedValue() {
81
   if (ExtUI::getMeshValid()) {
90
   if (ExtUI::getMeshValid()) {
82
     ExtUI::setLevelingActive(true);
91
     ExtUI::setLevelingActive(true);
92
+    ExtUI::setSoftEndstopState(false);
83
     ExtUI::moveToMeshPoint(mydata.highlight, gaugeThickness + mydata.zAdjustment);
93
     ExtUI::moveToMeshPoint(mydata.highlight, gaugeThickness + mydata.zAdjustment);
84
   }
94
   }
85
 }
95
 }
86
 
96
 
87
 void BedMeshEditScreen::adjustHighlightedValue(float increment) {
97
 void BedMeshEditScreen::adjustHighlightedValue(float increment) {
88
-  if(mydata.highlight.x != -1) {
98
+  if (mydata.highlight.x != NONE) {
89
     mydata.zAdjustment += increment;
99
     mydata.zAdjustment += increment;
90
     moveToHighlightedValue();
100
     moveToHighlightedValue();
91
     mydata.needSave = true;
101
     mydata.needSave = true;
114
      .colors(normal_btn)
124
      .colors(normal_btn)
115
      .text(Z_LABEL_POS, GET_TEXT_F(MSG_MESH_EDIT_Z))
125
      .text(Z_LABEL_POS, GET_TEXT_F(MSG_MESH_EDIT_Z))
116
      .font(font_small);
126
      .font(font_small);
117
-  if(mydata.highlight.x != -1)
127
+  if (mydata.highlight.x != NONE)
118
     draw_adjuster(cmd, Z_VALUE_POS, 3, getHighlightedValue(), GET_TEXT_F(MSG_UNITS_MM), 4, 3);
128
     draw_adjuster(cmd, Z_VALUE_POS, 3, getHighlightedValue(), GET_TEXT_F(MSG_UNITS_MM), 4, 3);
119
   cmd.colors(mydata.needSave ? normal_btn : action_btn)
129
   cmd.colors(mydata.needSave ? normal_btn : action_btn)
120
      .tag(1).button(BACK_POS, GET_TEXT_F(MSG_BUTTON_BACK))
130
      .tag(1).button(BACK_POS, GET_TEXT_F(MSG_BUTTON_BACK))

+ 2
- 1
Marlin/src/lcd/extui/lib/ftdi_eve_touch_ui/screens/bed_mesh_edit_screen.h View File

25
 #define FTDI_BED_MESH_EDIT_SCREEN_CLASS BedMeshEditScreen
25
 #define FTDI_BED_MESH_EDIT_SCREEN_CLASS BedMeshEditScreen
26
 
26
 
27
 struct BedMeshEditScreenData {
27
 struct BedMeshEditScreenData {
28
-  bool needSave;
28
+  bool needSave, savedMeshLevelingState, savedEndstopState;
29
   xy_uint8_t highlight;
29
   xy_uint8_t highlight;
30
   float zAdjustment;
30
   float zAdjustment;
31
 };
31
 };
41
     static void drawHighlightedPointValue();
41
     static void drawHighlightedPointValue();
42
   public:
42
   public:
43
     static void onEntry();
43
     static void onEntry();
44
+    static void onExit();
44
     static void onRedraw(draw_mode_t);
45
     static void onRedraw(draw_mode_t);
45
     static bool onTouchHeld(uint8_t tag);
46
     static bool onTouchHeld(uint8_t tag);
46
     static bool onTouchEnd(uint8_t tag);
47
     static bool onTouchEnd(uint8_t tag);

+ 2
- 2
Marlin/src/lcd/extui/lib/ftdi_eve_touch_ui/screens/bed_mesh_view_screen.cpp View File

73
      .text(Z_LABEL_POS, GET_TEXT_F(MSG_MESH_EDIT_Z))
73
      .text(Z_LABEL_POS, GET_TEXT_F(MSG_MESH_EDIT_Z))
74
      .font(font_small);
74
      .font(font_small);
75
 
75
 
76
-  if(mydata.highlight.x != -1)
76
+  if (mydata.highlight.x != -1)
77
     draw_adjuster_value(cmd, Z_VALUE_POS, ExtUI::getMeshPoint(mydata.highlight), GET_TEXT_F(MSG_UNITS_MM), 4, 3);
77
     draw_adjuster_value(cmd, Z_VALUE_POS, ExtUI::getMeshPoint(mydata.highlight), GET_TEXT_F(MSG_UNITS_MM), 4, 3);
78
 
78
 
79
   cmd.colors(action_btn)
79
   cmd.colors(action_btn)
80
      .tag(1).button(OKAY_POS, GET_TEXT_F(MSG_BUTTON_OKAY))
80
      .tag(1).button(OKAY_POS, GET_TEXT_F(MSG_BUTTON_OKAY))
81
      .tag(0);
81
      .tag(0);
82
 
82
 
83
-  if(mydata.message) cmd.text(MESSAGE_POS, mydata.message);
83
+  if (mydata.message) cmd.text(MESSAGE_POS, mydata.message);
84
 }
84
 }
85
 
85
 
86
 void BedMeshViewScreen::onRedraw(draw_mode_t what) {
86
 void BedMeshViewScreen::onRedraw(draw_mode_t what) {

+ 10
- 1
Marlin/src/lcd/extui/lib/ftdi_eve_touch_ui/screens/move_axis_screen.cpp View File

66
       w.adjuster( 14, GET_TEXT_F(MSG_AXIS_E4), mydata.e_rel[3], canMove(E3));
66
       w.adjuster( 14, GET_TEXT_F(MSG_AXIS_E4), mydata.e_rel[3], canMove(E3));
67
     #endif
67
     #endif
68
   #endif
68
   #endif
69
+  #if Z_HOME_DIR < 0
70
+    w.button(24, GET_TEXT_F(MSG_MOVE_Z_TO_TOP), !axis_should_home(Z_AXIS));
71
+  #endif
69
   w.increments();
72
   w.increments();
70
 }
73
 }
71
 
74
 
98
     case 20: SpinnerDialogBox::enqueueAndWait_P(F("G28X")); break;
101
     case 20: SpinnerDialogBox::enqueueAndWait_P(F("G28X")); break;
99
     case 21: SpinnerDialogBox::enqueueAndWait_P(F("G28Y")); break;
102
     case 21: SpinnerDialogBox::enqueueAndWait_P(F("G28Y")); break;
100
     case 22: SpinnerDialogBox::enqueueAndWait_P(F("G28Z")); break;
103
     case 22: SpinnerDialogBox::enqueueAndWait_P(F("G28Z")); break;
101
-    case 23: SpinnerDialogBox::enqueueAndWait_P(F("G28"));   break;
104
+    case 23: SpinnerDialogBox::enqueueAndWait_P(F("G28")); break;
105
+    case 24: raiseZtoTop(); break;
102
     default:
106
     default:
103
       return false;
107
       return false;
104
   }
108
   }
107
   return true;
111
   return true;
108
 }
112
 }
109
 
113
 
114
+void BaseMoveAxisScreen::raiseZtoTop() {
115
+  constexpr xyze_feedrate_t homing_feedrate = HOMING_FEEDRATE_MM_M;
116
+  setAxisPosition_mm(Z_MAX_POS - 5, Z, homing_feedrate[Z_AXIS]);
117
+}
118
+
110
 float BaseMoveAxisScreen::getManualFeedrate(uint8_t axis, float increment_mm) {
119
 float BaseMoveAxisScreen::getManualFeedrate(uint8_t axis, float increment_mm) {
111
   // Compute feedrate so that the tool lags the adjuster when it is
120
   // Compute feedrate so that the tool lags the adjuster when it is
112
   // being held down, this allows enough margin for the planner to
121
   // being held down, this allows enough margin for the planner to

+ 1
- 0
Marlin/src/lcd/extui/lib/ftdi_eve_touch_ui/screens/move_axis_screen.h View File

34
   private:
34
   private:
35
     static float getManualFeedrate(uint8_t axis, float increment_mm);
35
     static float getManualFeedrate(uint8_t axis, float increment_mm);
36
   public:
36
   public:
37
+    static void raiseZtoTop();
37
     static void setManualFeedrate(ExtUI::axis_t, float increment_mm);
38
     static void setManualFeedrate(ExtUI::axis_t, float increment_mm);
38
     static void setManualFeedrate(ExtUI::extruder_t, float increment_mm);
39
     static void setManualFeedrate(ExtUI::extruder_t, float increment_mm);
39
 
40
 

+ 1
- 0
Marlin/src/lcd/extui/lib/ftdi_eve_touch_ui/screens/screen_data.h View File

61
   DECL_DATA_IF_INCLUDED(FTDI_COCOA_PREHEAT_SCREEN)
61
   DECL_DATA_IF_INCLUDED(FTDI_COCOA_PREHEAT_SCREEN)
62
   DECL_DATA_IF_INCLUDED(FTDI_COCOA_LOAD_CHOCOLATE_SCREEN)
62
   DECL_DATA_IF_INCLUDED(FTDI_COCOA_LOAD_CHOCOLATE_SCREEN)
63
   DECL_DATA_IF_INCLUDED(FTDI_NUDGE_NOZZLE_SCREEN)
63
   DECL_DATA_IF_INCLUDED(FTDI_NUDGE_NOZZLE_SCREEN)
64
+  DECL_DATA_IF_INCLUDED(FTDI_Z_OFFSET_SCREEN)
64
   DECL_DATA_IF_INCLUDED(FTDI_BASE_NUMERIC_ADJ_SCREEN)
65
   DECL_DATA_IF_INCLUDED(FTDI_BASE_NUMERIC_ADJ_SCREEN)
65
   DECL_DATA_IF_INCLUDED(FTDI_ALERT_DIALOG_BOX)
66
   DECL_DATA_IF_INCLUDED(FTDI_ALERT_DIALOG_BOX)
66
 };
67
 };

+ 2
- 2
Marlin/src/lcd/extui/lib/ftdi_eve_touch_ui/screens/status_screen.cpp View File

316
     cmd.colors(normal_btn)
316
     cmd.colors(normal_btn)
317
        .font(Theme::font_medium)
317
        .font(Theme::font_medium)
318
        .colors(has_media ? action_btn : normal_btn)
318
        .colors(has_media ? action_btn : normal_btn)
319
-       .enabled(has_media)
320
-       .tag(3).button(MEDIA_BTN_POS, isPrintingFromMedia() ? GET_TEXT_F(MSG_PRINTING) : GET_TEXT_F(MSG_BUTTON_MEDIA))
319
+       .enabled(has_media && !isPrinting())
320
+       .tag(3).button(MEDIA_BTN_POS, isPrinting() ? GET_TEXT_F(MSG_PRINTING) : GET_TEXT_F(MSG_BUTTON_MEDIA))
321
        .colors(!has_media ? action_btn : normal_btn)
321
        .colors(!has_media ? action_btn : normal_btn)
322
        .tag(4).button(MENU_BTN_POS, GET_TEXT_F(MSG_BUTTON_MENU));
322
        .tag(4).button(MENU_BTN_POS, GET_TEXT_F(MSG_BUTTON_MENU));
323
   }
323
   }

+ 44
- 2
Marlin/src/lcd/extui/lib/ftdi_eve_touch_ui/screens/z_offset_screen.cpp View File

22
 
22
 
23
 #include "../config.h"
23
 #include "../config.h"
24
 #include "screens.h"
24
 #include "screens.h"
25
+#include "screen_data.h"
25
 
26
 
26
 #ifdef FTDI_Z_OFFSET_SCREEN
27
 #ifdef FTDI_Z_OFFSET_SCREEN
27
 
28
 
29
 using namespace ExtUI;
30
 using namespace ExtUI;
30
 using namespace Theme;
31
 using namespace Theme;
31
 
32
 
33
+#define SHEET_THICKNESS 0.1
34
+
35
+constexpr static ZOffsetScreenData &mydata = screen_data.ZOffsetScreen;
36
+
37
+void ZOffsetScreen::onEntry() {
38
+  mydata.z = SHEET_THICKNESS;
39
+  BaseNumericAdjustmentScreen::onEntry();
40
+}
41
+
32
 void ZOffsetScreen::onRedraw(draw_mode_t what) {
42
 void ZOffsetScreen::onRedraw(draw_mode_t what) {
33
   widgets_t w(what);
43
   widgets_t w(what);
34
   w.precision(2, BaseNumericAdjustmentScreen::DEFAULT_MIDRANGE).units(GET_TEXT_F(MSG_UNITS_MM));
44
   w.precision(2, BaseNumericAdjustmentScreen::DEFAULT_MIDRANGE).units(GET_TEXT_F(MSG_UNITS_MM));
36
   w.heading(                  GET_TEXT_F(MSG_ZPROBE_ZOFFSET));
46
   w.heading(                  GET_TEXT_F(MSG_ZPROBE_ZOFFSET));
37
   w.color(z_axis).adjuster(4, GET_TEXT_F(MSG_ZPROBE_ZOFFSET), getZOffset_mm());
47
   w.color(z_axis).adjuster(4, GET_TEXT_F(MSG_ZPROBE_ZOFFSET), getZOffset_mm());
38
   w.increments();
48
   w.increments();
49
+  w.button(   2, GET_TEXT_F(MSG_PROBE_WIZARD));
50
+}
51
+
52
+void ZOffsetScreen::move(float inc) {
53
+  // We can't store state after the call to the AlertBox, so
54
+  // check whether the current position equal mydata.z in order
55
+  // to know whether the user started the wizard.
56
+  if (getAxisPosition_mm(Z) == mydata.z) {
57
+    mydata.z += inc;
58
+    setAxisPosition_mm(mydata.z, Z);
59
+  }
60
+}
61
+
62
+void ZOffsetScreen::runWizard() {
63
+  // Restore the default Z offset
64
+  constexpr float offset[] = NOZZLE_TO_PROBE_OFFSET;
65
+  setZOffset_mm(offset[Z_AXIS]);
66
+  // Move above probe point
67
+  char cmd[64], str[10];
68
+  strcpy_P(cmd, PSTR("G28 Z\nG0 F1000 X"));
69
+  dtostrf(TERN(Z_SAFE_HOMING,Z_SAFE_HOMING_X_POINT,X_CENTER), 3, 1, str);
70
+  strcat(cmd, str);
71
+  strcat_P(cmd, PSTR("Y"));
72
+  dtostrf(TERN(Z_SAFE_HOMING,Z_SAFE_HOMING_Y_POINT,Y_CENTER), 3, 1, str);
73
+  strcat(cmd, str);
74
+  strcat_P(cmd, PSTR("Z"));
75
+  dtostrf(SHEET_THICKNESS, 3, 1, str);
76
+  strcat(cmd, str);
77
+  injectCommands(cmd);
78
+  // Show instructions for user.
79
+  AlertDialogBox::show(PSTR("After the printer finishes homing, adjust the Z Offset so that a sheet of paper can pass between the nozzle and bed with slight resistance."));
39
 }
80
 }
40
 
81
 
41
 bool ZOffsetScreen::onTouchHeld(uint8_t tag) {
82
 bool ZOffsetScreen::onTouchHeld(uint8_t tag) {
42
   const float increment = getIncrement();
83
   const float increment = getIncrement();
43
   switch (tag) {
84
   switch (tag) {
44
-    case 4: UI_DECREMENT(ZOffset_mm); break;
45
-    case 5: UI_INCREMENT(ZOffset_mm); break;
85
+    case 2: runWizard(); break;
86
+    case 4: UI_DECREMENT(ZOffset_mm); move(-increment); break;
87
+    case 5: UI_INCREMENT(ZOffset_mm); move( increment); break;
46
     default:
88
     default:
47
       return false;
89
       return false;
48
   }
90
   }

+ 8
- 0
Marlin/src/lcd/extui/lib/ftdi_eve_touch_ui/screens/z_offset_screen.h View File

25
 #define FTDI_Z_OFFSET_SCREEN
25
 #define FTDI_Z_OFFSET_SCREEN
26
 #define FTDI_Z_OFFSET_SCREEN_CLASS ZOffsetScreen
26
 #define FTDI_Z_OFFSET_SCREEN_CLASS ZOffsetScreen
27
 
27
 
28
+struct ZOffsetScreenData : public BaseNumericAdjustmentScreenData {
29
+  float z;
30
+};
31
+
28
 class ZOffsetScreen : public BaseNumericAdjustmentScreen, public CachedScreen<ZOFFSET_SCREEN_CACHE> {
32
 class ZOffsetScreen : public BaseNumericAdjustmentScreen, public CachedScreen<ZOFFSET_SCREEN_CACHE> {
33
+  private:
34
+    static void move(float inc);
35
+    static void runWizard();
29
   public:
36
   public:
37
+    static void onEntry();
30
     static void onRedraw(draw_mode_t);
38
     static void onRedraw(draw_mode_t);
31
     static bool onTouchHeld(uint8_t tag);
39
     static bool onTouchHeld(uint8_t tag);
32
 };
40
 };

Loading…
Cancel
Save