2023-02-13 17:21:24 -06:00
|
|
|
package swervelib.parser.json;
|
2023-02-13 14:37:05 -06:00
|
|
|
|
2023-02-22 23:10:57 -06:00
|
|
|
import edu.wpi.first.wpilibj.SerialPort.Port;
|
2023-02-21 22:38:14 -06:00
|
|
|
import swervelib.encoders.AnalogAbsoluteEncoderSwerve;
|
2023-02-13 17:21:24 -06:00
|
|
|
import swervelib.encoders.CANCoderSwerve;
|
|
|
|
|
import swervelib.encoders.SparkMaxEncoderSwerve;
|
|
|
|
|
import swervelib.encoders.SwerveAbsoluteEncoder;
|
2023-02-15 22:18:27 -06:00
|
|
|
import swervelib.imu.ADIS16448Swerve;
|
|
|
|
|
import swervelib.imu.ADIS16470Swerve;
|
|
|
|
|
import swervelib.imu.ADXRS450Swerve;
|
|
|
|
|
import swervelib.imu.AnalogGyroSwerve;
|
2023-02-13 17:21:24 -06:00
|
|
|
import swervelib.imu.NavXSwerve;
|
|
|
|
|
import swervelib.imu.Pigeon2Swerve;
|
|
|
|
|
import swervelib.imu.PigeonSwerve;
|
|
|
|
|
import swervelib.imu.SwerveIMU;
|
|
|
|
|
import swervelib.motors.SparkMaxSwerve;
|
|
|
|
|
import swervelib.motors.SwerveMotor;
|
|
|
|
|
import swervelib.motors.TalonFXSwerve;
|
|
|
|
|
import swervelib.motors.TalonSRXSwerve;
|
2023-02-13 14:37:05 -06:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Device JSON parsed class. Used to access the JSON data.
|
|
|
|
|
*/
|
|
|
|
|
public class DeviceJson
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* The device type, e.g. pigeon/pigeon2/sparkmax/talonfx/navx
|
|
|
|
|
*/
|
|
|
|
|
public String type;
|
|
|
|
|
/**
|
|
|
|
|
* The CAN ID or pin ID of the device.
|
|
|
|
|
*/
|
|
|
|
|
public int id;
|
|
|
|
|
/**
|
|
|
|
|
* The CAN bus name which the device resides on if using CAN.
|
|
|
|
|
*/
|
|
|
|
|
public String canbus = "";
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Create a {@link SwerveAbsoluteEncoder} from the current configuration.
|
|
|
|
|
*
|
|
|
|
|
* @return {@link SwerveAbsoluteEncoder} given.
|
|
|
|
|
*/
|
|
|
|
|
public SwerveAbsoluteEncoder createEncoder()
|
|
|
|
|
{
|
|
|
|
|
switch (type)
|
|
|
|
|
{
|
2023-02-16 21:21:26 -06:00
|
|
|
case "none":
|
2023-02-13 14:37:05 -06:00
|
|
|
case "integrated":
|
|
|
|
|
case "attached":
|
|
|
|
|
return null;
|
2023-02-21 22:38:14 -06:00
|
|
|
case "thrifty":
|
|
|
|
|
case "throughbore":
|
|
|
|
|
case "dutycycle":
|
|
|
|
|
case "analog":
|
|
|
|
|
return new AnalogAbsoluteEncoderSwerve(id);
|
2023-02-13 14:37:05 -06:00
|
|
|
case "cancoder":
|
|
|
|
|
return new CANCoderSwerve(id, canbus != null ? canbus : "");
|
|
|
|
|
default:
|
|
|
|
|
throw new RuntimeException(type + " is not a recognized absolute encoder type.");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Create a {@link SwerveIMU} from the given configuration.
|
|
|
|
|
*
|
|
|
|
|
* @return {@link SwerveIMU} given.
|
|
|
|
|
*/
|
|
|
|
|
public SwerveIMU createIMU()
|
|
|
|
|
{
|
|
|
|
|
switch (type)
|
|
|
|
|
{
|
2023-02-15 22:18:27 -06:00
|
|
|
case "adis16448":
|
|
|
|
|
return new ADIS16448Swerve();
|
|
|
|
|
case "adis16470":
|
|
|
|
|
return new ADIS16470Swerve();
|
|
|
|
|
case "adxrs450":
|
|
|
|
|
return new ADXRS450Swerve();
|
|
|
|
|
case "analog":
|
|
|
|
|
return new AnalogGyroSwerve(id);
|
2023-02-22 23:10:57 -06:00
|
|
|
case "navx_onborard":
|
|
|
|
|
return new NavXSwerve(Port.kOnboard);
|
|
|
|
|
case "navx_usb":
|
|
|
|
|
return new NavXSwerve(Port.kUSB);
|
|
|
|
|
case "navx_mxp":
|
2023-02-13 14:37:05 -06:00
|
|
|
case "navx":
|
2023-02-22 23:10:57 -06:00
|
|
|
return new NavXSwerve(Port.kMXP);
|
2023-02-13 14:37:05 -06:00
|
|
|
case "pigeon":
|
|
|
|
|
return new PigeonSwerve(id);
|
|
|
|
|
case "pigeon2":
|
|
|
|
|
return new Pigeon2Swerve(id, canbus != null ? canbus : "");
|
|
|
|
|
default:
|
|
|
|
|
throw new RuntimeException(type + " is not a recognized absolute encoder type.");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Create a {@link SwerveMotor} from the given configuration.
|
|
|
|
|
*
|
|
|
|
|
* @param isDriveMotor If the motor being generated is a drive motor.
|
|
|
|
|
* @return {@link SwerveMotor} given.
|
|
|
|
|
*/
|
|
|
|
|
public SwerveMotor createMotor(boolean isDriveMotor)
|
|
|
|
|
{
|
2023-02-13 17:21:24 -06:00
|
|
|
switch (type)
|
2023-02-13 14:37:05 -06:00
|
|
|
{
|
2023-02-13 17:21:24 -06:00
|
|
|
case "sparkmax":
|
|
|
|
|
return new SparkMaxSwerve(id, isDriveMotor);
|
|
|
|
|
case "falcon":
|
|
|
|
|
case "talonfx":
|
|
|
|
|
return new TalonFXSwerve(id, canbus != null ? canbus : "", isDriveMotor);
|
|
|
|
|
case "talonsrx":
|
|
|
|
|
return new TalonSRXSwerve(id, isDriveMotor);
|
|
|
|
|
default:
|
|
|
|
|
throw new RuntimeException(type + " is not a recognized absolute encoder type.");
|
2023-02-13 14:37:05 -06:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Create a {@link SwerveAbsoluteEncoder} from the data port on the motor controller.
|
|
|
|
|
*
|
|
|
|
|
* @param motor The motor to create the absolute encoder from.
|
|
|
|
|
* @return {@link SwerveAbsoluteEncoder} from the motor controller.
|
|
|
|
|
*/
|
|
|
|
|
public SwerveAbsoluteEncoder createIntegratedEncoder(SwerveMotor motor)
|
|
|
|
|
{
|
2023-02-16 21:21:26 -06:00
|
|
|
switch (type)
|
2023-02-13 14:37:05 -06:00
|
|
|
{
|
2023-02-16 21:21:26 -06:00
|
|
|
case "sparkmax":
|
|
|
|
|
return new SparkMaxEncoderSwerve(motor);
|
2023-02-21 22:38:14 -06:00
|
|
|
case "falcon":
|
|
|
|
|
case "talonfx":
|
2023-02-16 21:21:26 -06:00
|
|
|
return null;
|
2023-02-13 14:37:05 -06:00
|
|
|
}
|
2023-02-20 20:59:31 -06:00
|
|
|
throw new RuntimeException(
|
|
|
|
|
"Could not create absolute encoder from data port of " + type + " id " + id);
|
2023-02-13 14:37:05 -06:00
|
|
|
}
|
|
|
|
|
}
|