@@ -5,10 +5,13 @@ import be.glever.ant.constants.AntPlusDeviceType
55import be.glever.ant.message.AntMessage
66import be.glever.ant.message.data.BroadcastDataMessage
77import be.glever.ant.usb.AntUsbDevice
8+ import be.glever.antplus.common.datapage.AbstractAntPlusDataPage
89import be.glever.antplus.common.datapage.registry.AbstractDataPageRegistry
910import be.glever.antplus.power.PowerChannel
1011import be.glever.antplus.power.datapage.PowerDataPageRegistry
12+ import be.glever.antplus.power.datapage.background.*
1113import be.glever.antplus.power.datapage.main.PowerDataPage10PowerOnly
14+ import javafx.application.Platform
1215import me.danielschaefer.sensorwrangler.Measurement
1316import kotlin.random.Random
1417
@@ -21,10 +24,17 @@ class AntPowerSensor: AntPlusSensor<PowerChannel>() {
2124 private val cadenceMeasurement = Measurement (this , 0 , Measurement .Unit .RPM ).apply {
2225 description = " Cadence " + Random .nextInt(0 , 100 )
2326 }
24- private val powerDistributionMeasurment = Measurement (this , 0 , Measurement .Unit .PERCENTAGE ).apply {
27+ private val powerDistributionMeasurement = Measurement (this , 0 , Measurement .Unit .PERCENTAGE ).apply {
2528 description = " Power distribution" + Random .nextInt(0 , 100 )
2629 }
27- override val measurements: List <Measurement > = listOf (powerMeasurement, cadenceMeasurement, powerDistributionMeasurment)
30+ private val torqueBarycenterAngleMeasurement = Measurement (this , 0 , Measurement .Unit .DEGREE ).apply {
31+ description = " Torque Barycenter Angle" + Random .nextInt(0 , 100 )
32+ }
33+ override val measurements: List <Measurement > = listOf (
34+ powerMeasurement,
35+ cadenceMeasurement,
36+ powerDistributionMeasurement,
37+ torqueBarycenterAngleMeasurement)
2838
2939 override val registry: AbstractDataPageRegistry = PowerDataPageRegistry ()
3040
@@ -38,12 +48,56 @@ class AntPowerSensor: AntPlusSensor<PowerChannel>() {
3848 removeToggleBit(payLoad)
3949
4050 val dataPage = registry.constructDataPage(payLoad)
41- if (dataPage is PowerDataPage10PowerOnly ) {
42- powerMeasurement.addDataPoint(dataPage.instantaneousPower)
43- cadenceMeasurement.addDataPoint(dataPage.instantaneousCadence.toDouble())
51+ Platform .runLater { addMeasurement(dataPage) }
52+ }
53+
54+ private fun addMeasurement (dataPage : AbstractAntPlusDataPage ) {
55+ // TODO: Check which measurements are supported
56+ when (dataPage) {
57+ is PowerDataPage3MeasurementOutput -> {
58+ // TODO: Handle this data page
59+ dataPage.numberOfDataTypes
60+ dataPage.dataType
61+ dataPage.scaledMeasurement
62+ dataPage.timeStamp
63+ dataPage.measurement
64+ dataPage.scaleFactor
65+ }
66+ is PowerDataPage14TorqueBarycenter -> {
67+ torqueBarycenterAngleMeasurement.addDataPoint(dataPage.torqueBarycenterAngle)
68+ }
69+ is PowerDataPageE0RightForceAngle -> {
70+ // TODO: Handle this data page
71+ dataPage.torque
72+ dataPage.startAngle
73+ dataPage.endAngle
74+ dataPage.startPeakAngle
75+ dataPage.endPeakAngle
76+ }
77+ is PowerDataPageE1LeftForceAngle -> {
78+ // TODO: Handle this data page
79+ dataPage.torque
80+ dataPage.startAngle
81+ dataPage.endAngle
82+ dataPage.startPeakAngle
83+ dataPage.endPeakAngle
84+ }
85+ is PowerDataPageE2PedalPosition -> {
86+ // TODO: Handle this data page
87+ dataPage.cadence
88+ dataPage.leftPco
89+ dataPage.rightPco
90+ dataPage.riderPosition
91+ }
92+ is PowerDataPage10PowerOnly -> {
93+ powerMeasurement.addDataPoint(dataPage.instantaneousPower.toDouble())
94+ cadenceMeasurement.addDataPoint(dataPage.instantaneousCadence.toDouble())
4495
45- if (dataPage.pedalPowerDistribution.percentage != 127 )
46- powerDistributionMeasurment.addDataPoint(dataPage.pedalPowerDistribution.percentage.toDouble())
96+ dataPage.pedalPowerDistribution?.let {
97+ if (it.percentage != 127 )
98+ powerDistributionMeasurement.addDataPoint(it.percentage.toDouble())
99+ }
100+ }
47101 }
48102 }
49103
0 commit comments