from artiq.experiment import *

class DMAPulses(EnvExperiment):
    def build(self):
        self.setattr_device("core")
        self.setattr_device("core_dma")
        self.setattr_device("led0")

    @kernel
    def record(self):
        with self.core_dma.record("pulse"):
            delay(200*ms)
            # all RTIO operations now go to the "pulse"
            # DMA buffer, instead of being executed immediately.
            self.led0.pulse(500*ms)


    @kernel
    def run(self):
        self.core.reset()
        self.record()
        # prefetch the address of the DMA buffer
        # for faster playback trigger
        pulse_handle = self.core_dma.get_handle("pulse")
        self.core.break_realtime()
        self.core_dma.playback_handle(pulse_handle)