Skip to content

Commit b2a5cef

Browse files
author
Tony Brar
committed
Allow configuring a command to be run on entering state
1 parent bb1fd5d commit b2a5cef

File tree

3 files changed

+27
-6
lines changed

3 files changed

+27
-6
lines changed

core/src/main/java/org/teamtators/rotator/config/TriggerBinder.java

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,22 +3,26 @@
33
import com.fasterxml.jackson.core.JsonProcessingException;
44
import com.fasterxml.jackson.databind.JsonNode;
55
import com.fasterxml.jackson.databind.ObjectMapper;
6+
import com.google.common.collect.HashMultimap;
7+
import com.google.common.collect.Multimap;
68
import org.slf4j.Logger;
79
import org.slf4j.LoggerFactory;
810
import org.teamtators.rotator.operatorInterface.AbstractOperatorInterface;
911
import org.teamtators.rotator.operatorInterface.LogitechF310;
1012
import org.teamtators.rotator.scheduler.*;
1113

1214
import javax.inject.Inject;
15+
import java.util.Collection;
1316
import java.util.Map;
1417
import java.util.Set;
1518

16-
public class TriggerBinder {
19+
public class TriggerBinder implements StateListener {
1720
private static final Logger logger = LoggerFactory.getLogger(TriggerBinder.class);
1821
private Scheduler scheduler;
1922
private CommandStore commandStore;
2023
private ObjectMapper objectMapper;
2124
private AbstractOperatorInterface operatorInterface;
25+
private Multimap<RobotState, Command> stateCommands = HashMultimap.create();
2226

2327
@Inject
2428
public TriggerBinder() {
@@ -53,6 +57,14 @@ public void bindTriggers(TriggersConfig triggersConfig) {
5357
bindButtonsToLogitechF310(triggersConfig.driver, operatorInterface.driverJoystick());
5458
bindButtonsToLogitechF310(triggersConfig.gunner, operatorInterface.gunnerJoystick());
5559
registerDefaults(triggersConfig.defaults);
60+
registerStateCommands(triggersConfig.stateCommands);
61+
}
62+
63+
private void registerStateCommands(Map<RobotState, String> newStateCommands) {
64+
for (Map.Entry<RobotState, String> commandEntry : newStateCommands.entrySet()) {
65+
Command stateCommand = getCommandForBinding(commandEntry.getValue());
66+
stateCommands.put(commandEntry.getKey(), stateCommand);
67+
}
5668
}
5769

5870
private void registerDefaults(Set<String> defaults) {
@@ -154,4 +166,12 @@ private Command getCommandForBinding(String commandName) {
154166
}
155167
return command;
156168
}
169+
170+
public void onEnterState(RobotState state) {
171+
Collection<Command> thisStateCommands = stateCommands.get(state);
172+
if (thisStateCommands == null) return;
173+
for (Command stateCommand : thisStateCommands) {
174+
scheduler.startCommand(stateCommand);
175+
}
176+
}
157177
}

core/src/main/java/org/teamtators/rotator/config/TriggersConfig.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.fasterxml.jackson.annotation.JsonProperty;
44
import com.fasterxml.jackson.databind.JsonNode;
55
import org.teamtators.rotator.operatorInterface.LogitechF310;
6+
import org.teamtators.rotator.scheduler.RobotState;
67

78
import java.util.Map;
89
import java.util.Set;
@@ -13,4 +14,5 @@ public class TriggersConfig {
1314
@JsonProperty("Gunner")
1415
public Map<LogitechF310.Button, JsonNode> gunner;
1516
public Set<String> defaults;
17+
public Map<RobotState, String> stateCommands;
1618
}

rio/src/main/java/org/teamtators/rotator/Robot.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,10 @@
1313
import org.teamtators.rotator.control.Stepper;
1414
import org.teamtators.rotator.datalogging.DataCollector;
1515
import org.teamtators.rotator.operatorInterface.AbstractOperatorInterface;
16-
import org.teamtators.rotator.scheduler.*;
16+
import org.teamtators.rotator.scheduler.RobotState;
17+
import org.teamtators.rotator.scheduler.Scheduler;
18+
import org.teamtators.rotator.scheduler.StateListener;
19+
import org.teamtators.rotator.scheduler.Subsystem;
1720
import org.teamtators.rotator.tester.ITestable;
1821
import org.teamtators.rotator.tester.ManualTester;
1922

@@ -25,7 +28,6 @@
2528
public class Robot extends IterativeRobot {
2629
private static final Logger logger = LoggerFactory.getLogger(Robot.class);
2730
private Scheduler scheduler;
28-
private Command autoCommand;
2931

3032
@Override
3133
public void startCompetition() {
@@ -94,8 +96,6 @@ private void initialize() {
9496
logger.debug("Starting stepper");
9597
stepper.start();
9698

97-
autoCommand = commandStore.getCommand("AutoInit");
98-
9999
logger.info("Robot initialized");
100100
}
101101

@@ -107,7 +107,6 @@ public void disabledInit() {
107107
@Override
108108
public void autonomousInit() {
109109
scheduler.enterState(RobotState.AUTONOMOUS);
110-
scheduler.startCommand(autoCommand);
111110
}
112111

113112
@Override

0 commit comments

Comments
 (0)