Преглед на файлове

Correct range of LCD axis step editing (#13727)

Marcio Teixeira преди 6 години
родител
ревизия
866e2d41dc
променени са 5 файла, в които са добавени 26 реда и са изтрити 22 реда
  1. 7
    7
      Marlin/src/core/utility.cpp
  2. 2
    2
      Marlin/src/core/utility.h
  3. 2
    2
      Marlin/src/lcd/menu/menu.cpp
  4. 11
    7
      Marlin/src/lcd/menu/menu.h
  5. 4
    4
      Marlin/src/lcd/menu/menu_advanced.cpp

+ 7
- 7
Marlin/src/core/utility.cpp Целия файл

264
     return conv;
264
     return conv;
265
   }
265
   }
266
 
266
 
267
-  // Convert unsigned float to string with 1234.56 format omitting trailing zeros
268
-  char* ftostr62rj(const float &f) {
269
-    const long i = ((f < 0 ? -f : f) * 1000 + 5) / 10;
270
-    conv[0] = RJDIGIT(i, 100000);
267
+  // Convert unsigned float to string with 1234.5 format omitting trailing zeros
268
+  char* ftostr51rj(const float &f) {
269
+    const long i = ((f < 0 ? -f : f) * 100 + 5) / 10;
270
+    conv[0] = ' ';
271
     conv[1] = RJDIGIT(i, 10000);
271
     conv[1] = RJDIGIT(i, 10000);
272
     conv[2] = RJDIGIT(i, 1000);
272
     conv[2] = RJDIGIT(i, 1000);
273
-    conv[3] = DIGIMOD(i, 100);
274
-    conv[4] = '.';
275
-    conv[5] = DIGIMOD(i, 10);
273
+    conv[3] = RJDIGIT(i, 100);
274
+    conv[4] = DIGIMOD(i, 10);
275
+    conv[5] = '.';
276
     conv[6] = DIGIMOD(i, 1);
276
     conv[6] = DIGIMOD(i, 1);
277
     return conv;
277
     return conv;
278
   }
278
   }

+ 2
- 2
Marlin/src/core/utility.h Целия файл

106
   // Convert signed float to string with +123.45 format
106
   // Convert signed float to string with +123.45 format
107
   char* ftostr52sign(const float &x);
107
   char* ftostr52sign(const float &x);
108
 
108
 
109
-  // Convert unsigned float to string with 1234.56 format omitting trailing zeros
110
-  char* ftostr62rj(const float &x);
109
+  // Convert unsigned float to string with 1234.5 format omitting trailing zeros
110
+  char* ftostr51rj(const float &x);
111
 
111
 
112
   // Convert float to rj string with 123 or -12 format
112
   // Convert float to rj string with 123 or -12 format
113
   FORCE_INLINE char* ftostr3(const float &x) { return i16tostr3(int16_t(x + (x < 0 ? -0.5f : 0.5f))); }
113
   FORCE_INLINE char* ftostr3(const float &x) { return i16tostr3(int16_t(x + (x < 0 ? -0.5f : 0.5f))); }

+ 2
- 2
Marlin/src/lcd/menu/menu.cpp Целия файл

167
 DEFINE_MENU_EDIT_ITEM(float52);     // 123.45
167
 DEFINE_MENU_EDIT_ITEM(float52);     // 123.45
168
 DEFINE_MENU_EDIT_ITEM(float43);     // 1.234
168
 DEFINE_MENU_EDIT_ITEM(float43);     // 1.234
169
 DEFINE_MENU_EDIT_ITEM(float5);      // 12345      right-justified
169
 DEFINE_MENU_EDIT_ITEM(float5);      // 12345      right-justified
170
-DEFINE_MENU_EDIT_ITEM(float51);     // +1234.5
170
+DEFINE_MENU_EDIT_ITEM(float51);     // 1234.5     right-justified
171
+DEFINE_MENU_EDIT_ITEM(float51sign); // +1234.5
171
 DEFINE_MENU_EDIT_ITEM(float52sign); // +123.45
172
 DEFINE_MENU_EDIT_ITEM(float52sign); // +123.45
172
-DEFINE_MENU_EDIT_ITEM(float62);     // 1234.56    right-justified
173
 DEFINE_MENU_EDIT_ITEM(long5);       // 12345      right-justified
173
 DEFINE_MENU_EDIT_ITEM(long5);       // 12345      right-justified
174
 
174
 
