Browse Source

Improve K error checking, allow to manually reset the version

Properly check K independently for each version by delegating it to la10c_value()

Handle -1 as a special case to allow manual reset.
Yuri D'Elia 4 years ago
parent
commit
86696156af
2 changed files with 21 additions and 8 deletions
  1. 11 6
      Firmware/Marlin_main.cpp
  2. 10 2
      Firmware/la10compat.cpp

+ 11 - 6
Firmware/Marlin_main.cpp

@@ -2070,20 +2070,25 @@ static float probe_pt(float x, float y, float z_before) {
     *  K<factor>                  Set advance K factor
     */
 inline void gcode_M900() {
-    const float newK = code_seen('K') ? code_value_float() : -1;
+    float newK = code_seen('K') ? code_value_float() : -2;
 #ifdef LA_NOCOMPAT
     if (newK >= 0 && newK < 10)
         extruder_advance_K = newK;
     else
         SERIAL_ECHOLNPGM("K out of allowed range!");
 #else
-    if (newK == 0) {
+    if (newK == 0)
         extruder_advance_K = 0;
-    }
-    else if(newK > 0)
-        extruder_advance_K = la10c_value(newK);
+    else if (newK == -1)
+        la10c_reset();
     else
-        SERIAL_ECHOLNPGM("K out of allowed range!");
+    {
+        newK = la10c_value(newK);
+        if (newK < 0)
+            SERIAL_ECHOLNPGM("K out of allowed range!");
+        else
+            extruder_advance_K = newK;
+    }
 #endif
 
     SERIAL_ECHO_START;

+ 10 - 2
Firmware/la10compat.cpp

@@ -31,10 +31,18 @@ static float la10c_convert(float k)
 float la10c_value(float k)
 {
     if(la10c_mode == LA10C_UNKNOWN)
+    {
+        // do not autodetect until a valid value is seen
+        if(k == 0)
+            return 0;
+        else if(k < 0)
+            return -1;
+
         la10c_mode_change(k < 10? LA10C_LA15: LA10C_LA10);
+    }
 
     if(la10c_mode == LA10C_LA15)
-        return k;
+        return (k >= 0 && k < 10? k: -1);
     else
-        return la10c_convert(k);
+        return (k >= 0? la10c_convert(k): -1);
 }