Browse Source

Fix / improve menu items (#18644)

Scott Lahteine 3 years ago
parent
commit
0e1cb10909
No account linked to committer's email address

+ 4
- 5
Marlin/src/lcd/HD44780/ultralcd_HD44780.cpp View File

1032
   // Low-level draw_edit_screen can be used to draw an edit screen from anyplace
1032
   // Low-level draw_edit_screen can be used to draw an edit screen from anyplace
1033
   void MenuEditItemBase::draw_edit_screen(PGM_P const pstr, const char* const value/*=nullptr*/) {
1033
   void MenuEditItemBase::draw_edit_screen(PGM_P const pstr, const char* const value/*=nullptr*/) {
1034
     ui.encoder_direction_normal();
1034
     ui.encoder_direction_normal();
1035
-
1036
     uint8_t n = lcd_put_u8str_ind_P(0, 1, pstr, itemIndex, itemString, LCD_WIDTH - 1);
1035
     uint8_t n = lcd_put_u8str_ind_P(0, 1, pstr, itemIndex, itemString, LCD_WIDTH - 1);
1037
     if (value != nullptr) {
1036
     if (value != nullptr) {
1038
-      lcd_put_wchar(':');
1039
-      int len = utf8_strlen(value);
1040
-      const lcd_uint_t valrow = (n < len + 1) ? 2 : 1;          // Value on the next row if it won't fit
1041
-      lcd_put_wchar((LCD_WIDTH - 1) - (len + 1), valrow, ' ');  // Right-justified, padded, leading space
1037
+      lcd_put_wchar(':'); n--;
1038
+      const uint8_t len = utf8_strlen(value) + 1;   // Plus one for a leading space
1039
+      const lcd_uint_t valrow = n < len ? 2 : 1;    // Value on the next row if it won't fit
1040
+      lcd_put_wchar(LCD_WIDTH - len, valrow, ' ');  // Right-justified, padded, leading space
1042
       lcd_put_u8str(value);
1041
       lcd_put_u8str(value);
1043
     }
1042
     }
1044
   }
1043
   }

+ 5
- 5
Marlin/src/lcd/language/language_en.h View File

309
   PROGMEM Language_Str MSG_XY_FREQUENCY_LIMIT              = _UxGT("Frequency max");
309
   PROGMEM Language_Str MSG_XY_FREQUENCY_LIMIT              = _UxGT("Frequency max");
310
   PROGMEM Language_Str MSG_XY_FREQUENCY_FEEDRATE           = _UxGT("Feed min");
310
   PROGMEM Language_Str MSG_XY_FREQUENCY_FEEDRATE           = _UxGT("Feed min");
311
   PROGMEM Language_Str MSG_STEPS_PER_MM                    = _UxGT("Steps/mm");
311
   PROGMEM Language_Str MSG_STEPS_PER_MM                    = _UxGT("Steps/mm");
312
-  PROGMEM Language_Str MSG_A_STEPS                         = LCD_STR_A _UxGT("steps/mm");
313
-  PROGMEM Language_Str MSG_B_STEPS                         = LCD_STR_B _UxGT("steps/mm");
314
-  PROGMEM Language_Str MSG_C_STEPS                         = LCD_STR_C _UxGT("steps/mm");
315
-  PROGMEM Language_Str MSG_E_STEPS                         = _UxGT("Esteps/mm");
316
-  PROGMEM Language_Str MSG_EN_STEPS                        = _UxGT("*steps/mm");
312
+  PROGMEM Language_Str MSG_A_STEPS                         = LCD_STR_A _UxGT(" Steps/mm");
313
+  PROGMEM Language_Str MSG_B_STEPS                         = LCD_STR_B _UxGT(" Steps/mm");
314
+  PROGMEM Language_Str MSG_C_STEPS                         = LCD_STR_C _UxGT(" Steps/mm");
315
+  PROGMEM Language_Str MSG_E_STEPS                         = _UxGT("E steps/mm");
316
+  PROGMEM Language_Str MSG_EN_STEPS                        = _UxGT("* Steps/mm");
317
   PROGMEM Language_Str MSG_TEMPERATURE                     = _UxGT("Temperature");
317
   PROGMEM Language_Str MSG_TEMPERATURE                     = _UxGT("Temperature");
318
   PROGMEM Language_Str MSG_MOTION                          = _UxGT("Motion");
318
   PROGMEM Language_Str MSG_MOTION                          = _UxGT("Motion");
319
   PROGMEM Language_Str MSG_FILAMENT                        = _UxGT("Filament");
319
   PROGMEM Language_Str MSG_FILAMENT                        = _UxGT("Filament");

+ 3
- 4
Marlin/src/lcd/lcdprint.cpp View File

37
 lcd_uint_t lcd_put_u8str_ind_P(PGM_P const pstr, const int8_t ind, PGM_P const inStr/*=nullptr*/, const lcd_uint_t maxlen/*=LCD_WIDTH*/) {
37
 lcd_uint_t lcd_put_u8str_ind_P(PGM_P const pstr, const int8_t ind, PGM_P const inStr/*=nullptr*/, const lcd_uint_t maxlen/*=LCD_WIDTH*/) {
38
   uint8_t *p = (uint8_t*)pstr;
38
   uint8_t *p = (uint8_t*)pstr;
39
   int8_t n = maxlen;
39
   int8_t n = maxlen;
40
-  for (; n > 0; n--) {
40
+  while (n > 0) {
41
     wchar_t ch;
41
     wchar_t ch;
42
     p = get_utf8_value_cb(p, read_byte_rom, &ch);
42
     p = get_utf8_value_cb(p, read_byte_rom, &ch);
43
     if (!ch) break;
43
     if (!ch) break;
44
     if (ch == '=' || ch == '~' || ch == '*') {
44
     if (ch == '=' || ch == '~' || ch == '*') {
45
-      // lcd_put_int(ind); n--; if (ind >= 10) n--;
46
       if (ind >= 0) {
45
       if (ind >= 0) {
47
         if (ch == '*') { lcd_put_wchar('E'); n--; }
46
         if (ch == '*') { lcd_put_wchar('E'); n--; }
48
         if (n) { lcd_put_wchar(ind + ((ch == '=') ? '0' : LCD_FIRST_TOOL)); n--; }
47
         if (n) { lcd_put_wchar(ind + ((ch == '=') ? '0' : LCD_FIRST_TOOL)); n--; }
49
       }
48
       }
50
       else {
49
       else {
51
         PGM_P const b = ind == -2 ? GET_TEXT(MSG_CHAMBER) : GET_TEXT(MSG_BED);
50
         PGM_P const b = ind == -2 ? GET_TEXT(MSG_CHAMBER) : GET_TEXT(MSG_BED);
52
-        lcd_put_u8str_P(b);
53
-        n -= utf8_strlen_P(b);
51
+        n -= lcd_put_u8str_max_P(b, n * (MENU_FONT_WIDTH)) / (MENU_FONT_WIDTH);
54
       }
52
       }
55
       if (n) n -= lcd_put_u8str_max_P((PGM_P)p, n * (MENU_FONT_WIDTH)) / (MENU_FONT_WIDTH);
53
       if (n) n -= lcd_put_u8str_max_P((PGM_P)p, n * (MENU_FONT_WIDTH)) / (MENU_FONT_WIDTH);
56
       continue;
54
       continue;
61
     }
59
     }
62
 
60
 
63
     lcd_put_wchar(ch);
61
     lcd_put_wchar(ch);
62
+    n--;
64
   }
63
   }
65
   return n;
64
   return n;
66
 }
65
 }

+ 1
- 0
Marlin/src/lcd/menu/menu.cpp View File

186
 DEFINE_MENU_EDIT_ITEM(float5);      // 12345      right-justified
186
 DEFINE_MENU_EDIT_ITEM(float5);      // 12345      right-justified
187
 DEFINE_MENU_EDIT_ITEM(float5_25);   // 12345      right-justified (25 increment)
187
 DEFINE_MENU_EDIT_ITEM(float5_25);   // 12345      right-justified (25 increment)
188
 DEFINE_MENU_EDIT_ITEM(float51);     // 1234.5     right-justified
188
 DEFINE_MENU_EDIT_ITEM(float51);     // 1234.5     right-justified
189
+DEFINE_MENU_EDIT_ITEM(float31sign); // +12.3
189
 DEFINE_MENU_EDIT_ITEM(float41sign); // +123.4
190
 DEFINE_MENU_EDIT_ITEM(float41sign); // +123.4
190
 DEFINE_MENU_EDIT_ITEM(float51sign); // +1234.5
191
 DEFINE_MENU_EDIT_ITEM(float51sign); // +1234.5
191
 DEFINE_MENU_EDIT_ITEM(float52sign); // +123.45
192
 DEFINE_MENU_EDIT_ITEM(float52sign); // +123.45

+ 1
- 0
Marlin/src/lcd/menu/menu.h View File

296
 DEFINE_MENU_EDIT_ITEM_TYPE(float5      ,float    ,ftostr5rj       ,   1     );   // 12345      right-justified
296
 DEFINE_MENU_EDIT_ITEM_TYPE(float5      ,float    ,ftostr5rj       ,   1     );   // 12345      right-justified
297
 DEFINE_MENU_EDIT_ITEM_TYPE(float5_25   ,float    ,ftostr5rj       ,   0.04f );   // 12345      right-justified (25 increment)
297
 DEFINE_MENU_EDIT_ITEM_TYPE(float5_25   ,float    ,ftostr5rj       ,   0.04f );   // 12345      right-justified (25 increment)
298
 DEFINE_MENU_EDIT_ITEM_TYPE(float51     ,float    ,ftostr51rj      ,  10     );   // 1234.5     right-justified
298
 DEFINE_MENU_EDIT_ITEM_TYPE(float51     ,float    ,ftostr51rj      ,  10     );   // 1234.5     right-justified
299
+DEFINE_MENU_EDIT_ITEM_TYPE(float31sign ,float    ,ftostr31sign    ,  10     );   // +12.3
299
 DEFINE_MENU_EDIT_ITEM_TYPE(float41sign ,float    ,ftostr41sign    ,  10     );   // +123.4
300
 DEFINE_MENU_EDIT_ITEM_TYPE(float41sign ,float    ,ftostr41sign    ,  10     );   // +123.4
300
 DEFINE_MENU_EDIT_ITEM_TYPE(float51sign ,float    ,ftostr51sign    ,  10     );   // +1234.5
301
 DEFINE_MENU_EDIT_ITEM_TYPE(float51sign ,float    ,ftostr51sign    ,  10     );   // +1234.5
301
 DEFINE_MENU_EDIT_ITEM_TYPE(float52sign ,float    ,ftostr52sign    , 100     );   // +123.45
302
 DEFINE_MENU_EDIT_ITEM_TYPE(float52sign ,float    ,ftostr52sign    , 100     );   // +123.45

+ 28
- 19
Marlin/src/lcd/menu/menu_advanced.cpp View File

435
     END_MENU();
435
     END_MENU();
436
   }
