package com.team254.lib.util;
import com.team254.frc2015.HardwareAdaptor;
import edu.wpi.first.wpilibj.SpeedController;
public class CheesySpeedController implements SpeedController {
protected SpeedController[] m_controllers;
protected int[] m_pdp_slots;
protected boolean m_invert = false;
public CheesySpeedController(SpeedController controller, int pdp_slot) {
m_controllers = new SpeedController[]{controller};
m_pdp_slots = new int[]{pdp_slot};
}
public CheesySpeedController(SpeedController controller, int[] pdp_slots) {
m_controllers = new SpeedController[]{controller};
m_pdp_slots = pdp_slots;
}
public CheesySpeedController(SpeedController[] controllers, int[] pdp_slots) {
assert (controllers.length == pdp_slots.length);
m_controllers = controllers;
m_pdp_slots = pdp_slots;
}
public void setInverted(boolean inverted) {
m_invert = inverted;
}
public boolean getInverted() {
return m_invert;
}
protected double sign() {
return (m_invert ? -1.0 : 1.0);
}
public double getCurrent() {
double current = 0.0;
for (int slot : m_pdp_slots) {
current += HardwareAdaptor.kPDP.getCurrent(slot);
}
return current;
}
public double getSignedCurrent() {
return getCurrent() * Math.signum(get()) * sign();
}
@Override
public void pidWrite(double output) {
for (SpeedController controller : m_controllers) {
controller.pidWrite(sign() * output);
}
}
@Override
public double get() {
return m_controllers[0].get() * sign();
}
@Override
public void set(double speed, byte syncGroup) {
for (SpeedController controller : m_controllers) {
controller.set(speed * sign(), syncGroup);
}
}
@Override
public void set(double speed) {
for (SpeedController controller : m_controllers) {
controller.set(speed * sign());
}
}
@Override
public void disable() {
for (SpeedController controller : m_controllers) {
controller.disable();
}
}
}