|
@@ -284,27 +284,51 @@ void do_z_clearance(const float &zclear, const bool z_trusted=true, const bool r
|
284
|
284
|
* Homing and Trusted Axes
|
285
|
285
|
*/
|
286
|
286
|
constexpr uint8_t xyz_bits = _BV(X_AXIS) | _BV(Y_AXIS) | _BV(Z_AXIS);
|
287
|
|
-extern uint8_t axis_homed, axis_trusted;
|
288
|
287
|
|
289
|
|
-void homeaxis(const AxisEnum axis);
|
290
|
288
|
void set_axis_is_at_home(const AxisEnum axis);
|
291
|
|
-void set_axis_never_homed(const AxisEnum axis);
|
292
|
|
-uint8_t axes_should_home(uint8_t axis_bits=0x07);
|
293
|
|
-bool homing_needed_error(uint8_t axis_bits=0x07);
|
294
|
|
-
|
295
|
|
-FORCE_INLINE bool axis_was_homed(const AxisEnum axis) { return TEST(axis_homed, axis); }
|
296
|
|
-FORCE_INLINE bool axis_is_trusted(const AxisEnum axis) { return TEST(axis_trusted, axis); }
|
297
|
|
-FORCE_INLINE bool axis_should_home(const AxisEnum axis) { return (axes_should_home() & _BV(axis)) != 0; }
|
298
|
|
-FORCE_INLINE bool no_axes_homed() { return !axis_homed; }
|
299
|
|
-FORCE_INLINE bool all_axes_homed() { return xyz_bits == (axis_homed & xyz_bits); }
|
300
|
|
-FORCE_INLINE bool homing_needed() { return !all_axes_homed(); }
|
301
|
|
-FORCE_INLINE bool all_axes_trusted() { return xyz_bits == (axis_trusted & xyz_bits); }
|
302
|
|
-FORCE_INLINE void set_axis_homed(const AxisEnum axis) { SBI(axis_homed, axis); }
|
303
|
|
-FORCE_INLINE void set_axis_unhomed(const AxisEnum axis) { CBI(axis_homed, axis); }
|
304
|
|
-FORCE_INLINE void set_axis_trusted(const AxisEnum axis) { SBI(axis_trusted, axis); }
|
305
|
|
-FORCE_INLINE void set_axis_untrusted(const AxisEnum axis) { CBI(axis_trusted, axis); }
|
306
|
|
-FORCE_INLINE void set_all_homed() { axis_homed = axis_trusted = xyz_bits; }
|
307
|
|
-FORCE_INLINE void set_all_unhomed() { axis_homed = axis_trusted = 0; }
|
|
289
|
+
|
|
290
|
+#if HAS_ENDSTOPS
|
|
291
|
+ /**
|
|
292
|
+ * axis_homed
|
|
293
|
+ * Flags that each linear axis was homed.
|
|
294
|
+ * XYZ on cartesian, ABC on delta, ABZ on SCARA.
|
|
295
|
+ *
|
|
296
|
+ * axis_trusted
|
|
297
|
+ * Flags that the position is trusted in each linear axis. Set when homed.
|
|
298
|
+ * Cleared whenever a stepper powers off, potentially losing its position.
|
|
299
|
+ */
|
|
300
|
+ extern uint8_t axis_homed, axis_trusted;
|
|
301
|
+ void homeaxis(const AxisEnum axis);
|
|
302
|
+ void set_axis_never_homed(const AxisEnum axis);
|
|
303
|
+ uint8_t axes_should_home(uint8_t axis_bits=0x07);
|
|
304
|
+ bool homing_needed_error(uint8_t axis_bits=0x07);
|
|
305
|
+ FORCE_INLINE void set_axis_unhomed(const AxisEnum axis) { CBI(axis_homed, axis); }
|
|
306
|
+ FORCE_INLINE void set_axis_untrusted(const AxisEnum axis) { CBI(axis_trusted, axis); }
|
|
307
|
+ FORCE_INLINE void set_all_unhomed() { axis_homed = axis_trusted = 0; }
|
|
308
|
+ FORCE_INLINE void set_axis_homed(const AxisEnum axis) { SBI(axis_homed, axis); }
|
|
309
|
+ FORCE_INLINE void set_axis_trusted(const AxisEnum axis) { SBI(axis_trusted, axis); }
|
|
310
|
+ FORCE_INLINE void set_all_homed() { axis_homed = axis_trusted = xyz_bits; }
|
|
311
|
+#else
|
|
312
|
+ constexpr uint8_t axis_homed = xyz_bits, axis_trusted = xyz_bits; // Zero-endstop machines are always homed and trusted
|
|
313
|
+ FORCE_INLINE void homeaxis(const AxisEnum axis) {}
|
|
314
|
+ FORCE_INLINE void set_axis_never_homed(const AxisEnum) {}
|
|
315
|
+ FORCE_INLINE uint8_t axes_should_home(uint8_t=0x07) { return false; }
|
|
316
|
+ FORCE_INLINE bool homing_needed_error(uint8_t=0x07) { return false; }
|
|
317
|
+ FORCE_INLINE void set_axis_unhomed(const AxisEnum axis) {}
|
|
318
|
+ FORCE_INLINE void set_axis_untrusted(const AxisEnum axis) {}
|
|
319
|
+ FORCE_INLINE void set_all_unhomed() {}
|
|
320
|
+ FORCE_INLINE void set_axis_homed(const AxisEnum axis) {}
|
|
321
|
+ FORCE_INLINE void set_axis_trusted(const AxisEnum axis) {}
|
|
322
|
+ FORCE_INLINE void set_all_homed() {}
|
|
323
|
+#endif
|
|
324
|
+
|
|
325
|
+FORCE_INLINE bool axis_was_homed(const AxisEnum axis) { return TEST(axis_homed, axis); }
|
|
326
|
+FORCE_INLINE bool axis_is_trusted(const AxisEnum axis) { return TEST(axis_trusted, axis); }
|
|
327
|
+FORCE_INLINE bool axis_should_home(const AxisEnum axis) { return (axes_should_home() & _BV(axis)) != 0; }
|
|
328
|
+FORCE_INLINE bool no_axes_homed() { return !axis_homed; }
|
|
329
|
+FORCE_INLINE bool all_axes_homed() { return xyz_bits == (axis_homed & xyz_bits); }
|
|
330
|
+FORCE_INLINE bool homing_needed() { return !all_axes_homed(); }
|
|
331
|
+FORCE_INLINE bool all_axes_trusted() { return xyz_bits == (axis_trusted & xyz_bits); }
|
308
|
332
|
|
309
|
333
|
#if ENABLED(NO_MOTION_BEFORE_HOMING)
|
310
|
334
|
#define MOTION_CONDITIONS (IsRunning() && !homing_needed_error())
|
|
@@ -360,7 +384,6 @@ FORCE_INLINE void set_all_unhomed() { axis_homed = axis_tr
|
360
|
384
|
/**
|
361
|
385
|
* position_is_reachable family of functions
|
362
|
386
|
*/
|
363
|
|
-
|
364
|
387
|
#if IS_KINEMATIC // (DELTA or SCARA)
|
365
|
388
|
|
366
|
389
|
#if HAS_SCARA_OFFSET
|
|
@@ -390,14 +413,14 @@ FORCE_INLINE void set_all_unhomed() { axis_homed = axis_tr
|
390
|
413
|
|
391
|
414
|
// Return true if the given position is within the machine bounds.
|
392
|
415
|
inline bool position_is_reachable(const float &rx, const float &ry) {
|
393
|
|
- if (!WITHIN(ry, Y_MIN_POS - fslop, Y_MAX_POS + fslop)) return false;
|
|
416
|
+ if (!COORDINATE_OKAY(ry, Y_MIN_POS - fslop, Y_MAX_POS + fslop)) return false;
|
394
|
417
|
#if ENABLED(DUAL_X_CARRIAGE)
|
395
|
418
|
if (active_extruder)
|
396
|
|
- return WITHIN(rx, X2_MIN_POS - fslop, X2_MAX_POS + fslop);
|
|
419
|
+ return COORDINATE_OKAY(rx, X2_MIN_POS - fslop, X2_MAX_POS + fslop);
|
397
|
420
|
else
|
398
|
|
- return WITHIN(rx, X1_MIN_POS - fslop, X1_MAX_POS + fslop);
|
|
421
|
+ return COORDINATE_OKAY(rx, X1_MIN_POS - fslop, X1_MAX_POS + fslop);
|
399
|
422
|
#else
|
400
|
|
- return WITHIN(rx, X_MIN_POS - fslop, X_MAX_POS + fslop);
|
|
423
|
+ return COORDINATE_OKAY(rx, X_MIN_POS - fslop, X_MAX_POS + fslop);
|
401
|
424
|
#endif
|
402
|
425
|
}
|
403
|
426
|
inline bool position_is_reachable(const xy_pos_t &pos) { return position_is_reachable(pos.x, pos.y); }
|