diff --git a/src/main/java/org/carlmontrobotics/lib199/MotorControllerFactory.java b/src/main/java/org/carlmontrobotics/lib199/MotorControllerFactory.java index 43f32c0..81e83e5 100644 --- a/src/main/java/org/carlmontrobotics/lib199/MotorControllerFactory.java +++ b/src/main/java/org/carlmontrobotics/lib199/MotorControllerFactory.java @@ -56,6 +56,37 @@ public static WPI_TalonSRX createTalon(int id) { return talon; } + /** + * This class returns a SparkBase, initialized to either a SparkMax or SparkFlex depending on the {@link MotorConfig#controllerType}. + * Note that SparkBase lacks some of the functionality of SparkMax and SparkFlex, use {@link MotorControllerFactory#createSparkMax(int, MotorConfig)} or {@link MotorControllerFactory#createSparkFlex(int)} to get a SparkMax or SparkFlex object. + * To use the configAccessor, use {@link MotorControllerFactory#getConfigAccessor(SparkBase)} + * + * @param id the port of the motor controller + * @param motorConfig the motor configuration to use + */ + public static SparkBase createSpark(int id, MotorConfig motorConfig) { + return createSpark(id, motorConfig, sparkConfig(motorConfig)); + } + /** + * This class returns a SparkBase, initialized to either a SparkMax or SparkFlex depending on the {@link MotorConfig#controllerType}. + * Note that SparkBase lacks some of the functionality of SparkMax and SparkFlex, use {@link MotorControllerFactory#createSparkMax(int, MotorConfig, SparkBaseConfig)} or {@link MotorControllerFactory#createSparkFlex(int, MotorConfig, SparkBaseConfig)} to get a SparkMax or SparkFlex object. + * To use the configAccessor, use {@link MotorControllerFactory#getConfigAccessor(SparkBase)} + * + * @param id the port of the motor controller + * @param motorConfig the motor configuration to use + * @param config the custom SparkBase configuration to apply instead of the default for the motorConfig + */ + public static SparkBase createSpark(int id, MotorConfig motorConfig, SparkBaseConfig config) { + switch(motorConfig.controllerType){ + case SPARK_MAX: + return createSparkMax(id, motorConfig, config); + case SPARK_FLEX: + return createSparkFlex(id, motorConfig, config); + default: + return null; + } + } + /** * Create a default sparkMax controller (NEO or 550). * @@ -88,6 +119,7 @@ public static SparkMax createSparkMax(int id, MotorConfig motorConfig, SparkBase return spark; } + /** * Create a default SparkFlex-Vortex controller. * diff --git a/src/test/java/org/carlmontrobotics/lib199/MotorControllerFactoryTest.java b/src/test/java/org/carlmontrobotics/lib199/MotorControllerFactoryTest.java index 87ccc3e..e635428 100644 --- a/src/test/java/org/carlmontrobotics/lib199/MotorControllerFactoryTest.java +++ b/src/test/java/org/carlmontrobotics/lib199/MotorControllerFactoryTest.java @@ -1,6 +1,7 @@ package org.carlmontrobotics.lib199; import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertInstanceOf; import org.carlmontrobotics.lib199.testUtils.ErrStreamTest; import org.carlmontrobotics.lib199.testUtils.TestRules; @@ -8,6 +9,9 @@ import org.junit.Rule; import org.junit.Test; +import com.revrobotics.spark.SparkFlex; +import com.revrobotics.spark.SparkMax; + public class MotorControllerFactoryTest extends ErrStreamTest { @ClassRule @@ -20,7 +24,20 @@ public class MotorControllerFactoryTest extends ErrStreamTest { public void testCreateNoErrors() throws Exception { // Call close to free PWM ports ((AutoCloseable)MotorControllerFactory.createTalon(0)).close(); + MotorControllerFactory.createSparkMax(2, MotorConfig.NEO); + MotorControllerFactory.createSparkMax(3, MotorConfig.NEO, MotorControllerFactory.sparkConfig(MotorConfig.NEO)); + + MotorControllerFactory.createSparkFlex(10); + MotorControllerFactory.createSparkFlex(10, MotorConfig.NEO_VORTEX, MotorControllerFactory.sparkConfig(MotorConfig.NEO_VORTEX)); + + assertInstanceOf(SparkMax.class, MotorControllerFactory.createSpark(20, MotorConfig.NEO)); + assertInstanceOf(SparkMax.class, MotorControllerFactory.createSpark(21, MotorConfig.NEO_2)); + assertInstanceOf(SparkFlex.class, MotorControllerFactory.createSpark(22, MotorConfig.NEO_VORTEX)); + assertInstanceOf(SparkMax.class, MotorControllerFactory.createSpark(23, MotorConfig.NEO, MotorControllerFactory.sparkConfig(MotorConfig.NEO))); + assertInstanceOf(SparkMax.class, MotorControllerFactory.createSpark(24, MotorConfig.NEO_2, MotorControllerFactory.sparkConfig(MotorConfig.NEO_2))); + assertInstanceOf(SparkFlex.class, MotorControllerFactory.createSpark(25, MotorConfig.NEO_VORTEX, MotorControllerFactory.sparkConfig(MotorConfig.NEO_VORTEX))); + assertEquals(0, errStream.toByteArray().length); }