Merge hyperfine to MK2 3.1.0-RC2

This commit is contained in:
3d-gussner 2017-11-06 16:21:32 +01:00
parent f2d9c00103
commit a77b5cf981
9 changed files with 266 additions and 121 deletions

View File

@ -51,6 +51,11 @@
#define EEPROM_XYZ_CAL_SKEW (EEPROM_SD_SORT - 4)
#define EEPROM_WIZARD_ACTIVE (EEPROM_XYZ_CAL_SKEW - 1)
// addition for hyperfine tuning
#define EEPROM_BED_CORRECTION_FRONT_LEFT (EEPROM_WIZARD_ACTIVE - 1)
#define EEPROM_BED_CORRECTION_FRONT_RIGHT (EEPROM_BED_CORRECTION_FRONT_LEFT - 1)
#define EEPROM_BED_CORRECTION_REAR_RIGHT (EEPROM_BED_CORRECTION_FRONT_RIGHT - 1)
#define EEPROM_BED_CORRECTION_REAR_LEFT (EEPROM_BED_CORRECTION_REAR_RIGHT - 1)
// Currently running firmware, each digit stored as uint16_t.
// The flavor differentiates a dev, alpha, beta, release candidate or a release version.
#define EEPROM_FIRMWARE_VERSION_END (FW_PRUSA3D_MAGIC_LEN+8)
@ -73,7 +78,7 @@
//#define STRING_VERSION "1.0.2"
#define STRING_VERSION_CONFIG_H __DATE__ " " __TIME__ // build date and time
#define STRING_CONFIG_H_AUTHOR "(none, default config)" // Who made the changes.
#define STRING_CONFIG_H_AUTHOR "(3d-gussner,1106v1)" // Who made the changes.
// SERIAL_PORT selects which serial port should be used for communication with the host.
// This allows the connection of wireless adapters (for instance) to non-default port pins.

View File

