@@ -208,12 +208,14 @@ void GcodeSuite::M493() {
208208 if (!parser.seen_any ())
209209 flag.report = true ;
210210
211+ ft_config_t &c = ftMotion.cfg ;
212+
211213 // Parse 'S' mode parameter.
212214 if (parser.seen (' S' )) {
213215 const bool active = parser.value_bool ();
214- if (active != ftMotion. cfg .active ) {
216+ if (active != c .active ) {
215217 stepper.ftMotion_syncPosition ();
216- ftMotion. cfg .active = active;
218+ c .active = active;
217219 flag.report = true ;
218220 }
219221 }
@@ -228,8 +230,8 @@ void GcodeSuite::M493() {
228230 return ;
229231 }
230232 auto set_shaper = [&](const AxisEnum axis, ftMotionShaper_t newsh) {
231- if (newsh != ftMotion. cfg .shaper [axis]) {
232- ftMotion. cfg .shaper [axis] = newsh;
233+ if (newsh != c .shaper [axis]) {
234+ c .shaper [axis] = newsh;
233235 flag.update = flag.report = true ;
234236 }
235237 };
@@ -243,8 +245,8 @@ void GcodeSuite::M493() {
243245 // Parse 'H' Axis Synchronization parameter.
244246 if (parser.seenval (' H' )) {
245247 const bool enabled = parser.value_bool ();
246- if (enabled != ftMotion. cfg .axis_sync_enabled ) {
247- ftMotion. cfg .axis_sync_enabled = enabled;
248+ if (enabled != c .axis_sync_enabled ) {
249+ c .axis_sync_enabled = enabled;
248250 flag.report = true ;
249251 }
250252 }
@@ -263,30 +265,26 @@ void GcodeSuite::M493() {
263265 case dynFreqMode_MASS_BASED:
264266 #endif
265267 case dynFreqMode_DISABLED:
266- ftMotion. cfg .dynFreqMode = val;
268+ c .dynFreqMode = val;
267269 flag.report = true ;
268270 break ;
269271 default :
270272 SERIAL_ECHOLN (F (" ?Invalid " ), F (" (D)ynamic Frequency Mode value." ));
271273 break ;
272274 }
273275 }
274- else {
275- SERIAL_ECHOLNPGM (" ?Wrong shaper for (D)ynamic Frequency Mode " , ftMotion.cfg .dynFreqMode , " ." );
276- }
276+ else
277+ SERIAL_ECHOLNPGM (" ?Shaper required for (D)ynamic Frequency Mode " , c.dynFreqMode , " ." );
277278 }
278279
279- const bool modeUsesDynFreq = (
280- TERN0 (HAS_DYNAMIC_FREQ_MM, ftMotion.cfg .dynFreqMode == dynFreqMode_Z_BASED)
281- || TERN0 (HAS_DYNAMIC_FREQ_G, ftMotion.cfg .dynFreqMode == dynFreqMode_MASS_BASED)
282- );
280+ const bool modeUsesDynFreq = c.modeUsesDynFreq ();
283281
284282 #endif // HAS_DYNAMIC_FREQ
285283
286284 // Frequency parameter
287285 const bool seenA = parser.seenval (' A' );
288286 const float baseFreqVal = seenA ? parser.value_float () : 0 .0f ;
289- const bool goodBaseFreq = seenA && WITHIN (baseFreqVal, FTM_MIN_SHAPE_FREQ, (FTM_FS) / 2 );
287+ const bool goodBaseFreq = seenA && c. goodBaseFreq (baseFreqVal);
290288 if (seenA && !goodBaseFreq)
291289 SERIAL_ECHOLN (F (" ?Invalid " ), F (" (A) Base Frequency value. (" ), int (FTM_MIN_SHAPE_FREQ), C (' -' ), int ((FTM_FS) / 2 ), C (' )' ));
292290
@@ -301,14 +299,14 @@ void GcodeSuite::M493() {
301299 // Zeta parameter
302300 const bool seenI = parser.seenval (' I' );
303301 const float zetaVal = seenI ? parser.value_float () : 0 .0f ;
304- const bool goodZeta = seenI && WITHIN (zetaVal, 0 . 01f , 1 . 0f );
302+ const bool goodZeta = seenI && c. goodZeta (zetaVal);
305303 if (seenI && !goodZeta)
306304 SERIAL_ECHOLN (F (" ?Invalid " ), F (" (I) Zeta value. (0.01-1.0)" )); // Zeta out of range
307305
308306 // Vibration Tolerance parameter
309307 const bool seenQ = parser.seenval (' Q' );
310308 const float vtolVal = seenQ ? parser.value_float () : 0 .0f ;
311- const bool goodVtol = seenQ && WITHIN (vtolVal, 0 . 00f , 1 . 0f );
309+ const bool goodVtol = seenQ && c. goodVtol (vtolVal);
312310 if (seenQ && !goodVtol)
313311 SERIAL_ECHOLN (F (" ?Invalid " ), F (" (Q) Vibration Tolerance value. (0.0-1.0)" )); // VTol out of range
314312
@@ -323,18 +321,18 @@ void GcodeSuite::M493() {
323321 if (AXIS_IS_SHAPING (X)) {
324322 // TODO: Frequency minimum is dependent on the shaper used; the above check isn't always correct.
325323 if (goodBaseFreq) {
326- ftMotion. cfg .baseFreq .x = baseFreqVal;
324+ c .baseFreq .x = baseFreqVal;
327325 flag.update = flag.report = true ;
328326 }
329327 }
330328 else // Mode doesn't use frequency.
331- SERIAL_ECHOLNPGM (" ?Wrong mode for " , C (STEPPER_A_NAME), " [A] frequency." );
329+ SERIAL_ECHOLNPGM (" ?Wrong mode for " , C (STEPPER_A_NAME), " (A) frequency." );
332330 }
333331
334332 #if HAS_DYNAMIC_FREQ
335333 // Parse X frequency scaling parameter
336334 if (seenF && modeUsesDynFreq) {
337- ftMotion. cfg .dynFreqK .x = baseDynFreqVal;
335+ c .dynFreqK .x = baseDynFreqVal;
338336 flag.report = true ;
339337 }
340338 #endif
@@ -343,24 +341,24 @@ void GcodeSuite::M493() {
343341 if (seenI) {
344342 if (AXIS_IS_SHAPING (X)) {
345343 if (goodZeta) {
346- ftMotion. cfg .zeta .x = zetaVal;
344+ c .zeta .x = zetaVal;
347345 flag.update = true ;
348346 }
349347 }
350348 else
351- SERIAL_ECHOLNPGM (" ?Wrong mode for " , C (STEPPER_A_NAME), " zeta parameter." );
349+ SERIAL_ECHOLNPGM (" ?Wrong mode for " , C (STEPPER_A_NAME), " (I) zeta parameter." );
352350 }
353351
354352 // Parse X vtol parameter
355353 if (seenQ) {
356354 if (AXIS_IS_EISHAPING (X)) {
357355 if (goodVtol) {
358- ftMotion. cfg .vtol .x = vtolVal;
356+ c .vtol .x = vtolVal;
359357 flag.update = true ;
360358 }
361359 }
362360 else
363- SERIAL_ECHOLNPGM (" ?Wrong mode for " , C (STEPPER_A_NAME), " vtol parameter." );
361+ SERIAL_ECHOLNPGM (" ?Wrong mode for " , C (STEPPER_A_NAME), " (Q) vtol parameter." );
364362 }
365363 }
366364
@@ -374,18 +372,18 @@ void GcodeSuite::M493() {
374372 if (seenA) {
375373 if (AXIS_IS_SHAPING (Y)) {
376374 if (goodBaseFreq) {
377- ftMotion. cfg .baseFreq .y = baseFreqVal;
375+ c .baseFreq .y = baseFreqVal;
378376 flag.update = flag.report = true ;
379377 }
380378 }
381379 else // Mode doesn't use frequency.
382- SERIAL_ECHOLNPGM (" ?Wrong mode for " , C (STEPPER_B_NAME), " [A] frequency." );
380+ SERIAL_ECHOLNPGM (" ?Wrong mode for " , C (STEPPER_B_NAME), " (A) frequency." );
383381 }
384382
385383 #if HAS_DYNAMIC_FREQ
386384 // Parse Y frequency scaling parameter
387385 if (seenF && modeUsesDynFreq) {
388- ftMotion. cfg .dynFreqK .y = baseDynFreqVal;
386+ c .dynFreqK .y = baseDynFreqVal;
389387 flag.report = true ;
390388 }
391389 #endif
@@ -394,24 +392,24 @@ void GcodeSuite::M493() {
394392 if (seenI) {
395393 if (AXIS_IS_SHAPING (Y)) {
396394 if (goodZeta) {
397- ftMotion. cfg .zeta .y = zetaVal;
395+ c .zeta .y = zetaVal;
398396 flag.update = true ;
399397 }
400398 }
401399 else
402- SERIAL_ECHOLNPGM (" ?Wrong mode for " , C (STEPPER_B_NAME), " zeta parameter." );
400+ SERIAL_ECHOLNPGM (" ?Wrong mode for " , C (STEPPER_B_NAME), " (I) zeta parameter." );
403401 }
404402
405403 // Parse Y vtol parameter
406404 if (seenQ) {
407405 if (AXIS_IS_EISHAPING (Y)) {
408406 if (goodVtol) {
409- ftMotion. cfg .vtol .y = vtolVal;
407+ c .vtol .y = vtolVal;
410408 flag.update = true ;
411409 }
412410 }
413411 else
414- SERIAL_ECHOLNPGM (" ?Wrong mode for " , C (STEPPER_B_NAME), " vtol parameter." );
412+ SERIAL_ECHOLNPGM (" ?Wrong mode for " , C (STEPPER_B_NAME), " (Q) vtol parameter." );
415413 }
416414 }
417415
@@ -425,18 +423,18 @@ void GcodeSuite::M493() {
425423 if (seenA) {
426424 if (AXIS_IS_SHAPING (Z)) {
427425 if (goodBaseFreq) {
428- ftMotion. cfg .baseFreq .z = baseFreqVal;
426+ c .baseFreq .z = baseFreqVal;
429427 flag.update = flag.report = true ;
430428 }
431429 }
432430 else // Mode doesn't use frequency.
433- SERIAL_ECHOLNPGM (" ?Wrong mode for " , C (STEPPER_C_NAME), " [A] frequency." );
431+ SERIAL_ECHOLNPGM (" ?Wrong mode for " , C (STEPPER_C_NAME), " (A) frequency." );
434432 }
435433
436434 #if HAS_DYNAMIC_FREQ
437435 // Parse Z frequency scaling parameter
438436 if (seenF && modeUsesDynFreq) {
439- ftMotion. cfg .dynFreqK .z = baseDynFreqVal;
437+ c .dynFreqK .z = baseDynFreqVal;
440438 flag.report = true ;
441439 }
442440 #endif
@@ -445,24 +443,24 @@ void GcodeSuite::M493() {
445443 if (seenI) {
446444 if (AXIS_IS_SHAPING (Z)) {
447445 if (goodZeta) {
448- ftMotion. cfg .zeta .z = zetaVal;
446+ c .zeta .z = zetaVal;
449447 flag.update = true ;
450448 }
451449 }
452450 else
453- SERIAL_ECHOLNPGM (" ?Wrong mode for " , C (STEPPER_C_NAME), " zeta parameter." );
451+ SERIAL_ECHOLNPGM (" ?Wrong mode for " , C (STEPPER_C_NAME), " (I) zeta parameter." );
454452 }
455453
456454 // Parse Z vtol parameter
457455 if (seenQ) {
458456 if (AXIS_IS_EISHAPING (Z)) {
459457 if (goodVtol) {
460- ftMotion. cfg .vtol .z = vtolVal;
458+ c .vtol .z = vtolVal;
461459 flag.update = true ;
462460 }
463461 }
464462 else
465- SERIAL_ECHOLNPGM (" ?Wrong mode for " , C (STEPPER_C_NAME), " vtol parameter." );
463+ SERIAL_ECHOLNPGM (" ?Wrong mode for " , C (STEPPER_C_NAME), " (Q) vtol parameter." );
466464 }
467465 }
468466
@@ -476,18 +474,18 @@ void GcodeSuite::M493() {
476474 if (seenA) {
477475 if (AXIS_IS_SHAPING (E)) {
478476 if (goodBaseFreq) {
479- ftMotion. cfg .baseFreq .e = baseFreqVal;
477+ c .baseFreq .e = baseFreqVal;
480478 flag.update = flag.report = true ;
481479 }
482480 }
483481 else // Mode doesn't use frequency.
484- SERIAL_ECHOLNPGM (" ?Wrong mode for " , C (' E' ), " [A] frequency." );
482+ SERIAL_ECHOLNPGM (" ?Wrong mode for " , C (' E' ), " (A) frequency." );
485483 }
486484
487485 #if HAS_DYNAMIC_FREQ
488486 // Parse E frequency scaling parameter
489487 if (seenF && modeUsesDynFreq) {
490- ftMotion. cfg .dynFreqK .e = baseDynFreqVal;
488+ c .dynFreqK .e = baseDynFreqVal;
491489 flag.report = true ;
492490 }
493491 #endif
@@ -496,24 +494,24 @@ void GcodeSuite::M493() {
496494 if (seenI) {
497495 if (AXIS_IS_SHAPING (E)) {
498496 if (goodZeta) {
499- ftMotion. cfg .zeta .e = zetaVal;
497+ c .zeta .e = zetaVal;
500498 flag.update = true ;
501499 }
502500 }
503501 else
504- SERIAL_ECHOLNPGM (" ?Wrong mode for " , C (' E' ), " zeta parameter." );
502+ SERIAL_ECHOLNPGM (" ?Wrong mode for " , C (' E' ), " (I) zeta parameter." );
505503 }
506504
507505 // Parse E vtol parameter
508506 if (seenQ) {
509507 if (AXIS_IS_EISHAPING (E)) {
510508 if (goodVtol) {
511- ftMotion. cfg .vtol .e = vtolVal;
509+ c .vtol .e = vtolVal;
512510 flag.update = true ;
513511 }
514512 }
515513 else
516- SERIAL_ECHOLNPGM (" ?Wrong mode for " , C (' E' ), " vtol parameter." );
514+ SERIAL_ECHOLNPGM (" ?Wrong mode for " , C (' E' ), " (Q) vtol parameter." );
517515 }
518516 }
519517
0 commit comments