175
 void MenuItem_bool::action_edit(PGM_P pstr, bool *ptr, screenFunc_t callback) {
175
 void MenuItem_bool::action_edit(PGM_P pstr, bool *ptr, screenFunc_t callback) {

+ 11
- 7
Marlin/src/lcd/menu/menu.h Целия файл

24
 #include "../ultralcd.h"
24
 #include "../ultralcd.h"
25
 #include "../../inc/MarlinConfig.h"
25
 #include "../../inc/MarlinConfig.h"
26
 
26
 
27
+#include "limits.h"
28
+
27
 extern int8_t encoderLine, encoderTopLine, screen_items;
29
 extern int8_t encoderLine, encoderTopLine, screen_items;
28
 extern bool screen_changed;
30
 extern bool screen_changed;
29
 
31
 
54
 DECLARE_MENU_EDIT_TYPE(float,    float52,     ftostr52,      100     );   // 123.45
56
 DECLARE_MENU_EDIT_TYPE(float,    float52,     ftostr52,      100     );   // 123.45
55
 DECLARE_MENU_EDIT_TYPE(float,    float43,     ftostr43sign, 1000     );   // 1.234
57
 DECLARE_MENU_EDIT_TYPE(float,    float43,     ftostr43sign, 1000     );   // 1.234
56
 DECLARE_MENU_EDIT_TYPE(float,    float5,      ftostr5rj,       0.01f );   // 12345      right-justified
58
 DECLARE_MENU_EDIT_TYPE(float,    float5,      ftostr5rj,       0.01f );   // 12345      right-justified
57
-DECLARE_MENU_EDIT_TYPE(float,    float51,     ftostr51sign,   10     );   // +1234.5
59
+DECLARE_MENU_EDIT_TYPE(float,    float51,     ftostr51rj,     10     );   // 1234.5     right-justified
60
+DECLARE_MENU_EDIT_TYPE(float,    float51sign, ftostr51sign,   10     );   // +1234.5
58
 DECLARE_MENU_EDIT_TYPE(float,    float52sign, ftostr52sign,  100     );   // +123.45
61
 DECLARE_MENU_EDIT_TYPE(float,    float52sign, ftostr52sign,  100     );   // +123.45
59
-DECLARE_MENU_EDIT_TYPE(float,    float62,     ftostr62rj,    100     );   // 1234.56    right-justified
60
 DECLARE_MENU_EDIT_TYPE(uint32_t, long5,       ftostr5rj,       0.01f );   // 12345      right-justified
62
 DECLARE_MENU_EDIT_TYPE(uint32_t, long5,       ftostr5rj,       0.01f );   // 12345      right-justified
61
 
63
 
62
 ////////////////////////////////////////////
64
 ////////////////////////////////////////////
119
 DEFINE_DRAW_MENU_ITEM_SETTING_EDIT(float52);          // 123.45
121
 DEFINE_DRAW_MENU_ITEM_SETTING_EDIT(float52);          // 123.45
120
 DEFINE_DRAW_MENU_ITEM_SETTING_EDIT(float43);          // 1.234
122
 DEFINE_DRAW_MENU_ITEM_SETTING_EDIT(float43);          // 1.234
121
 DEFINE_DRAW_MENU_ITEM_SETTING_EDIT(float5);           // 12345      right-justified
123
 DEFINE_DRAW_MENU_ITEM_SETTING_EDIT(float5);           // 12345      right-justified
122
-DEFINE_DRAW_MENU_ITEM_SETTING_EDIT(float51);          // +1234.5
124
+DEFINE_DRAW_MENU_ITEM_SETTING_EDIT(float51);          // 1234.5     right-justified
125
+DEFINE_DRAW_MENU_ITEM_SETTING_EDIT(float51sign);      // +1234.5
123
 DEFINE_DRAW_MENU_ITEM_SETTING_EDIT(float52sign);      // +123.45
126
 DEFINE_DRAW_MENU_ITEM_SETTING_EDIT(float52sign);      // +123.45
124
-DEFINE_DRAW_MENU_ITEM_SETTING_EDIT(float62);          // 1234.56    right-justified
125
 DEFINE_DRAW_MENU_ITEM_SETTING_EDIT(long5);            // 12345      right-justified
127
 DEFINE_DRAW_MENU_ITEM_SETTING_EDIT(long5);            // 12345      right-justified
126
 
128
 
127
 #define draw_menu_item_edit_bool(sel, row, pstr, pstr2, data, ...)           DRAW_BOOL_SETTING(sel, row, pstr, data)
129
 #define draw_menu_item_edit_bool(sel, row, pstr, pstr2, data, ...)           DRAW_BOOL_SETTING(sel, row, pstr, data)
179
     static char* to_string(const int16_t value)       { return NAME::strfunc(unscale(value)); }
181
     static char* to_string(const int16_t value)       { return NAME::strfunc(unscale(value)); }
180
   public:
182
   public:
181
     static void action_edit(PGM_P const pstr, type_t * const ptr, const type_t minValue, const type_t maxValue, const screenFunc_t callback=NULL, const bool live=false) {
183
     static void action_edit(PGM_P const pstr, type_t * const ptr, const type_t minValue, const type_t maxValue, const screenFunc_t callback=NULL, const bool live=false) {
182
-      const int16_t minv = scale(minValue);
183
-      init(pstr, ptr, minv, int16_t(scale(maxValue)) - minv, int16_t(scale(*ptr)) - minv, edit, callback, live);
184
+      // Make sure minv and maxv fit within int16_t
185
+      const int16_t minv = MAX(scale(minValue), INT_MIN),
186
+                    maxv = MIN(scale(maxValue), INT_MAX);
187
+      init(pstr, ptr, minv, maxv - minv, scale(*ptr) - minv, edit, callback, live);
184
     }
188
     }
185
     static void edit() { MenuItemBase::edit(to_string, load); }
189
     static void edit() { MenuItemBase::edit(to_string, load); }
186
 };
190
 };