@ -3499,55 +3499,140 @@ void process_commands()
}
#endif // SUPPORT_VERBOSITY
for (uint8_t i = 0; i < 4; ++i) {
unsigned char codes[4] = { 'L', 'R', 'F', 'B' };
long correction = 0;
if (code_seen(codes[i]))
correction = code_value_long();
else if (eeprom_bed_correction_valid) {
unsigned char *addr = (i < 2) ?
((i == 0) ? (unsigned char*)EEPROM_BED_CORRECTION_LEFT : (unsigned char*)EEPROM_BED_CORRECTION_RIGHT) :
((i == 2) ? (unsigned char*)EEPROM_BED_CORRECTION_FRONT : (unsigned char*)EEPROM_BED_CORRECTION_REAR);
correction = eeprom_read_int8(addr);
}
if (correction == 0)
continue;
float offset = float(correction) * 0.001f;
if (fabs(offset) > 0.101f) {
SERIAL_ERROR_START;
SERIAL_ECHOPGM("Excessive bed leveling correction: ");
SERIAL_ECHO(offset);
SERIAL_ECHOLNPGM(" microns");
}
else {
switch (i) {
case 0:
for (uint8_t row = 0; row < 3; ++row) {
mbl.z_values[row][1] += 0.5f * offset;
mbl.z_values[row][0] += offset;
}
break;
case 1:
for (uint8_t row = 0; row < 3; ++row) {
mbl.z_values[row][1] += 0.5f * offset;
mbl.z_values[row][2] += offset;
}
break;
case 2:
for (uint8_t col = 0; col < 3; ++col) {
mbl.z_values[1][col] += 0.5f * offset;
mbl.z_values[0][col] += offset;
}
break;
case 3:
for (uint8_t col = 0; col < 3; ++col) {
mbl.z_values[1][col] += 0.5f * offset;
mbl.z_values[2][col] += offset;
}
break;
}
}
}
// bed correction routine
for (uint8_t i = 0; i < 8; ++i) {
unsigned char codes[8] = { 'a', 'b', 'c', 'd' , 'e' , 'f', 'g', 'h'};
long correction = 0;
if (code_seen(codes[i]))
correction = code_value_long();
else if (eeprom_bed_correction_valid) {
switch (i) {
case 0:
{unsigned char *addr = (unsigned char*)EEPROM_BED_CORRECTION_FRONT_LEFT;
correction = eeprom_read_int8(addr);
}
break;
case 1:
{unsigned char *addr = (unsigned char*)EEPROM_BED_CORRECTION_FRONT;
correction = eeprom_read_int8(addr);
}
break;
case 2:
{unsigned char *addr = (unsigned char*)EEPROM_BED_CORRECTION_FRONT_RIGHT;
correction = eeprom_read_int8(addr);
}
break;
case 3:
{unsigned char *addr = (unsigned char*)EEPROM_BED_CORRECTION_RIGHT;
correction = eeprom_read_int8(addr);
}
break;
case 4:
{unsigned char *addr = (unsigned char*)EEPROM_BED_CORRECTION_REAR_RIGHT;
correction = eeprom_read_int8(addr);
}
break;
case 5:
{unsigned char *addr = (unsigned char*)EEPROM_BED_CORRECTION_REAR;
correction = eeprom_read_int8(addr);
}
break;
case 6:
{unsigned char *addr = (unsigned char*)EEPROM_BED_CORRECTION_REAR_LEFT;
correction = eeprom_read_int8(addr);
}
break;
case 7:
{unsigned char *addr = (unsigned char*)EEPROM_BED_CORRECTION_LEFT;
correction = eeprom_read_int8(addr);
}
break;
}
}
if (correction == 0)
continue;
float offset = float(correction) * 0.001f;
if (fabs(offset) > 0.201f) {
SERIAL_ERROR_START;
SERIAL_ECHOPGM("Excessive bed leveling correction: ");
SERIAL_ECHO(offset);
SERIAL_ECHOLNPGM(" microns");
}
else {
switch (i) {
case 0:
{
mbl.z_values[0][0] += offset;
SERIAL_ECHOPGM("FrontLeft a =");
SERIAL_ECHO(correction+0);
SERIAL_ECHOLNPGM(" microns.");
}
break;
case 1:
{
mbl.z_values[0][1] += offset;
SERIAL_ECHOPGM("FrontCentr b =");
SERIAL_ECHO(correction+0);
SERIAL_ECHOLNPGM(" microns.");
}
break;
case 2:
{
mbl.z_values[0][2] += offset;
SERIAL_ECHOPGM("FrontRight c =");
SERIAL_ECHO(correction+0);
SERIAL_ECHOLNPGM(" microns.");
}
break;
case 3:
{
mbl.z_values[1][2] += offset;
SERIAL_ECHOPGM("MidRight d =");
SERIAL_ECHO(correction+0);
SERIAL_ECHOLNPGM(" microns.");
}
break;
case 4:
{
mbl.z_values[2][2] += offset;
SERIAL_ECHOPGM("RearRight e =");
SERIAL_ECHO(correction+0);
SERIAL_ECHOLNPGM(" microns.");
}
break;
case 5:
{
mbl.z_values[2][1] += offset;
SERIAL_ECHOPGM("RearCentr f =");
SERIAL_ECHO(correction+0);
SERIAL_ECHOLNPGM(" microns.");
}
break;
case 6:
{
mbl.z_values[2][0] += offset;
SERIAL_ECHOPGM("RearLeft g =");
SERIAL_ECHO(correction+0);
SERIAL_ECHOLNPGM(" microns.");
}
break;
case 7:
{
mbl.z_values[1][0] += offset;
SERIAL_ECHOPGM("MidLeft h =");
SERIAL_ECHO(correction+0);
SERIAL_ECHOLNPGM(" microns.");
}
break;
}
}
}
//
SERIAL_ECHOLNPGM("Bed leveling correction finished");
mbl.upsample_3x3(); //bilinear interpolation from 3x3 to 7x7 points while using the same array z_values[iy][ix] for storing (just coppying measured data to new destination and interpolating between them)
SERIAL_ECHOLNPGM("Upsample finished");

