optimisation: deduplicate printer check toggle menus

This saves ~100B of flash
This commit is contained in:
Guðni Már Gilbert 2024-07-26 13:18:07 +00:00 committed by gudnimg
parent bf72ecc3f9
commit b7caf36207
3 changed files with 57 additions and 153 deletions

View File

@ -4233,26 +4233,6 @@ switch(oCheckMode)
eeprom_update_byte_notify((uint8_t*)EEPROM_CHECK_MODE,(uint8_t)oCheckMode); eeprom_update_byte_notify((uint8_t*)EEPROM_CHECK_MODE,(uint8_t)oCheckMode);
} }
#define SETTINGS_MODE \
do\
{\
switch(oCheckMode)\
{\
case ClCheckMode::_None:\
MENU_ITEM_TOGGLE_P(_T(MSG_NOZZLE), _T(MSG_NONE), lcd_check_mode_set);\
break;\
case ClCheckMode::_Warn:\
MENU_ITEM_TOGGLE_P(_T(MSG_NOZZLE), _T(MSG_WARN), lcd_check_mode_set);\
break;\
case ClCheckMode::_Strict:\
MENU_ITEM_TOGGLE_P(_T(MSG_NOZZLE), _T(MSG_STRICT), lcd_check_mode_set);\
break;\
default:\
MENU_ITEM_TOGGLE_P(_T(MSG_NOZZLE), _T(MSG_NONE), lcd_check_mode_set);\
}\
}\
while (0)
static void lcd_nozzle_diameter_cycle(void) { static void lcd_nozzle_diameter_cycle(void) {
uint16_t nDiameter; uint16_t nDiameter;
switch(oNozzleDiameter){ switch(oNozzleDiameter){
@ -4298,127 +4278,83 @@ static void lcd_check_model_set(void)
{ {
switch(oCheckModel) switch(oCheckModel)
{ {
case ClCheckModel::_None: case ClCheckMode::_None:
oCheckModel=ClCheckModel::_Warn; oCheckModel=ClCheckMode::_Warn;
break; break;
case ClCheckModel::_Warn: case ClCheckMode::_Warn:
oCheckModel=ClCheckModel::_Strict; oCheckModel=ClCheckMode::_Strict;
break; break;
case ClCheckModel::_Strict: case ClCheckMode::_Strict:
oCheckModel=ClCheckModel::_None; oCheckModel=ClCheckMode::_None;
break; break;
default: default:
oCheckModel=ClCheckModel::_None; oCheckModel=ClCheckMode::_None;
} }
eeprom_update_byte_notify((uint8_t*)EEPROM_CHECK_MODEL,(uint8_t)oCheckModel); eeprom_update_byte_notify((uint8_t*)EEPROM_CHECK_MODEL,(uint8_t)oCheckModel);
} }
#define SETTINGS_MODEL \
do\
{\
switch(oCheckModel)\
{\
case ClCheckModel::_None:\
MENU_ITEM_TOGGLE_P(_T(MSG_MODEL), _T(MSG_NONE), lcd_check_model_set);\
break;\
case ClCheckModel::_Warn:\
MENU_ITEM_TOGGLE_P(_T(MSG_MODEL), _T(MSG_WARN), lcd_check_model_set);\
break;\
case ClCheckModel::_Strict:\
MENU_ITEM_TOGGLE_P(_T(MSG_MODEL), _T(MSG_STRICT), lcd_check_model_set);\
break;\
default:\
MENU_ITEM_TOGGLE_P(_T(MSG_MODEL), _T(MSG_NONE), lcd_check_model_set);\
}\
}\
while (0)
static void lcd_check_version_set(void) static void lcd_check_version_set(void)
{ {
switch(oCheckVersion) switch(oCheckVersion)
{ {
case ClCheckVersion::_None: case ClCheckMode::_None:
oCheckVersion=ClCheckVersion::_Warn; oCheckVersion=ClCheckMode::_Warn;
break; break;
case ClCheckVersion::_Warn: case ClCheckMode::_Warn:
oCheckVersion=ClCheckVersion::_Strict; oCheckVersion=ClCheckMode::_Strict;
break; break;
case ClCheckVersion::_Strict: case ClCheckMode::_Strict:
oCheckVersion=ClCheckVersion::_None; oCheckVersion=ClCheckMode::_None;
break; break;
default: default:
oCheckVersion=ClCheckVersion::_None; oCheckVersion=ClCheckMode::_None;
} }
eeprom_update_byte_notify((uint8_t*)EEPROM_CHECK_VERSION,(uint8_t)oCheckVersion); eeprom_update_byte_notify((uint8_t*)EEPROM_CHECK_VERSION,(uint8_t)oCheckVersion);
} }
#define SETTINGS_VERSION \
do\
{\
switch(oCheckVersion)\
{\
case ClCheckVersion::_None:\
MENU_ITEM_TOGGLE_P(MSG_FIRMWARE, _T(MSG_NONE), lcd_check_version_set);\
break;\
case ClCheckVersion::_Warn:\
MENU_ITEM_TOGGLE_P(MSG_FIRMWARE, _T(MSG_WARN), lcd_check_version_set);\
break;\
case ClCheckVersion::_Strict:\
MENU_ITEM_TOGGLE_P(MSG_FIRMWARE, _T(MSG_STRICT), lcd_check_version_set);\
break;\
default:\
MENU_ITEM_TOGGLE_P(MSG_FIRMWARE, _T(MSG_NONE), lcd_check_version_set);\
}\
}\
while (0)
static void lcd_check_filament_set(void) static void lcd_check_filament_set(void)
{ {
switch(oCheckFilament) switch(oCheckFilament)
{ {
case ClCheckFilament::_None: case ClCheckMode::_None:
oCheckFilament=ClCheckFilament::_Warn; oCheckFilament=ClCheckMode::_Warn;
break; break;
case ClCheckFilament::_Warn: case ClCheckMode::_Warn:
oCheckFilament=ClCheckFilament::_Strict; oCheckFilament=ClCheckMode::_Strict;
break; break;
case ClCheckFilament::_Strict: case ClCheckMode::_Strict:
oCheckFilament=ClCheckFilament::_None; oCheckFilament=ClCheckMode::_None;
break; break;
default: default:
oCheckFilament=ClCheckFilament::_None; oCheckFilament=ClCheckMode::_None;
} }
eeprom_update_byte_notify((uint8_t*)EEPROM_CHECK_FILAMENT,(uint8_t)oCheckFilament); eeprom_update_byte_notify((uint8_t*)EEPROM_CHECK_FILAMENT,(uint8_t)oCheckFilament);
} }
#define SETTINGS_CHECK_FILAMENT \ static void settings_check_toggle(ClCheckMode oCheckSetting, const char* msg, void (*func)(void)) {
do\ switch(oCheckSetting) {
{\ case ClCheckMode::_None:
switch(oCheckFilament)\ MENU_ITEM_TOGGLE_P(msg, _T(MSG_NONE), func);
{\ break;
case ClCheckFilament::_None:\ case ClCheckMode::_Warn:
MENU_ITEM_TOGGLE_P(MSG_FILAMENT, _T(MSG_NONE), lcd_check_filament_set);\ MENU_ITEM_TOGGLE_P(msg, _T(MSG_WARN), func);
break;\ break;
case ClCheckFilament::_Warn:\ case ClCheckMode::_Strict:
MENU_ITEM_TOGGLE_P(MSG_FILAMENT, _T(MSG_WARN), lcd_check_filament_set);\ MENU_ITEM_TOGGLE_P(msg, _T(MSG_STRICT), func);
break;\ break;
case ClCheckFilament::_Strict:\ default:
MENU_ITEM_TOGGLE_P(MSG_FILAMENT, _T(MSG_STRICT), lcd_check_filament_set);\ MENU_ITEM_TOGGLE_P(msg, _T(MSG_NONE), func);
break;\ }
default:\ }
MENU_ITEM_TOGGLE_P(MSG_FILAMENT, _T(MSG_NONE), lcd_check_filament_set);\
}\
}\
while (0)
static void lcd_checking_menu(void) static void lcd_checking_menu(void)
{ {
MENU_BEGIN(); MENU_BEGIN();
MENU_ITEM_BACK_P(_T(MSG_HW_SETUP)); MENU_ITEM_BACK_P(_T(MSG_HW_SETUP));
SETTINGS_MODE; settings_check_toggle(oCheckMode, _T(MSG_NOZZLE), lcd_check_mode_set);
SETTINGS_MODEL; settings_check_toggle(oCheckModel, _T(MSG_MODEL), lcd_check_model_set);
SETTINGS_VERSION; settings_check_toggle(oCheckVersion, MSG_FIRMWARE, lcd_check_version_set);
SETTINGS_CHECK_FILAMENT; settings_check_toggle(oCheckFilament, MSG_FILAMENT, lcd_check_filament_set);
MENU_END(); MENU_END();
} }

View File

@ -202,7 +202,7 @@ bool eeprom_fw_version_older_than_p(const uint16_t (&ver_req)[4])
bool show_upgrade_dialog_if_version_newer(const char *version_string) bool show_upgrade_dialog_if_version_newer(const char *version_string)
{ {
if(oCheckVersion == ClCheckVersion::_None) if(oCheckVersion == ClCheckMode::_None)
return false; return false;
int8_t upgrade = is_provided_version_newer(version_string); int8_t upgrade = is_provided_version_newer(version_string);
@ -242,10 +242,10 @@ void update_current_firmware_version_to_eeprom()
ClNozzleDiameter oNozzleDiameter; ClNozzleDiameter oNozzleDiameter;
ClCheckMode oCheckMode; ClCheckMode oCheckMode;
ClCheckModel oCheckModel; ClCheckMode oCheckModel;
ClCheckVersion oCheckVersion; ClCheckMode oCheckVersion;
ClCheckGcode oCheckGcode; ClCheckMode oCheckGcode;
ClCheckFilament oCheckFilament; ClCheckMode oCheckFilament;
void fCheckModeInit() { void fCheckModeInit() {
oCheckMode = (ClCheckMode)eeprom_init_default_byte((uint8_t *)EEPROM_CHECK_MODE, (uint8_t)ClCheckMode::_Warn); oCheckMode = (ClCheckMode)eeprom_init_default_byte((uint8_t *)EEPROM_CHECK_MODE, (uint8_t)ClCheckMode::_Warn);
@ -258,10 +258,10 @@ void fCheckModeInit() {
oNozzleDiameter = (ClNozzleDiameter)eeprom_init_default_byte((uint8_t *)EEPROM_NOZZLE_DIAMETER, (uint8_t)ClNozzleDiameter::_Diameter_400); oNozzleDiameter = (ClNozzleDiameter)eeprom_init_default_byte((uint8_t *)EEPROM_NOZZLE_DIAMETER, (uint8_t)ClNozzleDiameter::_Diameter_400);
eeprom_init_default_word((uint16_t *)EEPROM_NOZZLE_DIAMETER_uM, EEPROM_NOZZLE_DIAMETER_uM_DEFAULT); eeprom_init_default_word((uint16_t *)EEPROM_NOZZLE_DIAMETER_uM, EEPROM_NOZZLE_DIAMETER_uM_DEFAULT);
oCheckModel = (ClCheckModel)eeprom_init_default_byte((uint8_t *)EEPROM_CHECK_MODEL, (uint8_t)ClCheckModel::_Warn); oCheckModel = (ClCheckMode)eeprom_init_default_byte((uint8_t *)EEPROM_CHECK_MODEL, (uint8_t)ClCheckMode::_Warn);
oCheckVersion = (ClCheckVersion)eeprom_init_default_byte((uint8_t *)EEPROM_CHECK_VERSION, (uint8_t)ClCheckVersion::_Warn); oCheckVersion = (ClCheckMode)eeprom_init_default_byte((uint8_t *)EEPROM_CHECK_VERSION, (uint8_t)ClCheckMode::_Warn);
oCheckGcode = (ClCheckGcode)eeprom_init_default_byte((uint8_t *)EEPROM_CHECK_GCODE, (uint8_t)ClCheckGcode::_Warn); oCheckGcode = (ClCheckMode)eeprom_init_default_byte((uint8_t *)EEPROM_CHECK_GCODE, (uint8_t)ClCheckMode::_Warn);
oCheckFilament = (ClCheckFilament)eeprom_init_default_byte((uint8_t *)EEPROM_CHECK_FILAMENT, (uint8_t)ClCheckFilament::_Warn); oCheckFilament = (ClCheckMode)eeprom_init_default_byte((uint8_t *)EEPROM_CHECK_FILAMENT, (uint8_t)ClCheckMode::_Warn);
} }
static void render_M862_warnings(const char* warning, const char* strict, uint8_t check) static void render_M862_warnings(const char* warning, const char* strict, uint8_t check)
@ -304,7 +304,7 @@ void nozzle_diameter_check(uint16_t nDiameter) {
} }
void printer_model_check(uint16_t nPrinterModel, uint16_t actualPrinterModel) { void printer_model_check(uint16_t nPrinterModel, uint16_t actualPrinterModel) {
if (oCheckModel == ClCheckModel::_None) if (oCheckModel == ClCheckMode::_None)
return; return;
if (nPrinterModel == actualPrinterModel) if (nPrinterModel == actualPrinterModel)
return; return;
@ -330,7 +330,7 @@ uint8_t mCompareValue(uint16_t nX, uint16_t nY) {
} }
void fw_version_check(const char *pVersion) { void fw_version_check(const char *pVersion) {
if (oCheckVersion == ClCheckVersion::_None) if (oCheckVersion == ClCheckMode::_None)
return; return;
uint16_t aVersion[4]; uint16_t aVersion[4];
@ -374,7 +374,7 @@ void fw_version_check(const char *pVersion) {
void filament_presence_check() { void filament_presence_check() {
if (fsensor.isEnabled() && !fsensor.getFilamentPresent()) if (fsensor.isEnabled() && !fsensor.getFilamentPresent())
{ {
if (oCheckFilament == ClCheckFilament::_None) if (oCheckFilament == ClCheckMode::_None)
return; return;
render_M862_warnings( render_M862_warnings(
@ -387,7 +387,7 @@ void filament_presence_check() {
} }
void gcode_level_check(uint16_t nGcodeLevel) { void gcode_level_check(uint16_t nGcodeLevel) {
if (oCheckGcode == ClCheckGcode::_None) if (oCheckGcode == ClCheckMode::_None)
return; return;
if (nGcodeLevel <= (uint16_t)GCODE_LEVEL) if (nGcodeLevel <= (uint16_t)GCODE_LEVEL)
return; return;

View File

@ -55,38 +55,6 @@ enum class ClCheckMode:uint_least8_t
_Undef=EEPROM_EMPTY_VALUE _Undef=EEPROM_EMPTY_VALUE
}; };
enum class ClCheckModel:uint_least8_t
{
_None,
_Warn,
_Strict,
_Undef=EEPROM_EMPTY_VALUE
};
enum class ClCheckVersion:uint_least8_t
{
_None,
_Warn,
_Strict,
_Undef=EEPROM_EMPTY_VALUE
};
enum class ClCheckGcode:uint_least8_t
{
_None,
_Warn,
_Strict,
_Undef=EEPROM_EMPTY_VALUE
};
enum class ClCheckFilament:uint_least8_t
{
_None,
_Warn,
_Strict,
_Undef=EEPROM_EMPTY_VALUE
};
#define COMPARE_VALUE_EQUAL (((uint8_t)ClCompareValue::_Equal<<6)+((uint8_t)ClCompareValue::_Equal<<4)+((uint8_t)ClCompareValue::_Equal<<2)+((uint8_t)ClCompareValue::_Equal)) #define COMPARE_VALUE_EQUAL (((uint8_t)ClCompareValue::_Equal<<6)+((uint8_t)ClCompareValue::_Equal<<4)+((uint8_t)ClCompareValue::_Equal<<2)+((uint8_t)ClCompareValue::_Equal))
enum class ClCompareValue:uint_least8_t enum class ClCompareValue:uint_least8_t
{ {
@ -137,10 +105,10 @@ private:
extern ClNozzleDiameter oNozzleDiameter; extern ClNozzleDiameter oNozzleDiameter;
extern ClCheckMode oCheckMode; extern ClCheckMode oCheckMode;
extern ClCheckModel oCheckModel; extern ClCheckMode oCheckModel;
extern ClCheckVersion oCheckVersion; extern ClCheckMode oCheckVersion;
extern ClCheckGcode oCheckGcode; extern ClCheckMode oCheckGcode;
extern ClCheckFilament oCheckFilament; extern ClCheckMode oCheckFilament;
void fCheckModeInit(); void fCheckModeInit();
void nozzle_diameter_check(uint16_t nDiameter); void nozzle_diameter_check(uint16_t nDiameter);