Skip to content

Commit 274729a

Browse files
committed
fix: potentially less scuffed signal refresher
1 parent ebc7798 commit 274729a

File tree

4 files changed

+14
-2
lines changed

4 files changed

+14
-2
lines changed

src/main/java/org/team1540/robot2024/Robot.java

-2
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
import org.littletonrobotics.junction.networktables.NT4Publisher;
1010
import org.littletonrobotics.junction.wpilog.WPILOGReader;
1111
import org.littletonrobotics.junction.wpilog.WPILOGWriter;
12-
import org.team1540.robot2024.util.PhoenixTimeSyncSignalRefresher;
1312

1413
/**
1514
* The VM is configured to automatically run this class, and to call the functions corresponding to
@@ -84,7 +83,6 @@ public void robotInit() {
8483
*/
8584
@Override
8685
public void robotPeriodic() {
87-
if (Constants.currentMode == Constants.Mode.REAL) PhoenixTimeSyncSignalRefresher.refreshSignals();
8886
// Runs the Scheduler. This is responsible for polling buttons, adding
8987
// newly-scheduled commands, running already-scheduled commands, removing
9088
// finished or interrupted commands, and running subsystem periodic() methods.

src/main/java/org/team1540/robot2024/subsystems/drive/GyroIOPigeon2.java

+1
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ public GyroIOPigeon2() {
3030

3131
@Override
3232
public void updateInputs(GyroIOInputs inputs) {
33+
PhoenixTimeSyncSignalRefresher.refreshSignals();
3334
inputs.connected = BaseStatusSignal.isAllGood(yaw, yawVelocity);
3435
inputs.yawPosition = Rotation2d.fromDegrees(yaw.getValueAsDouble());
3536
inputs.yawVelocityRadPerSec = Units.degreesToRadians(yawVelocity.getValueAsDouble());

src/main/java/org/team1540/robot2024/subsystems/drive/ModuleIOTalonFX.java

+1
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ public ModuleIOTalonFX(SwerveFactory.SwerveModuleHW hw) {
8080

8181
@Override
8282
public void updateInputs(ModuleIOInputs inputs) {
83+
PhoenixTimeSyncSignalRefresher.refreshSignals();
8384
BaseStatusSignal.refreshAll(
8485
driveVelocity,
8586
driveAppliedVolts,

src/main/java/org/team1540/robot2024/util/PhoenixTimeSyncSignalRefresher.java

+12
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import com.ctre.phoenix6.BaseStatusSignal;
44
import com.ctre.phoenix6.CANBus;
5+
import edu.wpi.first.wpilibj.Timer;
6+
import org.team1540.robot2024.Constants;
57

68
import java.util.Arrays;
79

@@ -14,12 +16,22 @@ public class PhoenixTimeSyncSignalRefresher {
1416
private static BaseStatusSignal[] signals = new BaseStatusSignal[0];
1517
private static final boolean isCANFD = CANBus.isNetworkFD(CAN_BUS);
1618

19+
private static double lastRefreshTimestamp = 0;
20+
21+
/**
22+
* Registers status signals to be refreshed when {@link PhoenixTimeSyncSignalRefresher#refreshSignals()}is called
23+
*/
1724
public static void registerSignals(BaseStatusSignal... newSignals) {
1825
signals = Arrays.copyOf(signals, signals.length + newSignals.length);
1926
for (int i = 0; i < newSignals.length; i++) signals[signals.length - 1 - i] = newSignals[i];
2027
}
2128

29+
/**
30+
* Refreshes all registered signals if not already done so in the current loop period
31+
*/
2232
public static void refreshSignals() {
33+
if (Timer.getFPGATimestamp() - lastRefreshTimestamp < Constants.LOOP_PERIOD_SECS) return;
34+
lastRefreshTimestamp = Timer.getFPGATimestamp();
2335
if (isCANFD) BaseStatusSignal.waitForAll(0.01, signals);
2436
else BaseStatusSignal.refreshAll(signals);
2537
}

0 commit comments

Comments
 (0)