View File

@ -247,10 +247,10 @@
#define MSG_BABYSTEP_Z_NOT_SET "Neni zkalibrovana vzdalenost trysky od tiskove podlozky. Postupujte prosim podle manualu, kapitola Zaciname, odstavec Nastaveni prvni vrstvy."
#define MSG_BED_CORRECTION_MENU "Korekce podlozky"
#define MSG_BED_CORRECTION_LEFT "Vlevo [um]"
#define MSG_BED_CORRECTION_RIGHT "Vpravo [um]"
#define MSG_BED_CORRECTION_FRONT "Vpredu [um]"
#define MSG_BED_CORRECTION_REAR "Vzadu [um]"
#define MSG_BED_CORRECTION_MID_LEFT "Vlevo [um]"
#define MSG_BED_CORRECTION_MID_RIGHT "Vpravo [um]"
#define MSG_BED_CORRECTION_FRONT_CENTR "Vpredu [um]"
#define MSG_BED_CORRECTION_REAR_CENTR "Vzadu [um]"
#define MSG_BED_CORRECTION_RESET "Reset"
#define MSG_MESH_BED_LEVELING "Mesh Bed Leveling"

View File

@ -267,11 +267,14 @@
+
+#define MSG_BED_CORRECTION_MENU "Bett level Korrekt"
+ #define MSG_BED_CORRECTION_LEFT "Links [um]"
+ #define MSG_BED_CORRECTION_RIGHT "Rechts [um]"
+ #define MSG_BED_CORRECTION_FRONT "Vorne [um]"
+ #define MSG_BED_CORRECTION_REAR "Hinten [um]"
+ #define MSG_BED_CORRECTION_RESET "Ruecksetzen"
#define MSG_BED_CORRECTION_FRONT_LEFT "Vo.Links [um]"
#define MSG_BED_CORRECTION_FRONT_CENTR "Vo.Zentrum[um]"
#define MSG_BED_CORRECTION_FRONT_RIGHT "Vo.Rechts [um]"
#define MSG_BED_CORRECTION_MID_RIGHT "Mi.Rechts [um]"
#define MSG_BED_CORRECTION_REAR_RIGHT "Hi.Rechts [um]"
#define MSG_BED_CORRECTION_REAR_CENTR "Hi.Zentrum[um]"
#define MSG_BED_CORRECTION_REAR_LEFT "Hi.Links [um]"
#define MSG_BED_CORRECTION_MID_LEFT "Mi.Links [um]"
+
+#define MSG_MESH_BED_LEVELING "Mesh Bett Leveling"
+ #define MSG_MENU_CALIBRATION "Kalibrierung"

View File

@ -266,10 +266,15 @@
#define(length=20, lines=8) MSG_PAPER "Place a sheet of paper under the nozzle during the calibration of first 4 points. If the nozzle catches the paper, power off the printer immediately."
#define MSG_BED_CORRECTION_MENU "Bed level correct"
#define(length=14,lines=1) MSG_BED_CORRECTION_LEFT "Left side [um]"
#define(length=14,lines=1) MSG_BED_CORRECTION_RIGHT "Right side[um]"
#define(length=14,lines=1) MSG_BED_CORRECTION_FRONT "Front side[um]"
#define(length=14,lines=1) MSG_BED_CORRECTION_REAR "Rear side [um]"
#define(length=14,lines=1) MSG_BED_CORRECTION_FRONT_LEFT "FrontLeft [um]"
#define(length=14,lines=1) MSG_BED_CORRECTION_FRONT_CENTR "FrontCentr[um]"
#define(length=14,lines=1) MSG_BED_CORRECTION_FRONT_RIGHT "FrontRight[um]"
#define(length=14,lines=1) MSG_BED_CORRECTION_MID_RIGHT "MidRight [um]"
#define(length=14,lines=1) MSG_BED_CORRECTION_REAR_RIGHT "RearRight [um]"
#define(length=14,lines=1) MSG_BED_CORRECTION_REAR_CENTR "RearCentr [um]"
#define(length=14,lines=1) MSG_BED_CORRECTION_REAR_LEFT "RearLeft [um]"
#define(length=14,lines=1) MSG_BED_CORRECTION_MID_LEFT "MidLeft [um]"
#define MSG_BED_CORRECTION_RESET "Reset"
#define MSG_MESH_BED_LEVELING "Mesh Bed Leveling"

