la10compat.h 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. // la10compat: LA10->LA15 conversion
  2. //
  3. // When the current mode is UNKNOWN autodetection is active and any K<10
  4. // will set the mode to LA15, LA10 is set otherwise. When LA10
  5. // compatbility mode is active the K factor is converted to a LA15
  6. // equivalent (that is, the return value is always a LA15 value).
  7. //
  8. // Once the interpretation mode has been set it is kept until the mode
  9. // is explicitly reset. This is done to handle transparent fallback for
  10. // old firmware revisions in combination with the following gcode
  11. // sequence:
  12. //
  13. // M900 K0.01 ; set LA15 value (interpreted by any firmware)
  14. // M900 K10 ; set LA10 value (ignored by LA15 firmware)
  15. //
  16. // A LA15 firmware without this module will only parse the first
  17. // correctly, rejecting the second. A LA10 FW will parse both, but keep
  18. // the last value. Since the LA15 value, if present, corresponds to the
  19. // truth value, the compatibility stub needs to "lock" onto the first
  20. // seen value for the current print.
  21. //
  22. // The mode needs to be carefully reset for each print in order for
  23. // diffent versions of M900 to be interpreted independently.
  24. #pragma once
  25. enum __attribute__((packed)) LA10C_MODE
  26. {
  27. LA10C_UNKNOWN = 0,
  28. LA10C_LA15 = 1,
  29. LA10C_LA10 = 2
  30. };
  31. // Explicitly set/reset the interpretation mode for la10c_value()
  32. void la10c_mode_change(LA10C_MODE mode);
  33. static inline void la10c_reset() { la10c_mode_change(LA10C_UNKNOWN); }
  34. // Return a LA15 K value according to the supplied value and mode
  35. float la10c_value(float k);