https://nathanflore.medium.com/getting-started-with-embedded-c-10-communication-protocols-part-four-5199dfa4f9a3