View File

@ -227,10 +227,10 @@
#define MSG_FOLLOW_CALIBRATION_FLOW "Impresora no esta calibrada todavia. Por favor usar el manual, el capitulo First steps, seleccion Calibration flow."
#define MSG_BABYSTEP_Z_NOT_SET "Distancia entre la punta de la boquilla y la superficie de la cama no fijada aun. Por favor siga el manual, capitulo First steps, seccion First layer calibration."
#define MSG_BED_CORRECTION_MENU "Corr. de la cama"
#define MSG_BED_CORRECTION_LEFT "Izquierda [um]"
#define MSG_BED_CORRECTION_RIGHT "Derecha [um]"
#define MSG_BED_CORRECTION_FRONT "Adelante [um]"
#define MSG_BED_CORRECTION_REAR "Atras [um]"
#define MSG_BED_CORRECTION_MID_LEFT "Izquierda [um]"
#define MSG_BED_CORRECTION_MID_RIGHT "Derecha [um]"
#define MSG_BED_CORRECTION_FRONT_CEN "Adelante [um]"
#define MSG_BED_CORRECTION_REAR_CENT "Atras [um]"
#define MSG_BED_CORRECTION_RESET "Reset"
#define MSG_MESH_BED_LEVELING "Mesh Bed Leveling"

View File

@ -222,10 +222,10 @@
#define MSG_BABYSTEP_Z_NOT_SET "Distanza tra la punta dell'ugello e la superficie del letto non ancora imposta. Si prega di seguire il manuale, capitolo First steps, sezione First layer calibration."
#define MSG_BED_CORRECTION_MENU "Correz. liv.letto"
#define MSG_BED_CORRECTION_LEFT "Sinistra [um]"
#define MSG_BED_CORRECTION_RIGHT "Destra [um]"
#define MSG_BED_CORRECTION_FRONT "Fronte [um]"
#define MSG_BED_CORRECTION_REAR "Retro [um]"
#define MSG_BED_CORRECTION_MID_LEFT "Sinistra [um]"
#define MSG_BED_CORRECTION_MID_RIGHT "Destra [um]"
#define MSG_BED_CORRECTION_FRONT_CENTR "Fronte [um]"
#define MSG_BED_CORRECTION_REAR_CENTR "Retro [um]"
#define MSG_BED_CORRECTION_RESET "Reset"
#define MSG_MESH_BED_LEVELING "Mesh livel. letto"

View File

@ -233,10 +233,10 @@
#define MSG_FOLLOW_CALIBRATION_FLOW "Drukarka nie zostala jeszcze skalibrowana. Prosze kierowac sie instrukcja, rozdzial Zaczynamy, podrozdzial Selftest."
#define MSG_BABYSTEP_Z_NOT_SET "Odleglosc dyszy od podkladki nie jest skalibrowana. Postepuj zgodnie z instrukcja rozdzial Zaczynamy, podrozdzial Kalibracja pierwszej warstwy."
#define MSG_BED_CORRECTION_MENU "Korekta podkladki"
#define MSG_BED_CORRECTION_LEFT "W lewo [um]"
#define MSG_BED_CORRECTION_RIGHT "W prawo [um]"
#define MSG_BED_CORRECTION_FRONT "Do przodu [um]"
#define MSG_BED_CORRECTION_REAR "Do tylu [um]"
#define MSG_BED_CORRECTION_MID_LEFT "W lewo [um]"
#define MSG_BED_CORRECTION_MID_RIGHT "W prawo [um]"
#define MSG_BED_CORRECTION_FRONT_CENTR "Do przodu [um]"
#define MSG_BED_CORRECTION_REAR_CENTR "Do tylu [um]"
#define MSG_BED_CORRECTION_RESET "Reset"
#define MSG_MESH_BED_LEVELING "Mesh Bed Leveling"

