Source code for ophyd_async.panda._trigger

import asyncio
from dataclasses import dataclass

from ophyd_async.core import TriggerLogic, wait_for_value
from ophyd_async.panda import SeqBlock, SeqTable, TimeUnits


@dataclass
class SeqTableInfo:
    sequence_table: SeqTable
    repeats: int
    prescale_as_us: float = 1  # microseconds


[docs] class StaticSeqTableTriggerLogic(TriggerLogic[SeqTableInfo]): def __init__(self, seq: SeqBlock) -> None: self.seq = seq
[docs] async def prepare(self, value: SeqTableInfo): await asyncio.gather( self.seq.prescale_units.set(TimeUnits.us), self.seq.enable.set("ZERO"), ) await asyncio.gather( self.seq.prescale.set(value.prescale_as_us), self.seq.repeats.set(value.repeats), self.seq.table.set(value.sequence_table), )
[docs] async def kickoff(self) -> None: await self.seq.enable.set("ONE") await wait_for_value(self.seq.active, True, timeout=1)
[docs] async def complete(self) -> None: await wait_for_value(self.seq.active, False, timeout=None)
[docs] async def stop(self): await self.seq.enable.set("ZERO") await wait_for_value(self.seq.active, False, timeout=1)