from artiq.experiment import *

class UrukulCh(HasEnvironment):
    """Urukul single freq class

    Set the frecuencies/amplitudes of each Urukul channel
    """

    def build(self, ch=0, freq=100.0, amp=1.0):
#        super().build()  ch, amp, freq
        self.ch = ch
        self.amp = amp
        self.freq = freq

        # sets core device drivers as attributes
        self.setattr_device("core")


        self.channel = self.get_device(f"urukul0_ch{self.ch}")

        ### This two attributes will be shown in the GUI grouped by channel
        # use/don't use each channel
        self.state = self.get_argument(f"state_ch{self.ch}", BooleanValue(1==0), f"canal_{self.ch}")
        # each channel's frequency
        self.frequency = self.get_argument(f"freq_ch{self.ch}",
                            NumberValue(self.freq*MHz, unit='MHz', scale=MHz, min=1*MHz, max=400*MHz),
                            f"canal_{self.ch}")
        # each channel's amplitude
        self.amplitude = self.get_argument(f"amp_ch{self.ch}",
                            NumberValue(self.amp, min=0., max=1.),
                            f"canal_{self.ch}")
#        if self.ch == 0:
#            self.channel = self.urukul0_ch0
#            self.amplitude = self.amp_ch0
#            self.frequency = self.freq_ch0
#            self.state = self.state_ch0
#        elif self.ch == 1:
#            self.channel = self.urukul0_ch1
#            self.amplitude = self.amp_ch1
#            self.frequency = self.freq_ch1
#            self.state = self.state_ch1
#        elif self.ch == 2:
#            self.channel = self.urukul0_ch2
#            self.amplitude = self.amp_ch2
#            self.frequency = self.freq_ch2
#            self.state = self.state_ch2
#        elif self.ch == 3:
#            self.channel = self.urukul0_ch3
#            self.amplitude = self.amp_ch3
#            self.frequency = self.freq_ch3
#            self.state = self.state_ch3

    @kernel
    def initialize_channel(self):
#        self.core.reset()
        # initialises CPLD the selected channel
        self.channel.cpld.init()
        self.channel.init()

    @kernel
    def set_channel(self):
        self.channel.set_att(0.)
        self.channel.set(self.frequency, amplitude=self.amplitude)

        # turn on every selected channel
        if self.state == True:
            self.channel.sw.on()
        else:
            self.channel.sw.off()