View File

@ -58,6 +58,7 @@ union MenuData
char ip_str[3*4+3+1];
} supportMenu;
// alternative hyperfine tuning:
struct AdjustBed
{
// 6+13+16=35B
@ -65,14 +66,22 @@ union MenuData
// the return menu and encoder state.
struct EditMenuParentState editMenuParentState;
int8_t status;
int8_t left;
int8_t right;
int8_t front;
int8_t rear;
int left2;
int right2;
int front2;
int rear2;
int8_t front_left;
int8_t front_centr;
int8_t front_right;
int8_t mid_right;
int8_t rear_right;
int8_t rear_centr;
int8_t rear_left;
int8_t mid_left;
int front_left2;
int front_centr2;
int front_right2;
int mid_right2;
int rear_right2;
int rear_centr2;
int rear_left2;
int mid_left2;
} adjustBed;
// editMenuParentState is used when an edit menu is entered, so it knows
@ -2054,10 +2063,15 @@ static void lcd_adjust_bed();
static void lcd_adjust_bed_reset()
{
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_VALID, 1);
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_LEFT , 0);
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_RIGHT, 0);
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_FRONT, 0);
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_FRONT_LEFT , 0);
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_FRONT , 0);
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_FRONT_RIGHT , 0);
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_RIGHT , 0);
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_REAR_RIGHT , 0);
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_REAR , 0);
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_REAR_LEFT , 0);
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_LEFT , 0);
lcd_goto_menu(lcd_adjust_bed, 0, false);
// Because we did not leave the menu, the menuData did not reset.
// Force refresh of the bed leveling data.
@ -2065,17 +2079,25 @@ static void lcd_adjust_bed_reset()
}
void adjust_bed_reset() {
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_VALID, 1);
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_LEFT, 0);
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_RIGHT, 0);
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_FRONT, 0);
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_REAR, 0);
menuData.adjustBed.left = menuData.adjustBed.left2 = 0;
menuData.adjustBed.right = menuData.adjustBed.right2 = 0;
menuData.adjustBed.front = menuData.adjustBed.front2 = 0;
menuData.adjustBed.rear = menuData.adjustBed.rear2 = 0;
}
#define BED_ADJUSTMENT_UM_MAX 50
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_VALID, 1);
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_FRONT_LEFT , 0);
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_FRONT , 0);
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_FRONT_RIGHT , 0);
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_RIGHT , 0);
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_REAR_RIGHT , 0);
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_REAR , 0);
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_REAR_LEFT , 0);
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_LEFT , 0);
menuData.adjustBed.front_left = menuData.adjustBed.front_left2 = 0;
menuData.adjustBed.front_centr = menuData.adjustBed.front_centr2 = 0;
menuData.adjustBed.front_right = menuData.adjustBed.front_right2 = 0;
menuData.adjustBed.mid_right = menuData.adjustBed.mid_right2 = 0;
menuData.adjustBed.rear_right = menuData.adjustBed.rear_right2 = 0;
menuData.adjustBed.rear_centr = menuData.adjustBed.rear_centr2 = 0;
menuData.adjustBed.rear_left = menuData.adjustBed.rear_left2 = 0;
menuData.adjustBed.mid_left = menuData.adjustBed.mid_left2 = 0;}
#define BED_ADJUSTMENT_UM_MAX 99
static void lcd_adjust_bed()
{
@ -2084,42 +2106,67 @@ static void lcd_adjust_bed()
// Initialize its status.
menuData.adjustBed.status = 1;
bool valid = false;
menuData.adjustBed.left = menuData.adjustBed.left2 = eeprom_read_int8((unsigned char*)EEPROM_BED_CORRECTION_LEFT);
menuData.adjustBed.right = menuData.adjustBed.right2 = eeprom_read_int8((unsigned char*)EEPROM_BED_CORRECTION_RIGHT);
menuData.adjustBed.front = menuData.adjustBed.front2 = eeprom_read_int8((unsigned char*)EEPROM_BED_CORRECTION_FRONT);
menuData.adjustBed.rear = menuData.adjustBed.rear2 = eeprom_read_int8((unsigned char*)EEPROM_BED_CORRECTION_REAR);
menuData.adjustBed.front_left = menuData.adjustBed.front_left2 = eeprom_read_int8((unsigned char*)EEPROM_BED_CORRECTION_FRONT_LEFT);
menuData.adjustBed.front_centr = menuData.adjustBed.front_centr2 = eeprom_read_int8((unsigned char*)EEPROM_BED_CORRECTION_FRONT);
menuData.adjustBed.front_right = menuData.adjustBed.front_right2 = eeprom_read_int8((unsigned char*)EEPROM_BED_CORRECTION_FRONT_RIGHT);
menuData.adjustBed.mid_right = menuData.adjustBed.mid_right2 = eeprom_read_int8((unsigned char*)EEPROM_BED_CORRECTION_RIGHT);
menuData.adjustBed.rear_right = menuData.adjustBed.rear_right2 = eeprom_read_int8((unsigned char*)EEPROM_BED_CORRECTION_REAR_RIGHT);
menuData.adjustBed.rear_centr = menuData.adjustBed.rear_centr2 = eeprom_read_int8((unsigned char*)EEPROM_BED_CORRECTION_REAR);
menuData.adjustBed.rear_left = menuData.adjustBed.rear_left2 = eeprom_read_int8((unsigned char*)EEPROM_BED_CORRECTION_REAR_LEFT);
menuData.adjustBed.mid_left = menuData.adjustBed.mid_left2 = eeprom_read_int8((unsigned char*)EEPROM_BED_CORRECTION_LEFT);
if (eeprom_read_byte((unsigned char*)EEPROM_BED_CORRECTION_VALID) == 1 &&
menuData.adjustBed.left >= -BED_ADJUSTMENT_UM_MAX && menuData.adjustBed.left <= BED_ADJUSTMENT_UM_MAX &&
menuData.adjustBed.right >= -BED_ADJUSTMENT_UM_MAX && menuData.adjustBed.right <= BED_ADJUSTMENT_UM_MAX &&
menuData.adjustBed.front >= -BED_ADJUSTMENT_UM_MAX && menuData.adjustBed.front <= BED_ADJUSTMENT_UM_MAX &&
menuData.adjustBed.rear >= -BED_ADJUSTMENT_UM_MAX && menuData.adjustBed.rear <= BED_ADJUSTMENT_UM_MAX)
menuData.adjustBed.front_left >= -BED_ADJUSTMENT_UM_MAX && menuData.adjustBed.front_left <= BED_ADJUSTMENT_UM_MAX &&
menuData.adjustBed.front_centr >= -BED_ADJUSTMENT_UM_MAX && menuData.adjustBed.front_centr <= BED_ADJUSTMENT_UM_MAX &&
menuData.adjustBed.front_right >= -BED_ADJUSTMENT_UM_MAX && menuData.adjustBed.front_right <= BED_ADJUSTMENT_UM_MAX &&
menuData.adjustBed.mid_right >= -BED_ADJUSTMENT_UM_MAX && menuData.adjustBed.mid_right <= BED_ADJUSTMENT_UM_MAX &&
menuData.adjustBed.rear_right >= -BED_ADJUSTMENT_UM_MAX && menuData.adjustBed.rear_right <= BED_ADJUSTMENT_UM_MAX &&
menuData.adjustBed.rear_centr >= -BED_ADJUSTMENT_UM_MAX && menuData.adjustBed.rear_centr <= BED_ADJUSTMENT_UM_MAX &&
menuData.adjustBed.rear_left >= -BED_ADJUSTMENT_UM_MAX && menuData.adjustBed.rear_left <= BED_ADJUSTMENT_UM_MAX &&
menuData.adjustBed.mid_left >= -BED_ADJUSTMENT_UM_MAX && menuData.adjustBed.mid_left <= BED_ADJUSTMENT_UM_MAX)
valid = true;
if (! valid) {
// Reset the values: simulate an edit.
menuData.adjustBed.left2 = 0;
menuData.adjustBed.right2 = 0;
menuData.adjustBed.front2 = 0;
menuData.adjustBed.rear2 = 0;
menuData.adjustBed.front_left2 = 0;
menuData.adjustBed.front_centr2 = 0;
menuData.adjustBed.front_right2 = 0;
menuData.adjustBed.mid_right2 = 0;
menuData.adjustBed.rear_right2 = 0;
menuData.adjustBed.rear_centr2 = 0;
menuData.adjustBed.rear_left2 = 0;
menuData.adjustBed.mid_left2 = 0;
}
lcdDrawUpdate = 1;
eeprom_update_byte((unsigned char*)EEPROM_BED_CORRECTION_VALID, 1);
}
if (menuData.adjustBed.left != menuData.adjustBed.left2)
eeprom_update_int8((unsigned char*)EEPROM_BED_CORRECTION_LEFT, menuData.adjustBed.left = menuData.adjustBed.left2);
if (menuData.adjustBed.right != menuData.adjustBed.right2)
eeprom_update_int8((unsigned char*)EEPROM_BED_CORRECTION_RIGHT, menuData.adjustBed.right = menuData.adjustBed.right2);
if (menuData.adjustBed.front != menuData.adjustBed.front2)
eeprom_update_int8((unsigned char*)EEPROM_BED_CORRECTION_FRONT, menuData.adjustBed.front = menuData.adjustBed.front2);
if (menuData.adjustBed.rear != menuData.adjustBed.rear2)
eeprom_update_int8((unsigned char*)EEPROM_BED_CORRECTION_REAR, menuData.adjustBed.rear = menuData.adjustBed.rear2);
if (menuData.adjustBed.front_left != menuData.adjustBed.front_left2)
eeprom_update_int8((unsigned char*)EEPROM_BED_CORRECTION_FRONT_LEFT, menuData.adjustBed.front_left = menuData.adjustBed.front_left2);
if (menuData.adjustBed.front_centr != menuData.adjustBed.front_centr2)
eeprom_update_int8((unsigned char*)EEPROM_BED_CORRECTION_FRONT, menuData.adjustBed.front_centr = menuData.adjustBed.front_centr2);
if (menuData.adjustBed.front_right != menuData.adjustBed.front_right2)
eeprom_update_int8((unsigned char*)EEPROM_BED_CORRECTION_FRONT_RIGHT, menuData.adjustBed.front_right = menuData.adjustBed.front_right2);
if (menuData.adjustBed.mid_right != menuData.adjustBed.mid_right2)
eeprom_update_int8((unsigned char*)EEPROM_BED_CORRECTION_RIGHT, menuData.adjustBed.mid_right = menuData.adjustBed.mid_right2);
if (menuData.adjustBed.rear_right != menuData.adjustBed.rear_right2)
eeprom_update_int8((unsigned char*)EEPROM_BED_CORRECTION_REAR_RIGHT, menuData.adjustBed.rear_right = menuData.adjustBed.rear_right2);
if (menuData.adjustBed.rear_centr != menuData.adjustBed.rear_centr2)
eeprom_update_int8((unsigned char*)EEPROM_BED_CORRECTION_REAR, menuData.adjustBed.rear_centr = menuData.adjustBed.rear_centr2);
if (menuData.adjustBed.rear_left != menuData.adjustBed.rear_left2)
eeprom_update_int8((unsigned char*)EEPROM_BED_CORRECTION_REAR_LEFT, menuData.adjustBed.rear_left = menuData.adjustBed.rear_left2);
if (menuData.adjustBed.mid_left != menuData.adjustBed.mid_left2)
eeprom_update_int8((unsigned char*)EEPROM_BED_CORRECTION_LEFT, menuData.adjustBed.mid_left = menuData.adjustBed.mid_left2);
START_MENU();
MENU_ITEM(back, MSG_SETTINGS, lcd_calibration_menu);
MENU_ITEM_EDIT(int3, MSG_BED_CORRECTION_LEFT, &menuData.adjustBed.left2, -BED_ADJUSTMENT_UM_MAX, BED_ADJUSTMENT_UM_MAX);
MENU_ITEM_EDIT(int3, MSG_BED_CORRECTION_RIGHT, &menuData.adjustBed.right2, -BED_ADJUSTMENT_UM_MAX, BED_ADJUSTMENT_UM_MAX);
MENU_ITEM_EDIT(int3, MSG_BED_CORRECTION_FRONT, &menuData.adjustBed.front2, -BED_ADJUSTMENT_UM_MAX, BED_ADJUSTMENT_UM_MAX);
MENU_ITEM_EDIT(int3, MSG_BED_CORRECTION_REAR, &menuData.adjustBed.rear2, -BED_ADJUSTMENT_UM_MAX, BED_ADJUSTMENT_UM_MAX);
MENU_ITEM_EDIT(int3, MSG_BED_CORRECTION_FRONT_LEFT, &menuData.adjustBed.front_left2, -BED_ADJUSTMENT_UM_MAX, BED_ADJUSTMENT_UM_MAX);
MENU_ITEM_EDIT(int3, MSG_BED_CORRECTION_FRONT_CENTR, &menuData.adjustBed.front_centr2, -BED_ADJUSTMENT_UM_MAX, BED_ADJUSTMENT_UM_MAX);
MENU_ITEM_EDIT(int3, MSG_BED_CORRECTION_FRONT_RIGHT, &menuData.adjustBed.front_right2, -BED_ADJUSTMENT_UM_MAX, BED_ADJUSTMENT_UM_MAX);
MENU_ITEM_EDIT(int3, MSG_BED_CORRECTION_MID_RIGHT, &menuData.adjustBed.mid_right2, -BED_ADJUSTMENT_UM_MAX, BED_ADJUSTMENT_UM_MAX);
MENU_ITEM_EDIT(int3, MSG_BED_CORRECTION_REAR_RIGHT, &menuData.adjustBed.rear_right2, -BED_ADJUSTMENT_UM_MAX, BED_ADJUSTMENT_UM_MAX);
MENU_ITEM_EDIT(int3, MSG_BED_CORRECTION_REAR_CENTR, &menuData.adjustBed.rear_centr2, -BED_ADJUSTMENT_UM_MAX, BED_ADJUSTMENT_UM_MAX);
MENU_ITEM_EDIT(int3, MSG_BED_CORRECTION_REAR_LEFT, &menuData.adjustBed.rear_left2, -BED_ADJUSTMENT_UM_MAX, BED_ADJUSTMENT_UM_MAX);
MENU_ITEM_EDIT(int3, MSG_BED_CORRECTION_MID_LEFT, &menuData.adjustBed.mid_left2, -BED_ADJUSTMENT_UM_MAX, BED_ADJUSTMENT_UM_MAX);
MENU_ITEM(function, MSG_BED_CORRECTION_RESET, lcd_adjust_bed_reset);
END_MENU();
}