diff --git a/A320-main.xml b/A320-main.xml index 0283c7f9..b8158454 100644 --- a/A320-main.xml +++ b/A320-main.xml @@ -457,6 +457,16 @@ ]]> + + + + nasal + + + diff --git a/Models/FlightDeck/a320.flightdeck.xml b/Models/FlightDeck/a320.flightdeck.xml index c45e4ec1..c352a650 100644 --- a/Models/FlightDeck/a320.flightdeck.xml +++ b/Models/FlightDeck/a320.flightdeck.xml @@ -1206,7 +1206,7 @@ audio_call_vhf2_led audio_call_vhf3_led audio_mech_sgn - autoland_light_on + ecam_c_b_led ecam_el_dc_led ecam_sts_led @@ -6158,6 +6158,29 @@ + + select + autoland_light_on + + + + controls/switches/annun-test + 1 + + + + instrumentation/pfd/lights/autoland-armed + 1 + + + instrumentation/pfd/lights/autoland-on + 1 + + + + + + select diff --git a/Models/FlightDeck/res/glare_sw.png b/Models/FlightDeck/res/glare_sw.png index 68099b25..f497715c 100644 Binary files a/Models/FlightDeck/res/glare_sw.png and b/Models/FlightDeck/res/glare_sw.png differ diff --git a/Models/Instruments/PFD/PFD.nas b/Models/Instruments/PFD/PFD.nas index 78e62441..d39738ac 100644 --- a/Models/Instruments/PFD/PFD.nas +++ b/Models/Instruments/PFD/PFD.nas @@ -164,6 +164,9 @@ var amberFlash1 = props.globals.initNode("/instrumentation/pfd/flash-indicators/ var amberFlash2 = props.globals.initNode("/instrumentation/pfd/flash-indicators/amber-flash-2", 0, "BOOL"); var dhFlash = props.globals.initNode("/instrumentation/pfd/flash-indicators/dh-flash", 0, "BOOL"); +var light_autoland_armed = props.globals.initNode("/instrumentation/pfd/lights/autoland-armed", 0, "BOOL"); +var light_autoland_on = props.globals.initNode("/instrumentation/pfd/lights/autoland-on", 0, "BOOL"); + var canvas_PFD_base = { init: func(canvas_group, file) { var font_mapper = func(family, weight) { diff --git a/Nasal/FMGC/FMGC.nas b/Nasal/FMGC/FMGC.nas index f1baf7d3..1d32c4c8 100644 --- a/Nasal/FMGC/FMGC.nas +++ b/Nasal/FMGC/FMGC.nas @@ -16,7 +16,7 @@ var dep = ""; var arr = ""; var n1_left = 0; var n1_right = 0; -var modelat = 0; +var modelat = ""; var mode = 0; var gs = 0; var cruiseft = 0; @@ -69,8 +69,8 @@ setprop("position/gear-agl-ft", 0); setprop("/it-autoflight/settings/accel-agl-ft", 1500); #eventually set to 1500 above runway setprop("/it-autoflight/internal/vert-speed-fpm", 0); setprop("/it-autoflight/output/fma-pwr", 0); -setprop("/instrumentation/nav[0]/nav-id", "XXX"); -setprop("/instrumentation/nav[1]/nav-id", "XXX"); +setprop("instrumentation/nav[0]/nav-id", "XXX"); +setprop("instrumentation/nav[1]/nav-id", "XXX"); setprop("/FMGC/internal/ils1-mcdu", "XXX/999.99"); setprop("/FMGC/internal/ils2-mcdu", "XXX/999.99"); setprop("/FMGC/internal/vor1-mcdu", "XXX/999.99"); @@ -89,6 +89,7 @@ var FMGCinit = func { FMGCInternal.minspeed = 0; FMGCInternal.maxspeed = 338; FMGCInternal.phase = 0; # 0 is Preflight 1 is Takeoff 2 is Climb 3 is Cruise 4 is Descent 5 is Decel/Approach 6 is Go Around 7 is Done + FMGCNodes.phase.setValue(0); FMGCInternal.mngSpd = 157; FMGCInternal.mngSpdCmd = 157; FMGCInternal.mngKtsMach = 0; @@ -96,9 +97,9 @@ var FMGCinit = func { setprop("/FMGC/internal/loc-source", "NAV0"); setprop("/FMGC/internal/optalt", 0); setprop("/FMGC/internal/landing-time", -99); - FMGCAlignTime[0].setValue(-99); - FMGCAlignTime[1].setValue(-99); - FMGCAlignTime[2].setValue(-99); + setprop("/FMGC/internal/align1-time", -99); + setprop("/FMGC/internal/align2-time", -99); + setprop("/FMGC/internal/align3-time", -99); setprop("/FMGC/internal/block-fuel-time", -99); setprop("/FMGC/internal/fuel-pred-time", -99); masterFMGC.start(); @@ -262,6 +263,7 @@ var FMGCNodes = { toState: props.globals.initNode("/FMGC/internal/to-state", 0, "BOOL"), v1: props.globals.initNode("/FMGC/internal/v1", 0, "DOUBLE"), v1set: props.globals.initNode("/FMGC/internal/v1-set", 0, "BOOL"), + phase: props.globals.initNode("/FMGC/internal/phase", 0, "INT"), }; ############ @@ -606,78 +608,128 @@ var radios = maketimer(1, func() { adf1(); }); + + +var prop_n1_left = pts.Engines.Engine.n1Actual[0]; +var prop_n1_right = pts.Engines.Engine.n1Actual[1]; +#var prop_nmodelat = Modes.PFD.FMA.rollMode; +#var prop_mode = Modes.PFD.FMA.pitchMode; +var prop_gs = pts.Velocities.groundspeed; +var prop_alt = pts.Instrumentation.Altimeter.indicatedFt; +var prop_state1 = pts.Systems.Thrust.state[0]; +var prop_state2 = pts.Systems.Thrust.state[1]; +#var prop_accel_agl_ft = Setting.reducAglFt; +var prop_gear0 = pts.Gear.wow[0]; +#var prop_altSel = Input.alt; + var masterFMGC = maketimer(0.2, func { - n1_left = pts.Engines.Engine.n1Actual[0].getValue(); - n1_right = pts.Engines.Engine.n1Actual[1].getValue(); + + n1_left = prop_n1_left.getValue(); + n1_right = prop_n1_right.getValue(); modelat = Modes.PFD.FMA.rollMode.getValue(); mode = Modes.PFD.FMA.pitchMode.getValue(); - gs = pts.Velocities.groundspeed.getValue(); - alt = pts.Instrumentation.Altimeter.indicatedFt.getValue(); + gs = prop_gs.getValue(); + alt = prop_alt.getValue(); # cruiseft = FMGCInternal.crzFt; # cruiseft_b = FMGCInternal.crzFt - 200; - state1 = pts.Systems.Thrust.state[0].getValue(); - state2 = pts.Systems.Thrust.state[1].getValue(); + state1 = prop_state1.getValue(); + state2 = prop_state2.getValue(); accel_agl_ft = Setting.reducAglFt.getValue(); - gear0 = pts.Gear.wow[0].getBoolValue(); + gear0 = prop_gear0.getBoolValue(); altSel = Input.alt.getValue(); - if ((n1_left < 85 or n1_right < 85) and gs < 90 and mode == " " and gear0 and FMGCInternal.phase == 1) { # rejected takeoff - FMGCInternal.phase = 0; - systems.PNEU.pressMode.setValue("GN"); - } - - if (gear0 and FMGCInternal.phase == 0 and ((n1_left >= 85 and n1_right >= 85 and mode == "SRS") or gs >= 90)) { - FMGCInternal.phase = 1; - systems.PNEU.pressMode.setValue("TO"); - } - - if (FMGCInternal.phase == 1 and ((mode != "SRS" and mode != " ") or alt >= accel_agl_ft)) { - FMGCInternal.phase = 2; - systems.PNEU.pressMode.setValue("TO"); - } - - if (FMGCInternal.phase == 2 and (mode == "ALT CRZ" or mode == "ALT CRZ*")) { - FMGCInternal.phase = 3; - systems.PNEU.pressMode.setValue("CR"); - } - - if (FMGCInternal.crzFl >= 200) { - if (FMGCInternal.phase == 3 and (flightPlanController.arrivalDist <= 200 or altSel < 20000)) { - FMGCInternal.phase = 4; - systems.PNEU.pressMode.setValue("DE"); + var phase = FMGCInternal.phase; + var newphase = phase; + + if (phase == 0) { + + if (gear0 and ((n1_left >= 85 and n1_right >= 85 and mode == "SRS") or gs >= 90)) { + newphase = 1; + systems.PNEU.pressMode.setValue("TO"); } - } else { - if (FMGCInternal.phase == 3 and (flightPlanController.arrivalDist <= 200 or altSel < (FMGCInternal.crzFl * 100))) { # todo - not sure about crzFl condition, investigate what happens! - FMGCInternal.phase = 4; - systems.PNEU.pressMode.setValue("DE"); + + } + + else if (phase == 1) { + + if (gear0) { + + if ((n1_left < 85 or n1_right < 85) and gs < 90 and mode == " ") { # rejected takeoff + newphase = 0; + systems.PNEU.pressMode.setValue("GN"); + } + + } + else if (((mode != "SRS" and mode != " ") or alt >= accel_agl_ft)) { + newphase = 2; + systems.PNEU.pressMode.setValue("TO"); } + } - if (FMGCInternal.phase == 4) { - if (getprop("/FMGC/internal/decel")) { - FMGCInternal.phase = 5; - } - else if (altSel == (FMGCInternal.crzFl * 100)) { # back to CRZ state - FMGCInternal.phase = 3; + else if (phase == 2) { + + if ((mode == "ALT CRZ" or mode == "ALT CRZ*")) { + newphase = 3; systems.PNEU.pressMode.setValue("CR"); } + + } + + else if (phase == 3) { + + if (FMGCInternal.crzFl >= 200) { + if ((flightPlanController.arrivalDist <= 200 or altSel < 20000)) { + newphase = 4; + systems.PNEU.pressMode.setValue("DE"); + } + } else { + if ((flightPlanController.arrivalDist <= 200 and altSel < (FMGCInternal.crzFl * 100))) { # todo - not sure about crzFl condition, investigate what happens! + newphase = 4; + systems.PNEU.pressMode.setValue("DE"); + } + } + + } + + else if (phase == 4) { + + if (getprop("/FMGC/internal/decel")) { + newphase = 5; + } + else if (altSel == (FMGCInternal.crzFl * 100)) { # back to CRZ state + newphase = 3; + systems.PNEU.pressMode.setValue("CR"); + } + } - if (flightPlanController.num[2].getValue() > 0 and getprop("/FMGC/flightplan[2]/active") == 1 and flightPlanController.arrivalDist <= 15 and (modelat == "NAV" or modelat == "LOC" or modelat == "LOC*") and pts.Position.gearAglFt.getValue() < 9500) { #todo decel pseudo waypoint + else if (phase == 5) { + + if (state1 == "TOGA" and state2 == "TOGA") { + newphase = 6; + systems.PNEU.pressMode.setValue("TO"); + Input.toga.setValue(1); + } + + } + + else if (phase == 6) { + + if (alt >= accel_agl_ft) { # todo when insert altn or new dest + newphase = 2; + } + + } + + + if (flightPlanController.num[2].getValue() > 0 and getprop("/FMGC/flightplan[2]/active") == 1 and + flightPlanController.arrivalDist <= 15 and (modelat == "NAV" or modelat == "LOC" or modelat == "LOC*") and pts.Position.gearAglFt.getValue() < 9500) { #todo decel pseudo waypoint setprop("/FMGC/internal/decel", 1); - } else if (getprop("/FMGC/internal/decel") == 1 and (FMGCInternal.phase == 0 or FMGCInternal.phase == 6)) { + } else if (getprop("/FMGC/internal/decel") == 1 and (phase == 0 or phase == 6)) { setprop("/FMGC/internal/decel", 0); } - if ((FMGCInternal.phase == 5) and state1 == "TOGA" and state2 == "TOGA") { - FMGCInternal.phase = 6; - systems.PNEU.pressMode.setValue("TO"); - Input.toga.setValue(1); - } - - if (FMGCInternal.phase == 6 and alt >= accel_agl_ft) { # todo when insert altn or new dest - FMGCInternal.phase = 2; - } tempOverspeed = systems.ADIRS.overspeedVFE.getValue(); if (tempOverspeed != 1024) { @@ -688,6 +740,13 @@ var masterFMGC = maketimer(0.2, func { FMGCInternal.maxspeed = fmgc.FMGCInternal.vmo_mmo; } + if (newphase != phase) { # phase changed + FMGCInternal.phase = newphase; + FMGCNodes.phase.setValue(newphase); + } + + + ############################ # fuel ############################ @@ -777,7 +836,7 @@ var masterFMGC = maketimer(0.2, func { } # predicted takeoff speeds - if (FMGCInternal.phase == 1) { + if (phase == 1) { FMGCInternal.clean_to = FMGCInternal.clean; FMGCInternal.vs1g_clean_to = FMGCInternal.vs1g_clean; FMGCInternal.vs1g_conf_2_to = FMGCInternal.vs1g_conf_2; @@ -799,7 +858,7 @@ var masterFMGC = maketimer(0.2, func { } # predicted approach (temp go-around) speeds - if (FMGCInternal.phase == 5 or FMGCInternal.phase == 6) { + if (phase == 5 or phase == 6) { FMGCInternal.clean_appr = FMGCInternal.clean; FMGCInternal.vs1g_clean_appr = FMGCInternal.vs1g_clean; FMGCInternal.vs1g_conf_2_appr = FMGCInternal.vs1g_conf_2; @@ -920,7 +979,8 @@ var masterFMGC = maketimer(0.2, func { } } - if (gear0 and pts.Controls.Flight.flapsPos.getValue() < 5 and (state1 == "MCT" or state1 == "MAN THR" or state1 == "TOGA") and (state2 == "MCT" or state2 == "MAN THR" or state2 == "TOGA")) { + #if (gear0 and pts.Controls.Flight.flapsPos.getValue() < 5 and (state1 == "MCT" or state1 == "MAN THR" or state1 == "TOGA") and (state2 == "MCT" or state2 == "MAN THR" or state2 == "TOGA")) { + if (gear0 and flap < 5 and (state1 == "MCT" or state1 == "MAN THR" or state1 == "TOGA") and (state2 == "MCT" or state2 == "MAN THR" or state2 == "TOGA")) { if (!FMGCInternal.takeoffState) { fmgc.FMGCNodes.toState.setValue(1); } @@ -932,45 +992,58 @@ var masterFMGC = maketimer(0.2, func { FMGCInternal.takeoffState = 0; } - ############################ - #handle radios, runways, v1/vr/v2 - ############################ +}); + +############################ +#handle radios, runways, v1/vr/v2 +############################ + +var updateAirportRadios = func { + + var phase = FMGCInternal.phase; + print("# Update airport radios"); + departure_rwy = fmgc.flightPlanController.flightplans[2].departure_runway; destination_rwy = fmgc.flightPlanController.flightplans[2].destination_runway; - if (destination_rwy != nil and FMGCInternal.phase >= 2) { + if (phase >= 2 and destination_rwy != nil) { var airport = airportinfo(FMGCInternal.arrApt); setprop("/FMGC/internal/ldg-elev", airport.elevation * M2FT); # eventually should be runway elevation magnetic_hdg = geo.normdeg(destination_rwy.heading - getprop("/environment/magnetic-variation-deg")); runway_ils = destination_rwy.ils_frequency_mhz; if (runway_ils != nil and !getprop("/FMGC/internal/ils1freq-set") and !getprop("/FMGC/internal/ils1crs-set")) { setprop("/FMGC/internal/ils1freq-calculated", runway_ils); - setprop("/instrumentation/nav[0]/frequencies/selected-mhz", runway_ils); - setprop("/instrumentation/nav[0]/radials/selected-deg", magnetic_hdg); + setprop("instrumentation/nav[0]/frequencies/selected-mhz", runway_ils); + setprop("instrumentation/nav[0]/radials/selected-deg", magnetic_hdg); } else if (runway_ils != nil and !getprop("/FMGC/internal/ils1freq-set")) { setprop("/FMGC/internal/ils1freq-calculated", runway_ils); - setprop("/instrumentation/nav[0]/frequencies/selected-mhz", runway_ils); + setprop("instrumentation/nav[0]/frequencies/selected-mhz", runway_ils); } else if (!getprop("/FMGC/internal/ils1crs-set")) { - setprop("/instrumentation/nav[0]/radials/selected-deg", magnetic_hdg); + setprop("instrumentation/nav[0]/radials/selected-deg", magnetic_hdg); } - } else if (departure_rwy != nil and FMGCInternal.phase <= 1) { + } else if (phase <= 1 and departure_rwy != nil) { magnetic_hdg = geo.normdeg(departure_rwy.heading - getprop("/environment/magnetic-variation-deg")); runway_ils = departure_rwy.ils_frequency_mhz; if (runway_ils != nil and !getprop("/FMGC/internal/ils1freq-set") and !getprop("/FMGC/internal/ils1crs-set")) { setprop("/FMGC/internal/ils1freq-calculated", runway_ils); - setprop("/instrumentation/nav[0]/frequencies/selected-mhz", runway_ils); - setprop("/instrumentation/nav[0]/radials/selected-deg", magnetic_hdg); + setprop("instrumentation/nav[0]/frequencies/selected-mhz", runway_ils); + setprop("instrumentation/nav[0]/radials/selected-deg", magnetic_hdg); } else if (runway_ils != nil and !getprop("/FMGC/internal/ils1freq-set")) { setprop("/FMGC/internal/ils1freq-calculated", runway_ils); - setprop("/instrumentation/nav[0]/frequencies/selected-mhz", runway_ils); + setprop("instrumentation/nav[0]/frequencies/selected-mhz", runway_ils); } else if (!getprop("/FMGC/internal/ils1crs-set")) { - setprop("/instrumentation/nav[0]/radials/selected-deg", magnetic_hdg); + setprop("instrumentation/nav[0]/radials/selected-deg", magnetic_hdg); } } -}); + +}; + +setlistener(FMGCNodes.phase, updateAirportRadios,0,0); +setlistener(flightPlanController.changed, updateAirportRadios); var reset_FMGC = func { FMGCInternal.phase = 0; + FMGCNodes.phase.setValue(0); fd1 = Input.fd1.getValue(); fd2 = Input.fd2.getValue(); spd = Input.kts.getValue(); @@ -1162,9 +1235,9 @@ setlistener("/systems/navigation/adr/operating-1", func() { timer48gpsAlign1.stop(); } - if (FMGCAlignTime[0].getValue() == -99) { + if (getprop("/FMGC/internal/align1-time") == -99) { timer48gpsAlign1.start(); - FMGCAlignTime[0].setValue(pts.Sim.Time.elapsedSec.getValue()); + setprop("/FMGC/internal/align1-time", pts.Sim.Time.elapsedSec.getValue()); } }, 0, 0); @@ -1174,9 +1247,9 @@ setlistener("/systems/navigation/adr/operating-2", func() { timer48gpsAlign2.stop(); } - if (FMGCAlignTime[1].getValue() == -99) { + if (getprop("/FMGC/internal/align2-time") == -99) { timer48gpsAlign2.start(); - FMGCAlignTime[1].setValue(pts.Sim.Time.elapsedSec.getValue()); + setprop("/FMGC/internal/align2-time", pts.Sim.Time.elapsedSec.getValue()); } }, 0, 0); @@ -1186,9 +1259,9 @@ setlistener("/systems/navigation/adr/operating-3", func() { timer48gpsAlign3.stop(); } - if (FMGCAlignTime[2].getValue() == -99) { + if (getprop("/FMGC/internal/align3-time") == -99) { timer48gpsAlign3.start(); - FMGCAlignTime[2].setValue(pts.Sim.Time.elapsedSec.getValue()); + setprop("/FMGC/internal/align3-time", pts.Sim.Time.elapsedSec.getValue()); } }, 0, 0); @@ -1235,25 +1308,25 @@ var timer30secLanding = maketimer(1, func() { }); var timer48gpsAlign1 = maketimer(1, func() { - if (pts.Sim.Time.elapsedSec.getValue() > (FMGCAlignTime[0].getValue() + 48) or adirsSkip.getValue()) { - FMGCAlignDone[0].setValue(1); - FMGCAlignTime[0].setValue(-99); + if (pts.Sim.Time.elapsedSec.getValue() > getprop("/FMGC/internal/align1-time") + 48 or getprop("/systems/acconfig/options/adirs-skip")) { + setprop("/FMGC/internal/align1-done", 1); + setprop("/FMGC/internal/align1-time", -99); timer48gpsAlign1.stop(); } }); var timer48gpsAlign2 = maketimer(1, func() { - if (pts.Sim.Time.elapsedSec.getValue() > (FMGCAlignTime[1].getValue() + 48) or adirsSkip.getValue()) { - FMGCAlignDone[1].setValue(1); - FMGCAlignTime[1].setValue(-99); + if (pts.Sim.Time.elapsedSec.getValue() > getprop("/FMGC/internal/align2-time") + 48 or getprop("/systems/acconfig/options/adirs-skip")) { + setprop("/FMGC/internal/align2-done", 1); + setprop("/FMGC/internal/align2-time", -99); timer48gpsAlign2.stop(); } }); var timer48gpsAlign3 = maketimer(1, func() { - if (pts.Sim.Time.elapsedSec.getValue() > (FMGCAlignTime[2].getValue() + 48) or adirsSkip.getValue()) { - FMGCAlignDone[2].setValue(1); - FMGCAlignTime[2].setValue(-99); + if (pts.Sim.Time.elapsedSec.getValue() > getprop("/FMGC/internal/align3-time") + 48 or getprop("/systems/acconfig/options/adirs-skip")) { + setprop("/FMGC/internal/align3-done", 1); + setprop("/FMGC/internal/align3-time", -99); timer48gpsAlign3.stop(); } }); diff --git a/Nasal/FMGC/flightplan.nas b/Nasal/FMGC/flightplan.nas index cb71f578..b072de4e 100644 --- a/Nasal/FMGC/flightplan.nas +++ b/Nasal/FMGC/flightplan.nas @@ -32,6 +32,8 @@ var flightPlanController = { # These flags are only for the main flgiht-plan active: props.globals.initNode("/FMGC/flightplan[2]/active", 0, "BOOL"), + + changed: props.globals.initNode("/FMGC/flightplan[2]/changed", 0, "BOOL"), currentToWpt: nil, # container for the current TO waypoint ghost currentToWptIndex: props.globals.initNode("/FMGC/flightplan[2]/current-wp", 0, "INT"), @@ -765,6 +767,9 @@ var flightPlanController = { fmgc.FMGCInternal.fuelCalculating = 1; fmgc.fuelCalculating.setValue(1); } + + if (n == 2) flightPlanController.changed.setBoolValue(1); + canvas_nd.A3XXRouteDriver.triggerSignal("fp-added"); }, diff --git a/Nasal/Libraries/libraries.nas b/Nasal/Libraries/libraries.nas index 5d0f72ee..6c4636e0 100644 --- a/Nasal/Libraries/libraries.nas +++ b/Nasal/Libraries/libraries.nas @@ -253,8 +253,8 @@ setlistener("/instrumentation/mk-viii/inputs/discretes/ta-tcf-inhibit", func{ # Replay var replayState = props.globals.getNode("/sim/replay/replay-state"); -setlistener("/sim/replay/replay-state", func() { - if (replayState.getBoolValue()) { +setlistener(replayState, func(v) { + if (v.getBoolValue()) { } else { acconfig.colddark(); gui.popupTip("Replay Ended: Setting Cold and Dark state..."); diff --git a/README.md b/README.md index 10c51281..05487ecf 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,8 @@ It is highly reccomended to purchase a NAVIGRAPH subscription and download their To install navdata, create a folder FMSDATA, and add it to your additional scenery folders, at the top of the list. Inside that folder, place all the XXXX.procedures.xml files, in the format FMSDATA/X/X/X/XXXX.procedures.xml. For instance, FMSDATA/Airports/E/G/K/EGKK.procedures.xml. ## Remote MCDU -If you want to run the MCDU on a phone or tablet for better realism and easier input, put mcdu.html into the FGDATA/Phi folder, run FlightGear with enabled HTTP server (i.e. command line --httpd=) and open http://:/mcdu.html in the browser on your phone or tablet. +If you want to run the MCDU on a your smarthphone or tablet for better realism and easier input, run FlightGear with enabled HTTP server (i.e. command line --httpd=) then go to main menu -> Instruments -> Remote MCDU. +You can generate a QR-code to lauch directly on your smartphone/tablet, first insert your local ip. Your device must run on the same local network of your computer. ## Installation If you have issues installing, please check INSTALL.MD! diff --git a/Systems/a320-adr.xml b/Systems/a320-adr.xml index 2a125dcf..b1ef10f0 100644 --- a/Systems/a320-adr.xml +++ b/Systems/a320-adr.xml @@ -922,6 +922,17 @@ 5000 + + + + + + /instrumentation/radar-altimeter[0]/radar-altitude-ft-corrected + /instrumentation/radar-altimeter[1]/radar-altitude-ft-corrected + + + + diff --git a/Systems/a320-fwc.xml b/Systems/a320-fwc.xml index 1c08f6c3..de676136 100644 --- a/Systems/a320-fwc.xml +++ b/Systems/a320-fwc.xml @@ -2211,7 +2211,7 @@ /ECAM/warnings/logic/stall/phase-flipflop eq 1 - + @@ -2300,7 +2300,41 @@ /ECAM/warnings/logic/stall/stall-warn-inhibit eq 0 - + + + + + + + /modes/pfd/ILS1 eq 1 + /instrumentation/radar-altimeter[0]/radar-altitude-ft-corrected le 200 + + + /modes/pfd/ILS2 eq 1 + /instrumentation/radar-altimeter[1]/radar-altitude-ft-corrected le 200 + + + + + + + + + /instrumentation/pfd/lights/autoland-armed eq 1 + + + /it-autoflight/output/ap1 eq 0 + /it-autoflight/output/ap2 eq 0 + + /instrumentation/radar-altimeter-difference-ft gt 15 + + + + + diff --git a/mcdu.html b/WebPanel/mcdu.html similarity index 71% rename from mcdu.html rename to WebPanel/mcdu.html index ec2904ad..d28da2fb 100644 --- a/mcdu.html +++ b/WebPanel/mcdu.html @@ -1,12 +1,17 @@ - + - MCDU + A320 MCDU + + + + - + - @@ -245,7 +282,7 @@ - +


Z / SPOVFY
OVFY
CLR
@@ -283,11 +320,11 @@ . 0 + style="font-size: 3vw; width: 33.333333333333333333333333333333333333333333333333333333333333333333333%; /* :) */" class="disabled"> +/- - + \ No newline at end of file diff --git a/gui/dialogs/mcduweb.xml b/gui/dialogs/mcduweb.xml new file mode 100644 index 00000000..0ce36846 --- /dev/null +++ b/gui/dialogs/mcduweb.xml @@ -0,0 +1,171 @@ + + + + + + + + + mcdu-web + vbox + 480 + + + + props.globals.initNode("/sim/http/mcduweb/local-ip", "", "STRING"); + + + + + hbox + + left + + + + + + + + + + vbox + + + left + + + + /sim/http/running + 0 + + + + + left + + + + /sim/http/running + 0 + + + + + + + + vbox + + + center + + + + + + + + vbox + + center + + + + center + + + + + + + hbox + + 220 + 25 + 5 + + /sim/http/mcduweb/local-ip + + dialog-apply + + true + + + + + + mcduwebqr + center + center + false + 320 + 320 + + + + + + + + + + + + vbox + + center + + + + + +