Das Protokoll definiert Zeichenketten die als Eingabe für den Simulator dienen (input) oder vom Simulator ausgegeben (output) werden. Es wird nachfolgend in EBNF angegeben.
<simulation> ::= {<input> | <output>}*
<input> ::= "input" <idevice> <nl>
<idevice> ::= <sensor> | <ir> | <button>
<sensor> ::= "sensor" <snr> <svalue>
<snr> ::= "1" | "2" | "3"
<svalue> ::= <INT NUMBER>
<ir> ::= "ir" <msg length> <msg>
<msg length> ::= <NUMBER>
<msg> ::= {<BYTE>}+
<button> ::= <bnr> <baction>
<bnr> ::= <bview> | <bonoff> | <bprgm> | <brun>
<bview> ::= "1" | "view"
<bonoff> ::= "2" | "onoff"
<bprgm> ::= "3" | "prgm"
<brun> ::= "4" | "run"
<baction> ::= "pressed" | "released"
<nl> ::= "\n"
<output> ::= "output" <odevice> <nl>
<odevice> ::= <actuator> | <lcd> | <ir> | <osensor>
<actuator> ::= "actuator" <anr> <acommand>
<anr> ::= "A" | "B" | "C"
<acommand> ::= <avalue> | <speed> | <direction>
<avalue> ::= "value" <NUMBER>
<speed> ::= "speed" <NUMBER>
<direction> ::= "direction" <dvalue>
<dvalue> ::= "off" | "fwd" | "rev" | "brake"
<lcd> ::= <show hex> | <show string> | <show number> |
<show segment> | <hide segment> |
<refresh> | <clear>
<show hex> ::= "x" "0x"([0-9a-f])+
<show string> ::= "s" <STRING>
<show number> ::= <NUMBER> "(" <number style> ","
<comma style> ")"
<number style> ::= "digit" | "sign" | "unsign"
<comma style> ::= "digit_comma" | "e0" | "e_1" | "e_2" | "e_3"
<show segment> ::= "show" <NUMBER>
<hide segment> ::= "hide" <NUMBER>
<refresh> ::= "refresh"
<clear> ::= "clear"
<osensor> ::= "sensor" <snr> <smode>
<smode> ::= "active" | "passive"