Browse Source

Prevent re-entrant call of Reprapworld Keypad handler

Scott Lahteine 9 years ago
parent
commit
eaa6f568ee
2 changed files with 36 additions and 14 deletions
  1. 25
    14
      Marlin/ultralcd.cpp
  2. 11
    0
      Marlin/ultralcd.h

+ 25
- 14
Marlin/ultralcd.cpp View File

@@ -2584,22 +2584,33 @@ void lcd_update() {
2584 2584
 
2585 2585
       #if ENABLED(REPRAPWORLD_KEYPAD)
2586 2586
 
2587
-        #if ENABLED(DELTA) || ENABLED(SCARA)
2588
-          #define _KEYPAD_MOVE_ALLOWED (axis_homed[X_AXIS] && axis_homed[Y_AXIS] && axis_homed[Z_AXIS])
2589
-        #else
2590
-          #define _KEYPAD_MOVE_ALLOWED true
2591
-        #endif
2587
+        static uint8_t keypad_debounce = 0;
2592 2588
 
2593
-        if (REPRAPWORLD_KEYPAD_MOVE_HOME)       reprapworld_keypad_move_home();
2594
-        if (_KEYPAD_MOVE_ALLOWED) {
2595
-          if (REPRAPWORLD_KEYPAD_MOVE_Z_UP)     reprapworld_keypad_move_z_up();
2596
-          if (REPRAPWORLD_KEYPAD_MOVE_Z_DOWN)   reprapworld_keypad_move_z_down();
2597
-          if (REPRAPWORLD_KEYPAD_MOVE_X_LEFT)   reprapworld_keypad_move_x_left();
2598
-          if (REPRAPWORLD_KEYPAD_MOVE_X_RIGHT)  reprapworld_keypad_move_x_right();
2599
-          if (REPRAPWORLD_KEYPAD_MOVE_Y_DOWN)   reprapworld_keypad_move_y_down();
2600
-          if (REPRAPWORLD_KEYPAD_MOVE_Y_UP)     reprapworld_keypad_move_y_up();
2589
+        if (!REPRAPWORLD_KEYPAD_PRESSED) {
2590
+          if (keypad_debounce > 0) keypad_debounce--;
2601 2591
         }
2602
-      #endif
2592
+        else if (!keypad_debounce) {
2593
+          keypad_debounce = 2;
2594
+
2595
+          #if DISABLED(DELTA) && Z_HOME_DIR == -1
2596
+            if (REPRAPWORLD_KEYPAD_MOVE_Z_UP)     reprapworld_keypad_move_z_up();
2597
+          #endif
2598
+
2599
+          if (axis_homed[X_AXIS] && axis_homed[Y_AXIS] && axis_homed[Z_AXIS]) {
2600
+            #if ENABLED(DELTA) || Z_HOME_DIR != -1
2601
+              if (REPRAPWORLD_KEYPAD_MOVE_Z_UP)   reprapworld_keypad_move_z_up();
2602
+            #endif
2603
+            if (REPRAPWORLD_KEYPAD_MOVE_Z_DOWN)   reprapworld_keypad_move_z_down();
2604
+            if (REPRAPWORLD_KEYPAD_MOVE_X_LEFT)   reprapworld_keypad_move_x_left();
2605
+            if (REPRAPWORLD_KEYPAD_MOVE_X_RIGHT)  reprapworld_keypad_move_x_right();
2606
+            if (REPRAPWORLD_KEYPAD_MOVE_Y_DOWN)   reprapworld_keypad_move_y_down();
2607
+            if (REPRAPWORLD_KEYPAD_MOVE_Y_UP)     reprapworld_keypad_move_y_up();
2608
+          }
2609
+          else {
2610
+            if (REPRAPWORLD_KEYPAD_MOVE_HOME)     reprapworld_keypad_move_home();
2611
+          }
2612
+        }
2613
+      #endif // REPRAPWORLD_KEYPAD
2603 2614
 
2604 2615
       bool encoderPastThreshold = (abs(encoderDiff) >= ENCODER_PULSES_PER_STEP);
2605 2616
       if (encoderPastThreshold || LCD_CLICKED) {

+ 11
- 0
Marlin/ultralcd.h View File

@@ -123,6 +123,17 @@
123 123
     #define REPRAPWORLD_KEYPAD_MOVE_Y_UP    (buttons_reprapworld_keypad & EN_REPRAPWORLD_KEYPAD_UP)
124 124
     #define REPRAPWORLD_KEYPAD_MOVE_X_LEFT  (buttons_reprapworld_keypad & EN_REPRAPWORLD_KEYPAD_LEFT)
125 125
 
126
+    #define REPRAPWORLD_KEYPAD_PRESSED      (buttons_reprapworld_keypad & ( \
127
+                                              EN_REPRAPWORLD_KEYPAD_F3 | \
128
+                                              EN_REPRAPWORLD_KEYPAD_F2 | \
129
+                                              EN_REPRAPWORLD_KEYPAD_F1 | \
130
+                                              EN_REPRAPWORLD_KEYPAD_DOWN | \
131
+                                              EN_REPRAPWORLD_KEYPAD_RIGHT | \
132
+                                              EN_REPRAPWORLD_KEYPAD_MIDDLE | \
133
+                                              EN_REPRAPWORLD_KEYPAD_UP | \
134
+                                              EN_REPRAPWORLD_KEYPAD_LEFT) \
135
+                                            )
136
+
126 137
   #endif // REPRAPWORLD_KEYPAD
127 138
 
128 139
   #if ENABLED(NEWPANEL)

Loading…
Cancel
Save