Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ concurrency:
cancel-in-progress: true

env:
IMAGE_VERSION: v2026.1.1
IMAGE_VERSION: v2026.1.2

jobs:

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,6 @@
"supportURL" : "https://limelightvision.io",
"ledPins" : [ 13, 18 ],
"ledsCanDim" : true,
"ledPWMFrequency" : 30000,
"ledPWMFrequency" : 1000,
"vendorFOV" : 75.76079874010732
}
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ public class VisionLED implements AutoCloseable {

private VisionLEDMode currentLedMode = VisionLEDMode.kDefault;
private BooleanSupplier pipelineModeSupplier;
private boolean currentOutputState = false;

private float mappedBrightness = 0.0f;

Expand Down Expand Up @@ -85,43 +86,46 @@ public void setPipelineModeSupplier(BooleanSupplier pipelineModeSupplier) {
public void setBrightness(int percentage) {
mappedBrightness =
(float) (MathUtils.map(percentage, 0.0, 100.0, brightnessMin, brightnessMax) / 100.0);
setInternal(currentLedMode, false);
if (currentOutputState) {
for (PwmLed led : dimmableVisionLEDs) {
led.setValue(mappedBrightness);
}
}
}

public void blink(int pulseLengthMillis, int blinkCount) {
TimedTaskManager.getInstance().cancelTask(blinkTaskID);
blinkImpl(pulseLengthMillis, blinkCount);
int blinkDuration = pulseLengthMillis * blinkCount * 2;
TimedTaskManager.getInstance()
.addOneShotTask(() -> setInternal(this.currentLedMode, false), blinkDuration + 150);
}

private void blinkImpl(int pulseLengthMillis, int blinkCount) {
TimedTaskManager.getInstance().cancelTask(blinkTaskID);
AtomicInteger blinks = new AtomicInteger();
TimedTaskManager.getInstance()
.addTask(
blinkTaskID,
() -> {
for (LED led : visionLEDs) {
led.toggle();
}
for (PwmLed led : dimmableVisionLEDs) {
led.setValue(mappedBrightness - led.getValue());
}
if (blinks.incrementAndGet() >= blinkCount * 2) {
setStateImpl(!currentOutputState);
if (blinkCount >= 0 && blinks.incrementAndGet() >= blinkCount * 2) {
TimedTaskManager.getInstance().cancelTask(blinkTaskID);
}
},
pulseLengthMillis);
}

private void setStateImpl(boolean state) {
TimedTaskManager.getInstance().cancelTask(blinkTaskID);
currentOutputState = state;
for (LED led : visionLEDs) {
led.setOn(state);
}
for (PwmLed led : dimmableVisionLEDs) {
led.setValue(mappedBrightness);
if (state) {
led.setValue(mappedBrightness);
} else {
led.off();
}
}
}

Expand Down Expand Up @@ -162,6 +166,7 @@ private void setInternal(VisionLEDMode newLedMode, boolean fromNT) {
var lastLedMode = currentLedMode;

if (fromNT || currentLedMode == VisionLEDMode.kDefault) {
TimedTaskManager.getInstance().cancelTask(blinkTaskID);
switch (newLedMode) {
case kDefault -> setStateImpl(pipelineModeSupplier.getAsBoolean());
case kOff -> setStateImpl(false);
Expand Down
4 changes: 2 additions & 2 deletions photon-lib/src/main/native/cpp/photon/PhotonCamera.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -142,8 +142,8 @@ PhotonCamera::PhotonCamera(nt::NetworkTableInstance instance,
rootTable->GetIntegerTopic("pipelineIndexRequest").Publish()),
pipelineIndexSub(
rootTable->GetIntegerTopic("pipelineIndexState").Subscribe(0)),
ledModePub(mainTable->GetIntegerTopic("ledMode").Publish()),
ledModeSub(mainTable->GetIntegerTopic("ledMode").Subscribe(0)),
ledModePub(mainTable->GetIntegerTopic("ledModeRequest").Publish()),
ledModeSub(mainTable->GetIntegerTopic("ledModeState").Subscribe(0)),
versionEntry(mainTable->GetStringTopic("version").Subscribe("")),
cameraIntrinsicsSubscriber(
rootTable->GetDoubleArrayTopic("cameraIntrinsics").Subscribe({})),
Expand Down
Loading