FMS to Driver Station¶
UDP¶
Sent to the DS every 500ms on UDP port 1121 by the normal FMS, or to UDP port 1120 by the offseason FMS. Sending to 1120 causes the DS to display a prompt asking to approve FMS control, whereas sending to 1121 starts FMS control immediatley.
Field | Length | Type | Comment |
---|---|---|---|
Sequence Num | 2 | uint16 | |
Comm Version | 1 | uint8 | Only 0x00 has been observed |
Control Byte | 1 | Control | Contains control bits |
Request Byte | 1 | Request | Stays at 0x00, not used |
Alliance Station | 1 | Alliance Station | Represents the station the DS connects to |
Tournament Level | 1 | Tournament Level | What level of competition this is |
Match Number | 2 | uint16 | Represents the number of current match |
Play Number | 1 | uint8 | Increments if there’s a replay |
Date | 10 | Date | |
Remaining Time | 2 | uint16 | Time left in current mode |
Tags | n | Tags | Offseason FMS has code for sending tags but none to send |
Control¶
Field | Mask | Comment |
E-Stop | x....... |
0: Normal, 1: Emergency Stopped |
Enabled | .....x.. |
0: Disabled, 1: Enabled |
Mode | ......xx |
0: TeloOp, 1: Test, 2: Autonomous |
Alliance Station¶
Computed by taking station [1, 3] and subtracting 1 for red, or adding 2 for blue.
Color is Red if value < 3
, else Blue. Position is value % 3 + 1
Tournament Level¶
Level | Value | Comment |
---|---|---|
Match Test | 0 | Only used during FMS setup for testing purposes |
Practice | 1 | |
Qualification | 2 | |
Playoff | 3 |
Date¶
Field | Length | Type | Comment |
---|---|---|---|
Microseconds | 4 | uint32 | |
Second | 1 | uint8 | |
Minute | 1 | uint8 | |
Hour | 1 | uint8 | In UTC? |
Day | 1 | uint8 | |
Month | 1 | uint8 | 0 is January |
Year | 1 | uint8 | Year (starting at 1900) |
TCP¶
10.0.100.5
, listening on TCP port 1750.
Field | Length | Type | Comment |
---|---|---|---|
Size | 2 | uint16 | Including ID |
ID | 1 | uint8 | See table below (only of Size > 0) |
Tags | n | Depends on tag type |
Tags¶
ID | Tag |
---|---|
0x00 |
WPILib Version |
0x01 |
RIO Version |
0x02 |
DS Version |
0x03 |
PDP Version |
0x04 |
PCM Version |
0x05 |
CANJag Version |
0x06 |
CANTalon Version |
0x07 |
Third Party Device Version |
0x14 |
Event Code |
0x19 |
Station Info |
0x1a |
Challenge Question |
0x1c |
Game Data |
Versions all take the same format
Version¶
See above table for devices and their associated tag IDs. Seems only the “preferred” DS version is sent to the Driver Station.
Field | Length | Type | Comment |
---|---|---|---|
Status | n | string | <bad>, <good>, or <preferred> |
Version | n | string |
Event Code (0x14
)¶
Field | Length | Type | Comment |
---|---|---|---|
Event Code | 1 + n | string | Event name |
Station Info (0x19
)¶
Field | Length | Type | Comment |
Alliance Station | 1 | Alliance Station | |
Station Status | 1 | Station Status |
Station Status¶
Num | Status | Comment |
---|---|---|
0 | Good | Sent if FMS Driver Station context is valid. Causes the DS to display “FMS Connected” |
1 | Bad | Sent if the Driver Station is plugged into the wrong station. Causes the DS to display “Wrong station. Go to X” |
2 | Waiting | Sent if FMS Driver Station context is invalid. Causes the DS to display “FMS Waiting” |
Challenge Question (0x1a
)¶
Field | Length | Type | Comment |
---|---|---|---|
Question | 1 + n | string | Coolest robot EVER!!?? |
Random Value | 2 | uint16 | Random number [1000, 2000] associated with the FMS Driver Station context |
Offseason FMS allows for sending multiple questions, but the responses are only checked against the first one (as of 2018).
See the Challenge Response for possible responses.
Game Data (0x1c
)¶
Field | Length | Type | Comment |
---|---|---|---|
Data | 1 + n | string |