###### Primus 1000 system ######## #Primus 1000 class # ie: var primus = P1000.new(prop); var P1000 = { new : func(prop){ m = { parents : [P1000]}; m.FMS_VNAV =["VNV","FMS"]; m.NAV_SRC = ["VOR1","VOR2","ILS1","ILS2","FMS"]; m.NAV_PTR_SRC = [" ","NAV","ADF","FMS"]; m.TIMER_MSG1 = ["GSPD","TTG","ET"]; m.TIMER_MSG2 = ["KTS","MIN"," "]; m.RNG_STEP = [5,10,25,50,100,200,300,600,1200]; m.MFD_MENU1 = [" VNAV VSPEED TERR FMS", " RTN FMS SNGP", " RTN CNCL", "SET RTN TO ST EL VANG VS", " RTN T/O LNDG", "SET RTN V1 VR V2", "SET RTN VREF VAPP"]; m.dh=200; m.primus = props.globals.getNode("instrumentation/"~prop,1); m.PFD = m.primus.getNode("pfd",1); m.PFD_serv = m.PFD.initNode("serviceable",1,"BOOL"); m.PFD_bright = m.PFD.initNode("dimmer",0.8,"DOUBLE"); m.PFD_ptr1_src = m.PFD.initNode("nav1-ptr-source",m.NAV_PTR_SRC[0],"STRING"); m.PFD_ptr2_src = m.PFD.initNode("nav2-ptr-source",m.NAV_PTR_SRC[0],"STRING"); m.PFD_timer_msg1 = m.PFD.initNode("timer-label",m.TIMER_MSG1[0],"STRING"); m.PFD_timer_msg2 = m.PFD.initNode("timer-units",m.TIMER_MSG2[0],"STRING"); m.MFD = m.primus.initNode("mfd",1); m.MFD_serv = m.MFD.initNode("serviceable",1,"BOOL"); m.MFD_bright = m.MFD.initNode("dimmer",0.8,"DOUBLE"); m.MFD_menu_num = m.MFD.initNode("menu-num",0,"INT"); m.MFD_menu_line1 = m.MFD.initNode("menu-text",m.MFD_MENU1[0],"STRING"); m.MFD_menu_col1 = m.MFD.initNode("menu-val[0]"," ","STRING"); m.MFD_menu_col2 = m.MFD.initNode("menu-val[1]"," ","STRING"); m.MFD_menu_col3 = m.MFD.initNode("menu-val[2]"," ","STRING"); m.MFD_menu_col4 = m.MFD.initNode("menu-val[3]"," ","STRING"); m.MFD_settings = m.MFD.initNode("settings",1); m.MFD_to = m.MFD_settings.initNode("to",0.0); m.MFD_st_el = m.MFD_settings.initNode("st-el",0.0); m.MFD_vang = m.MFD_settings.initNode("vang",0.0); m.MFD_vs = m.MFD_settings.initNode("vs",0.0); m.MFD_v1 = m.MFD_settings.initNode("v1",0.0); m.MFD_vr = m.MFD_settings.initNode("vr",0.0); m.MFD_v2 = m.MFD_settings.initNode("v2",0.0); m.MFD_vref = m.MFD_settings.initNode("vref",0.0); m.MFD_vapp = m.MFD_settings.initNode("vapp",0.0); m.EICAS = m.primus.initNode("eicas"); m.EICAS_serv = m.EICAS.initNode("serviceable",1,"BOOL"); m.Control = m.primus.initNode("control"); m.ctl_tcas = m.Control.initNode("tcas",0,"BOOL"); m.ctl_hsi = m.Control.initNode("hsi",0,"BOOL"); m.ctl_cp = m.Control.initNode("cp",0,"BOOL"); m.ctl_hpa = m.Control.initNode("hpa",0,"BOOL"); m.ctl_gspd = m.Control.initNode("timer",0,"INT"); m.ctl_nav = m.Control.initNode("nav",0,"INT"); m.ctl_fms = m.Control.initNode("fms",0,"BOOL"); m.ctl_RA = m.Control.initNode("RA-alert",1,"BOOL"); m.ctl_rng = m.Control.initNode("rng-switch",0.0); m.DH = m.Control.initNode("decision-height",m.dh,"DOUBLE"); setprop("instrumentation/mk-viii/inputs/arinc429/decision-height",m.dh); setprop("autopilot/route-manager/min-lock-altitude-agl-ft",m.dh); m.NavPtr1 =m.Control.initNode("nav1ptr",0.0); m.NavPtr2 =m.Control.initNode("nav2ptr",0.0); m.NavPtr1_offset =m.PFD.initNode("nav1ptr-hdg-offset",0.0); m.NavPtr2_offset =m.PFD.initNode("nav2ptr-hdg-offset",0.0); m.CRStype =m.primus.initNode("course-string","CRS"); m.CRSheading =m.primus.initNode("course-heading",0.0); m.GS_inrange =m.primus.initNode("GS-in-range",0,"BOOL"); m.GS_deflection =m.primus.initNode("GS-deflection",0.0); m.CRSdeflection =m.primus.initNode("course-deflection",0.0); m.NavDist =m.primus.initNode("nav-dist-nm",0.0); m.NavType =m.primus.initNode("nav-type",0,"INT"); m.NavString =m.primus.initNode("nav-string","VOR1"); m.NavTime =m.primus.initNode("nav-time","- - : - -"); m.NavID =m.primus.initNode("nav-id"," "); m.fms_mode=m.primus.initNode("fms-mode",m.FMS_VNAV[0],"STRING"); m.FDmode = m.primus.initNode("fdmode",1,"BOOL"); m.baro_mode=m.primus.initNode("baro-mode",1,"BOOL"); m.baro_kpa = m.primus.initNode("baro-kpa"," "); m.IAS = props.globals.getNode("instrumentation/airspeed-indicator/indicated-speed-kt",1); m.ALT = props.globals.getNode("instrumentation/altimeter/indicated-altitude-ft",1); setprop("/instrumentation/kr-87/inputs/adf-btn",1); return m; }, #### pointer needle update #### get_pointer_offset : func(test,src){ var hdg = getprop("/orientation/heading-magnetic-deg"); if(test==0 or test == nil)return 0.0; if(test == 1){ offset=getprop("/instrumentation/nav["~src~"]/heading-deg") or 0; offset -= hdg; if(offset < -180){offset += 360;} elsif(offset > 180){offset -= 360;} }elsif(test == 2){ offset = getprop("/instrumentation/adf/indicated-bearing-deg"); }elsif(test == 3){ offset = getprop("/autopilot/internal/true-heading-error-deg"); } return offset; }, #### control inputs #### ctl_set : func(dc){ var tmp = 0; if(dc == "tcas"){ tmp = me.ctl_tcas.getBoolValue(); me.ctl_tcas.setBoolValue(1-tmp); } elsif(dc == "ra-up") { me.dh+=5; if(me.dh>1000)me.dh=1000; me.DH.setDoubleValue(me.dh); setprop("instrumentation/mk-viii/inputs/arinc429/decision-height",me.dh); setprop("autopilot/route-manager/min-lock-altitude-agl-ft",me.dh); } elsif(dc == "ra-dn") { me.dh-=5; if(me.dh<0)me.dh=0; me.DH.setDoubleValue(me.dh); setprop("instrumentation/mk-viii/inputs/arinc429/decision-height",me.dh); setprop("autopilot/route-manager/min-lock-altitude-agl-ft",me.dh); } elsif(dc == "hsi") { tmp = me.ctl_hsi.getBoolValue(); me.ctl_hsi.setBoolValue(1-tmp); } elsif(dc=="cp") { tmp = me.ctl_cp.getBoolValue(); me.ctl_cp.setBoolValue(1-tmp); } elsif(dc=="hpa") { tmp = me.ctl_hpa.getBoolValue(); me.ctl_hpa.setBoolValue(1-tmp); } elsif(dc=="ttg") { tmp = me.ctl_gspd.getValue(); if(tmp ==0){ tmp=1; }else{ tmp=0; } me.ctl_gspd.setIntValue(tmp); me.PFD_timer_msg1.setValue(me.TIMER_MSG1[tmp]); me.PFD_timer_msg2.setValue(me.TIMER_MSG2[tmp]); } elsif(dc=="et") { tmp=me.ctl_gspd.getValue(); if(tmp ==2)tmp = 0 else tmp=2; me.ctl_gspd.setIntValue(tmp); me.PFD_timer_msg1.setValue(me.TIMER_MSG1[tmp]); me.PFD_timer_msg2.setValue(me.TIMER_MSG2[tmp]); } elsif(dc=="nav") { var nv = me.ctl_nav.getValue(); nv= 1- nv; me.ctl_nav.setValue(nv); me.ctl_fms.setBoolValue(0); me.fms_mode.setValue(me.FMS_VNAV[0]); if(getprop("instrumentation/nav["~nv~"]/has-gs")){ me.NavType.setValue(2 + nv); }else{ me.NavType.setValue(0 + nv); } } elsif(dc=="fms") { if(getprop("autopilot/route-manager/route/num") > 0){ me.ctl_fms.setBoolValue(1); me.NavType.setValue(4); me.fms_mode.setValue(me.FMS_VNAV[1]); } me.NavString.setValue(me.NAV_SRC[me.NavType.getValue()]); } elsif(dc=="pointer1-inc") { tmp = me.NavPtr1.getValue(); tmp+=1; if(tmp > 3)tmp=3; me.NavPtr1.setValue(tmp); me.PFD_ptr1_src.setValue(me.NAV_PTR_SRC[tmp]); } elsif(dc=="pointer1-dec") { tmp = me.NavPtr1.getValue(); tmp-=1; if(tmp < 0)tmp=0; me.NavPtr1.setValue(tmp); me.PFD_ptr1_src.setValue(me.NAV_PTR_SRC[tmp]); } elsif(dc=="pointer2-inc") { tmp = me.NavPtr2.getValue(); tmp+=1; if(tmp > 3)tmp=3; me.NavPtr2.setValue(tmp); me.PFD_ptr2_src.setValue(me.NAV_PTR_SRC[tmp]); } elsif(dc=="pointer2-dec") { tmp = me.NavPtr2.getValue(); tmp-=1; if(tmp <0)tmp=0; me.NavPtr2.setValue(tmp); me.PFD_ptr2_src.setValue(me.NAV_PTR_SRC[tmp]); } elsif(dc=="radar-up") { tmp=me.ctl_rng.getValue(); tmp +=1; if(tmp > 8)tmp=8; me.ctl_rng.setValue(tmp); setprop("instrumentation/radar/range",me.RNG_STEP[tmp]); } elsif(dc=="radar-dn") { tmp=me.ctl_rng.getValue(); tmp -=1; if(tmp < 0)tmp=0; me.ctl_rng.setValue(tmp); setprop("instrumentation/radar/range",me.RNG_STEP[tmp]); } elsif(dc=="dat") { tmp=getprop("instrumentation/radar/display-controls/data"); tmp=1-tmp; setprop("instrumentation/radar/display-controls/data",tmp); } elsif(dc=="wx") { tmp=getprop("instrumentation/radar/display-controls/WX"); tmp=1-tmp; setprop("instrumentation/radar/display-controls/WX",tmp); } elsif(dc=="map") { tmp=getprop("instrumentation/radar/display-mode"); if(tmp == "plan"){ setprop("instrumentation/radar/display-mode","map"); }else{ setprop("instrumentation/radar/display-mode","plan"); } setprop("instrumentation/radar/display-controls/pos",tmp); setprop("instrumentation/radar/display-controls/symbol",tmp); } }, #### update nav info #### update_nav : func{ me.GS_inrange.setValue(0); me.GS_deflection.setValue(0); var nm_calc = 0; var id =" "; var ttg = "- - : - -"; if(me.ctl_fms.getBoolValue()){ me.CRStype.setValue("DTK"); me.CRSdeflection.setValue(0); var maghdg=getprop("autopilot/settings/true-heading-deg") or 0; maghdg -=getprop("environment/magnetic-variation-deg") or 0; if(maghdg>359)maghdg-=360; if(maghdg<0)maghdg+=360; me.CRSheading.setValue(maghdg); nm_calc = getprop("/autopilot/route-manager/wp/dist"); if(nm_calc == nil)nm_calc = 0.0; id = getprop("autopilot/route-manager/wp/id") or " "; me.NavType.setValue(4); ttg=getprop("autopilot/route-manager/wp/eta") or "- - : - -"; }else{ me.CRStype.setValue("CRS"); nm_calc = 0; var nv = me.ctl_nav.getValue(); me.CRSdeflection.setValue(getprop("/instrumentation/nav["~nv~"]/heading-needle-deflection")); me.CRSheading.setValue(getprop("/instrumentation/nav["~nv~"]/radials/selected-deg")); if(getprop("/instrumentation/nav["~nv~"]/data-is-valid")){ nm_calc = getprop("/instrumentation/nav["~nv~"]/nav-distance") or 0.0; nm_calc = 0.000539 * nm_calc; if(getprop("/instrumentation/nav["~nv~"]/has-gs")){ me.NavType.setValue(2); if(nm_calc<30)me.GS_inrange.setValue(1); var df = getprop("/instrumentation/nav["~nv~"]/gs-needle-deflection-norm"); me.GS_deflection.setValue(df); } id = getprop("instrumentation/nav["~nv~"]/nav-id") or "---"; ttg=getprop("instrumentation/dme/indicated-time-min"); if(ttg==nil or ttg == 0){ ttg="- - : - -"; }else{ var buf = ttg; ttg=sprintf("%2.0s:%0.2s",buf,buf); } } } me.NavDist.setValue(nm_calc); me.NavString.setValue(me.NAV_SRC[me.NavType.getValue()]); me.NavID.setValue(id); me.NavTime.setValue(ttg); var RA =0; tmp =me.DH.getValue(); if(tmp > getprop("position/altitude-agl-ft") and tmp !=0)RA=1; me.ctl_RA.setBoolValue(RA); }, #### update pfd #### update_pfd : func{ me.NavPtr1_offset.setValue(me.get_pointer_offset(me.NavPtr1.getValue(),0)); me.NavPtr2_offset.setValue(me.get_pointer_offset(me.NavPtr2.getValue(),1)); me.update_nav(); }, #### MFD controller #### mfd_menu : func(inp){ var pg =me.MFD_menu_num.getValue(); var altsetting=getprop("autopilot/settings/target-altitude-ft"); var blank=" "; if(inp=="page0"){ pg=0; }elsif(inp=="page1"){ if(pg==1){ pg=2; }elsif(pg==0){ pg=1; } }elsif(inp=="page2"){ if(pg==0){ pg=4; }elsif(pg==1){ pg=3; }elsif(pg==4){ pg=5; } }elsif(inp=="page3"){ if(pg==4)pg=6; }elsif(inp=="page4"){ }elsif(inp=="alt-dec"){ altsetting -=100; if(altsetting < 0)altsetting=0; }elsif(inp=="alt-inc"){ altsetting +=100; if(altsetting > 45000)altsetting=45000; } setprop("autopilot/settings/target-altitude-ft",altsetting); if(pg == 0){ me.MFD_menu_col1.setValue(blank); me.MFD_menu_col2.setValue(blank); me.MFD_menu_col3.setValue(blank); me.MFD_menu_col4.setValue(blank); }elsif(pg==1){ me.MFD_menu_col1.setValue(blank); me.MFD_menu_col2.setValue(blank); me.MFD_menu_col3.setValue(blank); me.MFD_menu_col4.setValue(blank); }elsif(pg==2){ me.MFD_menu_col1.setValue(" VNAV "); me.MFD_menu_col2.setValue(blank); me.MFD_menu_col3.setValue(blank); me.MFD_menu_col4.setValue(blank); }elsif(pg==3){ me.MFD_menu_col1.setValue(" -- . -"); me.MFD_menu_col2.setValue("- - - - - "); me.MFD_menu_col3.setValue(" - . - "); me.MFD_menu_col4.setValue(" - - - "); }elsif(pg==4){ me.MFD_menu_col1.setValue(blank); me.MFD_menu_col2.setValue("SPEEDS"); me.MFD_menu_col3.setValue("SPEEDS"); me.MFD_menu_col4.setValue(blank); }elsif(pg==5){ me.MFD_menu_col1.setValue("- - - "); me.MFD_menu_col2.setValue(" - - - "); me.MFD_menu_col3.setValue(" - - - "); me.MFD_menu_col4.setValue(blank); }elsif(pg==6){ me.MFD_menu_col1.setValue(" - - - "); me.MFD_menu_col2.setValue(" - - - "); me.MFD_menu_col3.setValue(blank); me.MFD_menu_col4.setValue(blank); } me.MFD_menu_num.setValue(pg); me.MFD_menu_line1.setValue(me.MFD_MENU1[pg]); }, }; ####################################### var primus = P1000.new("primus1000"); var APoff=props.globals.getNode("/autopilot/locks/passive-mode",1); var update_p1000 = func { primus.update_pfd(); settimer(update_p1000,0); } setlistener("/sim/signals/fdm-initialized", func { APoff.setBoolValue(1); print("Primus 1000 systems ... check"); settimer(update_p1000,1); }); setlistener("/sim/signals/reinit", func { APoff.setBoolValue(1); });