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;