From 4b8eee7431353fe580580060f35d19d4ece78f94 Mon Sep 17 00:00:00 2001 From: Tim <73599525+timtogan@users.noreply.github.com> Date: Thu, 5 Feb 2026 11:02:35 -0800 Subject: [PATCH 1/6] add createSpark --- .../lib199/MotorControllerFactory.java | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/main/java/org/carlmontrobotics/lib199/MotorControllerFactory.java b/src/main/java/org/carlmontrobotics/lib199/MotorControllerFactory.java index 43f32c0..ebf8b3f 100644 --- a/src/main/java/org/carlmontrobotics/lib199/MotorControllerFactory.java +++ b/src/main/java/org/carlmontrobotics/lib199/MotorControllerFactory.java @@ -56,6 +56,32 @@ public static WPI_TalonSRX createTalon(int id) { return talon; } + /** + * 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)); + } + /** + * 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, 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 +114,7 @@ public static SparkMax createSparkMax(int id, MotorConfig motorConfig, SparkBase return spark; } + /** * Create a default SparkFlex-Vortex controller. * From e7fe9f9d33db08ceb4c315e9a6868ded240e8905 Mon Sep 17 00:00:00 2001 From: Tim <73599525+timtogan@users.noreply.github.com> Date: Thu, 5 Feb 2026 11:05:28 -0800 Subject: [PATCH 2/6] fix javadoc --- .../org/carlmontrobotics/lib199/MotorControllerFactory.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/carlmontrobotics/lib199/MotorControllerFactory.java b/src/main/java/org/carlmontrobotics/lib199/MotorControllerFactory.java index ebf8b3f..2def763 100644 --- a/src/main/java/org/carlmontrobotics/lib199/MotorControllerFactory.java +++ b/src/main/java/org/carlmontrobotics/lib199/MotorControllerFactory.java @@ -57,7 +57,7 @@ public static WPI_TalonSRX createTalon(int id) { return talon; } /** - * To use the configAccessor, use {@link MotorControllerFactory#getConfigAccessor(SparkBase...)} + * To use the configAccessor, use {@link MotorControllerFactory#getConfigAccessor(SparkBase)} * * @param id the port of the motor controller * @param motorConfig the motor configuration to use @@ -66,7 +66,7 @@ public static SparkBase createSpark(int id, MotorConfig motorConfig) { return createSpark(id, motorConfig, sparkConfig(motorConfig)); } /** - * To use the configAccessor, use {@link MotorControllerFactory#getConfigAccessor(SparkBase...)} + * To use the configAccessor, use {@link MotorControllerFactory#getConfigAccessor(SparkBase)} * * @param id the port of the motor controller * @param motorConfig the motor configuration to use From caab1c51356836b84843bae024246ca9bea0cbd5 Mon Sep 17 00:00:00 2001 From: Tim <73599525+timtogan@users.noreply.github.com> Date: Thu, 5 Feb 2026 11:19:56 -0800 Subject: [PATCH 3/6] added tests for MotorControllerFactory --- .../lib199/MotorControllerFactoryTest.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/test/java/org/carlmontrobotics/lib199/MotorControllerFactoryTest.java b/src/test/java/org/carlmontrobotics/lib199/MotorControllerFactoryTest.java index 87ccc3e..1963db6 100644 --- a/src/test/java/org/carlmontrobotics/lib199/MotorControllerFactoryTest.java +++ b/src/test/java/org/carlmontrobotics/lib199/MotorControllerFactoryTest.java @@ -20,7 +20,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)); + + MotorControllerFactory.createSpark(20, MotorConfig.NEO); + MotorControllerFactory.createSpark(21, MotorConfig.NEO_2); + MotorControllerFactory.createSpark(22, MotorConfig.NEO_VORTEX); + MotorControllerFactory.createSpark(23, MotorConfig.NEO, MotorControllerFactory.sparkConfig(MotorConfig.NEO_VORTEX)); + MotorControllerFactory.createSpark(24, MotorConfig.NEO_2, MotorControllerFactory.sparkConfig(MotorConfig.NEO_VORTEX)); + MotorControllerFactory.createSpark(25, MotorConfig.NEO_VORTEX, MotorControllerFactory.sparkConfig(MotorConfig.NEO_VORTEX)); + assertEquals(0, errStream.toByteArray().length); } From de8900b264680077a3800e55713d5b427386524a Mon Sep 17 00:00:00 2001 From: Tim <73599525+timtogan@users.noreply.github.com> Date: Thu, 5 Feb 2026 11:22:32 -0800 Subject: [PATCH 4/6] fix createSpark documentation Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .../java/org/carlmontrobotics/lib199/MotorControllerFactory.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/org/carlmontrobotics/lib199/MotorControllerFactory.java b/src/main/java/org/carlmontrobotics/lib199/MotorControllerFactory.java index 2def763..95fedc9 100644 --- a/src/main/java/org/carlmontrobotics/lib199/MotorControllerFactory.java +++ b/src/main/java/org/carlmontrobotics/lib199/MotorControllerFactory.java @@ -70,6 +70,7 @@ public static SparkBase createSpark(int id, MotorConfig motorConfig) { * * @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){ From 7943e8adf67a252f86634986cbaab6aaa8d0c324 Mon Sep 17 00:00:00 2001 From: Tim <73599525+timtogan@users.noreply.github.com> Date: Fri, 6 Feb 2026 08:59:21 -0800 Subject: [PATCH 5/6] added documentation for createSpark and added tests that check that createSpark creates the right motor type --- .../lib199/MotorControllerFactory.java | 4 ++++ .../lib199/MotorControllerFactoryTest.java | 20 +++++++++++-------- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/carlmontrobotics/lib199/MotorControllerFactory.java b/src/main/java/org/carlmontrobotics/lib199/MotorControllerFactory.java index 95fedc9..146b695 100644 --- a/src/main/java/org/carlmontrobotics/lib199/MotorControllerFactory.java +++ b/src/main/java/org/carlmontrobotics/lib199/MotorControllerFactory.java @@ -57,6 +57,8 @@ 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 @@ -66,6 +68,8 @@ 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...)} or {@link MotorControllerFactory#createSparkFlex(int, MotorConfig...)} to get a SparkMax or SparkFlex object. * To use the configAccessor, use {@link MotorControllerFactory#getConfigAccessor(SparkBase)} * * @param id the port of the motor controller diff --git a/src/test/java/org/carlmontrobotics/lib199/MotorControllerFactoryTest.java b/src/test/java/org/carlmontrobotics/lib199/MotorControllerFactoryTest.java index 1963db6..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 @@ -23,17 +27,17 @@ public void testCreateNoErrors() throws Exception { 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)); - MotorControllerFactory.createSpark(20, MotorConfig.NEO); - MotorControllerFactory.createSpark(21, MotorConfig.NEO_2); - MotorControllerFactory.createSpark(22, MotorConfig.NEO_VORTEX); - MotorControllerFactory.createSpark(23, MotorConfig.NEO, MotorControllerFactory.sparkConfig(MotorConfig.NEO_VORTEX)); - MotorControllerFactory.createSpark(24, MotorConfig.NEO_2, MotorControllerFactory.sparkConfig(MotorConfig.NEO_VORTEX)); - MotorControllerFactory.createSpark(25, 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); } From 3fec01c352d92b2ec5f98327e82925f14e636beb Mon Sep 17 00:00:00 2001 From: Tim <73599525+timtogan@users.noreply.github.com> Date: Fri, 6 Feb 2026 10:02:23 -0800 Subject: [PATCH 6/6] fix javadoc --- .../org/carlmontrobotics/lib199/MotorControllerFactory.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/carlmontrobotics/lib199/MotorControllerFactory.java b/src/main/java/org/carlmontrobotics/lib199/MotorControllerFactory.java index 146b695..81e83e5 100644 --- a/src/main/java/org/carlmontrobotics/lib199/MotorControllerFactory.java +++ b/src/main/java/org/carlmontrobotics/lib199/MotorControllerFactory.java @@ -58,7 +58,7 @@ public static WPI_TalonSRX createTalon(int id) { } /** * 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. + * 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 @@ -69,7 +69,7 @@ public static SparkBase createSpark(int id, MotorConfig 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...)} or {@link MotorControllerFactory#createSparkFlex(int, MotorConfig...)} to get a SparkMax or SparkFlex object. + * 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