436
   }
437
 
437
 
438
-  // M205 Jerk
439
-  void menu_advanced_jerk() {
440
-    START_MENU();
441
-    BACK_ITEM(MSG_ADVANCED_SETTINGS);
438
+  #if HAS_CLASSIC_JERK
442
 
439
 
443
-    #if HAS_JUNCTION_DEVIATION
444
-      #if ENABLED(LIN_ADVANCE)
445
-        EDIT_ITEM(float43, MSG_JUNCTION_DEVIATION, &planner.junction_deviation_mm, 0.001f, 0.3f, planner.recalculate_max_e_jerk);
446
-      #else
447
-        EDIT_ITEM(float43, MSG_JUNCTION_DEVIATION, &planner.junction_deviation_mm, 0.001f, 0.5f);
440
+    void menu_advanced_jerk() {
441
+      START_MENU();
442
+      BACK_ITEM(MSG_ADVANCED_SETTINGS);
443
+
444
+      #if HAS_JUNCTION_DEVIATION
445
+        #if ENABLED(LIN_ADVANCE)
446
+          EDIT_ITEM(float43, MSG_JUNCTION_DEVIATION, &planner.junction_deviation_mm, 0.001f, 0.3f, planner.recalculate_max_e_jerk);
447
+        #else
448
+          EDIT_ITEM(float43, MSG_JUNCTION_DEVIATION, &planner.junction_deviation_mm, 0.001f, 0.5f);
449
+        #endif
448
       #endif
450
       #endif
449
-    #endif
450
-    #if HAS_CLASSIC_JERK
451
+
451
       constexpr xyze_float_t max_jerk_edit =
452
       constexpr xyze_float_t max_jerk_edit =
452
         #ifdef MAX_JERK_EDIT_VALUES
453
         #ifdef MAX_JERK_EDIT_VALUES
453
           MAX_JERK_EDIT_VALUES
454
           MAX_JERK_EDIT_VALUES
468
       #if HAS_CLASSIC_E_JERK
469
       #if HAS_CLASSIC_E_JERK
469
         EDIT_ITEM_FAST(float52sign, MSG_VE_JERK, &planner.max_jerk.e, 0.1f, max_jerk_edit.e);
470
         EDIT_ITEM_FAST(float52sign, MSG_VE_JERK, &planner.max_jerk.e, 0.1f, max_jerk_edit.e);
470
       #endif
471
       #endif
471
-    #endif
472
 
472
 
473
-    END_MENU();
474
-  }
473
+      END_MENU();
474
+    }
475
+
476
+  #endif
475
 
