diff --git a/build.gradle b/build.gradle index fa7c9187..0dcb3e17 100644 --- a/build.gradle +++ b/build.gradle @@ -12,7 +12,7 @@ buildscript { configure(subprojects) { group = 'org.strykeforce.thirdcoast' - version = '19.2.0' + version = '19.3.0' apply plugin: 'java-library' apply plugin: 'idea' @@ -51,7 +51,7 @@ configure(subprojects) { configure(subprojects - project(":deadeye")) { apply plugin: "edu.wpi.first.GradleRIO" - + dependencies { compile wpi.deps.wpilib() compile wpi.deps.vendor.java() diff --git a/telemetry/src/main/kotlin/org/strykeforce/thirdcoast/telemetry/AbstractInventory.kt b/telemetry/src/main/kotlin/org/strykeforce/thirdcoast/telemetry/AbstractInventory.kt index 09edad42..8cd94d7a 100644 --- a/telemetry/src/main/kotlin/org/strykeforce/thirdcoast/telemetry/AbstractInventory.kt +++ b/telemetry/src/main/kotlin/org/strykeforce/thirdcoast/telemetry/AbstractInventory.kt @@ -2,13 +2,13 @@ package org.strykeforce.thirdcoast.telemetry import com.squareup.moshi.JsonWriter import okio.BufferedSink -import org.strykeforce.thirdcoast.telemetry.item.Item +import org.strykeforce.thirdcoast.telemetry.item.Measurable import java.io.IOException /** - * An abstract base class intended to be subclassed by concrete implmentations of [Inventory]. + * An abstract base class intended to be subclassed by concrete implementations of [Inventory]. */ -abstract class AbstractInventory(items: Collection) : Inventory { +abstract class AbstractInventory(items: Collection) : Inventory { protected val items = items.sorted() @@ -29,7 +29,7 @@ abstract class AbstractInventory(items: Collection) : Inventory { override fun toString() = "AbstractInventory(items=$items)" } -private fun JsonWriter.writeItems(items: List): JsonWriter { +private fun JsonWriter.writeItems(items: List): JsonWriter { beginArray() items.forEachIndexed { index, item -> beginObject() @@ -41,7 +41,7 @@ private fun JsonWriter.writeItems(items: List): JsonWriter { return endArray() } -private fun JsonWriter.writeMeasures(items: List): JsonWriter { +private fun JsonWriter.writeMeasures(items: List): JsonWriter { beginArray() items.associateBy({ it.type }, { it.measures }).forEach { type, measures -> beginObject() diff --git a/telemetry/src/main/kotlin/org/strykeforce/thirdcoast/telemetry/Inventory.kt b/telemetry/src/main/kotlin/org/strykeforce/thirdcoast/telemetry/Inventory.kt index 665b9308..391024eb 100644 --- a/telemetry/src/main/kotlin/org/strykeforce/thirdcoast/telemetry/Inventory.kt +++ b/telemetry/src/main/kotlin/org/strykeforce/thirdcoast/telemetry/Inventory.kt @@ -1,29 +1,28 @@ package org.strykeforce.thirdcoast.telemetry import okio.BufferedSink -import org.strykeforce.thirdcoast.telemetry.item.Item +import org.strykeforce.thirdcoast.telemetry.item.Measurable import java.io.IOException /** Represents the inventory of robot hardware and subsystems that can have telemetry streaming. */ interface Inventory { - /** - * Gets an item by its inventory ID. The inventory ID is an index to an item in inventory and - * should **not** be confused with the device ID of the underlying device the `Item` - * represents. - * - * @param id the inventory ID to look up. - * @return the found Item. - */ - fun itemForId(id: Int): Item + /** + * Gets a measurable item by its inventory ID. The inventory ID is an index to a measurable item in inventory and + * should **not** be confused with the device ID of the underlying device the `Measurable` represents. + * + * @param id the inventory ID to look up. + * @return the found Measurable item. + */ + fun itemForId(id: Int): Measurable - /** - * Writes the grapher-format JSON inventory to the supplied sink. - * - * @param sink the sink to write to. - * @throws IOException if an IO error occurs during writing. - */ - @Throws(IOException::class) - fun writeInventory(sink: BufferedSink) + /** + * Writes the grapher-format JSON inventory to the supplied sink. + * + * @param sink the sink to write to. + * @throws IOException if an IO error occurs during writing. + */ + @Throws(IOException::class) + fun writeInventory(sink: BufferedSink) } diff --git a/telemetry/src/main/kotlin/org/strykeforce/thirdcoast/telemetry/RobotInventory.kt b/telemetry/src/main/kotlin/org/strykeforce/thirdcoast/telemetry/RobotInventory.kt index c8fcab7a..97ecc1f1 100644 --- a/telemetry/src/main/kotlin/org/strykeforce/thirdcoast/telemetry/RobotInventory.kt +++ b/telemetry/src/main/kotlin/org/strykeforce/thirdcoast/telemetry/RobotInventory.kt @@ -1,6 +1,6 @@ package org.strykeforce.thirdcoast.telemetry -import org.strykeforce.thirdcoast.telemetry.item.Item +import org.strykeforce.thirdcoast.telemetry.item.Measurable /** Default implementation of [Inventory] for a robot. */ -class RobotInventory(items: Collection) : AbstractInventory(items) +class RobotInventory(items: Collection) : AbstractInventory(items) diff --git a/telemetry/src/main/kotlin/org/strykeforce/thirdcoast/telemetry/TelemetryService.kt b/telemetry/src/main/kotlin/org/strykeforce/thirdcoast/telemetry/TelemetryService.kt index 834f90c2..ab4511fc 100644 --- a/telemetry/src/main/kotlin/org/strykeforce/thirdcoast/telemetry/TelemetryService.kt +++ b/telemetry/src/main/kotlin/org/strykeforce/thirdcoast/telemetry/TelemetryService.kt @@ -3,7 +3,7 @@ package org.strykeforce.thirdcoast.telemetry import com.ctre.phoenix.motorcontrol.can.TalonSRX import mu.KotlinLogging import org.strykeforce.thirdcoast.swerve.SwerveDrive -import org.strykeforce.thirdcoast.telemetry.item.Item +import org.strykeforce.thirdcoast.telemetry.item.Measurable import org.strykeforce.thirdcoast.telemetry.item.TalonItem import java.util.* import java.util.function.Function @@ -11,7 +11,7 @@ import java.util.function.Function private val logger = KotlinLogging.logger {} /** - * The Telemetry service registers [Item] instances for data collection and controls the + * The Telemetry service registers [Measurable] instances for data collection and controls the * starting and stopping of the service. When active, the services listens for incoming config * messages via a HTTP REST service and sends data over UDP. */ @@ -21,7 +21,7 @@ class TelemetryService(private val telemetryControllerFactory: Function() + private val items = LinkedHashSet() private var telemetryController: TelemetryController? = null /** Start the Telemetry service and listen for client connections. */ @@ -62,7 +62,7 @@ class TelemetryService(private val telemetryControllerFactory: Function) { + fun registerAll(collection: Collection) { checkNotStarted() items.addAll(collection) logger.info { "registered all: $collection" } @@ -108,7 +108,7 @@ class TelemetryService(private val telemetryControllerFactory: Function { + fun getItems(): Set { return Collections.unmodifiableSet(items) } @@ -117,7 +117,7 @@ class TelemetryService(private val telemetryControllerFactory: Function { +interface Measurable : Comparable { /** * Returns the underlying device id, for example, CAN bus address or PWM port. @@ -29,7 +29,7 @@ interface Item : Comparable { val description: String /** - * `Set` of `Measure` items applicable to this item type. + * `Set` of `Measure` parameters applicable to this item type. */ val measures: Set @@ -39,11 +39,11 @@ interface Item : Comparable { */ fun measurementFor(measure: Measure): DoubleSupplier - override fun compareTo(other: Item): Int { + override fun compareTo(other: Measurable): Int { val result = type.compareTo(other.type) return if (result != 0) result else deviceId.compareTo(other.deviceId) } } -internal fun Boolean.toDouble() = if (this) 1.0 else 0.0 \ No newline at end of file +internal fun Boolean.toDouble() = if (this) 1.0 else 0.0 diff --git a/telemetry/src/main/kotlin/org/strykeforce/thirdcoast/telemetry/item/ServoItem.kt b/telemetry/src/main/kotlin/org/strykeforce/thirdcoast/telemetry/item/ServoItem.kt index 003451e8..5d82a0d0 100644 --- a/telemetry/src/main/kotlin/org/strykeforce/thirdcoast/telemetry/item/ServoItem.kt +++ b/telemetry/src/main/kotlin/org/strykeforce/thirdcoast/telemetry/item/ServoItem.kt @@ -6,11 +6,11 @@ import org.strykeforce.thirdcoast.telemetry.grapher.Measure.ANGLE import org.strykeforce.thirdcoast.telemetry.grapher.Measure.POSITION import java.util.function.DoubleSupplier -/** Represents a [Servo] telemetry-enable Item. */ +/** Represents a [Servo] telemetry-enable `Measurable` item. */ class ServoItem @JvmOverloads constructor( private val servo: Servo, override val description: String = "Servo ${servo.channel}" -) : Item { +) : Measurable { override val deviceId = servo.channel override val type = "servo" diff --git a/telemetry/src/main/kotlin/org/strykeforce/thirdcoast/telemetry/item/TalonItem.kt b/telemetry/src/main/kotlin/org/strykeforce/thirdcoast/telemetry/item/TalonItem.kt index b2a8cf15..4e0d8790 100644 --- a/telemetry/src/main/kotlin/org/strykeforce/thirdcoast/telemetry/item/TalonItem.kt +++ b/telemetry/src/main/kotlin/org/strykeforce/thirdcoast/telemetry/item/TalonItem.kt @@ -5,11 +5,11 @@ import org.strykeforce.thirdcoast.telemetry.grapher.Measure import org.strykeforce.thirdcoast.telemetry.grapher.Measure.* import java.util.function.DoubleSupplier -/** Represents a [TalonSRX] telemetry-enable Item. */ +/** Represents a [TalonSRX] telemetry-enable `Measurable` item. */ class TalonItem @JvmOverloads constructor( private val talon: TalonSRX, override val description: String = "TalonSRX ${talon.deviceID}" -) : Item { +) : Measurable { override val deviceId = talon.deviceID override val type = "talon" @@ -94,4 +94,4 @@ class TalonItem @JvmOverloads constructor( REVERSE_LIMIT_SWITCH_CLOSED ) } -} \ No newline at end of file +} diff --git a/telemetry/src/main/kotlin/org/strykeforce/thirdcoast/telemetry/item/UltrasonicRangefinderItem.kt b/telemetry/src/main/kotlin/org/strykeforce/thirdcoast/telemetry/item/UltrasonicRangefinderItem.kt index 8a815f1a..9bb106f0 100644 --- a/telemetry/src/main/kotlin/org/strykeforce/thirdcoast/telemetry/item/UltrasonicRangefinderItem.kt +++ b/telemetry/src/main/kotlin/org/strykeforce/thirdcoast/telemetry/item/UltrasonicRangefinderItem.kt @@ -6,11 +6,12 @@ import org.strykeforce.thirdcoast.telemetry.grapher.Measure import org.strykeforce.thirdcoast.telemetry.grapher.Measure.VALUE import java.util.function.DoubleSupplier +/** Represents a PWM ultrasonic rangefinder telemetry-enable `Measurable` item. */ class UltrasonicRangefinderItem @JvmOverloads constructor( canId: Int, private val pwmChannel: PWMChannel, override val description: String = "Sensor ${canId * 10 + pwmChannel.value}" -) : Item { +) : Measurable { override val deviceId = canId * 10 + pwmChannel.value override val type = "sensor" diff --git a/telemetry/src/test/java/org/strykeforce/thirdcoast/telemetry/RobotInventoryTest.java b/telemetry/src/test/java/org/strykeforce/thirdcoast/telemetry/RobotInventoryTest.java index 37d414bc..9e551cb4 100644 --- a/telemetry/src/test/java/org/strykeforce/thirdcoast/telemetry/RobotInventoryTest.java +++ b/telemetry/src/test/java/org/strykeforce/thirdcoast/telemetry/RobotInventoryTest.java @@ -9,7 +9,7 @@ import org.mockito.junit.jupiter.MockitoExtension; import org.skyscreamer.jsonassert.JSONAssert; import org.strykeforce.thirdcoast.telemetry.grapher.ResourceHelper; -import org.strykeforce.thirdcoast.telemetry.item.Item; +import org.strykeforce.thirdcoast.telemetry.item.Measurable; import java.io.IOException; import java.nio.charset.Charset; @@ -22,9 +22,9 @@ @ExtendWith(MockitoExtension.class) class RobotInventoryTest { - @Mock private Item itemOne; - @Mock private Item itemTwo; - private Collection items; + @Mock private Measurable itemOne; + @Mock private Measurable itemTwo; + private Collection items; @BeforeEach void setUp() { diff --git a/telemetry/src/test/java/org/strykeforce/thirdcoast/telemetry/grapher/SubscriptionTest.java b/telemetry/src/test/java/org/strykeforce/thirdcoast/telemetry/grapher/SubscriptionTest.java index 70daa924..1f55bd0d 100644 --- a/telemetry/src/test/java/org/strykeforce/thirdcoast/telemetry/grapher/SubscriptionTest.java +++ b/telemetry/src/test/java/org/strykeforce/thirdcoast/telemetry/grapher/SubscriptionTest.java @@ -11,7 +11,7 @@ import org.skyscreamer.jsonassert.JSONAssert; import org.skyscreamer.jsonassert.JSONParser; import org.strykeforce.thirdcoast.telemetry.Inventory; -import org.strykeforce.thirdcoast.telemetry.item.Item; +import org.strykeforce.thirdcoast.telemetry.item.Measurable; import java.io.IOException; import java.nio.charset.Charset; @@ -24,7 +24,8 @@ @ExtendWith(MockitoExtension.class) class SubscriptionTest { - @Mock Item itemZero, itemOne; + @Mock + Measurable itemZero, itemOne; @Mock Inventory inventory; @BeforeEach