Here `line` is a magic prefix, `16` is the length of the payload, and the payload `rpm,100,maf,3.3,` is a comma separated list of keys and pairs, let's call this "a line of known length"
transport layer pushes data into EngineState.processNewData() which splits the data into jeys and value, pushing this data into the primary listener for
the specified key. The main listener is SensorCentral which keeps track of 'Sensor' values and listeners. Another interesting key-value consumer is MessagesCentral which takes care of all the human-readable messages which end up in Messages UI console..
Outgoing data flow:
Outgoing data flow:
CommandQueue is the class which takes care of sending commands, making sure a confirmation is recieved and re-trying outgoing data transfer if needed.