477
 
476
   // M851 - Z Probe Offsets
478
   // M851 - Z Probe Offsets
477
   #if HAS_BED_PROBE
479
   #if HAS_BED_PROBE
479
       START_MENU();
481
       START_MENU();
480
       BACK_ITEM(MSG_ADVANCED_SETTINGS);
482
       BACK_ITEM(MSG_ADVANCED_SETTINGS);
481
       #if HAS_PROBE_XY_OFFSET
483
       #if HAS_PROBE_XY_OFFSET
482
-        EDIT_ITEM(float51sign, MSG_ZPROBE_XOFFSET, &probe.offset.x, -(X_BED_SIZE), X_BED_SIZE);
483
-        EDIT_ITEM(float51sign, MSG_ZPROBE_YOFFSET, &probe.offset.y, -(Y_BED_SIZE), Y_BED_SIZE);
484
+        EDIT_ITEM(float31sign, MSG_ZPROBE_XOFFSET, &probe.offset.x, -(X_BED_SIZE), X_BED_SIZE);
485
+        EDIT_ITEM(float31sign, MSG_ZPROBE_YOFFSET, &probe.offset.y, -(Y_BED_SIZE), Y_BED_SIZE);
484
       #endif
486
       #endif
485
       EDIT_ITEM(LCD_Z_OFFSET_TYPE, MSG_ZPROBE_ZOFFSET, &probe.offset.z, Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX);
