Legacy Protocol

The protocol for referee signaling uses ASCII characters to signal referee decisions to teams. The commands currently implemented are listed below:

Command type 	Command Description 	Command
=================================================================================
Control commands
	Halt 	                        H
	Stop 	                        S
	Ready 	                        ' ' (space character)
	Start 	                        s
Game Notifications
	Begin first half 	        1
	Begin half time 	        h
	Begin second half 	        2
	Begin overtime half 1 	        o
	Begin overtime half 2 	        O
	Begin penalty shootout 	        a

Command type 	Command Description 	Yellow Team Command 	Blue Team Command
=================================================================================
Game restarts
	Kick off 	                k                       K
	Penalty 	                p 	                P
	Direct Free kick 	        f 	                F
	Indirect Free kick 	        i 	                I
Extras
	Timeout 	                t 	                T
	Timeout end 	                z 	                z
	Goal scored 	                g 	                G
	decrease Goal score 	        d 	                D
	Yellow Card 	                y 	                Y
	Red Card 	                r 	                R
	Cancel 	                        c

Transmission method

The referee commands are sent via IP network to the teams, using UDP multicasting datagrams. Data is sent continuously, multiple times per second, inside UDP packets as described below. The IPv4 multicast address is 224.5.23.1, port 10001 using a TP 100 MBit/s Ethernet connection.

Each UDP packet contains 6 Bytes:

+---------+---------+------------+--------------+-------------------+
| Command | Counter | Goals blue | Goals yellow | time left (16 Bit)|
+---------+---------+------------+--------------+-------------------+

The referee box uses this code for the packet:

  struct GameStatePacket{
    char cmd;                      // current referee command
    unsigned char cmd_counter;     // increments each time new command is set
    unsigned char goals_blue;      // current score for blue team
    unsigned char goals_yellow;    // current score for yellow team
    unsigned short time_remaining; // seconds remaining for current game stage (network byte order)
  };

The receiver can check the counter value to see if it already got this command.