From 11d8c157f68517a37f5cf8dc94ac667454b784e5 Mon Sep 17 00:00:00 2001 From: dawidpieper Date: Tue, 15 Aug 2023 22:19:55 +0200 Subject: [PATCH 1/6] M850 add possibility to set sheet as active --- Firmware/Marlin_main.cpp | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index c08cc3d2e0..93d612fc8a 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -7724,14 +7724,15 @@ SERIAL_PROTOCOLPGM("\n\n"); case 850: { //! ### M850 - set sheet parameters - //! //!@n M850 - Set sheet data S[id] Z[offset] L[label] B[bed_temp] P[PINDA_TEMP] - bool bHasZ = false, bHasLabel = false, bHasBed = false, bHasPinda = false; + //! //!@n M850 - Set sheet data S[id] Z[offset] L[label] B[bed_temp] P[PINDA_TEMP] A[IS_ACTIVE] + bool bHasZ = false, bHasLabel = false, bHasBed = false, bHasPinda = false, bHasIsActive = false; uint8_t iSel = 0; int16_t zraw = 0; float z_val = 0; char strLabel[8]; uint8_t iBedC = 0; uint8_t iPindaC = 0; + bool bIsActive=false; strLabel[7] = '\0'; // null terminate. size_t max_sheets = sizeof(EEPROM_Sheets_base->s)/sizeof(EEPROM_Sheets_base->s[0]); @@ -7795,6 +7796,13 @@ SERIAL_PROTOCOLPGM("\n\n"); } else iPindaC = eeprom_read_byte(&EEPROM_Sheets_base->s[iSel].pinda_temp); + if (code_seen('A')) + { + bHasIsActive = true; + bIsActive = code_value_uint8() || (eeprom_read_byte(&(EEPROM_Sheets_base->active_sheet)) == iSel); + } + else + bIsActive = (eeprom_read_byte(&(EEPROM_Sheets_base->active_sheet)) == iSel); { } @@ -7819,6 +7827,10 @@ SERIAL_PROTOCOLPGM("\n\n"); { eeprom_update_byte(&EEPROM_Sheets_base->s[iSel].pinda_temp, iPindaC); } + if (bHasIsActive) + { + if(bIsActive) eeprom_update_byte(&EEPROM_Sheets_base->active_sheet, iSel); + } SERIAL_PROTOCOLPGM(" Z"); SERIAL_PROTOCOL_F(z_val,4); @@ -7830,7 +7842,8 @@ SERIAL_PROTOCOLPGM("\n\n"); SERIAL_PROTOCOL((int)iBedC); SERIAL_PROTOCOLPGM(" P"); SERIAL_PROTOCOLLN((int)iPindaC); - + SERIAL_PROTOCOLPGM(" A"); + SERIAL_PROTOCOLLN((int)bIsActive); break; } From 58014156a0a57f617c2651118bfc4a3bb358c021 Mon Sep 17 00:00:00 2001 From: dawidpieper Date: Wed, 16 Aug 2023 19:18:33 +0200 Subject: [PATCH 2/6] Fix code formatting --- Firmware/Marlin_main.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 93d612fc8a..b1c0ba72cb 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -7795,15 +7795,17 @@ SERIAL_PROTOCOLPGM("\n\n"); iPindaC = code_value_uint8(); } else + { iPindaC = eeprom_read_byte(&EEPROM_Sheets_base->s[iSel].pinda_temp); + } if (code_seen('A')) { bHasIsActive = true; bIsActive = code_value_uint8() || (eeprom_read_byte(&(EEPROM_Sheets_base->active_sheet)) == iSel); } else - bIsActive = (eeprom_read_byte(&(EEPROM_Sheets_base->active_sheet)) == iSel); { + bIsActive = (eeprom_read_byte(&(EEPROM_Sheets_base->active_sheet)) == iSel); } SERIAL_PROTOCOLPGM("Sheet "); From b2f6b77cf3452d210dfa5c6ecfb1dc3aac6d3299 Mon Sep 17 00:00:00 2001 From: dawidpieper Date: Wed, 16 Aug 2023 19:46:57 +0200 Subject: [PATCH 3/6] Add separators between blocks --- Firmware/Marlin_main.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index b1c0ba72cb..9d160043ff 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -7748,6 +7748,7 @@ SERIAL_PROTOCOLPGM("\n\n"); } else { break; } + if (code_seen('Z')){ z_val = code_value(); zraw = z_val*cs.axis_steps_per_mm[Z_AXIS]; @@ -7798,6 +7799,7 @@ SERIAL_PROTOCOLPGM("\n\n"); { iPindaC = eeprom_read_byte(&EEPROM_Sheets_base->s[iSel].pinda_temp); } + if (code_seen('A')) { bHasIsActive = true; From 91cb01b12fe09dca1b4c1b76258f216c119df7c7 Mon Sep 17 00:00:00 2001 From: dawidpieper Date: Wed, 16 Aug 2023 20:08:53 +0200 Subject: [PATCH 4/6] Code optimization --- Firmware/Marlin_main.cpp | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 9d160043ff..1717240039 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -7800,14 +7800,11 @@ SERIAL_PROTOCOLPGM("\n\n"); iPindaC = eeprom_read_byte(&EEPROM_Sheets_base->s[iSel].pinda_temp); } + bIsActive = (eeprom_read_byte(&(EEPROM_Sheets_base->active_sheet)) == iSel); if (code_seen('A')) { bHasIsActive = true; - bIsActive = code_value_uint8() || (eeprom_read_byte(&(EEPROM_Sheets_base->active_sheet)) == iSel); - } - else - { - bIsActive = (eeprom_read_byte(&(EEPROM_Sheets_base->active_sheet)) == iSel); + bIsActive |= code_value_uint8(); } SERIAL_PROTOCOLPGM("Sheet "); @@ -7831,9 +7828,9 @@ SERIAL_PROTOCOLPGM("\n\n"); { eeprom_update_byte(&EEPROM_Sheets_base->s[iSel].pinda_temp, iPindaC); } - if (bHasIsActive) + if (bHasIsActive && bIsActive) { - if(bIsActive) eeprom_update_byte(&EEPROM_Sheets_base->active_sheet, iSel); + eeprom_update_byte(&EEPROM_Sheets_base->active_sheet, iSel); } SERIAL_PROTOCOLPGM(" Z"); From 1dada5ba817f5b665951703123148f085b0a9f4e Mon Sep 17 00:00:00 2001 From: dawidpieper Date: Wed, 16 Aug 2023 20:18:16 +0200 Subject: [PATCH 5/6] Revert optimizations of bIsActive --- Firmware/Marlin_main.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 1717240039..897b9450c3 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -7800,11 +7800,14 @@ SERIAL_PROTOCOLPGM("\n\n"); iPindaC = eeprom_read_byte(&EEPROM_Sheets_base->s[iSel].pinda_temp); } - bIsActive = (eeprom_read_byte(&(EEPROM_Sheets_base->active_sheet)) == iSel); if (code_seen('A')) { bHasIsActive = true; - bIsActive |= code_value_uint8(); + bIsActive |= code_value_uint8() || (eeprom_read_byte(&(EEPROM_Sheets_base->active_sheet)) == iSel); + } + else + { + bIsActive = (eeprom_read_byte(&(EEPROM_Sheets_base->active_sheet)) == iSel); } SERIAL_PROTOCOLPGM("Sheet "); From 14306e59c88a93f329122a7bfe27aed2ca4c3ca3 Mon Sep 17 00:00:00 2001 From: dawidpieper Date: Wed, 16 Aug 2023 20:36:24 +0200 Subject: [PATCH 6/6] Try immediate EEPROM writes for flash size optimization --- Firmware/Marlin_main.cpp | 31 +++++-------------------------- 1 file changed, 5 insertions(+), 26 deletions(-) diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 897b9450c3..59709c0cdb 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -7725,7 +7725,6 @@ SERIAL_PROTOCOLPGM("\n\n"); case 850: { //! ### M850 - set sheet parameters //! //!@n M850 - Set sheet data S[id] Z[offset] L[label] B[bed_temp] P[PINDA_TEMP] A[IS_ACTIVE] - bool bHasZ = false, bHasLabel = false, bHasBed = false, bHasPinda = false, bHasIsActive = false; uint8_t iSel = 0; int16_t zraw = 0; float z_val = 0; @@ -7757,7 +7756,7 @@ SERIAL_PROTOCOLPGM("\n\n"); SERIAL_PROTOCOLLNPGM(" Z VALUE OUT OF RANGE"); break; } - bHasZ = true; + eeprom_update_word(reinterpret_cast(&(EEPROM_Sheets_base->s[iSel].z_offset)),zraw); } else { @@ -7767,13 +7766,13 @@ SERIAL_PROTOCOLPGM("\n\n"); if (code_seen('L')) { - bHasLabel = true; char *src = strchr_pointer + 1; while (*src == ' ') ++src; if (*src != '\0') { strncpy(strLabel,src,7); } + eeprom_update_block(strLabel,EEPROM_Sheets_base->s[iSel].name,sizeof(Sheet::name)); } else { @@ -7782,8 +7781,8 @@ SERIAL_PROTOCOLPGM("\n\n"); if (code_seen('B')) { - bHasBed = true; iBedC = code_value_uint8(); + eeprom_update_byte(&EEPROM_Sheets_base->s[iSel].bed_temp, iBedC); } else { @@ -7792,8 +7791,8 @@ SERIAL_PROTOCOLPGM("\n\n"); if (code_seen('P')) { - bHasPinda = true; iPindaC = code_value_uint8(); + eeprom_update_byte(&EEPROM_Sheets_base->s[iSel].pinda_temp, iPindaC); } else { @@ -7802,8 +7801,8 @@ SERIAL_PROTOCOLPGM("\n\n"); if (code_seen('A')) { - bHasIsActive = true; bIsActive |= code_value_uint8() || (eeprom_read_byte(&(EEPROM_Sheets_base->active_sheet)) == iSel); + if(bIsActive) eeprom_update_byte(&EEPROM_Sheets_base->active_sheet, iSel); } else { @@ -7815,26 +7814,6 @@ SERIAL_PROTOCOLPGM("\n\n"); if (!eeprom_is_sheet_initialized(iSel)) SERIAL_PROTOCOLLNPGM(" NOT INITIALIZED"); - if (bHasZ) - { - eeprom_update_word(reinterpret_cast(&(EEPROM_Sheets_base->s[iSel].z_offset)),zraw); - } - if (bHasLabel) - { - eeprom_update_block(strLabel,EEPROM_Sheets_base->s[iSel].name,sizeof(Sheet::name)); - } - if (bHasBed) - { - eeprom_update_byte(&EEPROM_Sheets_base->s[iSel].bed_temp, iBedC); - } - if (bHasPinda) - { - eeprom_update_byte(&EEPROM_Sheets_base->s[iSel].pinda_temp, iPindaC); - } - if (bHasIsActive && bIsActive) - { - eeprom_update_byte(&EEPROM_Sheets_base->active_sheet, iSel); - } SERIAL_PROTOCOLPGM(" Z"); SERIAL_PROTOCOL_F(z_val,4);