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.
This commit is contained in:
Yuri D'Elia 2019-12-30 13:17:12 +01:00
parent fd0ed1f0ea
commit 86696156af
2 changed files with 21 additions and 8 deletions

View File

@ -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;

View File

@ -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);
}