From 49506b5348baefea27f6c1ffd0180bb3228ade6a Mon Sep 17 00:00:00 2001 From: 3d-gussner <3d.gussner@gmail.com> Date: Tue, 6 Dec 2022 13:18:52 +0100 Subject: [PATCH 1/2] Fix `M862.4` with [strict] mode Max 8 falvor versions Fix cherry-pick issues --- Firmware/Configuration.h | 2 +- Firmware/util.cpp | 41 ++++++++++++++++++++-------------------- Firmware/util.h | 14 +++++++++----- 3 files changed, 31 insertions(+), 26 deletions(-) diff --git a/Firmware/Configuration.h b/Firmware/Configuration.h index 4d286a234..ec3a265b5 100644 --- a/Firmware/Configuration.h +++ b/Firmware/Configuration.h @@ -20,7 +20,7 @@ extern PGM_P sPrinterName; #define FW_MINOR 12 #define FW_REVISION 0 #define FW_FLAVOR RC //uncomment if DEBUG, DEVEL, ALPHA, BETA or RC -#define FW_FLAVERSION 1 //uncomment if FW_FLAVOR is defined and versioning is needed. +#define FW_FLAVERSION 1 //uncomment if FW_FLAVOR is defined and versioning is needed. Limited to max 8. #ifndef FW_FLAVOR #define FW_VERSION STR(FW_MAJOR) "." STR(FW_MINOR) "." STR(FW_REVISION) #else diff --git a/Firmware/util.cpp b/Firmware/util.cpp index 4a1fb7a06..75bf6275e 100644 --- a/Firmware/util.cpp +++ b/Firmware/util.cpp @@ -390,27 +390,28 @@ void fw_version_check(const char *pVersion) { nCompareValueResult += mCompareValue(aVersion[3], eeprom_read_word((uint16_t *)EEPROM_FIRMWARE_VERSION_FLAVOR)); if (nCompareValueResult == COMPARE_VALUE_EQUAL) return; - if ((nCompareValueResult < COMPARE_VALUE_EQUAL) && oCheckVersion == ClCheckVersion::_Warn) + if ((nCompareValueResult < COMPARE_VALUE_EQUAL) && (oCheckVersion == ClCheckVersion::_Warn || oCheckVersion == ClCheckVersion::_Strict)) return; - // SERIAL_ECHO_START; - // SERIAL_ECHOLNPGM("Printer FW version differs from the G-code ..."); - // SERIAL_ECHOPGM("actual : "); -// SERIAL_ECHO(eeprom_read_word((uint16_t *)EEPROM_FIRMWARE_VERSION_MAJOR)); -// SERIAL_ECHO('.'); -// SERIAL_ECHO(eeprom_read_word((uint16_t *)EEPROM_FIRMWARE_VERSION_MINOR)); -// SERIAL_ECHO('.'); -// SERIAL_ECHO(eeprom_read_word((uint16_t *)EEPROM_FIRMWARE_VERSION_REVISION)); -// SERIAL_ECHO('.'); -// SERIAL_ECHO(eeprom_read_word((uint16_t *)EEPROM_FIRMWARE_VERSION_FLAVOR)); -// SERIAL_ECHOPGM("\nexpected: "); -// SERIAL_ECHO(aVersion[0]); -// SERIAL_ECHO('.'); -// SERIAL_ECHO(aVersion[1]); -// SERIAL_ECHO('.'); -// SERIAL_ECHO(aVersion[2]); -// SERIAL_ECHO('.'); -// SERIAL_ECHOLN(aVersion[3]); - +/* + SERIAL_ECHO_START; + SERIAL_ECHOLNPGM("Printer FW version differs from the G-code ..."); + SERIAL_ECHOPGM("actual : "); + SERIAL_ECHO(eeprom_read_word((uint16_t *)EEPROM_FIRMWARE_VERSION_MAJOR)); + SERIAL_ECHO('.'); + SERIAL_ECHO(eeprom_read_word((uint16_t *)EEPROM_FIRMWARE_VERSION_MINOR)); + SERIAL_ECHO('.'); + SERIAL_ECHO(eeprom_read_word((uint16_t *)EEPROM_FIRMWARE_VERSION_REVISION)); + SERIAL_ECHO('.'); + SERIAL_ECHO(eeprom_read_word((uint16_t *)EEPROM_FIRMWARE_VERSION_FLAVOR)); + SERIAL_ECHOPGM("\nexpected: "); + SERIAL_ECHO(aVersion[0]); + SERIAL_ECHO('.'); + SERIAL_ECHO(aVersion[1]); + SERIAL_ECHO('.'); + SERIAL_ECHO(aVersion[2]); + SERIAL_ECHO('.'); + SERIAL_ECHOLN(aVersion[3]); +*/ switch (oCheckVersion) { case ClCheckVersion::_Warn: // lcd_show_fullscreen_message_and_wait_P(_i("Printer FW version differs from the G-code. Continue?")); diff --git a/Firmware/util.h b/Firmware/util.h index e45578840..206fdcd13 100644 --- a/Firmware/util.h +++ b/Firmware/util.h @@ -4,12 +4,16 @@ extern const char* FW_VERSION_STR_P(); // Definition of a firmware flavor numerical values. +// To keep it short as possible +// DEVs/ALPHAs/BETAs limited to max 8 flavor versions +// RCs limited to 32 flavor versions +// Final Release always 64 as highest enum FirmwareRevisionFlavorType : uint16_t { - FIRMWARE_REVISION_RELEASED = 0, - FIRMWARE_REVISION_DEV = 0x0100, - FIRMWARE_REVISION_ALPHA = 0x0200, - FIRMWARE_REVISION_BETA = 0x0300, - FIRMWARE_REVISION_RC = 0x0400 + FIRMWARE_REVISION_RELEASED = 0x0040, + FIRMWARE_REVISION_DEV = 0x0000, + FIRMWARE_REVISION_ALPHA = 0x008, + FIRMWARE_REVISION_BETA = 0x0010, + FIRMWARE_REVISION_RC = 0x0020 }; extern bool show_upgrade_dialog_if_version_newer(const char *version_string); From a6eff8f8a5ed9d8b2a3e04fc422ddcd0891dd9b3 Mon Sep 17 00:00:00 2001 From: Yuri D'Elia Date: Wed, 7 Dec 2022 18:59:29 +0100 Subject: [PATCH 2/2] Simplify firmware/gcode version comparisons Fix cherry-pick issue --- Firmware/util.cpp | 71 +++++++++++++++++++++++------------------------ 1 file changed, 34 insertions(+), 37 deletions(-) diff --git a/Firmware/util.cpp b/Firmware/util.cpp index 75bf6275e..9d7bca978 100644 --- a/Firmware/util.cpp +++ b/Firmware/util.cpp @@ -378,20 +378,19 @@ return((uint8_t)ClCompareValue::_Equal); } void fw_version_check(const char *pVersion) { - uint16_t aVersion[4]; - uint8_t nCompareValueResult; - if (oCheckVersion == ClCheckVersion::_None) return; + + uint16_t aVersion[4]; + uint8_t nCompareValueResult; parse_version(pVersion, aVersion); nCompareValueResult = mCompareValue(aVersion[0], eeprom_read_word((uint16_t *)EEPROM_FIRMWARE_VERSION_MAJOR)) << 6; nCompareValueResult += mCompareValue(aVersion[1], eeprom_read_word((uint16_t *)EEPROM_FIRMWARE_VERSION_MINOR)) << 4; nCompareValueResult += mCompareValue(aVersion[2], eeprom_read_word((uint16_t *)EEPROM_FIRMWARE_VERSION_REVISION)) << 2; nCompareValueResult += mCompareValue(aVersion[3], eeprom_read_word((uint16_t *)EEPROM_FIRMWARE_VERSION_FLAVOR)); - if (nCompareValueResult == COMPARE_VALUE_EQUAL) - return; - if ((nCompareValueResult < COMPARE_VALUE_EQUAL) && (oCheckVersion == ClCheckVersion::_Warn || oCheckVersion == ClCheckVersion::_Strict)) + if (nCompareValueResult <= COMPARE_VALUE_EQUAL) return; + /* SERIAL_ECHO_START; SERIAL_ECHOLNPGM("Printer FW version differs from the G-code ..."); @@ -431,37 +430,35 @@ void fw_version_check(const char *pVersion) { } } -void gcode_level_check(uint16_t nGcodeLevel) -{ -if(oCheckGcode==ClCheckGcode::_None) - return; -if(nGcodeLevel==(uint16_t)GCODE_LEVEL) - return; -if((nGcodeLevel<(uint16_t)GCODE_LEVEL)&&(oCheckGcode==ClCheckGcode::_Warn)) - return; -//SERIAL_ECHO_START; -//SERIAL_ECHOLNPGM("Printer G-code level differs from the G-code ..."); -//SERIAL_ECHOPGM("actual : "); -//SERIAL_ECHOLN(GCODE_LEVEL); -//SERIAL_ECHOPGM("expected: "); -//SERIAL_ECHOLN(nGcodeLevel); -switch(oCheckGcode) - { - case ClCheckGcode::_Warn: -// lcd_show_fullscreen_message_and_wait_P(_i("Printer G-code level differs from the G-code. Continue?")); -lcd_display_message_fullscreen_P(_i("G-code sliced for a different level. Continue?"));////MSG_GCODE_DIFF_CONTINUE c=20 r=4 -lcd_wait_for_click_delay(MSG_PRINT_CHECKING_FAILED_TIMEOUT); -//???custom_message_type=CUSTOM_MSG_TYPE_STATUS; // display / status-line recovery -lcd_update_enable(true); // display / status-line recovery - break; - case ClCheckGcode::_Strict: - lcd_show_fullscreen_message_and_wait_P(_i("G-code sliced for a different level. Please re-slice the model again. Print cancelled."));////MSG_GCODE_DIFF_CANCELLED c=20 r=7 - lcd_print_stop(); - break; - case ClCheckGcode::_None: - case ClCheckGcode::_Undef: - break; - } +void gcode_level_check(uint16_t nGcodeLevel) { + if (oCheckGcode == ClCheckGcode::_None) + return; + if (nGcodeLevel <= (uint16_t)GCODE_LEVEL) + return; + + // SERIAL_ECHO_START; + // SERIAL_ECHOLNPGM("Printer G-code level differs from the G-code ..."); + // SERIAL_ECHOPGM("actual : "); + // SERIAL_ECHOLN(GCODE_LEVEL); + // SERIAL_ECHOPGM("expected: "); + // SERIAL_ECHOLN(nGcodeLevel); + switch (oCheckGcode) { + case ClCheckGcode::_Warn: + // lcd_show_fullscreen_message_and_wait_P(_i("Printer G-code level differs from the G-code. Continue?")); + lcd_display_message_fullscreen_P(_i("G-code sliced for a different level. Continue?")); ////MSG_GCODE_DIFF_CONTINUE c=20 r=4 + lcd_wait_for_click_delay(MSG_PRINT_CHECKING_FAILED_TIMEOUT); + //???custom_message_type=CUSTOM_MSG_TYPE_STATUS; // display / status-line recovery + lcd_update_enable(true); // display / status-line recovery + break; + case ClCheckGcode::_Strict: + lcd_show_fullscreen_message_and_wait_P( + _i("G-code sliced for a different level. Please re-slice the model again. Print cancelled.")); ////MSG_GCODE_DIFF_CANCELLED c=20 r=7 + lcd_print_stop(); + break; + case ClCheckGcode::_None: + case ClCheckGcode::_Undef: + break; + } } //-// -> cmdqueue ???