var m877 = { new : func(prop1){ var m = { parents : [m877]}; m.MODE =0; m.flip =0; m.digit_to_set=0; m.digit=[]; m.set_mode=0; m.ctl_timer=0; m.et_start_time=0; m.et_countdown=0; m.et_running=0; m.et_elapsed=0; m.ft_start_time=0; m.ft_running=0; m.modetext =["GMT","LT","FT","ET"]; m.M877 = props.globals.initNode(prop1); m.fmeter_sec=m.M877.initNode("flight-meter-sec",0,"DOUBLE"); m.fmeter=aircraft.timer.new(m.fmeter_sec,1,1); m.tenths=m.M877.initNode("tenths",0,"BOOL"); m.ET_alarm=m.M877.initNode("et-alarm",0,"BOOL"); m.FT_alarm=m.M877.initNode("ft-alert",0,"BOOL"); m.FT_alarm_time=m.M877.initNode("ft-alarm-time",0,"BOOL"); append(m.digit,m.M877.initNode("digit[0]",1,"BOOL")); append(m.digit,m.M877.initNode("digit[1]",1,"BOOL")); append(m.digit,m.M877.initNode("digit[2]",1,"BOOL")); append(m.digit,m.M877.initNode("digit[3]",1,"BOOL")); m.modestring=m.M877.initNode("mode-string",m.modetext[m.MODE],"STRING"); m.power=m.M877.initNode("power",1,"BOOL"); m.HR=m.M877.initNode("indicated-hour",0,"INT"); m.MN=m.M877.initNode("indicated-min",0,"INT"); m.ET_HR=m.M877.initNode("ET-hr",0,"INT"); m.ET_MN=m.M877.initNode("ET-min",0,"INT"); m.FT_HR=m.M877.initNode("FT-hr",0,"INT"); m.FT_MN=m.M877.initNode("FT-min",0,"INT"); return m; }, #### flightmeter #### fmeter_control : func(){ var ias =getprop("velocities/airspeed-kt"); if(ias>30){ if(me.ft_running==0){ me.ft_running=1; me.fmeter.start(); } }elsif(ias<30){ if(me.ft_running==1){ me.ft_running=0; me.fmeter.stop(); } } }, #### displayed mode #### select_display : func(){ if(me.set_mode==0){ me.MODE +=1; if(me.MODE>3)me.MODE -=4; me.modestring.setValue(me.modetext[me.MODE]); }else{ me.digit[me.digit_to_set].setValue(1); me.digit_to_set+=1; if(me.digit_to_set>3){ me.digit_to_set=0; me.set_mode=0; } } }, #### set displayed mode #### set_time : func(){ me.set_mode=1-me.set_mode; }, #### CTL button action #### control_action : func(tmr){ if(me.set_mode==0){ if(me.MODE==2){ me.ctl_timer+=getprop("/sim/time/delta-realtime-sec"); me.ctl_timer *=tmr; if(me.ctl_timer>1.5)me.fmeter.reset(); }elsif(me.MODE==3){ if(me.et_running==0){ me.et_start_time=getprop("/sim/time/elapsed-sec"); me.et_running=1; }else{ me.et_start_time=getprop("/sim/time/elapsed-sec"); me.et_elapsed=0; me.et_running=0; } } }else{ if(me.MODE==0){ me.set_gmt(); }elsif(meMODE==1){ me.set_lt(); }elsif(meMODE==2){ me.set_ft(); }elsif(meMODE==3){ me.set_et(); } } }, #### set GMT #### set_gmt : func(){ }, #### set LT #### set_lt : func(){ }, #### set FT #### set_ft : func(){ }, #### set ET #### set_et : func(){ }, #### elapsed time #### update_ET : func(){ if(me.et_running!=0){ me.et_elapsed=getprop("/sim/time/elapsed-sec") - me.et_start_time; } var ethour = me.et_elapsed/3600; var hr= int(ethour); var etmin=(ethour-hr) * 60; var min = int(etmin); var etsec= (etmin- min) *60; if(ethour <1){ me.ET_HR.setValue(min); me.ET_MN.setValue(etsec); }else{ me.ET_HR.setValue(hr); me.ET_MN.setValue(min); } }, #### flight time #### update_FT : func(){ var fthour = me.fmeter_sec.getValue()/3600; var hr= int(fthour); var ftmin=(fthour-hr) * 60; var min = int(ftmin); var ftsec= (ftmin- min) *60; if(fthour <1){ me.FT_HR.setValue(min); me.FT_MN.setValue(ftsec); }else{ me.FT_HR.setValue(hr); me.FT_MN.setValue(min); } }, #### update clock #### update_clock : func{ var pwr=me.power.getValue(); me.fmeter_control(); if(me.set_mode==0){ pwr=1-pwr; }else{ pwr=1; } me.power.setValue(pwr); if(me.flip==0){ me.update_ET(); }else{ me.update_FT(); } if(me.MODE ==0){ me.HR.setValue(getprop("/instrumentation/clock/indicated-hour")); me.MN.setValue(getprop("/instrumentation/clock/indicated-min")); }elsif(me.MODE == 1) { me.HR.setValue(getprop("/instrumentation/clock/local-hour")); me.MN.setValue(getprop("/instrumentation/clock/indicated-min")); }elsif(me.MODE == 2) { me.HR.setValue(me.FT_HR.getValue()); me.MN.setValue(me.FT_MN.getValue()); }elsif(me.MODE == 3) { me.HR.setValue(me.ET_HR.getValue()); me.MN.setValue(me.ET_MN.getValue()); } if(me.set_mode==1){ var flsh=me.digit[me.digit_to_set].getValue(); flsh=1-flsh; me.digit[me.digit_to_set].setValue(flsh); }else{ me.digit[me.digit_to_set].setValue(1); } me.flip=1-me.flip; }, }; ##################################### var davtron=m877.new("instrumentation/clock/m877"); setlistener("/sim/signals/fdm-initialized", func { settimer(update,2); print("Chronometer ... Check"); }); var update = func{ davtron.update_clock(); settimer(update,0.5); }