mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-22 01:11:42 +00:00
[wpilib] DriverStation: Change alliance station to use optional (#5229)
Many teams have issues trying to read the DS too early. By switching to an optional, we cause teams to check 2 things. Either 1) they explicitly check, and their code is correct, or 2) they just read .value() and their code reboots in a loop. However, because the DS will eventually connect, this 2nd case is ok, and should theoretically be undetectable on the field.
This commit is contained in:
@@ -22,6 +22,9 @@ import edu.wpi.first.util.datalog.DataLog;
|
||||
import edu.wpi.first.util.datalog.FloatArrayLogEntry;
|
||||
import edu.wpi.first.util.datalog.IntegerArrayLogEntry;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.OptionalInt;
|
||||
import java.util.concurrent.locks.ReentrantLock;
|
||||
|
||||
/** Provide access to the network communication data to / from the Driver Station. */
|
||||
@@ -67,8 +70,7 @@ public final class DriverStation {
|
||||
/** The robot alliance that the robot is a part of. */
|
||||
public enum Alliance {
|
||||
Red,
|
||||
Blue,
|
||||
Invalid
|
||||
Blue
|
||||
}
|
||||
|
||||
public enum MatchType {
|
||||
@@ -1086,6 +1088,26 @@ public final class DriverStation {
|
||||
}
|
||||
}
|
||||
|
||||
private static Map<AllianceStationID, Optional<Alliance>> m_allianceMap =
|
||||
Map.of(
|
||||
AllianceStationID.Unknown, Optional.empty(),
|
||||
AllianceStationID.Red1, Optional.of(Alliance.Red),
|
||||
AllianceStationID.Red2, Optional.of(Alliance.Red),
|
||||
AllianceStationID.Red3, Optional.of(Alliance.Red),
|
||||
AllianceStationID.Blue1, Optional.of(Alliance.Blue),
|
||||
AllianceStationID.Blue2, Optional.of(Alliance.Blue),
|
||||
AllianceStationID.Blue3, Optional.of(Alliance.Blue));
|
||||
|
||||
private static Map<AllianceStationID, OptionalInt> m_stationMap =
|
||||
Map.of(
|
||||
AllianceStationID.Unknown, OptionalInt.empty(),
|
||||
AllianceStationID.Red1, OptionalInt.of(1),
|
||||
AllianceStationID.Red2, OptionalInt.of(2),
|
||||
AllianceStationID.Red3, OptionalInt.of(3),
|
||||
AllianceStationID.Blue1, OptionalInt.of(1),
|
||||
AllianceStationID.Blue2, OptionalInt.of(2),
|
||||
AllianceStationID.Blue3, OptionalInt.of(3));
|
||||
|
||||
/**
|
||||
* Get the current alliance from the FMS.
|
||||
*
|
||||
@@ -1093,26 +1115,13 @@ public final class DriverStation {
|
||||
*
|
||||
* @return the current alliance
|
||||
*/
|
||||
public static Alliance getAlliance() {
|
||||
public static Optional<Alliance> getAlliance() {
|
||||
AllianceStationID allianceStationID = DriverStationJNI.getAllianceStation();
|
||||
if (allianceStationID == null) {
|
||||
return Alliance.Invalid;
|
||||
allianceStationID = AllianceStationID.Unknown;
|
||||
}
|
||||
|
||||
switch (allianceStationID) {
|
||||
case Red1:
|
||||
case Red2:
|
||||
case Red3:
|
||||
return Alliance.Red;
|
||||
|
||||
case Blue1:
|
||||
case Blue2:
|
||||
case Blue3:
|
||||
return Alliance.Blue;
|
||||
|
||||
default:
|
||||
return Alliance.Invalid;
|
||||
}
|
||||
return m_allianceMap.get(allianceStationID);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1122,27 +1131,25 @@ public final class DriverStation {
|
||||
*
|
||||
* @return the location of the team's driver station controls: 1, 2, or 3
|
||||
*/
|
||||
public static int getLocation() {
|
||||
public static OptionalInt getLocation() {
|
||||
AllianceStationID allianceStationID = DriverStationJNI.getAllianceStation();
|
||||
if (allianceStationID == null) {
|
||||
return 0;
|
||||
allianceStationID = AllianceStationID.Unknown;
|
||||
}
|
||||
switch (allianceStationID) {
|
||||
case Red1:
|
||||
case Blue1:
|
||||
return 1;
|
||||
|
||||
case Red2:
|
||||
case Blue2:
|
||||
return 2;
|
||||
return m_stationMap.get(allianceStationID);
|
||||
}
|
||||
|
||||
case Blue3:
|
||||
case Red3:
|
||||
return 3;
|
||||
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
/**
|
||||
* Gets the raw alliance station of the teams driver station.
|
||||
*
|
||||
* <p>This returns the raw low level value. Prefer getLocation or getAlliance unless necessary for
|
||||
* performance.
|
||||
*
|
||||
* @return The raw alliance station id.
|
||||
*/
|
||||
public static AllianceStationID getRawAllianceStation() {
|
||||
return DriverStationJNI.getAllianceStation();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -229,20 +229,22 @@ public final class DriverStationSim {
|
||||
*/
|
||||
public static AllianceStationID getAllianceStationId() {
|
||||
switch (DriverStationDataJNI.getAllianceStationId()) {
|
||||
case 0:
|
||||
case DriverStationJNI.kUnknownAllianceStation:
|
||||
return AllianceStationID.Unknown;
|
||||
case DriverStationJNI.kRed1AllianceStation:
|
||||
return AllianceStationID.Red1;
|
||||
case 1:
|
||||
case DriverStationJNI.kRed2AllianceStation:
|
||||
return AllianceStationID.Red2;
|
||||
case 2:
|
||||
case DriverStationJNI.kRed3AllianceStation:
|
||||
return AllianceStationID.Red3;
|
||||
case 3:
|
||||
case DriverStationJNI.kBlue1AllianceStation:
|
||||
return AllianceStationID.Blue1;
|
||||
case 4:
|
||||
case DriverStationJNI.kBlue2AllianceStation:
|
||||
return AllianceStationID.Blue2;
|
||||
case 5:
|
||||
case DriverStationJNI.kBlue3AllianceStation:
|
||||
return AllianceStationID.Blue3;
|
||||
default:
|
||||
return null;
|
||||
return AllianceStationID.Unknown;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -254,23 +256,26 @@ public final class DriverStationSim {
|
||||
public static void setAllianceStationId(AllianceStationID allianceStationId) {
|
||||
int allianceStation;
|
||||
switch (allianceStationId) {
|
||||
case Unknown:
|
||||
allianceStation = DriverStationJNI.kUnknownAllianceStation;
|
||||
break;
|
||||
case Red1:
|
||||
allianceStation = 0;
|
||||
allianceStation = DriverStationJNI.kRed1AllianceStation;
|
||||
break;
|
||||
case Red2:
|
||||
allianceStation = 1;
|
||||
allianceStation = DriverStationJNI.kRed2AllianceStation;
|
||||
break;
|
||||
case Red3:
|
||||
allianceStation = 2;
|
||||
allianceStation = DriverStationJNI.kRed3AllianceStation;
|
||||
break;
|
||||
case Blue1:
|
||||
allianceStation = 3;
|
||||
allianceStation = DriverStationJNI.kBlue1AllianceStation;
|
||||
break;
|
||||
case Blue2:
|
||||
allianceStation = 4;
|
||||
allianceStation = DriverStationJNI.kBlue2AllianceStation;
|
||||
break;
|
||||
case Blue3:
|
||||
allianceStation = 5;
|
||||
allianceStation = DriverStationJNI.kBlue3AllianceStation;
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
|
||||
Reference in New Issue
Block a user