2025-10-24 01:28:04 -04:00
|
|
|
import hal
|
|
|
|
|
import hal.simulation
|
|
|
|
|
|
|
|
|
|
import typing
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_value_changed_callback():
|
|
|
|
|
|
|
|
|
|
recv: typing.Optional[typing.Tuple[bool, str, int]] = None
|
|
|
|
|
|
|
|
|
|
def created_cb(
|
|
|
|
|
name: str, handle: int, direction: hal.SimValueDirection, value: hal.Value
|
|
|
|
|
):
|
|
|
|
|
nonlocal recv
|
|
|
|
|
recv = (True, name, value.value)
|
|
|
|
|
|
|
|
|
|
def cb(name: str, handle: int, direction: hal.SimValueDirection, value: hal.Value):
|
|
|
|
|
nonlocal recv
|
|
|
|
|
recv = (False, name, value.value)
|
|
|
|
|
|
|
|
|
|
dev = hal.SimDevice("simd")
|
|
|
|
|
|
|
|
|
|
# Must keep the returned value alive or the callback will be unregistered
|
|
|
|
|
devunused = hal.simulation.registerSimValueCreatedCallback(dev, created_cb, True)
|
|
|
|
|
assert recv is None
|
|
|
|
|
|
2026-03-14 12:57:37 -07:00
|
|
|
val = dev.createInt("answer", hal.SimDevice.Direction.INPUT, 42)
|
2025-10-24 01:28:04 -04:00
|
|
|
|
|
|
|
|
assert recv == (True, "answer", 42)
|
|
|
|
|
recv = None
|
|
|
|
|
|
|
|
|
|
# Must keep the returned value alive or the callback will be unregistered
|
|
|
|
|
unused = hal.simulation.registerSimValueChangedCallback(val, cb, True)
|
|
|
|
|
|
|
|
|
|
assert recv == (False, "answer", 42)
|
|
|
|
|
recv = None
|
|
|
|
|
|
|
|
|
|
val.set(84)
|
|
|
|
|
|
|
|
|
|
assert recv == (False, "answer", 84)
|
|
|
|
|
recv = None
|