|
@@ -4975,19 +4975,26 @@ inline void gcode_M205() {
|
4975
|
4975
|
if (code_seen('E')) max_e_jerk = code_value();
|
4976
|
4976
|
}
|
4977
|
4977
|
|
|
4978
|
+static void set_home_offset(AxisEnum axis, float v) {
|
|
4979
|
+ min_pos[axis] = base_min_pos(axis) + v;
|
|
4980
|
+ max_pos[axis] = base_max_pos(axis) + v;
|
|
4981
|
+ current_position[axis] += v - home_offset[axis];
|
|
4982
|
+ home_offset[axis] = v;
|
|
4983
|
+}
|
|
4984
|
+
|
4978
|
4985
|
/**
|
4979
|
4986
|
* M206: Set Additional Homing Offset (X Y Z). SCARA aliases T=X, P=Y
|
4980
|
4987
|
*/
|
4981
|
4988
|
inline void gcode_M206() {
|
4982
|
|
- for (int8_t i = X_AXIS; i <= Z_AXIS; i++) {
|
4983
|
|
- if (code_seen(axis_codes[i])) {
|
4984
|
|
- home_offset[i] = code_value();
|
4985
|
|
- }
|
4986
|
|
- }
|
|
4989
|
+ for (int8_t i = X_AXIS; i <= Z_AXIS; i++)
|
|
4990
|
+ if (code_seen(axis_codes[i]))
|
|
4991
|
+ set_home_offset((AxisEnum)i, code_value());
|
|
4992
|
+
|
4987
|
4993
|
#if ENABLED(SCARA)
|
4988
|
|
- if (code_seen('T')) home_offset[X_AXIS] = code_value(); // Theta
|
4989
|
|
- if (code_seen('P')) home_offset[Y_AXIS] = code_value(); // Psi
|
|
4994
|
+ if (code_seen('T')) set_home_offset(X_AXIS, code_value()); // Theta
|
|
4995
|
+ if (code_seen('P')) set_home_offset(Y_AXIS, code_value()); // Psi
|
4990
|
4996
|
#endif
|
|
4997
|
+ sync_plan_position();
|
4991
|
4998
|
}
|
4992
|
4999
|
|
4993
|
5000
|
#if ENABLED(DELTA)
|
|
@@ -5674,16 +5681,12 @@ inline void gcode_M410() { quickStop(); }
|
5674
|
5681
|
*/
|
5675
|
5682
|
inline void gcode_M428() {
|
5676
|
5683
|
bool err = false;
|
5677
|
|
- float new_offs[3], new_pos[3];
|
5678
|
|
- memcpy(new_pos, current_position, sizeof(new_pos));
|
5679
|
|
- memcpy(new_offs, home_offset, sizeof(new_offs));
|
5680
|
5684
|
for (int8_t i = X_AXIS; i <= Z_AXIS; i++) {
|
5681
|
5685
|
if (axis_homed[i]) {
|
5682
|
|
- float base = (new_pos[i] > (min_pos[i] + max_pos[i]) / 2) ? base_home_pos(i) : 0,
|
5683
|
|
- diff = new_pos[i] - base;
|
|
5686
|
+ float base = (current_position[i] > (min_pos[i] + max_pos[i]) / 2) ? base_home_pos(i) : 0,
|
|
5687
|
+ diff = current_position[i] - base;
|
5684
|
5688
|
if (diff > -20 && diff < 20) {
|
5685
|
|
- new_offs[i] -= diff;
|
5686
|
|
- new_pos[i] = base;
|
|
5689
|
+ set_home_offset((AxisEnum)i, home_offset[i] - diff);
|
5687
|
5690
|
}
|
5688
|
5691
|
else {
|
5689
|
5692
|
SERIAL_ERROR_START;
|
|
@@ -5699,8 +5702,6 @@ inline void gcode_M428() {
|
5699
|
5702
|
}
|
5700
|
5703
|
|
5701
|
5704
|
if (!err) {
|
5702
|
|
- memcpy(current_position, new_pos, sizeof(new_pos));
|
5703
|
|
- memcpy(home_offset, new_offs, sizeof(new_offs));
|
5704
|
5705
|
sync_plan_position();
|
5705
|
5706
|
LCD_ALERTMESSAGEPGM(MSG_HOME_OFFSETS_APPLIED);
|
5706
|
5707
|
#if HAS_BUZZER
|