Now that we have the new CUSTOM_MSG states, we can use them in the M0/M1
and M117 handlers to force the user message to be displayed even when
the printer is printing from a SD card and displaying a file name.
When the printer prints from a SD card, the display of progress messages
and filename takes precedence over CUSTOM_MSG_TYPE_STATUS messages used
by M0/M1/M117. Let's introduce two new CUSTOM_MSG states, one that
overrides the SD status while waiting in M0/M1 (M0WAIT) and one that
ensures the message will be displayed in at least one screen update
(MSGUPD).
Move M0/M1 decoding before any other command. The M0/M1 message can contain
arbitrary characters and so it also can contain substrings that other
decoders trigger on, like the letter 'G'. Any such substring would cause
misdecoding of the M0/M1 and unpredictable behavior in addition to not
making the printer stop.
M117 already received the same treatment in the past, so we take the same
approach for M0/M1.
Do not store the block e_D ratio, store directly the computed
compression factor so that we can recompute the advance steps
quickly and update them in sync with the acceleration rates.
The pressure state is already reset implicitly at the end of each block,
meaning an extruder switch will never have to reset the internal state
anyway.
We clear the internal backpressure in the following conditions:
- when switching to a non-LA block
- when quickStop is called
- when the scheduler is idling (losing pressure)
When recovering from a pause, the nozzle is often primed while
being lowered. If LA is triggered under such a move, the pressure
advance will be wasted.
- Move direction checks out of fsensor: fsensor_counter is now
always in the same direction as e_steps
- Check the filament chunk after e_steps have been physically done,
using the real e_step count so far