Update pressure sensor demo

This commit is contained in:
Alexander Nozik 2023-03-02 10:07:54 +03:00
parent ba84553be5
commit 00c66da847
3 changed files with 16 additions and 10 deletions

View File

@ -236,8 +236,7 @@ public fun <T, D : DeviceBase<D>> DeviceSpec<D>.logicalProperty(
override val converter: MetaConverter<T> = converter override val converter: MetaConverter<T> = converter
override suspend fun read(device: D): T? = override suspend fun read(device: D): T? = device.getProperty(propertyName)?.let(converter::metaToObject)
device.getProperty(propertyName)?.let(converter::metaToObject)
override suspend fun write(device: D, value: T): Unit = override suspend fun write(device: D, value: T): Unit =
device.writeProperty(propertyName, converter.objectToMeta(value)) device.writeProperty(propertyName, converter.objectToMeta(value))

View File

@ -14,8 +14,12 @@ import space.kscience.dataforge.meta.get
import space.kscience.dataforge.meta.int import space.kscience.dataforge.meta.int
import space.kscience.dataforge.meta.transformations.MetaConverter import space.kscience.dataforge.meta.transformations.MetaConverter
//TODO this device is not tested
class MksPdr900Device(context: Context, meta: Meta) : DeviceBySpec<MksPdr900Device>(MksPdr900Device, context, meta) { class MksPdr900Device(context: Context, meta: Meta) : DeviceBySpec<MksPdr900Device>(MksPdr900Device, context, meta) {
private val address by meta.int(253)
private val portDelegate = lazy { private val portDelegate = lazy {
val ports = context.request(Ports) val ports = context.request(Ports)
ports.buildPort(meta["port"] ?: error("Port is not defined in device configuration")).synchronous() ports.buildPort(meta["port"] ?: error("Port is not defined in device configuration")).synchronous()
@ -23,9 +27,6 @@ class MksPdr900Device(context: Context, meta: Meta) : DeviceBySpec<MksPdr900Devi
private val port: SynchronousPort by portDelegate private val port: SynchronousPort by portDelegate
private val address by meta.int(253)
private val channel by meta.int(5)
private val responsePattern: Regex by lazy { private val responsePattern: Regex by lazy {
("@${address}ACK(.*);FF").toRegex() ("@${address}ACK(.*);FF").toRegex()
} }
@ -62,7 +63,7 @@ class MksPdr900Device(context: Context, meta: Meta) : DeviceBySpec<MksPdr900Devi
} }
} }
public suspend fun readChannelData(): Double? { public suspend fun readChannelData(channel: Int): Double? {
val answer: String? = talk("PR$channel?") val answer: String? = talk("PR$channel?")
error.invalidate() error.invalidate()
return if (answer.isNullOrEmpty()) { return if (answer.isNullOrEmpty()) {
@ -83,12 +84,18 @@ class MksPdr900Device(context: Context, meta: Meta) : DeviceBySpec<MksPdr900Devi
companion object : DeviceSpec<MksPdr900Device>(), Factory<MksPdr900Device> { companion object : DeviceSpec<MksPdr900Device>(), Factory<MksPdr900Device> {
override fun build(context: Context, meta: Meta): MksPdr900Device = MksPdr900Device(context, meta)
const val DEFAULT_CHANNEL: Int = 5
override fun build(context: Context, meta: Meta): MksPdr900Device = MksPdr900Device(context, meta)
val powerOn by booleanProperty(read = MksPdr900Device::readPowerOn, write = MksPdr900Device::writePowerOn) val powerOn by booleanProperty(read = MksPdr900Device::readPowerOn, write = MksPdr900Device::writePowerOn)
val value by doubleProperty(read = MksPdr900Device::readChannelData) val channel by logicalProperty(MetaConverter.int)
val value by doubleProperty(read = {
readChannelData(channel.get() ?: DEFAULT_CHANNEL)
})
val error by logicalProperty(MetaConverter.string) val error by logicalProperty(MetaConverter.string)

View File

@ -194,9 +194,9 @@ class PiMotionMasterDevice(
val disconnect by metaAction({ val disconnect by metaAction({
info = "Disconnect the program from the device if it is connected" info = "Disconnect the program from the device if it is connected"
}) { }) {
if (port != null) { port?.let{
stop() stop()
port?.close() it.close()
} }
port = null port = null
updateLogical(connected, false) updateLogical(connected, false)