mirror of
https://github.com/PhotonVision/photonvision
synced 2026-07-06 03:31:41 +00:00
Robustify setting pipeline index (#790)
This commit is contained in:
@@ -89,7 +89,7 @@ public class NTDataPublisher implements CVPipelineResultConsumer {
|
||||
ts.pipelineIndexPublisher.set(setIndex);
|
||||
// TODO: Log
|
||||
}
|
||||
logger.debug("Successfully set pipeline index to " + newIndex);
|
||||
logger.debug("Set pipeline index to " + newIndex);
|
||||
}
|
||||
|
||||
private void onDriverModeChange(NetworkTableEvent entryNotification) {
|
||||
@@ -102,7 +102,7 @@ public class NTDataPublisher implements CVPipelineResultConsumer {
|
||||
}
|
||||
|
||||
driverModeConsumer.accept(newDriverMode);
|
||||
logger.debug("Successfully set driver mode to " + newDriverMode);
|
||||
logger.debug("Set driver mode to " + newDriverMode);
|
||||
}
|
||||
|
||||
private void removeEntries() {
|
||||
@@ -119,7 +119,7 @@ public class NTDataPublisher implements CVPipelineResultConsumer {
|
||||
|
||||
pipelineIndexListener =
|
||||
new NTDataChangeListener(
|
||||
ts.subTable.getInstance(), ts.pipelineIndexSubscriber, this::onPipelineIndexChange);
|
||||
ts.subTable.getInstance(), ts.pipelineIndexRequestSub, this::onPipelineIndexChange);
|
||||
|
||||
driverModeListener =
|
||||
new NTDataChangeListener(
|
||||
|
||||
@@ -17,7 +17,8 @@
|
||||
|
||||
package org.photonvision.common.hardware;
|
||||
|
||||
import edu.wpi.first.networktables.IntegerEntry;
|
||||
import edu.wpi.first.networktables.IntegerPublisher;
|
||||
import edu.wpi.first.networktables.IntegerSubscriber;
|
||||
import java.io.IOException;
|
||||
import org.photonvision.common.ProgramStatus;
|
||||
import org.photonvision.common.configuration.ConfigManager;
|
||||
@@ -47,7 +48,9 @@ public class HardwareManager {
|
||||
private final StatusLED statusLED;
|
||||
|
||||
@SuppressWarnings("FieldCanBeLocal")
|
||||
private final IntegerEntry ledModeEntry;
|
||||
private IntegerSubscriber ledModeRequest;
|
||||
|
||||
private IntegerPublisher ledModeState;
|
||||
|
||||
@SuppressWarnings({"FieldCanBeLocal", "unused"})
|
||||
private final NTDataChangeListener ledModeListener;
|
||||
@@ -71,6 +74,15 @@ public class HardwareManager {
|
||||
this.metricsManager = new MetricsManager();
|
||||
this.metricsManager.setConfig(hardwareConfig);
|
||||
|
||||
ledModeRequest =
|
||||
NetworkTablesManager.getInstance()
|
||||
.kRootTable
|
||||
.getIntegerTopic("ledModeRequest")
|
||||
.subscribe(-1);
|
||||
ledModeState =
|
||||
NetworkTablesManager.getInstance().kRootTable.getIntegerTopic("ledModeState").publish();
|
||||
ledModeState.set(VisionLEDMode.kDefault.value);
|
||||
|
||||
CustomGPIO.setConfig(hardwareConfig);
|
||||
|
||||
if (Platform.isRaspberryPi()) {
|
||||
@@ -92,17 +104,15 @@ public class HardwareManager {
|
||||
hardwareConfig.ledPins,
|
||||
hasBrightnessRange ? hardwareConfig.ledBrightnessRange.get(0) : 0,
|
||||
hasBrightnessRange ? hardwareConfig.ledBrightnessRange.get(1) : 100,
|
||||
pigpioSocket);
|
||||
pigpioSocket,
|
||||
ledModeState::set);
|
||||
|
||||
ledModeEntry =
|
||||
NetworkTablesManager.getInstance().kRootTable.getIntegerTopic("ledMode").getEntry(0);
|
||||
ledModeEntry.set(VisionLEDMode.kDefault.value);
|
||||
ledModeListener =
|
||||
visionLED == null
|
||||
? null
|
||||
: new NTDataChangeListener(
|
||||
NetworkTablesManager.getInstance().kRootTable.getInstance(),
|
||||
ledModeEntry,
|
||||
ledModeRequest,
|
||||
visionLED::onLedModeChange);
|
||||
|
||||
Runtime.getRuntime().addShutdownHook(new Thread(this::onJvmExit));
|
||||
|
||||
@@ -21,6 +21,7 @@ import edu.wpi.first.networktables.NetworkTableEvent;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.function.BooleanSupplier;
|
||||
import java.util.function.Consumer;
|
||||
import org.photonvision.common.hardware.GPIO.CustomGPIO;
|
||||
import org.photonvision.common.hardware.GPIO.GPIOBase;
|
||||
import org.photonvision.common.hardware.GPIO.pi.PigpioException;
|
||||
@@ -45,11 +46,18 @@ public class VisionLED {
|
||||
|
||||
private int mappedBrightnessPercentage;
|
||||
|
||||
private Consumer<Integer> modeConsumer;
|
||||
|
||||
public VisionLED(
|
||||
List<Integer> ledPins, int brightnessMin, int brightnessMax, PigpioSocket pigpioSocket) {
|
||||
List<Integer> ledPins,
|
||||
int brightnessMin,
|
||||
int brightnessMax,
|
||||
PigpioSocket pigpioSocket,
|
||||
Consumer<Integer> visionLEDmode) {
|
||||
this.brightnessMin = brightnessMin;
|
||||
this.brightnessMax = brightnessMax;
|
||||
this.pigpioSocket = pigpioSocket;
|
||||
this.modeConsumer = visionLEDmode;
|
||||
this.ledPins = ledPins.stream().mapToInt(i -> i).toArray();
|
||||
ledPins.forEach(
|
||||
pin -> {
|
||||
@@ -123,7 +131,8 @@ public class VisionLED {
|
||||
}
|
||||
|
||||
void onLedModeChange(NetworkTableEvent entryNotification) {
|
||||
var newLedModeRaw = (int) entryNotification.valueData.value.getDouble();
|
||||
var newLedModeRaw = (int) entryNotification.valueData.value.getInteger();
|
||||
logger.debug("Got LED mode " + newLedModeRaw);
|
||||
if (newLedModeRaw != currentLedMode.value) {
|
||||
VisionLEDMode newLedMode;
|
||||
switch (newLedModeRaw) {
|
||||
@@ -145,6 +154,8 @@ public class VisionLED {
|
||||
break;
|
||||
}
|
||||
setInternal(newLedMode, true);
|
||||
|
||||
if (modeConsumer != null) modeConsumer.accept(newLedMode.value);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -371,15 +371,15 @@ public class VisionModule {
|
||||
return ret;
|
||||
}
|
||||
|
||||
void setPipeline(int index) {
|
||||
boolean setPipeline(int index) {
|
||||
logger.info("Setting pipeline to " + index);
|
||||
logger.info("Pipeline name: " + pipelineManager.getPipelineNickname(index));
|
||||
pipelineManager.setIndex(index);
|
||||
var pipelineSettings = pipelineManager.getPipelineSettings(index);
|
||||
|
||||
if (pipelineSettings == null) {
|
||||
logger.error("Config for index " + index + " was null!");
|
||||
return;
|
||||
logger.error("Config for index " + index + " was null! Not changing pipelines");
|
||||
return false;
|
||||
}
|
||||
|
||||
visionSource.getSettables().setVideoModeInternal(pipelineSettings.cameraVideoModeIndex);
|
||||
@@ -422,6 +422,8 @@ public class VisionModule {
|
||||
|
||||
visionSource.getSettables().getConfiguration().currentPipelineIndex =
|
||||
pipelineManager.getCurrentPipelineIndex();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private boolean camShouldControlLEDs() {
|
||||
|
||||
Reference in New Issue
Block a user