Implement the core typing logic in the /key_press_result callback:
- On success: advance message_index, send next character
- On failure: send "BACKSPACE" first, then re-send the failed character after the backspace succeeds
- Guard against sending a new character while still waiting for a result (waiting_for_result flag)
- Example flow for message "MARS" with a typo on "R":
send "M" → success → send "A" → success → send "R" → fail
→ send "BACKSPACE" → success → send "R" → success → send "S" → success → done