199
 DECLARE_MENU_EDIT_ITEM(float43);
203
 DECLARE_MENU_EDIT_ITEM(float43);
200
 DECLARE_MENU_EDIT_ITEM(float5);
204
 DECLARE_MENU_EDIT_ITEM(float5);
201
 DECLARE_MENU_EDIT_ITEM(float51);
205
 DECLARE_MENU_EDIT_ITEM(float51);
206
+DECLARE_MENU_EDIT_ITEM(float51sign);
202
 DECLARE_MENU_EDIT_ITEM(float52sign);
207
 DECLARE_MENU_EDIT_ITEM(float52sign);
203
-DECLARE_MENU_EDIT_ITEM(float62);
204
 DECLARE_MENU_EDIT_ITEM(long5);
208
 DECLARE_MENU_EDIT_ITEM(long5);
205
 
209
 
206
 class MenuItem_bool {
210
 class MenuItem_bool {

+ 4
- 4
Marlin/src/lcd/menu/menu_advanced.cpp Целия файл

571
     START_MENU();
571
     START_MENU();
572
     MENU_BACK(MSG_ADVANCED_SETTINGS);
572
     MENU_BACK(MSG_ADVANCED_SETTINGS);
573
 
573
 
574
-    #define EDIT_QSTEPS(Q) MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float62, MSG_##Q##STEPS, &planner.settings.axis_steps_per_mm[_AXIS(Q)], 5, 9999, _planner_refresh_positioning)
574
+    #define EDIT_QSTEPS(Q) MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float51, MSG_##Q##STEPS, &planner.settings.axis_steps_per_mm[_AXIS(Q)], 5, 9999, _planner_refresh_positioning)
575
     EDIT_QSTEPS(A);
575
     EDIT_QSTEPS(A);
576
     EDIT_QSTEPS(B);
576
     EDIT_QSTEPS(B);
577
     EDIT_QSTEPS(C);
577
     EDIT_QSTEPS(C);
578
 
578
 
579
     #if ENABLED(DISTINCT_E_FACTORS)
579
     #if ENABLED(DISTINCT_E_FACTORS)
580
-      #define EDIT_ESTEPS(N,E) MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float62, MSG_E##N##STEPS, &planner.settings.axis_steps_per_mm[E_AXIS_N(E)], 5, 9999, _planner_refresh_e##E##_positioning)
581
-      MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float62, MSG_ESTEPS, &planner.settings.axis_steps_per_mm[E_AXIS_N(active_extruder)], 5, 9999, _planner_refresh_positioning);
580
+      #define EDIT_ESTEPS(N,E) MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float51, MSG_E##N##STEPS, &planner.settings.axis_steps_per_mm[E_AXIS_N(E)], 5, 9999, _planner_refresh_e##E##_positioning)
581
+      MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float51, MSG_ESTEPS, &planner.settings.axis_steps_per_mm[E_AXIS_N(active_extruder)], 5, 9999, _planner_refresh_positioning);
582
       EDIT_ESTEPS(1,0);
582
       EDIT_ESTEPS(1,0);
583
       EDIT_ESTEPS(2,1);
583
       EDIT_ESTEPS(2,1);
584
       #if E_STEPPERS > 2
584
       #if E_STEPPERS > 2
594
         #endif // E_STEPPERS > 3
594
         #endif // E_STEPPERS > 3
595
       #endif // E_STEPPERS > 2
595
       #endif // E_STEPPERS > 2
596
     #elif E_STEPPERS
596
     #elif E_STEPPERS
597
-      MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float62, MSG_ESTEPS, &planner.settings.axis_steps_per_mm[E_AXIS], 5, 9999, _planner_refresh_positioning);
597
+      MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float51, MSG_ESTEPS, &planner.settings.axis_steps_per_mm[E_AXIS], 5, 9999, _planner_refresh_positioning);
598
     #endif
598
     #endif
599
 
599
 
600
     END_MENU();
600
     END_MENU();

Loading…
Отказ
Запис