From b474be92305ebe90fdf948cf0da4f85d280dcc87 Mon Sep 17 00:00:00 2001 From: Matthew Krager Date: Sat, 28 Jan 2017 20:38:26 -0800 Subject: [PATCH] ITunable First push --- bin/.gitignore | 1 - src/org/team3309/lib/Tunable/ITunable.java | 6 ++ src/org/team3309/lib/Tunable/TestTunable.java | 20 +++++ src/org/team3309/lib/Tunable/Tunable.java | 11 +++ .../team3309/lib/Tunable/TunableHelper.java | 83 +++++++++++++++++++ .../turret/TurretLeftRightController.java | 2 +- ...eftRightVelocityCompensatedController.java | 2 +- 7 files changed, 122 insertions(+), 3 deletions(-) create mode 100644 src/org/team3309/lib/Tunable/ITunable.java create mode 100644 src/org/team3309/lib/Tunable/TestTunable.java create mode 100644 src/org/team3309/lib/Tunable/Tunable.java create mode 100644 src/org/team3309/lib/Tunable/TunableHelper.java diff --git a/bin/.gitignore b/bin/.gitignore index 7bee5b7..cf1db2e 100644 --- a/bin/.gitignore +++ b/bin/.gitignore @@ -1,2 +1 @@ -/com/ /org/ diff --git a/src/org/team3309/lib/Tunable/ITunable.java b/src/org/team3309/lib/Tunable/ITunable.java new file mode 100644 index 0000000..d6d3508 --- /dev/null +++ b/src/org/team3309/lib/Tunable/ITunable.java @@ -0,0 +1,6 @@ +package org.team3309.lib.Tunable; + +public interface ITunable { + public String getTableName(); + public String getObjectName(); +} \ No newline at end of file diff --git a/src/org/team3309/lib/Tunable/TestTunable.java b/src/org/team3309/lib/Tunable/TestTunable.java new file mode 100644 index 0000000..73b5387 --- /dev/null +++ b/src/org/team3309/lib/Tunable/TestTunable.java @@ -0,0 +1,20 @@ +package org.team3309.lib.Tunable; + +public class TestTunable implements ITunable { + + @Override + public String getTableName() { return "SmartDashboard"; } + + @Override + public String getObjectName() { return "TestTunable"; } + + @Tunable + public int foo = 10; + + @Tunable(ReadOnly=true) + public int bar = 5; + + @Tunable + public String baz = "bazybaz"; + +} diff --git a/src/org/team3309/lib/Tunable/Tunable.java b/src/org/team3309/lib/Tunable/Tunable.java new file mode 100644 index 0000000..1688761 --- /dev/null +++ b/src/org/team3309/lib/Tunable/Tunable.java @@ -0,0 +1,11 @@ +package org.team3309.lib.Tunable; + +import java.lang.annotation.*; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.FIELD) +public @interface Tunable { + public String Category() default "Uncategorized"; + public String DisplayName() default ""; + public boolean ReadOnly() default false; +} diff --git a/src/org/team3309/lib/Tunable/TunableHelper.java b/src/org/team3309/lib/Tunable/TunableHelper.java new file mode 100644 index 0000000..e4f33e7 --- /dev/null +++ b/src/org/team3309/lib/Tunable/TunableHelper.java @@ -0,0 +1,83 @@ +package org.team3309.lib.Tunable; + +import java.lang.reflect.Field; +import edu.wpi.first.wpilibj.networktables.*; +import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard; + +public class TunableHelper +{ + public static void UpdateTunable(ITunable tunable) + { + Class c = tunable.getClass(); + Field[] fields = c.getFields(); + + // -- Network Table + String tableName = tunable.getTableName(); + boolean useSmartDashboard = false; + NetworkTable table = null; + if (tableName == "SmartDashboard") + useSmartDashboard = true; + else + table = NetworkTable.getTable(tableName); + + // -- Prefix + String prefix = ""; + String objName = tunable.getObjectName(); + if (objName != null) + prefix = objName + "_"; + + try + { + for (Field f : fields) + { + Tunable annon = f.getAnnotation(Tunable.class); + if (annon != null) + { + String dispName = annon.DisplayName(); + boolean readOnly = annon.ReadOnly(); + String name = prefix + (dispName != "" ? dispName : f.getName()); + + // --------------------------------------------------------------- + // -- Set the data + + Class ft = f.getType(); + // -- Boolean + if (ft.isAssignableFrom(boolean.class)) + { + boolean value = f.getBoolean(tunable); + if (useSmartDashboard) + value = SmartDashboard.getBoolean(name, value); + else + value = table.getBoolean(name, value); + if (!readOnly) + f.set(tunable, value); + } + // -- Number + else if (ft.isAssignableFrom(double.class)) + { + double value = f.getDouble(tunable); + if (useSmartDashboard) + value = SmartDashboard.getNumber(name, value); + else + value = table.getNumber(name, value); + if (!readOnly) + f.set(tunable, value); + } + // -- String + else if(ft.isAssignableFrom(String.class)) + { + String value = (String)f.get(tunable); + if (useSmartDashboard) + value = SmartDashboard.getString(name, value); + else + value = table.getString(name, value); + if (!readOnly) + f.set(tunable, value); + } + } + } + } + catch(IllegalAccessException ex){} + + } +} diff --git a/src/org/team3309/lib/controllers/turret/TurretLeftRightController.java b/src/org/team3309/lib/controllers/turret/TurretLeftRightController.java index db0584c..488bd2f 100644 --- a/src/org/team3309/lib/controllers/turret/TurretLeftRightController.java +++ b/src/org/team3309/lib/controllers/turret/TurretLeftRightController.java @@ -17,7 +17,7 @@ public class TurretLeftRightController extends Controller { private boolean isGoingLeft = false; private final double DEGREES_TO_SLOW_DOWN = 25; - private static final double TURRET_MAX_DEGREES = Turret.getInstance().getMaxDegrees(); + private static final double TURRET_MAX_DEGREES = 0; private static final double SLOW_SPEED = .2; private static final double FAST_SPEED = .35; diff --git a/src/org/team3309/lib/controllers/turret/TurretLeftRightVelocityCompensatedController.java b/src/org/team3309/lib/controllers/turret/TurretLeftRightVelocityCompensatedController.java index d1142dc..71240ca 100644 --- a/src/org/team3309/lib/controllers/turret/TurretLeftRightVelocityCompensatedController.java +++ b/src/org/team3309/lib/controllers/turret/TurretLeftRightVelocityCompensatedController.java @@ -10,7 +10,7 @@ public class TurretLeftRightVelocityCompensatedController extends FeedForwardWit private boolean isGoingLeft = false; private final double DEGREES_TO_SLOW_DOWN = 25; - private static final double TURRET_MAX_DEGREES = Turret.getInstance().getMaxDegrees(); + private static final double TURRET_MAX_DEGREES = 0; private static final double SLOW_VEL = .2; private static final double FAST_VEL = .35;