diff --git a/epilogue-processor/src/main/java/edu/wpi/first/epilogue/processor/EpilogueGenerator.java b/epilogue-processor/src/main/java/edu/wpi/first/epilogue/processor/EpilogueGenerator.java index 54050026a67..cba77f5a78e 100644 --- a/epilogue-processor/src/main/java/edu/wpi/first/epilogue/processor/EpilogueGenerator.java +++ b/epilogue-processor/src/main/java/edu/wpi/first/epilogue/processor/EpilogueGenerator.java @@ -52,6 +52,9 @@ public void writeEpilogueFile( out.println("package edu.wpi.first.epilogue;"); out.println(); + out.println("import static edu.wpi.first.units.Units.Seconds;"); + out.println(); + loggerClassNames.stream() .sorted() .forEach( @@ -150,6 +153,13 @@ public static boolean shouldLog(Logged.Importance importance) { */ """); out.println(" public static void bind(" + robotClassName + " robot) {"); + out.println(" if (config.loggingPeriod == null) {"); + out.println(" config.loggingPeriod = Seconds.of(robot.getPeriod());"); + out.println(" }"); + out.println(" if (config.loggingPeriodOffset == null) {"); + out.println(" config.loggingPeriodOffset = config.loggingPeriod.divide(2);"); + out.println(" }"); + out.println(); out.println(" robot.addPeriodic(() -> {"); out.println(" long start = System.nanoTime();"); out.println( @@ -158,7 +168,8 @@ public static boolean shouldLog(Logged.Importance importance) { + ".tryUpdate(config.dataLogger.getSubLogger(config.root), robot, config.errorHandler);"); out.println( " edu.wpi.first.networktables.NetworkTableInstance.getDefault().getEntry(\"Epilogue/Stats/Last Run\").setDouble((System.nanoTime() - start) / 1e6);"); - out.println(" }, robot.getPeriod(), robot.getPeriod() / 2);"); + out.println( + " }, config.loggingPeriod.in(Seconds), config.loggingPeriodOffset.in(Seconds));"); out.println(" }"); } } diff --git a/epilogue-processor/src/test/java/edu/wpi/first/epilogue/processor/EpilogueGeneratorTest.java b/epilogue-processor/src/test/java/edu/wpi/first/epilogue/processor/EpilogueGeneratorTest.java index bf1c94049ef..57b4c5cd2d2 100644 --- a/epilogue-processor/src/test/java/edu/wpi/first/epilogue/processor/EpilogueGeneratorTest.java +++ b/epilogue-processor/src/test/java/edu/wpi/first/epilogue/processor/EpilogueGeneratorTest.java @@ -30,6 +30,8 @@ class Example { """ package edu.wpi.first.epilogue; + import static edu.wpi.first.units.Units.Seconds; + import edu.wpi.first.epilogue.ExampleLogger; public final class Epilogue { @@ -77,6 +79,8 @@ public void endCompetition() {} """ package edu.wpi.first.epilogue; + import static edu.wpi.first.units.Units.Seconds; + import edu.wpi.first.epilogue.ExampleLogger; public final class Epilogue { @@ -119,6 +123,8 @@ class Example extends edu.wpi.first.wpilibj.TimedRobot { """ package edu.wpi.first.epilogue; + import static edu.wpi.first.units.Units.Seconds; + import edu.wpi.first.epilogue.ExampleLogger; public final class Epilogue { @@ -150,11 +156,18 @@ public static boolean shouldLog(Logged.Importance importance) { * loop. */ public static void bind(edu.wpi.first.epilogue.Example robot) { + if (config.loggingPeriod == null) { + config.loggingPeriod = Seconds.of(robot.getPeriod()); + } + if (config.loggingPeriodOffset == null) { + config.loggingPeriodOffset = config.loggingPeriod.divide(2); + } + robot.addPeriodic(() -> { long start = System.nanoTime(); exampleLogger.tryUpdate(config.dataLogger.getSubLogger(config.root), robot, config.errorHandler); edu.wpi.first.networktables.NetworkTableInstance.getDefault().getEntry("Epilogue/Stats/Last Run").setDouble((System.nanoTime() - start) / 1e6); - }, robot.getPeriod(), robot.getPeriod() / 2); + }, config.loggingPeriod.in(Seconds), config.loggingPeriodOffset.in(Seconds)); } } """; @@ -179,6 +192,8 @@ class BetaBot extends edu.wpi.first.wpilibj.TimedRobot { } """ package edu.wpi.first.epilogue; + import static edu.wpi.first.units.Units.Seconds; + import edu.wpi.first.epilogue.AlphaBotLogger; import edu.wpi.first.epilogue.BetaBotLogger; @@ -212,11 +227,18 @@ public static boolean shouldLog(Logged.Importance importance) { * loop. */ public static void bind(edu.wpi.first.epilogue.AlphaBot robot) { + if (config.loggingPeriod == null) { + config.loggingPeriod = Seconds.of(robot.getPeriod()); + } + if (config.loggingPeriodOffset == null) { + config.loggingPeriodOffset = config.loggingPeriod.divide(2); + } + robot.addPeriodic(() -> { long start = System.nanoTime(); alphaBotLogger.tryUpdate(config.dataLogger.getSubLogger(config.root), robot, config.errorHandler); edu.wpi.first.networktables.NetworkTableInstance.getDefault().getEntry("Epilogue/Stats/Last Run").setDouble((System.nanoTime() - start) / 1e6); - }, robot.getPeriod(), robot.getPeriod() / 2); + }, config.loggingPeriod.in(Seconds), config.loggingPeriodOffset.in(Seconds)); } /** @@ -228,11 +250,18 @@ public static void bind(edu.wpi.first.epilogue.AlphaBot robot) { * loop. */ public static void bind(edu.wpi.first.epilogue.BetaBot robot) { + if (config.loggingPeriod == null) { + config.loggingPeriod = Seconds.of(robot.getPeriod()); + } + if (config.loggingPeriodOffset == null) { + config.loggingPeriodOffset = config.loggingPeriod.divide(2); + } + robot.addPeriodic(() -> { long start = System.nanoTime(); betaBotLogger.tryUpdate(config.dataLogger.getSubLogger(config.root), robot, config.errorHandler); edu.wpi.first.networktables.NetworkTableInstance.getDefault().getEntry("Epilogue/Stats/Last Run").setDouble((System.nanoTime() - start) / 1e6); - }, robot.getPeriod(), robot.getPeriod() / 2); + }, config.loggingPeriod.in(Seconds), config.loggingPeriodOffset.in(Seconds)); } } """; @@ -272,6 +301,8 @@ class Example { """ package edu.wpi.first.epilogue; + import static edu.wpi.first.units.Units.Seconds; + import edu.wpi.first.epilogue.ExampleLogger; import edu.wpi.first.epilogue.CustomLogger; diff --git a/epilogue-runtime/src/main/java/edu/wpi/first/epilogue/EpilogueConfiguration.java b/epilogue-runtime/src/main/java/edu/wpi/first/epilogue/EpilogueConfiguration.java index e9a9813023c..868a7cb0bf6 100644 --- a/epilogue-runtime/src/main/java/edu/wpi/first/epilogue/EpilogueConfiguration.java +++ b/epilogue-runtime/src/main/java/edu/wpi/first/epilogue/EpilogueConfiguration.java @@ -9,6 +9,8 @@ import edu.wpi.first.epilogue.logging.errors.ErrorHandler; import edu.wpi.first.epilogue.logging.errors.ErrorPrinter; import edu.wpi.first.networktables.NetworkTableInstance; +import edu.wpi.first.units.Measure; +import edu.wpi.first.units.Time; /** * A configuration object to be used by the generated {@code Epilogue} class to customize its @@ -23,6 +25,18 @@ public class EpilogueConfiguration { */ public DataLogger dataLogger = new NTDataLogger(NetworkTableInstance.getDefault()); + /** + * The period Epilogue will log at. By default this is the period that the robot runs at. This is + * the field used by bind to configure speed when adding the periodic logging function + */ + public Measure