Browse Source

M600: lcd_change_fil_state does not need to be global

Refactor lcd_alright() to save flash

Change in memory:
Flash: -98 bytes
SRAM: -1 bytes
Guðni Már Gilbert 2 years ago
parent
commit
f297131792
4 changed files with 52 additions and 71 deletions
  1. 0 1
      Firmware/Marlin.h
  2. 6 11
      Firmware/Marlin_main.cpp
  3. 45 58
      Firmware/ultralcd.cpp
  4. 1 1
      Firmware/ultralcd.h

+ 0 - 1
Firmware/Marlin.h

@@ -281,7 +281,6 @@ extern float max_pos[3];
 extern bool axis_known_position[3];
 extern int fanSpeed;
 extern uint8_t newFanSpeed;
-extern int8_t lcd_change_fil_state;
 extern float default_retraction;
 
 void get_coordinates();

+ 6 - 11
Firmware/Marlin_main.cpp

@@ -189,8 +189,6 @@ int extruder_multiply[EXTRUDERS] = {100
 
 bool homing_flag = false;
 
-int8_t lcd_change_fil_state = 0;
-
 unsigned long pause_time = 0;
 unsigned long start_pause_print = _millis();
 unsigned long t_fan_rising_edge = _millis();
@@ -3566,8 +3564,6 @@ static void gcode_M600(bool automatic, float x_position, float y_position, float
     if (!MMU2::mmu2.Enabled())
         M600_wait_for_user(HotendTempBckp);
 
-    lcd_change_fil_state = 0;
-
     // Unload filament
     if (MMU2::mmu2.Enabled())
         mmu_M600_unload_filament();
@@ -3579,9 +3575,9 @@ static void gcode_M600(bool automatic, float x_position, float y_position, float
         
         if (!MMU2::mmu2.Enabled()) {
             KEEPALIVE_STATE(PAUSED_FOR_USER);
-            lcd_change_fil_state =
+            uint8_t choice =
                 lcd_show_fullscreen_message_yes_no_and_wait_P(_i("Was filament unload successful?"), false, LCD_LEFT_BUTTON_CHOICE); ////MSG_UNLOAD_SUCCESSFUL c=20 r=2
-            if (lcd_change_fil_state == LCD_MIDDLE_BUTTON_CHOICE) {
+            if (choice == LCD_MIDDLE_BUTTON_CHOICE) {
                 lcd_clear();
                 lcd_puts_at_P(0, 2, _T(MSG_PLEASE_WAIT));
                 current_position[X_AXIS] -= 100;
@@ -11505,14 +11501,13 @@ void load_filament_final_feed()
 //! @par nozzle_temp nozzle temperature to load filament
 void M600_check_state(float nozzle_temp)
 {
-    lcd_change_fil_state = 0;
-    while (lcd_change_fil_state != 1)
+    uint8_t lcd_change_filament_state = 0;
+    while (lcd_change_filament_state != 1)
     {
-        lcd_change_fil_state = 0;
         KEEPALIVE_STATE(PAUSED_FOR_USER);
-        lcd_alright();
+        lcd_change_filament_state = lcd_alright();
         KEEPALIVE_STATE(IN_HANDLER);
-        switch(lcd_change_fil_state)
+        switch(lcd_change_filament_state)
         {
         // Filament failed to load so load it again
         case 2:

+ 45 - 58
Firmware/ultralcd.cpp

@@ -2255,74 +2255,61 @@ void lcd_loading_filament() {
 
 
 
-void lcd_alright() {
-  int enc_dif = 0;
-  int cursor_pos = 1;
-
-
-
-
-  lcd_clear();
-
-  lcd_puts_at_P(0, 0, _i("Changed correctly?"));////MSG_CORRECTLY c=20
-  lcd_puts_at_P(1, 1, _T(MSG_YES));
-  lcd_puts_at_P(1, 2, _i("Filament not loaded"));////MSG_NOT_LOADED c=19
-  lcd_puts_at_P(1, 3, _i("Color not correct"));////MSG_NOT_COLOR c=19
-  lcd_putc_at(0, 1, '>');
+uint8_t lcd_alright() {
+    int8_t enc_dif = 0;
+    uint8_t cursor_pos = 1;
 
+    lcd_clear();
+    lcd_puts_at_P(0, 0, _i("Changed correctly?"));////MSG_CORRECTLY c=20
+    lcd_puts_at_P(1, 1, _T(MSG_YES));
+    lcd_puts_at_P(1, 2, _i("Filament not loaded"));////MSG_NOT_LOADED c=19
+    lcd_puts_at_P(1, 3, _i("Color not correct"));////MSG_NOT_COLOR c=19
+    lcd_putc_at(0, 1, '>');
 
-  enc_dif = lcd_encoder_diff;
-  lcd_consume_click();
-  while (lcd_change_fil_state == 0) {
 
-    manage_heater();
-    manage_inactivity(true);
+    enc_dif = lcd_encoder_diff;
+    lcd_consume_click();
+    while (1)
+    {
+        manage_heater();
+        manage_inactivity(true);
 
-    if ( abs((enc_dif - lcd_encoder_diff)) > 4 ) {
+        if (abs(enc_dif - lcd_encoder_diff) >= ENCODER_PULSES_PER_STEP)
+        {
 
-      if ( (abs(enc_dif - lcd_encoder_diff)) > 1 ) {
-        if (enc_dif > lcd_encoder_diff ) {
-          cursor_pos --;
-        }
+            if (enc_dif > lcd_encoder_diff ) {
+                // Rotating knob counter clockwise
+                cursor_pos--;
+            } else if (enc_dif < lcd_encoder_diff) {
+                // Rotating knob clockwise
+                cursor_pos++;
+            }
+            if (cursor_pos > 3) {
+                cursor_pos = 3;
+                Sound_MakeSound(e_SOUND_TYPE_BlindAlert);
+            } else if (cursor_pos < 1) {
+                cursor_pos = 1;
+                Sound_MakeSound(e_SOUND_TYPE_BlindAlert);
+            }
 
-        if (enc_dif < lcd_encoder_diff  ) {
-          cursor_pos ++;
-        }
+            // Update '>' render only
+            lcd_puts_at_P(0, 1, PSTR(" \n \n "));
+            lcd_putc_at(0, cursor_pos, '>');
 
-        if (cursor_pos > 3) {
-          cursor_pos = 3;
-					Sound_MakeSound(e_SOUND_TYPE_BlindAlert);
+            // Consume rotation event and make feedback sound
+            enc_dif = lcd_encoder_diff;
+            Sound_MakeSound(e_SOUND_TYPE_EncoderMove);
+            _delay(100);
         }
 
-        if (cursor_pos < 1) {
-          cursor_pos = 1;
-					Sound_MakeSound(e_SOUND_TYPE_BlindAlert);
+        if (lcd_clicked())
+        {
+            Sound_MakeSound(e_SOUND_TYPE_ButtonEcho);
+            lcd_clear();
+            lcd_return_to_status();
+            return cursor_pos;
         }
-        lcd_puts_at_P(0, 1, PSTR(" \n \n "));
-        lcd_putc_at(0, cursor_pos, '>');
-        enc_dif = lcd_encoder_diff;
-				Sound_MakeSound(e_SOUND_TYPE_EncoderMove);
-        _delay(100);
-      }
-
-    }
-
-
-    if (lcd_clicked()) {
-			Sound_MakeSound(e_SOUND_TYPE_ButtonEcho);
-      lcd_change_fil_state = cursor_pos;
-      _delay(500);
-
-    }
-
-
-
-  };
-
-
-  lcd_clear();
-  lcd_return_to_status();
-
+    };
 }
 
 void show_preheat_nozzle_warning()

+ 1 - 1
Firmware/ultralcd.h

@@ -36,7 +36,7 @@ void lcd_reset_alert_level();
 
 void lcd_adjust_z();
 void lcd_pick_babystep();
-void lcd_alright();
+uint8_t lcd_alright();
 void show_preheat_nozzle_warning();
 void lcd_wait_interact();
 void lcd_loading_filament();