001/************************* PROJECT RON *************************/ 002/* Copyright (c) 2026 StuyPulse Robotics. All rights reserved. */ 003/* Use of this source code is governed by an MIT-style license */ 004/* that can be found in the repository LICENSE file. */ 005/***************************************************************/ 006package com.stuypulse.robot.commands.leds; 007 008import com.stuypulse.robot.constants.Settings; 009import com.stuypulse.robot.subsystems.feeder.Feeder; 010import com.stuypulse.robot.subsystems.handoff.Handoff; 011import com.stuypulse.robot.subsystems.intake.Intake; 012import com.stuypulse.robot.subsystems.leds.LEDController; 013import com.stuypulse.robot.subsystems.shooter.Shooter; 014import edu.wpi.first.wpilibj.DriverStation; 015import edu.wpi.first.wpilibj.LEDPattern; 016import edu.wpi.first.wpilibj2.command.Command; 017 018public class LEDDefaultCommand extends Command { 019 020 private final LEDController leds; 021 022 private final Shooter shooter; 023 024 private final Feeder feeder; 025 026 private final Intake intake; 027 028 private final Handoff handoff; 029 030 public LEDDefaultCommand() { 031 leds = LEDController.getInstance(); 032 shooter = Shooter.getInstance(); 033 feeder = Feeder.getInstance(); 034 intake = Intake.getInstance(); 035 handoff = Handoff.getInstance(); 036 addRequirements(leds); 037 } 038 039 @Override 040 public boolean runsWhenDisabled() { 041 return true; 042 } 043 044 @Override 045 public void execute() { 046 if (!Settings.EnabledSubsystems.LED.get()) { 047 return; 048 } 049 if (DriverStation.isDisabled()) { 050 leds.applyPattern(Settings.LED.DISABLED); 051 return; 052 } 053 // These probably won't actually be what we want the LEDs to be showing 054 // TODO: Figure out what we want the LEDs to show 055 switch (shooter.getState()) { 056 case SHOOT -> leds.applyShoot(Settings.LED.SHOOTING); 057 case FERRY -> leds.applyShoot(Settings.LED.FERRYING); 058 case MANUAL_HUB -> leds.applyShoot(Settings.LED.MANUAL); 059 case IDLE -> leds.applyShoot(LEDPattern.kOff); 060 } 061 switch (feeder.getState()) { 062 case FORWARD -> leds.applyFeed(Settings.LED.FEEDER_FORWARD); 063 case REVERSE -> leds.applyFeed(Settings.LED.FEEDER_REVERSE); 064 case IDLE -> leds.applyFeed(LEDPattern.kOff); 065 } 066 switch (intake.getState()) { 067 case INTAKE -> leds.applyIntake(Settings.LED.INTAKING); 068 case OUTTAKE -> leds.applyIntake(Settings.LED.OUTTAKING); 069 case HOMING_DOWN -> leds.applyIntake(Settings.LED.HOMING_DOWN); 070 default -> leds.applyIntake(LEDPattern.kOff); 071 } 072 switch (handoff.getState()) { 073 case FORWARD -> leds.applyHandoff(Settings.LED.HANDOFF_FORWARD); 074 case REVERSE -> leds.applyHandoff(Settings.LED.HANDOFF_REVERSE); 075 case IDLE -> leds.applyHandoff(LEDPattern.kOff); 076 } 077 } 078}