mirror of
https://github.com/Team254/cheesy-arena-lite.git
synced 2026-03-09 13:46:44 -04:00
Send match number in driver station packet (fixes #35).
This commit is contained in:
@@ -175,7 +175,7 @@ func (dsConn *DriverStationConnection) encodeControlPacket(arena *Arena) [22]byt
|
||||
// Alliance station.
|
||||
packet[5] = allianceStationPositionMap[dsConn.AllianceStation]
|
||||
|
||||
// Match information.
|
||||
// Match type.
|
||||
match := arena.CurrentMatch
|
||||
if match.Type == "practice" {
|
||||
packet[6] = 1
|
||||
@@ -186,10 +186,21 @@ func (dsConn *DriverStationConnection) encodeControlPacket(arena *Arena) [22]byt
|
||||
} else {
|
||||
packet[6] = 0
|
||||
}
|
||||
// TODO(patrick): Implement if it ever becomes necessary; the official FMS has a different concept of
|
||||
// match numbers so it's hard to translate.
|
||||
packet[7] = 0 // Match number
|
||||
packet[8] = 1 // Match number
|
||||
|
||||
// Match number.
|
||||
if match.Type == "practice" || match.Type == "qualification" {
|
||||
matchNumber, _ := strconv.Atoi(match.DisplayName)
|
||||
packet[7] = byte(matchNumber >> 8)
|
||||
packet[8] = byte(matchNumber & 0xff)
|
||||
} else if match.Type == "elimination" {
|
||||
// E.g. Quarter-final 3, match 1 will be numbered 431.
|
||||
matchNumber := match.ElimRound*100 + match.ElimGroup*10 + match.ElimInstance
|
||||
packet[7] = byte(matchNumber >> 8)
|
||||
packet[8] = byte(matchNumber & 0xff)
|
||||
} else {
|
||||
packet[7] = 0
|
||||
packet[8] = 1
|
||||
}
|
||||
packet[9] = 1 // Match repeat number
|
||||
|
||||
// Current time.
|
||||
|
||||
@@ -89,6 +89,25 @@ func TestEncodeControlPacket(t *testing.T) {
|
||||
data = dsConn.encodeControlPacket(arena)
|
||||
assert.Equal(t, byte(3), data[6])
|
||||
|
||||
// Check match numbers.
|
||||
arena.CurrentMatch.Type = "practice"
|
||||
arena.CurrentMatch.DisplayName = "42"
|
||||
data = dsConn.encodeControlPacket(arena)
|
||||
assert.Equal(t, byte(0), data[7])
|
||||
assert.Equal(t, byte(42), data[8])
|
||||
arena.CurrentMatch.Type = "qualification"
|
||||
arena.CurrentMatch.DisplayName = "258"
|
||||
data = dsConn.encodeControlPacket(arena)
|
||||
assert.Equal(t, byte(1), data[7])
|
||||
assert.Equal(t, byte(2), data[8])
|
||||
arena.CurrentMatch.Type = "elimination"
|
||||
arena.CurrentMatch.ElimRound = 8
|
||||
arena.CurrentMatch.ElimGroup = 5
|
||||
arena.CurrentMatch.ElimInstance = 2
|
||||
data = dsConn.encodeControlPacket(arena)
|
||||
assert.Equal(t, byte(3), data[7])
|
||||
assert.Equal(t, byte(84), data[8])
|
||||
|
||||
// Check the countdown at different points during the match.
|
||||
arena.MatchState = AutoPeriod
|
||||
arena.MatchStartTime = time.Now().Add(-time.Duration(4 * time.Second))
|
||||
|
||||
Reference in New Issue
Block a user