diff --git a/TeamCode/src/main/java/org/cyberarm/engine/V2/CyberarmEngine.java b/TeamCode/src/main/java/org/cyberarm/engine/V2/CyberarmEngine.java index e78ba8d..8fc7885 100644 --- a/TeamCode/src/main/java/org/cyberarm/engine/V2/CyberarmEngine.java +++ b/TeamCode/src/main/java/org/cyberarm/engine/V2/CyberarmEngine.java @@ -10,7 +10,6 @@ import org.timecrafters.TimeCraftersConfigurationTool.library.backend.config.Act import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; -import java.util.HashMap; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.CopyOnWriteArrayList; @@ -32,7 +31,7 @@ public abstract class CyberarmEngine extends OpMode { // Array to Hold Tasks final private CopyOnWriteArrayList backgroundTasks = new CopyOnWriteArrayList<>(); // HashMap to store data for States and Tasks - private ConcurrentHashMap blackboard = new ConcurrentHashMap<>(); + final private ConcurrentHashMap blackboard = new ConcurrentHashMap<>(); private int activeStateIndex = 0; // Index of currently running state private boolean isRunning; // Whether engine is running or not @@ -139,7 +138,7 @@ public abstract class CyberarmEngine extends OpMode { // Background tasks for (CyberarmState task : backgroundTasks) { - initState(task); + stateTelemetry(task); } } @@ -293,21 +292,44 @@ public abstract class CyberarmEngine extends OpMode { /** * Retrieve value from blackboard * @param key String to use to look up value - * @return Returns Object which should be autocast to the correct type + * @return Returns T of stored Object */ - @SuppressWarnings("unchecked") - public T blackboard_get(String key) { + public T blackboardGet(String key) { return (T) blackboard.get(key); } + public String blackboardGetString(String key) { + return (String) blackboard.get(key); + } + + public int blackboardGetInt(String key) { + return (int) blackboard.get(key); + } + + public long blackboardGetLong(String key) { + return (long) blackboard.get(key); + } + + public float blackboardGetFloat(String key) { + return (float) blackboard.get(key); + } + + public double blackboardGetDouble(String key) { + return (double) blackboard.get(key); + } + + public boolean blackboardGetBoolean(String key) { + return (boolean) blackboard.get(key); + } + /** * Set value of key to value * @param key String * @param value Object * @return Returns T */ - @SuppressWarnings("unchecked") - public T blackboard_set(String key, Object value) { + + public T blackboardSet(String key, T value) { blackboard.put(key, value); return (T) value; @@ -319,8 +341,7 @@ public abstract class CyberarmEngine extends OpMode { * @param value Object * @return Returns T */ - @SuppressWarnings("unchecked") - public T blackboard_remove(String key, Object value) { + public T blackboardRemove(String key, T value) { blackboard.remove(key); return (T) value; diff --git a/TeamCode/src/main/java/org/timecrafters/Autonomous/Engines/LeftSideAutonomousEngine.java b/TeamCode/src/main/java/org/timecrafters/Autonomous/Engines/LeftSideAutonomousEngine.java index 5f69767..38559f1 100644 --- a/TeamCode/src/main/java/org/timecrafters/Autonomous/Engines/LeftSideAutonomousEngine.java +++ b/TeamCode/src/main/java/org/timecrafters/Autonomous/Engines/LeftSideAutonomousEngine.java @@ -96,6 +96,6 @@ public class LeftSideAutonomousEngine extends CyberarmEngine { public void loop() { super.loop(); - telemetry.addData("BlackBoard Input", blackboard_get("parkPlace")); + telemetry.addData("BlackBoard Input", blackboardGetString("parkPlace")); } } diff --git a/TeamCode/src/main/java/org/timecrafters/Autonomous/Engines/RightFourConeAutonomousEngine.java b/TeamCode/src/main/java/org/timecrafters/Autonomous/Engines/RightFourConeAutonomousEngine.java index 0032c62..f2a8dc2 100644 --- a/TeamCode/src/main/java/org/timecrafters/Autonomous/Engines/RightFourConeAutonomousEngine.java +++ b/TeamCode/src/main/java/org/timecrafters/Autonomous/Engines/RightFourConeAutonomousEngine.java @@ -148,6 +148,6 @@ public class RightFourConeAutonomousEngine extends CyberarmEngine { public void loop() { super.loop(); - telemetry.addData("BlackBoard Input", blackboard_get("parkPlace")); + telemetry.addData("BlackBoard Input", blackboardGetString("parkPlace")); } } diff --git a/TeamCode/src/main/java/org/timecrafters/Autonomous/Engines/RightSideAutonomousEngine.java b/TeamCode/src/main/java/org/timecrafters/Autonomous/Engines/RightSideAutonomousEngine.java index c714223..fef79d6 100644 --- a/TeamCode/src/main/java/org/timecrafters/Autonomous/Engines/RightSideAutonomousEngine.java +++ b/TeamCode/src/main/java/org/timecrafters/Autonomous/Engines/RightSideAutonomousEngine.java @@ -97,6 +97,6 @@ public class RightSideAutonomousEngine extends CyberarmEngine { public void loop() { super.loop(); - telemetry.addData("BlackBoard Input", blackboard_get("parkPlace")); + telemetry.addData("BlackBoard Input", blackboardGetString("parkPlace")); } } diff --git a/TeamCode/src/main/java/org/timecrafters/Autonomous/States/ConeIdentification.java b/TeamCode/src/main/java/org/timecrafters/Autonomous/States/ConeIdentification.java index 6bb512a..43c6473 100644 --- a/TeamCode/src/main/java/org/timecrafters/Autonomous/States/ConeIdentification.java +++ b/TeamCode/src/main/java/org/timecrafters/Autonomous/States/ConeIdentification.java @@ -21,7 +21,7 @@ public class ConeIdentification extends CyberarmState { @Override public void init() { - engine.blackboard_set("parkPlace", "1"); + engine.blackboardSet("parkPlace", "1"); robot.tfod.activate(); initTime = System.currentTimeMillis(); } @@ -50,11 +50,11 @@ public class ConeIdentification extends CyberarmState { engine.telemetry.addData("- Size (Width/Height)","%.0f / %.0f", width, height); if (recognition.getLabel().equals("#2")) { - engine.telemetry.addData("#2", engine.blackboard_set("parkPlace", "2")); + engine.telemetry.addData("#2", engine.blackboardSet("parkPlace", "2")); } else if (recognition.getLabel().equals("#3")) { - engine.telemetry.addData("#3",engine.blackboard_set("parkPlace", "3")); + engine.telemetry.addData("#3",engine.blackboardSet("parkPlace", "3")); } else { - engine.telemetry.addData("#1", engine.blackboard_set("parkPlace", "1")); + engine.telemetry.addData("#1", engine.blackboardSet("parkPlace", "1")); } } } @@ -90,12 +90,12 @@ public class ConeIdentification extends CyberarmState { bestConfidence = recognition.getConfidence(); if (recognition.getLabel().equals("2 Bulb")) { - engine.blackboard_set("parkPlace", "2"); + engine.blackboardSet("parkPlace", "2"); } else if (recognition.getLabel().equals("3 Panel")) { - engine.blackboard_set("parkPlace", "3"); + engine.blackboardSet("parkPlace", "3"); } else { - engine.blackboard_set("parkPlace", "1"); + engine.blackboardSet("parkPlace", "1"); } } } diff --git a/TeamCode/src/main/java/org/timecrafters/Autonomous/States/DriverParkPlaceState.java b/TeamCode/src/main/java/org/timecrafters/Autonomous/States/DriverParkPlaceState.java index f1dd8cf..382615f 100644 --- a/TeamCode/src/main/java/org/timecrafters/Autonomous/States/DriverParkPlaceState.java +++ b/TeamCode/src/main/java/org/timecrafters/Autonomous/States/DriverParkPlaceState.java @@ -43,7 +43,7 @@ public class DriverParkPlaceState extends CyberarmState { setHasFinished(true); return; } - String placement = engine.blackboard_get("parkPlace"); + String placement = engine.blackboardGetString("parkPlace"); if (placement != null) { if (!placement.equals(intendedPlacement)){ setHasFinished(true); diff --git a/TeamCode/src/main/java/org/timecrafters/Autonomous/States/PathDecision.java b/TeamCode/src/main/java/org/timecrafters/Autonomous/States/PathDecision.java index 483468d..87923bf 100644 --- a/TeamCode/src/main/java/org/timecrafters/Autonomous/States/PathDecision.java +++ b/TeamCode/src/main/java/org/timecrafters/Autonomous/States/PathDecision.java @@ -16,7 +16,7 @@ public class PathDecision extends CyberarmState { @Override public void exec() { - String placement = engine.blackboard_get("parkPlace"); + String placement = engine.blackboardGetString("parkPlace"); setHasFinished(true); } diff --git a/TeamCode/src/main/java/org/timecrafters/minibots/cyberarm/engines/TasksEngine.java b/TeamCode/src/main/java/org/timecrafters/minibots/cyberarm/engines/TasksEngine.java new file mode 100644 index 0000000..eea9c75 --- /dev/null +++ b/TeamCode/src/main/java/org/timecrafters/minibots/cyberarm/engines/TasksEngine.java @@ -0,0 +1,76 @@ +package org.timecrafters.minibots.cyberarm.engines; + +import com.qualcomm.robotcore.eventloop.opmode.TeleOp; + +import org.cyberarm.engine.V2.CyberarmEngine; +import org.cyberarm.engine.V2.CyberarmState; + +@TeleOp(name = "TasksEngine", group = "testing") +public class TasksEngine extends CyberarmEngine { + @Override + public void setup() { + addTask(new CyberarmState() { + @Override + public void init() { + engine.blackboardSet("counter", 0); + engine.blackboardSet("string", "I IS STRING"); + engine.blackboardSet("boolean", true); + } + + @Override + public void exec() { + } + + @Override + public void telemetry() { + engine.telemetry.addData("TASK 1", engine.blackboardGetInt("counter")); + engine.telemetry.addData("TASK 1", "I am a task!"); + } + }); + + addTask(new CyberarmState() { + int lastCount = 0, blackboardLastCount = 0; + int count = 0; + double lastRuntime = 0; + @Override + public void exec() { + if (runTime() - lastRuntime >= 1000.0) { + lastRuntime = runTime(); + lastCount = count; + blackboardLastCount = engine.blackboardGetInt("counter"); + } + engine.blackboardSet("counter", engine.blackboardGetInt("counter") + 1); + count++; + } + + @Override + public void telemetry() { + engine.telemetry.addData("TASK 2", engine.blackboardGetString("string")); + engine.telemetry.addData("TASK 2", engine.blackboardGetBoolean("boolean")); + engine.telemetry.addData("TASK 2", engine.blackboardGetInt("counter") - blackboardLastCount); + engine.telemetry.addData("TASK 2", count - lastCount); + engine.telemetry.addData("TASK 2", engine.blackboardGetString("string_NULL") == null); + } + }); + + addState(new CyberarmState() { + @Override + public void exec() { + if (runTime() >= 10_000) { + setHasFinished(true); + } + } + }); + + addParallelStateToLastState(new CyberarmState() { + @Override + public void exec() { + } + + @Override + public void telemetry() { + engine.telemetry.addData("Parallel state 1", "Hello There"); + } + }); + } +}