The external application is ProSim737 (http://prosim-ar.com/), a software to simulate systems of a Boeing 737.
The strings are not all of the same lenght unfortunately.
ABCD is used to manage 7 segments displays. If I get "A=123456" I will call a separate function to directly print the numbers, not lighting the single leds.
The ":" is separating different variables' values. It's not always determining the end of the stream. This is true only after the last string.
In the configuration file I can set for a certain led or a certain variable a string to be assigned. If I assign to the led n.1 the string L000 then the software will send the command L000=1 or L000=0. It manages the single led and does not group them, so I can't get a state variable from the software for all the leds inside. I will get single states when these get updated internally.
Of course I could assign "a" to the led 1, "b" to the led 2 etc etc.. , then I would get strings like "a=1:b=1:" but I will have to manage up to 800 leds when the software will be completed and therefore I decided to have a code also easy to understand for driving the Arduino.
The rest of the displays to be driven are 7 segments displays. Again here every value is associated with a string.
For instance :
Radio Frequency --> "A"
Latitude : "B"
I will get inputs from the software like "A=123456" "B=014020" etc. Unfortunately here a lot of bytes are used for the data as you can see and not only for managing the protocol.
Each of this inputs is redirected via I2C to a dedicated MAX7219, therefore I also need to know which device I'm going to operate (till now I have 5 MAX7219 cascaded).