There is no protection against buffer overflows (like getting 100 blanks while waiting for the STX),
and I'm not happy about the ESCIT handling outside the switch, but it is a start.
Most of the code is output and Serial faking, but I think the general structure using a callback
is quite logical and a good separation of reception and processing of the message.
You should not use any blocking routines if you want to get a smooth running and responsive
sketch, so process data when it arrives and don't wait for anything, always just react.
Test with some new data, but please post that data here, maybe there is something
that is not handled correctly, because it did not occur in the current data.