from guardian import GuardState
#######################
request = 'FINISHED'
nominal = request 

###############################################
# reference values
###############################################
LINE_AMPLITUDE = 30000
INITIAL_FREQ = 2001.3
DICT_TIME = {'last_timestamp' : 0}
###############################################

class INIT(GuardState):
    index = 0
    def main(self):
        ezca['CAL-PCALX_PCALOSC1_OSC_FREQ'] = INITIAL_FREQ
        ezca['CAL-PCALX_PCALOSC1_OSC_SINGAIN'] = LINE_AMPLITUDE
        ezca['CAL-PCALX_PCALOSC1_OSC_COSGAIN'] = LINE_AMPLITUDE
        ezca['CAL-PCALX_PCALOSC1_OSC_TRAMP'] = 3.0
        DICT_TIME['last_timestamp']  =  ezca['FEC-124_TIME_DIAG']
        return 

        
class GETTING_READY(GuardState):
    index = 5
    request = False
    def main(self):
        return
    def run(self):
        if  ezca['FEC-124_TIME_DIAG'] - DICT_TIME['last_timestamp'] > 24*3600:
            return True
        else:
            return False

        
class CHECK_IFO_STATUS(GuardState):
    index = 15
    request = False
    def main(self):
        return
    def run(self):
        if ezca['GRD-ISC_LOCK_STATE_N'] <= 11:
            return True
        else:
            return False

        
class CHANGE_FREQ(GuardState):
    index = 20
    request = False
    def main(self):
        NEW_FREQ = ezca['CAL-PCALX_PCALOSC1_OSC_FREQ']+500
        if  NEW_FREQ < 5100:
            ezca['CAL-PCALX_PCALOSC1_OSC_FREQ'] = NEW_FREQ
            DICT_TIME['last_timestamp'] =  ezca['FEC-124_TIME_DIAG']
            return 'GETTING_READY'
        else:
            return False

        
class FINISHED(GuardState):
    index = 25
    def main(self):
        return
    
    

######################
edges = [
    ('INIT', 'GETTING_READY'),
    ('GETTING_READY','CHECK_IFO_STATUS'),
    ('CHECK_IFO_STATUS','CHANGE_FREQ'),
    ('CHANGE_FREQ','FINISHED'),
    ]
