| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546 | 
							- // la10compat: LA10->LA15 conversion
 
- //
 
- // When the current mode is UNKNOWN autodetection is active and any K<10
 
- // will set the mode to LA15, LA10 is set otherwise. When LA10
 
- // compatbility mode is active the K factor is converted to a LA15
 
- // equivalent (that is, the return value is always a LA15 value).
 
- //
 
- // E-jerk<2 is also bumped in LA10 mode to restore the the printing speed
 
- // to values comparable to existing settings.
 
- //
 
- // Once the interpretation mode has been set it is kept until the mode
 
- // is explicitly reset. This is done to handle transparent fallback for
 
- // old firmware revisions in combination with the following gcode
 
- // sequence:
 
- //
 
- //   M900 K0.01 ; set LA15 value (interpreted by any firmware)
 
- //   M900 K10   ; set LA10 value (ignored by LA15 firmware)
 
- //
 
- // A LA15 firmware without this module will only parse the first
 
- // correctly, rejecting the second. A LA10 FW will parse both, but keep
 
- // the last value. Since the LA15 value, if present, corresponds to the
 
- // truth value, the compatibility stub needs to "lock" onto the first
 
- // seen value for the current print.
 
- //
 
- // The mode needs to be carefully reset for each print in order for
 
- // diffent versions of M900 to be interpreted independently.
 
- #pragma once
 
- enum __attribute__((packed)) LA10C_MODE
 
- {
 
-     LA10C_UNKNOWN = 0,
 
-     LA10C_LA15    = 1,
 
-     LA10C_LA10    = 2
 
- };
 
- // Explicitly set/get/reset the interpretation mode for la10c_value()
 
- void la10c_mode_change(LA10C_MODE mode);
 
- LA10C_MODE la10c_mode_get();
 
- static inline void la10c_reset() { la10c_mode_change(LA10C_UNKNOWN); }
 
- // Return a LA15 K value according to the supplied value and mode
 
- float la10c_value(float k);
 
- // Return an updated LA15 E-jerk value according to the current mode
 
- float la10c_jerk(float j);
 
 
  |