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);
}
#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) {
uint16_t nDiameter;
switch(oNozzleDiameter){
@ -4298,127 +4278,83 @@ static void lcd_check_model_set(void)
{
switch(oCheckModel)
{
case ClCheckModel::_None:
oCheckModel=ClCheckModel::_Warn;
case ClCheckMode::_None:
oCheckModel=ClCheckMode::_Warn;
break;
case ClCheckModel::_Warn:
oCheckModel=ClCheckModel::_Strict;
case ClCheckMode::_Warn:
oCheckModel=ClCheckMode::_Strict;
break;
case ClCheckModel::_Strict:
oCheckModel=ClCheckModel::_None;
case ClCheckMode::_Strict:
oCheckModel=ClCheckMode::_None;
break;
default:
oCheckModel=ClCheckModel::_None;
oCheckModel=ClCheckMode::_None;
}
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)
{
switch(oCheckVersion)
{
case ClCheckVersion::_None:
oCheckVersion=ClCheckVersion::_Warn;
case ClCheckMode::_None:
oCheckVersion=ClCheckMode::_Warn;
break;
case ClCheckVersion::_Warn:
oCheckVersion=ClCheckVersion::_Strict;
case ClCheckMode::_Warn:
oCheckVersion=ClCheckMode::_Strict;
break;
case ClCheckVersion::_Strict:
oCheckVersion=ClCheckVersion::_None;
case ClCheckMode::_Strict:
oCheckVersion=ClCheckMode::_None;
break;
default:
oCheckVersion=ClCheckVersion::_None;
oCheckVersion=ClCheckMode::_None;
}
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)
{
switch(oCheckFilament)
{
case ClCheckFilament::_None:
oCheckFilament=ClCheckFilament::_Warn;
case ClCheckMode::_None:
oCheckFilament=ClCheckMode::_Warn;
break;
case ClCheckFilament::_Warn:
oCheckFilament=ClCheckFilament::_Strict;
case ClCheckMode::_Warn:
oCheckFilament=ClCheckMode::_Strict;
break;
case ClCheckFilament::_Strict:
oCheckFilament=ClCheckFilament::_None;
case ClCheckMode::_Strict:
oCheckFilament=ClCheckMode::_None;
break;
default:
oCheckFilament=ClCheckFilament::_None;
oCheckFilament=ClCheckMode::_None;
}
eeprom_update_byte_notify((uint8_t*)EEPROM_CHECK_FILAMENT,(uint8_t)oCheckFilament);
}
#define SETTINGS_CHECK_FILAMENT \
do\
{\
switch(oCheckFilament)\
{\
case ClCheckFilament::_None:\
MENU_ITEM_TOGGLE_P(MSG_FILAMENT, _T(MSG_NONE), lcd_check_filament_set);\
break;\
case ClCheckFilament::_Warn:\
MENU_ITEM_TOGGLE_P(MSG_FILAMENT, _T(MSG_WARN), lcd_check_filament_set);\
break;\
case ClCheckFilament::_Strict:\
MENU_ITEM_TOGGLE_P(MSG_FILAMENT, _T(MSG_STRICT), lcd_check_filament_set);\
break;\
default:\
MENU_ITEM_TOGGLE_P(MSG_FILAMENT, _T(MSG_NONE), lcd_check_filament_set);\
}\
}\
while (0)
static void settings_check_toggle(ClCheckMode oCheckSetting, const char* msg, void (*func)(void)) {
switch(oCheckSetting) {
case ClCheckMode::_None:
MENU_ITEM_TOGGLE_P(msg, _T(MSG_NONE), func);
break;
case ClCheckMode::_Warn:
MENU_ITEM_TOGGLE_P(msg, _T(MSG_WARN), func);
break;
case ClCheckMode::_Strict:
MENU_ITEM_TOGGLE_P(msg, _T(MSG_STRICT), func);
break;
default:
MENU_ITEM_TOGGLE_P(msg, _T(MSG_NONE), func);
}
}
static void lcd_checking_menu(void)
{
MENU_BEGIN();
MENU_ITEM_BACK_P(_T(MSG_HW_SETUP));
SETTINGS_MODE;
SETTINGS_MODEL;
SETTINGS_VERSION;
SETTINGS_CHECK_FILAMENT;
settings_check_toggle(oCheckMode, _T(MSG_NOZZLE), lcd_check_mode_set);
settings_check_toggle(oCheckModel, _T(MSG_MODEL), lcd_check_model_set);
settings_check_toggle(oCheckVersion, MSG_FIRMWARE, lcd_check_version_set);
settings_check_toggle(oCheckFilament, MSG_FILAMENT, lcd_check_filament_set);
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)
{
if(oCheckVersion == ClCheckVersion::_None)
if(oCheckVersion == ClCheckMode::_None)
return false;
int8_t upgrade = is_provided_version_newer(version_string);
@ -242,10 +242,10 @@ void update_current_firmware_version_to_eeprom()
ClNozzleDiameter oNozzleDiameter;
ClCheckMode oCheckMode;
ClCheckModel oCheckModel;
ClCheckVersion oCheckVersion;
ClCheckGcode oCheckGcode;
ClCheckFilament oCheckFilament;
ClCheckMode oCheckModel;
ClCheckMode oCheckVersion;
ClCheckMode oCheckGcode;
ClCheckMode oCheckFilament;
void fCheckModeInit() {
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);
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);
oCheckVersion = (ClCheckVersion)eeprom_init_default_byte((uint8_t *)EEPROM_CHECK_VERSION, (uint8_t)ClCheckVersion::_Warn);
oCheckGcode = (ClCheckGcode)eeprom_init_default_byte((uint8_t *)EEPROM_CHECK_GCODE, (uint8_t)ClCheckGcode::_Warn);
oCheckFilament = (ClCheckFilament)eeprom_init_default_byte((uint8_t *)EEPROM_CHECK_FILAMENT, (uint8_t)ClCheckFilament::_Warn);
oCheckModel = (ClCheckMode)eeprom_init_default_byte((uint8_t *)EEPROM_CHECK_MODEL, (uint8_t)ClCheckMode::_Warn);
oCheckVersion = (ClCheckMode)eeprom_init_default_byte((uint8_t *)EEPROM_CHECK_VERSION, (uint8_t)ClCheckMode::_Warn);
oCheckGcode = (ClCheckMode)eeprom_init_default_byte((uint8_t *)EEPROM_CHECK_GCODE, (uint8_t)ClCheckMode::_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)
@ -304,7 +304,7 @@ void nozzle_diameter_check(uint16_t nDiameter) {
}
void printer_model_check(uint16_t nPrinterModel, uint16_t actualPrinterModel) {
if (oCheckModel == ClCheckModel::_None)
if (oCheckModel == ClCheckMode::_None)
return;
if (nPrinterModel == actualPrinterModel)
return;
@ -330,7 +330,7 @@ uint8_t mCompareValue(uint16_t nX, uint16_t nY) {
}
void fw_version_check(const char *pVersion) {
if (oCheckVersion == ClCheckVersion::_None)
if (oCheckVersion == ClCheckMode::_None)
return;
uint16_t aVersion[4];
@ -374,7 +374,7 @@ void fw_version_check(const char *pVersion) {
void filament_presence_check() {
if (fsensor.isEnabled() && !fsensor.getFilamentPresent())
{
if (oCheckFilament == ClCheckFilament::_None)
if (oCheckFilament == ClCheckMode::_None)
return;
render_M862_warnings(
@ -387,7 +387,7 @@ void filament_presence_check() {
}
void gcode_level_check(uint16_t nGcodeLevel) {
if (oCheckGcode == ClCheckGcode::_None)
if (oCheckGcode == ClCheckMode::_None)
return;
if (nGcodeLevel <= (uint16_t)GCODE_LEVEL)
return;

View File

@ -55,38 +55,6 @@ enum class ClCheckMode:uint_least8_t
_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))
enum class ClCompareValue:uint_least8_t
{
@ -137,10 +105,10 @@ private:
extern ClNozzleDiameter oNozzleDiameter;
extern ClCheckMode oCheckMode;
extern ClCheckModel oCheckModel;
extern ClCheckVersion oCheckVersion;
extern ClCheckGcode oCheckGcode;
extern ClCheckFilament oCheckFilament;
extern ClCheckMode oCheckModel;
extern ClCheckMode oCheckVersion;
extern ClCheckMode oCheckGcode;
extern ClCheckMode oCheckFilament;
void fCheckModeInit();
void nozzle_diameter_check(uint16_t nDiameter);