|
@@ -326,7 +326,8 @@ void do_z_clearance(const_float_t zclear, const bool lower_allowed=false);
|
326
|
326
|
/**
|
327
|
327
|
* Homing and Trusted Axes
|
328
|
328
|
*/
|
329
|
|
-constexpr uint8_t xyz_bits = _BV(X_AXIS) | _BV(Y_AXIS) | _BV(Z_AXIS);
|
|
329
|
+typedef IF<(LINEAR_AXES>8), uint16_t, uint8_t>::type linear_axis_bits_t;
|
|
330
|
+constexpr linear_axis_bits_t linear_bits = _BV(LINEAR_AXES) - 1;
|
330
|
331
|
|
331
|
332
|
void set_axis_is_at_home(const AxisEnum axis);
|
332
|
333
|
|
|
@@ -340,23 +341,23 @@ void set_axis_is_at_home(const AxisEnum axis);
|
340
|
341
|
* Flags that the position is trusted in each linear axis. Set when homed.
|
341
|
342
|
* Cleared whenever a stepper powers off, potentially losing its position.
|
342
|
343
|
*/
|
343
|
|
- extern uint8_t axis_homed, axis_trusted;
|
|
344
|
+ extern linear_axis_bits_t axis_homed, axis_trusted;
|
344
|
345
|
void homeaxis(const AxisEnum axis);
|
345
|
346
|
void set_axis_never_homed(const AxisEnum axis);
|
346
|
|
- uint8_t axes_should_home(uint8_t axis_bits=0x07);
|
347
|
|
- bool homing_needed_error(uint8_t axis_bits=0x07);
|
|
347
|
+ linear_axis_bits_t axes_should_home(linear_axis_bits_t axis_bits=linear_bits);
|
|
348
|
+ bool homing_needed_error(linear_axis_bits_t axis_bits=linear_bits);
|
348
|
349
|
FORCE_INLINE void set_axis_unhomed(const AxisEnum axis) { CBI(axis_homed, axis); }
|
349
|
350
|
FORCE_INLINE void set_axis_untrusted(const AxisEnum axis) { CBI(axis_trusted, axis); }
|
350
|
351
|
FORCE_INLINE void set_all_unhomed() { axis_homed = axis_trusted = 0; }
|
351
|
352
|
FORCE_INLINE void set_axis_homed(const AxisEnum axis) { SBI(axis_homed, axis); }
|
352
|
353
|
FORCE_INLINE void set_axis_trusted(const AxisEnum axis) { SBI(axis_trusted, axis); }
|
353
|
|
- FORCE_INLINE void set_all_homed() { axis_homed = axis_trusted = xyz_bits; }
|
|
354
|
+ FORCE_INLINE void set_all_homed() { axis_homed = axis_trusted = linear_bits; }
|
354
|
355
|
#else
|
355
|
|
- constexpr uint8_t axis_homed = xyz_bits, axis_trusted = xyz_bits; // Zero-endstop machines are always homed and trusted
|
|
356
|
+ constexpr linear_axis_bits_t axis_homed = linear_bits, axis_trusted = linear_bits; // Zero-endstop machines are always homed and trusted
|
356
|
357
|
FORCE_INLINE void homeaxis(const AxisEnum axis) {}
|
357
|
358
|
FORCE_INLINE void set_axis_never_homed(const AxisEnum) {}
|
358
|
|
- FORCE_INLINE uint8_t axes_should_home(uint8_t=0x07) { return false; }
|
359
|
|
- FORCE_INLINE bool homing_needed_error(uint8_t=0x07) { return false; }
|
|
359
|
+ FORCE_INLINE linear_axis_bits_t axes_should_home(linear_axis_bits_t=linear_bits) { return false; }
|
|
360
|
+ FORCE_INLINE bool homing_needed_error(linear_axis_bits_t=linear_bits) { return false; }
|
360
|
361
|
FORCE_INLINE void set_axis_unhomed(const AxisEnum axis) {}
|
361
|
362
|
FORCE_INLINE void set_axis_untrusted(const AxisEnum axis) {}
|
362
|
363
|
FORCE_INLINE void set_all_unhomed() {}
|
|
@@ -369,9 +370,9 @@ FORCE_INLINE bool axis_was_homed(const AxisEnum axis) { return TEST(axis_h
|
369
|
370
|
FORCE_INLINE bool axis_is_trusted(const AxisEnum axis) { return TEST(axis_trusted, axis); }
|
370
|
371
|
FORCE_INLINE bool axis_should_home(const AxisEnum axis) { return (axes_should_home() & _BV(axis)) != 0; }
|
371
|
372
|
FORCE_INLINE bool no_axes_homed() { return !axis_homed; }
|
372
|
|
-FORCE_INLINE bool all_axes_homed() { return xyz_bits == (axis_homed & xyz_bits); }
|
|
373
|
+FORCE_INLINE bool all_axes_homed() { return linear_bits == (axis_homed & linear_bits); }
|
373
|
374
|
FORCE_INLINE bool homing_needed() { return !all_axes_homed(); }
|
374
|
|
-FORCE_INLINE bool all_axes_trusted() { return xyz_bits == (axis_trusted & xyz_bits); }
|
|
375
|
+FORCE_INLINE bool all_axes_trusted() { return linear_bits == (axis_trusted & linear_bits); }
|
375
|
376
|
|
376
|
377
|
#if ENABLED(NO_MOTION_BEFORE_HOMING)
|
377
|
378
|
#define MOTION_CONDITIONS (IsRunning() && !homing_needed_error())
|