Skip to content

Commit a1b2215

Browse files
committed
feat: refresh all signals at the same time (scuffed implementation?)
1 parent ebfd6fd commit a1b2215

File tree

4 files changed

+43
-30
lines changed

4 files changed

+43
-30
lines changed

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

+2
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
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;
1213

1314
/**
1415
* The VM is configured to automatically run this class, and to call the functions corresponding to
@@ -83,6 +84,7 @@ public void robotInit() {
8384
*/
8485
@Override
8586
public void robotPeriodic() {
87+
if (Constants.currentMode == Constants.Mode.REAL) PhoenixTimeSyncSignalRefresher.refreshSignals();
8688
// Runs the Scheduler. This is responsible for polling buttons, adding
8789
// newly-scheduled commands, running already-scheduled commands, removing
8890
// finished or interrupted commands, and running subsystem periodic() methods.

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

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
package org.team1540.robot2024.subsystems.drive;
22

33
import com.ctre.phoenix6.BaseStatusSignal;
4-
import com.ctre.phoenix6.StatusCode;
54
import com.ctre.phoenix6.StatusSignal;
65
import com.ctre.phoenix6.configs.Pigeon2Configuration;
76
import com.ctre.phoenix6.hardware.Pigeon2;
87
import edu.wpi.first.math.geometry.Rotation2d;
98
import edu.wpi.first.math.util.Units;
9+
import org.team1540.robot2024.util.PhoenixTimeSyncSignalRefresher;
1010

1111
/**
1212
* IO implementation for Pigeon2
@@ -22,11 +22,13 @@ public GyroIOPigeon2() {
2222
yaw.setUpdateFrequency(100.0);
2323
yawVelocity.setUpdateFrequency(100.0);
2424
pigeon.optimizeBusUtilization();
25+
26+
PhoenixTimeSyncSignalRefresher.registerSignals(yaw, yawVelocity);
2527
}
2628

2729
@Override
2830
public void updateInputs(GyroIOInputs inputs) {
29-
inputs.connected = BaseStatusSignal.refreshAll(yaw, yawVelocity).equals(StatusCode.OK);
31+
inputs.connected = BaseStatusSignal.isAllGood(yaw, yawVelocity);
3032
inputs.yawPosition = Rotation2d.fromDegrees(yaw.getValueAsDouble());
3133
inputs.yawVelocityRadPerSec = Units.degreesToRadians(yawVelocity.getValueAsDouble());
3234
}

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

+11-28
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package org.team1540.robot2024.subsystems.drive;
22

33
import com.ctre.phoenix6.BaseStatusSignal;
4-
import com.ctre.phoenix6.CANBus;
54
import com.ctre.phoenix6.StatusSignal;
65
import com.ctre.phoenix6.configs.MotorOutputConfigs;
76
import com.ctre.phoenix6.controls.VoltageOut;
@@ -11,10 +10,10 @@
1110
import com.ctre.phoenix6.signals.NeutralModeValue;
1211
import edu.wpi.first.math.geometry.Rotation2d;
1312
import edu.wpi.first.math.util.Units;
13+
import org.team1540.robot2024.util.PhoenixTimeSyncSignalRefresher;
1414
import org.team1540.robot2024.util.swerve.SwerveFactory;
1515

1616
import static org.team1540.robot2024.Constants.Drivetrain.*;
17-
import static org.team1540.robot2024.Constants.SwerveConfig.CAN_BUS;
1817

1918
/**
2019
* Module IO implementation for Talon FX drive motor controller, Talon FX turn motor controller, and
@@ -44,15 +43,11 @@ public class ModuleIOTalonFX implements ModuleIO {
4443
private final StatusSignal<Double> turnAppliedVolts;
4544
private final StatusSignal<Double> turnCurrent;
4645

47-
private final boolean isCANFD;
48-
4946
public ModuleIOTalonFX(SwerveFactory.SwerveModuleHW hw) {
5047
driveTalon = hw.driveMotor;
5148
turnTalon = hw.turnMotor;
5249
cancoder = hw.cancoder;
5350

54-
isCANFD = CANBus.isNetworkFD(CAN_BUS);
55-
5651
setDriveBrakeMode(true);
5752
setTurnBrakeMode(true);
5853

@@ -79,32 +74,20 @@ public ModuleIOTalonFX(SwerveFactory.SwerveModuleHW hw) {
7974
turnCurrent);
8075
driveTalon.optimizeBusUtilization();
8176
turnTalon.optimizeBusUtilization();
77+
78+
PhoenixTimeSyncSignalRefresher.registerSignals(drivePosition, turnPosition);
8279
}
8380

8481
@Override
8582
public void updateInputs(ModuleIOInputs inputs) {
86-
if (isCANFD) {
87-
BaseStatusSignal.waitForAll(0.01, drivePosition, turnPosition);
88-
BaseStatusSignal.refreshAll(
89-
driveVelocity,
90-
driveAppliedVolts,
91-
driveCurrent,
92-
turnAbsolutePosition,
93-
turnVelocity,
94-
turnAppliedVolts,
95-
turnCurrent);
96-
} else {
97-
BaseStatusSignal.refreshAll(
98-
drivePosition,
99-
driveVelocity,
100-
driveAppliedVolts,
101-
driveCurrent,
102-
turnAbsolutePosition,
103-
turnPosition,
104-
turnVelocity,
105-
turnAppliedVolts,
106-
turnCurrent);
107-
}
83+
BaseStatusSignal.refreshAll(
84+
driveVelocity,
85+
driveAppliedVolts,
86+
driveCurrent,
87+
turnAbsolutePosition,
88+
turnVelocity,
89+
turnAppliedVolts,
90+
turnCurrent);
10891

10992
inputs.drivePositionRad = Units.rotationsToRadians(drivePosition.getValueAsDouble()) / DRIVE_GEAR_RATIO;
11093
inputs.driveVelocityRadPerSec = Units.rotationsToRadians(driveVelocity.getValueAsDouble()) / DRIVE_GEAR_RATIO;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package org.team1540.robot2024.util;
2+
3+
import com.ctre.phoenix6.BaseStatusSignal;
4+
import com.ctre.phoenix6.CANBus;
5+
6+
import java.util.Arrays;
7+
8+
import static org.team1540.robot2024.Constants.SwerveConfig.*;
9+
10+
/**
11+
* Helper class for refreshing CANivore TimeSynced status signals.
12+
*/
13+
public class PhoenixTimeSyncSignalRefresher {
14+
private static BaseStatusSignal[] signals = new BaseStatusSignal[0];
15+
private static final boolean isCANFD = CANBus.isNetworkFD(CAN_BUS);
16+
17+
public static void registerSignals(BaseStatusSignal... newSignals) {
18+
signals = Arrays.copyOf(signals, signals.length + newSignals.length);
19+
for (int i = 0; i < newSignals.length; i++) signals[signals.length - 1 - i] = newSignals[i];
20+
}
21+
22+
public static void refreshSignals() {
23+
if (isCANFD) BaseStatusSignal.waitForAll(0.01, signals);
24+
else BaseStatusSignal.refreshAll(signals);
25+
}
26+
}

0 commit comments

Comments
 (0)