11package org.strykeforce.thirdcoast.talon
22
3- import com.ctre.phoenix.motorcontrol.ControlMode.*
3+ import com.ctre.phoenix.motorcontrol.ControlMode.MotionMagic
4+ import com.ctre.phoenix.motorcontrol.ControlMode.Position
5+ import edu.wpi.first.wpilibj.Timer
6+ import mu.KotlinLogging
47import net.consensys.cava.toml.TomlTable
58import org.jline.reader.EndOfFileException
69import org.koin.standalone.inject
7- import org.strykeforce.thirdcoast.*
810import org.strykeforce.thirdcoast.command.AbstractCommand
911import org.strykeforce.thirdcoast.command.Command
1012import org.strykeforce.thirdcoast.command.prompt
11- import org.strykeforce.thirdcoast.command.toMenu
1213import org.strykeforce.thirdcoast.device.TalonService
14+ import org.strykeforce.thirdcoast.warn
15+
16+ private val logger = KotlinLogging .logger {}
1317
1418class RunTalonsCommand (
1519 parent : Command ? ,
@@ -24,16 +28,30 @@ class RunTalonsCommand(
2428
2529 while (! done) {
2630 try {
27- val line = reader.readLine(prompt()).trim()
31+ val line = reader.readLine(prompt())
2832 if (line.isEmpty()) throw EndOfFileException ()
29- val setpoint = line.toDouble()
33+ val setpoints = line.split(' ,' )
34+ val setpoint = setpoints[0 ].toDouble()
35+ val duration = if (setpoints.size > 1 ) setpoints[1 ].toDouble() else 0.0
36+
3037 talonService.active.forEach { it.set(talonService.controlMode, setpoint) }
38+
39+ if (duration > 0.0 && (talonService.controlMode == MotionMagic || talonService.controlMode == Position )) {
40+ terminal.warn(" specifying a duration in closed-loop position mode not allowed" )
41+ done = true
42+ }
43+
44+ if (duration > 0.0 ) {
45+ logger.debug { " run duration = $duration seconds" }
46+ Timer .delay(duration)
47+ logger.debug { " run duration expired, setting output = 0.0" }
48+ talonService.active.forEach { it.set(talonService.controlMode, 0.0 ) }
49+ }
3150 } catch (e: Exception ) {
3251 done = true
3352 }
3453 }
3554
3655 return super .execute()
3756 }
38-
3957}
0 commit comments