487
       EDIT_ITEM(LCD_Z_OFFSET_TYPE, MSG_ZPROBE_ZOFFSET, &probe.offset.z, Z_PROBE_OFFSET_RANGE_MIN, Z_PROBE_OFFSET_RANGE_MAX);
486
       END_MENU();
488
       END_MENU();
500
   EDIT_QSTEPS(C);
502
   EDIT_QSTEPS(C);
501
 
503
 
502
   #if ENABLED(DISTINCT_E_FACTORS)
504
   #if ENABLED(DISTINCT_E_FACTORS)
503
-    EDIT_ITEM_FAST(float51, MSG_E_STEPS, &planner.settings.axis_steps_per_mm[E_AXIS_N(active_extruder)], 5, 9999, []{ planner.refresh_positioning(); });
504
     LOOP_L_N(n, E_STEPPERS)
505
     LOOP_L_N(n, E_STEPPERS)
505
       EDIT_ITEM_FAST_N(float51, n, MSG_EN_STEPS, &planner.settings.axis_steps_per_mm[E_AXIS_N(n)], 5, 9999, []{ _planner_refresh_e_positioning(MenuItemBase::itemIndex); });
506
       EDIT_ITEM_FAST_N(float51, n, MSG_EN_STEPS, &planner.settings.axis_steps_per_mm[E_AXIS_N(n)], 5, 9999, []{ _planner_refresh_e_positioning(MenuItemBase::itemIndex); });
506
   #elif E_STEPPERS
507
   #elif E_STEPPERS
535
     // M201 - Acceleration items
536
     // M201 - Acceleration items
536
     SUBMENU(MSG_ACCELERATION, menu_advanced_acceleration);
537
     SUBMENU(MSG_ACCELERATION, menu_advanced_acceleration);
537
 
538
 
538
-    // M205 - Max Jerk
539
-    SUBMENU(MSG_JERK, menu_advanced_jerk);
539
+    #if HAS_CLASSIC_JERK
540
+      // M205 - Max Jerk
541
+      SUBMENU(MSG_JERK, menu_advanced_jerk);
542
+    #elif HAS_JUNCTION_DEVIATION
543
+      EDIT_ITEM(float43, MSG_JUNCTION_DEVIATION, &planner.junction_deviation_mm, 0.001f, 0.3f
544
+        #if ENABLED(LIN_ADVANCE)
545
+          , planner.recalculate_max_e_jerk
546
+        #endif
547
+      );
548
+    #endif
540
 
549
 
541
     // M851 - Z Probe Offsets
550
     // M851 - Z Probe Offsets
542
     #if HAS_BED_PROBE
551
     #if HAS_BED_PROBE

+ 1
- 0
Marlin/src/lcd/menu/menu_configuration.cpp View File

307
     #define MAXTEMP_ALL _MAX(REPEAT(HOTENDS, _MAXTEMP_ITEM) 0)
307
     #define MAXTEMP_ALL _MAX(REPEAT(HOTENDS, _MAXTEMP_ITEM) 0)
308
     const uint8_t m = MenuItemBase::itemIndex;
308
     const uint8_t m = MenuItemBase::itemIndex;
309
     START_MENU();
309
     START_MENU();
310
+    STATIC_ITEM_P(ui.get_preheat_label(m), SS_CENTER|SS_INVERT);
310
     BACK_ITEM(MSG_CONFIGURATION);
