mirror of
https://github.com/Team254/cheesy-arena-lite.git
synced 2026-03-09 13:46:44 -04:00
Implement A-stop.
This commit is contained in:
@@ -94,6 +94,7 @@ type ArenaStatus struct {
|
||||
|
||||
type AllianceStation struct {
|
||||
DsConn *DriverStationConnection
|
||||
Astop bool
|
||||
Estop bool
|
||||
Bypass bool
|
||||
Team *model.Team
|
||||
@@ -635,7 +636,7 @@ func (arena *Arena) sendDsPacket(auto bool, enabled bool) {
|
||||
dsConn := allianceStation.DsConn
|
||||
if dsConn != nil {
|
||||
dsConn.Auto = auto
|
||||
dsConn.Enabled = enabled && !allianceStation.Estop && !allianceStation.Bypass
|
||||
dsConn.Enabled = enabled && !allianceStation.Estop && !allianceStation.Astop && !allianceStation.Bypass
|
||||
dsConn.Estop = allianceStation.Estop
|
||||
err := dsConn.update(arena)
|
||||
if err != nil {
|
||||
@@ -741,9 +742,18 @@ func (arena *Arena) handlePlcOutput() {
|
||||
func (arena *Arena) handleEstop(station string, state bool) {
|
||||
allianceStation := arena.AllianceStations[station]
|
||||
if state {
|
||||
allianceStation.Estop = true
|
||||
} else if arena.MatchTimeSec() == 0 {
|
||||
// Don't reset the e-stop while a match is in progress.
|
||||
allianceStation.Estop = false
|
||||
if arena.MatchState == AutoPeriod {
|
||||
allianceStation.Astop = true
|
||||
} else {
|
||||
allianceStation.Estop = true
|
||||
}
|
||||
} else {
|
||||
if arena.MatchState != AutoPeriod {
|
||||
allianceStation.Astop = false
|
||||
}
|
||||
if arena.MatchTimeSec() == 0 {
|
||||
// Don't reset the e-stop while a match is in progress.
|
||||
allianceStation.Estop = false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -482,3 +482,68 @@ func TestSetupNetwork(t *testing.T) {
|
||||
assert.Contains(t, writer.String(), "Failed to configure team Ethernet")
|
||||
assert.Contains(t, writer.String(), "Failed to configure team WiFi")
|
||||
}
|
||||
|
||||
func TestAstop(t *testing.T) {
|
||||
arena := setupTestArena(t)
|
||||
|
||||
arena.Database.CreateTeam(&model.Team{Id: 254})
|
||||
err := arena.assignTeam(254, "R1")
|
||||
assert.Nil(t, err)
|
||||
dummyDs := &DriverStationConnection{TeamId: 254}
|
||||
arena.AllianceStations["R1"].DsConn = dummyDs
|
||||
arena.Database.CreateTeam(&model.Team{Id: 148})
|
||||
err = arena.assignTeam(148, "R2")
|
||||
assert.Nil(t, err)
|
||||
dummyDs = &DriverStationConnection{TeamId: 148}
|
||||
arena.AllianceStations["R2"].DsConn = dummyDs
|
||||
|
||||
arena.AllianceStations["R1"].DsConn.RobotLinked = true
|
||||
arena.AllianceStations["R2"].DsConn.RobotLinked = true
|
||||
arena.AllianceStations["R3"].Bypass = true
|
||||
arena.AllianceStations["B1"].Bypass = true
|
||||
arena.AllianceStations["B2"].Bypass = true
|
||||
arena.AllianceStations["B3"].Bypass = true
|
||||
err = arena.StartMatch()
|
||||
assert.Nil(t, err)
|
||||
arena.Update()
|
||||
arena.MatchStartTime = time.Now().Add(-time.Duration(game.MatchTiming.WarmupDurationSec) * time.Second)
|
||||
arena.Update()
|
||||
assert.Equal(t, AutoPeriod, arena.MatchState)
|
||||
assert.Equal(t, true, arena.AllianceStations["R1"].DsConn.Enabled)
|
||||
|
||||
arena.handleEstop("R1", true)
|
||||
arena.lastDsPacketTime = time.Unix(0, 0) // Force a DS packet.
|
||||
arena.Update()
|
||||
assert.Equal(t, false, arena.AllianceStations["R1"].DsConn.Enabled)
|
||||
assert.Equal(t, true, arena.AllianceStations["R2"].DsConn.Enabled)
|
||||
|
||||
arena.handleEstop("R2", true)
|
||||
arena.lastDsPacketTime = time.Unix(0, 0) // Force a DS packet.
|
||||
arena.Update()
|
||||
assert.Equal(t, false, arena.AllianceStations["R1"].DsConn.Enabled)
|
||||
assert.Equal(t, false, arena.AllianceStations["R2"].DsConn.Enabled)
|
||||
|
||||
arena.handleEstop("R1", false)
|
||||
arena.lastDsPacketTime = time.Unix(0, 0) // Force a DS packet.
|
||||
arena.Update()
|
||||
assert.Equal(t, false, arena.AllianceStations["R1"].DsConn.Enabled)
|
||||
assert.Equal(t, false, arena.AllianceStations["R2"].DsConn.Enabled)
|
||||
|
||||
arena.MatchStartTime = time.Now().Add(-time.Duration(game.MatchTiming.WarmupDurationSec+
|
||||
game.MatchTiming.AutoDurationSec) * time.Second)
|
||||
arena.Update()
|
||||
assert.Equal(t, PausePeriod, arena.MatchState)
|
||||
arena.MatchStartTime = time.Now().Add(-time.Duration(game.MatchTiming.WarmupDurationSec+
|
||||
game.MatchTiming.AutoDurationSec+game.MatchTiming.PauseDurationSec) * time.Second)
|
||||
arena.handleEstop("R2", true)
|
||||
arena.Update()
|
||||
assert.Equal(t, TeleopPeriod, arena.MatchState)
|
||||
assert.Equal(t, true, arena.AllianceStations["R1"].DsConn.Enabled)
|
||||
assert.Equal(t, false, arena.AllianceStations["R2"].DsConn.Enabled)
|
||||
|
||||
arena.handleEstop("R2", false)
|
||||
arena.lastDsPacketTime = time.Unix(0, 0) // Force a DS packet.
|
||||
arena.Update()
|
||||
assert.Equal(t, true, arena.AllianceStations["R1"].DsConn.Enabled)
|
||||
assert.Equal(t, false, arena.AllianceStations["R2"].DsConn.Enabled)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user