diff --git a/FtcDashboard/src/main/java/com/acmerobotics/dashboard/DashboardSettings.java b/FtcDashboard/src/main/java/com/acmerobotics/dashboard/DashboardSettings.java new file mode 100644 index 000000000..4dc3e7b85 --- /dev/null +++ b/FtcDashboard/src/main/java/com/acmerobotics/dashboard/DashboardSettings.java @@ -0,0 +1,25 @@ +package com.acmerobotics.dashboard; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * Build-time dashboard settings. Put the annotation on any one class in your project. + * + *
+ * @DashboardSettings(limelightProxy = false)
+ * public class RobotConstants { }
+ * 
+ */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.TYPE) +public @interface DashboardSettings { + /** + * Whether the dashboard may proxy a Limelight on ports 5800-5807. + * + * @return true to allow the dashboard's Limelight proxy (the default) + */ + boolean limelightProxy() default true; +} diff --git a/FtcDashboard/src/main/java/com/acmerobotics/dashboard/FtcDashboard.java b/FtcDashboard/src/main/java/com/acmerobotics/dashboard/FtcDashboard.java index cf10a262b..a7ed320d2 100644 --- a/FtcDashboard/src/main/java/com/acmerobotics/dashboard/FtcDashboard.java +++ b/FtcDashboard/src/main/java/com/acmerobotics/dashboard/FtcDashboard.java @@ -240,6 +240,7 @@ protected NanoWSD.WebSocket openWebSocket(NanoHTTPD.IHTTPSession handshake) { new Mutex<>(new TreeMap<>()); private final LimelightProxyManager limelightProxyManager = new LimelightProxyManager(); + private static boolean limelightProxyEnabled = true; private static class OpModeAndStatus { public OpMode opMode; @@ -968,6 +969,11 @@ private static void addConfigClasses(CustomVariable customVariable) { try { Class configClass = Class.forName(className, false, classLoader); + DashboardSettings settings = configClass.getAnnotation(DashboardSettings.class); + if (settings != null && !settings.limelightProxy()) { + limelightProxyEnabled = false; + } + if (!configClass.isAnnotationPresent(Config.class) || configClass.isAnnotationPresent(Disabled.class)) { continue; @@ -1302,7 +1308,9 @@ private void enable() { logcatMonitorRunnable = new LogcatMonitorRunnable(); logcatMonitorExecutor.submit(logcatMonitorRunnable); - limelightProxyManager.start(); + if (limelightProxyEnabled) { + limelightProxyManager.start(); + } core.enabled = true;