311
     BACK_ITEM(MSG_CONFIGURATION);
311
     #if HAS_FAN
312
     #if HAS_FAN
312
       editable.uint8 = uint8_t(ui.material_preset[m].fan_speed);
313
       editable.uint8 = uint8_t(ui.material_preset[m].fan_speed);

+ 1
- 1
Marlin/src/lcd/menu/menu_motion.cpp View File

114
       ui.manual_move.processing ? destination[axis] : current_position[axis] + TERN0(IS_KINEMATIC, ui.manual_move.offset),
114
       ui.manual_move.processing ? destination[axis] : current_position[axis] + TERN0(IS_KINEMATIC, ui.manual_move.offset),
115
       axis
115
       axis
116
     );
116
     );
117
-    MenuEditItemBase::draw_edit_screen(name, ui.manual_move.menu_scale >= 0.1f ? ftostr41sign(pos) : ftostr43sign(pos));
117
+    MenuEditItemBase::draw_edit_screen(name, ui.manual_move.menu_scale >= 0.1f ? ftostr41sign(pos) : ftostr63(pos));
118
   }
118
   }
119
 }
119
 }
120
 void lcd_move_x() { _lcd_move_xyz(GET_TEXT(MSG_MOVE_X), X_AXIS); }
120
 void lcd_move_x() { _lcd_move_xyz(GET_TEXT(MSG_MOVE_X), X_AXIS); }

+ 30
- 17
Marlin/src/libs/numtostr.cpp View File

31
 #define DIGIMOD(n, f) DIGIT((n)/(f) % 10)
31
 #define DIGIMOD(n, f) DIGIT((n)/(f) % 10)
32
 #define RJDIGIT(n, f) ((n) >= (f) ? DIGIMOD(n, f) : ' ')
32
 #define RJDIGIT(n, f) ((n) >= (f) ? DIGIMOD(n, f) : ' ')
33
 #define MINUSOR(n, alt) (n >= 0 ? (alt) : (n = -n, '-'))
33
 #define MINUSOR(n, alt) (n >= 0 ? (alt) : (n = -n, '-'))
34
+#define INTFLOAT(V,N) (((V) * 10 * pow(10, N) + ((V) < 0 ? -5: 5)) / 10)      // pow10?
35
+#define UINTFLOAT(V,N) INTFLOAT((V) < 0 ? -(V) : (V), N)
34
 
36
 
35
 // Convert a full-range unsigned 8bit int to a percentage
37
 // Convert a full-range unsigned 8bit int to a percentage
