Skip to content

Commit

Permalink
Override eocv sim tuner manager and invoke reflect directly
Browse files Browse the repository at this point in the history
  • Loading branch information
serivesmejia committed Nov 5, 2024
1 parent ca9b8ec commit 92b420b
Show file tree
Hide file tree
Showing 3 changed files with 69 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,15 @@
package io.github.deltacv.papervision.plugin

import com.formdev.flatlaf.demo.HintManager
import com.github.serivesmejia.eocvsim.EOCVSim
import com.github.serivesmejia.eocvsim.gui.DialogFactory
import com.github.serivesmejia.eocvsim.input.SourceType
import com.github.serivesmejia.eocvsim.pipeline.PipelineSource
import com.github.serivesmejia.eocvsim.util.loggerForThis
import io.github.deltacv.eocvsim.pipeline.StreamableOpenCvPipelineInstantiator
import io.github.deltacv.eocvsim.plugin.EOCVSimPlugin
import io.github.deltacv.eocvsim.plugin.loader.PluginSource
import io.github.deltacv.eocvsim.virtualreflect.VirtualField
import io.github.deltacv.papervision.engine.client.message.*
import io.github.deltacv.papervision.engine.client.response.ErrorResponse
import io.github.deltacv.papervision.engine.client.response.OkResponse
Expand Down Expand Up @@ -248,23 +250,40 @@ class PaperVisionEOCVSimPlugin : EOCVSimPlugin() {
override fun onEnable() {
engine.setMessageHandlerOf<TunerChangeValueMessage> {
eocvSim.onMainUpdate.doOnce {
val field = eocvSim.tunerManager.getTunableFieldWithLabel(message.label) ?: return@doOnce
val field = currentPrevizSession?.latestVirtualReflect?.getLabeledField(message.label)
if (field != null) {
field.set(message.value)
logger.info("Received tuner change value message for ${message.label} to ${message.value} ")
}

field.setPipelineFieldValue(message.value)
logger.info("Received tuner change value message for ${message.label} to ${message.value} ")
respond(OkResponse())
}
}

engine.setMessageHandlerOf<TunerChangeValuesMessage> {
eocvSim.onMainUpdate.doOnce {
val field = eocvSim.tunerManager.getTunableFieldWithLabel(message.label) ?: return@doOnce
val field = currentPrevizSession?.latestVirtualReflect?.getLabeledField(message.label)

if(field != null) {
val tunableFieldClass = eocvSim.tunerManager.getTunableFieldOf(field)

val tunableField = tunableFieldClass.getConstructor(
Object::class.java,
VirtualField::class.java,
EOCVSim::class.java
).newInstance(
currentPrevizSession!!.latestPipeline,
field,
eocvSim
)

for (i in message.values.indices) {
field.setFieldValue(i, message.values[i])
}
for (i in message.values.indices) {
tunableField.setFieldValue(i, message.values[i])
}

logger.info("Received tuner change values message for ${message.label} to ${message.values}")

logger.info("Received tuner change values message for ${message.label} to ${message.values}")
}

respond(OkResponse())
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,11 @@ import com.github.serivesmejia.eocvsim.util.loggerForThis
import io.github.deltacv.eocvsim.pipeline.StreamableOpenCvPipeline
import io.github.deltacv.eocvsim.pipeline.StreamableOpenCvPipelineInstantiator
import io.github.deltacv.eocvsim.stream.ImageStreamer
import io.github.deltacv.eocvsim.virtualreflect.VirtualReflectContext
import io.github.deltacv.eocvsim.virtualreflect.jvm.JvmVirtualReflection
import io.github.deltacv.papervision.plugin.PaperVisionProcessRunner
import io.github.deltacv.papervision.plugin.eocvsim.SinglePipelineCompiler
import org.openftc.easyopencv.OpenCvPipeline

class EOCVSimPrevizSession(
val sessionName: String,
Expand All @@ -41,6 +44,11 @@ class EOCVSimPrevizSession(
private var latestClass: Class<*>? = null
private var latestSourceCode: String? = null

var latestPipeline: OpenCvPipeline? = null
private set
var latestVirtualReflect: VirtualReflectContext? = null
private set

val logger by loggerForThis()

init {
Expand All @@ -66,6 +74,10 @@ class EOCVSimPrevizSession(
isChangingPipeline = true

eocvSim.pipelineManager.forceChangePipeline(eocvSim.pipelineManager.getIndexOf(latestClass!!, PipelineSource.COMPILED_ON_RUNTIME))

latestPipeline = eocvSim.pipelineManager.currentPipeline!!
latestVirtualReflect = JvmVirtualReflection.contextOf(latestPipeline!!::class.java)

refreshPrevizPipelineStreamer()

// Re-enable the listener after the change
Expand Down Expand Up @@ -112,7 +124,7 @@ class EOCVSimPrevizSession(
eocvSim.pipelineManager.refreshGuiPipelineList()

eocvSim.pipelineManager.onUpdate.doOnce {
eocvSim.pipelineManager.addInstantiator(latestClass!!, StreamableOpenCvPipelineInstantiator(streamer))
eocvSim.pipelineManager.addInstantiator(latestClass!!, StreamableNoReflectOpenCvPipelineInstantiator(streamer))
eocvSim.pipelineManager.addPipelineClass(latestClass!!, PipelineSource.COMPILED_ON_RUNTIME)

eocvSim.pipelineManager.forceChangePipeline(
Expand All @@ -122,6 +134,9 @@ class EOCVSimPrevizSession(
)
)

latestPipeline = eocvSim.pipelineManager.currentPipeline!!
latestVirtualReflect = JvmVirtualReflection.contextOf(latestPipeline!!::class.java)

refreshPrevizPipelineStreamer()
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package io.github.deltacv.papervision.plugin.ipc.eocvsim

import io.github.deltacv.eocvsim.pipeline.StreamableOpenCvPipeline
import com.github.serivesmejia.eocvsim.pipeline.instantiator.DefaultPipelineInstantiator
import com.github.serivesmejia.eocvsim.pipeline.instantiator.PipelineInstantiator
import io.github.deltacv.eocvsim.stream.ImageStreamer
import io.github.deltacv.eocvsim.virtualreflect.jvm.JvmVirtualReflection
import org.firstinspires.ftc.robotcore.external.Telemetry
import org.openftc.easyopencv.OpenCvPipeline

class StreamableNoReflectOpenCvPipelineInstantiator(
val imageStreamer: ImageStreamer
) : PipelineInstantiator {

override fun instantiate(clazz: Class<*>, telemetry: Telemetry) =
DefaultPipelineInstantiator.instantiate(clazz, telemetry).apply {
if(this is StreamableOpenCvPipeline) {
this.streamer = imageStreamer
}
}

override fun virtualReflectOf(pipeline: OpenCvPipeline) = JvmVirtualReflection

override fun variableTunerTarget(pipeline: OpenCvPipeline) = Any()

}

0 comments on commit 92b420b

Please sign in to comment.