36
 const char* ui8tostr4pctrj(const uint8_t i) {
38
 const char* ui8tostr4pctrj(const uint8_t i) {
166
 
168
 
167
 // Convert unsigned float to string with 1.23 format
169
 // Convert unsigned float to string with 1.23 format
168
 const char* ftostr12ns(const float &f) {
170
 const char* ftostr12ns(const float &f) {
169
-  const long i = ((f < 0 ? -f : f) * 1000 + 5) / 10;
171
+  const long i = UINTFLOAT(f, 2);
170
   conv[3] = DIGIMOD(i, 100);
172
   conv[3] = DIGIMOD(i, 100);
171
   conv[4] = '.';
173
   conv[4] = '.';
172
   conv[5] = DIGIMOD(i, 10);
174
   conv[5] = DIGIMOD(i, 10);
176
 
178
 
177
 // Convert unsigned float to string with 12.3 format
179
 // Convert unsigned float to string with 12.3 format
178
 const char* ftostr31ns(const float &f) {
180
 const char* ftostr31ns(const float &f) {
179
-  const long i = ((f < 0 ? -f : f) * 100 + 5) / 10;
181
+  const long i = UINTFLOAT(f, 1);
180
   conv[3] = DIGIMOD(i, 100);
182
   conv[3] = DIGIMOD(i, 100);
181
   conv[4] = DIGIMOD(i, 10);
183
   conv[4] = DIGIMOD(i, 10);
182
   conv[5] = '.';
184
   conv[5] = '.';
186
 
188
 
187
 // Convert unsigned float to string with 123.4 format
189
 // Convert unsigned float to string with 123.4 format
188
 const char* ftostr41ns(const float &f) {
190
 const char* ftostr41ns(const float &f) {
189
-  const long i = ((f < 0 ? -f : f) * 100 + 5) / 10;
191
+  const long i = UINTFLOAT(f, 1);
190
   conv[2] = DIGIMOD(i, 1000);
192
   conv[2] = DIGIMOD(i, 1000);
191
   conv[3] = DIGIMOD(i, 100);
193
   conv[3] = DIGIMOD(i, 100);
192
   conv[4] = DIGIMOD(i, 10);
194
   conv[4] = DIGIMOD(i, 10);
198
 // Convert signed float to fixed-length string with 12.34 / _2.34 / -2.34 or -23.45 / 123.45 format
200
 // Convert signed float to fixed-length string with 12.34 / _2.34 / -2.34 or -23.45 / 123.45 format
199
 const char* ftostr42_52(const float &f) {
201
 const char* ftostr42_52(const float &f) {
200
   if (f <= -10 || f >= 100) return ftostr52(f); // -23.45 / 123.45
202
   if (f <= -10 || f >= 100) return ftostr52(f); // -23.45 / 123.45
201
-  long i = (f * 1000 + (f < 0 ? -5: 5)) / 10;
203
+  long i = INTFLOAT(f, 2);
202
   conv[2] = (f >= 0 && f < 10) ? ' ' : MINUSOR(i, DIGIMOD(i, 1000));
204
   conv[2] = (f >= 0 && f < 10) ? ' ' : MINUSOR(i, DIGIMOD(i, 1000));
203
   conv[3] = DIGIMOD(i, 100);
205
   conv[3] = DIGIMOD(i, 100);
204
   conv[4] = '.';
206
   conv[4] = '.';
209
 
211
 
210
 // Convert signed float to fixed-length string with 023.45 / -23.45 format
212
 // Convert signed float to fixed-length string with 023.45 / -23.45 format
211
 const char* ftostr52(const float &f) {
213
 const char* ftostr52(const float &f) {
212
-  long i = (f * 1000 + (f < 0 ? -5: 5)) / 10;
214
+  long i = INTFLOAT(f, 2);
213
   conv[1] = MINUSOR(i, DIGIMOD(i, 10000));
215
   conv[1] = MINUSOR(i, DIGIMOD(i, 10000));
214
   conv[2] = DIGIMOD(i, 1000);
216
   conv[2] = DIGIMOD(i, 1000);
215
   conv[3] = DIGIMOD(i, 100);
217
   conv[3] = DIGIMOD(i, 100);
222
 // Convert signed float to fixed-length string with 12.345 / _2.345 / -2.345 or -23.45 / 123.45 format
224
 // Convert signed float to fixed-length string with 12.345 / _2.345 / -2.345 or -23.45 / 123.45 format
223
 const char* ftostr53_63(const float &f) {
225
 const char* ftostr53_63(const float &f) {
224
   if (f <= -10 || f >= 100) return ftostr63(f); // -23.456 / 123.456
226
   if (f <= -10 || f >= 100) return ftostr63(f); // -23.456 / 123.456
225
-  long i = (f * 10000 + (f < 0 ? -5: 5)) / 10;
227
+  long i = INTFLOAT(f, 3);
226
   conv[1] = (f >= 0 && f < 10) ? ' ' : MINUSOR(i, DIGIMOD(i, 10000));
228
   conv[1] = (f >= 0 && f < 10) ? ' ' : MINUSOR(i, DIGIMOD(i, 10000));
227
   conv[2] = DIGIMOD(i, 1000);
229
   conv[2] = DIGIMOD(i, 1000);
228
   conv[3] = '.';
230
   conv[3] = '.';
234
 
236
 
235
 // Convert signed float to fixed-length string with 023.456 / -23.456 format
237
 // Convert signed float to fixed-length string with 023.456 / -23.456 format
236
 const char* ftostr63(const float &f) {
238
 const char* ftostr63(const float &f) {
237
-  long i = (f * 10000 + (f < 0 ? -5: 5)) / 10;
239
+  long i = INTFLOAT(f, 3);
238
   conv[0] = MINUSOR(i, DIGIMOD(i, 100000));
240
   conv[0] = MINUSOR(i, DIGIMOD(i, 100000));
239
   conv[1] = DIGIMOD(i, 10000);
241
   conv[1] = DIGIMOD(i, 10000);
240
   conv[2] = DIGIMOD(i, 1000);
242
   conv[2] = DIGIMOD(i, 1000);
249
 
251
 
250
   // Convert float to rj string with 1234, _123, -123, _-12, 12.3, _1.2, or -1.2 format
252
   // Convert float to rj string with 1234, _123, -123, _-12, 12.3, _1.2, or -1.2 format
251
   const char* ftostr4sign(const float &f) {
253
   const char* ftostr4sign(const float &f) {
252
-    const int i = (f * 100 + (f < 0 ? -5: 5)) / 10;
254
+    const int i = INTFLOAT(f, 1);
253
     if (!WITHIN(i, -99, 999)) return i16tostr4signrj((int)f);
255
     if (!WITHIN(i, -99, 999)) return i16tostr4signrj((int)f);
254
     const bool neg = i < 0;
256
     const bool neg = i < 0;
255
     const int ii = neg ? -i : i;
257
     const int ii = neg ? -i : i;
262
 
264
 
263
 #endif
265
 #endif
264
 
266
 
267
+// Convert float to fixed-length string with +12.3 / -12.3 format
268
+const char* ftostr31sign(const float &f) {
269
+  int i = INTFLOAT(f, 1);
270
+  conv[2] = MINUSOR(i, '+');
271
+  conv[3] = DIGIMOD(i, 100);
272
+  conv[4] = DIGIMOD(i, 10);
273
+  conv[5] = '.';
274
+  conv[6] = DIGIMOD(i, 1);
275
+  return &conv[2];
276
+}
277
+
265
 // Convert float to fixed-length string with +123.4 / -123.4 format
278
 // Convert float to fixed-length string with +123.4 / -123.4 format
266
 const char* ftostr41sign(const float &f) {
279
 const char* ftostr41sign(const float &f) {
267
-  int i = (f * 100 + (f < 0 ? -5: 5)) / 10;
280
+  int i = INTFLOAT(f, 1);
268
   conv[1] = MINUSOR(i, '+');
281
   conv[1] = MINUSOR(i, '+');
269
   conv[2] = DIGIMOD(i, 1000);
282
   conv[2] = DIGIMOD(i, 1000);
270
   conv[3] = DIGIMOD(i, 100);
283
   conv[3] = DIGIMOD(i, 100);
276
 
289
 
277
 // Convert signed float to string (6 digit) with -1.234 / _0.000 / +1.234 format
290
 // Convert signed float to string (6 digit) with -1.234 / _0.000 / +1.234 format
278
 const char* ftostr43sign(const float &f, char plus/*=' '*/) {
291
 const char* ftostr43sign(const float &f, char plus/*=' '*/) {
279
-  long i = (f * 10000 + (f < 0 ? -5: 5)) / 10;
292
+  long i = INTFLOAT(f, 3);
280
   conv[1] = i ? MINUSOR(i, plus) : ' ';
293
   conv[1] = i ? MINUSOR(i, plus) : ' ';
281
   conv[2] = DIGIMOD(i, 1000);
294
   conv[2] = DIGIMOD(i, 1000);
282
   conv[3] = '.';
295
   conv[3] = '.';
288
 
301
 
289
 // Convert signed float to string (5 digit) with -1.2345 / _0.0000 / +1.2345 format
302
 // Convert signed float to string (5 digit) with -1.2345 / _0.0000 / +1.2345 format
290
 const char* ftostr54sign(const float &f, char plus/*=' '*/) {
303
 const char* ftostr54sign(const float &f, char plus/*=' '*/) {
291
-  long i = (f * 100000 + (f < 0 ? -5: 5)) / 10;
304
+  long i = INTFLOAT(f, 4);
292
   conv[0] = i ? MINUSOR(i, plus) : ' ';
305
   conv[0] = i ? MINUSOR(i, plus) : ' ';
293
   conv[1] = DIGIMOD(i, 10000);
306
   conv[1] = DIGIMOD(i, 10000);
294
   conv[2] = '.';
307
   conv[2] = '.';
301
 
314
 
302
 // Convert unsigned float to rj string with 12345 format
315
 // Convert unsigned float to rj string with 12345 format
303
 const char* ftostr5rj(const float &f) {
316
 const char* ftostr5rj(const float &f) {
304
-  const long i = ((f < 0 ? -f : f) * 10 + 5) / 10;
317
+  const long i = UINTFLOAT(f, 0);
305
   return ui16tostr5rj(i);
318
   return ui16tostr5rj(i);
306
 }
319
 }
307
 
320
 
308
 // Convert signed float to string with +1234.5 format
321
 // Convert signed float to string with +1234.5 format
309
 const char* ftostr51sign(const float &f) {
322
 const char* ftostr51sign(const float &f) {
310
-  long i = (f * 100 + (f < 0 ? -5: 5)) / 10;
323
+  long i = INTFLOAT(f, 1);
311
   conv[0] = MINUSOR(i, '+');
324
   conv[0] = MINUSOR(i, '+');
312
   conv[1] = DIGIMOD(i, 10000);
325
   conv[1] = DIGIMOD(i, 10000);
313
   conv[2] = DIGIMOD(i, 1000);
326
   conv[2] = DIGIMOD(i, 1000);
320
 
333
 
321
 // Convert signed float to string with +123.45 format
334
 // Convert signed float to string with +123.45 format
322
 const char* ftostr52sign(const float &f) {
335
 const char* ftostr52sign(const float &f) {
323
-  long i = (f * 1000 + (f < 0 ? -5: 5)) / 10;
336
+  long i = INTFLOAT(f, 2);
324
   conv[0] = MINUSOR(i, '+');
337
   conv[0] = MINUSOR(i, '+');
325
   conv[1] = DIGIMOD(i, 10000);
338
   conv[1] = DIGIMOD(i, 10000);
326
   conv[2] = DIGIMOD(i, 1000);
339
   conv[2] = DIGIMOD(i, 1000);
333
 
346
 
334
 // Convert signed float to string with +12.345 format
347
 // Convert signed float to string with +12.345 format
335
 const char* ftostr53sign(const float &f) {
348
 const char* ftostr53sign(const float &f) {
336
-  long i = (f * 10000 + (f < 0 ? -5: 5)) / 10;
349
+  long i = INTFLOAT(f, 3);
337
   conv[0] = MINUSOR(i, '+');
350
   conv[0] = MINUSOR(i, '+');
338
   conv[1] = DIGIMOD(i, 10000);
351
   conv[1] = DIGIMOD(i, 10000);
339
   conv[2] = DIGIMOD(i, 1000);
352
   conv[2] = DIGIMOD(i, 1000);
346
 
359
 
347
 // Convert unsigned float to string with ____4.5, __34.5, _234.5, 1234.5 format
360
 // Convert unsigned float to string with ____4.5, __34.5, _234.5, 1234.5 format
348
 const char* ftostr51rj(const float &f) {
361
 const char* ftostr51rj(const float &f) {
349
-  const long i = ((f < 0 ? -f : f) * 100 + 5) / 10;
362
+  const long i = UINTFLOAT(f, 1);
350
   conv[0] = ' ';
363
   conv[0] = ' ';
351
   conv[1] = RJDIGIT(i, 10000);
364
   conv[1] = RJDIGIT(i, 10000);
352
   conv[2] = RJDIGIT(i, 1000);
365
   conv[2] = RJDIGIT(i, 1000);
359
 
372
 
360
 // Convert signed float to space-padded string with -_23.4_ format
373
 // Convert signed float to space-padded string with -_23.4_ format
361
 const char* ftostr52sp(const float &f) {
374
 const char* ftostr52sp(const float &f) {
362
-  long i = (f * 1000 + (f < 0 ? -5: 5)) / 10;
375
+  long i = INTFLOAT(f, 2);
363
   uint8_t dig;
376
   uint8_t dig;
364
   conv[0] = MINUSOR(i, ' ');
377
   conv[0] = MINUSOR(i, ' ');
365
   conv[1] = RJDIGIT(i, 10000);
378
   conv[1] = RJDIGIT(i, 10000);

+ 3
- 0
Marlin/src/libs/numtostr.h View File

76
 // Convert signed float to fixed-length string with 023.456 / -23.456 format
76
 // Convert signed float to fixed-length string with 023.456 / -23.456 format
77
 const char* ftostr63(const float &x);
77
 const char* ftostr63(const float &x);
78
 
78
 
79
+// Convert float to fixed-length string with +12.3 / -12.3 format
80
+const char* ftostr31sign(const float &x);
81
+
79
 // Convert float to fixed-length string with +123.4 / -123.4 format
82
 // Convert float to fixed-length string with +123.4 / -123.4 format
80
 const char* ftostr41sign(const float &x);
83
 const char* ftostr41sign(const float &x);
81
 
84
 

+ 1
- 1
Marlin/src/module/configuration_store.cpp View File

148
 typedef struct {     bool X, Y, Z, X2, Y2, Z2, Z3, Z4, E0, E1, E2, E3, E4, E5, E6, E7; } tmc_stealth_enabled_t;
148
 typedef struct {     bool X, Y, Z, X2, Y2, Z2, Z3, Z4, E0, E1, E2, E3, E4, E5, E6, E7; } tmc_stealth_enabled_t;
149
 
149
 
150
 // Limit an index to an array size
150
 // Limit an index to an array size
151
-#define ALIM(I,ARR) _MIN(I, COUNT(ARR) - 1)
151
+#define ALIM(I,ARR) _MIN(I, signed(COUNT(ARR) - 1))
152
 
152
 
153
 // Defaults for reset / fill in on load
153
 // Defaults for reset / fill in on load
154
 static const uint32_t   _DMA[] PROGMEM = DEFAULT_MAX_ACCELERATION;
154
 static const uint32_t   _DMA[] PROGMEM = DEFAULT_MAX_ACCELERATION;

Loading…
Cancel
Save