diff --git a/A320-main.xml b/A320-main.xml index b02f0d69..a1ec310d 100644 --- a/A320-main.xml +++ b/A320-main.xml @@ -4773,6 +4773,20 @@ Aircraft/A320-family/Nasal/emesary/exec.nas Aircraft/A320-family/Models/Instruments/Upper-ECAM/Upper-ECAM.nas + Aircraft/A320-family/Models/Instruments/Lower-ECAM/Lower-ECAM-base.nas + Aircraft/A320-family/Models/Instruments/Lower-ECAM/Lower-ECAM-APU.nas + Aircraft/A320-family/Models/Instruments/Lower-ECAM/Lower-ECAM-bleed.nas + Aircraft/A320-family/Models/Instruments/Lower-ECAM/Lower-ECAM-cond.nas + Aircraft/A320-family/Models/Instruments/Lower-ECAM/Lower-ECAM-cruise.nas + Aircraft/A320-family/Models/Instruments/Lower-ECAM/Lower-ECAM-door.nas + Aircraft/A320-family/Models/Instruments/Lower-ECAM/Lower-ECAM-elec.nas + Aircraft/A320-family/Models/Instruments/Lower-ECAM/Lower-ECAM-eng.nas + Aircraft/A320-family/Models/Instruments/Lower-ECAM/Lower-ECAM-fctl.nas + Aircraft/A320-family/Models/Instruments/Lower-ECAM/Lower-ECAM-fuel.nas + Aircraft/A320-family/Models/Instruments/Lower-ECAM/Lower-ECAM-hyd.nas + Aircraft/A320-family/Models/Instruments/Lower-ECAM/Lower-ECAM-press.nas + Aircraft/A320-family/Models/Instruments/Lower-ECAM/Lower-ECAM-sts.nas + Aircraft/A320-family/Models/Instruments/Lower-ECAM/Lower-ECAM-wheel.nas Aircraft/A320-family/Models/Instruments/Lower-ECAM/Lower-ECAM.nas diff --git a/Models/Instruments/Lower-ECAM/Lower-ECAM-APU.nas b/Models/Instruments/Lower-ECAM/Lower-ECAM-APU.nas new file mode 100644 index 00000000..83d47a84 --- /dev/null +++ b/Models/Instruments/Lower-ECAM/Lower-ECAM-APU.nas @@ -0,0 +1,320 @@ +# A3XX Lower ECAM Canvas +# Copyright (c) 2021 Josh Davidson (Octal450) and Jonathan Redpath + +var apu_load = props.globals.initNode("/systems/electrical/extra/apu-load", 0, "DOUBLE"); +var gen1_load = props.globals.initNode("/systems/electrical/extra/gen1-load", 0, "DOUBLE"); +var gen2_load = props.globals.initNode("/systems/electrical/extra/gen2-load", 0, "DOUBLE"); + +var canvas_lowerECAMPageApu = +{ + new: func(svg,name) { + var obj = {parents: [canvas_lowerECAMPageApu,canvas_lowerECAM_base] }; + obj.group = obj.canvas.createGroup(); + obj.name = name; + + canvas.parsesvg(obj.group, svg, {"font-mapper": obj.font_mapper} ); + + foreach(var key; obj.getKeys()) { + obj[key] = obj.group.getElementById(key); + }; + + foreach(var key; obj.getKeysBottom()) { + obj[key] = obj.group.getElementById(key); + }; + + obj.units = acconfig_weight_kgs.getValue(); + + # init + obj["APUGenOff"].hide(); + + obj.update_items = [ + props.UpdateManager.FromHashValue("apuFlap",1, func(val) { + if (val) { + obj["APUFlapOpen"].show(); + } else { + obj["APUFlapOpen"].hide(); + } + }), + props.UpdateManager.FromHashValue("apuNeedleRot",0.1, func(val) { + obj["APUN-needle"].setRotation((val + 90) * D2R); + }), + props.UpdateManager.FromHashValue("apuEgtRot",0.1, func(val) { + obj["APUEGT-needle"].setRotation((val + 90) * D2R); + }), + props.UpdateManager.FromHashValue("apuAvailable", nil, func(val) { + if (val) { + obj["APUAvail"].show(); + } else { + obj["APUAvail"].hide(); + } + }), + props.UpdateManager.FromHashList(["apuRpm","apuEgt","apuMaster","apuGenPB"], nil, func(val) { + if (val.apuRpm > 0.001) { + obj["APUN"].setColor(0.0509,0.7529,0.2941); + obj["APUN"].setText(sprintf("%s", math.round(val.apuRpm))); + obj["APUN-needle"].show(); + obj["APUEGT"].setColor(0.0509,0.7529,0.2941); + obj["APUEGT"].setText(sprintf("%s", math.round(val.apuEgt, 5))); + obj["APUEGT-needle"].show(); + } else { + obj["APUN"].setColor(0.7333,0.3803,0); + obj["APUN"].setText(sprintf("%s", "XX")); + obj["APUN-needle"].hide(); + obj["APUEGT"].setColor(0.7333,0.3803,0); + obj["APUEGT"].setText(sprintf("%s", "XX")); + obj["APUEGT-needle"].hide(); + } + + if (val.apuMaster or val.apuRpm >= 94.9) { + obj["APUGenbox"].show(); + if (val.apuGenPB) { + obj["APUGenOff"].hide(); + obj["APUGentext"].setColor(0.8078,0.8039,0.8078); + obj["APUGenHz"].show(); + obj["APUGenVolt"].show(); + obj["APUGenLoad"].show(); + obj["text3724"].show(); + obj["text3728"].show(); + obj["text3732"].show(); + } else { + obj["APUGenOff"].show(); + obj["APUGentext"].setColor(0.7333,0.3803,0); + obj["APUGenHz"].hide(); + obj["APUGenVolt"].hide(); + obj["APUGenLoad"].hide(); + obj["text3724"].hide(); + obj["text3728"].hide(); + obj["text3732"].hide(); + } + } else { + obj["APUGentext"].setColor(0.8078,0.8039,0.8078); + obj["APUGenbox"].hide(); + obj["APUGenHz"].hide(); + obj["APUGenVolt"].hide(); + obj["APUGenLoad"].hide(); + obj["text3724"].hide(); + obj["text3728"].hide(); + obj["text3732"].hide(); + } + }), + props.UpdateManager.FromHashList(["apuFuelPumpsOff","apuFuelPump"], nil, func(val) { + if (val.apuFuelPumpsOff and !val.apuFuelPump) { + obj["APUfuelLO"].show(); + } else { + obj["APUfuelLO"].hide(); + } + }), + props.UpdateManager.FromHashList(["apuRpm","apuOilLevel","gear0Wow"], nil, func(val) { + if (val.apuRpm >= 94.9 and val.gear0Wow and val.apuOilLevel < 3.69) { + obj["APU-low-oil"].show(); + } else { + obj["APU-low-oil"].hide(); + } + }), + props.UpdateManager.FromHashList(["apuAdr","apuPsi","apuRpm"], nil, func(val) { + if (val.apuAdr and val.apuRpm > 0.001) { + obj["APUBleedPSI"].setColor(0.0509,0.7529,0.2941); + obj["APUBleedPSI"].setText(sprintf("%s", math.round(val.apuPsi))); + } else { + obj["APUBleedPSI"].setColor(0.7333,0.3803,0); + obj["APUBleedPSI"].setText(sprintf("%s", "XX")); + } + }), + props.UpdateManager.FromHashValue("apuLoad", 0.1, func(val) { + obj["APUGenLoad"].setText(sprintf("%s", math.round(val))); + + if (val <= 100) { + obj["APUGenHz"].setColor(0.0509,0.7529,0.2941); + } else { + obj["APUGenHz"].setColor(0.7333,0.3803,0); + } + }), + props.UpdateManager.FromHashValue("apuHertz", 1, func(val) { + if (val == 0) { + obj["APUGenHz"].setText(sprintf("XX")); + } else { + obj["APUGenHz"].setText(sprintf("%s", math.round(val))); + } + + if (val >= 390 and val <= 410) { + obj["APUGenHz"].setColor(0.0509,0.7529,0.2941); + } else { + obj["APUGenHz"].setColor(0.7333,0.3803,0); + } + }), + props.UpdateManager.FromHashValue("apuVolt", 0.1, func(val) { + obj["APUGenVolt"].setText(sprintf("%s", math.round(val))); + + if (val >= 110 and val <= 120) { + obj["APUGenVolt"].setColor(0.0509,0.7529,0.2941); + } else { + obj["APUGenVolt"].setColor(0.7333,0.3803,0); + } + }), + props.UpdateManager.FromHashValue("apuGLC", nil, func(val) { + if (val) { + obj["APUGenOnline"].show(); + } else { + obj["APUGenOnline"].hide(); + } + }), + props.UpdateManager.FromHashList(["apuBleedValvePos","apuBleedValveCmd"], nil, func(val) { + if (val.apuBleedValvePos == 1) { + obj["APUBleedValve"].setRotation(90 * D2R); + obj["APUBleedOnline"].show(); + } else { + obj["APUBleedValve"].setRotation(0); + obj["APUBleedOnline"].hide(); + } + + if (val.apuBleedValveCmd == val.apuBleedValvePos) { + obj["APUBleedValveCrossBar"].setColor(0.0509,0.7529,0.2941); + obj["APUBleedValveCrossBar"].setColorFill(0.0509,0.7529,0.2941); + obj["APUBleedValve"].setColor(0.0509,0.7529,0.2941); + } else { + obj["APUBleedValveCrossBar"].setColor(0.7333,0.3803,0); + obj["APUBleedValveCrossBar"].setColorFill(0.7333,0.3803,0); + obj["APUBleedValve"].setColor(0.7333,0.3803,0); + } + }), + ]; + + obj.displayedGForce = 0; + obj.updateItemsBottom = [ + props.UpdateManager.FromHashValue("acconfigUnits", nil, func(val) { + obj.units = val; + if (val) { + obj["GW-weight-unit"].setText("KG"); + } else { + obj["GW-weight-unit"].setText("LBS"); + } + }), + props.UpdateManager.FromHashValue("hour", nil, func(val) { + obj["UTCh"].setText(sprintf("%02d", val)); + }), + props.UpdateManager.FromHashValue("minute", nil, func(val) { + obj["UTCm"].setText(sprintf("%02d", val)); + }), + props.UpdateManager.FromHashValue("gForce", 0.05, func(val) { + if (obj.displayedGForce) { + obj["GLoad"].setText("G.LOAD " ~ sprintf("%3.1f", val)); + } + }), + props.UpdateManager.FromHashValue("gForceDisplay", nil, func(val) { + if ((val == 1 and !obj.displayedGForce) or (val != 0 and obj.displayedGForce)) { + obj.displayedGForce = 1; + obj["GLoad"].show(); + } else { + obj.displayedGForce = 0; + obj["GLoad"].hide(); + } + }), + ]; + return obj; + }, + getKeysBottom: func() { + return ["TAT","SAT","GW","UTCh","UTCm","GLoad","GW-weight-unit"]; + }, + getKeys: func() { + return ["APUN-needle","APUEGT-needle","APUN","APUEGT","APUAvail","APUFlapOpen","APUBleedValve","APUBleedOnline","APUBleedValveCrossBar","APUGenOnline","APUGenOff","APUGentext","APUGenLoad","APUGenbox","APUGenVolt","APUGenHz","APUBleedPSI","APUfuelLO","APU-low-oil","text3724","text3728","text3732"]; + }, + updateBottom: func(notification) { + foreach(var update_item_bottom; me.updateItemsBottom) + { + update_item_bottom.update(notification); + } + + if (fmgc.FMGCInternal.fuelRequest and fmgc.FMGCInternal.blockConfirmed and !fmgc.FMGCInternal.fuelCalculating and notification.FWCPhase != 1) { + if (me.units) { + me["GW"].setText(sprintf("%s", math.round(fmgc.FMGCInternal.fuelPredGw * 1000 * LBS2KGS, 100))); + } else { + me["GW"].setText(sprintf("%s", math.round(fmgc.FMGCInternal.fuelPredGw * 1000, 100))); + } + me["GW"].setColor(0.0509,0.7529,0.2941); + } else { + me["GW"].setText(sprintf("%s", "-----")); + me["GW"].setColor(0.0901,0.6039,0.7176); + } + + if (dmc.DMController.DMCs[1].outputs[4] != nil) { + me["SAT"].setText(sprintf("%+2.0f", dmc.DMController.DMCs[1].outputs[4].getValue())); + me["SAT"].setColor(0.0509,0.7529,0.2941); + } else { + me["SAT"].setText(sprintf("%s", "XX")); + me["SAT"].setColor(0.7333,0.3803,0); + } + + if (dmc.DMController.DMCs[1].outputs[5] != nil) { + me["TAT"].setText(sprintf("%+2.0f", dmc.DMController.DMCs[1].outputs[5].getValue())); + me["TAT"].setColor(0.0509,0.7529,0.2941); + } else { + me["TAT"].setText(sprintf("%s", "XX")); + me["TAT"].setColor(0.7333,0.3803,0); + } + }, + update: func(notification) { + me.updatePower(); + + if (me.test.getVisible() == 1) { + me.updateTest(notification); + } + + if (me.group.getVisible() == 0) { + return; + } + + foreach(var update_item; me.update_items) + { + update_item.update(notification); + } + + me.updateBottom(notification); + }, + updatePower: func() { + if (me.name == ecam.SystemDisplayController.displayedPage.name) { + if (du4_lgt.getValue() > 0.01 and systems.ELEC.Bus.ac2.getValue() >= 110) { + if (du4_test_time.getValue() + du4_test_amount.getValue() >= pts.Sim.Time.elapsedSec.getValue()) { + me.group.setVisible(0); + me.test.setVisible(1); + } else { + me.group.setVisible(1); + me.test.setVisible(0); + } + } else { + me.group.setVisible(0); + me.test.setVisible(0); + } + } else { + me.group.setVisible(0); + # don't hide the test group; just let whichever page is active control it + } + }, +}; + +var input = { + apuAdr: "/systems/navigation/adr/operating-1", + apuAvailable: "/systems/apu/available", + apuBleed: "/controls/pneumatics/switches/apu", + apuBleedValveCmd: "/systems/pneumatics/valves/apu-bleed-valve-cmd", + apuBleedValvePos: "/systems/pneumatics/valves/apu-bleed-valve", + apuEgt: "/systems/apu/egt-degC", + apuEgtRot: "/ECAM/Lower/APU-EGT", + apuGenPB: "/controls/electrical/switches/apu", + apuGLC: "/systems/electrical/relay/apu-glc/contact-pos", + apuFireBtn: "/controls/apu/fire-btn", + apuFlap: "/controls/apu/inlet-flap/position-norm", + apuFuelPump: "/systems/fuel/pumps/apu-operate", + apuFuelPumpsOff: "/systems/fuel/pumps/all-eng-pump-off", + apuOilLevel: "/systems/apu/oil/level-l", + apuMaster: "/controls/apu/master", + apuNeedleRot: "/ECAM/Lower/APU-N", + apuRpm: "/engines/engine[2]/n1", + apuPsi: "/systems/pneumatics/source/apu-psi", + apuLoad: "/systems/electrical/extra/apu-load", + apuHertz: "/systems/electrical/sources/apu/output-hertz", + apuVolt: "/systems/electrical/sources/apu/output-volt", +}; + +foreach (var name; keys(input)) { + emesary.GlobalTransmitter.NotifyAll(notifications.FrameNotificationAddProperty.new("A320 System Display", name, input[name])); +} \ No newline at end of file diff --git a/Models/Instruments/Lower-ECAM/Lower-ECAM-base.nas b/Models/Instruments/Lower-ECAM/Lower-ECAM-base.nas new file mode 100644 index 00000000..fbde5c93 --- /dev/null +++ b/Models/Instruments/Lower-ECAM/Lower-ECAM-base.nas @@ -0,0 +1,73 @@ +# A3XX Lower ECAM Canvas +# Copyright (c) 2021 Josh Davidson (Octal450) and Jonathan Redpath + +var du4_lgt = props.globals.getNode("/controls/lighting/DU/du4", 1); +var du4_test = props.globals.initNode("/instrumentation/du/du4-test", 0, "BOOL"); +var du4_test_time = props.globals.initNode("/instrumentation/du/du4-test-time", 0, "DOUBLE"); +var du4_test_amount = props.globals.initNode("/instrumentation/du/du4-test-amount", 0, "DOUBLE"); +var du4_offtime = props.globals.initNode("/instrumentation/du/du4-off-time", 0.0, "DOUBLE"); + +var canvas_lowerECAM_base = +{ + init: func() { + me.canvas = canvas.new({ + "name": "lowerECAM", + "size": [1024, 1024], + "view": [1024, 1024], + "mipmapping": 1 + }); + me.canvas.addPlacement({"node": "lecam.screen"}); + + me.font_mapper = func(family, weight) { + return "LiberationFonts/LiberationSans-Regular.ttf"; + }; + + me.test = me.canvas.createGroup(); + + canvas.parsesvg(me.test, "Aircraft/A320-family/Models/Instruments/Common/res/du-test.svg", {"font-mapper": me.font_mapper} ); + foreach(var key; me.getKeysTest()) { + me[key] = me.test.getElementById(key); + }; + }, + getKeysTest: func() { + return ["Test_white","Test_text"]; + }, + powerTransient: func() { + if (systems.ELEC.Bus.ac2.getValue() >= 110) { + if (du4_offtime.getValue() + 3 < pts.Sim.Time.elapsedSec.getValue()) { + if (pts.Gear.wow[0].getValue()) { + if (!acconfig.getBoolValue() and !du4_test.getBoolValue()) { + du4_test.setValue(1); + du4_test_amount.setValue(math.round((rand() * 5 ) + 35, 0.1)); + du4_test_time.setValue(pts.Sim.Time.elapsedSec.getValue()); + } else if (acconfig.getBoolValue() and !du4_test.getBoolValue()) { + du4_test.setValue(1); + du4_test_amount.setValue(math.round((rand() * 5 ) + 35, 0.1)); + du4_test_time.setValue(pts.Sim.Time.elapsedSec.getValue() - 30); + } + } else { + du4_test.setValue(1); + du4_test_amount.setValue(0); + du4_test_time.setValue(-100); + } + } + } else { + du4_test.setValue(0); + du4_offtime.setValue(pts.Sim.Time.elapsedSec.getValue()); + } + }, + # Due to weirdness of the parents hash / me reference + # you need to access it using me.Test_white rather than + # me["Test_white"] + updateTest: func(notification) { + if (du4_test_time.getValue() + 1 >= notification.elapsedTime) { + me.Test_white.show(); + me.Test_text.hide(); + } else { + me.Test_white.hide(); + me.Test_text.show(); + } + }, +}; + +canvas_lowerECAM_base.init(); \ No newline at end of file diff --git a/Models/Instruments/Lower-ECAM/Lower-ECAM-bleed.nas b/Models/Instruments/Lower-ECAM/Lower-ECAM-bleed.nas new file mode 100644 index 00000000..7c104add --- /dev/null +++ b/Models/Instruments/Lower-ECAM/Lower-ECAM-bleed.nas @@ -0,0 +1,547 @@ +# A3XX Lower ECAM Canvas +# Copyright (c) 2021 Josh Davidson (Octal450) and Jonathan Redpath + +var canvas_lowerECAMPageBleed = +{ + new: func(svg,name) { + var obj = {parents: [canvas_lowerECAMPageBleed,canvas_lowerECAM_base] }; + obj.group = obj.canvas.createGroup(); + obj.name = name; + + canvas.parsesvg(obj.group, svg, {"font-mapper": obj.font_mapper} ); + + foreach(var key; obj.getKeys()) { + obj[key] = obj.group.getElementById(key); + }; + + foreach(var key; obj.getKeysBottom()) { + obj[key] = obj.group.getElementById(key); + }; + + obj.units = acconfig_weight_kgs.getValue(); + + # init + + obj.update_items = [ + props.UpdateManager.FromHashList(["BleedCrossbleedCmd","BleedCrossbleed"], nil, func(val) { + if (val.BleedCrossbleedCmd != val.BleedCrossbleed) { + obj["BLEED-XFEED"].setColor(0.7333,0.3803,0); + obj["BLEED-XFEED-Cross"].setColorFill(0.7333,0.3803,0); + } else { + obj["BLEED-XFEED"].setColor(0.0509,0.7529,0.2941); + obj["BLEED-XFEED-Cross"].setColorFill(0.0509,0.7529,0.2941); + } + + if (val.BleedCrossbleedCmd == val.BleedCrossbleed) { + if (val.BleedCrossbleedCmd) { + obj["BLEED-XFEED"].setRotation(0); + } else { + obj["BLEED-XFEED"].setRotation(90 * D2R); + } + } else { + obj["BLEED-XFEED"].setRotation(45 * D2R); + } + + if (val.BleedCrossbleed == 1) { + obj["BLEED-xbleedCenter"].show(); + obj["BLEED-xbleedRight"].show(); + } else { + obj["BLEED-xbleedCenter"].hide(); + obj["BLEED-xbleedRight"].hide(); + } + }), + props.UpdateManager.FromHashList(["BleedHPValve1","BleedHPValve1Cmd"], nil, func(val) { + if (val.BleedHPValve1Cmd == 1) { + obj["BLEED-HP-Valve-1"].setRotation(90 * D2R); + obj["BLEED-HP-1-connection"].show(); + } else { + obj["BLEED-HP-Valve-1"].setRotation(0); + obj["BLEED-HP-1-connection"].hide(); + } + + if (val.BleedHPValve1Cmd == val.BleedHPValve1) { + obj["BLEED-HP-Valve-1"].setColor(0.0509,0.7529,0.2941); + } else { + obj["BLEED-HP-Valve-1"].setColor(0.7333,0.3803,0); + } + }), + props.UpdateManager.FromHashList(["BleedHPValve2","BleedHPValve2Cmd"], nil, func(val) { + if (val.BleedHPValve2Cmd == 1) { + obj["BLEED-HP-Valve-2"].setRotation(90 * D2R); + obj["BLEED-HP-2-connection"].show(); + } else { + obj["BLEED-HP-Valve-2"].setRotation(0); + obj["BLEED-HP-2-connection"].hide(); + } + + if (val.BleedHPValve2Cmd == val.BleedHPValve2) { + obj["BLEED-HP-Valve-2"].setColor(0.0509,0.7529,0.2941); + } else { + obj["BLEED-HP-Valve-2"].setColor(0.7333,0.3803,0); + } + }), + props.UpdateManager.FromHashList(["BleedPRVValve1Cmd","BleedPRVValve1"], nil, func(val) { + if (val.BleedPRVValve1 == 0) { + obj["BLEED-ENG-1"].setRotation(0); + } else { + obj["BLEED-ENG-1"].setRotation(90 * D2R); + } + + if (val.BleedPRVValve1Cmd == val.BleedPRVValve1) { + obj["BLEED-ENG-1"].setColor(0.0509,0.7529,0.2941); + obj["BLEED-ENG-1-Cross"].setColorFill(0.0509,0.7529,0.2941); + } else { + obj["BLEED-ENG-1"].setColor(0.7333,0.3803,0); + obj["BLEED-ENG-1-Cross"].setColorFill(0.7333,0.3803,0); + } + }), + props.UpdateManager.FromHashList(["BleedPRVValve2Cmd","BleedPRVValve2"], nil, func(val) { + if (val.BleedPRVValve2 == 0) { + obj["BLEED-ENG-2"].setRotation(0); + } else { + obj["BLEED-ENG-2"].setRotation(90 * D2R); + } + + if (val.BleedPRVValve2Cmd == val.BleedPRVValve2) { + obj["BLEED-ENG-2"].setColor(0.0509,0.7529,0.2941); + obj["BLEED-ENG-2-Cross"].setColorFill(0.0509,0.7529,0.2941); + } else { + obj["BLEED-ENG-2"].setColor(0.7333,0.3803,0); + obj["BLEED-ENG-2-Cross"].setColorFill(0.7333,0.3803,0); + } + }), + props.UpdateManager.FromHashValue("gear1Wow", nil, func(val) { + if (val) { + obj["BLEED-GND"].show(); + } else { + obj["BLEED-GND"].hide(); + } + }), + props.UpdateManager.FromHashValue("IceWingSw", nil, func(val) { + if (val) { + obj["BLEED-Anti-Ice-Left"].show(); + obj["BLEED-Anti-Ice-Right"].show(); + } else { + obj["BLEED-Anti-Ice-Left"].hide(); + obj["BLEED-Anti-Ice-Right"].hide(); + } + }), + props.UpdateManager.FromHashValue("N2_actual_1", nil, func(val) { + if (val >= 59) { + obj["BLEED-ENG-1-label"].setColor(0.8078,0.8039,0.8078); + } else { + obj["BLEED-ENG-1-label"].setColor(0.7333,0.3803,0); + } + }), + props.UpdateManager.FromHashValue("N2_actual_2", nil, func(val) { + if (val >= 59) { + obj["BLEED-ENG-2-label"].setColor(0.8078,0.8039,0.8078); + } else { + obj["BLEED-ENG-2-label"].setColor(0.7333,0.3803,0); + } + }), + props.UpdateManager.FromHashList(["BleedBMC1Working","BleedPreCoolerPSI1"], nil, func(val) { + if (val.BleedBMC1Working) { + if (val.BleedPreCoolerPSI1 >= 98) { + obj["BLEED-Precooler-1-Inlet-Press"].setText(sprintf("%s", 98)); + } else { + obj["BLEED-Precooler-1-Inlet-Press"].setText(sprintf("%s", math.round(val.BleedPreCoolerPSI1,2))); + } + if (val.BleedPreCoolerPSI1 < 4 or val.BleedPreCoolerPSI1 > 57) { + obj["BLEED-Precooler-1-Inlet-Press"].setColor(0.7333,0.3803,0); + } else { + obj["BLEED-Precooler-1-Inlet-Press"].setColor(0.0509,0.7529,0.2941); + } + } else { + obj["BLEED-Precooler-1-Inlet-Press"].setText(sprintf("%s", "XX")); + obj["BLEED-Precooler-1-Inlet-Press"].setColor(0.7333,0.3803,0); + } + }), + props.UpdateManager.FromHashList(["BleedBMC2Working","BleedPreCoolerPSI2"], nil, func(val) { + if (val.BleedBMC2Working) { + if (val.BleedPreCoolerPSI2 >= 98) { + obj["BLEED-Precooler-2-Inlet-Press"].setText(sprintf("%s", 98)); + } else { + obj["BLEED-Precooler-2-Inlet-Press"].setText(sprintf("%s", math.round(val.BleedPreCoolerPSI2,2))); + } + + if (val.BleedPreCoolerPSI2 < 4 or val.BleedPreCoolerPSI2 > 57) { + obj["BLEED-Precooler-2-Inlet-Press"].setColor(0.7333,0.3803,0); + } else { + obj["BLEED-Precooler-2-Inlet-Press"].setColor(0.0509,0.7529,0.2941); + } + } else { + obj["BLEED-Precooler-2-Inlet-Press"].setText(sprintf("%s", "XX")); + obj["BLEED-Precooler-2-Inlet-Press"].setColor(0.7333,0.3803,0); + } + }), + props.UpdateManager.FromHashList(["BleedBMC1Working","BleedPreCoolerTemp1","BleedPRVValve1Cmd","BleedPreCoolerOvht1"], nil, func(val) { + if (val.BleedBMC1Working) { + if (val.BleedPreCoolerTemp1 >= 510) { + obj["BLEED-Precooler-1-Outlet-Temp"].setText(sprintf("%s", 510)); + } else { + obj["BLEED-Precooler-1-Outlet-Temp"].setText(sprintf("%s", math.round(val.BleedPreCoolerTemp1, 5))); + } + + if (val.BleedPRVValve1Cmd and (val.BleedPreCoolerTemp1 < 150 or val.BleedPreCoolerOvht1)) { + obj["BLEED-Precooler-1-Outlet-Temp"].setColor(0.7333,0.3803,0); + } else { + obj["BLEED-Precooler-1-Outlet-Temp"].setColor(0.0509,0.7529,0.2941); + } + } else { + obj["BLEED-Precooler-1-Outlet-Temp"].setText(sprintf("%s", "XX")); + obj["BLEED-Precooler-1-Outlet-Temp"].setColor(0.7333,0.3803,0); + } + }), + props.UpdateManager.FromHashList(["BleedBMC2Working","BleedPreCoolerTemp2","BleedPRVValve2Cmd","BleedPreCoolerOvht2"], nil, func(val) { + if (val.BleedBMC2Working) { + if (val.BleedPreCoolerTemp2 >= 510) { + obj["BLEED-Precooler-2-Outlet-Temp"].setText(sprintf("%s", 510)); + } else { + obj["BLEED-Precooler-2-Outlet-Temp"].setText(sprintf("%s", math.round(val.BleedPreCoolerTemp2, 5))); + } + + if (val.BleedPRVValve2Cmd and (val.BleedPreCoolerTemp2 < 150 or val.BleedPreCoolerOvht2)) { + obj["BLEED-Precooler-2-Outlet-Temp"].setColor(0.7333,0.3803,0); + } else { + obj["BLEED-Precooler-2-Outlet-Temp"].setColor(0.0509,0.7529,0.2941); + } + } else { + obj["BLEED-Precooler-2-Outlet-Temp"].setText(sprintf("%s", "XX")); + obj["BLEED-Precooler-2-Outlet-Temp"].setColor(0.7333,0.3803,0); + } + }), + props.UpdateManager.FromHashValue("Pack1Bypass", 1, func(val) { + obj["BLEED-Pack-1-Bypass-needle"].setRotation((val - 50) * D2R); + }), + props.UpdateManager.FromHashValue("Pack2Bypass", 1, func(val) { + obj["BLEED-Pack-2-Bypass-needle"].setRotation((val - 50) * D2R); + }), + props.UpdateManager.FromHashValue("Pack1OutTemp", 0.25, func(val) { + obj["BLEED-Pack-1-Out-Temp"].setText(sprintf("%s", math.round(val, 5))); + if (val > 90) { + obj["BLEED-Pack-1-Out-Temp"].setColor(0.7333,0.3803,0); + } else { + obj["BLEED-Pack-1-Out-Temp"].setColor(0.0509,0.7529,0.2941); + } + }), + props.UpdateManager.FromHashValue("Pack2OutTemp", 0.25, func(val) { + obj["BLEED-Pack-2-Out-Temp"].setText(sprintf("%s", math.round(val, 5))); + if (val > 90) { + obj["BLEED-Pack-2-Out-Temp"].setColor(0.7333,0.3803,0); + } else { + obj["BLEED-Pack-2-Out-Temp"].setColor(0.0509,0.7529,0.2941); + } + }), + props.UpdateManager.FromHashValue("Pack1OutletTemp", 0.25, func(val) { + obj["BLEED-Pack-1-Comp-Out-Temp"].setText(sprintf("%s", math.round(val, 5))); + if (val > 230) { + obj["BLEED-Pack-1-Comp-Out-Temp"].setColor(0.7333,0.3803,0); + } else { + obj["BLEED-Pack-1-Comp-Out-Temp"].setColor(0.0509,0.7529,0.2941); + } + }), + props.UpdateManager.FromHashValue("Pack2OutletTemp", 0.25, func(val) { + obj["BLEED-Pack-2-Comp-Out-Temp"].setText(sprintf("%s", math.round(val, 5))); + if (val > 230) { + obj["BLEED-Pack-2-Comp-Out-Temp"].setColor(0.7333,0.3803,0); + } else { + obj["BLEED-Pack-2-Comp-Out-Temp"].setColor(0.0509,0.7529,0.2941); + } + }), + props.UpdateManager.FromHashValue("Pack1FlowOutput", 0.5, func(val) { + obj["BLEED-Pack-1-Packflow-needle"].setRotation(val * D2R); + + }), + props.UpdateManager.FromHashValue("Pack2FlowOutput", 0.5, func(val) { + obj["BLEED-Pack-2-Packflow-needle"].setRotation(val * D2R); + }), + props.UpdateManager.FromHashList(["Pack1Switch","flowCtlValve1"], nil, func(val) { + if (val.flowCtlValve1 == 0) { + obj["BLEED-Pack-1-Packflow-needle"].setColorFill(0.7333,0.3803,0); + obj["BLEED-Pack-1-Flow-Valve"].setRotation(90 * D2R); + } else { + obj["BLEED-Pack-1-Packflow-needle"].setColorFill(0.0509,0.7529,0.2941); + obj["BLEED-Pack-1-Flow-Valve"].setRotation(0); + } + + if (val.flowCtlValve1 == val.Pack1Switch) { + obj["BLEED-Pack-1-Flow-Valve"].setColor(0.0509,0.7529,0.2941); + obj["BLEED-Pack-1-Flow-Valve-Cross"].setColorFill(0.0509,0.7529,0.2941); + } else { + obj["BLEED-Pack-1-Flow-Valve"].setColor(0.7333,0.3803,0); + obj["BLEED-Pack-1-Flow-Valve-Cross"].setColorFill(0.7333,0.3803,0); + } + }), + props.UpdateManager.FromHashList(["Pack2Switch","flowCtlValve2"], nil, func(val) { + if (val.flowCtlValve2 == 0) { + obj["BLEED-Pack-2-Packflow-needle"].setColorFill(0.7333,0.3803,0); + obj["BLEED-Pack-2-Flow-Valve"].setRotation(90 * D2R); + } else { + obj["BLEED-Pack-2-Packflow-needle"].setColorFill(0.0509,0.7529,0.2941); + obj["BLEED-Pack-2-Flow-Valve"].setRotation(0); + } + + if (val.flowCtlValve2 == val.Pack2Switch) { + obj["BLEED-Pack-2-Flow-Valve"].setColor(0.0509,0.7529,0.2941); + obj["BLEED-Pack-2-Flow-Valve-Cross"].setColorFill(0.0509,0.7529,0.2941); + } else { + obj["BLEED-Pack-2-Flow-Valve"].setColor(0.7333,0.3803,0); + obj["BLEED-Pack-2-Flow-Valve-Cross"].setColorFill(0.7333,0.3803,0); + } + }), + props.UpdateManager.FromHashList(["flowCtlValve1","flowCtlValve2","RamAirValve","gear1Wow"], nil, func(val) { + if (val.RamAirValve == 0) { + obj["BLEED-Ram-Air"].setRotation(90 * D2R); + obj["BLEED-Ram-Air"].setColor(0.0509,0.7529,0.2941); + obj["BLEED-Ram-Air"].setColorFill(0.0509,0.7529,0.2941); + obj["BLEED-Ram-Air-Cross"].setColorFill(0.0509,0.7529,0.2941); + obj["BLEED-Ram-Air-connection"].hide(); + } elsif (val.RamAirValve) { + obj["BLEED-Ram-Air"].setRotation(0); + if (val.gear1Wow) { + obj["BLEED-Ram-Air"].setColor(0.7333,0.3803,0); + obj["BLEED-Ram-Air"].setColorFill(0.7333,0.3803,0); + obj["BLEED-Ram-Air-Cross"].setColorFill(0.7333,0.3803,0); + obj["BLEED-Ram-Air-connection"].setColorFill(0.7333,0.3803,0); + obj["BLEED-Ram-Air-connection"].setColorFill(0.7333,0.3803,0); + } else { + obj["BLEED-Ram-Air"].setColor(0.0509,0.7529,0.2941); + obj["BLEED-Ram-Air"].setColorFill(0.0509,0.7529,0.2941); + obj["BLEED-Ram-Air-Cross"].setColorFill(0.0509,0.7529,0.2941); + obj["BLEED-Ram-Air-connection"].setColor(0.0509,0.7529,0.2941); + obj["BLEED-Ram-Air-connection"].setColorFill(0.0509,0.7529,0.2941); + } + obj["BLEED-Ram-Air-connection"].show(); + } else { + obj["BLEED-Ram-Air"].setRotation(45 * D2R); + obj["BLEED-Ram-Air"].setColor(0.7333,0.3803,0); + obj["BLEED-Ram-Air"].setColorFill(0.7333,0.3803,0); + obj["BLEED-Ram-Air-Cross"].setColorFill(0.7333,0.3803,0); + obj["BLEED-Ram-Air-connection"].setColorFill(0.7333,0.3803,0); + obj["BLEED-Ram-Air-connection"].setColorFill(0.7333,0.3803,0); + obj["BLEED-Ram-Air-connection"].show(); + } + + if (val.flowCtlValve1 == 0 and val.flowCtlValve2 == 0) { + if (val.gear1Wow or val.RamAirValve != 1) { + obj["BLEED-cond-1"].setColor(0.7333,0.3803,0); + obj["BLEED-cond-2"].setColor(0.7333,0.3803,0); + obj["BLEED-cond-3"].setColor(0.7333,0.3803,0); + } else { + obj["BLEED-cond-1"].setColor(0.0509,0.7529,0.2941); + obj["BLEED-cond-2"].setColor(0.0509,0.7529,0.2941); + obj["BLEED-cond-3"].setColor(0.0509,0.7529,0.2941); + } + } else { + obj["BLEED-cond-1"].setColor(0.0509,0.7529,0.2941); + obj["BLEED-cond-2"].setColor(0.0509,0.7529,0.2941); + obj["BLEED-cond-3"].setColor(0.0509,0.7529,0.2941); + } + + if (val.flowCtlValve1 == 0) { + obj["BLEED-Pack-1-connection"].setColor(0.7333,0.3803,0); + obj["BLEED-Pack-1-connection"].setColorFill(0.7333,0.3803,0); + } else { + obj["BLEED-Pack-1-connection"].setColor(0.0509,0.7529,0.2941); + obj["BLEED-Pack-1-connection"].setColorFill(0.0509,0.7529,0.2941); + } + + if (val.flowCtlValve2 == 0) { + obj["BLEED-Pack-2-connection"].setColor(0.7333,0.3803,0); + obj["BLEED-Pack-2-connection"].setColorFill(0.7333,0.3803,0); + } else { + obj["BLEED-Pack-2-connection"].setColor(0.0509,0.7529,0.2941); + obj["BLEED-Pack-2-connection"].setColorFill(0.0509,0.7529,0.2941); + } + }), + props.UpdateManager.FromHashList(["BleedCrossbleed","apuMaster","apuBleedValvePos","ApuBleedNotOn"], nil, func(val) { + if (val.apuMaster) { + obj["BLEED-APU-LINES"].show(); + if (val.apuBleedValvePos == 1) { + obj["BLEED-APU-CIRCLE"].setRotation(0); + obj["BLEED-APU-connectionTop"].show(); + obj["BLEED-xbleedLeft"].show(); + } else { + obj["BLEED-APU-CIRCLE"].setRotation(90 * D2R); + obj["BLEED-APU-connectionTop"].hide(); + if (val.BleedCrossbleed != 1) { + obj["BLEED-xbleedLeft"].hide(); + } else { + obj["BLEED-xbleedLeft"].show(); + } + } + if (val.ApuBleedNotOn != 1) { + obj["BLEED-APU-CIRCLE"].setColor(0.0509,0.7529,0.2941); + } else { + obj["BLEED-APU-CIRCLE"].setColor(0.7333,0.3803,0); + } + } else { + if (val.BleedCrossbleed != 1) { + obj["BLEED-xbleedLeft"].hide(); + } else { + obj["BLEED-xbleedLeft"].show(); + } + obj["BLEED-APU-LINES"].hide(); + obj["BLEED-APU-connectionTop"].hide(); + } + }), + ]; + + obj.displayedGForce = 0; + obj.updateItemsBottom = [ + props.UpdateManager.FromHashValue("acconfigUnits", nil, func(val) { + obj.units = val; + if (val) { + obj["GW-weight-unit"].setText("KG"); + } else { + obj["GW-weight-unit"].setText("LBS"); + } + }), + props.UpdateManager.FromHashValue("hour", nil, func(val) { + obj["UTCh"].setText(sprintf("%02d", val)); + }), + props.UpdateManager.FromHashValue("minute", nil, func(val) { + obj["UTCm"].setText(sprintf("%02d", val)); + }), + props.UpdateManager.FromHashValue("gForce", 0.05, func(val) { + if (obj.displayedGForce) { + obj["GLoad"].setText("G.LOAD " ~ sprintf("%3.1f", val)); + } + }), + props.UpdateManager.FromHashValue("gForceDisplay", nil, func(val) { + if ((val == 1 and !obj.displayedGForce) or (val != 0 and obj.displayedGForce)) { + obj.displayedGForce = 1; + obj["GLoad"].show(); + } else { + obj.displayedGForce = 0; + obj["GLoad"].hide(); + } + }), + ]; + return obj; + }, + getKeysBottom: func() { + return ["TAT","SAT","GW","UTCh","UTCm","GLoad","GW-weight-unit"]; + }, + getKeys: func() { + return["TAT","SAT","GW","UTCh","UTCm","GLoad","GW-weight-unit", "BLEED-XFEED", "BLEED-Ram-Air", "BLEED-Ram-Air-Cross", "BLEED-APU-CIRCLE", "BLEED-HP-Valve-1", "BLEED-XFEED-Cross", + "BLEED-APU-LINES","BLEED-ENG-1", "BLEED-HP-Valve-2", "BLEED-ENG-2", "BLEED-Precooler-1-Inlet-Press", "BLEED-Precooler-1-Outlet-Temp", + "BLEED-Precooler-2-Inlet-Press", "BLEED-Precooler-2-Outlet-Temp", "BLEED-ENG-1-label", "BLEED-ENG-2-label", + "BLEED-GND", "BLEED-Pack-1-Flow-Valve", "BLEED-Pack-2-Flow-Valve", "BLEED-Pack-1-Out-Temp","BLEED-APU-connectionTop", + "BLEED-Pack-1-Comp-Out-Temp", "BLEED-Pack-1-Packflow-needle", "BLEED-Pack-1-Bypass-needle", "BLEED-Pack-2-Out-Temp", + "BLEED-Pack-2-Bypass-needle", "BLEED-Pack-2-Comp-Out-Temp", "BLEED-Pack-2-Packflow-needle", "BLEED-Anti-Ice-Left", + "BLEED-Anti-Ice-Right", "BLEED-HP-2-connection", "BLEED-HP-1-connection", "BLEED-ANTI-ICE-ARROW-LEFT", "BLEED-ANTI-ICE-ARROW-RIGHT", + "BLEED-xbleedLeft","BLEED-xbleedCenter","BLEED-xbleedRight","BLEED-cond-1","BLEED-cond-2","BLEED-cond-3","BLEED-Ram-Air-connection","BLEED-ENG-1-Cross","BLEED-ENG-2-Cross", + "BLEED-Pack-1-Flow-Valve-Cross","BLEED-Pack-2-Flow-Valve-Cross","BLEED-Pack-1-connection","BLEED-Pack-2-connection"]; + }, + updateBottom: func(notification) { + foreach(var update_item_bottom; me.updateItemsBottom) + { + update_item_bottom.update(notification); + } + + if (fmgc.FMGCInternal.fuelRequest and fmgc.FMGCInternal.blockConfirmed and !fmgc.FMGCInternal.fuelCalculating and notification.FWCPhase != 1) { + if (me.units) { + me["GW"].setText(sprintf("%s", math.round(fmgc.FMGCInternal.fuelPredGw * 1000 * LBS2KGS, 100))); + } else { + me["GW"].setText(sprintf("%s", math.round(fmgc.FMGCInternal.fuelPredGw * 1000, 100))); + } + me["GW"].setColor(0.0509,0.7529,0.2941); + } else { + me["GW"].setText(sprintf("%s", "-----")); + me["GW"].setColor(0.0901,0.6039,0.7176); + } + + if (dmc.DMController.DMCs[1].outputs[4] != nil) { + me["SAT"].setText(sprintf("%+2.0f", dmc.DMController.DMCs[1].outputs[4].getValue())); + me["SAT"].setColor(0.0509,0.7529,0.2941); + } else { + me["SAT"].setText(sprintf("%s", "XX")); + me["SAT"].setColor(0.7333,0.3803,0); + } + + if (dmc.DMController.DMCs[1].outputs[5] != nil) { + me["TAT"].setText(sprintf("%+2.0f", dmc.DMController.DMCs[1].outputs[5].getValue())); + me["TAT"].setColor(0.0509,0.7529,0.2941); + } else { + me["TAT"].setText(sprintf("%s", "XX")); + me["TAT"].setColor(0.7333,0.3803,0); + } + }, + update: func(notification) { + me.updatePower(); + + if (me.test.getVisible() == 1) { + me.updateTest(notification); + } + + if (me.group.getVisible() == 0) { + return; + } + + foreach(var update_item; me.update_items) + { + update_item.update(notification); + } + + me.updateBottom(notification); + }, + updatePower: func() { + if (me.name == ecam.SystemDisplayController.displayedPage.name) { + if (du4_lgt.getValue() > 0.01 and systems.ELEC.Bus.ac2.getValue() >= 110) { + if (du4_test_time.getValue() + du4_test_amount.getValue() >= pts.Sim.Time.elapsedSec.getValue()) { + me.group.setVisible(0); + me.test.setVisible(1); + } else { + me.group.setVisible(1); + me.test.setVisible(0); + } + } else { + me.group.setVisible(0); + me.test.setVisible(0); + } + } else { + me.group.setVisible(0); + # don't hide the test group; just let whichever page is active control it + } + }, +}; + +var input = { + ApuBleedNotOn: "/systems/pneumatics/warnings/apu-bleed-not-on", + BleedBMC1Working: "/systems/pneumatics/indicating/bmc1-working", + BleedBMC2Working: "/systems/pneumatics/indicating/bmc2-working", + BleedCrossbleedCmd: "/systems/pneumatics/valves/crossbleed-valve-cmd", + BleedCrossbleed: "/systems/pneumatics/valves/crossbleed-valve", + BleedHPValve1: "/systems/pneumatics/valves/engine-1-hp-valve", + BleedHPValve2: "/systems/pneumatics/valves/engine-2-hp-valve", + BleedHPValve1Cmd: "/systems/pneumatics/valves/engine-1-hp-valve-cmd", + BleedHPValve2Cmd: "/systems/pneumatics/valves/engine-2-hp-valve-cmd", + BleedPRVValve1Cmd: "/controls/pneumatics/switches/bleed-1", + BleedPRVValve2Cmd: "/controls/pneumatics/switches/bleed-2", + BleedPRVValve1: "/systems/pneumatics/valves/engine-1-prv-valve", + BleedPRVValve2: "/systems/pneumatics/valves/engine-2-prv-valve", + BleedPreCoolerPSI1: "/systems/pneumatics/psi/engine-1-psi", + BleedPreCoolerPSI2: "/systems/pneumatics/psi/engine-2-psi", + BleedPreCoolerTemp1: "/systems/pneumatics/precooler/temp-1", + BleedPreCoolerTemp2: "/systems/pneumatics/precooler/temp-2", + BleedPreCoolerOvht1: "/systems/pneumatics/precooler/ovht-1", + BleedPreCoolerOvht2: "/systems/pneumatics/precooler/ovht-2", + Pack1Bypass: "/systems/pneumatics/pack-1-bypass", + Pack2Bypass: "/systems/pneumatics/pack-2-bypass", + Pack1FlowOutput: "/ECAM/Lower/pack-1-flow-output", + Pack2FlowOutput: "/ECAM/Lower/pack-2-flow-output", + Pack1OutTemp: "/systems/air-conditioning/packs/pack-1-output-temp", + Pack2OutTemp: "/systems/air-conditioning/packs/pack-2-output-temp", + Pack1OutletTemp: "/systems/air-conditioning/packs/pack-1-outlet-temp", + Pack2OutletTemp: "/systems/air-conditioning/packs/pack-2-outlet-temp", + Pack1Switch: "/controls/pneumatics/switches/pack-1", + Pack2Switch: "/controls/pneumatics/switches/pack-2", + RamAirValve: "/systems/air-conditioning/valves/ram-air", + IceWingSw: "/controls/ice-protection/wing", +}; + +foreach (var name; keys(input)) { + emesary.GlobalTransmitter.NotifyAll(notifications.FrameNotificationAddProperty.new("A320 System Display", name, input[name])); +} \ No newline at end of file diff --git a/Models/Instruments/Lower-ECAM/Lower-ECAM-cond.nas b/Models/Instruments/Lower-ECAM/Lower-ECAM-cond.nas new file mode 100644 index 00000000..74b0732a --- /dev/null +++ b/Models/Instruments/Lower-ECAM/Lower-ECAM-cond.nas @@ -0,0 +1,209 @@ +# A3XX Lower ECAM Canvas +# Copyright (c) 2021 Josh Davidson (Octal450) and Jonathan Redpath + +var canvas_lowerECAMPageCond = +{ + new: func(svg,name) { + var obj = {parents: [canvas_lowerECAMPageCond,canvas_lowerECAM_base] }; + obj.group = obj.canvas.createGroup(); + obj.name = name; + + canvas.parsesvg(obj.group, svg, {"font-mapper": obj.font_mapper} ); + + foreach(var key; obj.getKeys()) { + obj[key] = obj.group.getElementById(key); + }; + + foreach(var key; obj.getKeysBottom()) { + obj[key] = obj.group.getElementById(key); + }; + + obj.units = acconfig_weight_kgs.getValue(); + + # init + obj["CONDFanFwdFault"].hide(); + obj["CONDFanAftFault"].hide(); + + # aft cargo ventilation disabled + obj["CargoCond"].hide(); + + obj.update_items = [ + props.UpdateManager.FromHashValue("condDuctTempCockpit", 0.5, func(val) { + obj["CONDDuctTempCKPT"].setText(sprintf("%2.0f",val)); + }), + props.UpdateManager.FromHashValue("condDuctTempAft", 0.5, func(val) { + obj["CONDDuctTempAFT"].setText(sprintf("%2.0f",val)); + }), + props.UpdateManager.FromHashValue("condDuctTempFwd", 0.5, func(val) { + obj["CONDDuctTempFWD"].setText(sprintf("%2.0f",val)); + }), + props.UpdateManager.FromHashValue("condTempCockpit", 0.5, func(val) { + obj["CONDTempCKPT"].setText(sprintf("%2.0f",val)); + }), + props.UpdateManager.FromHashValue("condTempAft", 0.5, func(val) { + obj["CONDTempAFT"].setText(sprintf("%2.0f",val)); + }), + props.UpdateManager.FromHashValue("condTempFwd", 0.5, func(val) { + obj["CONDTempFWD"].setText(sprintf("%2.0f",val)); + }), + props.UpdateManager.FromHashValue("condTrimCockpit", 0.01, func(val) { + obj["CONDTrimValveCKPT"].setRotation(val * D2R); + }), + props.UpdateManager.FromHashValue("condTrimAft", 0.01, func(val) { + obj["CONDTrimValveAFT"].setRotation(val * D2R); + }), + props.UpdateManager.FromHashValue("condTrimFwd", 0.01, func(val) { + obj["CONDTrimValveFWD"].setRotation(val * D2R); + }), + props.UpdateManager.FromHashList(["condHotAirSwitch","condHotAirValve","condHotAirCmd"], nil, func(val) { + if (!val.condHotAirSwitch or (val.condHotAirCmd == 1 and val.condHotAirValve == 0)) { + obj["CONDHotAirValve"].setRotation(90 * D2R); + obj["CONDHotAirValve"].setColor(0.7333,0.3803,0); + obj["CONDHotAirValveCross"].setColorFill(0.7333,0.3803,0); + } elsif (val.condHotAirCmd == 0 and val.condHotAirValve == 0) { + obj["CONDHotAirValve"].setRotation(90 * D2R); + obj["CONDHotAirValve"].setColor(0.0509,0.7529,0.2941); + obj["CONDHotAirValveCross"].setColorFill(0.0509,0.7529,0.2941); + } elsif (val.condHotAirCmd == 0 and val.condHotAirValve != 0) { + obj["CONDHotAirValve"].setRotation(0); + obj["CONDHotAirValve"].setColor(0.7333,0.3803,0); + obj["CONDHotAirValveCross"].setColorFill(0.7333,0.3803,0); + } else { + obj["CONDHotAirValve"].setRotation(0); + obj["CONDHotAirValve"].setColor(0.0509,0.7529,0.2941); + obj["CONDHotAirValveCross"].setColorFill(0.0509,0.7529,0.2941); + } + }), + ]; + + obj.displayedGForce = 0; + obj.updateItemsBottom = [ + props.UpdateManager.FromHashValue("acconfigUnits", nil, func(val) { + obj.units = val; + if (val) { + obj["GW-weight-unit"].setText("KG"); + } else { + obj["GW-weight-unit"].setText("LBS"); + } + }), + props.UpdateManager.FromHashValue("hour", nil, func(val) { + obj["UTCh"].setText(sprintf("%02d", val)); + }), + props.UpdateManager.FromHashValue("minute", nil, func(val) { + obj["UTCm"].setText(sprintf("%02d", val)); + }), + props.UpdateManager.FromHashValue("gForce", 0.05, func(val) { + if (obj.displayedGForce) { + obj["GLoad"].setText("G.LOAD " ~ sprintf("%3.1f", val)); + } + }), + props.UpdateManager.FromHashValue("gForceDisplay", nil, func(val) { + if ((val == 1 and !obj.displayedGForce) or (val != 0 and obj.displayedGForce)) { + obj.displayedGForce = 1; + obj["GLoad"].show(); + } else { + obj.displayedGForce = 0; + obj["GLoad"].hide(); + } + }), + ]; + return obj; + }, + getKeysBottom: func() { + return ["TAT","SAT","GW","UTCh","UTCm","GLoad","GW-weight-unit"]; + }, + getKeys: func() { + return["CargoCond","CONDHotAirValve","CONDFanFwdFault","CONDFanAftFault","CONDTrimValveCKPT","CONDTrimValveAFT","CONDTrimValveFWD","CONDDuctTempCKPT", + "CONDDuctTempAFT","CONDDuctTempFWD","CONDTempCKPT","CONDTempAFT","CONDTempFWD","CONDHotAirValveCross"]; + }, + updateBottom: func(notification) { + foreach(var update_item_bottom; me.updateItemsBottom) + { + update_item_bottom.update(notification); + } + + if (fmgc.FMGCInternal.fuelRequest and fmgc.FMGCInternal.blockConfirmed and !fmgc.FMGCInternal.fuelCalculating and notification.FWCPhase != 1) { + if (me.units) { + me["GW"].setText(sprintf("%s", math.round(fmgc.FMGCInternal.fuelPredGw * 1000 * LBS2KGS, 100))); + } else { + me["GW"].setText(sprintf("%s", math.round(fmgc.FMGCInternal.fuelPredGw * 1000, 100))); + } + me["GW"].setColor(0.0509,0.7529,0.2941); + } else { + me["GW"].setText(sprintf("%s", "-----")); + me["GW"].setColor(0.0901,0.6039,0.7176); + } + + if (dmc.DMController.DMCs[1].outputs[4] != nil) { + me["SAT"].setText(sprintf("%+2.0f", dmc.DMController.DMCs[1].outputs[4].getValue())); + me["SAT"].setColor(0.0509,0.7529,0.2941); + } else { + me["SAT"].setText(sprintf("%s", "XX")); + me["SAT"].setColor(0.7333,0.3803,0); + } + + if (dmc.DMController.DMCs[1].outputs[5] != nil) { + me["TAT"].setText(sprintf("%+2.0f", dmc.DMController.DMCs[1].outputs[5].getValue())); + me["TAT"].setColor(0.0509,0.7529,0.2941); + } else { + me["TAT"].setText(sprintf("%s", "XX")); + me["TAT"].setColor(0.7333,0.3803,0); + } + }, + update: func(notification) { + me.updatePower(); + + if (me.test.getVisible() == 1) { + me.updateTest(notification); + } + + if (me.group.getVisible() == 0) { + return; + } + + foreach(var update_item; me.update_items) + { + update_item.update(notification); + } + + me.updateBottom(notification); + }, + updatePower: func() { + if (me.name == ecam.SystemDisplayController.displayedPage.name) { + if (du4_lgt.getValue() > 0.01 and systems.ELEC.Bus.ac2.getValue() >= 110) { + if (du4_test_time.getValue() + du4_test_amount.getValue() >= pts.Sim.Time.elapsedSec.getValue()) { + me.group.setVisible(0); + me.test.setVisible(1); + } else { + me.group.setVisible(1); + me.test.setVisible(0); + } + } else { + me.group.setVisible(0); + me.test.setVisible(0); + } + } else { + me.group.setVisible(0); + # don't hide the test group; just let whichever page is active control it + } + }, +}; + +var input = { + condDuctTempCockpit: "/systems/air-conditioning/temperatures/cockpit-duct", + condDuctTempAft: "/systems/air-conditioning/temperatures/cabin-aft-duct", + condDuctTempFwd: "/systems/air-conditioning/temperatures/cabin-fwd-duct", + condTempCockpit: "/systems/air-conditioning/temperatures/cockpit-temp", + condTempAft: "/systems/air-conditioning/temperatures/cabin-aft-temp", + condTempFwd: "/systems/air-conditioning/temperatures/cabin-fwd-temp", + condTrimCockpit: "/ECAM/Lower/trim-cockpit-output", + condTrimAft: "/ECAM/Lower/trim-aft-output", + condTrimFwd: "/ECAM/Lower/trim-fwd-output", + condHotAirCmd: "/systems/air-conditioning/valves/hot-air-cmd", + condHotAirSwitch: "/controls/pneumatics/switches/hot-air", + condHotAirValve: "/systems/air-conditioning/valves/hot-air" +}; + +foreach (var name; keys(input)) { + emesary.GlobalTransmitter.NotifyAll(notifications.FrameNotificationAddProperty.new("A320 System Display", name, input[name])); +} \ No newline at end of file diff --git a/Models/Instruments/Lower-ECAM/Lower-ECAM-cruise.nas b/Models/Instruments/Lower-ECAM/Lower-ECAM-cruise.nas new file mode 100644 index 00000000..23445844 --- /dev/null +++ b/Models/Instruments/Lower-ECAM/Lower-ECAM-cruise.nas @@ -0,0 +1,257 @@ +# A3XX Lower ECAM Canvas +# Copyright (c) 2021 Josh Davidson (Octal450) and Jonathan Redpath + +var canvas_lowerECAMPageCruise = +{ + new: func(svg,name) { + var obj = {parents: [canvas_lowerECAMPageCruise,canvas_lowerECAM_base] }; + obj.group = obj.canvas.createGroup(); + obj.name = name; + + canvas.parsesvg(obj.group, svg, {"font-mapper": obj.font_mapper} ); + + foreach(var key; obj.getKeys()) { + obj[key] = obj.group.getElementById(key); + }; + + foreach(var key; obj.getKeysBottom()) { + obj[key] = obj.group.getElementById(key); + }; + + obj.units = acconfig_weight_kgs.getValue(); + + # init + + obj.update_items = [ + props.UpdateManager.FromHashValue("engOil1", 0.005, func(val) { + if (obj.units) { + obj["Oil1"].setText(sprintf("%2.1f",(0.1 * math.round(val * QT2LTR * 10,5)))); + } else { + obj["Oil1"].setText(sprintf("%2.1f",(0.1 * math.round(val * 10,5)))); + } + }), + props.UpdateManager.FromHashValue("engOil2", 0.005, func(val) { + if (obj.units) { + obj["Oil2"].setText(sprintf("%2.1f",(0.1 * math.round(val * QT2LTR * 10,5)))); + } else { + obj["Oil2"].setText(sprintf("%2.1f",(0.1 * math.round(val * 10,5)))); + } + }), + props.UpdateManager.FromHashValue("acconfigUnits", nil, func(val) { + if (val) { + obj["Fused-weight-unit"].setText("KG"); + obj["OilUnit"].setText("LTR"); + # immediately update parameters + obj["Oil1"].setText(sprintf("%2.1f",(0.1 * math.round(pts.Engines.Engine.oilQt[0].getValue() * QT2LTR * 10,5)))); + obj["Oil2"].setText(sprintf("%2.1f",(0.1 * math.round(pts.Engines.Engine.oilQt[1].getValue() * QT2LTR * 10,5)))); + obj["FUsed1"].setText(sprintf("%s", math.round(fuel_used_lbs1.getValue() * LBS2KGS, 10))); + obj["FUsed2"].setText(sprintf("%s", math.round(fuel_used_lbs2.getValue() * LBS2KGS, 10))); + } else { + obj["Fused-weight-unit"].setText("LBS"); + obj["OilUnit"].setText("QT"); + obj["Oil1"].setText(sprintf("%2.1f",(0.1 * math.round(pts.Engines.Engine.oilQt[0].getValue() * 10,5)))); + obj["Oil2"].setText(sprintf("%2.1f",(0.1 * math.round(pts.Engines.Engine.oilQt[1].getValue() * 10,5)))); + obj["FUsed1"].setText(sprintf("%s", math.round(fuel_used_lbs1.getValue(), 10))); + obj["FUsed2"].setText(sprintf("%s", math.round(fuel_used_lbs2.getValue(), 10))); + } + }), + props.UpdateManager.FromHashValue("engFuelUsed1", 1, func(val) { + if (obj.units) { + obj["FUsed1"].setText(sprintf("%s", math.round(val * LBS2KGS, 10))); + } else { + obj["FUsed1"].setText(sprintf("%s", math.round(val, 10))); + } + }), + props.UpdateManager.FromHashValue("engFuelUsed2", 1, func(val) { + if (obj.units) { + obj["FUsed2"].setText(sprintf("%s", math.round(val * LBS2KGS, 10))); + } else { + obj["FUsed2"].setText(sprintf("%s", math.round(val, 10))); + } + }), + props.UpdateManager.FromHashList(["engFuelUsed1","engFuelUsed2"], 1, func(val) { + if (obj.units) { + obj["FUsed"].setText(sprintf("%s", math.round((val.engFuelUsed1 + val.engFuelUsed2) * LBS2KGS, 10))); + } else { + obj["FUsed"].setText(sprintf("%s", math.round((val.engFuelUsed1 + val.engFuelUsed2), 10))); + } + }), + props.UpdateManager.FromHashValue("pressDelta", 0.05, func(val) { + if (val > 31.9) { + obj["deltaPSI"].setText(sprintf("%2.1f", 31.9)); + } else if (val < -9.9) { + obj["deltaPSI"].setText(sprintf("%2.1f", -9.9)); + } else { + obj["deltaPSI"].setText(sprintf("%2.1f", val)); + } + + if (val < -0.4 or val > 8.5) { + obj["deltaPSI"].setColor(0.7333,0.3803,0); + } else { + obj["deltaPSI"].setColor(0.0509,0.7529,0.2941); + } + }), + props.UpdateManager.FromHashValue("pressVS", 25, func(val) { + if (val > 9950) { + obj["CABVS"].setText(sprintf("%4.0f", 9950)); + } else if (val < -9950) { + obj["CABVS"].setText(sprintf("%4.0f", -9950)); + } else { + obj["CABVS"].setText(sprintf("%-4.0f", math.round(val,50))); + } + + if (val >= 25) { + obj["VS-Arrow-UP"].show(); + obj["VS-Arrow-DN"].hide(); + } elsif (val <= -25) { + obj["VS-Arrow-UP"].hide(); + obj["VS-Arrow-DN"].show(); + } else { + obj["VS-Arrow-UP"].hide(); + obj["VS-Arrow-DN"].hide(); + } + }), + props.UpdateManager.FromHashValue("pressAlt", 25, func(val) { + if (val > 32750) { + obj["CABALT"].setText(sprintf("%5.0f", 32750)); + } else if (val < -9950) { + obj["CABALT"].setText(sprintf("%5.0f", -9950)); + } else { + obj["CABALT"].setText(sprintf("%5.0f", math.round(val,50))); + } + + if (val > 9550) { + obj["CABALT"].setColor(1,0,0); + } else { + obj["CABALT"].setColor(0.0509,0.7529,0.2941); + } + }), + props.UpdateManager.FromHashValue("condTempCockpit", 0.5, func(val) { + obj["CKPT-TEMP"].setText(sprintf("%2.0f",val)); + }), + props.UpdateManager.FromHashValue("condTempAft", 0.5, func(val) { + obj["AFT-TEMP"].setText(sprintf("%2.0f",val)); + }), + props.UpdateManager.FromHashValue("condTempFwd", 0.5, func(val) { + obj["FWD-TEMP"].setText(sprintf("%2.0f",val)); + }), + ]; + + obj.displayedGForce = 0; + obj.updateItemsBottom = [ + props.UpdateManager.FromHashValue("acconfigUnits", nil, func(val) { + obj.units = val; + if (val) { + obj["GW-weight-unit"].setText("KG"); + } else { + obj["GW-weight-unit"].setText("LBS"); + } + }), + props.UpdateManager.FromHashValue("hour", nil, func(val) { + obj["UTCh"].setText(sprintf("%02d", val)); + }), + props.UpdateManager.FromHashValue("minute", nil, func(val) { + obj["UTCm"].setText(sprintf("%02d", val)); + }), + props.UpdateManager.FromHashValue("gForce", 0.05, func(val) { + if (obj.displayedGForce) { + obj["GLoad"].setText("G.LOAD " ~ sprintf("%3.1f", val)); + } + }), + props.UpdateManager.FromHashValue("gForceDisplay", nil, func(val) { + if ((val == 1 and !obj.displayedGForce) or (val != 0 and obj.displayedGForce)) { + obj.displayedGForce = 1; + obj["GLoad"].show(); + } else { + obj.displayedGForce = 0; + obj["GLoad"].hide(); + } + }), + ]; + return obj; + }, + getKeysBottom: func() { + return ["TAT","SAT","GW","UTCh","UTCm","GLoad","GW-weight-unit"]; + }, + getKeys: func() { + return["Oil1","Oil2","OilUnit","FUsed1","FUsed2","FUsed","VIB1N1","VIB1N2","VIB2N1","VIB2N2","deltaPSI","LDGELEV-AUTO","LDGELEV","CABVS","CABALT","VS-Arrow-UP","VS-Arrow-DN","CKPT-TEMP","FWD-TEMP","AFT-TEMP","Fused-weight-unit"]; + }, + updateBottom: func(notification) { + foreach(var update_item_bottom; me.updateItemsBottom) + { + update_item_bottom.update(notification); + } + + if (fmgc.FMGCInternal.fuelRequest and fmgc.FMGCInternal.blockConfirmed and !fmgc.FMGCInternal.fuelCalculating and notification.FWCPhase != 1) { + if (me.units) { + me["GW"].setText(sprintf("%s", math.round(fmgc.FMGCInternal.fuelPredGw * 1000 * LBS2KGS, 100))); + } else { + me["GW"].setText(sprintf("%s", math.round(fmgc.FMGCInternal.fuelPredGw * 1000, 100))); + } + me["GW"].setColor(0.0509,0.7529,0.2941); + } else { + me["GW"].setText(sprintf("%s", "-----")); + me["GW"].setColor(0.0901,0.6039,0.7176); + } + + if (dmc.DMController.DMCs[1].outputs[4] != nil) { + me["SAT"].setText(sprintf("%+2.0f", dmc.DMController.DMCs[1].outputs[4].getValue())); + me["SAT"].setColor(0.0509,0.7529,0.2941); + } else { + me["SAT"].setText(sprintf("%s", "XX")); + me["SAT"].setColor(0.7333,0.3803,0); + } + + if (dmc.DMController.DMCs[1].outputs[5] != nil) { + me["TAT"].setText(sprintf("%+2.0f", dmc.DMController.DMCs[1].outputs[5].getValue())); + me["TAT"].setColor(0.0509,0.7529,0.2941); + } else { + me["TAT"].setText(sprintf("%s", "XX")); + me["TAT"].setColor(0.7333,0.3803,0); + } + }, + update: func(notification) { + me.updatePower(); + + if (me.test.getVisible() == 1) { + me.updateTest(notification); + } + + if (me.group.getVisible() == 0) { + return; + } + + foreach(var update_item; me.update_items) + { + update_item.update(notification); + } + + me.updateBottom(notification); + }, + updatePower: func() { + if (me.name == ecam.SystemDisplayController.displayedPage.name) { + if (du4_lgt.getValue() > 0.01 and systems.ELEC.Bus.ac2.getValue() >= 110) { + if (du4_test_time.getValue() + du4_test_amount.getValue() >= pts.Sim.Time.elapsedSec.getValue()) { + me.group.setVisible(0); + me.test.setVisible(1); + } else { + me.group.setVisible(1); + me.test.setVisible(0); + } + } else { + me.group.setVisible(0); + me.test.setVisible(0); + } + } else { + me.group.setVisible(0); + # don't hide the test group; just let whichever page is active control it + } + }, +}; + +var input = { +}; + +foreach (var name; keys(input)) { + emesary.GlobalTransmitter.NotifyAll(notifications.FrameNotificationAddProperty.new("A320 System Display", name, input[name])); +} \ No newline at end of file diff --git a/Models/Instruments/Lower-ECAM/Lower-ECAM-door.nas b/Models/Instruments/Lower-ECAM/Lower-ECAM-door.nas new file mode 100644 index 00000000..9e279235 --- /dev/null +++ b/Models/Instruments/Lower-ECAM/Lower-ECAM-door.nas @@ -0,0 +1,319 @@ +# A3XX Lower ECAM Canvas +# Copyright (c) 2021 Josh Davidson (Octal450) and Jonathan Redpath + +var canvas_lowerECAMPageDoor = +{ + new: func(svg,name) { + var obj = {parents: [canvas_lowerECAMPageDoor,canvas_lowerECAM_base] }; + obj.group = obj.canvas.createGroup(); + obj.name = name; + + canvas.parsesvg(obj.group, svg, {"font-mapper": obj.font_mapper} ); + + foreach(var key; obj.getKeys()) { + obj[key] = obj.group.getElementById(key); + }; + + foreach(var key; obj.getKeysBottom()) { + obj[key] = obj.group.getElementById(key); + }; + + obj.units = acconfig_weight_kgs.getValue(); + + # init + obj["Cabin2LeftSlide"].hide(); + obj["Cabin2RightSlide"].hide(); + obj["Cabin3LeftSlide"].hide(); + obj["Cabin3RightSlide"].hide(); + + obj["DOOROXY-REGUL-LO-PR"].hide(); + obj["AvionicsLine1"].hide(); + obj["AvionicsLine2"].hide(); + obj["AvionicsLbl1"].hide(); + obj["AvionicsLbl2"].hide(); + obj["ExitLLine"].hide(); + obj["ExitLLbl"].hide(); + obj["ExitRLine"].hide(); + obj["ExitRLbl"].hide(); + obj["Cabin2Left"].hide(); + obj["Cabin2LeftLine"].hide(); + obj["Cabin2LeftLbl"].hide(); + obj["Cabin2Right"].hide(); + obj["Cabin2RightLine"].hide(); + obj["Cabin2RightLbl"].hide(); + obj["Cabin3Left"].hide(); + obj["Cabin3LeftLine"].hide(); + obj["Cabin3LeftLbl"].hide(); + obj["Cabin3Right"].hide(); + obj["Cabin3RightLine"].hide(); + obj["Cabin3RightLbl"].hide(); + + + obj.update_items = [ + props.UpdateManager.FromHashValue("doorL1", nil, func(val) { + if (val > 0) { + obj["Cabin1Left"].show(); + obj["Cabin1Left"].setColor(0.7333,0.3803,0); + obj["Cabin1Left"].setColorFill(0.7333,0.3803,0); + obj["Cabin1LeftLbl"].show(); + obj["Cabin1LeftLine"].show(); + obj["Cabin1LeftSlide"].hide(); + } else { + obj["Cabin1Left"].setColor(0.0509,0.7529,0.2941); + obj["Cabin1Left"].setColorFill(0,0,0); + obj["Cabin1LeftLbl"].hide(); + obj["Cabin1LeftLine"].hide(); + obj["Cabin1LeftSlide"].show(); + } + }), + props.UpdateManager.FromHashValue("doorL4", nil, func(val) { + if (val > 0) { + obj["Cabin4Left"].show(); + obj["Cabin4Left"].setColor(0.7333,0.3803,0); + obj["Cabin4Left"].setColorFill(0.7333,0.3803,0); + obj["Cabin4LeftLbl"].show(); + obj["Cabin4LeftLine"].show(); + obj["Cabin4LeftSlide"].hide(); + } else { + obj["Cabin4Left"].setColor(0.0509,0.7529,0.2941); + obj["Cabin4Left"].setColorFill(0,0,0); + obj["Cabin4LeftLbl"].hide(); + obj["Cabin4LeftLine"].hide(); + obj["Cabin4LeftSlide"].show(); + } + }), + props.UpdateManager.FromHashValue("doorR1", nil, func(val) { + if (val > 0) { + obj["Cabin1Right"].show(); + obj["Cabin1Right"].setColor(0.7333,0.3803,0); + obj["Cabin1Right"].setColorFill(0.7333,0.3803,0); + obj["Cabin1RightLbl"].show(); + obj["Cabin1RightLine"].show(); + obj["Cabin1RightSlide"].hide(); + } else { + obj["Cabin1Right"].setColor(0.0509,0.7529,0.2941); + obj["Cabin1Right"].setColorFill(0,0,0); + obj["Cabin1RightLbl"].hide(); + obj["Cabin1RightLine"].hide(); + obj["Cabin1RightSlide"].show(); + } + }), + props.UpdateManager.FromHashValue("doorR4", nil, func(val) { + if (val > 0) { + obj["Cabin4Right"].show(); + obj["Cabin4Right"].setColor(0.7333,0.3803,0); + obj["Cabin4Right"].setColorFill(0.7333,0.3803,0); + obj["Cabin4RightLbl"].show(); + obj["Cabin4RightLine"].show(); + obj["Cabin4RightSlide"].hide(); + } else { + obj["Cabin4Right"].setColor(0.0509,0.7529,0.2941); + obj["Cabin4Right"].setColorFill(0,0,0); + obj["Cabin4RightLbl"].hide(); + obj["Cabin4RightLine"].hide(); + obj["Cabin4RightSlide"].show(); + } + }), + props.UpdateManager.FromHashValue("cargoAft", nil, func(val) { + if (val > 0) { + obj["Cargo2Door"].setColor(0.7333,0.3803,0); + obj["Cargo2Door"].setColorFill(0.7333,0.3803,0); + obj["Cargo2Lbl"].show(); + obj["Cargo2Line"].show(); + } else { + obj["Cargo2Door"].setColor(0.0509,0.7529,0.2941); + obj["Cargo2Door"].setColorFill(0,0,0); + obj["Cargo2Lbl"].hide(); + obj["Cargo2Line"].hide(); + } + }), + props.UpdateManager.FromHashValue("cargoBulk", nil, func(val) { + if (val > 0) { + obj["Bulk"].setColor(0.7333,0.3803,0); + obj["Bulk"].setColorFill(0.7333,0.3803,0); + obj["BulkLbl"].show(); + obj["BulkLine"].show(); + } else { + obj["Bulk"].setColor(0.0509,0.7529,0.2941); + obj["Bulk"].setColorFill(0,0,0); + obj["BulkLbl"].hide(); + obj["BulkLine"].hide(); + } + }), + props.UpdateManager.FromHashValue("cargoFwd", nil, func(val) { + if (val > 0) { + obj["Cargo1Door"].setColor(0.7333,0.3803,0); + obj["Cargo1Door"].setColorFill(0.7333,0.3803,0); + obj["Cargo1Lbl"].show(); + obj["Cargo1Line"].show(); + } else { + obj["Cargo1Door"].setColor(0.0509,0.7529,0.2941); + obj["Cargo1Door"].setColorFill(0,0,0); + obj["Cargo1Lbl"].hide(); + obj["Cargo1Line"].hide(); + } + }), + props.UpdateManager.FromHashValue("oxyPB", nil, func(val) { + if (val) { + obj["DOOROXY-OxyIndicator"].setColor(0.8078,0.8039,0.8078); + obj["DOOROXY-PR"].setColor(0.0509,0.7529,0.2941); + obj["DOOROXY-PR"].setText("1300"); + } else { + obj["DOOROXY-OxyIndicator"].setColor(0.7333,0.3803,0); + obj["DOOROXY-PR"].setColor(0.7333,0.3803,0); + obj["DOOROXY-PR"].setText("0"); + } + }), + props.UpdateManager.FromHashValue("pressVS", nil, func(val) { + if (val > 9950) { + obj["DOOR-VS"].setText(sprintf("%+4.0f", 9950)); + } else if (val < -9950) { + obj["DOOR-VS"].setText(sprintf("%+4.0f", -9950)); + } else { + obj["DOOR-VS"].setText(sprintf("%+4.0f", math.round(val,50))); + } + + if (abs(val) > 2000) { + obj["DOOR-VS"].setColor(0.7333,0.3803,0); + } else { + obj["DOOR-VS"].setColor(0.0509,0.7529,0.2941); + } + }), + props.UpdateManager.FromHashValue("FWCPhase", nil, func(val) { + if (val >= 5 and val <= 7) { + obj["DOOR-VS-Container"].show(); + } else { + obj["DOOR-VS-Container"].hide(); + } + }), + ]; + + obj.displayedGForce = 0; + obj.updateItemsBottom = [ + props.UpdateManager.FromHashValue("acconfigUnits", nil, func(val) { + obj.units = val; + if (val) { + obj["GW-weight-unit"].setText("KG"); + } else { + obj["GW-weight-unit"].setText("LBS"); + } + }), + props.UpdateManager.FromHashValue("hour", nil, func(val) { + obj["UTCh"].setText(sprintf("%02d", val)); + }), + props.UpdateManager.FromHashValue("minute", nil, func(val) { + obj["UTCm"].setText(sprintf("%02d", val)); + }), + props.UpdateManager.FromHashValue("gForce", 0.05, func(val) { + if (obj.displayedGForce) { + obj["GLoad"].setText("G.LOAD " ~ sprintf("%3.1f", val)); + } + }), + props.UpdateManager.FromHashValue("gForceDisplay", nil, func(val) { + if ((val == 1 and !obj.displayedGForce) or (val != 0 and obj.displayedGForce)) { + obj.displayedGForce = 1; + obj["GLoad"].show(); + } else { + obj.displayedGForce = 0; + obj["GLoad"].hide(); + } + }), + ]; + return obj; + }, + getKeysBottom: func() { + return ["TAT","SAT","GW","UTCh","UTCm","GLoad","GW-weight-unit"]; + }, + getKeys: func() { + return["Bulk","BulkLine","BulkLbl","Exit1L","Exit1R","Cabin1Left","Cabin1LeftLbl","Cabin1LeftLine","Cabin1LeftSlide","Cabin1Right","Cabin1RightLbl","Cabin1RightLine","Cabin1RightSlide","Cabin2Left","Cabin2LeftLbl", + "Cabin2LeftLine","Cabin2LeftSlide","Cabin2Right","Cabin2RightLbl","Cabin2RightLine","Cabin2RightSlide","Cabin3Left","Cabin3LeftLbl","Cabin3LeftLine","Cabin3LeftSlide","Cabin3Right","Cabin3RightLbl","Cabin3RightLine","Cabin3RightSlide","AvionicsLine1", + "AvionicsLbl1","AvionicsLine2","AvionicsLbl2","Cargo1Line","Cargo1Lbl","Cargo1Door","Cargo2Line","Cargo2Lbl","Cargo2Door","ExitLSlide","ExitLLine","ExitLLbl","ExitRSlide","ExitRLine","ExitRLbl","Cabin4Left","Cabin4LeftLbl","Cabin4LeftLine", + "Cabin4LeftSlide","Cabin4Right","Cabin4RightLbl","Cabin4RightLine","Cabin4RightSlide","DOOROXY-REGUL-LO-PR","DOOROXY-PR","DOOROXY-OxyIndicator","DOOR-VS","DOOR-VS-Container"]; + }, + updateBottom: func(notification) { + foreach(var update_item_bottom; me.updateItemsBottom) + { + update_item_bottom.update(notification); + } + + if (fmgc.FMGCInternal.fuelRequest and fmgc.FMGCInternal.blockConfirmed and !fmgc.FMGCInternal.fuelCalculating and notification.FWCPhase != 1) { + if (me.units) { + me["GW"].setText(sprintf("%s", math.round(fmgc.FMGCInternal.fuelPredGw * 1000 * LBS2KGS, 100))); + } else { + me["GW"].setText(sprintf("%s", math.round(fmgc.FMGCInternal.fuelPredGw * 1000, 100))); + } + me["GW"].setColor(0.0509,0.7529,0.2941); + } else { + me["GW"].setText(sprintf("%s", "-----")); + me["GW"].setColor(0.0901,0.6039,0.7176); + } + + if (dmc.DMController.DMCs[1].outputs[4] != nil) { + me["SAT"].setText(sprintf("%+2.0f", dmc.DMController.DMCs[1].outputs[4].getValue())); + me["SAT"].setColor(0.0509,0.7529,0.2941); + } else { + me["SAT"].setText(sprintf("%s", "XX")); + me["SAT"].setColor(0.7333,0.3803,0); + } + + if (dmc.DMController.DMCs[1].outputs[5] != nil) { + me["TAT"].setText(sprintf("%+2.0f", dmc.DMController.DMCs[1].outputs[5].getValue())); + me["TAT"].setColor(0.0509,0.7529,0.2941); + } else { + me["TAT"].setText(sprintf("%s", "XX")); + me["TAT"].setColor(0.7333,0.3803,0); + } + }, + update: func(notification) { + me.updatePower(); + + if (me.test.getVisible() == 1) { + me.updateTest(notification); + } + + if (me.group.getVisible() == 0) { + return; + } + + foreach(var update_item; me.update_items) + { + update_item.update(notification); + } + + me.updateBottom(notification); + }, + updatePower: func() { + if (me.name == ecam.SystemDisplayController.displayedPage.name) { + if (du4_lgt.getValue() > 0.01 and systems.ELEC.Bus.ac2.getValue() >= 110) { + if (du4_test_time.getValue() + du4_test_amount.getValue() >= pts.Sim.Time.elapsedSec.getValue()) { + me.group.setVisible(0); + me.test.setVisible(1); + } else { + me.group.setVisible(1); + me.test.setVisible(0); + } + } else { + me.group.setVisible(0); + me.test.setVisible(0); + } + } else { + me.group.setVisible(0); + # don't hide the test group; just let whichever page is active control it + } + }, +}; + +var input = { + doorL1: "/sim/model/door-positions/doorl1/position-norm", + doorL4: "/sim/model/door-positions/doorl4/position-norm", + doorR1: "/sim/model/door-positions/doorr1/position-norm", + doorR4: "/sim/model/door-positions/doorr4/position-norm", + cargoAft: "/sim/model/door-positions/cargoaft/position-norm", + cargoBulk: "/sim/model/door-positions/cargobulk/position-norm", + cargoFwd: "/sim/model/door-positions/cargofwd/position-norm", + oxyPB: "/controls/oxygen/crewOxyPB", +}; + +foreach (var name; keys(input)) { + emesary.GlobalTransmitter.NotifyAll(notifications.FrameNotificationAddProperty.new("A320 System Display", name, input[name])); +} \ No newline at end of file diff --git a/Models/Instruments/Lower-ECAM/Lower-ECAM-elec.nas b/Models/Instruments/Lower-ECAM/Lower-ECAM-elec.nas new file mode 100644 index 00000000..6b7ab26e --- /dev/null +++ b/Models/Instruments/Lower-ECAM/Lower-ECAM-elec.nas @@ -0,0 +1,827 @@ +# A3XX Lower ECAM Canvas +# Copyright (c) 2021 Josh Davidson (Octal450) and Jonathan Redpath + +var canvas_lowerECAMPageElec = +{ + new: func(svg,name) { + var obj = {parents: [canvas_lowerECAMPageElec,canvas_lowerECAM_base] }; + obj.group = obj.canvas.createGroup(); + obj.name = name; + + canvas.parsesvg(obj.group, svg, {"font-mapper": obj.font_mapper} ); + + foreach(var key; obj.getKeys()) { + obj[key] = obj.group.getElementById(key); + }; + + foreach(var key; obj.getKeysBottom()) { + obj[key] = obj.group.getElementById(key); + }; + + obj.units = acconfig_weight_kgs.getValue(); + + # init + obj["IDG1-LOPR"].hide(); + obj["IDG2-LOPR"].hide(); + obj["Shed-label"].hide(); + obj["IDG2-RISE-label"].hide(); + obj["IDG2-RISE-Value"].hide(); + obj["IDG1-RISE-label"].hide(); + obj["IDG1-RISE-Value"].hide(); + + obj.update_items = [ + props.UpdateManager.FromHashValue("apuLoad", 0.1, func(val) { + obj["APUGenLoad"].setText(sprintf("%s", math.round(val))); + + if (val < 110) { + obj["APUGenHz"].setColor(0.0509,0.7529,0.2941); + } else { + obj["APUGenHz"].setColor(0.7333,0.3803,0); + } + }), + props.UpdateManager.FromHashValue("apuHertz", 0.5, func(val) { + if (val == 0) { + obj["APUGenHz"].setText(sprintf("XX")); + } else { + obj["APUGenHz"].setText(sprintf("%s", math.round(val))); + } + + if (val >= 390 and val <= 410) { + obj["APUGenHz"].setColor(0.0509,0.7529,0.2941); + } else { + obj["APUGenHz"].setColor(0.7333,0.3803,0); + } + }), + props.UpdateManager.FromHashValue("apuVolt", 0.1, func(val) { + obj["APUGenVolt"].setText(sprintf("%s", math.round(val))); + + if (val >= 110 and val <= 120) { + obj["APUGenVolt"].setColor(0.0509,0.7529,0.2941); + } else { + obj["APUGenVolt"].setColor(0.7333,0.3803,0); + } + }), + props.UpdateManager.FromHashList(["apuMaster","apuVolt","apuLoad","apuHertz","apuGLC"], nil, func(val) { + if (val.apuMaster == 0) { + obj["APUGentext"].setColor(0.8078,0.8039,0.8078); + } else { + if (val.apuGLC == 0) { + obj["APUGentext"].setColor(0.7333,0.3803,0); + } else if (val.apuVolt > 120 or val.apuVolt < 110 or val.apuHertz > 410 or val.apuHertz < 390 or val.apuLoad >= 100) { + obj["APUGentext"].setColor(0.7333,0.3803,0); + } else { + obj["APUGentext"].setColor(0.8078,0.8039,0.8078); + } + } + }), + props.UpdateManager.FromHashList(["apuMaster","apuGenPB"], nil, func(val) { + if (val.apuMaster == 0) { + obj["APU-content"].hide(); + obj["APUGEN-off"].hide(); + obj["APU-border"].hide(); + } else { + obj["APU-border"].show(); + if (val.apuGenPB == 0) { + obj["APU-content"].hide(); + obj["APUGEN-off"].show(); + } else { + obj["APU-content"].show(); + obj["APUGEN-off"].hide(); + } + } + }), + props.UpdateManager.FromHashValue("elecIDG1Disc", nil, func(val) { + if (!val) { + obj["IDG1-DISC"].show(); + obj["ELEC-IDG-1-label"].setColor(0.7333,0.3803,0); + } else { + obj["IDG1-DISC"].hide(); + obj["ELEC-IDG-1-label"].setColor(0.8078,0.8039,0.8078); + } + }), + props.UpdateManager.FromHashValue("elecIDG2Disc", nil, func(val) { + if (!val) { + obj["IDG2-DISC"].show(); + obj["ELEC-IDG-2-label"].setColor(0.7333,0.3803,0); + } else { + obj["IDG2-DISC"].hide(); + obj["ELEC-IDG-2-label"].setColor(0.8078,0.8039,0.8078); + } + }), + props.UpdateManager.FromHashValue("engine1Running", nil, func(val) { + if (val == 0) { + obj["ELEC-IDG-1-num-label"].setColor(0.7333,0.3803,0); + obj["GEN1-num-label"].setColor(0.7333,0.3803,0); + } else { + obj["ELEC-IDG-1-num-label"].setColor(0.8078,0.8039,0.8078); + obj["GEN1-num-label"].setColor(0.8078,0.8039,0.8078); + } + }), + props.UpdateManager.FromHashValue("engine2Running", nil, func(val) { + if (val == 0) { + obj["ELEC-IDG-2-num-label"].setColor(0.7333,0.3803,0); + obj["GEN2-num-label"].setColor(0.7333,0.3803,0); + } else { + obj["ELEC-IDG-2-num-label"].setColor(0.8078,0.8039,0.8078); + obj["GEN2-num-label"].setColor(0.8078,0.8039,0.8078); + } + }), + props.UpdateManager.FromHashValue("dc1", 0.5, func(val) { + if (val > 25) { + obj["ELEC-DC1-label"].setColor(0.0509,0.7529,0.2941); + } else { + obj["ELEC-DC1-label"].setColor(0.7333,0.3803,0); + } + }), + props.UpdateManager.FromHashValue("dc2", 0.5, func(val) { + if (val > 25) { + obj["ELEC-DC2-label"].setColor(0.0509,0.7529,0.2941); + } else { + obj["ELEC-DC2-label"].setColor(0.7333,0.3803,0); + } + }), + props.UpdateManager.FromHashValue("dcEss", 0.5, func(val) { + if (val > 25) { + obj["ELEC-DCESS-label"].setColor(0.0509,0.7529,0.2941); + } else { + obj["ELEC-DCESS-label"].setColor(0.7333,0.3803,0); + } + }), + props.UpdateManager.FromHashValue("elecAC1", 0.5, func(val) { + if (val >= 110) { + obj["ELEC-AC1-label"].setColor(0.0509,0.7529,0.2941); + obj["AC1-in"].show(); + obj["ELEC-Line-AC1-TR1"].show(); + } else { + obj["ELEC-AC1-label"].setColor(0.7333,0.3803,0); + obj["AC1-in"].hide(); + obj["ELEC-Line-AC1-TR1"].hide(); + } + }), + props.UpdateManager.FromHashValue("elecAC2", 0.5, func(val) { + if (val >= 110) { + obj["ELEC-AC2-label"].setColor(0.0509,0.7529,0.2941); + obj["AC2-in"].show(); + obj["ELEC-Line-AC2-TR2"].show(); + } else { + obj["ELEC-AC2-label"].setColor(0.7333,0.3803,0); + obj["AC2-in"].hide(); + obj["ELEC-Line-AC2-TR2"].hide(); + } + }), + props.UpdateManager.FromHashValue("elecACEss", 0.5, func(val) { + if (val >= 110) { + obj["ELEC-ACESS-label"].setColor(0.0509,0.7529,0.2941); + } else { + obj["ELEC-ACESS-label"].setColor(0.7333,0.3803,0); + } + }), + props.UpdateManager.FromHashValue("elecACEssShed", 0.5, func(val) { + if (val >= 110) { + obj["ACESS-SHED"].hide(); + } else { + obj["ACESS-SHED"].show(); + } + }), + props.UpdateManager.FromHashValue("ElecGalleyShed", nil, func(val) { + if (val) { + obj["GalleyShed"].show(); + } else { + obj["GalleyShed"].hide(); + } + }), + props.UpdateManager.FromHashList(["elecBat1Switch","elecBat2Switch","dcBat"], nil, func(val) { + if (val.elecBat1Switch or val.elecBat2Switch) { + obj["ELEC-DCBAT-label"].setText("DC BAT"); + if (val.dcBat > 25) { + obj["ELEC-DCBAT-label"].setColor(0.0509,0.7529,0.2941); + } else { + obj["ELEC-DCBAT-label"].setColor(0.7333,0.3803,0); + } + } else { + obj["ELEC-DCBAT-label"].setText("XX"); # BCL not powered hence no voltage info supplied from BCL + obj["ELEC-DCBAT-label"].setColor(0.7333,0.3803,0); + } + }), + props.UpdateManager.FromHashList(["elecBat1Switch","elecBat1Volt","elecBat1Amp","elecBat1Direction","elecBat1Fault"], nil, func(val) { + if (val.elecBat1Switch == 0) { + obj["BAT1-OFF"].show(); + obj["BAT1-content"].hide(); + obj["BAT1-discharge"].hide(); + obj["BAT1-charge"].hide(); + } else { + obj["BAT1-OFF"].hide(); + obj["BAT1-content"].show(); + obj["Bat1Ampere"].setText(sprintf("%2.0f", val.elecBat1Amp)); + + obj["Bat1Volt"].setText(sprintf("%2.0f", val.elecBat1Volt)); + + if (val.elecBat1Volt >= 24.95 and val.elecBat1Volt <= 31.05) { + obj["Bat1Volt"].setColor(0.0509,0.7529,0.2941); + } else { + obj["Bat1Volt"].setColor(0.7333,0.3803,0); + } + + if (val.elecBat1Amp > 5 and val.elecBat1Direction == 1) { + obj["Bat1Ampere"].setColor(0.7333,0.3803,0); + } else { + obj["Bat1Ampere"].setColor(0.0509,0.7529,0.2941); + } + + if (val.elecBat1Direction == 0) { + obj["BAT1-discharge"].hide(); + obj["BAT1-charge"].hide(); + } else { + if (val.elecBat1Direction == -1) { + obj["BAT1-charge"].show(); + obj["BAT1-discharge"].hide(); + } else { + obj["BAT1-discharge"].show(); + obj["BAT1-charge"].hide(); + } + } + } + + if (val.elecBat1Fault or val.elecBat1Volt < 25 or val.elecBat1Volt > 31 or val.elecBat1Amp > 5) { + obj["BAT1-label"].setColor(0.7333,0.3803,0); + } else { + obj["BAT1-label"].setColor(0.8078,0.8039,0.8078); + } + }), + props.UpdateManager.FromHashList(["elecBat2Switch","elecBat2Volt","elecBat2Amp","elecBat2Direction","elecBat2Fault"], nil, func(val) { + if (val.elecBat2Switch == 0) { + obj["BAT2-OFF"].show(); + obj["BAT2-content"].hide(); + obj["BAT2-discharge"].hide(); + obj["BAT2-charge"].hide(); + } else { + obj["BAT2-OFF"].hide(); + obj["BAT2-content"].show(); + obj["Bat2Ampere"].setText(sprintf("%2.0f", val.elecBat2Amp)); + + obj["Bat2Volt"].setText(sprintf("%2.0f", val.elecBat2Volt)); + + if (val.elecBat2Volt >= 24.95 and val.elecBat2Volt <= 31.05) { + obj["Bat2Volt"].setColor(0.0509,0.7529,0.2941); + } else { + obj["Bat2Volt"].setColor(0.7333,0.3803,0); + } + + if (val.elecBat2Amp > 5 and val.elecBat2Direction == 1) { + obj["Bat2Ampere"].setColor(0.7333,0.3803,0); + } else { + obj["Bat2Ampere"].setColor(0.0509,0.7529,0.2941); + } + + if (val.elecBat2Direction == 0) { + obj["BAT2-discharge"].hide(); + obj["BAT2-charge"].hide(); + } else { + if (val.elecBat2Direction == -1) { + obj["BAT2-charge"].show(); + obj["BAT2-discharge"].hide(); + } else { + obj["BAT2-discharge"].show(); + obj["BAT2-charge"].hide(); + } + } + } + + if (val.elecBat2Fault or val.elecBat2Volt < 25 or val.elecBat2Volt > 31 or val.elecBat2Amp > 5) { + obj["BAT2-label"].setColor(0.7333,0.3803,0); + } else { + obj["BAT2-label"].setColor(0.8078,0.8039,0.8078); + } + }), + props.UpdateManager.FromHashList(["elecTR1Amp","elecTR1Volt"], nil, func(val) { + obj["TR1Volt"].setText(sprintf("%s", math.round(val.elecTR1Volt))); + obj["TR1Ampere"].setText(sprintf("%s", math.round(val.elecTR1Amp))); + + if (val.elecTR1Volt < 25 or val.elecTR1Volt > 31 or val.elecTR1Amp < 5) { + obj["TR1-label"].setColor(0.7333,0.3803,0); + } else { + obj["TR1-label"].setColor(0.8078,0.8039,0.8078); + } + + if (val.elecTR1Volt < 25 or val.elecTR1Volt > 31) { + obj["TR1Volt"].setColor(0.7333,0.3803,0); + } else { + obj["TR1Volt"].setColor(0.0509,0.7529,0.2941); + } + + if (val.elecTR1Amp < 5) { + obj["TR1Ampere"].setColor(0.7333,0.3803,0); + } else { + obj["TR1Ampere"].setColor(0.0509,0.7529,0.2941); + } + }), + props.UpdateManager.FromHashList(["elecTR2Amp","elecTR2Volt"], nil, func(val) { + obj["TR2Volt"].setText(sprintf("%s", math.round(val.elecTR2Volt))); + obj["TR2Ampere"].setText(sprintf("%s", math.round(val.elecTR2Amp))); + + if (val.elecTR2Volt < 25 or val.elecTR2Volt > 31 or val.elecTR2Amp < 5) { + obj["TR2-label"].setColor(0.7333,0.3803,0); + } else { + obj["TR2-label"].setColor(0.8078,0.8039,0.8078); + } + + if (val.elecTR2Volt < 25 or val.elecTR2Volt > 31) { + obj["TR2Volt"].setColor(0.7333,0.3803,0); + } else { + obj["TR2Volt"].setColor(0.0509,0.7529,0.2941); + } + + if (val.elecTR2Amp < 5) { + obj["TR2Ampere"].setColor(0.7333,0.3803,0); + } else { + obj["TR2Ampere"].setColor(0.0509,0.7529,0.2941); + } + }), + props.UpdateManager.FromHashList(["elecExtHertz","elecExtVolt","elecGroundCart"], nil, func(val) { + if (val.elecGroundCart == 0) { + obj["EXTPWR-group"].hide(); + } else { + obj["EXTPWR-group"].show(); + obj["ExtVolt"].setText(sprintf("%s", math.round(val.elecExtVolt))); + obj["ExtHz"].setText(sprintf("%s", math.round(val.elecExtHertz))); + + if (val.elecExtHertz > 410 or val.elecExtHertz < 390 or val.elecExtVolt > 120 or val.elecExtVolt < 110) { + obj["EXTPWR-label"].setColor(0.7333,0.3803,0); + } else { + obj["EXTPWR-label"].setColor(0.0509,0.7529,0.2941); + } + + if (val.elecExtHertz > 410 or val.elecExtHertz < 390) { + obj["ExtHz"].setColor(0.7333,0.3803,0); + } else { + obj["ExtHz"].setColor(0.0509,0.7529,0.2941); + } + + if (val.elecExtVolt > 120 or val.elecExtVolt < 110) { + obj["ExtVolt"].setColor(0.7333,0.3803,0); + } else { + obj["ExtVolt"].setColor(0.0509,0.7529,0.2941); + } + } + }), + props.UpdateManager.FromHashValue("elecDCTie1", nil, func(val) { + if (val) { + obj["ELEC-Line-DC1-DCESS_DCBAT"].show(); + } else { + obj["ELEC-Line-DC1-DCESS_DCBAT"].hide(); + } + }), + props.UpdateManager.FromHashValue("elecDCTie2", nil, func(val) { + if (val) { + obj["ELEC-Line-DC2-DCESS_DCBAT"].show(); + obj["ELEC-Line-DC2-DCBAT"].show(); + } else { + obj["ELEC-Line-DC2-DCESS_DCBAT"].hide(); + obj["ELEC-Line-DC2-DCBAT"].hide(); + } + }), + props.UpdateManager.FromHashList(["elecDcEssFeedBat","elecDCTie1"], nil, func(val) { + if (val.elecDcEssFeedBat or val.elecDCTie1) { + obj["ELEC-Line-DC1-DCBAT"].show(); + } else { + obj["ELEC-Line-DC1-DCBAT"].hide(); + } + }), + props.UpdateManager.FromHashValue("elecDcEssFeedBat", nil, func(val) { + if (val) { + obj["ELEC-Line-DC1-DCESS"].show(); + } else { + obj["ELEC-Line-DC1-DCESS"].hide(); + } + }), + props.UpdateManager.FromHashValue("elecTrEssContact", nil, func(val) { + if (val) { + obj["ELEC-Line-ESSTR-DCESS"].show(); + } else { + obj["ELEC-Line-ESSTR-DCESS"].hide(); + } + }), + props.UpdateManager.FromHashValue("elecAcEssEmerGenFeed", nil, func(val) { + if (val) { + obj["EMERGEN-out"].show(); + obj["ELEC-Line-Emergen-ESSTR"].show(); + } else { + obj["EMERGEN-out"].hide(); + obj["ELEC-Line-Emergen-ESSTR"].hide(); + } + }), + props.UpdateManager.FromHashList(["elecTREssAmp","elecTREssVolt","elecTrEssContact"], nil, func(val) { + if (val.elecTrEssContact) { + obj["ESSTR-group"].show(); + obj["ESSTR-Volt"].setText(sprintf("%s", math.round(val.elecTREssVolt))); + obj["ESSTR-Ampere"].setText(sprintf("%s", math.round(val.elecTREssAmp))); + + if (val.elecTREssVolt < 25 or val.elecTREssVolt > 31 or val.elecTREssAmp < 5) { + obj["ESSTR"].setColor(0.7333,0.3803,0); + } else { + obj["ESSTR"].setColor(0.8078,0.8039,0.8078); + } + + if (val.elecTREssVolt < 25 or val.elecTREssVolt > 31) { + obj["ESSTR-Volt"].setColor(0.7333,0.3803,0); + } else { + obj["ESSTR-Volt"].setColor(0.0509,0.7529,0.2941); + } + + if (val.elecTREssAmp < 5) { + obj["ESSTR-Ampere"].setColor(0.7333,0.3803,0); + } else { + obj["ESSTR-Ampere"].setColor(0.0509,0.7529,0.2941); + } + } else { + obj["ESSTR-group"].hide(); + } + }), + props.UpdateManager.FromHashList(["elecEmerGenHertz","elecEmerGenVolts","elecEmerGenVoltsRelay"], nil, func(val) { + if (val.elecEmerGenVolts == 0) { + obj["EMERGEN-group"].hide(); + obj["ELEC-Line-Emergen-ESSTR"].hide(); + obj["ELEC-Line-Emergen-ESSTR-off"].show(); + obj["EMERGEN-Label-off"].show(); + } else { + obj["EMERGEN-group"].show(); + obj["ELEC-Line-Emergen-ESSTR"].show(); + obj["ELEC-Line-Emergen-ESSTR-off"].hide(); + obj["EMERGEN-Label-off"].hide(); + + obj["EmergenVolt"].setText(sprintf("%s", math.round(val.elecEmerGenVoltsRelay))); + obj["EmergenHz"].setText(sprintf("%s", math.round(val.elecEmerGenHertz))); + + if (val.elecEmerGenVoltsRelay > 120 or val.elecEmerGenVoltsRelay < 110 or val.elecEmerGenHertz > 410 or val.elecEmerGenHertz < 390) { + obj["Emergen-Label"].setColor(0.7333,0.3803,0); + } else { + obj["Emergen-Label"].setColor(0.8078,0.8039,0.8078); + } + + if (val.elecEmerGenVoltsRelay > 120 or val.elecEmerGenVoltsRelay < 110) { + obj["EmergenVolt"].setColor(0.7333,0.3803,0); + } else { + obj["EmergenVolt"].setColor(0.0509,0.7529,0.2941); + } + + if (val.elecEmerGenHertz > 410 or val.elecEmerGenHertz < 390) { + obj["EmergenHz"].setColor(0.7333,0.3803,0); + } else { + obj["EmergenHz"].setColor(0.0509,0.7529,0.2941); + } + } + }), + props.UpdateManager.FromHashList(["elecGen1Switch","elecGen1Hertz","elecGen1Volt","engine1Running","elecGen1Relay"], nil, func(val) { + if (val.elecGen1Switch == 0) { + obj["GEN1-content"].hide(); + obj["GEN1-off"].show(); + if (val.elecGen1Relay) { + obj["GEN1-label"].setColor(0.7333,0.3803,0); + } else { + obj["GEN1-label"].setColor(0.8078,0.8039,0.8078); + } + } else { + obj["GEN1-content"].show(); + obj["GEN1-off"].hide(); + obj["Gen1Volt"].setText(sprintf("%s", math.round(val.elecGen1Volt))); + + if (val.elecGen1Hertz == 0) { + obj["Gen1Hz"].setText(sprintf("XX")); + } else { + obj["Gen1Hz"].setText(sprintf("%s", math.round(val.elecGen1Hertz))); + } + + if (val.elecGen1Volt > 120 or val.elecGen1Volt < 110 or val.elecGen1Hertz > 410 or val.elecGen1Hertz < 390) { + obj["GEN1-label"].setColor(0.7333,0.3803,0); + } else { + obj["GEN1-label"].setColor(0.8078,0.8039,0.8078); + } + + if (val.elecGen1Volt > 120 or val.elecGen1Volt < 110) { + obj["Gen1Volt"].setColor(0.7333,0.3803,0); + } else { + obj["Gen1Volt"].setColor(0.0509,0.7529,0.2941); + } + + if (val.elecGen1Hertz > 410 or val.elecGen1Hertz < 390) { + obj["Gen1Hz"].setColor(0.7333,0.3803,0); + } else { + obj["Gen1Hz"].setColor(0.0509,0.7529,0.2941); + } + } + }), + props.UpdateManager.FromHashList(["elecGen2Switch","elecGen2Hertz","elecGen2Volt","engine1Running","elecGen2Relay"], nil, func(val) { + if (val.elecGen2Switch == 0) { + obj["GEN2-content"].hide(); + obj["GEN2-off"].show(); + if (val.elecGen2Relay) { + obj["GEN2-label"].setColor(0.7333,0.3803,0); + } else { + obj["GEN2-label"].setColor(0.8078,0.8039,0.8078); + } + } else { + obj["GEN2-content"].show(); + obj["GEN2-off"].hide(); + obj["Gen2Volt"].setText(sprintf("%s", math.round(val.elecGen2Volt))); + + if (val.elecGen2Hertz == 0) { + obj["Gen2Hz"].setText(sprintf("XX")); + } else { + obj["Gen2Hz"].setText(sprintf("%s", math.round(val.elecGen2Hertz))); + } + + if (val.elecGen2Volt > 120 or val.elecGen2Volt < 110 or val.elecGen2Hertz > 410 or val.elecGen2Hertz < 390) { + obj["GEN2-label"].setColor(0.7333,0.3803,0); + } else { + obj["GEN2-label"].setColor(0.8078,0.8039,0.8078); + } + + if (val.elecGen2Volt > 120 or val.elecGen2Volt < 110) { + obj["Gen2Volt"].setColor(0.7333,0.3803,0); + } else { + obj["Gen2Volt"].setColor(0.0509,0.7529,0.2941); + } + + if (val.elecGen2Hertz > 410 or val.elecGen2Hertz < 390) { + obj["Gen2Hz"].setColor(0.7333,0.3803,0); + } else { + obj["Gen2Hz"].setColor(0.0509,0.7529,0.2941); + } + } + }), + props.UpdateManager.FromHashList(["elecTR1Contact","elecAC1"], nil, func(val) { + if (val.elecTR1Contact) { + if (val.elecAC1 < 110) { + obj["ELEC-Line-AC1-TR1"].setColorFill(0.7333,0.3803,0); + } else { + obj["ELEC-Line-AC1-TR1"].setColorFill(0.0509,0.7529,0.2941); + } + obj["ELEC-Line-TR1-DC1"].show(); + } else { + obj["ELEC-Line-TR1-DC1"].hide(); + } + }), + props.UpdateManager.FromHashList(["elecTR2Contact","elecAC2"], nil, func(val) { + if (val.elecTR2Contact) { + if (val.elecAC2 < 110) { + obj["ELEC-Line-AC2-TR2"].setColorFill(0.7333,0.3803,0); + } else { + obj["ELEC-Line-AC2-TR2"].setColorFill(0.0509,0.7529,0.2941); + } + obj["ELEC-Line-TR2-DC2"].show(); + } else { + obj["ELEC-Line-TR2-DC2"].hide(); + } + }), + props.UpdateManager.FromHashList(["elecAcEssFeed1","elecAcEssFeed2","elecAC1","elecAC2"], nil, func(val) { + if (val.elecAcEssFeed1) { + if (val.elecAC1 >= 110) { + obj["ELEC-Line-AC1-ACESS"].show(); + } else { + obj["ELEC-Line-AC1-ACESS"].hide(); + } + obj["ELEC-Line-AC2-ACESS"].hide(); + } elsif (val.elecAcEssFeed2) { + obj["ELEC-Line-AC1-ACESS"].hide(); + if (val.elecAC2 >= 110) { + obj["ELEC-Line-AC2-ACESS"].show(); + } else { + obj["ELEC-Line-AC2-ACESS"].hide(); + } + } else { + obj["ELEC-Line-AC1-ACESS"].hide(); + obj["ELEC-Line-AC2-ACESS"].hide(); + } + }), + props.UpdateManager.FromHashList(["elecGen1Volt","elecGen1GLC"], nil, func(val) { + if (val.elecGen1Volt >= 110 and val.elecGen1GLC) { + obj["ELEC-Line-GEN1-AC1"].show(); + } else { + obj["ELEC-Line-GEN1-AC1"].hide(); + } + }), + props.UpdateManager.FromHashList(["elecGen2Volt","elecGen2GLC"], nil, func(val) { + if (val.elecGen2Volt >= 110 and val.elecGen2GLC) { + obj["ELEC-Line-GEN1-AC1"].show(); + } else { + obj["ELEC-Line-GEN1-AC1"].hide(); + } + }), + props.UpdateManager.FromHashList(["elecAcTie1","elecAcTie2","apuGLC","elecExtEPC","elecGen1GLC","elecGen2GLC"], nil, func(val) { + if (val.apuGLC and (val.elecAcTie1 or val.elecAcTie2)) { + obj["APU-out"].show(); + } else { + obj["APU-out"].hide(); + } + + if (val.elecExtEPC and (val.elecAcTie1 or val.elecAcTie2)) { + obj["EXT-out"].show(); + } else { + obj["EXT-out"].hide(); + } + + + if (val.elecAcTie1 and val.elecAcTie2) { + obj["ELEC-Line-APU-AC1"].show(); + obj["ELEC-Line-APU-EXT"].show(); + obj["ELEC-Line-EXT-AC2"].show(); + } else { + if (val.elecAcTie1) { + obj["ELEC-Line-APU-AC1"].show(); + } else { + obj["ELEC-Line-APU-AC1"].hide(); + } + + if ((val.elecAcTie2 and val.apuGLC and !val.elecGen2GLC) or (val.elecAcTie1 and val.elecExtEPC and !val.elecGen1GLC)) { + obj["ELEC-Line-APU-EXT"].show(); + } else { + obj["ELEC-Line-APU-EXT"].hide(); + } + + if (val.elecAcTie2) { + obj["ELEC-Line-EXT-AC2"].show(); + } else { + obj["ELEC-Line-EXT-AC2"].hide(); + } + } + }), + props.UpdateManager.FromHashList(["elecACEss","ELEC-Line-ACESS-TRESS","elecTR1Contact","elecTR2Contact"], nil, func(val) { + if (val.elecACEss >= 110 and !val.elecAcEssEmerGenFeed and (!val.elecTR1Contact or !val.elecTR2Contact)) { + obj["ELEC-Line-ACESS-TRESS"].show(); + } else { + obj["ELEC-Line-ACESS-TRESS"].hide(); + } + }), + ]; + + obj.displayedGForce = 0; + obj.updateItemsBottom = [ + props.UpdateManager.FromHashValue("acconfigUnits", nil, func(val) { + obj.units = val; + if (val) { + obj["GW-weight-unit"].setText("KG"); + } else { + obj["GW-weight-unit"].setText("LBS"); + } + }), + props.UpdateManager.FromHashValue("hour", nil, func(val) { + obj["UTCh"].setText(sprintf("%02d", val)); + }), + props.UpdateManager.FromHashValue("minute", nil, func(val) { + obj["UTCm"].setText(sprintf("%02d", val)); + }), + props.UpdateManager.FromHashValue("gForce", 0.05, func(val) { + if (obj.displayedGForce) { + obj["GLoad"].setText("G.LOAD " ~ sprintf("%3.1f", val)); + } + }), + props.UpdateManager.FromHashValue("gForceDisplay", nil, func(val) { + if ((val == 1 and !obj.displayedGForce) or (val != 0 and obj.displayedGForce)) { + obj.displayedGForce = 1; + obj["GLoad"].show(); + } else { + obj.displayedGForce = 0; + obj["GLoad"].hide(); + } + }), + ]; + return obj; + }, + getKeysBottom: func() { + return ["TAT","SAT","GW","UTCh","UTCm","GLoad","GW-weight-unit"]; + }, + getKeys: func() { + return ["TAT","SAT","GW","UTCh","UTCm","GLoad","GW-weight-unit","BAT1-label","Bat1Volt","Bat1Ampere","BAT2-label","Bat2Volt","Bat2Ampere","BAT1-charge","BAT1-discharge","BAT2-charge","BAT2-discharge","ELEC-Line-DC1-DCBAT","ELEC-Line-DC1-DCESS","ELEC-Line-DC2-DCBAT", + "ELEC-Line-DC1-DCESS_DCBAT","ELEC-Line-DC2-DCESS_DCBAT","ELEC-Line-TR1-DC1","ELEC-Line-TR2-DC2","Shed-label","ELEC-Line-ESSTR-DCESS","TR1-label","TR1Volt","TR1Ampere","TR2-label","TR2Volt","TR2Ampere","EMERGEN-group","EmergenVolt","EmergenHz", + "ELEC-Line-Emergen-ESSTR","EMERGEN-Label-off","Emergen-Label","EMERGEN-out","ELEC-Line-ACESS-TRESS","ELEC-Line-AC1-TR1","ELEC-Line-AC2-TR2","ELEC-Line-AC1-ACESS","ELEC-Line-AC2-ACESS","ACESS-SHED","ACESS","AC1-in","AC2-in","ELEC-Line-GEN1-AC1","ELEC-Line-GEN2-AC2", + "ELEC-Line-APU-AC1","ELEC-Line-APU-EXT","ELEC-Line-EXT-AC2","APU-out","EXT-out","EXTPWR-group","ExtVolt","ExtHz","APU-content","APU-border","APUGentext","APUGenLoad","APUGenVolt","APUGenHz","APUGEN-off","GEN1-label","Gen1Load","Gen1Volt","Gen1Hz", + "GEN2-label","Gen2Load","GEN2-off","Gen2Volt","Gen2Hz","ELEC-IDG-1-label","ELEC-IDG-1-num-label","ELEC-IDG-1-Temp","IDG1-LOPR","IDG1-DISC","IDG1-RISE-Value","IDG1-RISE-label","GalleyShed","ELEC-IDG-2-Temp","ELEC-IDG-2-label","ELEC-IDG-2-num-label","IDG2-RISE-label","IDG2-RISE-Value","IDG2-LOPR", + "IDG2-DISC","ESSTR-group","ESSTR","ESSTR-Volt","ESSTR-Ampere","BAT1-content","BAT2-content","BAT1-OFF","BAT2-OFF","GEN1-content","GEN2-content","GEN-1-num-label","GEN-2-num-label","GEN1-off","GEN2-off","GEN1-num-label","GEN2-num-label","EXTPWR-label", + "ELEC-ACESS-SHED-label","ELEC-DCBAT-label","ELEC-DCESS-label","ELEC-DC2-label","ELEC-DC1-label","ELEC-AC1-label","ELEC-AC2-label","ELEC-ACESS-label","ELEC-Line-ESSTR-DCESS-off","ELEC-Line-Emergen-ESSTR-off"]; + }, + updateBottom: func(notification) { + foreach(var update_item_bottom; me.updateItemsBottom) + { + update_item_bottom.update(notification); + } + + if (fmgc.FMGCInternal.fuelRequest and fmgc.FMGCInternal.blockConfirmed and !fmgc.FMGCInternal.fuelCalculating and notification.FWCPhase != 1) { + if (me.units) { + me["GW"].setText(sprintf("%s", math.round(fmgc.FMGCInternal.fuelPredGw * 1000 * LBS2KGS, 100))); + } else { + me["GW"].setText(sprintf("%s", math.round(fmgc.FMGCInternal.fuelPredGw * 1000, 100))); + } + me["GW"].setColor(0.0509,0.7529,0.2941); + } else { + me["GW"].setText(sprintf("%s", "-----")); + me["GW"].setColor(0.0901,0.6039,0.7176); + } + + if (dmc.DMController.DMCs[1].outputs[4] != nil) { + me["SAT"].setText(sprintf("%+2.0f", dmc.DMController.DMCs[1].outputs[4].getValue())); + me["SAT"].setColor(0.0509,0.7529,0.2941); + } else { + me["SAT"].setText(sprintf("%s", "XX")); + me["SAT"].setColor(0.7333,0.3803,0); + } + + if (dmc.DMController.DMCs[1].outputs[5] != nil) { + me["TAT"].setText(sprintf("%+2.0f", dmc.DMController.DMCs[1].outputs[5].getValue())); + me["TAT"].setColor(0.0509,0.7529,0.2941); + } else { + me["TAT"].setText(sprintf("%s", "XX")); + me["TAT"].setColor(0.7333,0.3803,0); + } + }, + update: func(notification) { + me.updatePower(); + + if (me.test.getVisible() == 1) { + me.updateTest(notification); + } + + if (me.group.getVisible() == 0) { + return; + } + + foreach(var update_item; me.update_items) + { + update_item.update(notification); + } + + me.updateBottom(notification); + }, + updatePower: func() { + if (me.name == ecam.SystemDisplayController.displayedPage.name) { + if (du4_lgt.getValue() > 0.01 and systems.ELEC.Bus.ac2.getValue() >= 110) { + if (du4_test_time.getValue() + du4_test_amount.getValue() >= pts.Sim.Time.elapsedSec.getValue()) { + me.group.setVisible(0); + me.test.setVisible(1); + } else { + me.group.setVisible(1); + me.test.setVisible(0); + } + } else { + me.group.setVisible(0); + me.test.setVisible(0); + } + } else { + me.group.setVisible(0); + # don't hide the test group; just let whichever page is active control it + } + }, +}; + +var input = { + elecAcEssFeed1: "/systems/electrical/relay/ac-ess-feed-1/contact-pos", + elecAcEssFeed2: "/systems/electrical/relay/ac-ess-feed-2/contact-pos", + elecBat1Amp: "/systems/electrical/sources/bat-1/amps", + elecBat2Amp: "/systems/electrical/sources/bat-2/amps", + elecBat1Direction: "/systems/electrical/sources/bat-1/direction", + elecBat2Direction: "/systems/electrical/sources/bat-2/direction", + elecBat1Fault: "/systems/electrical/light/bat-1-fault", + elecBat2Fault: "/systems/electrical/light/bat-2-fault", + elecBat1Volt: "/systems/electrical/sources/bat-1/volt", + elecBat2Volt: "/systems/electrical/sources/bat-2/volt", + elecBat1Switch: "/controls/electrical/switches/bat-1", + elecBat2Switch: "/controls/electrical/switches/bat-2", + elecTR1Amp: "/systems/electrical/relay/tr-contactor-1/output-amp", + elecTR2Amp: "/systems/electrical/relay/tr-contactor-2/output-amp", + elecTR1Volt: "/systems/electrical/relay/tr-contactor-1/output", + elecTR2Volt: "/systems/electrical/relay/tr-contactor-2/output", + elecTR1Contact: "/systems/electrical/relay/tr-contactor-1/contact-pos", + elecTR2Contact: "/systems/electrical/relay/tr-contactor-2/contact-pos", + elecTREssAmp: "/systems/electrical/relay/dc-ess-feed-tr/output-amp", + elecTrEssContact: "/systems/electrical/relay/dc-ess-feed-tr/contact-pos", + elecTREssVolt: "/systems/electrical/relay/dc-ess-feed-tr/output", + elecIDG1Disc: "/controls/electrical/switches/idg-1-disc", + elecIDG2Disc: "/controls/electrical/switches/idg-2-disc", + elecGroundCart: "/controls/electrical/ground-cart", + elecExtHertz: "/systems/electrical/sources/ext/output-hertz", + elecExtVolt: "/systems/electrical/sources/ext/output-volt", + elecDCTie1: "/systems/electrical/relay/dc-bus-tie-dc-1/contact-pos", + elecDCTie2: "/systems/electrical/relay/dc-bus-tie-dc-2/contact-pos", + elecDcEssFeedBat: "/systems/electrical/relay/dc-ess-feed-bat/contact-pos", + elecAcEssEmerGenFeed: "/systems/electrical/relay/ac-ess-feed-emer-gen/contact-pos", + elecEmerGenVolts: "/systems/electrical/sources/emer-gen/output-volt", + elecEmerGenVoltsRelay: "/systems/electrical/relay/emer-glc/output", + elecEmerGenHertz: "/systems/electrical/sources/emer-gen/output-hertz", + elecGen1Switch: "/controls/electrical/switches/gen-1", + elecGen1Hertz: "/systems/electrical/sources/idg-1/output-hertz", + elecGen1Volt: "/systems/electrical/sources/idg-1/output-volt", + elecGen1Relay: "/systems/electrical/sources/idg-1/gcr-relay", + elecGen1GLC: "/systems/electrical/relay/gen-1-glc/contact-pos", + elecGen2Switch: "/controls/electrical/switches/gen-2", + elecGen2Hertz: "/systems/electrical/sources/idg-2/output-hertz", + elecGen2Volt: "/systems/electrical/sources/idg-2/output-volt", + elecGen2Relay: "/systems/electrical/sources/idg-2/gcr-relay", + elecGen2GLC: "/systems/electrical/relay/gen-2-glc/contact-pos", + elecAcTie1: "/systems/electrical/relay/ac-bus-ac-bus-tie-1/contact-pos", + elecAcTie2: "/systems/electrical/relay/ac-bus-ac-bus-tie-2/contact-pos", + elecExtEPC: "/systems/electrical/relay/ext-epc/contact-pos", + ElecGalleyShed: "/systems/electrical/some-electric-thingie/galley-shed", +}; + +foreach (var name; keys(input)) { + emesary.GlobalTransmitter.NotifyAll(notifications.FrameNotificationAddProperty.new("A320 System Display", name, input[name])); +} \ No newline at end of file diff --git a/Models/Instruments/Lower-ECAM/Lower-ECAM-eng.nas b/Models/Instruments/Lower-ECAM/Lower-ECAM-eng.nas new file mode 100644 index 00000000..c00d7e5e --- /dev/null +++ b/Models/Instruments/Lower-ECAM/Lower-ECAM-eng.nas @@ -0,0 +1,258 @@ +# A3XX Lower ECAM Canvas +# Copyright (c) 2021 Josh Davidson (Octal450) and Jonathan Redpath + +var fuel_used_lbs1 = props.globals.getNode("/systems/fuel/fuel-used-1", 1); +var fuel_used_lbs2 = props.globals.getNode("/systems/fuel/fuel-used-2", 1); + +var QT2LTR = 0.946353; + +var canvas_lowerECAMPageEng = +{ + new: func(svg,name) { + var obj = {parents: [canvas_lowerECAMPageEng,canvas_lowerECAM_base] }; + obj.group = obj.canvas.createGroup(); + obj.name = name; + + canvas.parsesvg(obj.group, svg, {"font-mapper": obj.font_mapper} ); + + foreach(var key; obj.getKeys()) { + obj[key] = obj.group.getElementById(key); + }; + + foreach(var key; obj.getKeysBottom()) { + obj[key] = obj.group.getElementById(key); + }; + + obj.units = acconfig_weight_kgs.getValue(); + + # init + obj["FUEL-clog-1"].hide(); + obj["FUEL-clog-2"].hide(); + obj["OIL-clog-1"].hide(); + obj["OIL-clog-2"].hide(); + + obj.quantity = [nil, nil]; + + obj.update_items = [ + props.UpdateManager.FromHashValue("engOilQt1", 0.005, func(val) { + if (obj.units) { + obj.quantity[0] = sprintf("%2.1f",(0.1 * math.round(val * QT2LTR * 10,5))); + obj["OilQT1"].setText(sprintf("%s", left(obj.quantity[0], (size(obj.quantity[0]) == 4 ? 2 : 1)))); + obj["OilQT1-decimal"].setText(sprintf("%s", right(obj.quantity[0],1))); + obj["OilQT1-needle"].setRotation(((val * QT2LTR) + 90) * D2R); + } else { + obj.quantity[0] = sprintf("%2.1f",(0.1 * math.round(val * 10,5))); + obj["OilQT1"].setText(sprintf("%s", left(obj.quantity[0], (size(obj.quantity[0]) == 4 ? 2 : 1)))); + obj["OilQT1-decimal"].setText(sprintf("%s", right(obj.quantity[0],1))); + obj["OilQT1-needle"].setRotation((val + 90) * D2R); + } + }), + props.UpdateManager.FromHashValue("engOilQt2", 0.005, func(val) { + if (obj.units) { + obj.quantity[1] = sprintf("%2.1f",(0.1 * math.round(val * QT2LTR * 10,5))); + obj["OilQT2"].setText(sprintf("%s", left(obj.quantity[1], (size(obj.quantity[1]) == 4 ? 2 : 1)))); + obj["OilQT2-decimal"].setText(sprintf("%s", right(obj.quantity[1],1))); + obj["OilQT2-needle"].setRotation(((val * QT2LTR) + 90) * D2R); + } else { + obj.quantity[1] = sprintf("%2.1f",(0.1 * math.round(val * 10,5))); + obj["OilQT2"].setText(sprintf("%s", left(obj.quantity[1], (size(obj.quantity[1]) == 4 ? 2 : 1)))); + obj["OilQT2-decimal"].setText(sprintf("%s", right(obj.quantity[1],1))); + obj["OilQT2-needle"].setRotation((val + 90) * D2R); + } + }), + props.UpdateManager.FromHashValue("engOilPsi1", 0.25, func(val) { + if (val >= 13) { + obj["OilPSI1"].setColor(0.0509,0.7529,0.2941); + obj["OilPSI1-needle"].setColor(0.0509,0.7529,0.2941); + } else { + obj["OilPSI1"].setColor(1,0,0); + obj["OilPSI1-needle"].setColor(1,0,0); + } + + obj["OilPSI1"].setText(sprintf("%s", math.round(val))); + obj["OilPSI1-needle"].setRotation((val + 90) * D2R); + }), + props.UpdateManager.FromHashValue("engOilPsi2", 0.25, func(val) { + if (val >= 13) { + obj["OilPSI2"].setColor(0.0509,0.7529,0.2941); + obj["OilPSI2-needle"].setColor(0.0509,0.7529,0.2941); + } else { + obj["OilPSI2"].setColor(1,0,0); + obj["OilPSI2-needle"].setColor(1,0,0); + } + + obj["OilPSI2"].setText(sprintf("%s", math.round(val))); + obj["OilPSI2-needle"].setRotation((val + 90) * D2R); + }), + props.UpdateManager.FromHashValue("acconfigUnits", nil, func(val) { + if (val) { + obj["Fused-weight-unit"].setText("KG"); + obj["Fused-oil-unit"].setText("LTR"); + # immediately update parameters + obj.quantity[0] = sprintf("%2.1f",(0.1 * math.round(pts.Engines.Engine.oilQt[0].getValue() * QT2LTR * 10,5))); + obj["OilQT1"].setText(sprintf("%s", left(obj.quantity[0], (size(obj.quantity[0]) == 4 ? 2 : 1)))); + obj["OilQT1-decimal"].setText(sprintf("%s", right(obj.quantity[0],1))); + obj["OilQT1-needle"].setRotation(((pts.Engines.Engine.oilQt[0].getValue() * QT2LTR) + 90) * D2R); + obj.quantity[1] = sprintf("%2.1f",(0.1 * math.round(pts.Engines.Engine.oilQt[1].getValue() * QT2LTR * 10,5))); + obj["OilQT2"].setText(sprintf("%s", left(obj.quantity[1], (size(obj.quantity[1]) == 4 ? 2 : 1)))); + obj["OilQT2-decimal"].setText(sprintf("%s", right(obj.quantity[1],1))); + obj["OilQT2-needle"].setRotation(((pts.Engines.Engine.oilQt[1].getValue() * QT2LTR) + 90) * D2R); + obj["FUEL-used-1"].setText(sprintf("%s", math.round(fuel_used_lbs1.getValue() * LBS2KGS, 10))); + obj["FUEL-used-2"].setText(sprintf("%s", math.round(fuel_used_lbs2.getValue() * LBS2KGS, 10))); + } else { + obj["Fused-weight-unit"].setText("LBS"); + obj["Fused-oil-unit"].setText("QT"); + obj.quantity[0] = sprintf("%2.1f",(0.1 * math.round(pts.Engines.Engine.oilQt[0].getValue() * 10,5))); + obj["OilQT1"].setText(sprintf("%s", left(obj.quantity[0], (size(obj.quantity[0]) == 4 ? 2 : 1)))); + obj["OilQT1-decimal"].setText(sprintf("%s", right(obj.quantity[0],1))); + obj["OilQT1-needle"].setRotation((pts.Engines.Engine.oilQt[0].getValue() + 90) * D2R); + obj.quantity[1] = sprintf("%2.1f",(0.1 * math.round(pts.Engines.Engine.oilQt[1].getValue() * 10,5))); + obj["OilQT2"].setText(sprintf("%s", left(obj.quantity[1], (size(obj.quantity[1]) == 4 ? 2 : 1)))); + obj["OilQT2-decimal"].setText(sprintf("%s", right(obj.quantity[1],1))); + obj["OilQT2-needle"].setRotation((pts.Engines.Engine.oilQt[1].getValue() + 90) * D2R); + obj["FUEL-used-1"].setText(sprintf("%s", math.round(fuel_used_lbs1.getValue(), 10))); + obj["FUEL-used-2"].setText(sprintf("%s", math.round(fuel_used_lbs2.getValue(), 10))); + } + }), + props.UpdateManager.FromHashValue("engFuelUsed1", 1, func(val) { + if (obj.units) { + obj["FUEL-used-1"].setText(sprintf("%s", math.round(val * LBS2KGS, 10))); + } else { + obj["FUEL-used-1"].setText(sprintf("%s", math.round(val, 10))); + } + }), + props.UpdateManager.FromHashValue("engFuelUsed2", 1, func(val) { + if (obj.units) { + obj["FUEL-used-2"].setText(sprintf("%s", math.round(val * LBS2KGS, 10))); + } else { + obj["FUEL-used-2"].setText(sprintf("%s", math.round(val, 10))); + } + }), + ]; + + obj.displayedGForce = 0; + obj.updateItemsBottom = [ + props.UpdateManager.FromHashValue("acconfigUnits", nil, func(val) { + obj.units = val; + if (val) { + obj["GW-weight-unit"].setText("KG"); + } else { + obj["GW-weight-unit"].setText("LBS"); + } + }), + props.UpdateManager.FromHashValue("hour", nil, func(val) { + obj["UTCh"].setText(sprintf("%02d", val)); + }), + props.UpdateManager.FromHashValue("minute", nil, func(val) { + obj["UTCm"].setText(sprintf("%02d", val)); + }), + props.UpdateManager.FromHashValue("gForce", 0.05, func(val) { + if (obj.displayedGForce) { + obj["GLoad"].setText("G.LOAD " ~ sprintf("%3.1f", val)); + } + }), + props.UpdateManager.FromHashValue("gForceDisplay", nil, func(val) { + if ((val == 1 and !obj.displayedGForce) or (val != 0 and obj.displayedGForce)) { + obj.displayedGForce = 1; + obj["GLoad"].show(); + } else { + obj.displayedGForce = 0; + obj["GLoad"].hide(); + } + }), + ]; + return obj; + }, + getKeysBottom: func() { + return ["TAT","SAT","GW","UTCh","UTCm","GLoad","GW-weight-unit"]; + }, + getKeys: func() { + return["OilQT1-needle","OilQT2-needle","OilQT1","OilQT2","OilQT1-decimal","OilQT2-decimal","OilPSI1-needle","OilPSI2-needle","OilPSI1","OilPSI2", + "FUEL-used-1","FUEL-used-2", "Fused-weight-unit","Fused-oil-unit","FUEL-clog-1","FUEL-clog-2","OIL-clog-1","OIL-clog-2","OilTemp1","OilTemp2", + "VIB-N1-1","VIB-N1-2","VIB-N2-1","VIB-N2-2"]; + }, + updateBottom: func(notification) { + foreach(var update_item_bottom; me.updateItemsBottom) + { + update_item_bottom.update(notification); + } + + if (fmgc.FMGCInternal.fuelRequest and fmgc.FMGCInternal.blockConfirmed and !fmgc.FMGCInternal.fuelCalculating and notification.FWCPhase != 1) { + if (me.units) { + me["GW"].setText(sprintf("%s", math.round(fmgc.FMGCInternal.fuelPredGw * 1000 * LBS2KGS, 100))); + } else { + me["GW"].setText(sprintf("%s", math.round(fmgc.FMGCInternal.fuelPredGw * 1000, 100))); + } + me["GW"].setColor(0.0509,0.7529,0.2941); + } else { + me["GW"].setText(sprintf("%s", "-----")); + me["GW"].setColor(0.0901,0.6039,0.7176); + } + + if (dmc.DMController.DMCs[1].outputs[4] != nil) { + me["SAT"].setText(sprintf("%+2.0f", dmc.DMController.DMCs[1].outputs[4].getValue())); + me["SAT"].setColor(0.0509,0.7529,0.2941); + } else { + me["SAT"].setText(sprintf("%s", "XX")); + me["SAT"].setColor(0.7333,0.3803,0); + } + + if (dmc.DMController.DMCs[1].outputs[5] != nil) { + me["TAT"].setText(sprintf("%+2.0f", dmc.DMController.DMCs[1].outputs[5].getValue())); + me["TAT"].setColor(0.0509,0.7529,0.2941); + } else { + me["TAT"].setText(sprintf("%s", "XX")); + me["TAT"].setColor(0.7333,0.3803,0); + } + }, + update: func(notification) { + me.updatePower(); + + if (me.test.getVisible() == 1) { + me.updateTest(notification); + } + + if (me.group.getVisible() == 0) { + return; + } + + foreach(var update_item; me.update_items) + { + update_item.update(notification); + } + + me.updateBottom(notification); + }, + updatePower: func() { + if (me.name == ecam.SystemDisplayController.displayedPage.name) { + if (du4_lgt.getValue() > 0.01 and systems.ELEC.Bus.ac2.getValue() >= 110) { + if (du4_test_time.getValue() + du4_test_amount.getValue() >= pts.Sim.Time.elapsedSec.getValue()) { + me.group.setVisible(0); + me.test.setVisible(1); + } else { + me.group.setVisible(1); + me.test.setVisible(0); + } + } else { + me.group.setVisible(0); + me.test.setVisible(0); + } + } else { + me.group.setVisible(0); + # don't hide the test group; just let whichever page is active control it + } + }, +}; + +var input = { + engFuelUsed1: "/systems/fuel/fuel-used-1", + engFuelUsed2: "/systems/fuel/fuel-used-2", + engOilQt1: "/engines/engine[0]/oil-qt-actual", + engOilQt2: "/engines/engine[1]/oil-qt-actual", + engOilPsi1: "/engines/engine[0]/oil-psi-actual", + engOilPsi2: "/engines/engine[1]/oil-psi-actual", +}; + +foreach (var name; keys(input)) { + emesary.GlobalTransmitter.NotifyAll(notifications.FrameNotificationAddProperty.new("A320 System Display", name, input[name])); +} \ No newline at end of file diff --git a/Models/Instruments/Lower-ECAM/Lower-ECAM-fctl.nas b/Models/Instruments/Lower-ECAM/Lower-ECAM-fctl.nas new file mode 100644 index 00000000..931d2a65 --- /dev/null +++ b/Models/Instruments/Lower-ECAM/Lower-ECAM-fctl.nas @@ -0,0 +1,611 @@ +# A3XX Lower ECAM Canvas +# Copyright (c) 2021 Josh Davidson (Octal450) and Jonathan Redpath + +var canvas_lowerECAMPageFctl = +{ + new: func(svg,name) { + var obj = {parents: [canvas_lowerECAMPageFctl,canvas_lowerECAM_base] }; + obj.group = obj.canvas.createGroup(); + obj.name = name; + + canvas.parsesvg(obj.group, svg, {"font-mapper": obj.font_mapper} ); + + foreach(var key; obj.getKeys()) { + obj[key] = obj.group.getElementById(key); + }; + + foreach(var key; obj.getKeysBottom()) { + obj[key] = obj.group.getElementById(key); + }; + + obj.units = acconfig_weight_kgs.getValue(); + + # init + + obj.update_items = [ + props.UpdateManager.FromHashList(["green","elac1","elac2","sec2"], nil, func(val) { + if (val.green >= 1450) { + if (val.elac2 or val.sec2) { + obj["elevLgreen"].setColor(0.0509,0.7529,0.2941); + } else { + obj["elevLgreen"].setColor(0.7333,0.3803,0); + } + + if (val.elac2) { + obj["ailLgreen"].setColor(0.0509,0.7529,0.2941); + } else { + obj["ailLgreen"].setColor(0.7333,0.3803,0); + } + if (val.elac1) { + obj["ailRgreen"].setColor(0.0509,0.7529,0.2941); + } else { + obj["ailRgreen"].setColor(0.7333,0.3803,0); + } + obj["ruddergreen"].setColor(0.0509,0.7529,0.2941); + obj["PTgreen"].setColor(0.0509,0.7529,0.2941); + obj["spdbrkgreen"].setColor(0.0509,0.7529,0.2941); + } else { + obj["ailLgreen"].setColor(0.7333,0.3803,0); + obj["ailRgreen"].setColor(0.7333,0.3803,0); + obj["elevLgreen"].setColor(0.7333,0.3803,0); + obj["ruddergreen"].setColor(0.7333,0.3803,0); + obj["PTgreen"].setColor(0.7333,0.3803,0); + obj["spdbrkgreen"].setColor(0.7333,0.3803,0); + } + }), + props.UpdateManager.FromHashList(["yellow","elac2","sec2"], nil, func(val) { + if (val.yellow >= 1450) { + if (val.elac2 or val.sec2) { + obj["elevRyellow"].setColor(0.0509,0.7529,0.2941); + } else { + obj["elevRyellow"].setColor(0.7333,0.3803,0); + } + obj["rudderyellow"].setColor(0.0509,0.7529,0.2941); + obj["PTyellow"].setColor(0.0509,0.7529,0.2941); + obj["spdbrkyellow"].setColor(0.0509,0.7529,0.2941); + } else { + obj["elevRyellow"].setColor(0.7333,0.3803,0); + obj["rudderyellow"].setColor(0.7333,0.3803,0); + obj["PTyellow"].setColor(0.7333,0.3803,0); + obj["spdbrkyellow"].setColor(0.7333,0.3803,0); + } + }), + props.UpdateManager.FromHashList(["blue","elac1","elac2","sec1"], nil, func(val) { + if (val.blue >= 1500) { + if (val.elac1) { + obj["ailLblue"].setColor(0.0509,0.7529,0.2941); + } else { + obj["ailLblue"].setColor(0.7333,0.3803,0); + } + if (val.elac1 or val.sec1) { + obj["elevLblue"].setColor(0.0509,0.7529,0.2941); + obj["elevRblue"].setColor(0.0509,0.7529,0.2941); + } else { + obj["elevLblue"].setColor(0.7333,0.3803,0); + obj["elevRblue"].setColor(0.7333,0.3803,0); + } + if (val.elac2) { + obj["ailRblue"].setColor(0.0509,0.7529,0.2941); + } else { + obj["ailRblue"].setColor(0.7333,0.3803,0); + } + obj["rudderblue"].setColor(0.0509,0.7529,0.2941); + obj["spdbrkblue"].setColor(0.0509,0.7529,0.2941); + } else { + obj["ailLblue"].setColor(0.7333,0.3803,0); + obj["ailRblue"].setColor(0.7333,0.3803,0); + obj["elevLblue"].setColor(0.7333,0.3803,0); + obj["elevRblue"].setColor(0.7333,0.3803,0); + obj["rudderblue"].setColor(0.7333,0.3803,0); + obj["spdbrkblue"].setColor(0.7333,0.3803,0); + } + }), + props.UpdateManager.FromHashValue("fctlAilL", 0.001, func(val) { + obj["ailL"].setTranslation(0, val * 100); + }), + props.UpdateManager.FromHashValue("fctlAilR", 0.001, func(val) { + obj["ailR"].setTranslation(0, val * -100); + }), + props.UpdateManager.FromHashList(["blue","green","elac1","elac2"], nil, func(val) { + if ((val.blue < 1500 or !val.elac1) and (val.green < 1500 or !val.elac2)) { + obj["ailL"].setColor(0.7333,0.3803,0); + } else { + obj["ailL"].setColor(0.0509,0.7529,0.2941); + } + if ((val.green < 1500 or !val.elac1) and (val.blue < 1500 or !val.elac2)) { + obj["ailR"].setColor(0.7333,0.3803,0); + } else { + obj["ailR"].setColor(0.0509,0.7529,0.2941); + } + }), + props.UpdateManager.FromHashValue("fctlElevL", 0.001, func(val) { + obj["elevL"].setTranslation(0, val * 100); + }), + props.UpdateManager.FromHashValue("fctlElevR", 0.001, func(val) { + obj["elevR"].setTranslation(0, val * 100); + }), + props.UpdateManager.FromHashList(["blue","green","yellow","elac1","elac2","sec1","sec2"], nil, func(val) { + if ((val.blue < 1500 or (!val.elac1 and !val.sec1)) and (val.green < 1500 or (!val.elac2 and !val.sec2))) { + obj["elevL"].setColor(0.7333,0.3803,0); + } else { + obj["elevL"].setColor(0.0509,0.7529,0.2941); + } + + if ((val.blue < 1500 or (!val.elac1 and !val.sec1)) and (val.yellow < 1500 or (!val.elac2 and !val.sec2))) { + obj["elevR"].setColor(0.7333,0.3803,0); + } else { + obj["elevR"].setColor(0.0509,0.7529,0.2941); + } + }), + props.UpdateManager.FromHashValue("fctlElevTrim", 0.01, func(val) { + obj["PT"].setText(sprintf("%2.1f", val)); + if (val >= 0.09) { + obj["PTupdn"].setText("UP"); + obj["PTupdn"].show(); + } elsif (val <= -0.09) { + obj["PTupdn"].setText("DN"); + obj["PTupdn"].show(); + } else { + obj["PTupdn"].hide(); + } + }), + props.UpdateManager.FromHashValue("elac1", nil, func(val) { + if (val) { + obj["elac1"].setColor(0.0509,0.7529,0.2941); + obj["path4249"].setColor(0.0509,0.7529,0.2941); + } else { + obj["elac1"].setColor(0.7333,0.3803,0); + obj["path4249"].setColor(0.7333,0.3803,0); + } + }), + props.UpdateManager.FromHashValue("elac2", nil, func(val) { + if (val) { + obj["elac2"].setColor(0.0509,0.7529,0.2941); + obj["path4249-3"].setColor(0.0509,0.7529,0.2941); + } else { + obj["elac2"].setColor(0.7333,0.3803,0); + obj["path4249-3"].setColor(0.7333,0.3803,0); + } + }), + props.UpdateManager.FromHashValue("sec1", nil, func(val) { + if (val) { + obj["sec1"].setColor(0.0509,0.7529,0.2941); + obj["path4249-3-6-7"].setColor(0.0509,0.7529,0.2941); + } else { + obj["sec1"].setColor(0.7333,0.3803,0); + obj["path4249-3-6-7"].setColor(0.7333,0.3803,0); + } + }), + props.UpdateManager.FromHashValue("sec2", nil, func(val) { + if (val) { + obj["sec2"].setColor(0.0509,0.7529,0.2941); + obj["path4249-3-6-7-5"].setColor(0.0509,0.7529,0.2941); + } else { + obj["sec2"].setColor(0.7333,0.3803,0); + obj["path4249-3-6-7-5"].setColor(0.7333,0.3803,0); + } + }), + props.UpdateManager.FromHashValue("sec3", nil, func(val) { + if (val) { + obj["sec3"].setColor(0.0509,0.7529,0.2941); + obj["path4249-3-6"].setColor(0.0509,0.7529,0.2941); + } else { + obj["sec3"].setColor(0.7333,0.3803,0); + obj["path4249-3-6"].setColor(0.7333,0.3803,0); + } + }), + props.UpdateManager.FromHashList(["blue","yellow","green"], 25, func(val) { + if (val.green < 1500 and val.yellow < 1500) { + obj["PT"].setColor(0.7333,0.3803,0); + obj["PTupdn"].setColor(0.7333,0.3803,0); + obj["PTcc"].setColor(0.7333,0.3803,0); + } else { + obj["PT"].setColor(0.0509,0.7529,0.2941); + obj["PTupdn"].setColor(0.0509,0.7529,0.2941); + obj["PTcc"].setColor(0.0901,0.6039,0.7176); + } + + if (val.blue < 1500 and val.yellow < 1500 and val.green < 1500) { + obj["rudder"].setColor(0.7333,0.3803,0); + } else { + obj["rudder"].setColor(0.0509,0.7529,0.2941); + } + }), + props.UpdateManager.FromHashValue("fctlRudder", 0.001, func(val) { + obj["rudder"].setRotation(val * -0.024); + }), + props.UpdateManager.FromHashValue("fctlRudderTrim", 0.01, func(val) { + obj["rudderTrimInd"].setRotation(val * -0.024); + }), + props.UpdateManager.FromHashValue("fctlTHSJam", nil, func(val) { + if (val) { + obj["pitchTrimStatus"].setColor(0.7333,0.3803,0); + } else { + obj["pitchTrimStatus"].setColor(0.8078,0.8039,0.8078); + } + }), + props.UpdateManager.FromHashValue("spoilerL1", 0.5, func(val) { + if (val < 1.5) { + obj["spoiler1Lex"].hide(); + obj["spoiler1Lrt"].show(); + } else { + obj["spoiler1Lrt"].hide(); + obj["spoiler1Lex"].show(); + } + }), + props.UpdateManager.FromHashValue("spoilerL2", 0.5, func(val) { + if (val < 1.5) { + obj["spoiler2Lex"].hide(); + obj["spoiler2Lrt"].show(); + } else { + obj["spoiler2Lrt"].hide(); + obj["spoiler2Lex"].show(); + } + }), + props.UpdateManager.FromHashValue("spoilerL3", 0.5, func(val) { + if (val < 1.5) { + obj["spoiler3Lex"].hide(); + obj["spoiler3Lrt"].show(); + } else { + obj["spoiler3Lrt"].hide(); + obj["spoiler3Lex"].show(); + } + }), + props.UpdateManager.FromHashValue("spoilerL4", 0.5, func(val) { + if (val < 1.5) { + obj["spoiler4Lex"].hide(); + obj["spoiler4Lrt"].show(); + } else { + obj["spoiler4Lrt"].hide(); + obj["spoiler4Lex"].show(); + } + }), + props.UpdateManager.FromHashValue("spoilerL5", 0.5, func(val) { + if (val < 1.5) { + obj["spoiler5Lex"].hide(); + obj["spoiler5Lrt"].show(); + } else { + obj["spoiler5Lrt"].hide(); + obj["spoiler5Lex"].show(); + } + }), + props.UpdateManager.FromHashValue("spoilerR1", 0.5, func(val) { + if (val < 1.5) { + obj["spoiler1Rex"].hide(); + obj["spoiler1Rrt"].show(); + } else { + obj["spoiler1Rrt"].hide(); + obj["spoiler1Rex"].show(); + } + }), + props.UpdateManager.FromHashValue("spoilerR2", 0.5, func(val) { + if (val < 1.5) { + obj["spoiler2Rex"].hide(); + obj["spoiler2Rrt"].show(); + } else { + obj["spoiler2Rrt"].hide(); + obj["spoiler2Rex"].show(); + } + }), + props.UpdateManager.FromHashValue("spoilerR3", 0.5, func(val) { + if (val < 1.5) { + obj["spoiler3Rex"].hide(); + obj["spoiler3Rrt"].show(); + } else { + obj["spoiler3Rrt"].hide(); + obj["spoiler3Rex"].show(); + } + }), + props.UpdateManager.FromHashValue("spoilerR4", 0.5, func(val) { + if (val < 1.5) { + obj["spoiler4Rex"].hide(); + obj["spoiler4Rrt"].show(); + } else { + obj["spoiler4Rrt"].hide(); + obj["spoiler4Rex"].show(); + } + }), + props.UpdateManager.FromHashValue("spoilerR5", 0.5, func(val) { + if (val < 1.5) { + obj["spoiler5Rex"].hide(); + obj["spoiler5Rrt"].show(); + } else { + obj["spoiler5Rrt"].hide(); + obj["spoiler5Rex"].show(); + } + }), + props.UpdateManager.FromHashList(["spoilerL1Failure","spoilerL1","green"], nil, func(val) { + if (val.spoilerL1Failure or val.green < 1500) { + obj["spoiler1Lex"].setColor(0.7333,0.3803,0); + obj["spoiler1Lrt"].setColor(0.7333,0.3803,0); + if (val.spoilerL1 < 1.5) { + obj["spoiler1Lf"].show(); + } else { + obj["spoiler1Lf"].hide(); + } + } else { + obj["spoiler1Lex"].setColor(0.0509,0.7529,0.2941); + obj["spoiler1Lrt"].setColor(0.0509,0.7529,0.2941); + obj["spoiler1Lf"].hide(); + } + }), + props.UpdateManager.FromHashList(["spoilerL2Failure","spoilerL2","yellow"], nil, func(val) { + if (val.spoilerL2Failure or val.yellow < 1500) { + obj["spoiler2Lex"].setColor(0.7333,0.3803,0); + obj["spoiler2Lrt"].setColor(0.7333,0.3803,0); + if (val.spoilerL2 < 1.5) { + obj["spoiler2Lf"].show(); + } else { + obj["spoiler2Lf"].hide(); + } + } else { + obj["spoiler2Lex"].setColor(0.0509,0.7529,0.2941); + obj["spoiler2Lrt"].setColor(0.0509,0.7529,0.2941); + obj["spoiler2Lf"].hide(); + } + }), + props.UpdateManager.FromHashList(["spoilerL3Failure","spoilerL3","blue"], nil, func(val) { + if (val.spoilerL3Failure or val.blue < 1500) { + obj["spoiler3Lex"].setColor(0.7333,0.3803,0); + obj["spoiler3Lrt"].setColor(0.7333,0.3803,0); + if (val.spoilerL3 < 1.5) { + obj["spoiler3Lf"].show(); + } else { + obj["spoiler3Lf"].hide(); + } + } else { + obj["spoiler3Lex"].setColor(0.0509,0.7529,0.2941); + obj["spoiler3Lrt"].setColor(0.0509,0.7529,0.2941); + obj["spoiler3Lf"].hide(); + } + }), + props.UpdateManager.FromHashList(["spoilerL4Failure","spoilerL4","yellow"], nil, func(val) { + if (val.spoilerL4Failure or val.yellow < 1500) { + obj["spoiler4Lex"].setColor(0.7333,0.3803,0); + obj["spoiler4Lrt"].setColor(0.7333,0.3803,0); + if (val.spoilerL4 < 1.5) { + obj["spoiler4Lf"].show(); + } else { + obj["spoiler4Lf"].hide(); + } + } else { + obj["spoiler4Lex"].setColor(0.0509,0.7529,0.2941); + obj["spoiler4Lrt"].setColor(0.0509,0.7529,0.2941); + obj["spoiler4Lf"].hide(); + } + }), + props.UpdateManager.FromHashList(["spoilerL5Failure","spoilerL5","green"], nil, func(val) { + if (val.spoilerL5Failure or val.green < 1500) { + obj["spoiler5Lex"].setColor(0.7333,0.3803,0); + obj["spoiler5Lrt"].setColor(0.7333,0.3803,0); + if (val.spoilerL5 < 1.5) { + obj["spoiler5Lf"].show(); + } else { + obj["spoiler5Lf"].hide(); + } + } else { + obj["spoiler5Lex"].setColor(0.0509,0.7529,0.2941); + obj["spoiler5Lrt"].setColor(0.0509,0.7529,0.2941); + obj["spoiler5Lf"].hide(); + } + }), + props.UpdateManager.FromHashList(["spoilerR1Failure","spoilerR1","green"], nil, func(val) { + if (val.spoilerR1Failure or val.green < 1500) { + obj["spoiler1Rex"].setColor(0.7333,0.3803,0); + obj["spoiler1Rrt"].setColor(0.7333,0.3803,0); + if (val.spoilerR1 < 1.5) { + obj["spoiler1Rf"].show(); + } else { + obj["spoiler1Rf"].hide(); + } + } else { + obj["spoiler1Rex"].setColor(0.0509,0.7529,0.2941); + obj["spoiler1Rrt"].setColor(0.0509,0.7529,0.2941); + obj["spoiler1Rf"].hide(); + } + }), + props.UpdateManager.FromHashList(["spoilerR2Failure","spoilerR2","yellow"], nil, func(val) { + if (val.spoilerR2Failure or val.yellow < 1500) { + obj["spoiler2Rex"].setColor(0.7333,0.3803,0); + obj["spoiler2Rrt"].setColor(0.7333,0.3803,0); + if (val.spoilerR2 < 1.5) { + obj["spoiler2Rf"].show(); + } else { + obj["spoiler2Rf"].hide(); + } + } else { + obj["spoiler2Rex"].setColor(0.0509,0.7529,0.2941); + obj["spoiler2Rrt"].setColor(0.0509,0.7529,0.2941); + obj["spoiler2Rf"].hide(); + } + }), + props.UpdateManager.FromHashList(["spoilerR3Failure","spoilerR3","blue"], nil, func(val) { + if (val.spoilerR3Failure or val.blue < 1500) { + obj["spoiler3Rex"].setColor(0.7333,0.3803,0); + obj["spoiler3Rrt"].setColor(0.7333,0.3803,0); + if (val.spoilerR3 < 1.5) { + obj["spoiler3Rf"].show(); + } else { + obj["spoiler3Rf"].hide(); + } + } else { + obj["spoiler3Rex"].setColor(0.0509,0.7529,0.2941); + obj["spoiler3Rrt"].setColor(0.0509,0.7529,0.2941); + obj["spoiler3Rf"].hide(); + } + }), + props.UpdateManager.FromHashList(["spoilerR4Failure","spoilerR4","yellow"], nil, func(val) { + if (val.spoilerR4Failure or val.yellow < 1500) { + obj["spoiler4Rex"].setColor(0.7333,0.3803,0); + obj["spoiler4Rrt"].setColor(0.7333,0.3803,0); + if (val.spoilerR4 < 1.5) { + obj["spoiler4Rf"].show(); + } else { + obj["spoiler4Rf"].hide(); + } + } else { + obj["spoiler4Rex"].setColor(0.0509,0.7529,0.2941); + obj["spoiler4Rrt"].setColor(0.0509,0.7529,0.2941); + obj["spoiler4Rf"].hide(); + } + }), + props.UpdateManager.FromHashList(["spoilerR5Failure","spoilerR5","green"], nil, func(val) { + if (val.spoilerR5Failure or val.green < 1500) { + obj["spoiler5Rex"].setColor(0.7333,0.3803,0); + obj["spoiler5Rrt"].setColor(0.7333,0.3803,0); + if (val.spoilerR5 < 1.5) { + obj["spoiler5Rf"].show(); + } else { + obj["spoiler5Rf"].hide(); + } + } else { + obj["spoiler5Rex"].setColor(0.0509,0.7529,0.2941); + obj["spoiler5Rrt"].setColor(0.0509,0.7529,0.2941); + obj["spoiler5Rf"].hide(); + } + }), + ]; + + obj.displayedGForce = 0; + obj.updateItemsBottom = [ + props.UpdateManager.FromHashValue("acconfigUnits", nil, func(val) { + obj.units = val; + if (val) { + obj["GW-weight-unit"].setText("KG"); + } else { + obj["GW-weight-unit"].setText("LBS"); + } + }), + props.UpdateManager.FromHashValue("hour", nil, func(val) { + obj["UTCh"].setText(sprintf("%02d", val)); + }), + props.UpdateManager.FromHashValue("minute", nil, func(val) { + obj["UTCm"].setText(sprintf("%02d", val)); + }), + props.UpdateManager.FromHashValue("gForce", 0.05, func(val) { + if (obj.displayedGForce) { + obj["GLoad"].setText("G.LOAD " ~ sprintf("%3.1f", val)); + } + }), + props.UpdateManager.FromHashValue("gForceDisplay", nil, func(val) { + if ((val == 1 and !obj.displayedGForce) or (val != 0 and obj.displayedGForce)) { + obj.displayedGForce = 1; + obj["GLoad"].show(); + } else { + obj.displayedGForce = 0; + obj["GLoad"].hide(); + } + }), + ]; + return obj; + }, + getKeysBottom: func() { + return ["TAT","SAT","GW","UTCh","UTCm","GLoad","GW-weight-unit"]; + }, + getKeys: func() { + return["ailL","ailR","elevL","elevR","PTcc","PT","PTupdn","elac1","elac2","sec1","sec2","sec3","ailLblue","ailRblue","elevLblue","elevRblue","rudderblue","ailLgreen","ailRgreen","elevLgreen","ruddergreen","PTgreen", + "elevRyellow","rudderyellow","PTyellow","rudder","spdbrkblue","spdbrkgreen","spdbrkyellow","spoiler1Rex","spoiler1Rrt","spoiler2Rex","spoiler2Rrt","spoiler3Rex","spoiler3Rrt","spoiler4Rex","spoiler4Rrt","spoiler5Rex","spoiler5Rrt","spoiler1Lex", + "spoiler1Lrt","spoiler2Lex","spoiler2Lrt","spoiler3Lex","spoiler3Lrt","spoiler4Lex","spoiler4Lrt","spoiler5Lex","spoiler5Lrt","spoiler1Rf","spoiler2Rf","spoiler3Rf","spoiler4Rf","spoiler5Rf","spoiler1Lf","spoiler2Lf","spoiler3Lf","spoiler4Lf", + "spoiler5Lf","ailLscale","ailRscale","path4249","path4249-3","path4249-3-6-7","path4249-3-6-7-5","path4249-3-6","pitchTrimStatus","rudderTrimInd"]; + }, + updateBottom: func(notification) { + foreach(var update_item_bottom; me.updateItemsBottom) + { + update_item_bottom.update(notification); + } + + if (fmgc.FMGCInternal.fuelRequest and fmgc.FMGCInternal.blockConfirmed and !fmgc.FMGCInternal.fuelCalculating and notification.FWCPhase != 1) { + if (me.units) { + me["GW"].setText(sprintf("%s", math.round(fmgc.FMGCInternal.fuelPredGw * 1000 * LBS2KGS, 100))); + } else { + me["GW"].setText(sprintf("%s", math.round(fmgc.FMGCInternal.fuelPredGw * 1000, 100))); + } + me["GW"].setColor(0.0509,0.7529,0.2941); + } else { + me["GW"].setText(sprintf("%s", "-----")); + me["GW"].setColor(0.0901,0.6039,0.7176); + } + + if (dmc.DMController.DMCs[1].outputs[4] != nil) { + me["SAT"].setText(sprintf("%+2.0f", dmc.DMController.DMCs[1].outputs[4].getValue())); + me["SAT"].setColor(0.0509,0.7529,0.2941); + } else { + me["SAT"].setText(sprintf("%s", "XX")); + me["SAT"].setColor(0.7333,0.3803,0); + } + + if (dmc.DMController.DMCs[1].outputs[5] != nil) { + me["TAT"].setText(sprintf("%+2.0f", dmc.DMController.DMCs[1].outputs[5].getValue())); + me["TAT"].setColor(0.0509,0.7529,0.2941); + } else { + me["TAT"].setText(sprintf("%s", "XX")); + me["TAT"].setColor(0.7333,0.3803,0); + } + }, + update: func(notification) { + me.updatePower(); + + if (me.test.getVisible() == 1) { + me.updateTest(notification); + } + + if (me.group.getVisible() == 0) { + return; + } + + foreach(var update_item; me.update_items) + { + update_item.update(notification); + } + + me.updateBottom(notification); + }, + updatePower: func() { + if (me.name == ecam.SystemDisplayController.displayedPage.name) { + if (du4_lgt.getValue() > 0.01 and systems.ELEC.Bus.ac2.getValue() >= 110) { + if (du4_test_time.getValue() + du4_test_amount.getValue() >= pts.Sim.Time.elapsedSec.getValue()) { + me.group.setVisible(0); + me.test.setVisible(1); + } else { + me.group.setVisible(1); + me.test.setVisible(0); + } + } else { + me.group.setVisible(0); + me.test.setVisible(0); + } + } else { + me.group.setVisible(0); + # don't hide the test group; just let whichever page is active control it + } + }, +}; + +var input = { + elac1: "/systems/fctl/elac1", + elac2: "/systems/fctl/elac2", + elac1Fail: "/systems/failures/fctl/elac1", + elac2Fail: "/systems/failures/fctl/elac2", + sec1: "/systems/fctl/sec1", + sec2: "/systems/fctl/sec2", + sec3: "/systems/fctl/sec3", + sec1Fail: "/systems/failures/fctl/sec1", + sec2Fail: "/systems/failures/fctl/sec2", + sec3Fail: "/systems/failures/fctl/sec3", + fac1: "/systems/fctl/fac1-healthy-signal", + fac2: "/systems/fctl/fac2-healthy-signal", + fac1Fail: "/systems/failures/fctl/fac1", + fac2Fail: "/systems/failures/fctl/fac2", + fctlAilL: "/ECAM/Lower/aileron-ind-left", + fctlAilR: "/ECAM/Lower/aileron-ind-right", + fctlElevL: "/ECAM/Lower/elevator-ind-left", + fctlElevR: "/ECAM/Lower/elevator-ind-right", + fctlElevTrim: "/ECAM/Lower/elevator-trim-deg", + fctlRudder: "/fdm/jsbsim/hydraulics/rudder/final-deg", + fctlRudderTrim: "/fdm/jsbsim/hydraulics/rudder/trim-deg", + fctlTHSJam: "/systems/failures/fctl/ths-jam", +}; + +foreach (var name; keys(input)) { + emesary.GlobalTransmitter.NotifyAll(notifications.FrameNotificationAddProperty.new("A320 System Display", name, input[name])); +} \ No newline at end of file diff --git a/Models/Instruments/Lower-ECAM/Lower-ECAM-fuel.nas b/Models/Instruments/Lower-ECAM/Lower-ECAM-fuel.nas new file mode 100644 index 00000000..4da77543 --- /dev/null +++ b/Models/Instruments/Lower-ECAM/Lower-ECAM-fuel.nas @@ -0,0 +1,600 @@ +# A3XX Lower ECAM Canvas +# Copyright (c) 2021 Josh Davidson (Octal450) and Jonathan Redpath + +var fuel_used_lbs1 = props.globals.getNode("/systems/fuel/fuel-used-1", 1); +var fuel_used_lbs2 = props.globals.getNode("/systems/fuel/fuel-used-2", 1); + +var canvas_lowerECAMPageFuel = +{ + new: func(svg,name) { + var obj = {parents: [canvas_lowerECAMPageFuel,canvas_lowerECAM_base] }; + obj.group = obj.canvas.createGroup(); + obj.name = name; + + canvas.parsesvg(obj.group, svg, {"font-mapper": obj.font_mapper} ); + + foreach(var key; obj.getKeys()) { + obj[key] = obj.group.getElementById(key); + }; + + foreach(var key; obj.getKeysBottom()) { + obj[key] = obj.group.getElementById(key); + }; + + obj.units = acconfig_weight_kgs.getValue(); + + # init + obj["FUEL-Left-blocked"].hide(); + obj["FUEL-Right-blocked"].hide(); + obj["FUEL-Left-Outer-Inacc"].hide(); + obj["FUEL-Left-Inner-Inacc"].hide(); + obj["FUEL-Right-Outer-Inacc"].hide(); + obj["FUEL-Right-Inner-Inacc"].hide(); + obj["FUEL-Center-Inacc"].hide(); + + obj.update_items = [ + props.UpdateManager.FromHashValue("acconfigUnits", nil, func(val) { + if (val) { + obj["FOB-weight-unit"].setText("KG"); + obj["Fused-weight-unit"].setText("KG"); + obj["FFlow-weight-unit"].setText("KG/MIN"); + obj["FUEL-On-Board"].setText(sprintf("%s", math.round(pts.Consumables.Fuel.totalFuelLbs.getValue() * LBS2KGS, 10))); + obj["FUEL-Left-Outer-quantity"].setText(sprintf("%s", math.round(systems.FUEL.Quantity.leftOuter.getValue() * LBS2KGS, 10))); + obj["FUEL-Left-Inner-quantity"].setText(sprintf("%s", math.round(systems.FUEL.Quantity.leftInner.getValue() * LBS2KGS, 10))); + obj["FUEL-Center-quantity"].setText(sprintf("%s", math.round(systems.FUEL.Quantity.center.getValue() * LBS2KGS, 10))); + obj["FUEL-Right-Inner-quantity"].setText(sprintf("%s", math.round(systems.FUEL.Quantity.rightInner.getValue() * LBS2KGS, 10))); + obj["FUEL-Right-Outer-quantity"].setText(sprintf("%s", math.round(systems.FUEL.Quantity.rightOuter.getValue() * LBS2KGS, 10))); + obj["FUEL-Flow-per-min"].setText(sprintf("%s", math.round(((pts.Engines.Engine.fuelFlow[0].getValue() + pts.Engines.Engine.fuelFlow[1].getValue()) * LBS2KGS) / 60, 10))); + obj["FUEL-used-1"].setText(sprintf("%s", math.round(fuel_used_lbs1.getValue() * LBS2KGS, 10))); + obj["FUEL-used-2"].setText(sprintf("%s", math.round(fuel_used_lbs2.getValue() * LBS2KGS, 10))); + obj["FUEL-used-both"].setText(sprintf("%s", (math.round((fuel_used_lbs1.getValue() * LBS2KGS) + (fuel_used_lbs2.getValue() * LBS2KGS), 10)))); + } else { + obj["FUEL-used-1"].setText(sprintf("%s", math.round(fuel_used_lbs1.getValue(), 10))); + obj["FUEL-used-2"].setText(sprintf("%s", math.round(fuel_used_lbs2.getValue(), 10))); + obj["FUEL-used-both"].setText(sprintf("%s", (math.round(fuel_used_lbs1.getValue() + fuel_used_lbs2.getValue(), 10)))); + obj["FUEL-Flow-per-min"].setText(sprintf("%s", math.round((pts.Engines.Engine.fuelFlow[0].getValue() + pts.Engines.Engine.fuelFlow[1].getValue()) / 60, 10))); + obj["FOB-weight-unit"].setText("LBS"); + obj["Fused-weight-unit"].setText("LBS"); + obj["FFlow-weight-unit"].setText("LBS/MIN"); + obj["FUEL-On-Board"].setText(sprintf("%s", math.round(pts.Consumables.Fuel.totalFuelLbs.getValue(), 10))); + obj["FUEL-Left-Outer-quantity"].setText(sprintf("%s", math.round(systems.FUEL.Quantity.leftOuter.getValue(), 10))); + obj["FUEL-Left-Inner-quantity"].setText(sprintf("%s", math.round(systems.FUEL.Quantity.leftInner.getValue(), 10))); + obj["FUEL-Center-quantity"].setText(sprintf("%s", math.round(systems.FUEL.Quantity.center.getValue(), 10))); + obj["FUEL-Right-Inner-quantity"].setText(sprintf("%s", math.round(systems.FUEL.Quantity.rightInner.getValue(), 10))); + obj["FUEL-Right-Outer-quantity"].setText(sprintf("%s", math.round(systems.FUEL.Quantity.rightOuter.getValue(), 10))); + } + }), + props.UpdateManager.FromHashValue("engFuelUsed1", 0.5, func(val) { + if (obj.units) { + obj["FUEL-used-1"].setText(sprintf("%s", math.round(val * LBS2KGS, 10))); + } else { + obj["FUEL-used-1"].setText(sprintf("%s", math.round(val, 10))); + } + }), + props.UpdateManager.FromHashValue("engFuelUsed2", 0.5, func(val) { + if (obj.units) { + obj["FUEL-used-2"].setText(sprintf("%s", math.round(val * LBS2KGS, 10))); + } else { + obj["FUEL-used-2"].setText(sprintf("%s", math.round(val, 10))); + } + }), + props.UpdateManager.FromHashList(["engFuelUsed1","engFuelUsed2"], 0.5, func(val) { + if (obj.units) { + obj["FUEL-used-both"].setText(sprintf("%s", (math.round((val.engFuelUsed1 * LBS2KGS) + (val.engFuelUsed2 * LBS2KGS), 10)))); + } else { + obj["FUEL-used-both"].setText(sprintf("%s", (math.round(val.engFuelUsed1 + val.engFuelUsed2, 10)))); + } + }), + props.UpdateManager.FromHashValue("fuelLeftOuterQty", 0.25, func(val) { + if (obj.units) { + obj["FUEL-Left-Outer-quantity"].setText(sprintf("%s", math.round(val * LBS2KGS, 10))); + } else { + obj["FUEL-Left-Outer-quantity"].setText(sprintf("%s", math.round(val, 10))); + } + }), + props.UpdateManager.FromHashValue("fuelRightOuterQty", 0.25, func(val) { + if (obj.units) { + obj["FUEL-Right-Outer-quantity"].setText(sprintf("%s", math.round(val * LBS2KGS, 10))); + } else { + obj["FUEL-Right-Outer-quantity"].setText(sprintf("%s", math.round(val, 10))); + } + }), + props.UpdateManager.FromHashValue("fuelLeftInnerQty", 0.25, func(val) { + if (obj.units) { + obj["FUEL-Left-Inner-quantity"].setText(sprintf("%s", math.round(val * LBS2KGS, 10))); + } else { + obj["FUEL-Left-Inner-quantity"].setText(sprintf("%s", math.round(val, 10))); + } + }), + props.UpdateManager.FromHashValue("fuelRightInnerQty", 0.25, func(val) { + if (obj.units) { + obj["FUEL-Right-Inner-quantity"].setText(sprintf("%s", math.round(val * LBS2KGS, 10))); + } else { + obj["FUEL-Right-Inner-quantity"].setText(sprintf("%s", math.round(val, 10))); + } + }), + props.UpdateManager.FromHashList(["fadecPower1","fadecPower2","fadecPowerStart","fuelflow_1","fuelflow_2"], nil, func(val) { + if (val.fadecPower1 or val.fadecPower2 or val.fadecPowerStart) { + obj["FUEL-Flow-per-min"].setColor(0.0509,0.7529,0.2941); + if (obj.units) { + obj["FUEL-Flow-per-min"].setText(sprintf("%s", math.round(((val.fuelflow_1 + val.fuelflow_2) * LBS2KGS) / 60, 10))); + } else { + obj["FUEL-Flow-per-min"].setText(sprintf("%s", math.round((val.fuelflow_1 + val.fuelflow_2) / 60, 10))); + } + } else { + obj["FUEL-Flow-per-min"].setColor(0.7333,0.3803,0); + obj["FUEL-Flow-per-min"].setText("XX"); + } + }), + props.UpdateManager.FromHashValue("N1_actual_1", 0.05, func(val) { + if (val <= 18.8) { + obj["ENG1idFFlow"].setColor(0.7333,0.3803,0); + obj["FUEL-ENG-1-label"].setColor(0.7333,0.3803,0); + } else { + obj["ENG1idFFlow"].setColor(0.8078,0.8039,0.8078); + obj["FUEL-ENG-1-label"].setColor(0.8078,0.8039,0.8078); + } + }), + props.UpdateManager.FromHashValue("N1_actual_2", 0.05, func(val) { + if (val <= 18.8) { + obj["ENG2idFFlow"].setColor(0.7333,0.3803,0); + obj["FUEL-ENG-2-label"].setColor(0.7333,0.3803,0); + } else { + obj["ENG2idFFlow"].setColor(0.8078,0.8039,0.8078); + obj["FUEL-ENG-2-label"].setColor(0.8078,0.8039,0.8078); + } + }), + props.UpdateManager.FromHashValue("fuelLeftSwitch1", nil, func(val) { + if (val) { + obj["FUEL-Pump-Left-1-Open"].show(); + obj["FUEL-Pump-Left-1-Closed"].hide(); + obj["FUEL-Pump-Left-1"].setColor(0.0509,0.7529,0.2941); + obj["FUEL-Pump-Left-1"].setColorFill(0.0509,0.7529,0.2941); + obj["FUEL-Pump-Left-1-Square"].setColorFill(0.0509,0.7529,0.2941); + obj["FUEL-Pump-Left-1-Open"].setColorFill(0.0509,0.7529,0.2941); + obj["FUEL-Pump-Left-1-Closed"].setColorFill(0.0509,0.7529,0.2941); + } else { + obj["FUEL-Pump-Left-1-Open"].hide(); + obj["FUEL-Pump-Left-1-Closed"].show(); + obj["FUEL-Pump-Left-1"].setColor(0.7333,0.3803,0); + obj["FUEL-Pump-Left-1-Square"].setColorFill(0.7333,0.3803,0); + obj["FUEL-Pump-Left-1"].setColorFill(0.7333,0.3803,0); + obj["FUEL-Pump-Left-1-Open"].setColorFill(0.7333,0.3803,0); + obj["FUEL-Pump-Left-1-Closed"].setColorFill(0.7333,0.3803,0); + } + }), + props.UpdateManager.FromHashValue("fuelLeftSwitch2", nil, func(val) { + if (val) { + obj["FUEL-Pump-Left-2-Open"].show(); + obj["FUEL-Pump-Left-2-Closed"].hide(); + obj["FUEL-Pump-Left-2"].setColor(0.0509,0.7529,0.2941); + obj["FUEL-Pump-Left-2"].setColorFill(0.0509,0.7529,0.2941); + obj["FUEL-Pump-Left-2-Square"].setColorFill(0.0509,0.7529,0.2941); + obj["FUEL-Pump-Left-2-Open"].setColorFill(0.0509,0.7529,0.2941); + obj["FUEL-Pump-Left-2-Closed"].setColorFill(0.0509,0.7529,0.2941); + } else { + obj["FUEL-Pump-Left-2-Open"].hide(); + obj["FUEL-Pump-Left-2-Closed"].show(); + obj["FUEL-Pump-Left-2"].setColor(0.7333,0.3803,0); + obj["FUEL-Pump-Left-2"].setColorFill(0.7333,0.3803,0); + obj["FUEL-Pump-Left-2-Square"].setColorFill(0.7333,0.3803,0); + obj["FUEL-Pump-Left-2-Open"].setColorFill(0.7333,0.3803,0); + obj["FUEL-Pump-Left-2-Closed"].setColorFill(0.7333,0.3803,0); + } + }), + props.UpdateManager.FromHashValue("fuelCenterSwitch1", nil, func(val) { + if (val) { + obj["FUEL-Pump-Center-1-Open"].show(); + obj["FUEL-Pump-Center-1-Closed"].hide(); + obj["FUEL-Pump-Center-1"].setColor(0.0509,0.7529,0.2941); + obj["FUEL-Pump-Center-1"].setColorFill(0.0509,0.7529,0.2941); + obj["FUEL-Pump-Center-1-Square"].setColorFill(0.0509,0.7529,0.2941); + obj["FUEL-Pump-Center-1-Open"].setColorFill(0.0509,0.7529,0.2941); + obj["FUEL-Pump-Center-1-Closed"].setColorFill(0.0509,0.7529,0.2941); + } else { + obj["FUEL-Pump-Center-1-Open"].hide(); + obj["FUEL-Pump-Center-1-Closed"].show(); + obj["FUEL-Pump-Center-1"].setColor(0.7333,0.3803,0); + obj["FUEL-Pump-Center-1"].setColorFill(0.7333,0.3803,0); + obj["FUEL-Pump-Center-1-Square"].setColorFill(0.7333,0.3803,0); + obj["FUEL-Pump-Center-1-Open"].setColorFill(0.7333,0.3803,0); + obj["FUEL-Pump-Center-1-Closed"].setColorFill(0.7333,0.3803,0); + } + }), + props.UpdateManager.FromHashValue("fuelCenterSwitch2", nil, func(val) { + if (val) { + obj["FUEL-Pump-Center-2-Open"].show(); + obj["FUEL-Pump-Center-2-Closed"].hide(); + obj["FUEL-Pump-Center-2"].setColor(0.0509,0.7529,0.2941); + obj["FUEL-Pump-Center-2"].setColorFill(0.0509,0.7529,0.2941); + obj["FUEL-Pump-Center-2-Square"].setColorFill(0.0509,0.7529,0.2941); + obj["FUEL-Pump-Center-2-Open"].setColorFill(0.0509,0.7529,0.2941); + obj["FUEL-Pump-Center-2-Closed"].setColorFill(0.0509,0.7529,0.2941); + } else { + obj["FUEL-Pump-Center-2-Open"].hide(); + obj["FUEL-Pump-Center-2-Closed"].show(); + obj["FUEL-Pump-Center-2"].setColor(0.7333,0.3803,0); + obj["FUEL-Pump-Center-2"].setColorFill(0.7333,0.3803,0); + obj["FUEL-Pump-Center-2-Square"].setColorFill(0.7333,0.3803,0); + obj["FUEL-Pump-Center-2-Open"].setColorFill(0.7333,0.3803,0); + obj["FUEL-Pump-Center-2-Closed"].setColorFill(0.7333,0.3803,0); + } + }), + props.UpdateManager.FromHashValue("fuelRightSwitch1", nil, func(val) { + if (val) { + obj["FUEL-Pump-Right-1-Open"].show(); + obj["FUEL-Pump-Right-1-Closed"].hide(); + obj["FUEL-Pump-Right-1"].setColor(0.0509,0.7529,0.2941); + obj["FUEL-Pump-Right-1"].setColorFill(0.0509,0.7529,0.2941); + obj["FUEL-Pump-Right-1-Square"].setColorFill(0.0509,0.7529,0.2941); + obj["FUEL-Pump-Right-1-Open"].setColorFill(0.0509,0.7529,0.2941); + obj["FUEL-Pump-Right-1-Closed"].setColorFill(0.0509,0.7529,0.2941); + } else { + obj["FUEL-Pump-Right-1-Open"].hide(); + obj["FUEL-Pump-Right-1-Closed"].show(); + obj["FUEL-Pump-Right-1"].setColor(0.7333,0.3803,0); + obj["FUEL-Pump-Right-1"].setColorFill(0.7333,0.3803,0); + obj["FUEL-Pump-Right-1-Square"].setColorFill(0.7333,0.3803,0); + obj["FUEL-Pump-Right-1-Open"].setColorFill(0.7333,0.3803,0); + obj["FUEL-Pump-Right-1-Closed"].setColorFill(0.7333,0.3803,0); + } + }), + props.UpdateManager.FromHashValue("fuelRightSwitch2", nil, func(val) { + if (val) { + obj["FUEL-Pump-Right-2-Open"].show(); + obj["FUEL-Pump-Right-2-Closed"].hide(); + obj["FUEL-Pump-Right-2"].setColor(0.0509,0.7529,0.2941); + obj["FUEL-Pump-Right-2"].setColorFill(0.0509,0.7529,0.2941); + obj["FUEL-Pump-Right-2-Square"].setColor(0.0509,0.7529,0.2941); + obj["FUEL-Pump-Right-2-Open"].setColorFill(0.0509,0.7529,0.2941); + obj["FUEL-Pump-Right-2-Closed"].setColorFill(0.0509,0.7529,0.2941); + } else { + obj["FUEL-Pump-Right-2-Open"].hide(); + obj["FUEL-Pump-Right-2-Closed"].show(); + obj["FUEL-Pump-Right-2"].setColor(0.7333,0.3803,0); + obj["FUEL-Pump-Right-2"].setColorFill(0.7333,0.3803,0); + obj["FUEL-Pump-Right-2-Square"].setColor(0.7333,0.3803,0); + obj["FUEL-Pump-Right-2-Open"].setColorFill(0.7333,0.3803,0); + obj["FUEL-Pump-Right-2-Closed"].setColorFill(0.7333,0.3803,0); + } + }), + props.UpdateManager.FromHashList(["fuelCenterSwitch1","fuelCenterSwitch2"], nil, func(val) { + if (!val.fuelCenterSwitch1 and !val.fuelCenterSwitch2) { + obj["FUEL-Center-blocked"].show(); + } else { + obj["FUEL-Center-blocked"].hide(); + } + }), + props.UpdateManager.FromHashList(["fuelCrossfeedValve","fuelCrossfeedSwitch"], nil, func(val) { + if (val.fuelCrossfeedValve == 1) { + obj["FUEL-XFEED"].setRotation(0); + obj["FUEL-XFEED-pipes"].show(); + if (val.fuelCrossfeedSwitch) { + obj["FUEL-XFEED"].setColor(0.0509,0.7529,0.2941); + obj["FUEL-XFEED"].setColorFill(0.0509,0.7529,0.2941); + obj["FUEL-XFEED-Cross"].setColorFill(0.0509,0.7529,0.2941); + } else { + obj["FUEL-XFEED"].setColor(0.7333,0.3803,0); + obj["FUEL-XFEED"].setColorFill(0.7333,0.3803,0); + obj["FUEL-XFEED-Cross"].setColorFill(0.7333,0.3803,0); + } + } elsif (val.fuelCrossfeedValve == 0) { + obj["FUEL-XFEED"].setRotation(90 * D2R); + obj["FUEL-XFEED-pipes"].hide(); + if (!val.fuelCrossfeedSwitch) { + obj["FUEL-XFEED"].setColor(0.0509,0.7529,0.2941); + obj["FUEL-XFEED"].setColorFill(0.0509,0.7529,0.2941); + obj["FUEL-XFEED-Cross"].setColorFill(0.0509,0.7529,0.2941); + } else { + obj["FUEL-XFEED"].setColor(0.7333,0.3803,0); + obj["FUEL-XFEED"].setColorFill(0.7333,0.3803,0); + obj["FUEL-XFEED-Cross"].setColorFill(0.7333,0.3803,0); + } + } else { + obj["FUEL-XFEED"].setRotation(45 * D2R); + obj["FUEL-XFEED-pipes"].hide(); + obj["FUEL-XFEED"].setColor(0.7333,0.3803,0); + obj["FUEL-XFEED"].setColorFill(0.7333,0.3803,0); + obj["FUEL-XFEED-Cross"].setColorFill(0.7333,0.3803,0); + } + }), + props.UpdateManager.FromHashList(["fuelEngine1Valve","engineCutoff1"], nil, func(val) { + if (val.fuelEngine1Valve) { + if (val.fuelEngine1Valve == 1) { + obj["FUEL-ENG-Master-1"].setRotation(0); + } else { + obj["FUEL-ENG-Master-1"].setRotation(45 * D2R); + } + if (val.engineCutoff1) { + obj["FUEL-ENG-Master-1"].setColor(0.7333,0.3803,0); + obj["FUEL-ENG-Master-1"].setColorFill(0.7333,0.3803,0); + obj["FUEL-ENG-Master-1-Cross"].setColorFill(0.7333,0.3803,0); + obj["FUEL-ENG-1-pipe"].setColorFill(0.7333,0.3803,0); + obj["FUEL-ENG-1-pipe"].setColorFill(0.7333,0.3803,0); + } else { + obj["FUEL-ENG-Master-1"].setColor(0.0509,0.7529,0.2941); + obj["FUEL-ENG-Master-1"].setColorFill(0.0509,0.7529,0.2941); + obj["FUEL-ENG-Master-1-Cross"].setColorFill(0.0509,0.7529,0.2941); + obj["FUEL-ENG-1-pipe"].setColor(0.0509,0.7529,0.2941); + obj["FUEL-ENG-1-pipe"].setColorFill(0.0509,0.7529,0.2941); + } + } else { + obj["FUEL-ENG-Master-1"].setRotation(90 * D2R); + obj["FUEL-ENG-Master-1"].setColor(0.7333,0.3803,0); + obj["FUEL-ENG-Master-1"].setColorFill(0.7333,0.3803,0); + obj["FUEL-ENG-Master-1-Cross"].setColorFill(0.7333,0.3803,0); + obj["FUEL-ENG-1-pipe"].setColor(0.7333,0.3803,0); + obj["FUEL-ENG-1-pipe"].setColorFill(0.7333,0.3803,0); + } + }), + props.UpdateManager.FromHashList(["fuelEngine2Valve","engineCutoff2"], nil, func(val) { + if (val.fuelEngine2Valve) { + if (val.fuelEngine2Valve == 1) { + obj["FUEL-ENG-Master-2"].setRotation(0); + } else { + obj["FUEL-ENG-Master-2"].setRotation(45 * D2R); + } + if (val.engineCutoff1) { + obj["FUEL-ENG-Master-2"].setColor(0.7333,0.3803,0); + obj["FUEL-ENG-Master-2"].setColorFill(0.7333,0.3803,0); + obj["FUEL-ENG-Master-2-Cross"].setColorFill(0.7333,0.3803,0); + obj["FUEL-ENG-2-pipe"].setColorFill(0.7333,0.3803,0); + obj["FUEL-ENG-2-pipe"].setColorFill(0.7333,0.3803,0); + } else { + obj["FUEL-ENG-Master-2"].setColor(0.0509,0.7529,0.2941); + obj["FUEL-ENG-Master-2"].setColorFill(0.0509,0.7529,0.2941); + obj["FUEL-ENG-Master-2-Cross"].setColorFill(0.0509,0.7529,0.2941); + obj["FUEL-ENG-2-pipe"].setColor(0.0509,0.7529,0.2941); + obj["FUEL-ENG-2-pipe"].setColorFill(0.0509,0.7529,0.2941); + } + } else { + obj["FUEL-ENG-Master-2"].setRotation(90 * D2R); + obj["FUEL-ENG-Master-2"].setColor(0.7333,0.3803,0); + obj["FUEL-ENG-Master-2"].setColorFill(0.7333,0.3803,0); + obj["FUEL-ENG-Master-2-Cross"].setColorFill(0.7333,0.3803,0); + obj["FUEL-ENG-2-pipe"].setColor(0.7333,0.3803,0); + obj["FUEL-ENG-2-pipe"].setColorFill(0.7333,0.3803,0); + } + }), + props.UpdateManager.FromHashValue("fuelTransferValve1", nil, func(val) { + if (val == 0) { + obj["FUEL-Left-Transfer"].hide(); + } else { + if (val == 1) { + obj["FUEL-Left-Transfer"].setColor(0.0509,0.7529,0.2941); + } else { + obj["FUEL-Left-Transfer"].setColor(0.7333,0.3803,0); + } + obj["FUEL-Left-Transfer"].show(); + } + }), + props.UpdateManager.FromHashValue("fuelTransferValve2", nil, func(val) { + if (val == 0) { + obj["FUEL-Right-Transfer"].hide(); + } else { + if (val == 1) { + obj["FUEL-Right-Transfer"].setColor(0.0509,0.7529,0.2941); + } else { + obj["FUEL-Right-Transfer"].setColor(0.7333,0.3803,0); + } + obj["FUEL-Right-Transfer"].show(); + } + }), + props.UpdateManager.FromHashValue("fuelTotalLbs", 1, func(val) { + if (obj.units) { + obj["FUEL-On-Board"].setText(sprintf("%s", math.round(val * LBS2KGS, 10))); + } else { + obj["FUEL-On-Board"].setText(sprintf("%s", math.round(val, 10))); + } + }), + props.UpdateManager.FromHashValue("fuelTempLeftOuter", 0.25, func(val) { + obj["FUEL-Left-Outer-temp"].setText(sprintf("%s", math.round(val))); + if (val > 55 or val < -40) { + obj["FUEL-Left-Outer-temp"].setColor(0.7333,0.3803,0); + } else { + obj["FUEL-Left-Outer-temp"].setColor(0.0509,0.7529,0.2941); + } + }), + props.UpdateManager.FromHashValue("fuelTempLeftInner", 0.25, func(val) { + obj["FUEL-Left-Inner-temp"].setText(sprintf("%s", math.round(val))); + if (val > 45 or val < -40) { + obj["FUEL-Left-Inner-temp"].setColor(0.7333,0.3803,0); + } else { + obj["FUEL-Left-Inner-temp"].setColor(0.0509,0.7529,0.2941); + } + }), + props.UpdateManager.FromHashValue("fuelTempRightInner", 0.25, func(val) { + obj["FUEL-Right-Inner-temp"].setText(sprintf("%s", math.round(val))); + if (val > 45 or val < -40) { + obj["FUEL-Right-Inner-temp"].setColor(0.7333,0.3803,0); + } else { + obj["FUEL-Right-Inner-temp"].setColor(0.0509,0.7529,0.2941); + } + }), + props.UpdateManager.FromHashValue("fuelTempRightOuter", 0.25, func(val) { + obj["FUEL-Right-Outer-temp"].setText(sprintf("%s", math.round(val))); + if (val > 55 or val < -40) { + obj["FUEL-Right-Outer-temp"].setColor(0.7333,0.3803,0); + } else { + obj["FUEL-Right-Outer-temp"].setColor(0.0509,0.7529,0.2941); + } + }), + props.UpdateManager.FromHashList(["fuelApuValve","apuMaster","apuFireBtn"], nil, func(val) { + if (val.fuelApuValve == 0) { + if (val.apuMaster or val.apuFireBtn) { + obj["FUEL-APU-label"].setColor(0.7333,0.3803,0); + obj["FUEL-APU-line"].hide(); + obj["FUEL-APU-arrow"].hide(); + } else { + obj["FUEL-APU-label"].setColor(0.8078, 0.8039, 0.8078); + obj["FUEL-APU-arrow"].setColor(0.8078, 0.8039, 0.8078); + obj["FUEL-APU-line"].hide(); + obj["FUEL-APU-arrow"].show(); + } + } else { + if (!val.apuMaster or val.apuFireBtn) { + obj["FUEL-APU-label"].setColor(0.7333,0.3803,0); + obj["FUEL-APU-line"].setColor(0.7333,0.3803,0); + obj["FUEL-APU-line"].setColorFill(0.7333,0.3803,0); + obj["FUEL-APU-arrow"].setColor(0.7333,0.3803,0); + obj["FUEL-APU-line"].show(); + obj["FUEL-APU-arrow"].show(); + } else { + obj["FUEL-APU-label"].setColor(0.8078, 0.8039, 0.8078); + obj["FUEL-APU-line"].setColor(0.0509,0.7529,0.2941); + obj["FUEL-APU-arrow"].setColor(0.0509,0.7529,0.2941); + obj["FUEL-APU-line"].show(); + obj["FUEL-APU-arrow"].show(); + } + } + }), + ]; + + obj.displayedGForce = 0; + obj.updateItemsBottom = [ + props.UpdateManager.FromHashValue("acconfigUnits", nil, func(val) { + obj.units = val; + if (val) { + obj["GW-weight-unit"].setText("KG"); + } else { + obj["GW-weight-unit"].setText("LBS"); + } + }), + props.UpdateManager.FromHashValue("hour", nil, func(val) { + obj["UTCh"].setText(sprintf("%02d", val)); + }), + props.UpdateManager.FromHashValue("minute", nil, func(val) { + obj["UTCm"].setText(sprintf("%02d", val)); + }), + props.UpdateManager.FromHashValue("gForce", 0.05, func(val) { + if (obj.displayedGForce) { + obj["GLoad"].setText("G.LOAD " ~ sprintf("%3.1f", val)); + } + }), + props.UpdateManager.FromHashValue("gForceDisplay", nil, func(val) { + if ((val == 1 and !obj.displayedGForce) or (val != 0 and obj.displayedGForce)) { + obj.displayedGForce = 1; + obj["GLoad"].show(); + } else { + obj.displayedGForce = 0; + obj["GLoad"].hide(); + } + }), + ]; + return obj; + }, + getKeysBottom: func() { + return ["TAT","SAT","GW","UTCh","UTCm","GLoad","GW-weight-unit"]; + }, + getKeys: func() { + return["TAT","SAT","GW","UTCh","UTCm","GLoad","GW-weight-unit","FUEL-Pump-Left-1","FUEL-Pump-Left-2","FUEL-Pump-Center-1","FUEL-Pump-Center-2","FUEL-Pump-Right-1","FUEL-Pump-Right-2","FUEL-Left-blocked","FUEL-Right-blocked","FUEL-Center-blocked","FUEL-Left-Transfer", + "FUEL-Right-Transfer","FUEL-Left-Outer-Inacc","FUEL-Left-Inner-Inacc","FUEL-Center-Inacc","FUEL-Right-Inner-Inacc","FUEL-Right-Outer-Inacc","FUEL-Left-Outer-quantity","FUEL-Left-Inner-quantity","FUEL-Center-quantity","FUEL-Right-Inner-quantity", + "FUEL-Right-Outer-quantity","FUEL-On-Board","FUEL-Flow-per-min","FUEL-APU-arrow","FUEL-APU-line","FUEL-APU-label","FUEL-used-1","FUEL-used-both","FUEL-used-2","FUEL-ENG-Master-1","FUEL-ENG-Master-2","FUEL-XFEED","FUEL-XFEED-Cross","FUEL-XFEED-pipes","FUEL-Left-Outer-temp", + "FUEL-Left-Inner-temp","FUEL-Right-Inner-temp","FUEL-Right-Outer-temp","FUEL-Pump-Left-1-Closed","FUEL-Pump-Left-1-Open","FUEL-Pump-Left-2-Closed","FUEL-Pump-Left-2-Open","FUEL-Pump-Center-1-Open","FUEL-Pump-Center-1-Closed","FUEL-Pump-Center-2-Closed", + "FUEL-Pump-Center-2-Open","FUEL-Pump-Right-1-Closed","FUEL-Pump-Right-1-Open","FUEL-Pump-Right-2-Closed","FUEL-Pump-Right-2-Open","FUEL-ENG-1-label","FUEL-ENG-2-label","FUEL-ENG-1-pipe","FUEL-ENG-2-pipe","ENG1idFFlow","ENG2idFFlow","FUEL-used-1","FUEL-used-2","FUEL-used-both", + "Fused-weight-unit","FFlow-weight-unit","FOB-weight-unit","FUEL-ENG-Master-1-Cross","FUEL-ENG-Master-2-Cross","FUEL-Pump-Left-1-Square","FUEL-Pump-Left-2-Square","FUEL-Pump-Center-1-Square","FUEL-Pump-Center-2-Square","FUEL-Pump-Right-1-Square","FUEL-Pump-Right-2-Square"]; + }, + updateBottom: func(notification) { + foreach(var update_item_bottom; me.updateItemsBottom) + { + update_item_bottom.update(notification); + } + + if (fmgc.FMGCInternal.fuelRequest and fmgc.FMGCInternal.blockConfirmed and !fmgc.FMGCInternal.fuelCalculating and notification.FWCPhase != 1) { + if (me.units) { + me["GW"].setText(sprintf("%s", math.round(fmgc.FMGCInternal.fuelPredGw * 1000 * LBS2KGS, 100))); + } else { + me["GW"].setText(sprintf("%s", math.round(fmgc.FMGCInternal.fuelPredGw * 1000, 100))); + } + me["GW"].setColor(0.0509,0.7529,0.2941); + } else { + me["GW"].setText(sprintf("%s", "-----")); + me["GW"].setColor(0.0901,0.6039,0.7176); + } + + if (dmc.DMController.DMCs[1].outputs[4] != nil) { + me["SAT"].setText(sprintf("%+2.0f", dmc.DMController.DMCs[1].outputs[4].getValue())); + me["SAT"].setColor(0.0509,0.7529,0.2941); + } else { + me["SAT"].setText(sprintf("%s", "XX")); + me["SAT"].setColor(0.7333,0.3803,0); + } + + if (dmc.DMController.DMCs[1].outputs[5] != nil) { + me["TAT"].setText(sprintf("%+2.0f", dmc.DMController.DMCs[1].outputs[5].getValue())); + me["TAT"].setColor(0.0509,0.7529,0.2941); + } else { + me["TAT"].setText(sprintf("%s", "XX")); + me["TAT"].setColor(0.7333,0.3803,0); + } + }, + update: func(notification) { + me.updatePower(); + + if (me.test.getVisible() == 1) { + me.updateTest(notification); + } + + if (me.group.getVisible() == 0) { + return; + } + + foreach(var update_item; me.update_items) + { + update_item.update(notification); + } + + me.updateBottom(notification); + }, + updatePower: func() { + if (me.name == ecam.SystemDisplayController.displayedPage.name) { + if (du4_lgt.getValue() > 0.01 and systems.ELEC.Bus.ac2.getValue() >= 110) { + if (du4_test_time.getValue() + du4_test_amount.getValue() >= pts.Sim.Time.elapsedSec.getValue()) { + me.group.setVisible(0); + me.test.setVisible(1); + } else { + me.group.setVisible(1); + me.test.setVisible(0); + } + } else { + me.group.setVisible(0); + me.test.setVisible(0); + } + } else { + me.group.setVisible(0); + # don't hide the test group; just let whichever page is active control it + } + }, +}; + +var input = { + engineCutoff1: "/controls/engines/engine[0]/cutoff-switch", + engineCutoff2: "/controls/engines/engine[1]/cutoff-switch", + fuelApuValve: "/systems/fuel/valves/apu-lp-valve", + fuelCrossfeedSwitch: "/controls/fuel/switches/crossfeed", + fuelCrossfeedValve: "/systems/fuel/valves/crossfeed-valve", + fuelEngine1Valve: "/systems/fuel/valves/engine-1-lp-valve", + fuelEngine2Valve: "/systems/fuel/valves/engine-2-lp-valve", + fuelTransferValve1: "/systems/fuel/valves/outer-inner-transfer-valve-1", + fuelTransferValve2: "/systems/fuel/valves/outer-inner-transfer-valve-2", + fuelLeftSwitch1: "/controls/fuel/switches/pump-left-1", + fuelLeftSwitch2: "/controls/fuel/switches/pump-left-2", + fuelCenterSwitch1: "/controls/fuel/switches/pump-center-1", + fuelCenterSwitch2: "/controls/fuel/switches/pump-center-2", + fuelRightSwitch1: "/controls/fuel/switches/pump-right-1", + fuelRightSwitch2: "/controls/fuel/switches/pump-right-2", + fuelTempLeftOuter: "/consumables/fuel/tank[0]/temperature_degC", + fuelTempLeftInner: "/consumables/fuel/tank[1]/temperature_degC", + fuelTempRightOuter: "/consumables/fuel/tank[4]/temperature_degC", + fuelTempRightInner: "/consumables/fuel/tank[3]/temperature_degC", + fuelLeftOuterQty: "/consumables/fuel/tank[0]/level-lbs", + fuelLeftInnerQty: "/consumables/fuel/tank[1]/level-lbs", + fuelRightOuterQty: "/consumables/fuel/tank[4]/level-lbs", + fuelRightInnerQty: "/consumables/fuel/tank[3]/level-lbs", + fuelCenterQty: "/consumables/fuel/tank[2]/level-lbs", + fuelTotalLbs: "/consumables/fuel/total-fuel-lbs", +}; + +foreach (var name; keys(input)) { + emesary.GlobalTransmitter.NotifyAll(notifications.FrameNotificationAddProperty.new("A320 System Display", name, input[name])); +} \ No newline at end of file diff --git a/Models/Instruments/Lower-ECAM/Lower-ECAM-hyd.nas b/Models/Instruments/Lower-ECAM/Lower-ECAM-hyd.nas new file mode 100644 index 00000000..d87f4901 --- /dev/null +++ b/Models/Instruments/Lower-ECAM/Lower-ECAM-hyd.nas @@ -0,0 +1,528 @@ +# A3XX Lower ECAM Canvas +# Copyright (c) 2021 Josh Davidson (Octal450) and Jonathan Redpath + +var elec_pump_y_ovht = props.globals.initNode("/systems/hydraulic/elec-pump-yellow-ovht", 0, "BOOL"); +var elec_pump_b_ovht = props.globals.initNode("/systems/hydraulic/elec-pump-blue-ovht", 0, "BOOL"); +var y_resv_ovht = props.globals.initNode("/systems/hydraulic/yellow-resv-ovht", 0, "BOOL"); +var b_resv_ovht = props.globals.initNode("/systems/hydraulic/blue-resv-ovht", 0, "BOOL"); +var g_resv_ovht = props.globals.initNode("/systems/hydraulic/green-resv-ovht", 0, "BOOL"); +var y_resv_lo_press = props.globals.initNode("/systems/hydraulic/yellow-resv-lo-air-press", 0, "BOOL"); +var b_resv_lo_press = props.globals.initNode("/systems/hydraulic/blue-resv-lo-air-press", 0, "BOOL"); +var g_resv_lo_press = props.globals.initNode("/systems/hydraulic/green-resv-lo-air-press", 0, "BOOL"); + +var canvas_lowerECAMPageHyd = +{ + new: func(svg,name) { + var obj = {parents: [canvas_lowerECAMPageHyd,canvas_lowerECAM_base] }; + obj.group = obj.canvas.createGroup(); + obj.name = name; + + canvas.parsesvg(obj.group, svg, {"font-mapper": obj.font_mapper} ); + + foreach(var key; obj.getKeys()) { + obj[key] = obj.group.getElementById(key); + + var clip_el = obj.group.getElementById(key ~ "_clip"); + if (clip_el != nil) { + clip_el.setVisible(0); + var tran_rect = clip_el.getTransformedBounds(); + + var clip_rect = sprintf("rect(%d,%d, %d,%d)", + tran_rect[1], + tran_rect[2], + tran_rect[3], + tran_rect[0]); + obj[key].set("clip", clip_rect); + obj[key].set("clip-frame", canvas.Element.PARENT); + } + }; + + foreach(var key; obj.getKeysBottom()) { + obj[key] = obj.group.getElementById(key); + }; + + obj.units = acconfig_weight_kgs.getValue(); + + # init + + obj.update_items = [ + props.UpdateManager.FromHashValue("blue", 25, func(val) { + if (val >= 100) { + obj["Press-Blue"].setText(sprintf("%s", math.round(val, 50))); + } else { + obj["Press-Blue"].setText(sprintf("%s", 0)); + } + + if (val > 1450) { + obj["Blue-Line"].setColor(0.0509,0.7529,0.2941); + obj["Blue-Line"].setColorFill(0.0509,0.7529,0.2941); + obj["Blue-Line-Top"].setColorFill(0.0509,0.7529,0.2941); + obj["Blue-Line-Bottom"].setColorFill(0.0509,0.7529,0.2941); + obj["Blue-Indicator"].setColor(0.0509,0.7529,0.2941); + obj["Press-Blue"].setColor(0.0509,0.7529,0.2941); + obj["Blue-label"].setColor(0.8078,0.8039,0.8078); + } else { + obj["Blue-Line"].setColor(0.7333,0.3803,0); + obj["Blue-Line"].setColorFill(0.7333,0.3803,0); + obj["Blue-Line-Top"].setColorFill(0.7333,0.3803,0); + obj["Blue-Line-Bottom"].setColorFill(0.7333,0.3803,0); + obj["Blue-Indicator"].setColor(0.7333,0.3803,0); + obj["Press-Blue"].setColor(0.7333,0.3803,0); + obj["Blue-label"].setColor(0.7333,0.3803,0); + } + }), + props.UpdateManager.FromHashValue("yellow", 25, func(val) { + if (val >= 100) { + obj["Press-Yellow"].setText(sprintf("%s", math.round(val, 50))); + } else { + obj["Press-Yellow"].setText(sprintf("%s", 0)); + } + + if (val > 1450) { + obj["Yellow-Line"].setColor(0.0509,0.7529,0.2941); + obj["Yellow-Line"].setColorFill(0.0509,0.7529,0.2941); + obj["Yellow-Line-Top"].setColorFill(0.0509,0.7529,0.2941); + obj["Yellow-Line-Middle"].setColorFill(0.0509,0.7529,0.2941); + obj["Yellow-Line-Bottom"].setColorFill(0.0509,0.7529,0.2941); + obj["Yellow-Indicator"].setColor(0.0509,0.7529,0.2941); + obj["Press-Yellow"].setColor(0.0509,0.7529,0.2941); + obj["Yellow-label"].setColor(0.8078,0.8039,0.8078); + } else { + obj["Yellow-Line"].setColor(0.7333,0.3803,0); + obj["Yellow-Line"].setColorFill(0.7333,0.3803,0); + obj["Yellow-Line-Top"].setColorFill(0.7333,0.3803,0); + obj["Yellow-Line-Middle"].setColorFill(0.7333,0.3803,0); + obj["Yellow-Line-Bottom"].setColorFill(0.7333,0.3803,0); + obj["Yellow-Indicator"].setColor(0.7333,0.3803,0); + obj["Press-Yellow"].setColor(0.7333,0.3803,0); + obj["Yellow-label"].setColor(0.7333,0.3803,0); + } + }), + props.UpdateManager.FromHashValue("green", 25, func(val) { + if (val >= 100) { + obj["Press-Green"].setText(sprintf("%s", math.round(val, 50))); + } else { + obj["Press-Green"].setText(sprintf("%s", 0)); + } + + if (val > 1450) { + obj["Green-Line"].setColor(0.0509,0.7529,0.2941); + obj["Green-Line"].setColorFill(0.0509,0.7529,0.2941); + obj["Green-Line-Top"].setColorFill(0.0509,0.7529,0.2941); + obj["Green-Line-Middle"].setColorFill(0.0509,0.7529,0.2941); + obj["Green-Line-Bottom"].setColorFill(0.0509,0.7529,0.2941); + obj["Green-Indicator"].setColor(0.0509,0.7529,0.2941); + obj["Press-Green"].setColor(0.0509,0.7529,0.2941); + obj["Green-label"].setColor(0.8078,0.8039,0.8078); + } else { + obj["Green-Line"].setColor(0.7333,0.3803,0); + obj["Green-Line"].setColorFill(0.7333,0.3803,0); + obj["Green-Line-Top"].setColorFill(0.7333,0.3803,0); + obj["Green-Line-Middle"].setColorFill(0.7333,0.3803,0); + obj["Green-Line-Bottom"].setColorFill(0.7333,0.3803,0); + obj["Green-Indicator"].setColor(0.7333,0.3803,0); + obj["Press-Green"].setColor(0.7333,0.3803,0); + obj["Green-label"].setColor(0.7333,0.3803,0); + } + }), + props.UpdateManager.FromHashValue("N2_actual_1", 0.5, func(val) { + if (val >= 59) { + obj["Pump-Green-label"].setColor(0.8078,0.8039,0.8078); + } else { + obj["Pump-Green-label"].setColor(0.7333,0.3803,0); + } + }), + props.UpdateManager.FromHashValue("N2_actual_2", 0.5, func(val) { + if (val >= 59) { + obj["Pump-Yellow-label"].setColor(0.8078,0.8039,0.8078); + } else { + obj["Pump-Yellow-label"].setColor(0.7333,0.3803,0); + } + }), + props.UpdateManager.FromHashValue("hydBlueResvLoPrs", nil, func(val) { + if (val) { + obj["LO-AIR-PRESS-Blue"].show(); + } else { + obj["LO-AIR-PRESS-Blue"].hide(); + } + }), + props.UpdateManager.FromHashValue("hydGreenResvLoPrs", nil, func(val) { + if (val) { + obj["LO-AIR-PRESS-Green"].show(); + } else { + obj["LO-AIR-PRESS-Green"].hide(); + } + }), + props.UpdateManager.FromHashValue("hydYellowResvLoPrs", nil, func(val) { + if (val) { + obj["LO-AIR-PRESS-Yellow"].show(); + } else { + obj["LO-AIR-PRESS-Yellow"].hide(); + } + }), + props.UpdateManager.FromHashValue("hydYellowElecPumpOvht", nil, func(val) { + if (val) { + obj["ELEC-OVHT-Yellow"].show(); + } else { + obj["ELEC-OVHT-Yellow"].hide(); + } + }), + props.UpdateManager.FromHashValue("hydBlueElecPumpOvht", nil, func(val) { + if (val) { + obj["ELEC-OVHT-Blue"].show(); + } else { + obj["ELEC-OVHT-Blue"].hide(); + } + }), + props.UpdateManager.FromHashValue("hydBlueResvOvht", nil, func(val) { + if (val) { + obj["OVHT-Blue"].show(); + } else { + obj["OVHT-Blue"].hide(); + } + }), + props.UpdateManager.FromHashValue("hydGreenResvOvht", nil, func(val) { + if (val) { + obj["OVHT-Green"].show(); + } else { + obj["OVHT-Green"].hide(); + } + }), + props.UpdateManager.FromHashValue("hydYellowResvOvht", nil, func(val) { + if (val) { + obj["OVHT-Yellow"].show(); + } else { + obj["OVHT-Yellow"].hide(); + } + }), + props.UpdateManager.FromHashValue("hydRATPosition", nil, func(val) { + if (val) { + obj["RAT-stowed"].hide(); + obj["RAT-not-stowed"].show(); + } else { + obj["RAT-stowed"].show(); + obj["RAT-not-stowed"].hide(); + } + }), + props.UpdateManager.FromHashValue("hydGreenFireValve", nil, func(val) { + if (val != 0) { + obj["Fire-Valve-Green"].setColor(0.7333,0.3803,0); + obj["Fire-Valve-Green-Cross"].setColorFill(0.7333,0.3803,0); + obj["Fire-Valve-Green"].setRotation(90 * D2R); + } else { + obj["Fire-Valve-Green"].setColor(0.0509,0.7529,0.2941); + obj["Fire-Valve-Green-Cross"].setColorFill(0.0509,0.7529,0.2941); + obj["Fire-Valve-Green"].setRotation(0); + } + }), + props.UpdateManager.FromHashValue("hydYellowFireValve", nil, func(val) { + if (val != 0) { + obj["Fire-Valve-Yellow"].setColor(0.7333,0.3803,0); + obj["Fire-Valve-Yellow-Cross"].setColorFill(0.7333,0.3803,0); + obj["Fire-Valve-Yellow"].setRotation(90 * D2R); + } else { + obj["Fire-Valve-Yellow"].setColor(0.0509,0.7529,0.2941); + obj["Fire-Valve-Yellow-Cross"].setColorFill(0.0509,0.7529,0.2941); + obj["Fire-Valve-Yellow"].setRotation(0); + } + }), + props.UpdateManager.FromHashList(["elecAC1","dcEss"], 1, func(val) { + if (val.elecAC1 >= 110 and val.dcEss >= 25) { + obj["ELEC-Blue-label"].setColor(0.8078,0.8039,0.8078); + } else { + obj["ELEC-Blue-label"].setColor(0.7333,0.3803,0); + } + }), + props.UpdateManager.FromHashList(["elecAC2","dc2"], 1, func(val) { + if (val.elecAC2 >= 110 and val.dc2 >= 25) { + obj["ELEC-Yellow-label"].setColor(0.8078,0.8039,0.8078); + } else { + obj["ELEC-Yellow-label"].setColor(0.7333,0.3803,0); + } + }), + props.UpdateManager.FromHashList(["yellow","hydYellowElecPumpSwitch"], nil, func(val) { + if (!val.hydYellowElecPumpSwitch) { + obj["ELEC-Yellow-on"].hide(); + obj["ELEC-Yellow-off"].show(); + } else { + obj["ELEC-Yellow-on"].show(); + obj["ELEC-Yellow-off"].hide(); + if (val.yellow > 1450) { + obj["ELEC-Yellow-on"].setColor(0.0509,0.7529,0.2941); + } else { + obj["ELEC-Yellow-on"].setColor(0.7333,0.3803,0); + } + } + }), + props.UpdateManager.FromHashList(["blue","hydBlueElecPumpSwitch"], nil, func(val) { + if (val.hydBlueElecPumpSwitch) { + obj["Pump-Blue-off"].hide(); + if (val.blue > 1450) { + obj["Pump-Blue-on"].show(); + obj["Pump-LOPR-Blue"].hide(); + obj["Pump-Blue"].setColorFill(0.0509,0.7529,0.2941); + obj["Pump-Blue"].setColor(0.0509,0.7529,0.2941); + } else { + obj["Pump-Blue-on"].hide(); + obj["Pump-LOPR-Blue"].show(); + obj["Pump-Blue"].setColorFill(0.7333,0.3803,0); + obj["Pump-Blue"].setColor(0.7333,0.3803,0); + } + } else { + obj["Pump-Blue-off"].show(); + obj["Pump-Blue-on"].hide(); + obj["Pump-LOPR-Blue"].hide(); + obj["Pump-Blue"].setColorFill(0.7333,0.3803,0); + obj["Pump-Blue"].setColor(0.7333,0.3803,0); + } + }), + props.UpdateManager.FromHashList(["yellow","hydYellowEDPPumpSwitch"], nil, func(val) { + if (val.hydYellowEDPPumpSwitch) { + obj["Pump-Yellow-off"].hide(); + if (val.yellow > 1450) { + obj["Pump-Yellow-on"].show(); + obj["Pump-LOPR-Yellow"].hide(); + obj["Pump-Yellow"].setColorFill(0.0509,0.7529,0.2941); + obj["Pump-Yellow"].setColor(0.0509,0.7529,0.2941); + } else { + obj["Pump-Yellow-on"].hide(); + obj["Pump-LOPR-Yellow"].show(); + obj["Pump-Yellow"].setColorFill(0.7333,0.3803,0); + obj["Pump-Yellow"].setColor(0.7333,0.3803,0); + } + } else { + obj["Pump-Yellow-off"].show(); + obj["Pump-Yellow-on"].hide(); + obj["Pump-LOPR-Yellow"].hide(); + obj["Pump-Yellow"].setColorFill(0.7333,0.3803,0); + obj["Pump-Yellow"].setColor(0.7333,0.3803,0); + } + }), + props.UpdateManager.FromHashList(["green","hydGreenEDPPumpSwitch"], nil, func(val) { + if (val.hydGreenEDPPumpSwitch) { + obj["Pump-Green-off"].hide(); + if (val.green > 1450) { + obj["Pump-Green-on"].show(); + obj["Pump-LOPR-Green"].hide(); + obj["Pump-Green"].setColor(0.0509,0.7529,0.2941); + obj["Pump-Green"].setColorFill(0.0509,0.7529,0.2941); + } else { + obj["Pump-Green-on"].hide(); + obj["Pump-LOPR-Green"].show(); + obj["Pump-Green"].setColor(0.7333,0.3803,0); + obj["Pump-Green"].setColorFill(0.7333,0.3803,0); + } + } else { + obj["Pump-Green-off"].show(); + obj["Pump-Green-on"].hide(); + obj["Pump-LOPR-Green"].hide(); + obj["Pump-Green"].setColor(0.7333,0.3803,0); + } + }), + props.UpdateManager.FromHashList(["hydPTUSwitch","hydPTUDiff","hydPTUActive","hydPTUFault"], nil, func(val) { + if (val.hydPTUSwitch and !val.hydPTUFault) { + obj["PTU-connection"].setColor(0.0509,0.7529,0.2941); + + if (val.hydPTUActive) { + if (val.hydPTUDiff < 0) { + obj["PTU-Supply-Line"].show(); + obj["PTU-supply-yellow"].show(); + obj["PTU-supply-green"].hide(); + obj["PTU-Auto-or-off"].hide(); + } else { + obj["PTU-Supply-Line"].show(); + obj["PTU-supply-yellow"].hide(); + obj["PTU-supply-green"].show(); + obj["PTU-Auto-or-off"].hide(); + } + } else { + obj["PTU-Auto-or-off"].setColor(0.0509,0.7529,0.2941); + obj["PTU-Supply-Line"].hide(); + obj["PTU-supply-yellow"].hide(); + obj["PTU-supply-green"].hide(); + obj["PTU-Auto-or-off"].show(); + } + } else { + obj["PTU-connection"].setColor(0.7333,0.3803,0); + obj["PTU-Auto-or-off"].setColor(0.7333,0.3803,0); + obj["PTU-Supply-Line"].hide(); + obj["PTU-supply-yellow"].hide(); + obj["PTU-supply-green"].hide(); + obj["PTU-Auto-or-off"].show(); + } + }), + props.UpdateManager.FromHashValue("hydBlueQTY", 0.05, func(val) { + obj["Quantity-Indicator-Blue"].setTranslation(0,((val / 8) * -140) + 140); + if (val >= 2.4) { + obj["Quantity-Indicator-Blue"].setColor(0.0509,0.7529,0.2941); + obj["path5561-4"].setColor(0.0509,0.7529,0.2941); + } else { + obj["Quantity-Indicator-Blue"].setColor(0.7333,0.3803,0); + obj["path5561-4"].setColor(0.7333,0.3803,0); + } + }), + props.UpdateManager.FromHashValue("hydGreenQTY", 0.05, func(val) { + obj["Quantity-Indicator-Green"].setTranslation(0,((val / 18) * -140) + 140); + if (val >= 3.5) { + obj["Quantity-Indicator-Green"].setColor(0.0509,0.7529,0.2941); + obj["path5561-5"].setColor(0.0509,0.7529,0.2941); + } else { + obj["Quantity-Indicator-Green"].setColor(0.7333,0.3803,0); + obj["path5561-5"].setColor(0.7333,0.3803,0); + } + }), + props.UpdateManager.FromHashValue("hydYellowQTY", 0.05, func(val) { + obj["Quantity-Indicator-Yellow"].setTranslation(0,((val / 15) * -140) + 140); + if (val >= 3.5) { + obj["Quantity-Indicator-Yellow"].setColor(0.0509,0.7529,0.2941); + obj["path5561"].setColor(0.0509,0.7529,0.2941); + } else { + obj["Quantity-Indicator-Yellow"].setColor(0.7333,0.3803,0); + obj["path5561"].setColor(0.7333,0.3803,0); + } + }), + ]; + + obj.displayedGForce = 0; + obj.updateItemsBottom = [ + props.UpdateManager.FromHashValue("acconfigUnits", nil, func(val) { + obj.units = val; + if (val) { + obj["GW-weight-unit"].setText("KG"); + } else { + obj["GW-weight-unit"].setText("LBS"); + } + }), + props.UpdateManager.FromHashValue("hour", nil, func(val) { + obj["UTCh"].setText(sprintf("%02d", val)); + }), + props.UpdateManager.FromHashValue("minute", nil, func(val) { + obj["UTCm"].setText(sprintf("%02d", val)); + }), + props.UpdateManager.FromHashValue("gForce", 0.05, func(val) { + if (obj.displayedGForce) { + obj["GLoad"].setText("G.LOAD " ~ sprintf("%3.1f", val)); + } + }), + props.UpdateManager.FromHashValue("gForceDisplay", nil, func(val) { + if ((val == 1 and !obj.displayedGForce) or (val != 0 and obj.displayedGForce)) { + obj.displayedGForce = 1; + obj["GLoad"].show(); + } else { + obj.displayedGForce = 0; + obj["GLoad"].hide(); + } + }), + ]; + return obj; + }, + getKeysBottom: func() { + return ["TAT","SAT","GW","UTCh","UTCm","GLoad","GW-weight-unit"]; + }, + getKeys: func() { + return ["TAT","SAT","GW","UTCh","UTCm","GLoad","GW-weight-unit","Green-Indicator","HYD-Quantity-Group-Blue","HYD-Quantity-Group-Yellow","HYD-Quantity-Group-Green","Blue-Indicator","Yellow-Indicator","Press-Green","Press-Blue","Press-Yellow","Green-Line","Blue-Line","Yellow-Line","Green-Line-Top","Blue-Line-Top","Yellow-Line-Middle","Green-Line-Middle","Yellow-Line-Bottom","Green-Line-Bottom","Blue-Line-Bottom","Yellow-Line-Top","PTU-Supply-Line","PTU-supply-yellow","PTU-supply-green","PTU-connection", + "PTU-Auto-or-off","RAT-label","RAT-stowed","RAT-not-stowed","ELEC-Yellow-off","ELEC-Yellow-on","ELEC-Yellow-label","ELEC-OVTH-Yellow","ELEC-Blue-label","ELEC-OVHT-Blue","ELEC-OVHT-Yellow","Pump-Green-label","Pump-Yellow-label","Pump-Green", + "Pump-LOPR-Green","Pump-Green-off","Pump-Green-on","Pump-Yellow","Pump-LOPR-Yellow","Pump-Yellow-off","Pump-Yellow-on","Pump-Blue","Pump-LOPR-Blue","Pump-Blue-off","Pump-Blue-on","Fire-Valve-Green","Fire-Valve-Yellow","LO-AIR-PRESS-Green", + "LO-AIR-PRESS-Yellow","LO-AIR-PRESS-Blue","OVHT-Green","OVHT-Blue","OVHT-Yellow","Quantity-Indicator-Green","Quantity-Indicator-Blue","Quantity-Indicator-Yellow","Green-label","Blue-label","Yellow-label","Fire-Valve-Yellow-Cross","Fire-Valve-Green-Cross","path5561","path5561-4","path5561-5"]; + }, + updateBottom: func(notification) { + foreach(var update_item_bottom; me.updateItemsBottom) + { + update_item_bottom.update(notification); + } + + if (fmgc.FMGCInternal.fuelRequest and fmgc.FMGCInternal.blockConfirmed and !fmgc.FMGCInternal.fuelCalculating and notification.FWCPhase != 1) { + if (me.units) { + me["GW"].setText(sprintf("%s", math.round(fmgc.FMGCInternal.fuelPredGw * 1000 * LBS2KGS, 100))); + } else { + me["GW"].setText(sprintf("%s", math.round(fmgc.FMGCInternal.fuelPredGw * 1000, 100))); + } + me["GW"].setColor(0.0509,0.7529,0.2941); + } else { + me["GW"].setText(sprintf("%s", "-----")); + me["GW"].setColor(0.0901,0.6039,0.7176); + } + + if (dmc.DMController.DMCs[1].outputs[4] != nil) { + me["SAT"].setText(sprintf("%+2.0f", dmc.DMController.DMCs[1].outputs[4].getValue())); + me["SAT"].setColor(0.0509,0.7529,0.2941); + } else { + me["SAT"].setText(sprintf("%s", "XX")); + me["SAT"].setColor(0.7333,0.3803,0); + } + + if (dmc.DMController.DMCs[1].outputs[5] != nil) { + me["TAT"].setText(sprintf("%+2.0f", dmc.DMController.DMCs[1].outputs[5].getValue())); + me["TAT"].setColor(0.0509,0.7529,0.2941); + } else { + me["TAT"].setText(sprintf("%s", "XX")); + me["TAT"].setColor(0.7333,0.3803,0); + } + }, + update: func(notification) { + me.updatePower(); + + if (me.test.getVisible() == 1) { + me.updateTest(notification); + } + + if (me.group.getVisible() == 0) { + return; + } + + foreach(var update_item; me.update_items) + { + update_item.update(notification); + } + + me.updateBottom(notification); + }, + updatePower: func() { + if (me.name == ecam.SystemDisplayController.displayedPage.name) { + if (du4_lgt.getValue() > 0.01 and systems.ELEC.Bus.ac2.getValue() >= 110) { + if (du4_test_time.getValue() + du4_test_amount.getValue() >= pts.Sim.Time.elapsedSec.getValue()) { + me.group.setVisible(0); + me.test.setVisible(1); + } else { + me.group.setVisible(1); + me.test.setVisible(0); + } + } else { + me.group.setVisible(0); + me.test.setVisible(0); + } + } else { + me.group.setVisible(0); + # don't hide the test group; just let whichever page is active control it + } + }, +}; + +var input = { + hydBlueResvOvht: "/systems/hydraulic/blue-resv-ovht", + hydGreenResvOvht: "/systems/hydraulic/green-resv-ovht", + hydYellowResvOvht: "/systems/hydraulic/yellow-resv-ovht", + hydBlueResvLoPrs: "/systems/hydraulic/blue-resv-lo-air-press", + hydGreenResvLoPrs: "/systems/hydraulic/green-resv-lo-air-press", + hydYellowResvLoPrs: "/systems/hydraulic/yellow-resv-lo-air-press", + hydYellowElecPumpOvht: "/systems/hydraulic/elec-pump-yellow-ovht", + hydBlueElecPumpOvht: "/systems/hydraulic/elec-pump-blue-ovht", + hydRATPosition: "/systems/hydraulic/sources/rat/position", + hydGreenFireValve: "/systems/hydraulic/sources/green-edp/fire-valve", + hydYellowFireValve: "/systems/hydraulic/sources/yellow-edp/fire-valve", + hydBlueElecPumpSwitch: "/controls/hydraulic/switches/blue-elec", + hydGreenEDPPumpSwitch: "/controls/hydraulic/switches/green-edp", + hydYellowElecPumpSwitch: "/controls/hydraulic/switches/yellow-elec", + hydYellowEDPPumpSwitch: "/controls/hydraulic/switches/yellow-edp", + hydPTUSwitch: "/controls/hydraulic/switches/ptu", + hydPTUFault: "/systems/failures/hydraulic/ptu", + hydPTUActive: "/systems/hydraulic/sources/ptu/ptu-hydraulic-condition", + hydPTUDiff: "/systems/hydraulic/yellow-psi-diff", + hydBlueQTY: "/systems/hydraulic/blue-qty", + hydGreenQTY: "/systems/hydraulic/green-qty", + hydYellowQTY: "/systems/hydraulic/yellow-qty", +}; + +foreach (var name; keys(input)) { + emesary.GlobalTransmitter.NotifyAll(notifications.FrameNotificationAddProperty.new("A320 System Display", name, input[name])); +} \ No newline at end of file diff --git a/Models/Instruments/Lower-ECAM/Lower-ECAM-press.nas b/Models/Instruments/Lower-ECAM/Lower-ECAM-press.nas new file mode 100644 index 00000000..89d8f3ff --- /dev/null +++ b/Models/Instruments/Lower-ECAM/Lower-ECAM-press.nas @@ -0,0 +1,229 @@ +# A3XX Lower ECAM Canvas +# Copyright (c) 2021 Josh Davidson (Octal450) and Jonathan Redpath + +var canvas_lowerECAMPagePress = +{ + new: func(svg,name) { + var obj = {parents: [canvas_lowerECAMPagePress,canvas_lowerECAM_base] }; + obj.group = obj.canvas.createGroup(); + obj.name = name; + + canvas.parsesvg(obj.group, svg, {"font-mapper": obj.font_mapper} ); + + foreach(var key; obj.getKeys()) { + obj[key] = obj.group.getElementById(key); + }; + + foreach(var key; obj.getKeysBottom()) { + obj[key] = obj.group.getElementById(key); + }; + + obj.units = acconfig_weight_kgs.getValue(); + + # init + obj["PRESS-Sys-2"].hide(); + obj["PRESS-Outlet-Transit-Failed"].hide(); + obj["PRESS-Inlet-Transit-Failed"].hide(); + + obj.update_items = [ + props.UpdateManager.FromHashValue("pressDelta", 0.05, func(val) { + if (val > 31.9) { + obj["PRESS-deltaP"].setText(sprintf("%2.1f", 31.9)); + } else if (val < -9.9) { + obj["PRESS-deltaP"].setText(sprintf("%2.1f", -9.9)); + } else { + obj["PRESS-deltaP"].setText(sprintf("%2.1f", val)); + } + + if (val < -0.4 or val > 8.5) { + obj["PRESS-deltaP"].setColor(0.7333,0.3803,0); + } else { + obj["PRESS-deltaP"].setColor(0.0509,0.7529,0.2941); + } + }), + props.UpdateManager.FromHashValue("pressVS", 25, func(val) { + if (val > 9950) { + obj["PRESS-Cab-VS"].setText(sprintf("%4.0f", 9950)); + } else if (val < -9950) { + obj["PRESS-Cab-VS"].setText(sprintf("%4.0f", -9950)); + } else { + obj["PRESS-Cab-VS"].setText(sprintf("%-4.0f", math.round(val,50))); + } + + if (abs(val) > 2000) { + obj["PRESS-Cab-VS"].setColor(0.7333,0.3803,0); + } else { + obj["PRESS-Cab-VS"].setColor(0.0509,0.7529,0.2941); + } + }), + props.UpdateManager.FromHashValue("pressAlt", 25, func(val) { + if (val > 32750) { + obj["PRESS-Cab-Alt"].setText(sprintf("%5.0f", 32750)); + } else if (val < -9950) { + obj["PRESS-Cab-Alt"].setText(sprintf("%5.0f", -9950)); + } else { + obj["PRESS-Cab-Alt"].setText(sprintf("%5.0f", math.round(val,50))); + } + + if (val > 9550) { + obj["PRESS-Cab-Alt"].setColor(1,0,0); + } else { + obj["PRESS-Cab-Alt"].setColor(0.0509,0.7529,0.2941); + } + }), + props.UpdateManager.FromHashValue("pressAuto", nil, func(val) { + if (val) { + obj["PRESS-Man"].hide(); + obj["PRESS-Sys-1"].show(); + } else { + obj["PRESS-Man"].show(); + obj["PRESS-Sys-1"].hide(); + } + }), + props.UpdateManager.FromHashList(["flowCtlValve1","engine1State"], nil, func(val) { + if (val.flowCtlValve1 == 0 and val.engine1State == 3) { + obj["PRESS-Pack-1-Triangle"].setColor(0.7333,0.3803,0); + obj["PRESS-Pack-1"].setColor(0.7333,0.3803,0); + } else { + obj["PRESS-Pack-1-Triangle"].setColor(0.0509,0.7529,0.2941); + obj["PRESS-Pack-1"].setColor(0.8078,0.8039,0.8078); + } + }), + props.UpdateManager.FromHashList(["flowCtlValve2","engine2State"], nil, func(val) { + if (val.flowCtlValve2 == 0 and val.engine2State == 3) { + obj["PRESS-Pack-2-Triangle"].setColor(0.7333,0.3803,0); + obj["PRESS-Pack-2"].setColor(0.7333,0.3803,0); + } else { + obj["PRESS-Pack-2-Triangle"].setColor(0.0509,0.7529,0.2941); + obj["PRESS-Pack-2"].setColor(0.8078,0.8039,0.8078); + } + }), + ]; + + obj.displayedGForce = 0; + obj.updateItemsBottom = [ + props.UpdateManager.FromHashValue("acconfigUnits", nil, func(val) { + obj.units = val; + if (val) { + obj["GW-weight-unit"].setText("KG"); + } else { + obj["GW-weight-unit"].setText("LBS"); + } + }), + props.UpdateManager.FromHashValue("hour", nil, func(val) { + obj["UTCh"].setText(sprintf("%02d", val)); + }), + props.UpdateManager.FromHashValue("minute", nil, func(val) { + obj["UTCm"].setText(sprintf("%02d", val)); + }), + props.UpdateManager.FromHashValue("gForce", 0.05, func(val) { + if (obj.displayedGForce) { + obj["GLoad"].setText("G.LOAD " ~ sprintf("%3.1f", val)); + } + }), + props.UpdateManager.FromHashValue("gForceDisplay", nil, func(val) { + if ((val == 1 and !obj.displayedGForce) or (val != 0 and obj.displayedGForce)) { + obj.displayedGForce = 1; + obj["GLoad"].show(); + } else { + obj.displayedGForce = 0; + obj["GLoad"].hide(); + } + }), + ]; + return obj; + }, + getKeysBottom: func() { + return ["TAT","SAT","GW","UTCh","UTCm","GLoad","GW-weight-unit"]; + }, + getKeys: func() { + return["PRESS-Cab-VS", "PRESS-Cab-VS-neg", "PRESS-Cab-Alt", "PRESS-deltaP", "PRESS-LDG-Elev", "PRESS-deltaP-needle", "PRESS-VS-needle", "PRESS-Alt-needle", + "PRESS-Man", "PRESS-Sys-1", "PRESS-Sys-2", "PRESS-Outlet-Transit-Failed", "PRESS-Inlet-Transit-Failed", "PRESS-LDG-Elev-mode","PRESS-Pack-1-Triangle","PRESS-Pack-2-Triangle", + "PRESS-Pack-1","PRESS-Pack-2"]; + }, + updateBottom: func(notification) { + foreach(var update_item_bottom; me.updateItemsBottom) + { + update_item_bottom.update(notification); + } + + if (fmgc.FMGCInternal.fuelRequest and fmgc.FMGCInternal.blockConfirmed and !fmgc.FMGCInternal.fuelCalculating and notification.FWCPhase != 1) { + if (me.units) { + me["GW"].setText(sprintf("%s", math.round(fmgc.FMGCInternal.fuelPredGw * 1000 * LBS2KGS, 100))); + } else { + me["GW"].setText(sprintf("%s", math.round(fmgc.FMGCInternal.fuelPredGw * 1000, 100))); + } + me["GW"].setColor(0.0509,0.7529,0.2941); + } else { + me["GW"].setText(sprintf("%s", "-----")); + me["GW"].setColor(0.0901,0.6039,0.7176); + } + + if (dmc.DMController.DMCs[1].outputs[4] != nil) { + me["SAT"].setText(sprintf("%+2.0f", dmc.DMController.DMCs[1].outputs[4].getValue())); + me["SAT"].setColor(0.0509,0.7529,0.2941); + } else { + me["SAT"].setText(sprintf("%s", "XX")); + me["SAT"].setColor(0.7333,0.3803,0); + } + + if (dmc.DMController.DMCs[1].outputs[5] != nil) { + me["TAT"].setText(sprintf("%+2.0f", dmc.DMController.DMCs[1].outputs[5].getValue())); + me["TAT"].setColor(0.0509,0.7529,0.2941); + } else { + me["TAT"].setText(sprintf("%s", "XX")); + me["TAT"].setColor(0.7333,0.3803,0); + } + }, + update: func(notification) { + me.updatePower(); + + if (me.test.getVisible() == 1) { + me.updateTest(notification); + } + + if (me.group.getVisible() == 0) { + return; + } + + foreach(var update_item; me.update_items) + { + update_item.update(notification); + } + + me.updateBottom(notification); + }, + updatePower: func() { + if (me.name == ecam.SystemDisplayController.displayedPage.name) { + if (du4_lgt.getValue() > 0.01 and systems.ELEC.Bus.ac2.getValue() >= 110) { + if (du4_test_time.getValue() + du4_test_amount.getValue() >= pts.Sim.Time.elapsedSec.getValue()) { + me.group.setVisible(0); + me.test.setVisible(1); + } else { + me.group.setVisible(1); + me.test.setVisible(0); + } + } else { + me.group.setVisible(0); + me.test.setVisible(0); + } + } else { + me.group.setVisible(0); + # don't hide the test group; just let whichever page is active control it + } + }, +}; + +var input = { + pressAlt: "/systems/pressurization/cabinalt-norm", + pressAuto: "/systems/pressurization/auto", + pressDelta: "/systems/pressurization/deltap-norm", + pressVS: "/systems/pressurization/vs-norm", + + flowCtlValve1: "/systems/air-conditioning/valves/flow-control-valve-1", + flowCtlValve2: "/systems/air-conditioning/valves/flow-control-valve-2", +}; + +foreach (var name; keys(input)) { + emesary.GlobalTransmitter.NotifyAll(notifications.FrameNotificationAddProperty.new("A320 System Display", name, input[name])); +} \ No newline at end of file diff --git a/Models/Instruments/Lower-ECAM/Lower-ECAM-sts.nas b/Models/Instruments/Lower-ECAM/Lower-ECAM-sts.nas new file mode 100644 index 00000000..009176d4 --- /dev/null +++ b/Models/Instruments/Lower-ECAM/Lower-ECAM-sts.nas @@ -0,0 +1,147 @@ +# A3XX Lower ECAM Canvas +# Copyright (c) 2021 Josh Davidson (Octal450) and Jonathan Redpath + +var canvas_lowerECAMPageSts = +{ + new: func(svg,name) { + var obj = {parents: [canvas_lowerECAMPageSts,canvas_lowerECAM_base] }; + obj.group = obj.canvas.createGroup(); + obj.name = name; + + canvas.parsesvg(obj.group, svg, {"font-mapper": obj.font_mapper} ); + + foreach(var key; obj.getKeys()) { + obj[key] = obj.group.getElementById(key); + }; + + foreach(var key; obj.getKeysBottom()) { + obj[key] = obj.group.getElementById(key); + }; + + obj.units = acconfig_weight_kgs.getValue(); + + # init + + obj.update_items = [ + ]; + + obj.displayedGForce = 0; + obj.updateItemsBottom = [ + props.UpdateManager.FromHashValue("acconfigUnits", nil, func(val) { + obj.units = val; + if (val) { + obj["GW-weight-unit"].setText("KG"); + } else { + obj["GW-weight-unit"].setText("LBS"); + } + }), + props.UpdateManager.FromHashValue("hour", nil, func(val) { + obj["UTCh"].setText(sprintf("%02d", val)); + }), + props.UpdateManager.FromHashValue("minute", nil, func(val) { + obj["UTCm"].setText(sprintf("%02d", val)); + }), + props.UpdateManager.FromHashValue("gForce", 0.05, func(val) { + if (obj.displayedGForce) { + obj["GLoad"].setText("G.LOAD " ~ sprintf("%3.1f", val)); + } + }), + props.UpdateManager.FromHashValue("gForceDisplay", nil, func(val) { + if ((val == 1 and !obj.displayedGForce) or (val != 0 and obj.displayedGForce)) { + obj.displayedGForce = 1; + obj["GLoad"].show(); + } else { + obj.displayedGForce = 0; + obj["GLoad"].hide(); + } + }), + ]; + return obj; + }, + getKeysBottom: func() { + return ["TAT","SAT","GW","UTCh","UTCm","GLoad","GW-weight-unit"]; + }, + getKeys: func() { + return["Bulk","BulkLine","BulkLbl","Exit1L","Exit1R","Cabin1Left","Cabin1LeftLbl","Cabin1LeftLine","Cabin1LeftSlide","Cabin1Right","Cabin1RightLbl","Cabin1RightLine","Cabin1RightSlide","Cabin2Left","Cabin2LeftLbl", + "Cabin2LeftLine","Cabin2LeftSlide","Cabin2Right","Cabin2RightLbl","Cabin2RightLine","Cabin2RightSlide","Cabin3Left","Cabin3LeftLbl","Cabin3LeftLine","Cabin3LeftSlide","Cabin3Right","Cabin3RightLbl","Cabin3RightLine","Cabin3RightSlide","AvionicsLine1", + "AvionicsLbl1","AvionicsLine2","AvionicsLbl2","Cargo1Line","Cargo1Lbl","Cargo1Door","Cargo2Line","Cargo2Lbl","Cargo2Door","ExitLSlide","ExitLLine","ExitLLbl","ExitRSlide","ExitRLine","ExitRLbl","Cabin4Left","Cabin4LeftLbl","Cabin4LeftLine", + "Cabin4LeftSlide","Cabin4Right","Cabin4RightLbl","Cabin4RightLine","Cabin4RightSlide","DOOROXY-REGUL-LO-PR"];}, + updateBottom: func(notification) { + foreach(var update_item_bottom; me.updateItemsBottom) + { + update_item_bottom.update(notification); + } + + if (fmgc.FMGCInternal.fuelRequest and fmgc.FMGCInternal.blockConfirmed and !fmgc.FMGCInternal.fuelCalculating and notification.FWCPhase != 1) { + if (me.units) { + me["GW"].setText(sprintf("%s", math.round(fmgc.FMGCInternal.fuelPredGw * 1000 * LBS2KGS, 100))); + } else { + me["GW"].setText(sprintf("%s", math.round(fmgc.FMGCInternal.fuelPredGw * 1000, 100))); + } + me["GW"].setColor(0.0509,0.7529,0.2941); + } else { + me["GW"].setText(sprintf("%s", "-----")); + me["GW"].setColor(0.0901,0.6039,0.7176); + } + + if (dmc.DMController.DMCs[1].outputs[4] != nil) { + me["SAT"].setText(sprintf("%+2.0f", dmc.DMController.DMCs[1].outputs[4].getValue())); + me["SAT"].setColor(0.0509,0.7529,0.2941); + } else { + me["SAT"].setText(sprintf("%s", "XX")); + me["SAT"].setColor(0.7333,0.3803,0); + } + + if (dmc.DMController.DMCs[1].outputs[5] != nil) { + me["TAT"].setText(sprintf("%+2.0f", dmc.DMController.DMCs[1].outputs[5].getValue())); + me["TAT"].setColor(0.0509,0.7529,0.2941); + } else { + me["TAT"].setText(sprintf("%s", "XX")); + me["TAT"].setColor(0.7333,0.3803,0); + } + }, + update: func(notification) { + me.updatePower(); + + if (me.test.getVisible() == 1) { + me.updateTest(notification); + } + + if (me.group.getVisible() == 0) { + return; + } + + foreach(var update_item; me.update_items) + { + update_item.update(notification); + } + + me.updateBottom(notification); + }, + updatePower: func() { + if (me.name == ecam.SystemDisplayController.displayedPage.name) { + if (du4_lgt.getValue() > 0.01 and systems.ELEC.Bus.ac2.getValue() >= 110) { + if (du4_test_time.getValue() + du4_test_amount.getValue() >= pts.Sim.Time.elapsedSec.getValue()) { + me.group.setVisible(0); + me.test.setVisible(1); + } else { + me.group.setVisible(1); + me.test.setVisible(0); + } + } else { + me.group.setVisible(0); + me.test.setVisible(0); + } + } else { + me.group.setVisible(0); + # don't hide the test group; just let whichever page is active control it + } + }, +}; + +var input = { +}; + +foreach (var name; keys(input)) { + emesary.GlobalTransmitter.NotifyAll(notifications.FrameNotificationAddProperty.new("A320 System Display", name, input[name])); +} \ No newline at end of file diff --git a/Models/Instruments/Lower-ECAM/Lower-ECAM-wheel.nas b/Models/Instruments/Lower-ECAM/Lower-ECAM-wheel.nas new file mode 100644 index 00000000..3746763d --- /dev/null +++ b/Models/Instruments/Lower-ECAM/Lower-ECAM-wheel.nas @@ -0,0 +1,745 @@ +# A3XX Lower ECAM Canvas +# Copyright (c) 2021 Josh Davidson (Octal450) and Jonathan Redpath + +var canvas_lowerECAMPageWheel = +{ + new: func(svg,name) { + var obj = {parents: [canvas_lowerECAMPageWheel,canvas_lowerECAM_base] }; + obj.group = obj.canvas.createGroup(); + obj.name = name; + + canvas.parsesvg(obj.group, svg, {"font-mapper": obj.font_mapper} ); + + foreach(var key; obj.getKeys()) { + obj[key] = obj.group.getElementById(key); + }; + + foreach(var key; obj.getKeysBottom()) { + obj[key] = obj.group.getElementById(key); + }; + + obj.units = acconfig_weight_kgs.getValue(); + + # init + obj["leftuplock"].hide(); + obj["noseuplock"].hide(); + obj["rightuplock"].hide(); + obj["tirepress1"].hide(); + obj["tirepress2"].hide(); + obj["tirepress3"].hide(); + obj["tirepress4"].hide(); + obj["tirepress5"].hide(); + obj["tirepress6"].hide(); + + + obj.update_items = [ + props.UpdateManager.FromHashList(["gearPosNorm","gearPosNorm1","gearPosNorm2","gearLever"], nil, func(val) { + if (val.gearLever and (val.gearPosNorm != 1 or val.gearPosNorm1 != 1 or val.gearPosNorm2 != 1)) { + obj["lgctltext"].show(); + } elsif (!val.gearLever and (val.gearPosNorm != 0 or val.gearPosNorm1 != 0 or val.gearPosNorm2 != 0)) { + obj["lgctltext"].show(); + } else { + obj["lgctltext"].hide(); + } + }), + props.UpdateManager.FromHashValue("gearPosNorm", nil, func(val) { + if (val < 0.2) { + obj["Triangle-Nose1"].hide(); + obj["Triangle-Nose2"].hide(); + } else { + obj["Triangle-Nose1"].show(); + obj["Triangle-Nose2"].show(); + } + + if (val == 1) { + obj["Triangle-Nose1"].setColor(0.0509,0.7529,0.2941); + obj["Triangle-Nose2"].setColor(0.0509,0.7529,0.2941); + } else { + obj["Triangle-Nose1"].setColor(1,0,0); + obj["Triangle-Nose2"].setColor(1,0,0); + } + }), + props.UpdateManager.FromHashValue("gearPosNorm1", nil, func(val) { + if (val < 0.2) { + obj["Triangle-Left1"].hide(); + obj["Triangle-Left2"].hide(); + } else { + obj["Triangle-Left1"].show(); + obj["Triangle-Left2"].show(); + } + + if (val == 1) { + obj["Triangle-Left1"].setColor(0.0509,0.7529,0.2941); + obj["Triangle-Left2"].setColor(0.0509,0.7529,0.2941); + } else { + obj["Triangle-Left1"].setColor(1,0,0); + obj["Triangle-Left2"].setColor(1,0,0); + } + }), + props.UpdateManager.FromHashValue("gearPosNorm2", nil, func(val) { + if (val < 0.2) { + obj["Triangle-Right1"].hide(); + obj["Triangle-Right2"].hide(); + } else { + obj["Triangle-Right1"].show(); + obj["Triangle-Right2"].show(); + } + + if (val == 1) { + obj["Triangle-Right1"].setColor(0.0509,0.7529,0.2941); + obj["Triangle-Right2"].setColor(0.0509,0.7529,0.2941); + } else { + obj["Triangle-Right1"].setColor(1,0,0); + obj["Triangle-Right2"].setColor(1,0,0); + } + }), + props.UpdateManager.FromHashList(["yellow","green","NWSSwitch","brakesMode","val.accumPressPsiPressPsi","leftBrakeFCS","rightBrakeFCS"], nil, func(val) { + if (val.NWSSwitch and val.yellow >= 1500) { + obj["NWStext"].hide(); + obj["NWS"].hide(); + obj["NWSrect"].hide(); + } else if (!val.NWSSwitch and val.yellow >= 1500) { + obj["NWStext"].show(); + obj["NWS"].show(); + obj["NWS"].setColor(0.0509,0.7529,0.2941); + obj["NWSrect"].show(); + } else { + obj["NWStext"].show(); + obj["NWS"].show(); + obj["NWS"].setColor(0.7333,0.3803,0); + obj["NWSrect"].show(); + } + + if ((val.yellow < 1500 and val.brakesMode == 1) or !val.NWSSwitch) { + obj["antiskidtext"].show(); + obj["antiskidtext"].setColor(0.7333,0.3803,0); + obj["BSCUrect1"].show(); + obj["BSCUrect2"].show(); + obj["BSCU1"].show(); + obj["BSCU2"].show(); + } else { + obj["antiskidtext"].hide(); + obj["BSCUrect1"].hide(); + obj["BSCUrect2"].hide(); + obj["BSCU1"].hide(); + obj["BSCU2"].hide(); + } + + if (val.green >= 1500) { + obj["normbrkhyd"].setColor(0.0509,0.7529,0.2941); + } else { + obj["normbrkhyd"].setColor(0.7333,0.3803,0); + } + + if (val.yellow >= 1500) { + obj["altnbrkhyd"].setColor(0.0509,0.7529,0.2941); + } else { + obj["altnbrkhyd"].setColor(0.7333,0.3803,0); + } + + if (!val.NWSSwitch or val.green < 1500) { + obj["NORMbrk"].show(); + obj["normbrk-rect"].show(); + obj["normbrkhyd"].show(); + } else { + obj["NORMbrk"].hide(); + obj["normbrk-rect"].hide(); + obj["normbrkhyd"].hide(); + } + + if (val.brakesMode != 2 or val.green < 1500 or val.yellow < 1500 or !val.NWSSwitch) { + obj["ALTNbrk"].hide(); + obj["altnbrk-rect"].hide(); + obj["altnbrkhyd"].hide(); + } else { + obj["ALTNbrk"].show(); + obj["altnbrk-rect"].show(); + obj["altnbrkhyd"].show(); + if (val.yellow < 1500 and val.accumPressPsi < 1500) { + obj["ALTNbrk"].setColor(0.7333,0.3803,0); + } else { + obj["ALTNbrk"].setColor(0.0509,0.7529,0.2941); + } + } + + if (val.brakesMode == 2 and val.accumPressPsi < 200 and val.yellow < 1500) { + obj["accuonlyarrow"].hide(); + obj["accuonly"].hide(); + obj["accupress_text"].show(); + obj["brakearrow"].hide(); + obj["accupress_text"].setColor(0.7333,0.3803,0); + } else if (val.brakesMode == 2 and val.NWSSwitch and val.accumPressPsi > 200 and val.yellow >= 1500){ + obj["accuonlyarrow"].hide(); + obj["accuonly"].hide(); + obj["accupress_text"].show(); + obj["brakearrow"].show(); + obj["accupress_text"].setColor(0.0509,0.7529,0.2941); + } else if (val.brakesMode == 2 and val.accumPressPsi > 200 and val.yellow < 1500) { + obj["accuonlyarrow"].show(); + obj["accuonly"].show(); + obj["brakearrow"].hide(); + obj["accupress_text"].hide(); + } else { + obj["accuonlyarrow"].hide(); + obj["accuonly"].hide(); + obj["brakearrow"].hide(); + obj["accupress_text"].hide(); + } + + if (val.brakesMode == 1) { + obj["releaseL1"].hide(); + obj["releaseL2"].hide(); + obj["releaseL3"].hide(); + obj["releaseL4"].hide(); + obj["releaseR1"].hide(); + obj["releaseR2"].hide(); + obj["releaseR3"].hide(); + obj["releaseR4"].hide(); + } else { # Display if the brakes are released and in alternate braking + if (val.leftBrakeFCS == 0) { + obj["releaseL1"].show(); + obj["releaseL2"].show(); + obj["releaseL3"].show(); + obj["releaseL4"].show(); + } else { + obj["releaseL1"].hide(); + obj["releaseL2"].hide(); + obj["releaseL3"].hide(); + obj["releaseL4"].hide(); + } + + if (val.rightBrakeFCS == 0) { + obj["releaseR1"].show(); + obj["releaseR2"].show(); + obj["releaseR3"].show(); + obj["releaseR4"].show(); + } else { + obj["releaseR1"].hide(); + obj["releaseR2"].hide(); + obj["releaseR3"].hide(); + obj["releaseR4"].hide(); + } + } + }), + props.UpdateManager.FromHashList(["brakeAutobrkMode","NWSSwitch"], nil, func(val) { + if (val.brakeAutobrkMode == 0) { + obj["autobrkind"].hide(); + } elsif (val.brakeAutobrkMode == 1) { + obj["autobrkind"].show(); + obj["autobrkind"].setText(sprintf("%s", "LO")); + } elsif (val.brakeAutobrkMode == 2) { + obj["autobrkind"].show(); + obj["autobrkind"].setText(sprintf("%s", "MED")); + } elsif (val.brakeAutobrkMode == 3) { + obj["autobrkind"].show(); + obj["autobrkind"].setText(sprintf("%s", "MAX")); + } + + if (val.brakeAutobrkMode != 0 or !val.NWSSwitch) { + obj["autobrk"].show(); + } else { + obj["autobrk"].hide(); + } + + if (!val.NWSSwitch) { + obj["autobrk"].setColor(0.7333,0.3803,0); + } else { + obj["autobrk"].setColor(0.0509,0.7529,0.2941); + } + }), + props.UpdateManager.FromHashValue("brakeLeft1", 0.5, func(val) { + obj["braketemp1"].setText(sprintf("%s", math.round(val, 5))); + + if (val > 300) { + obj["braketemp1"].setColor(0.7333,0.3803,0); + obj["toparc1"].setColor(0.7333,0.3803,0); + } else { + if (val > 100 and val <= 300) { + obj["toparc1"].setColor(0.0509,0.7529,0.2941); + } else { + obj["toparc1"].setColor(0.8078,0.8039,0.8078); + } + obj["braketemp1"].setColor(0.0509,0.7529,0.2941); + } + }), + props.UpdateManager.FromHashValue("brakeLeft2", 0.5, func(val) { + obj["braketemp2"].setText(sprintf("%s", math.round(val, 5))); + + if (val > 300) { + obj["braketemp2"].setColor(0.7333,0.3803,0); + obj["toparc2"].setColor(0.7333,0.3803,0); + } else { + if (val > 100 and val <= 300) { + obj["toparc2"].setColor(0.0509,0.7529,0.2941); + } else { + obj["toparc2"].setColor(0.8078,0.8039,0.8078); + } + obj["braketemp2"].setColor(0.0509,0.7529,0.2941); + } + }), + props.UpdateManager.FromHashValue("brakeRight1", 0.5, func(val) { + obj["braketemp3"].setText(sprintf("%s", math.round(val, 5))); + + if (val > 300) { + obj["braketemp3"].setColor(0.7333,0.3803,0); + obj["toparc3"].setColor(0.7333,0.3803,0); + } else { + if (val > 100 and val <= 300) { + obj["toparc3"].setColor(0.0509,0.7529,0.2941); + } else { + obj["toparc3"].setColor(0.8078,0.8039,0.8078); + } + obj["braketemp3"].setColor(0.0509,0.7529,0.2941); + } + }), + props.UpdateManager.FromHashValue("brakeRight2", 0.5, func(val) { + obj["braketemp4"].setText(sprintf("%s", math.round(val, 5))); + + if (val > 300) { + obj["braketemp4"].setColor(0.7333,0.3803,0); + obj["toparc4"].setColor(0.7333,0.3803,0); + } else { + if (val > 100 and val <= 300) { + obj["toparc4"].setColor(0.0509,0.7529,0.2941); + } else { + obj["toparc4"].setColor(0.8078,0.8039,0.8078); + } + obj["braketemp4"].setColor(0.0509,0.7529,0.2941); + } + }), + props.UpdateManager.FromHashValue("wheelLeftDoor", 0.5, func(val) { + obj["leftdoor"].setRotation(val * D2R); + }), + props.UpdateManager.FromHashValue("wheelNoseLeftDoor", 0.5, func(val) { + obj["nosegeardoorL"].setRotation(val * D2R); + }), + props.UpdateManager.FromHashValue("wheelNoseRightDoor", 0.5, func(val) { + obj["nosegeardoorR"].setRotation(val * D2R); + }), + props.UpdateManager.FromHashValue("wheelRightDoor", 0.5, func(val) { + obj["rightdoor"].setRotation(val * D2R); + }), + props.UpdateManager.FromHashValue("wheelLeftDoorPos", 0.01, func(val) { + if (val == 0) { + obj["leftdoor"].setColorFill(0.0509,0.7529,0.2941); + } else { + obj["leftdoor"].setColorFill(0.7333,0.3803,0); + } + }), + props.UpdateManager.FromHashValue("wheelNoseDoorPos", 0.01, func(val) { + if (val == 0) { + obj["nosegeardoorL"].setColorFill(0.0509,0.7529,0.2941); + obj["nosegeardoorR"].setColorFill(0.0509,0.7529,0.2941); + } else { + obj["nosegeardoorL"].setColorFill(0.7333,0.3803,0); + obj["nosegeardoorR"].setColorFill(0.7333,0.3803,0); + } + }), + props.UpdateManager.FromHashValue("wheelRightDoorPos", 0.01, func(val) { + if (val == 0) { + obj["rightdoor"].setColorFill(0.0509,0.7529,0.2941); + } else { + obj["rightdoor"].setColorFill(0.7333,0.3803,0); + } + }), + props.UpdateManager.FromHashValue("spoilerL1", 0.5, func(val) { + if (val < 1.5) { + obj["spoiler1Lex"].hide(); + obj["spoiler1Lrt"].show(); + } else { + obj["spoiler1Lrt"].hide(); + obj["spoiler1Lex"].show(); + } + }), + props.UpdateManager.FromHashValue("spoilerL2", 0.5, func(val) { + if (val < 1.5) { + obj["spoiler2Lex"].hide(); + obj["spoiler2Lrt"].show(); + } else { + obj["spoiler2Lrt"].hide(); + obj["spoiler2Lex"].show(); + } + }), + props.UpdateManager.FromHashValue("spoilerL3", 0.5, func(val) { + if (val < 1.5) { + obj["spoiler3Lex"].hide(); + obj["spoiler3Lrt"].show(); + } else { + obj["spoiler3Lrt"].hide(); + obj["spoiler3Lex"].show(); + } + }), + props.UpdateManager.FromHashValue("spoilerL4", 0.5, func(val) { + if (val < 1.5) { + obj["spoiler4Lex"].hide(); + obj["spoiler4Lrt"].show(); + } else { + obj["spoiler4Lrt"].hide(); + obj["spoiler4Lex"].show(); + } + }), + props.UpdateManager.FromHashValue("spoilerL5", 0.5, func(val) { + if (val < 1.5) { + obj["spoiler5Lex"].hide(); + obj["spoiler5Lrt"].show(); + } else { + obj["spoiler5Lrt"].hide(); + obj["spoiler5Lex"].show(); + } + }), + props.UpdateManager.FromHashValue("spoilerR1", 0.5, func(val) { + if (val < 1.5) { + obj["spoiler1Rex"].hide(); + obj["spoiler1Rrt"].show(); + } else { + obj["spoiler1Rrt"].hide(); + obj["spoiler1Rex"].show(); + } + }), + props.UpdateManager.FromHashValue("spoilerR2", 0.5, func(val) { + if (val < 1.5) { + obj["spoiler2Rex"].hide(); + obj["spoiler2Rrt"].show(); + } else { + obj["spoiler2Rrt"].hide(); + obj["spoiler2Rex"].show(); + } + }), + props.UpdateManager.FromHashValue("spoilerR3", 0.5, func(val) { + if (val < 1.5) { + obj["spoiler3Rex"].hide(); + obj["spoiler3Rrt"].show(); + } else { + obj["spoiler3Rrt"].hide(); + obj["spoiler3Rex"].show(); + } + }), + props.UpdateManager.FromHashValue("spoilerR4", 0.5, func(val) { + if (val < 1.5) { + obj["spoiler4Rex"].hide(); + obj["spoiler4Rrt"].show(); + } else { + obj["spoiler4Rrt"].hide(); + obj["spoiler4Rex"].show(); + } + }), + props.UpdateManager.FromHashValue("spoilerR5", 0.5, func(val) { + if (val < 1.5) { + obj["spoiler5Rex"].hide(); + obj["spoiler5Rrt"].show(); + } else { + obj["spoiler5Rrt"].hide(); + obj["spoiler5Rex"].show(); + } + }), + props.UpdateManager.FromHashList(["spoilerL1Failure","spoilerL1","green"], nil, func(val) { + if (val.spoilerL1Failure or val.green < 1500) { + obj["spoiler1Lex"].setColor(0.7333,0.3803,0); + obj["spoiler1Lrt"].setColor(0.7333,0.3803,0); + if (val.spoilerL1 < 1.5) { + obj["spoiler1Lf"].show(); + } else { + obj["spoiler1Lf"].hide(); + } + } else { + obj["spoiler1Lex"].setColor(0.0509,0.7529,0.2941); + obj["spoiler1Lrt"].setColor(0.0509,0.7529,0.2941); + obj["spoiler1Lf"].hide(); + } + }), + props.UpdateManager.FromHashList(["spoilerL2Failure","spoilerL2","yellow"], nil, func(val) { + if (val.spoilerL2Failure or val.yellow < 1500) { + obj["spoiler2Lex"].setColor(0.7333,0.3803,0); + obj["spoiler2Lrt"].setColor(0.7333,0.3803,0); + if (val.spoilerL2 < 1.5) { + obj["spoiler2Lf"].show(); + } else { + obj["spoiler2Lf"].hide(); + } + } else { + obj["spoiler2Lex"].setColor(0.0509,0.7529,0.2941); + obj["spoiler2Lrt"].setColor(0.0509,0.7529,0.2941); + obj["spoiler2Lf"].hide(); + } + }), + props.UpdateManager.FromHashList(["spoilerL3Failure","spoilerL3","blue"], nil, func(val) { + if (val.spoilerL3Failure or val.blue < 1500) { + obj["spoiler3Lex"].setColor(0.7333,0.3803,0); + obj["spoiler3Lrt"].setColor(0.7333,0.3803,0); + if (val.spoilerL3 < 1.5) { + obj["spoiler3Lf"].show(); + } else { + obj["spoiler3Lf"].hide(); + } + } else { + obj["spoiler3Lex"].setColor(0.0509,0.7529,0.2941); + obj["spoiler3Lrt"].setColor(0.0509,0.7529,0.2941); + obj["spoiler3Lf"].hide(); + } + }), + props.UpdateManager.FromHashList(["spoilerL4Failure","spoilerL4","yellow"], nil, func(val) { + if (val.spoilerL4Failure or val.yellow < 1500) { + obj["spoiler4Lex"].setColor(0.7333,0.3803,0); + obj["spoiler4Lrt"].setColor(0.7333,0.3803,0); + if (val.spoilerL4 < 1.5) { + obj["spoiler4Lf"].show(); + } else { + obj["spoiler4Lf"].hide(); + } + } else { + obj["spoiler4Lex"].setColor(0.0509,0.7529,0.2941); + obj["spoiler4Lrt"].setColor(0.0509,0.7529,0.2941); + obj["spoiler4Lf"].hide(); + } + }), + props.UpdateManager.FromHashList(["spoilerL5Failure","spoilerL5","green"], nil, func(val) { + if (val.spoilerL5Failure or val.green < 1500) { + obj["spoiler5Lex"].setColor(0.7333,0.3803,0); + obj["spoiler5Lrt"].setColor(0.7333,0.3803,0); + if (val.spoilerL5 < 1.5) { + obj["spoiler5Lf"].show(); + } else { + obj["spoiler5Lf"].hide(); + } + } else { + obj["spoiler5Lex"].setColor(0.0509,0.7529,0.2941); + obj["spoiler5Lrt"].setColor(0.0509,0.7529,0.2941); + obj["spoiler5Lf"].hide(); + } + }), + props.UpdateManager.FromHashList(["spoilerR1Failure","spoilerR1","green"], nil, func(val) { + if (val.spoilerR1Failure or val.green < 1500) { + obj["spoiler1Rex"].setColor(0.7333,0.3803,0); + obj["spoiler1Rrt"].setColor(0.7333,0.3803,0); + if (val.spoilerR1 < 1.5) { + obj["spoiler1Rf"].show(); + } else { + obj["spoiler1Rf"].hide(); + } + } else { + obj["spoiler1Rex"].setColor(0.0509,0.7529,0.2941); + obj["spoiler1Rrt"].setColor(0.0509,0.7529,0.2941); + obj["spoiler1Rf"].hide(); + } + }), + props.UpdateManager.FromHashList(["spoilerR2Failure","spoilerR2","yellow"], nil, func(val) { + if (val.spoilerR2Failure or val.yellow < 1500) { + obj["spoiler2Rex"].setColor(0.7333,0.3803,0); + obj["spoiler2Rrt"].setColor(0.7333,0.3803,0); + if (val.spoilerR2 < 1.5) { + obj["spoiler2Rf"].show(); + } else { + obj["spoiler2Rf"].hide(); + } + } else { + obj["spoiler2Rex"].setColor(0.0509,0.7529,0.2941); + obj["spoiler2Rrt"].setColor(0.0509,0.7529,0.2941); + obj["spoiler2Rf"].hide(); + } + }), + props.UpdateManager.FromHashList(["spoilerR3Failure","spoilerR3","blue"], nil, func(val) { + if (val.spoilerR3Failure or val.blue < 1500) { + obj["spoiler3Rex"].setColor(0.7333,0.3803,0); + obj["spoiler3Rrt"].setColor(0.7333,0.3803,0); + if (val.spoilerR3 < 1.5) { + obj["spoiler3Rf"].show(); + } else { + obj["spoiler3Rf"].hide(); + } + } else { + obj["spoiler3Rex"].setColor(0.0509,0.7529,0.2941); + obj["spoiler3Rrt"].setColor(0.0509,0.7529,0.2941); + obj["spoiler3Rf"].hide(); + } + }), + props.UpdateManager.FromHashList(["spoilerR4Failure","spoilerR4","yellow"], nil, func(val) { + if (val.spoilerR4Failure or val.yellow < 1500) { + obj["spoiler4Rex"].setColor(0.7333,0.3803,0); + obj["spoiler4Rrt"].setColor(0.7333,0.3803,0); + if (val.spoilerR4 < 1.5) { + obj["spoiler4Rf"].show(); + } else { + obj["spoiler4Rf"].hide(); + } + } else { + obj["spoiler4Rex"].setColor(0.0509,0.7529,0.2941); + obj["spoiler4Rrt"].setColor(0.0509,0.7529,0.2941); + obj["spoiler4Rf"].hide(); + } + }), + props.UpdateManager.FromHashList(["spoilerR5Failure","spoilerR5","green"], nil, func(val) { + if (val.spoilerR5Failure or val.green < 1500) { + obj["spoiler5Rex"].setColor(0.7333,0.3803,0); + obj["spoiler5Rrt"].setColor(0.7333,0.3803,0); + if (val.spoilerR5 < 1.5) { + obj["spoiler5Rf"].show(); + } else { + obj["spoiler5Rf"].hide(); + } + } else { + obj["spoiler5Rex"].setColor(0.0509,0.7529,0.2941); + obj["spoiler5Rrt"].setColor(0.0509,0.7529,0.2941); + obj["spoiler5Rf"].hide(); + } + }), + ]; + + obj.displayedGForce = 0; + obj.updateItemsBottom = [ + props.UpdateManager.FromHashValue("acconfigUnits", nil, func(val) { + obj.units = val; + if (val) { + obj["GW-weight-unit"].setText("KG"); + } else { + obj["GW-weight-unit"].setText("LBS"); + } + }), + props.UpdateManager.FromHashValue("hour", nil, func(val) { + obj["UTCh"].setText(sprintf("%02d", val)); + }), + props.UpdateManager.FromHashValue("minute", nil, func(val) { + obj["UTCm"].setText(sprintf("%02d", val)); + }), + props.UpdateManager.FromHashValue("gForce", 0.05, func(val) { + if (obj.displayedGForce) { + obj["GLoad"].setText("G.LOAD " ~ sprintf("%3.1f", val)); + } + }), + props.UpdateManager.FromHashValue("gForceDisplay", nil, func(val) { + if ((val == 1 and !obj.displayedGForce) or (val != 0 and obj.displayedGForce)) { + obj.displayedGForce = 1; + obj["GLoad"].show(); + } else { + obj.displayedGForce = 0; + obj["GLoad"].hide(); + } + }), + ]; + return obj; + }, + getKeysBottom: func() { + return ["TAT","SAT","GW","UTCh","UTCm","GLoad","GW-weight-unit"]; + }, + getKeys: func() { + return["lgctltext","NORMbrk","NWStext","leftdoor","rightdoor","nosegeardoorL","nosegeardoorR", + "autobrk","autobrkind","NWS","NWSrect","normbrk-rect","altnbrk","normbrkhyd","spoiler1Rex","spoiler1Rrt","spoiler2Rex","spoiler2Rrt","spoiler3Rex", + "spoiler3Rrt","spoiler4Rex","spoiler4Rrt","spoiler5Rex","spoiler5Rrt","spoiler1Lex","spoiler1Lrt","spoiler2Lex","spoiler2Lrt", + "spoiler3Lex","spoiler3Lrt","spoiler4Lex","spoiler4Lrt","spoiler5Lex","spoiler5Lrt","spoiler1Rf","spoiler2Rf","spoiler3Rf","spoiler4Rf","spoiler5Rf", + "spoiler1Lf","spoiler2Lf","spoiler3Lf","spoiler4Lf","spoiler5Lf","ALTNbrk","altnbrkhyd","altnbrk-rect","antiskidtext","brakearrow","accupress_text", + "accuonlyarrow","accuonly","braketemp1","normbrkhyd","braketemp2","braketemp3","braketemp4","toparc1","toparc2","toparc3","toparc4","leftuplock", + "noseuplock","rightuplock","Triangle-Left1","Triangle-Left2","Triangle-Nose1","Triangle-Nose2","Triangle-Right1","Triangle-Right2","BSCUrect1", + "BSCUrect2","BSCU1","BSCU2","tirepress1","tirepress2","tirepress3","tirepress4","tirepress5","tirepress6","releaseL1","releaseL2","releaseR1","releaseR2", + "releaseL3","releaseL4","releaseR3","releaseR4"]; + }, + updateBottom: func(notification) { + foreach(var update_item_bottom; me.updateItemsBottom) + { + update_item_bottom.update(notification); + } + + if (fmgc.FMGCInternal.fuelRequest and fmgc.FMGCInternal.blockConfirmed and !fmgc.FMGCInternal.fuelCalculating and notification.FWCPhase != 1) { + if (me.units) { + me["GW"].setText(sprintf("%s", math.round(fmgc.FMGCInternal.fuelPredGw * 1000 * LBS2KGS, 100))); + } else { + me["GW"].setText(sprintf("%s", math.round(fmgc.FMGCInternal.fuelPredGw * 1000, 100))); + } + me["GW"].setColor(0.0509,0.7529,0.2941); + } else { + me["GW"].setText(sprintf("%s", "-----")); + me["GW"].setColor(0.0901,0.6039,0.7176); + } + + if (dmc.DMController.DMCs[1].outputs[4] != nil) { + me["SAT"].setText(sprintf("%+2.0f", dmc.DMController.DMCs[1].outputs[4].getValue())); + me["SAT"].setColor(0.0509,0.7529,0.2941); + } else { + me["SAT"].setText(sprintf("%s", "XX")); + me["SAT"].setColor(0.7333,0.3803,0); + } + + if (dmc.DMController.DMCs[1].outputs[5] != nil) { + me["TAT"].setText(sprintf("%+2.0f", dmc.DMController.DMCs[1].outputs[5].getValue())); + me["TAT"].setColor(0.0509,0.7529,0.2941); + } else { + me["TAT"].setText(sprintf("%s", "XX")); + me["TAT"].setColor(0.7333,0.3803,0); + } + }, + update: func(notification) { + me.updatePower(); + + if (me.test.getVisible() == 1) { + me.updateTest(notification); + } + + if (me.group.getVisible() == 0) { + return; + } + + foreach(var update_item; me.update_items) + { + update_item.update(notification); + } + + me.updateBottom(notification); + }, + updatePower: func() { + if (me.name == ecam.SystemDisplayController.displayedPage.name) { + if (du4_lgt.getValue() > 0.01 and systems.ELEC.Bus.ac2.getValue() >= 110) { + if (du4_test_time.getValue() + du4_test_amount.getValue() >= pts.Sim.Time.elapsedSec.getValue()) { + me.group.setVisible(0); + me.test.setVisible(1); + } else { + me.group.setVisible(1); + me.test.setVisible(0); + } + } else { + me.group.setVisible(0); + me.test.setVisible(0); + } + } else { + me.group.setVisible(0); + # don't hide the test group; just let whichever page is active control it + } + }, +}; + +var input = { + brakeAutobrkMode: "/controls/autobrake/mode", + brakeLeft1: "/gear/gear[1]/L1brake-temp-degc", + brakeLeft2: "/gear/gear[1]/L2brake-temp-degc", + brakeRight1: "/gear/gear[2]/R3brake-temp-degc", + brakeRight2: "/gear/gear[2]/R4brake-temp-degc", + wheelLeftDoor: "/ECAM/Lower/door-left", + wheelNoseLeftDoor: "/ECAM/Lower/door-nose-left", + wheelNoseRightDoor: "/ECAM/Lower/door-nose-right", + wheelRightDoor: "/ECAM/Lower/door-right", + wheelLeftDoorPos: "/systems/hydraulic/gear/door-left", + wheelNoseDoorPos: "/systems/hydraulic/gear/door-nose", + wheelRightDoorPos: "/systems/hydraulic/gear/door-right", + + spoilerL1: "/fdm/jsbsim/hydraulics/spoiler-l1/final-deg", + spoilerL2: "/fdm/jsbsim/hydraulics/spoiler-l2/final-deg", + spoilerL3: "/fdm/jsbsim/hydraulics/spoiler-l3/final-deg", + spoilerL4: "/fdm/jsbsim/hydraulics/spoiler-l4/final-deg", + spoilerL5: "/fdm/jsbsim/hydraulics/spoiler-l5/final-deg", + spoilerR1: "/fdm/jsbsim/hydraulics/spoiler-r1/final-deg", + spoilerR2: "/fdm/jsbsim/hydraulics/spoiler-r2/final-deg", + spoilerR3: "/fdm/jsbsim/hydraulics/spoiler-r3/final-deg", + spoilerR4: "/fdm/jsbsim/hydraulics/spoiler-r4/final-deg", + spoilerR5: "/fdm/jsbsim/hydraulics/spoiler-r5/final-deg", + spoilerL1Failure: "/systems/failures/spoilers/spoiler-l1", + spoilerL2Failure: "/systems/failures/spoilers/spoiler-l2", + spoilerL3Failure: "/systems/failures/spoilers/spoiler-l3", + spoilerL4Failure: "/systems/failures/spoilers/spoiler-l4", + spoilerL5Failure: "/systems/failures/spoilers/spoiler-l5", + spoilerR1Failure: "/systems/failures/spoilers/spoiler-r1", + spoilerR2Failure: "/systems/failures/spoilers/spoiler-r2", + spoilerR3Failure: "/systems/failures/spoilers/spoiler-r3", + spoilerR4Failure: "/systems/failures/spoilers/spoiler-r4", + spoilerR5Failure: "/systems/failures/spoilers/spoiler-r5", +}; + +foreach (var name; keys(input)) { + emesary.GlobalTransmitter.NotifyAll(notifications.FrameNotificationAddProperty.new("A320 System Display", name, input[name])); +} \ No newline at end of file diff --git a/Models/Instruments/Lower-ECAM/Lower-ECAM.nas b/Models/Instruments/Lower-ECAM/Lower-ECAM.nas index 1c50b4f0..02c0bc3f 100644 --- a/Models/Instruments/Lower-ECAM/Lower-ECAM.nas +++ b/Models/Instruments/Lower-ECAM/Lower-ECAM.nas @@ -1,3624 +1,77 @@ # A3XX Lower ECAM Canvas +# Copyright (c) 2021 Josh Davidson (Octal450) and Jonathan Redpath -# Copyright (c) 2021 Josh Davidson (Octal450) - -var lowerECAM_apu = nil; -var lowerECAM_bleed = nil; -var lowerECAM_cond = nil; -var lowerECAM_crz = nil; -var lowerECAM_door = nil; -var lowerECAM_elec = nil; -var lowerECAM_eng = nil; -var lowerECAM_fctl = nil; -var lowerECAM_fuel = nil; -var lowerECAM_hyd = nil; -var lowerECAM_press = nil; -var lowerECAM_status = nil; -var lowerECAM_wheel = nil; -var lowerECAM_test = nil; -var lowerECAM_display = nil; -var page = "fctl"; -var blue_psi = 0; -var green_psi = 0; -var yellow_psi = 0; -var autobrakemode = 0; -var nosegear = 0; -var leftgear = 0; -var rightgear = 0; -var leftdoor = 0; -var rightdoor = 0; -var nosedoor = 0; -var gearlvr = 0; -var elapsedtime = 0; -var tr1_v = 0; -var tr1_a = 0; -var tr2_v = 0; -var tr2_a = 0; -var essTramps = 0; -var essTrvolts = 0; -var elac1Node = 0; -var elac2Node = 0; -var sec1Node = 0; -var sec2Node = 0; -var eng_valve_state = 0; -var bleed_valve_cur = 0; -var hp_valve_state = 0; -var xbleedcmdstate = 0; -var ramAirState = 0; - -# Conversion factor pounds to kilogram -LBS2KGS = 0.4535924; - -# Fetch Nodes -var acconfig_weight_kgs = props.globals.getNode("/systems/acconfig/options/weight-kgs", 1); -var rate = props.globals.getNode("/systems/acconfig/options/lecam-rate", 1); -var autoconfig_running = props.globals.getNode("/systems/acconfig/autoconfig-running", 1); -var lighting_du4 = props.globals.getNode("/controls/lighting/DU/du4", 1); -var ecam_page = props.globals.getNode("/ECAM/Lower/page", 1); -var hour = props.globals.getNode("/sim/time/utc/hour", 1); -var minute = props.globals.getNode("/sim/time/utc/minute", 1); -var apu_flap = props.globals.getNode("/controls/apu/inlet-flap/position-norm", 1); -var apu_rpm = props.globals.getNode("/engines/engine[2]/n1", 1); -var apu_egt = props.globals.getNode("/systems/apu/egt-degC", 1); -var door_left = props.globals.getNode("/ECAM/Lower/door-left", 1); -var door_right = props.globals.getNode("/ECAM/Lower/door-right", 1); -var door_nose_left = props.globals.getNode("/ECAM/Lower/door-nose-left", 1); -var door_nose_right = props.globals.getNode("/ECAM/Lower/door-nose-right", 1); -var apu_rpm_rot = props.globals.getNode("/ECAM/Lower/APU-N", 1); -var apu_egt_rot = props.globals.getNode("/ECAM/Lower/APU-EGT", 1); -var oil_qt1 = props.globals.getNode("/ECAM/Lower/Oil-QT[0]", 1); -var oil_qt2 = props.globals.getNode("/ECAM/Lower/Oil-QT[1]", 1); -var oil_psi1 = props.globals.getNode("/ECAM/Lower/Oil-PSI[0]", 1); -var oil_psi2 = props.globals.getNode("/ECAM/Lower/Oil-PSI[1]", 1); -var bleedapu = props.globals.getNode("/systems/pneumatics/source/apu-psi", 1); -var aileron_ind_left = props.globals.getNode("/ECAM/Lower/aileron-ind-left", 1); -var aileron_ind_right = props.globals.getNode("/ECAM/Lower/aileron-ind-right", 1); -var elevator_ind_left = props.globals.getNode("/ECAM/Lower/elevator-ind-left", 1); -var elevator_ind_right = props.globals.getNode("/ECAM/Lower/elevator-ind-right", 1); -var elevator_trim_deg = props.globals.getNode("/ECAM/Lower/elevator-trim-deg", 1); -var final_deg = props.globals.getNode("/fdm/jsbsim/hydraulics/rudder/final-deg", 1); -var temperature_degc = props.globals.getNode("/environment/temperature-degc", 1); -var tank3_content_lbs = props.globals.getNode("/fdm/jsbsim/propulsion/tank[2]/contents-lbs", 1); -var ir2_knob = props.globals.getNode("/controls/adirs/ir[1]/knob", 1); -var apuBleedNotOn = props.globals.getNode("/systems/pneumatics/warnings/apu-bleed-not-on", 1); -var apu_valve = props.globals.getNode("/systems/pneumatics/valves/apu-bleed-valve-cmd", 1); -var apu_valve_state = props.globals.getNode("/systems/pneumatics/valves/apu-bleed-valve", 1); -var xbleedcmd = props.globals.getNode("/systems/pneumatics/valves/crossbleed-valve-cmd", 1); -var xbleed = props.globals.getNode("/systems/pneumatics/valves/crossbleed-valve", 1); -var xbleedstate = nil; -var hp_valve1_state = props.globals.getNode("/systems/pneumatics/valves/engine-1-hp-valve", 1); -var hp_valve2_state = props.globals.getNode("/systems/pneumatics/valves/engine-2-hp-valve", 1); -var hp_valve1 = props.globals.getNode("/systems/pneumatics/valves/engine-1-hp-valve-cmd", 1); -var hp_valve2 = props.globals.getNode("/systems/pneumatics/valves/engine-2-hp-valve-cmd", 1); -var eng_valve1 = props.globals.getNode("/systems/pneumatics/valves/engine-1-prv-valve", 1); -var eng_valve2 = props.globals.getNode("/systems/pneumatics/valves/engine-2-prv-valve", 1); -var precooler1_psi = props.globals.getNode("/systems/pneumatics/psi/engine-1-psi", 1); -var precooler2_psi = props.globals.getNode("/systems/pneumatics/psi/engine-2-psi", 1); -var precooler1_temp = props.globals.getNode("/systems/pneumatics/precooler/temp-1", 1); -var precooler2_temp = props.globals.getNode("/systems/pneumatics/precooler/temp-2", 1); -var precooler1_ovht = props.globals.getNode("/systems/pneumatics/precooler/ovht-1", 1); -var precooler2_ovht = props.globals.getNode("/systems/pneumatics/precooler/ovht-2", 1); -var bmc1working = props.globals.getNode("/systems/pneumatics/indicating/bmc1-working", 1); -var bmc2working = props.globals.getNode("/systems/pneumatics/indicating/bmc2-working", 1); -var bmc1 = 0; -var bmc2 = 0; -var gs_kt = props.globals.getNode("/velocities/groundspeed-kt", 1); -var switch_wing_aice = props.globals.getNode("/controls/ice-protection/wing", 1); -var pack1_bypass = props.globals.getNode("/systems/pneumatics/pack-1-bypass", 1); -var pack2_bypass = props.globals.getNode("/systems/pneumatics/pack-2-bypass", 1); -var oil_qt1_actual = props.globals.getNode("/engines/engine[0]/oil-qt-actual", 1); -var oil_qt2_actual = props.globals.getNode("/engines/engine[1]/oil-qt-actual", 1); -var fuel_used_lbs1 = props.globals.getNode("/systems/fuel/fuel-used-1", 1); -var fuel_used_lbs2 = props.globals.getNode("/systems/fuel/fuel-used-2", 1); -var doorL1_pos = props.globals.getNode("/sim/model/door-positions/doorl1/position-norm", 1); -var doorR1_pos = props.globals.getNode("/sim/model/door-positions/doorr1/position-norm", 1); -var doorL4_pos = props.globals.getNode("/sim/model/door-positions/doorl4/position-norm", 1); -var doorR4_pos = props.globals.getNode("/sim/model/door-positions/doorr4/position-norm", 1); -var cargobulk_pos = props.globals.getNode("/sim/model/door-positions/cargobulk/position-norm", 1); -var cargofwd_pos = props.globals.getNode("/sim/model/door-positions/cargofwd/position-norm", 1); -var cargoaft_pos = props.globals.getNode("/sim/model/door-positions/cargoaft/position-norm", 1); -var gLoad = props.globals.getNode("/ECAM/Lower/g-force-display", 1); - -# Hydraulic -var blue_psi = 0; -var green_psi = 0; -var yellow_psi = 0; -var y_resv_lo_air_press = props.globals.getNode("/systems/hydraulic/yellow-resv-lo-air-press", 1); -var b_resv_lo_air_press = props.globals.getNode("/systems/hydraulic/blue-resv-lo-air-press", 1); -var g_resv_lo_air_press = props.globals.getNode("/systems/hydraulic/green-resv-lo-air-press", 1); -var elec_pump_y_ovht = props.globals.getNode("/systems/hydraulic/elec-pump-yellow-ovht", 1); -var elec_pump_b_ovht = props.globals.getNode("/systems/hydraulic/elec-pump-blue-ovht", 1); -var rat_deployed = props.globals.getNode("/controls/hydraulic/rat-deployed", 1); -var y_resv_ovht = props.globals.getNode("/systems/hydraulic/yellow-resv-ovht", 1); -var b_resv_ovht = props.globals.getNode("/systems/hydraulic/blue-resv-ovht", 1); -var g_resv_ovht = props.globals.getNode("/systems/hydraulic/green-resv-ovht", 1); -var askidsw = 0; -var brakemode = 0; -var accum = 0; -var L1BrakeTempc = props.globals.getNode("/gear/gear[1]/L1brake-temp-degc", 1); -var L2BrakeTempc = props.globals.getNode("/gear/gear[1]/L2brake-temp-degc", 1); -var R3BrakeTempc = props.globals.getNode("/gear/gear[2]/R3brake-temp-degc", 1); -var R4BrakeTempc = props.globals.getNode("/gear/gear[2]/R4brake-temp-degc", 1); - -var eng1_running = props.globals.getNode("/engines/engine[0]/running", 1); -var eng2_running = props.globals.getNode("/engines/engine[1]/running", 1); -var switch_cart = props.globals.getNode("/controls/electrical/ground-cart", 1); -var spoiler_L1 = props.globals.getNode("/fdm/jsbsim/hydraulics/spoiler-l1/final-deg", 1); -var spoiler_L2 = props.globals.getNode("/fdm/jsbsim/hydraulics/spoiler-l2/final-deg", 1); -var spoiler_L3 = props.globals.getNode("/fdm/jsbsim/hydraulics/spoiler-l3/final-deg", 1); -var spoiler_L4 = props.globals.getNode("/fdm/jsbsim/hydraulics/spoiler-l4/final-deg", 1); -var spoiler_L5 = props.globals.getNode("/fdm/jsbsim/hydraulics/spoiler-l5/final-deg", 1); -var spoiler_R1 = props.globals.getNode("/fdm/jsbsim/hydraulics/spoiler-r1/final-deg", 1); -var spoiler_R2 = props.globals.getNode("/fdm/jsbsim/hydraulics/spoiler-r2/final-deg", 1); -var spoiler_R3 = props.globals.getNode("/fdm/jsbsim/hydraulics/spoiler-r3/final-deg", 1); -var spoiler_R4 = props.globals.getNode("/fdm/jsbsim/hydraulics/spoiler-r4/final-deg", 1); -var spoiler_R5 = props.globals.getNode("/fdm/jsbsim/hydraulics/spoiler-r5/final-deg", 1); -var total_fuel_lbs = props.globals.getNode("/consumables/fuel/total-fuel-lbs", 1); -var fuel_flow1 = props.globals.getNode("/engines/engine[0]/ff-actual", 1); -var fuel_flow2 = props.globals.getNode("/engines/engine[1]/ff-actual", 1); -var fuel_left_outer_temp = props.globals.getNode("/consumables/fuel/tank[0]/temperature_degC", 1); -var fuel_left_inner_temp = props.globals.getNode("/consumables/fuel/tank[1]/temperature_degC", 1); -var fuel_right_outer_temp = props.globals.getNode("/consumables/fuel/tank[4]/temperature_degC", 1); -var fuel_right_inner_temp = props.globals.getNode("/consumables/fuel/tank[3]/temperature_degC", 1); -var cutoff_switch1 = props.globals.getNode("/controls/engines/engine[0]/cutoff-switch", 1); -var cutoff_switch2 = props.globals.getNode("/controls/engines/engine[1]/cutoff-switch", 1); -var autobreak_mode = props.globals.getNode("/controls/autobrake/mode", 1); -var gear1_pos = props.globals.getNode("/gear/gear[0]/position-norm", 1); -var gear2_pos = props.globals.getNode("/gear/gear[1]/position-norm", 1); -var gear3_pos = props.globals.getNode("/gear/gear[2]/position-norm", 1); -var gear_door_L = props.globals.getNode("/systems/hydraulic/gear/door-left", 1); -var gear_door_R = props.globals.getNode("/systems/hydraulic/gear/door-right", 1); -var gear_door_N = props.globals.getNode("/systems/hydraulic/gear/door-nose", 1); -var gear_down = props.globals.getNode("/controls/gear/gear-down", 1); -var press_vs_norm = props.globals.getNode("/systems/pressurization/vs-norm", 1); -var cabinalt = props.globals.getNode("/systems/pressurization/cabinalt-norm", 1); -var gear0_wow = props.globals.getNode("/gear/gear[0]/wow", 1); - -# Create Nodes: -var apu_load = props.globals.initNode("/systems/electrical/extra/apu-load", 0, "DOUBLE"); -var gen1_load = props.globals.initNode("/systems/electrical/extra/gen1-load", 0, "DOUBLE"); -var gen2_load = props.globals.initNode("/systems/electrical/extra/gen2-load", 0, "DOUBLE"); -var du4_test = props.globals.initNode("/instrumentation/du/du4-test", 0, "BOOL"); -var du4_test_time = props.globals.initNode("/instrumentation/du/du4-test-time", 0, "DOUBLE"); -var du4_test_amount = props.globals.initNode("/instrumentation/du/du4-test-amount", 0, "DOUBLE"); -var du4_offtime = props.globals.initNode("/instrumentation/du/du4-off-time", 0.0, "DOUBLE"); - -var canvas_lowerECAM_base = { - init: func(canvas_group, file) { - var font_mapper = func(family, weight) { - return "LiberationFonts/LiberationSans-Regular.ttf"; +var SystemDisplayPageRecipient = +{ + new: func(_ident) + { + var SDRecipient = emesary.Recipient.new(_ident); + SDRecipient.MainScreen = canvas_lowerECAM_base; + SDRecipient.Page = nil; + SDRecipient.Receive = func(notification) + { + if (notification.NotificationType == "FrameNotification") + { + if (SDRecipient.Page == nil) { + SDRecipient.Page = SystemDisplayPageRecipient.pageList.door; + } + if (math.mod(notifications.frameNotification.FrameCount,2) == 0) { + SystemDisplayPageRecipient.pageList.apu.update(notification); + SystemDisplayPageRecipient.pageList.bleed.update(notification); + SystemDisplayPageRecipient.pageList.cond.update(notification); + SystemDisplayPageRecipient.pageList.cruise.update(notification); + SystemDisplayPageRecipient.pageList.door.update(notification); + SystemDisplayPageRecipient.pageList.elec.update(notification); + SystemDisplayPageRecipient.pageList.eng.update(notification); + SystemDisplayPageRecipient.pageList.fctl.update(notification); + SystemDisplayPageRecipient.pageList.fuel.update(notification); + SystemDisplayPageRecipient.pageList.hyd.update(notification); + SystemDisplayPageRecipient.pageList.press.update(notification); + SystemDisplayPageRecipient.pageList.sts.update(notification); + SystemDisplayPageRecipient.pageList.wheel.update(notification); + } + return emesary.Transmitter.ReceiptStatus_OK; + } + return emesary.Transmitter.ReceiptStatus_NotProcessed; }; - - canvas.parsesvg(canvas_group, file, {"font-mapper": font_mapper}); - - var svg_keys = me.getKeys(); - foreach(var key; svg_keys) { - me[key] = canvas_group.getElementById(key); - } - - me.page = canvas_group; - - return me; + return SDRecipient; }, - getKeys: func() { - return []; - }, - updateDu4: func() { - var elapsedtime = pts.Sim.Time.elapsedSec.getValue(); - - if (systems.ELEC.Bus.ac2.getValue() >= 110) { - if (du4_offtime.getValue() + 3 < elapsedtime) { - if (gear0_wow.getValue()) { - if (autoconfig_running.getValue() != 1 and du4_test.getValue() != 1) { - du4_test.setValue(1); - du4_test_amount.setValue(math.round((rand() * 5 ) + 35, 0.1)); - du4_test_time.setValue(elapsedtime); - } else if (autoconfig_running.getValue() and du4_test.getValue() != 1) { - du4_test.setValue(1); - du4_test_amount.setValue(math.round((rand() * 5 ) + 35, 0.1)); - du4_test_time.setValue(elapsedtime - 30); - } - } else { - du4_test.setValue(1); - du4_test_amount.setValue(0); - du4_test_time.setValue(-100); - } - } - } else { - du4_test.setValue(0); - du4_offtime.setValue(elapsedtime); - } - }, - update: func() { - var elapsedtime = pts.Sim.Time.elapsedSec.getValue(); - - if (systems.ELEC.Bus.ac2.getValue() >= 110 and lighting_du4.getValue() > 0.01) { - pts.Instrumentation.Du.du4On.setBoolValue(1); - if (du4_test_time.getValue() + du4_test_amount.getValue() >= elapsedtime) { - lowerECAM_apu.page.hide(); - lowerECAM_bleed.page.hide(); - lowerECAM_cond.page.hide(); - lowerECAM_crz.page.hide(); - lowerECAM_door.page.hide(); - lowerECAM_elec.page.hide(); - lowerECAM_eng.page.hide(); - lowerECAM_fctl.page.hide(); - lowerECAM_fuel.page.hide(); - lowerECAM_press.page.hide(); - lowerECAM_status.page.hide(); - lowerECAM_wheel.page.hide(); - lowerECAM_test.page.show(); - lowerECAM_test.update(); - } else { - lowerECAM_test.page.hide(); - page = ecam_page.getValue(); - if (page == "apu") { - lowerECAM_apu.page.show(); - lowerECAM_bleed.page.hide(); - lowerECAM_cond.page.hide(); - lowerECAM_crz.page.hide(); - lowerECAM_door.page.hide(); - lowerECAM_elec.page.hide(); - lowerECAM_eng.page.hide(); - lowerECAM_fctl.page.hide(); - lowerECAM_fuel.page.hide(); - lowerECAM_press.page.hide(); - lowerECAM_status.page.hide(); - lowerECAM_hyd.page.hide(); - lowerECAM_wheel.page.hide(); - lowerECAM_apu.update(); - } else if (page == "bleed") { - lowerECAM_apu.page.hide(); - lowerECAM_bleed.page.show(); - lowerECAM_cond.page.hide(); - lowerECAM_crz.page.hide(); - lowerECAM_door.page.hide(); - lowerECAM_elec.page.hide(); - lowerECAM_eng.page.hide(); - lowerECAM_fctl.page.hide(); - lowerECAM_fuel.page.hide(); - lowerECAM_press.page.hide(); - lowerECAM_status.page.hide(); - lowerECAM_hyd.page.hide(); - lowerECAM_wheel.page.hide(); - lowerECAM_bleed.update(); - } else if (page == "cond") { - lowerECAM_apu.page.hide(); - lowerECAM_bleed.page.hide(); - lowerECAM_cond.page.show(); - lowerECAM_crz.page.hide(); - lowerECAM_door.page.hide(); - lowerECAM_elec.page.hide(); - lowerECAM_eng.page.hide(); - lowerECAM_fctl.page.hide(); - lowerECAM_fuel.page.hide(); - lowerECAM_press.page.hide(); - lowerECAM_status.page.hide(); - lowerECAM_hyd.page.hide(); - lowerECAM_wheel.page.hide(); - lowerECAM_cond.update(); - } else if (page == "cruise") { - lowerECAM_apu.page.hide(); - lowerECAM_bleed.page.hide(); - lowerECAM_cond.page.hide(); - lowerECAM_crz.page.show(); - lowerECAM_door.page.hide(); - lowerECAM_elec.page.hide(); - lowerECAM_eng.page.hide(); - lowerECAM_fctl.page.hide(); - lowerECAM_fuel.page.hide(); - lowerECAM_press.page.hide(); - lowerECAM_status.page.hide(); - lowerECAM_hyd.page.hide(); - lowerECAM_wheel.page.hide(); - lowerECAM_crz.update(); - } else if (page == "door") { - lowerECAM_apu.page.hide(); - lowerECAM_bleed.page.hide(); - lowerECAM_cond.page.hide(); - lowerECAM_crz.page.hide(); - lowerECAM_door.page.show(); - lowerECAM_elec.page.hide(); - lowerECAM_eng.page.hide(); - lowerECAM_fctl.page.hide(); - lowerECAM_fuel.page.hide(); - lowerECAM_press.page.hide(); - lowerECAM_status.page.hide(); - lowerECAM_hyd.page.hide(); - lowerECAM_wheel.page.hide(); - lowerECAM_door.update(); - } else if (page == "elec") { - lowerECAM_apu.page.hide(); - lowerECAM_bleed.page.hide(); - lowerECAM_cond.page.hide(); - lowerECAM_crz.page.hide(); - lowerECAM_door.page.hide(); - lowerECAM_elec.page.show(); - lowerECAM_eng.page.hide(); - lowerECAM_fctl.page.hide(); - lowerECAM_fuel.page.hide(); - lowerECAM_press.page.hide(); - lowerECAM_status.page.hide(); - lowerECAM_hyd.page.hide(); - lowerECAM_wheel.page.hide(); - lowerECAM_elec.update(); - } else if (page == "eng") { - lowerECAM_apu.page.hide(); - lowerECAM_bleed.page.hide(); - lowerECAM_cond.page.hide(); - lowerECAM_crz.page.hide(); - lowerECAM_door.page.hide(); - lowerECAM_elec.page.hide(); - lowerECAM_eng.page.show(); - lowerECAM_fctl.page.hide(); - lowerECAM_fuel.page.hide(); - lowerECAM_press.page.hide(); - lowerECAM_status.page.hide(); - lowerECAM_hyd.page.hide(); - lowerECAM_wheel.page.hide(); - lowerECAM_eng.update(); - } else if (page == "fctl") { - lowerECAM_apu.page.hide(); - lowerECAM_bleed.page.hide(); - lowerECAM_cond.page.hide(); - lowerECAM_crz.page.hide(); - lowerECAM_door.page.hide(); - lowerECAM_elec.page.hide(); - lowerECAM_eng.page.hide(); - lowerECAM_fctl.page.show(); - lowerECAM_fuel.page.hide(); - lowerECAM_press.page.hide(); - lowerECAM_status.page.hide(); - lowerECAM_hyd.page.hide(); - lowerECAM_wheel.page.hide(); - lowerECAM_fctl.update(); - } else if (page == "fuel") { - lowerECAM_apu.page.hide(); - lowerECAM_bleed.page.hide(); - lowerECAM_cond.page.hide(); - lowerECAM_crz.page.hide(); - lowerECAM_door.page.hide(); - lowerECAM_elec.page.hide(); - lowerECAM_eng.page.hide(); - lowerECAM_fctl.page.hide(); - lowerECAM_fuel.page.show(); - lowerECAM_press.page.hide(); - lowerECAM_status.page.hide(); - lowerECAM_hyd.page.hide(); - lowerECAM_wheel.page.hide(); - lowerECAM_fuel.update(); - } else if (page == "press") { - lowerECAM_apu.page.hide(); - lowerECAM_bleed.page.hide(); - lowerECAM_cond.page.hide(); - lowerECAM_crz.page.hide(); - lowerECAM_door.page.hide(); - lowerECAM_elec.page.hide(); - lowerECAM_eng.page.hide(); - lowerECAM_fctl.page.hide(); - lowerECAM_fuel.page.hide(); - lowerECAM_press.page.show(); - lowerECAM_status.page.hide(); - lowerECAM_hyd.page.hide(); - lowerECAM_wheel.page.hide(); - lowerECAM_press.update(); - } else if (page == "sts") { - lowerECAM_apu.page.hide(); - lowerECAM_bleed.page.hide(); - lowerECAM_cond.page.hide(); - lowerECAM_crz.page.hide(); - lowerECAM_door.page.hide(); - lowerECAM_elec.page.hide(); - lowerECAM_eng.page.hide(); - lowerECAM_fctl.page.hide(); - lowerECAM_fuel.page.hide(); - lowerECAM_press.page.hide(); - lowerECAM_status.page.show(); - lowerECAM_hyd.page.hide(); - lowerECAM_wheel.page.hide(); - lowerECAM_status.update(); - } else if (page == "hyd") { - lowerECAM_apu.page.hide(); - lowerECAM_bleed.page.hide(); - lowerECAM_cond.page.hide(); - lowerECAM_crz.page.hide(); - lowerECAM_door.page.hide(); - lowerECAM_elec.page.hide(); - lowerECAM_eng.page.hide(); - lowerECAM_fctl.page.hide(); - lowerECAM_fuel.page.hide(); - lowerECAM_press.page.hide(); - lowerECAM_status.page.hide(); - lowerECAM_hyd.page.show(); - lowerECAM_wheel.page.hide(); - lowerECAM_hyd.update(); - } else if (page == "wheel") { - lowerECAM_apu.page.hide(); - lowerECAM_bleed.page.hide(); - lowerECAM_cond.page.hide(); - lowerECAM_crz.page.hide(); - lowerECAM_door.page.hide(); - lowerECAM_elec.page.hide(); - lowerECAM_eng.page.hide(); - lowerECAM_fctl.page.hide(); - lowerECAM_fuel.page.hide(); - lowerECAM_press.page.hide(); - lowerECAM_status.page.hide(); - lowerECAM_hyd.page.hide(); - lowerECAM_wheel.page.show(); - lowerECAM_wheel.update(); - } else { - lowerECAM_apu.page.hide(); - lowerECAM_bleed.page.hide(); - lowerECAM_cond.page.hide(); - lowerECAM_crz.page.hide(); - lowerECAM_door.page.hide(); - lowerECAM_elec.page.hide(); - lowerECAM_eng.page.hide(); - lowerECAM_fctl.page.hide(); - lowerECAM_fuel.page.hide(); - lowerECAM_press.page.hide(); - lowerECAM_status.page.hide(); - lowerECAM_hyd.page.hide(); - lowerECAM_wheel.page.hide(); - } - } - } else { - lowerECAM_test.page.hide(); - lowerECAM_apu.page.hide(); - lowerECAM_bleed.page.hide(); - lowerECAM_cond.page.hide(); - lowerECAM_crz.page.hide(); - lowerECAM_door.page.hide(); - lowerECAM_elec.page.hide(); - lowerECAM_eng.page.hide(); - lowerECAM_fctl.page.hide(); - lowerECAM_fuel.page.hide(); - lowerECAM_press.page.hide(); - lowerECAM_status.page.hide(); - lowerECAM_hyd.page.hide(); - lowerECAM_wheel.page.hide(); - pts.Instrumentation.Du.du4On.setBoolValue(0); - } - }, - displayedGForce: 0, - updateBottomStatus: func() { - if (dmc.DMController.DMCs[1].outputs[4] != nil) { - me["SAT"].setText(sprintf("%2.0f", dmc.DMController.DMCs[1].outputs[4].getValue())); - me["SAT"].setColor(0.0509,0.7529,0.2941); - } else { - me["SAT"].setText(sprintf("%s", "XX")); - me["SAT"].setColor(0.7333,0.3803,0); - } - - if (dmc.DMController.DMCs[1].outputs[5] != nil) { - me["TAT"].setText(sprintf("%2.0f", dmc.DMController.DMCs[1].outputs[5].getValue())); - me["TAT"].setColor(0.0509,0.7529,0.2941); - } else { - me["TAT"].setText(sprintf("%s", "XX")); - me["TAT"].setColor(0.7333,0.3803,0); - } - - me.gloadStore = gLoad.getValue(); - if ((me.gloadStore == 1 and !me.displayedGForce) or (me.gloadStore != 0 and me.displayedGForce)) { - me.displayedGForce = 1; - me["GLoad"].setText("G.LOAD " ~ sprintf("%3.1f", pts.Accelerations.pilotGDamped.getValue())); - me["GLoad"].show(); - } else { - me.displayedGForce = 0; - me["GLoad"].hide(); - } - - me["UTCh"].setText(sprintf("%02d", hour.getValue())); - me["UTCm"].setText(sprintf("%02d", minute.getValue())); - - if (fmgc.FMGCInternal.fuelRequest and fmgc.FMGCInternal.blockConfirmed and !fmgc.FMGCInternal.fuelCalculating and ecam.phaseNode.getValue() != 1) { - if (acconfig_weight_kgs.getValue()) { - me["GW"].setText(sprintf("%s", math.round(fmgc.FMGCInternal.fuelPredGw * 1000 * LBS2KGS, 100))); - } else { - me["GW"].setText(sprintf("%s", math.round(fmgc.FMGCInternal.fuelPredGw * 1000, 100))); - } - me["GW"].setColor(0.0509,0.7529,0.2941); - } else { - me["GW"].setText(sprintf("%s", "-----")); - me["GW"].setColor(0.0901,0.6039,0.7176); - } - - if (acconfig_weight_kgs.getValue()) { - me["GW-weight-unit"].setText("KG"); - } else { - me["GW-weight-unit"].setText("LBS"); - } + pageList: { + apu: canvas_lowerECAMPageApu.new("Aircraft/A320-family/Models/Instruments/Lower-ECAM/res/apu.svg","apu"), + bleed: canvas_lowerECAMPageBleed.new("Aircraft/A320-family/Models/Instruments/Lower-ECAM/res/bleed.svg","bleed"), + cond: canvas_lowerECAMPageCond.new("Aircraft/A320-family/Models/Instruments/Lower-ECAM/res/cond.svg","cond"), + cruise: canvas_lowerECAMPageCruise.new("Aircraft/A320-family/Models/Instruments/Lower-ECAM/res/crz.svg","cruise"), + door: canvas_lowerECAMPageDoor.new("Aircraft/A320-family/Models/Instruments/Lower-ECAM/res/door.svg","door"), + elec: canvas_lowerECAMPageElec.new("Aircraft/A320-family/Models/Instruments/Lower-ECAM/res/elec.svg","elec"), + eng: canvas_lowerECAMPageEng.new("Aircraft/A320-family/Models/Instruments/Lower-ECAM/res/eng.svg","eng"), + fctl: canvas_lowerECAMPageFctl.new("Aircraft/A320-family/Models/Instruments/Lower-ECAM/res/fctl.svg","fctl"), + fuel: canvas_lowerECAMPageFuel.new("Aircraft/A320-family/Models/Instruments/Lower-ECAM/res/fuel.svg","fuel"), + hyd: canvas_lowerECAMPageHyd.new("Aircraft/A320-family/Models/Instruments/Lower-ECAM/res/hyd.svg","hyd"), + press: canvas_lowerECAMPagePress.new("Aircraft/A320-family/Models/Instruments/Lower-ECAM/res/press.svg","press"), + sts: canvas_lowerECAMPageSts.new("Aircraft/A320-family/Models/Instruments/Lower-ECAM/res/status.svg","sts"), + wheel: canvas_lowerECAMPageWheel.new("Aircraft/A320-family/Models/Instruments/Lower-ECAM/res/wheel.svg","wheel") }, }; -var canvas_lowerECAM_apu = { - new: func(canvas_group, file) { - var m = {parents: [canvas_lowerECAM_apu, canvas_lowerECAM_base]}; - m.init(canvas_group, file); +var A320SD = SystemDisplayPageRecipient.new("A320 SD"); +emesary.GlobalTransmitter.Register(A320SD); - return m; - }, - getKeys: func() { - return ["TAT","SAT","GW","UTCh","UTCm","GLoad","GW-weight-unit","APUN-needle","APUEGT-needle","APUN","APUEGT","APUAvail","APUFlapOpen","APUBleedValve","APUBleedOnline","APUGenOnline","APUGentext","APUGenLoad","APUGenbox","APUGenVolt","APUGenHz","APUBleedPSI","APUfuelLO","APU-low-oil", - "text3724","text3728","text3732"]; - }, - update: func() { - # Avail and Flap Open - if (apu_flap.getValue()) { - me["APUFlapOpen"].show(); - } else { - me["APUFlapOpen"].hide(); - } - - if (apu_rpm.getValue() > 94.9) { - me["APUAvail"].show(); - } else { - me["APUAvail"].hide(); - } - - if (!systems.FUEL.Pumps.apu.getBoolValue() and systems.FUEL.Pumps.allOff.getBoolValue()) { - me["APUfuelLO"].show(); - } else { - me["APUfuelLO"].hide(); - } - - # APU Gen - if (systems.ELEC.Source.APU.volts.getValue() >= 110) { - me["APUGenVolt"].setColor(0.0509,0.7529,0.2941); - } else { - me["APUGenVolt"].setColor(0.7333,0.3803,0); - } - - if (systems.ELEC.Source.APU.hertz.getValue() > 380) { - me["APUGenHz"].setColor(0.0509,0.7529,0.2941); - } else { - me["APUGenHz"].setColor(0.7333,0.3803,0); - } - - if (systems.APUNodes.Controls.master.getValue() or apu_rpm.getValue() >= 94.9) { - me["APUGenbox"].show(); - me["APUGenHz"].show(); - me["APUGenVolt"].show(); - me["APUGenLoad"].show(); - me["text3724"].show(); - me["text3728"].show(); - me["text3732"].show(); - } else { - me["APUGenbox"].hide(); - me["APUGenHz"].hide(); - me["APUGenVolt"].hide(); - me["APUGenLoad"].hide(); - me["text3724"].hide(); - me["text3728"].hide(); - me["text3732"].hide(); - } - - if ((apu_rpm.getValue() > 94.9) and (systems.ELEC.Source.APU.contact.getValue())) { - me["APUGenOnline"].show(); - } else { - me["APUGenOnline"].hide(); - } - - if ((systems.APUNodes.Controls.master.getValue() == 0) or ((systems.APUNodes.Controls.master.getValue()) and (systems.ELEC.Source.APU.contact.getValue()) and (apu_rpm.getValue() > 94.9))) { - me["APUGentext"].setColor(0.8078,0.8039,0.8078); - } else if ((systems.APUNodes.Controls.master.getValue()) and (systems.ELEC.Source.APU.contact.getValue() == 0) and (apu_rpm.getValue() < 94.9)) { - me["APUGentext"].setColor(0.7333,0.3803,0); - } - - me["APUGenLoad"].setText(sprintf("%s", math.round(apu_load.getValue()))); - me["APUGenVolt"].setText(sprintf("%s", math.round(systems.ELEC.Source.APU.volts.getValue()))); - me["APUGenHz"].setText(sprintf("%s", math.round(systems.ELEC.Source.APU.hertz.getValue()))); - - # APU Bleed - if (systems.ADIRS.Operating.adr[0].getValue() and (systems.APUNodes.Controls.bleed.getValue() or bleedapu.getValue() > 0)) { - me["APUBleedPSI"].setColor(0.0509,0.7529,0.2941); - me["APUBleedPSI"].setText(sprintf("%s", math.round(bleedapu.getValue()))); - } else { - me["APUBleedPSI"].setColor(0.7333,0.3803,0); - me["APUBleedPSI"].setText(sprintf("%s", "XX")); - } - - var apu_valve_state2 = apu_valve_state.getValue(); - if (apu_valve_state2 == 1) { - me["APUBleedValve"].setRotation(90 * D2R); - } else { - me["APUBleedValve"].setRotation(0); - } - - if (apu_valve_state2 == apu_valve_state.getValue()) { - me["APUBleedValve"].setColor(0.0509,0.7529,0.2941); - me["APUBleedOnline"].show(); - } else { - me["APUBleedValve"].setColor(0.7333,0.3803,0); - me["APUBleedOnline"].hide(); - } - - - # APU N and EGT - if (systems.APUNodes.Controls.master.getValue()) { - me["APUN"].setColor(0.0509,0.7529,0.2941); - me["APUN"].setText(sprintf("%s", math.round(apu_rpm.getValue() or 0))); - me["APUEGT"].setColor(0.0509,0.7529,0.2941); - me["APUEGT"].setText(sprintf("%s", math.round(apu_egt.getValue() or 0, 5))); - } else if (apu_rpm.getValue() >= 1) { - me["APUN"].setColor(0.0509,0.7529,0.2941); - me["APUN"].setText(sprintf("%s", math.round(apu_rpm.getValue() or 0))); - me["APUEGT"].setColor(0.0509,0.7529,0.2941); - me["APUEGT"].setText(sprintf("%s", math.round(apu_egt.getValue() or 0, 5))); - } else { - me["APUN"].setColor(0.7333,0.3803,0); - me["APUN"].setText(sprintf("%s", "XX")); - me["APUEGT"].setColor(0.7333,0.3803,0); - me["APUEGT"].setText(sprintf("%s", "XX")); - } - me["APUN-needle"].setRotation((apu_rpm_rot.getValue() + 90) * D2R); - me["APUEGT-needle"].setRotation((apu_egt_rot.getValue() + 90) * D2R); - - if (systems.APUNodes.Oil.level.getValue() < 3.69 and apu_rpm.getValue() < 94.9 and gear0_wow.getValue()) { - me["APU-low-oil"].show(); - } else { - me["APU-low-oil"].hide(); - } - - me.updateBottomStatus(); - }, +var input = { + gForce: "/accelerations/pilot-gdamped", + gForceDisplay: "/ECAM/Lower/g-force-display", + hour: "/sim/time/utc/hour", + minute: "/sim/time/utc/minute", }; -var canvas_lowerECAM_bleed = { - new: func(canvas_group, file) { - var m = {parents: [canvas_lowerECAM_bleed, canvas_lowerECAM_base]}; - m.init(canvas_group, file); - - return m; - }, - getKeys: func() { - return ["TAT","SAT","GW","UTCh","UTCm","GLoad","GW-weight-unit", "BLEED-XFEED", "BLEED-Ram-Air", "BLEED-APU-CIRCLE", "BLEED-HP-Valve-1", - "BLEED-APU-LINES","BLEED-ENG-1", "BLEED-HP-Valve-2", "BLEED-ENG-2", "BLEED-Precooler-1-Inlet-Press", "BLEED-Precooler-1-Outlet-Temp", - "BLEED-Precooler-2-Inlet-Press", "BLEED-Precooler-2-Outlet-Temp", "BLEED-ENG-1-label", "BLEED-ENG-2-label", - "BLEED-GND", "BLEED-Pack-1-Flow-Valve", "BLEED-Pack-2-Flow-Valve", "BLEED-Pack-1-Out-Temp","BLEED-APU-connectionTop", - "BLEED-Pack-1-Comp-Out-Temp", "BLEED-Pack-1-Packflow-needle", "BLEED-Pack-1-Bypass-needle", "BLEED-Pack-2-Out-Temp", - "BLEED-Pack-2-Bypass-needle", "BLEED-Pack-2-Comp-Out-Temp", "BLEED-Pack-2-Packflow-needle", "BLEED-Anti-Ice-Left", - "BLEED-Anti-Ice-Right", "BLEED-HP-2-connection", "BLEED-HP-1-connection", "BLEED-ANTI-ICE-ARROW-LEFT", "BLEED-ANTI-ICE-ARROW-RIGHT", - "BLEED-xbleedLeft","BLEED-xbleedCenter","BLEED-xbleedRight","BLEED-cond-1","BLEED-cond-2","BLEED-cond-3","BLEED-Ram-Air-connection"]; - }, - update: func() { - # X BLEED - xbleedstate = xbleed.getValue(); - xbleedcmdstate = xbleedcmd.getBoolValue(); - if (xbleedcmdstate != xbleedstate) { - me["BLEED-XFEED"].setColor(0.7333,0.3803,0); - } else { - me["BLEED-XFEED"].setColor(0.0509,0.7529,0.2941); - } - - if (xbleedcmdstate == xbleedstate) { - if (xbleedcmdstate) { - me["BLEED-XFEED"].setRotation(0); - } else { - me["BLEED-XFEED"].setRotation(90 * D2R); - } - } else { - me["BLEED-XFEED"].setRotation(45 * D2R); - } - - if (xbleedstate == 1) { - me["BLEED-xbleedCenter"].show(); - me["BLEED-xbleedRight"].show(); - } else { - me["BLEED-xbleedCenter"].hide(); - me["BLEED-xbleedRight"].hide(); - } - - # HP valve 1 - hp_valve_state = hp_valve1_state.getValue(); - - if (hp_valve_state == 1) { - me["BLEED-HP-Valve-1"].setRotation(90 * D2R); - me["BLEED-HP-1-connection"].show(); - } else { - me["BLEED-HP-Valve-1"].setRotation(0); - me["BLEED-HP-1-connection"].hide(); - } - - if (hp_valve_state == hp_valve1.getValue()) { - me["BLEED-HP-Valve-1"].setColor(0.0509,0.7529,0.2941); - } else { - me["BLEED-HP-Valve-1"].setColor(0.7333,0.3803,0); - } - - # HP valve 2 - hp_valve_state = hp_valve2_state.getValue(); - - if (hp_valve_state == 1) { - me["BLEED-HP-Valve-2"].setRotation(90 * D2R); - me["BLEED-HP-2-connection"].show(); - } else { - me["BLEED-HP-Valve-2"].setRotation(0); - me["BLEED-HP-2-connection"].hide(); - } - - if (hp_valve_state == hp_valve2.getValue()) { - me["BLEED-HP-Valve-2"].setColor(0.0509,0.7529,0.2941); - } else { - me["BLEED-HP-Valve-2"].setColor(0.7333,0.3803,0); - } - - # ENG BLEED valve 1 - eng_valve_state = systems.PNEU.Switch.bleed1.getValue(); - bleed_valve_cur = eng_valve1.getValue(); - - if (bleed_valve_cur == 0) { - me["BLEED-ENG-1"].setRotation(0); - } else { - me["BLEED-ENG-1"].setRotation(90 * D2R); - } - - if (eng_valve_state == bleed_valve_cur) { - me["BLEED-ENG-1"].setColor(0.0509,0.7529,0.2941); - } else { - me["BLEED-ENG-1"].setColor(0.7333,0.3803,0); - } - - # APU BLEED valve - var apu_valve_state2 = apu_valve_state.getValue(); - - if (systems.APUNodes.Controls.master.getValue()) { - me["BLEED-APU-LINES"].show(); - if (apu_valve_state2 == 1) { - me["BLEED-APU-CIRCLE"].setRotation(0); - me["BLEED-APU-connectionTop"].show(); - me["BLEED-xbleedLeft"].show(); - } else { - me["BLEED-APU-CIRCLE"].setRotation(90 * D2R); - me["BLEED-APU-connectionTop"].hide(); - if (xbleed.getValue() != 1) { - me["BLEED-xbleedLeft"].hide(); - } else { - me["BLEED-xbleedLeft"].show(); - } - } - if (apuBleedNotOn.getValue() != 1) { - me["BLEED-APU-CIRCLE"].setColor(0.0509,0.7529,0.2941); - } else { - me["BLEED-APU-CIRCLE"].setColor(0.7333,0.3803,0); - } - } else { - if (xbleed.getValue() != 1) { - me["BLEED-xbleedLeft"].hide(); - } else { - me["BLEED-xbleedLeft"].show(); - } - me["BLEED-APU-LINES"].hide(); - me["BLEED-APU-connectionTop"].hide(); - } - - # ENG BLEED valve 2 - eng_valve_state = systems.PNEU.Switch.bleed2.getValue(); - bleed_valve_cur = eng_valve2.getValue(); - - if (bleed_valve_cur == 0) { - me["BLEED-ENG-2"].setRotation(0); - } else { - me["BLEED-ENG-2"].setRotation(90 * D2R); - } - - if (eng_valve_state == bleed_valve_cur) { - me["BLEED-ENG-2"].setColor(0.0509,0.7529,0.2941); - } else { - me["BLEED-ENG-2"].setColor(0.7333,0.3803,0); - } - - # Precooler inlet 1 - bmc1 = bmc1working.getValue(); - bmc2 = bmc2working.getValue(); - - if (bmc1) { - var precooler_psi = precooler1_psi.getValue(); - me["BLEED-Precooler-1-Inlet-Press"].setText(sprintf("%s", math.round(precooler_psi))); - if (precooler_psi < 4 or precooler_psi > 57) { - me["BLEED-Precooler-1-Inlet-Press"].setColor(0.7333,0.3803,0); - } else { - me["BLEED-Precooler-1-Inlet-Press"].setColor(0.0509,0.7529,0.2941); - } - } else { - me["BLEED-Precooler-1-Inlet-Press"].setText(sprintf("%s", "XX")); - me["BLEED-Precooler-1-Inlet-Press"].setColor(0.7333,0.3803,0); - } - - # Precooler inlet 2 - if (bmc2) { - var precooler_psi = precooler2_psi.getValue(); - me["BLEED-Precooler-2-Inlet-Press"].setText(sprintf("%s", math.round(precooler_psi))); - if (precooler_psi < 4 or precooler_psi > 57) { - me["BLEED-Precooler-2-Inlet-Press"].setColor(0.7333,0.3803,0); - } else { - me["BLEED-Precooler-2-Inlet-Press"].setColor(0.0509,0.7529,0.2941); - } - } else { - me["BLEED-Precooler-2-Inlet-Press"].setText(sprintf("%s", "XX")); - me["BLEED-Precooler-2-Inlet-Press"].setColor(0.7333,0.3803,0); - } - - # Precooler outlet 1 - if (bmc1) { - var precooler_temp = precooler1_temp.getValue(); - me["BLEED-Precooler-1-Outlet-Temp"].setText(sprintf("%s", math.round(precooler_temp, 5))); - if (systems.PNEU.Switch.bleed1.getValue() and (precooler_temp < 150 or precooler1_ovht.getValue())) { - me["BLEED-Precooler-1-Outlet-Temp"].setColor(0.7333,0.3803,0); - } else { - me["BLEED-Precooler-1-Outlet-Temp"].setColor(0.0509,0.7529,0.2941); - } - } else { - me["BLEED-Precooler-1-Outlet-Temp"].setText(sprintf("%s", "XX")); - me["BLEED-Precooler-1-Outlet-Temp"].setColor(0.7333,0.3803,0); - } - - # Precooler outlet 2 - if (bmc2) { - var precooler_temp = precooler2_temp.getValue(); - me["BLEED-Precooler-2-Outlet-Temp"].setText(sprintf("%s", math.round(precooler_temp, 5))); - if (systems.PNEU.Switch.bleed2.getValue() and (precooler_temp < 150 or precooler2_ovht.getValue())) { - me["BLEED-Precooler-2-Outlet-Temp"].setColor(0.7333,0.3803,0); - } else { - me["BLEED-Precooler-2-Outlet-Temp"].setColor(0.0509,0.7529,0.2941); - } - } else { - me["BLEED-Precooler-2-Outlet-Temp"].setText(sprintf("%s", "XX")); - me["BLEED-Precooler-2-Outlet-Temp"].setColor(0.7333,0.3803,0); - } - - # GND air - if (pts.Gear.wow[1].getValue()) { - me["BLEED-GND"].show(); - } else { - me["BLEED-GND"].hide(); - } - - # WING ANTI ICE - if (switch_wing_aice.getValue()) { - me["BLEED-Anti-Ice-Left"].show(); - me["BLEED-Anti-Ice-Right"].show(); - } else { - me["BLEED-Anti-Ice-Left"].hide(); - me["BLEED-Anti-Ice-Right"].hide(); - } - - # ENG 1 label - if (pts.Engines.Engine.n2Actual[0].getValue() >= 59) { - me["BLEED-ENG-1-label"].setColor(0.8078,0.8039,0.8078); - } else { - me["BLEED-ENG-1-label"].setColor(0.7333,0.3803,0); - } - - # ENG 2 label - if (pts.Engines.Engine.n2Actual[1].getValue() >= 59) { - me["BLEED-ENG-2-label"].setColor(0.8078,0.8039,0.8078); - } else { - me["BLEED-ENG-2-label"].setColor(0.7333,0.3803,0); - } - - # PACK 1 ----------------------------------------- - packValveState = systems.PNEU.Valves.pack1.getValue(); - me["BLEED-Pack-1-Out-Temp"].setText(sprintf("%s", math.round(systems.PNEU.Packs.pack1OutTemp.getValue(), 5))); - me["BLEED-Pack-1-Comp-Out-Temp"].setText(sprintf("%s", math.round(systems.PNEU.Packs.pack1OutletTemp.getValue(), 5))); - - if (systems.PNEU.Packs.pack1OutTemp.getValue() > 90) { - me["BLEED-Pack-1-Out-Temp"].setColor(0.7333,0.3803,0); - } else { - me["BLEED-Pack-1-Out-Temp"].setColor(0.0509,0.7529,0.2941); - } - - # `-50` cause the middel position from where we move the needle is at 50 - me["BLEED-Pack-1-Bypass-needle"].setRotation((pack1_bypass.getValue() - 50) * D2R); - - if (systems.PNEU.Packs.pack1OutletTemp.getValue() > 230) { - me["BLEED-Pack-1-Comp-Out-Temp"].setColor(0.7333,0.3803,0); - } else { - me["BLEED-Pack-1-Comp-Out-Temp"].setColor(0.0509,0.7529,0.2941); - } - - me["BLEED-Pack-1-Packflow-needle"].setRotation(systems.PNEU.Packs.packFlow1.getValue() * D2R); - - if (packValveState == 0) { - me["BLEED-Pack-1-Packflow-needle"].setColorFill(0.7333,0.3803,0); - me["BLEED-Pack-1-Flow-Valve"].setRotation(90 * D2R); - } else { - me["BLEED-Pack-1-Packflow-needle"].setColorFill(0.0509,0.7529,0.2941); - me["BLEED-Pack-1-Flow-Valve"].setRotation(0); - } - - if (packValveState == systems.PNEU.Switch.pack1.getValue()) { - me["BLEED-Pack-1-Flow-Valve"].setColor(0.0509,0.7529,0.2941); - } else { - me["BLEED-Pack-1-Flow-Valve"].setColor(0.7333,0.3803,0); - } - - # PACK 2 ----------------------------------------- - packValveState = systems.PNEU.Valves.pack2.getValue(); - me["BLEED-Pack-2-Out-Temp"].setText(sprintf("%s", math.round(systems.PNEU.Packs.pack2OutTemp.getValue(), 5))); - me["BLEED-Pack-2-Comp-Out-Temp"].setText(sprintf("%s", math.round(systems.PNEU.Packs.pack2OutletTemp.getValue(), 5))); - - if (systems.PNEU.Packs.pack2OutTemp.getValue() > 90) { - me["BLEED-Pack-2-Out-Temp"].setColor(0.7333,0.3803,0); - } else { - me["BLEED-Pack-2-Out-Temp"].setColor(0.0509,0.7529,0.2941); - } - - me["BLEED-Pack-2-Bypass-needle"].setRotation((pack2_bypass.getValue() - 50) * D2R); - - if (systems.PNEU.Packs.pack2OutletTemp.getValue() > 230) { - me["BLEED-Pack-2-Comp-Out-Temp"].setColor(0.7333,0.3803,0); - } else { - me["BLEED-Pack-2-Comp-Out-Temp"].setColor(0.0509,0.7529,0.2941); - } - - me["BLEED-Pack-2-Packflow-needle"].setRotation(systems.PNEU.Packs.packFlow2.getValue() * D2R); - - if (packValveState == 0) { - me["BLEED-Pack-2-Packflow-needle"].setColorFill(0.7333,0.3803,0); - me["BLEED-Pack-2-Flow-Valve"].setRotation(90 * D2R); - } else { - me["BLEED-Pack-2-Packflow-needle"].setColorFill(0.0509,0.7529,0.2941); - me["BLEED-Pack-2-Flow-Valve"].setRotation(0); - } - - if (packValveState == systems.PNEU.Switch.pack2.getValue()) { - me["BLEED-Pack-2-Flow-Valve"].setColor(0.0509,0.7529,0.2941); - } else { - me["BLEED-Pack-2-Flow-Valve"].setColor(0.7333,0.3803,0); - } - - # Ram Air - ramAirState = systems.PNEU.Valves.ramAir.getValue(); - if (ramAirState == 0) { - me["BLEED-Ram-Air"].setRotation(90 * D2R); - me["BLEED-Ram-Air"].setColor(0.0509,0.7529,0.2941); - me["BLEED-Ram-Air"].setColorFill(0.0509,0.7529,0.2941); - me["BLEED-Ram-Air-connection"].hide(); - } elsif (ramAirState) { - me["BLEED-Ram-Air"].setRotation(0); - if (pts.Gear.wow[1].getValue()) { - me["BLEED-Ram-Air"].setColor(0.7333,0.3803,0); - me["BLEED-Ram-Air"].setColorFill(0.7333,0.3803,0); - } else { - me["BLEED-Ram-Air"].setColor(0.0509,0.7529,0.2941); - me["BLEED-Ram-Air"].setColorFill(0.0509,0.7529,0.2941); - } - me["BLEED-Ram-Air-connection"].show(); - } else { - me["BLEED-Ram-Air"].setRotation(45 * D2R); - me["BLEED-Ram-Air"].setColor(0.7333,0.3803,0); - me["BLEED-Ram-Air"].setColorFill(0.7333,0.3803,0); - me["BLEED-Ram-Air-connection"].show(); - } - - # Triangles - if (systems.PNEU.Valves.pack1.getValue() == 0 and systems.PNEU.Valves.pack2.getValue() == 0) { - if (pts.Gear.wow[1].getValue() or ramAirState != 1) { - me["BLEED-cond-1"].setColor(0.7333,0.3803,0); - me["BLEED-cond-2"].setColor(0.7333,0.3803,0); - me["BLEED-cond-3"].setColor(0.7333,0.3803,0); - } else { - me["BLEED-cond-1"].setColor(0.0509,0.7529,0.2941); - me["BLEED-cond-2"].setColor(0.0509,0.7529,0.2941); - me["BLEED-cond-3"].setColor(0.0509,0.7529,0.2941); - } - } else { - me["BLEED-cond-1"].setColor(0.0509,0.7529,0.2941); - me["BLEED-cond-2"].setColor(0.0509,0.7529,0.2941); - me["BLEED-cond-3"].setColor(0.0509,0.7529,0.2941); - } - me.updateBottomStatus(); - }, -}; - -var canvas_lowerECAM_cond = { - new: func(canvas_group, file) { - var m = {parents: [canvas_lowerECAM_cond, canvas_lowerECAM_base]}; - m.init(canvas_group, file); - - return m; - }, - getKeys: func() { - return ["TAT","SAT","GW","UTCh","UTCm","GLoad","GW-weight-unit","CargoCond","CONDHotAirValve","CONDFanFwdFault","CONDFanAftFault", - "CONDTrimValveCKPT","CONDTrimValveAFT","CONDTrimValveFWD","CONDDuctTempCKPT","CONDDuctTempAFT","CONDDuctTempFWD","CONDTempCKPT","CONDTempAFT","CONDTempFWD"]; - }, - update: func() { - if (systems.PNEU.Valves.hotAir.getValue() == 0) { - me["CONDHotAirValve"].setRotation(90 * D2R); - if (systems.PNEU.Switch.hotAir.getBoolValue()) { - me["CONDHotAirValve"].setColor(0.7333,0.3803,0); - } else { - me["CONDHotAirValve"].setColor(0.0509,0.7529,0.2941); - } - } else { - me["CONDHotAirValve"].setRotation(0); # doesn't show rotation in transit - if (systems.PNEU.Switch.hotAir.getBoolValue()) { - me["CONDHotAirValve"].setColor(0.0509,0.7529,0.2941); - } else { - me["CONDHotAirValve"].setColor(0.7333,0.3803,0); - } - } - - me["CONDTrimValveCKPT"].setRotation(systems.PNEU.Packs.trimCockpit.getValue() * D2R); - me["CONDTrimValveAFT"].setRotation(systems.PNEU.Packs.trimAft.getValue() * D2R); - me["CONDTrimValveFWD"].setRotation(systems.PNEU.Packs.trimFwd.getValue() * D2R); - - me["CONDDuctTempCKPT"].setText(sprintf("%2.0f",math.round(systems.PNEU.Packs.cockpitDuctTemp.getValue()))); - me["CONDDuctTempAFT"].setText(sprintf("%2.0f",math.round(systems.PNEU.Packs.cabinAftDuctTemp.getValue()))); - me["CONDDuctTempFWD"].setText(sprintf("%2.0f",math.round(systems.PNEU.Packs.cabinFwdDuctTemp.getValue()))); - - me["CONDTempCKPT"].setText(sprintf("%2.0f",math.round(systems.PNEU.Packs.cockpitTemp.getValue()))); - me["CONDTempAFT"].setText(sprintf("%2.0f",math.round(systems.PNEU.Packs.cabinAftTemp.getValue()))); - me["CONDTempFWD"].setText(sprintf("%2.0f",math.round(systems.PNEU.Packs.cabinFwdTemp.getValue()))); - - # fans faults not implemented - me["CONDFanFwdFault"].hide(); - me["CONDFanAftFault"].hide(); - - # aft cargo ventilation disabled - me["CargoCond"].hide(); - me.updateBottomStatus(); - }, -}; - -var canvas_lowerECAM_crz = { - new: func(canvas_group, file) { - var m = {parents: [canvas_lowerECAM_crz, canvas_lowerECAM_base]}; - m.init(canvas_group, file); - - return m; - }, - getKeys: func() { - return ["TAT","SAT","GW","UTCh","UTCm","GLoad","GW-weight-unit","Oil1","Oil2","FUsed1","FUsed2","FUsed","VIB1N1","VIB1N2","VIB2N1","VIB2N2","deltaPSI","LDGELEV-AUTO","LDGELEV","CABVS","CABALT","VS-Arrow-UP","VS-Arrow-DN","CKPT-TEMP","FWD-TEMP","AFT-TEMP","Fused-weight-unit"]; - }, - update: func() { - - me["Oil1"].setText(sprintf("%2.1f", oil_qt1_actual.getValue())); - me["Oil2"].setText(sprintf("%2.1f", oil_qt2_actual.getValue())); - - if (acconfig_weight_kgs.getValue()) { - me["Fused-weight-unit"].setText("KG"); - me["FUsed1"].setText(sprintf("%s", math.round(fuel_used_lbs1.getValue() * LBS2KGS, 10))); - me["FUsed2"].setText(sprintf("%s", math.round(fuel_used_lbs2.getValue() * LBS2KGS, 10))); - me["FUsed"].setText(sprintf("%s", (math.round(fuel_used_lbs1.getValue() * LBS2KGS, 10) + math.round(fuel_used_lbs2.getValue() * LBS2KGS, 10)))); - } else { - me["Fused-weight-unit"].setText("LBS"); - me["FUsed1"].setText(sprintf("%s", math.round(fuel_used_lbs1.getValue(), 10))); - me["FUsed2"].setText(sprintf("%s", math.round(fuel_used_lbs2.getValue(), 10))); - me["FUsed"].setText(sprintf("%s", (math.round(fuel_used_lbs1.getValue(), 10) + math.round(fuel_used_lbs2.getValue(), 10)))); - } - - me.updateBottomStatus(); - }, -}; - -var canvas_lowerECAM_door = { - new: func(canvas_group, file) { - var m = {parents: [canvas_lowerECAM_door, canvas_lowerECAM_base]}; - m.init(canvas_group, file); - - return m; - }, - getKeys: func() { - return["TAT","SAT","GW","UTCh","UTCm","GLoad","GW-weight-unit","Bulk","BulkLine","BulkLbl","Exit1L","Exit1R","Cabin1Left","Cabin1LeftLbl","Cabin1LeftLine","Cabin1LeftSlide","Cabin1Right","Cabin1RightLbl","Cabin1RightLine","Cabin1RightSlide","Cabin2Left","Cabin2LeftLbl", - "Cabin2LeftLine","Cabin2LeftSlide","Cabin2Right","Cabin2RightLbl","Cabin2RightLine","Cabin2RightSlide","Cabin3Left","Cabin3LeftLbl","Cabin3LeftLine","Cabin3LeftSlide","Cabin3Right","Cabin3RightLbl","Cabin3RightLine","Cabin3RightSlide","AvionicsLine1", - "AvionicsLbl1","AvionicsLine2","AvionicsLbl2","Cargo1Line","Cargo1Lbl","Cargo1Door","Cargo2Line","Cargo2Lbl","Cargo2Door","ExitLSlide","ExitLLine","ExitLLbl","ExitRSlide","ExitRLine","ExitRLbl","Cabin4Left","Cabin4LeftLbl","Cabin4LeftLine", - "Cabin4LeftSlide","Cabin4Right","Cabin4RightLbl","Cabin4RightLine","Cabin4RightSlide","DOOROXY-REGUL-LO-PR"]; - }, - update: func() { - # If you make AirBerlin or Allegiant livery add below - - if (doorL1_pos.getValue() > 0) { - me["Cabin1Left"].show(); - me["Cabin1Left"].setColor(0.7333,0.3803,0); - me["Cabin1Left"].setColorFill(0.7333,0.3803,0); - me["Cabin1LeftLbl"].show(); - me["Cabin1LeftLine"].show(); - } else { - me["Cabin1Left"].setColor(0.0509,0.7529,0.2941); - me["Cabin1Left"].setColorFill(0,0,0); - me["Cabin1LeftLbl"].hide(); - me["Cabin1LeftLine"].hide(); - } - - if (doorR1_pos.getValue() > 0) { - me["Cabin1Right"].show(); - me["Cabin1Right"].setColor(0.7333,0.3803,0); - me["Cabin1Right"].setColorFill(0.7333,0.3803,0); - me["Cabin1RightLbl"].show(); - me["Cabin1RightLine"].show(); - } else { - me["Cabin1Right"].setColor(0.0509,0.7529,0.2941); - me["Cabin1Right"].setColorFill(0,0,0); - me["Cabin1RightLbl"].hide(); - me["Cabin1RightLine"].hide(); - } - - if (doorL4_pos.getValue() > 0) { - me["Cabin4Left"].show(); - me["Cabin4Left"].setColor(0.7333,0.3803,0); - me["Cabin4Left"].setColorFill(0.7333,0.3803,0); - me["Cabin4LeftLbl"].show(); - me["Cabin4LeftLine"].show(); - } else { - me["Cabin4Left"].setColor(0.0509,0.7529,0.2941); - me["Cabin4Left"].setColorFill(0,0,0); - me["Cabin4LeftLbl"].hide(); - me["Cabin4LeftLine"].hide(); - } - - if (doorR4_pos.getValue() > 0) { - me["Cabin4Right"].show(); - me["Cabin4Right"].setColor(0.7333,0.3803,0); - me["Cabin4Right"].setColorFill(0.7333,0.3803,0); - me["Cabin4RightLbl"].show(); - me["Cabin4RightLine"].show(); - } else { - me["Cabin4Right"].setColor(0.0509,0.7529,0.2941); - me["Cabin4Right"].setColorFill(0,0,0); - me["Cabin4RightLbl"].hide(); - me["Cabin4RightLine"].hide(); - } - - if (cargobulk_pos.getValue() > 0) { - me["Bulk"].setColor(0.7333,0.3803,0); - me["Bulk"].setColorFill(0.7333,0.3803,0); - me["BulkLbl"].show(); - me["BulkLine"].show(); - } else { - me["Bulk"].setColor(0.0509,0.7529,0.2941); - me["Bulk"].setColorFill(0,0,0); - me["BulkLbl"].hide(); - me["BulkLine"].hide(); - } - - if (cargofwd_pos.getValue() > 0) { - me["Cargo1Door"].setColor(0.7333,0.3803,0); - me["Cargo1Door"].setColorFill(0.7333,0.3803,0); - me["Cargo1Lbl"].show(); - me["Cargo1Line"].show(); - } else { - me["Cargo1Door"].setColor(0.0509,0.7529,0.2941); - me["Cargo1Door"].setColorFill(0,0,0); - me["Cargo1Lbl"].hide(); - me["Cargo1Line"].hide(); - } - - if (cargoaft_pos.getValue() > 0) { - me["Cargo2Door"].setColor(0.7333,0.3803,0); - me["Cargo2Door"].setColorFill(0.7333,0.3803,0); - me["Cargo2Lbl"].show(); - me["Cargo2Line"].show(); - } else { - me["Cargo2Door"].setColor(0.0509,0.7529,0.2941); - me["Cargo2Door"].setColorFill(0,0,0); - me["Cargo2Lbl"].hide(); - me["Cargo2Line"].hide(); - } - - me["Cabin1LeftSlide"].hide(); - me["Cabin1RightSlide"].hide(); - me["Cabin2LeftSlide"].hide(); - me["Cabin2RightSlide"].hide(); - me["Cabin3LeftSlide"].hide(); - me["Cabin3RightSlide"].hide(); - me["Cabin4LeftSlide"].hide(); - me["Cabin4RightSlide"].hide(); - - me["DOOROXY-REGUL-LO-PR"].hide(); - me["AvionicsLine1"].hide(); - me["AvionicsLine2"].hide(); - me["AvionicsLbl1"].hide(); - me["AvionicsLbl2"].hide(); - me["ExitLSlide"].hide(); - me["ExitLLine"].hide(); - me["ExitLLbl"].hide(); - me["ExitRSlide"].hide(); - me["ExitRLine"].hide(); - me["ExitRLbl"].hide(); - me["Cabin1LeftSlide"].hide(); - me["Cabin1RightSlide"].hide(); - me["Cabin4LeftSlide"].hide(); - me["Cabin4RightSlide"].hide(); - me["Cabin2Left"].hide(); - me["Cabin2LeftLine"].hide(); - me["Cabin2LeftLbl"].hide(); - me["Cabin2Right"].hide(); - me["Cabin2RightLine"].hide(); - me["Cabin2RightLbl"].hide(); - me["Cabin3Left"].hide(); - me["Cabin3LeftLine"].hide(); - me["Cabin3LeftLbl"].hide(); - me["Cabin3Right"].hide(); - me["Cabin3RightLine"].hide(); - me["Cabin3RightLbl"].hide(); - - me.updateBottomStatus(); - }, -}; - -var canvas_lowerECAM_elec = { - new: func(canvas_group, file) { - var m = {parents: [canvas_lowerECAM_elec, canvas_lowerECAM_base]}; - m.init(canvas_group, file); - - return m; - }, - getKeys: func() { - return ["TAT","SAT","GW","UTCh","UTCm","GLoad","GW-weight-unit","BAT1-label","Bat1Volt","Bat1Ampere","BAT2-label","Bat2Volt","Bat2Ampere","BAT1-charge","BAT1-discharge","BAT2-charge","BAT2-discharge","ELEC-Line-DC1-DCBAT","ELEC-Line-DC1-DCESS","ELEC-Line-DC2-DCBAT", - "ELEC-Line-DC1-DCESS_DCBAT","ELEC-Line-DC2-DCESS_DCBAT","ELEC-Line-TR1-DC1","ELEC-Line-TR2-DC2","Shed-label","ELEC-Line-ESSTR-DCESS","TR1-label","TR1Volt","TR1Ampere","TR2-label","TR2Volt","TR2Ampere","EMERGEN-group","EmergenVolt","EmergenHz", - "ELEC-Line-Emergen-ESSTR","EMERGEN-Label-off","Emergen-Label","EMERGEN-out","ELEC-Line-ACESS-TRESS","ELEC-Line-AC1-TR1","ELEC-Line-AC2-TR2","ELEC-Line-AC1-ACESS","ELEC-Line-AC2-ACESS","ACESS-SHED","ACESS","AC1-in","AC2-in","ELEC-Line-GEN1-AC1","ELEC-Line-GEN2-AC2", - "ELEC-Line-APU-AC1","ELEC-Line-APU-EXT","ELEC-Line-EXT-AC2","APU-out","EXT-out","EXTPWR-group","ExtVolt","ExtHz","APU-content","APU-border","APUGentext","APUGenLoad","APUGenVolt","APUGenHz","APUGEN-off","GEN1-label","Gen1Load","Gen1Volt","Gen1Hz", - "GEN2-label","Gen2Load","GEN2-off","Gen2Volt","Gen2Hz","ELEC-IDG-1-label","ELEC-IDG-1-num-label","ELEC-IDG-1-Temp","IDG1-LOPR","IDG1-DISC","IDG1-RISE-Value","IDG1-RISE-label","GalleyShed","ELEC-IDG-2-Temp","ELEC-IDG-2-label","ELEC-IDG-2-num-label","IDG2-RISE-label","IDG2-RISE-Value","IDG2-LOPR", - "IDG2-DISC","ESSTR-group","ESSTR","ESSTR-Volt","ESSTR-Ampere","BAT1-content","BAT2-content","BAT1-OFF","BAT2-OFF","GEN1-content","GEN2-content","GEN-1-num-label","GEN-2-num-label","GEN1-off","GEN2-off","GEN1-num-label","GEN2-num-label","EXTPWR-label", - "ELEC-ACESS-SHED-label","ELEC-DCBAT-label","ELEC-DCESS-label","ELEC-DC2-label","ELEC-DC1-label","ELEC-AC1-label","ELEC-AC2-label","ELEC-ACESS-label","ELEC-Line-ESSTR-DCESS-off","ELEC-Line-Emergen-ESSTR-off"]; - }, - update: func() { - - # BAT1 - if (systems.ELEC.Switch.bat1.getValue() == 0) { - me["BAT1-OFF"].show(); - me["BAT1-content"].hide(); - me["BAT1-discharge"].hide(); - me["BAT1-charge"].hide(); - } else { - me["BAT1-OFF"].hide(); - me["BAT1-content"].show(); - me["Bat1Ampere"].setText(sprintf("%s", math.round(systems.ELEC.Source.Bat1.amps.getValue()))); - me["Bat1Volt"].setText(sprintf("%s", math.round(systems.ELEC.Source.Bat1.volt.getValue()))); - - if (systems.ELEC.Source.Bat1.volt.getValue() >= 24.95 and systems.ELEC.Source.Bat1.volt.getValue() <= 31.05) { - me["Bat1Volt"].setColor(0.0509,0.7529,0.2941); - } else { - me["Bat1Volt"].setColor(0.7333,0.3803,0); - } - - if (systems.ELEC.Source.Bat1.amps.getValue() > 5) { - me["Bat1Ampere"].setColor(0.7333,0.3803,0); - } else { - me["Bat1Ampere"].setColor(0.0509,0.7529,0.2941); - } - - if (systems.ELEC.Source.Bat1.direction.getValue() == 0) { - me["BAT1-discharge"].hide(); - me["BAT1-charge"].hide(); - } else { - if (systems.ELEC.Source.Bat1.direction.getValue() == -1) { - me["BAT1-charge"].show(); - me["BAT1-discharge"].hide(); - } else { - me["BAT1-discharge"].show(); - me["BAT1-charge"].hide(); - } - } - } - - if (systems.ELEC.Light.bat1Fault.getValue() or systems.ELEC.Source.Bat1.volt.getValue() < 25 or systems.ELEC.Source.Bat1.volt.getValue() > 31 or systems.ELEC.Source.Bat1.amps.getValue() > 5) { - me["BAT1-label"].setColor(0.7333,0.3803,0); - } else { - me["BAT1-label"].setColor(0.8078,0.8039,0.8078); - } - - # BAT2 - if (systems.ELEC.Switch.bat2.getValue() == 0) { - me["BAT2-OFF"].show(); - me["BAT2-content"].hide(); - me["BAT2-discharge"].hide(); - me["BAT2-charge"].hide(); - } else { - me["BAT2-OFF"].hide(); - me["BAT2-content"].show(); - me["Bat2Ampere"].setText(sprintf("%s", math.round(systems.ELEC.Source.Bat2.amps.getValue()))); - me["Bat2Volt"].setText(sprintf("%s", math.round(systems.ELEC.Source.Bat2.volt.getValue()))); - - if (systems.ELEC.Source.Bat2.volt.getValue() >= 24.95 and systems.ELEC.Source.Bat2.volt.getValue() <= 31.05) { - me["Bat2Volt"].setColor(0.0509,0.7529,0.2941); - } else { - me["Bat2Volt"].setColor(0.7333,0.3803,0); - } - - if (systems.ELEC.Source.Bat2.amps.getValue() > 5) { - me["Bat2Ampere"].setColor(0.7333,0.3803,0); - } else { - me["Bat2Ampere"].setColor(0.0509,0.7529,0.2941); - } - - if (systems.ELEC.Source.Bat2.direction.getValue() == 0) { - me["BAT2-discharge"].hide(); - me["BAT2-charge"].hide(); - } else { - if (systems.ELEC.Source.Bat2.direction.getValue() == -1) { - me["BAT2-charge"].show(); - me["BAT2-discharge"].hide(); - } else { - me["BAT2-discharge"].show(); - me["BAT2-charge"].hide(); - } - } - } - - if (systems.ELEC.Light.bat2Fault.getValue() or systems.ELEC.Source.Bat2.volt.getValue() < 25 or systems.ELEC.Source.Bat2.volt.getValue() > 31 or systems.ELEC.Source.Bat2.amps.getValue() > 5) { - me["BAT2-label"].setColor(0.7333,0.3803,0); - } else { - me["BAT2-label"].setColor(0.8078,0.8039,0.8078); - } - - # TR1 - # is only powered when ac1 has power - tr1_v = systems.ELEC.Source.tr1.outputVolt.getValue(); - tr1_a = systems.ELEC.Source.tr1.outputAmp.getValue(); - - me["TR1Volt"].setText(sprintf("%s", math.round(tr1_v))); - me["TR1Ampere"].setText(sprintf("%s", math.round(tr1_a))); - - if (tr1_v < 25 or tr1_v > 31 or tr1_a < 5) { - me["TR1-label"].setColor(0.7333,0.3803,0); - } else { - me["TR1-label"].setColor(0.8078,0.8039,0.8078); - } - - if (tr1_v < 25 or tr1_v > 31) { - me["TR1Volt"].setColor(0.7333,0.3803,0); - } else { - me["TR1Volt"].setColor(0.0509,0.7529,0.2941); - } - - if (tr1_a < 5) { - me["TR1Ampere"].setColor(0.7333,0.3803,0); - } else { - me["TR1Ampere"].setColor(0.0509,0.7529,0.2941); - } - - # TR2 - # is only powered when ac2 has power - tr2_v = systems.ELEC.Source.tr2.outputVolt.getValue(); - tr2_a = systems.ELEC.Source.tr2.outputAmp.getValue(); - - me["TR2Volt"].setText(sprintf("%s", math.round(tr2_v))); - me["TR2Ampere"].setText(sprintf("%s", math.round(tr2_a))); - - if (tr2_v < 25 or tr2_v > 31 or tr2_a < 5) { - me["TR2-label"].setColor(0.7333,0.3803,0); - } else { - me["TR2-label"].setColor(0.8078,0.8039,0.8078); - } - - if (tr2_v < 25 or tr2_v > 31) { - me["TR2Volt"].setColor(0.7333,0.3803,0); - } else { - me["TR2Volt"].setColor(0.0509,0.7529,0.2941); - } - - if (tr2_a < 5) { - me["TR2Ampere"].setColor(0.7333,0.3803,0); - } else { - me["TR2Ampere"].setColor(0.0509,0.7529,0.2941); - } - - # ESS TR - essTrvolts = systems.ELEC.Source.trEss.outputVoltRelay.getValue(); - essTramps = systems.ELEC.Source.trEss.outputAmpRelay.getValue(); - if (systems.ELEC.Relay.essTrContactor.getValue()) { - me["ESSTR-group"].show(); - me["ESSTR-Volt"].setText(sprintf("%s", math.round(essTrvolts))); - me["ESSTR-Ampere"].setText(sprintf("%s", math.round(essTramps))); - - if (essTrvolts < 25 or essTrvolts > 31 or essTramps < 5) { - me["ESSTR"].setColor(0.7333,0.3803,0); - } else { - me["ESSTR"].setColor(0.8078,0.8039,0.8078); - } - - if (essTrvolts < 25 or essTrvolts > 31) { - me["ESSTR-Volt"].setColor(0.7333,0.3803,0); - } else { - me["ESSTR-Volt"].setColor(0.0509,0.7529,0.2941); - } - - if (essTramps < 5) { - me["ESSTR-Ampere"].setColor(0.7333,0.3803,0); - } else { - me["ESSTR-Ampere"].setColor(0.0509,0.7529,0.2941); - } - } else { - me["ESSTR-group"].hide(); - } - - # EMER GEN - if (systems.ELEC.Source.EmerGen.volts.getValue() == 0) { - me["EMERGEN-group"].hide(); - me["ELEC-Line-Emergen-ESSTR"].hide(); - me["ELEC-Line-Emergen-ESSTR-off"].show(); - me["EMERGEN-Label-off"].show(); - } else { - me["EMERGEN-group"].show(); - me["ELEC-Line-Emergen-ESSTR"].show(); - me["ELEC-Line-Emergen-ESSTR-off"].hide(); - me["EMERGEN-Label-off"].hide(); - - me["EmergenVolt"].setText(sprintf("%s", math.round(systems.ELEC.Source.EmerGen.voltsRelay.getValue()))); - me["EmergenHz"].setText(sprintf("%s", math.round(systems.ELEC.Source.EmerGen.hertz.getValue()))); - - if (systems.ELEC.Source.EmerGen.voltsRelay.getValue() > 120 or systems.ELEC.Source.EmerGen.voltsRelay.getValue() < 110 or systems.ELEC.Source.EmerGen.hertz.getValue() > 410 or systems.ELEC.Source.EmerGen.hertz.getValue() < 390) { - me["Emergen-Label"].setColor(0.7333,0.3803,0); - } else { - me["Emergen-Label"].setColor(0.8078,0.8039,0.8078); - } - - if (systems.ELEC.Source.EmerGen.voltsRelay.getValue() > 120 or systems.ELEC.Source.EmerGen.voltsRelay.getValue() < 110) { - me["EmergenVolt"].setColor(0.7333,0.3803,0); - } else { - me["EmergenVolt"].setColor(0.0509,0.7529,0.2941); - } - - if (systems.ELEC.Source.EmerGen.hertz.getValue() > 410 or systems.ELEC.Source.EmerGen.hertz.getValue() < 390) { - me["EmergenHz"].setColor(0.7333,0.3803,0); - } else { - me["EmergenHz"].setColor(0.0509,0.7529,0.2941); - } - } - - # IDG 1 - if (!systems.ELEC.Switch.idg1Disc.getBoolValue()) { - me["IDG1-DISC"].show(); - me["ELEC-IDG-1-label"].setColor(0.7333,0.3803,0); - } else { - me["IDG1-DISC"].hide(); - me["ELEC-IDG-1-label"].setColor(0.8078,0.8039,0.8078); - } - - if (eng1_running.getValue() == 0) { - me["ELEC-IDG-1-num-label"].setColor(0.7333,0.3803,0); - } else { - me["ELEC-IDG-1-num-label"].setColor(0.8078,0.8039,0.8078); - } - - if (eng2_running.getValue() == 0) { - me["ELEC-IDG-2-num-label"].setColor(0.7333,0.3803,0); - } else { - me["ELEC-IDG-2-num-label"].setColor(0.8078,0.8039,0.8078); - } - - # IDG 2 - if (!systems.ELEC.Switch.idg2Disc.getBoolValue()) { - me["IDG2-DISC"].show(); - me["ELEC-IDG-2-label"].setColor(0.7333,0.3803,0); - } else { - me["IDG2-DISC"].hide(); - me["ELEC-IDG-2-label"].setColor(0.8078,0.8039,0.8078); - } - - # GEN1 - if (systems.ELEC.Switch.gen1.getValue() == 0) { - me["GEN1-content"].hide(); - me["GEN1-off"].show(); - if (systems.ELEC.Source.IDG1.gcrRelay.getValue()) { - me["GEN1-label"].setColor(0.7333,0.3803,0); - } else { - me["GEN1-label"].setColor(0.8078,0.8039,0.8078); - } - - if (eng1_running.getValue() == 0) { - me["GEN1-num-label"].setColor(0.7333,0.3803,0); - } else { - me["GEN1-num-label"].setColor(0.8078,0.8039,0.8078); - } - } else { - me["GEN1-content"].show(); - me["GEN1-off"].hide(); - # me["Gen1Load"].setText(sprintf("%s", math.round(gen1_load.getValue()))); - me["Gen1Volt"].setText(sprintf("%s", math.round(systems.ELEC.Source.IDG1.volts.getValue()))); - - if (systems.ELEC.Source.IDG1.hertz.getValue() == 0) { - me["Gen1Hz"].setText(sprintf("XX")); - } else { - me["Gen1Hz"].setText(sprintf("%s", math.round(systems.ELEC.Source.IDG1.hertz.getValue()))); - } - - if (eng1_running.getValue() == 0) { - me["GEN1-num-label"].setColor(0.7333,0.3803,0); - } else { - me["GEN1-num-label"].setColor(0.8078,0.8039,0.8078); - } - - if (systems.ELEC.Source.IDG1.volts.getValue() > 120 or systems.ELEC.Source.IDG1.volts.getValue() < 110 or systems.ELEC.Source.IDG1.hertz.getValue() > 410 or systems.ELEC.Source.IDG1.hertz.getValue() < 390 or gen1_load.getValue() >= 110) { - me["GEN1-label"].setColor(0.7333,0.3803,0); - } else { - me["GEN1-label"].setColor(0.8078,0.8039,0.8078); - } - - if (gen1_load.getValue() >= 110) { - me["Gen1Load"].setColor(0.7333,0.3803,0); - } else { - me["Gen1Load"].setColor(0.0509,0.7529,0.2941); - } - - if (systems.ELEC.Source.IDG1.volts.getValue() > 120 or systems.ELEC.Source.IDG1.volts.getValue() < 110) { - me["Gen1Volt"].setColor(0.7333,0.3803,0); - } else { - me["Gen1Volt"].setColor(0.0509,0.7529,0.2941); - } - - if (systems.ELEC.Source.IDG1.hertz.getValue() > 410 or systems.ELEC.Source.IDG1.hertz.getValue() < 390) { - me["Gen1Hz"].setColor(0.7333,0.3803,0); - } else { - me["Gen1Hz"].setColor(0.0509,0.7529,0.2941); - } - } - - # GEN2 - if (systems.ELEC.Switch.gen2.getValue() == 0) { - me["GEN2-content"].hide(); - me["GEN2-off"].show(); - if (systems.ELEC.Source.IDG2.gcrRelay.getValue()) { - me["GEN2-label"].setColor(0.7333,0.3803,0); - } else { - me["GEN2-label"].setColor(0.8078,0.8039,0.8078); - } - - if (eng2_running.getValue() == 0) { - me["GEN2-num-label"].setColor(0.7333,0.3803,0); - } else { - me["GEN2-num-label"].setColor(0.8078,0.8039,0.8078); - } - } else { - me["GEN2-content"].show(); - me["GEN2-off"].hide(); - # me["Gen2Load"].setText(sprintf("%s", math.round(gen2_load.getValue()))); - me["Gen2Volt"].setText(sprintf("%s", math.round(systems.ELEC.Source.IDG2.volts.getValue()))); - if (systems.ELEC.Source.IDG2.hertz.getValue() == 0) { - me["Gen2Hz"].setText(sprintf("XX")); - } else { - me["Gen2Hz"].setText(sprintf("%s", math.round(systems.ELEC.Source.IDG2.hertz.getValue()))); - } - - if (eng2_running.getValue() == 0) { - me["GEN2-num-label"].setColor(0.7333,0.3803,0); - } else { - me["GEN2-num-label"].setColor(0.8078,0.8039,0.8078); - } - - if (systems.ELEC.Source.IDG2.volts.getValue() > 120 or systems.ELEC.Source.IDG2.volts.getValue() < 110 or systems.ELEC.Source.IDG2.hertz.getValue() > 410 or systems.ELEC.Source.IDG2.hertz.getValue() < 390 or gen2_load.getValue() >= 110) { - me["GEN2-label"].setColor(0.7333,0.3803,0); - } else { - me["GEN2-label"].setColor(0.8078,0.8039,0.8078); - } - - if (gen2_load.getValue() >= 110) { - me["Gen2Load"].setColor(0.7333,0.3803,0); - } else { - me["Gen2Load"].setColor(0.0509,0.7529,0.2941); - } - - - if (systems.ELEC.Source.IDG2.volts.getValue() > 120 or systems.ELEC.Source.IDG2.volts.getValue() < 110) { - me["Gen2Volt"].setColor(0.7333,0.3803,0); - } else { - me["Gen2Volt"].setColor(0.0509,0.7529,0.2941); - } - - if (systems.ELEC.Source.IDG2.hertz.getValue() > 410 or systems.ELEC.Source.IDG2.hertz.getValue() < 390) { - me["Gen2Hz"].setColor(0.7333,0.3803,0); - } else { - me["Gen2Hz"].setColor(0.0509,0.7529,0.2941); - } - } - - # APU - if (systems.APUNodes.Controls.master.getValue() == 0) { - me["APU-content"].hide(); - me["APUGEN-off"].hide(); - me["APU-border"].hide(); - me["APUGentext"].setColor(0.8078,0.8039,0.8078); - } else { - me["APU-border"].show(); - if (systems.ELEC.Source.APU.contact.getValue() == 0) { - me["APU-content"].hide(); - me["APUGEN-off"].show(); - me["APUGentext"].setColor(0.7333,0.3803,0); - } else { - me["APU-content"].show(); - me["APUGEN-off"].hide(); - # me["APUGenLoad"].setText(sprintf("%s", math.round(apu_load.getValue()))); - me["APUGenVolt"].setText(sprintf("%s", math.round(systems.ELEC.Source.APU.volts.getValue()))); - - if (systems.ELEC.Source.APU.hertz.getValue() == 0) { - me["APUGenHz"].setText(sprintf("XX")); - } else { - me["APUGenHz"].setText(sprintf("%s", math.round(systems.ELEC.Source.APU.hertz.getValue()))); - } - - if (systems.ELEC.Source.APU.volts.getValue() > 120 or systems.ELEC.Source.APU.volts.getValue() < 110 or systems.ELEC.Source.APU.hertz.getValue() > 410 or systems.ELEC.Source.APU.hertz.getValue() < 390 or apu_load.getValue() >= 110) { - me["APUGentext"].setColor(0.7333,0.3803,0); - } else { - me["APUGentext"].setColor(0.8078,0.8039,0.8078); - } - - if(apu_load.getValue() >= 110) { - me["APUGenLoad"].setColor(0.7333,0.3803,0); - } else { - me["APUGenLoad"].setColor(0.0509,0.7529,0.2941); - } - - if (systems.ELEC.Source.APU.volts.getValue() > 120 or systems.ELEC.Source.APU.volts.getValue() < 110) { - me["APUGenVolt"].setColor(0.7333,0.3803,0); - } else { - me["APUGenVolt"].setColor(0.0509,0.7529,0.2941); - } - - if (systems.ELEC.Source.APU.hertz.getValue() > 410 or systems.ELEC.Source.APU.hertz.getValue() < 390) { - me["APUGenHz"].setColor(0.7333,0.3803,0); - } else { - me["APUGenHz"].setColor(0.0509,0.7529,0.2941); - } - } - } - - # EXT PWR - - if (switch_cart.getValue() == 0) { - me["EXTPWR-group"].hide(); - } else { - me["EXTPWR-group"].show(); - me["ExtVolt"].setText(sprintf("%s", math.round(systems.ELEC.Source.Ext.volts.getValue()))); - me["ExtHz"].setText(sprintf("%s", math.round(systems.ELEC.Source.Ext.hertz.getValue()))); - - if (systems.ELEC.Source.Ext.hertz.getValue() > 410 or systems.ELEC.Source.Ext.hertz.getValue() < 390 or systems.ELEC.Source.Ext.volts.getValue() > 120 or systems.ELEC.Source.Ext.volts.getValue() < 110) { - me["EXTPWR-label"].setColor(0.7333,0.3803,0); - } else { - me["EXTPWR-label"].setColor(0.0509,0.7529,0.2941); - } - - if (systems.ELEC.Source.Ext.hertz.getValue() > 410 or systems.ELEC.Source.Ext.hertz.getValue() < 390) { - me["ExtHz"].setColor(0.7333,0.3803,0); - } else { - me["ExtHz"].setColor(0.0509,0.7529,0.2941); - } - - if (systems.ELEC.Source.Ext.volts.getValue() > 120 or systems.ELEC.Source.Ext.volts.getValue() < 110) { - me["ExtVolt"].setColor(0.7333,0.3803,0); - } else { - me["ExtVolt"].setColor(0.0509,0.7529,0.2941); - } - } - - if (systems.ELEC.SomeThing.galley.getValue()) { - me["GalleyShed"].show(); - } else { - me["GalleyShed"].hide(); - } - - # Bus indicators - if (systems.ELEC.Switch.bat1.getValue() or systems.ELEC.Switch.bat2.getValue()) { - me["ELEC-DCBAT-label"].setText("DC BAT"); - if (systems.ELEC.Bus.dcBat.getValue() > 25) { - me["ELEC-DCBAT-label"].setColor(0.0509,0.7529,0.2941); - } else { - me["ELEC-DCBAT-label"].setColor(0.7333,0.3803,0); - } - } else { - me["ELEC-DCBAT-label"].setText("XX"); # BCL not powered hence no voltage info supplied from BCL - me["ELEC-DCBAT-label"].setColor(0.7333,0.3803,0); - } - - if (systems.ELEC.Bus.dc1.getValue() > 25) { - me["ELEC-DC1-label"].setColor(0.0509,0.7529,0.2941); - } else { - me["ELEC-DC1-label"].setColor(0.7333,0.3803,0); - } - - if (systems.ELEC.Bus.dc2.getValue() > 25) { - me["ELEC-DC2-label"].setColor(0.0509,0.7529,0.2941); - } else { - me["ELEC-DC2-label"].setColor(0.7333,0.3803,0); - } - - if (systems.ELEC.Bus.dcEss.getValue() > 25) { - me["ELEC-DCESS-label"].setColor(0.0509,0.7529,0.2941); - } else { - me["ELEC-DCESS-label"].setColor(0.7333,0.3803,0); - } - - if (systems.ELEC.Bus.acEss.getValue() >= 110) { - me["ELEC-ACESS-label"].setColor(0.0509,0.7529,0.2941); - } else { - me["ELEC-ACESS-label"].setColor(0.7333,0.3803,0); - } - - if (systems.ELEC.Bus.acEssShed.getValue() >= 110) { - me["ACESS-SHED"].hide(); - } else { - me["ACESS-SHED"].show(); - } - - if (systems.ELEC.Bus.ac1.getValue() >= 110) { - me["ELEC-AC1-label"].setColor(0.0509,0.7529,0.2941); - } else { - me["ELEC-AC1-label"].setColor(0.7333,0.3803,0); - } - - if (systems.ELEC.Bus.ac2.getValue() >= 110) { - me["ELEC-AC2-label"].setColor(0.0509,0.7529,0.2941); - } else { - me["ELEC-AC2-label"].setColor(0.7333,0.3803,0); - } - - - # Managment of the connecting lines between the components - if (systems.ELEC.Relay.apuGlc.getValue() and (systems.ELEC.Relay.acTie1.getValue() or systems.ELEC.Relay.acTie2.getValue())) { - me["APU-out"].show(); - } else { - me["APU-out"].hide(); - } - - if (systems.ELEC.Relay.extEpc.getValue() and (systems.ELEC.Relay.acTie1.getValue() or systems.ELEC.Relay.acTie2.getValue())) { - me["EXT-out"].show(); - } else { - me["EXT-out"].hide(); - } - - if (systems.ELEC.Source.IDG1.volts.getValue() >= 110 and systems.ELEC.Relay.glc1.getValue()) { - me["ELEC-Line-GEN1-AC1"].show(); - } else { - me["ELEC-Line-GEN1-AC1"].hide(); - } - - if (systems.ELEC.Source.IDG2.volts.getValue() >= 110 and systems.ELEC.Relay.glc2.getValue()) { - me["ELEC-Line-GEN2-AC2"].show(); - } else { - me["ELEC-Line-GEN2-AC2"].hide(); - } - - if (systems.ELEC.Bus.ac1.getValue() >= 110) { - me["AC1-in"].show(); - } else { - me["AC1-in"].hide(); - } - - if (systems.ELEC.Bus.ac2.getValue() >= 110) { - me["AC2-in"].show(); - } else { - me["AC2-in"].hide(); - } - - if (systems.ELEC.Relay.acTie1.getValue() and systems.ELEC.Relay.acTie2.getValue()) { - me["ELEC-Line-APU-AC1"].show(); - me["ELEC-Line-APU-EXT"].show(); - me["ELEC-Line-EXT-AC2"].show(); - } else { - if (systems.ELEC.Relay.acTie1.getValue()) { - me["ELEC-Line-APU-AC1"].show(); - } else { - me["ELEC-Line-APU-AC1"].hide(); - } - - if ((systems.ELEC.Relay.acTie2.getValue() and systems.ELEC.Relay.apuGlc.getValue() and !systems.ELEC.Relay.glc2.getValue()) or (systems.ELEC.Relay.acTie1.getValue() and systems.ELEC.Relay.extEpc.getValue() and !systems.ELEC.Relay.glc1.getValue())) { - me["ELEC-Line-APU-EXT"].show(); - } else { - me["ELEC-Line-APU-EXT"].hide(); - } - - if (systems.ELEC.Relay.acTie2.getValue()) { - me["ELEC-Line-EXT-AC2"].show(); - } else { - me["ELEC-Line-EXT-AC2"].hide(); - } - } - - if (systems.ELEC.Relay.acEssFeed1.getValue()) { - if (systems.ELEC.Bus.ac1.getValue() >= 110) { - me["ELEC-Line-AC1-ACESS"].show(); - } else { - me["ELEC-Line-AC1-ACESS"].hide(); - } - me["ELEC-Line-AC2-ACESS"].hide(); - } elsif (systems.ELEC.Relay.acEssFeed2.getValue()) { - me["ELEC-Line-AC1-ACESS"].hide(); - if (systems.ELEC.Bus.ac2.getValue() >= 110) { - me["ELEC-Line-AC2-ACESS"].show(); - } else { - me["ELEC-Line-AC2-ACESS"].hide(); - } - } else { - me["ELEC-Line-AC1-ACESS"].hide(); - me["ELEC-Line-AC2-ACESS"].hide(); - } - - if (systems.ELEC.Relay.tr1Contactor.getValue()) { - if (systems.ELEC.Bus.ac1.getValue() < 110) { - me["ELEC-Line-AC1-TR1"].setColorFill(0.7333,0.3803,0); - } else { - me["ELEC-Line-AC1-TR1"].setColorFill(0.0509,0.7529,0.2941); - } - me["ELEC-Line-AC1-TR1"].show(); - me["ELEC-Line-TR1-DC1"].show(); - } else { - me["ELEC-Line-AC1-TR1"].hide(); - me["ELEC-Line-TR1-DC1"].hide(); - } - - if (systems.ELEC.Relay.tr2Contactor.getValue()) { - if (systems.ELEC.Bus.ac2.getValue() < 110) { - me["ELEC-Line-AC2-TR2"].setColorFill(0.7333,0.3803,0); - } else { - me["ELEC-Line-AC2-TR2"].setColorFill(0.0509,0.7529,0.2941); - } - me["ELEC-Line-AC2-TR2"].show(); - me["ELEC-Line-TR2-DC2"].show(); - } else { - me["ELEC-Line-AC2-TR2"].hide(); - me["ELEC-Line-TR2-DC2"].hide(); - } - - if (systems.ELEC.Relay.dcTie1.getValue()) { - me["ELEC-Line-DC1-DCESS_DCBAT"].show(); - } else { - me["ELEC-Line-DC1-DCESS_DCBAT"].hide(); - } - - if (systems.ELEC.Relay.dcEssFeedBat.getValue()) { - me["ELEC-Line-DC1-DCESS"].show(); - } else { - me["ELEC-Line-DC1-DCESS"].hide(); - } - - if (systems.ELEC.Relay.dcEssFeedBat.getValue() or systems.ELEC.Relay.dcTie1.getValue()) { - me["ELEC-Line-DC1-DCBAT"].show(); - } else { - me["ELEC-Line-DC1-DCBAT"].hide(); - } - - if (systems.ELEC.Relay.dcTie2.getValue()) { - me["ELEC-Line-DC2-DCBAT"].show(); - me["ELEC-Line-DC2-DCESS_DCBAT"].show(); - } else { - me["ELEC-Line-DC2-DCBAT"].hide(); - me["ELEC-Line-DC2-DCESS_DCBAT"].hide(); - } - - if (systems.ELEC.Relay.acEssEmerGenFeed.getValue()) { - me["EMERGEN-out"].show(); - me["ELEC-Line-Emergen-ESSTR"].show(); - } else { - me["EMERGEN-out"].hide(); - me["ELEC-Line-Emergen-ESSTR"].hide(); - } - - if (systems.ELEC.Bus.acEss.getValue() >= 110 and !systems.ELEC.Relay.acEssEmerGenFeed.getValue() and (!systems.ELEC.Relay.tr1Contactor.getValue() or !systems.ELEC.Relay.tr2Contactor.getValue())) { - me["ELEC-Line-ACESS-TRESS"].show(); - } else { - me["ELEC-Line-ACESS-TRESS"].hide(); - } - - if (systems.ELEC.Relay.essTrContactor.getValue()) { - me["ELEC-Line-ESSTR-DCESS"].show(); - } else { - me["ELEC-Line-ESSTR-DCESS"].hide(); - } - - # hide not yet implemented items - me["IDG1-LOPR"].hide(); - me["IDG2-LOPR"].hide(); - me["Shed-label"].hide(); - me["IDG2-RISE-label"].hide(); - me["IDG2-RISE-Value"].hide(); - me["IDG1-RISE-label"].hide(); - me["IDG1-RISE-Value"].hide(); - - me.updateBottomStatus(); - }, -}; - -var canvas_lowerECAM_eng = { - new: func(canvas_group, file) { - var m = {parents: [canvas_lowerECAM_eng, canvas_lowerECAM_base]}; - m.init(canvas_group, file); - - return m; - }, - getKeys: func() { - return ["TAT","SAT","GW","UTCh","UTCm","GLoad","GW-weight-unit","OilQT1-needle","OilQT2-needle","OilQT1","OilQT2","OilQT1-decimal","OilQT2-decimal","OilPSI1-needle","OilPSI2-needle","OilPSI1","OilPSI2","FUEL-used-1","FUEL-used-2", "Fused-weight-unit"]; - }, - update: func() { - # Oil Quantity - me["OilQT1"].setText(sprintf("%s", int(oil_qt1_actual.getValue()))); - me["OilQT2"].setText(sprintf("%s", int(oil_qt2_actual.getValue()))); - me["OilQT1-decimal"].setText(sprintf("%s", int(10*math.mod(oil_qt1_actual.getValue(),1)))); - me["OilQT2-decimal"].setText(sprintf("%s", int(10*math.mod(oil_qt2_actual.getValue(),1)))); - - me["OilQT1-needle"].setRotation((oil_qt1.getValue() + 90) * D2R); - me["OilQT2-needle"].setRotation((oil_qt2.getValue() + 90) * D2R); - - # Oil Pressure - if (pts.Engines.Engine.oilPsi[0].getValue() >= 20) { - me["OilPSI1"].setColor(0.0509,0.7529,0.2941); - me["OilPSI1-needle"].setColor(0.0509,0.7529,0.2941); - } else { - me["OilPSI1"].setColor(1,0,0); - me["OilPSI1-needle"].setColor(1,0,0); - } - - if (pts.Engines.Engine.oilPsi[1].getValue() >= 20) { - me["OilPSI2"].setColor(0.0509,0.7529,0.2941); - me["OilPSI2-needle"].setColor(0.0509,0.7529,0.2941); - } else { - me["OilPSI2"].setColor(1,0,0); - me["OilPSI2-needle"].setColor(1,0,0); - } - - me["OilPSI1"].setText(sprintf("%s", math.round(pts.Engines.Engine.oilPsi[0].getValue()))); - me["OilPSI2"].setText(sprintf("%s", math.round(pts.Engines.Engine.oilPsi[1].getValue()))); - - me["OilPSI1-needle"].setRotation((oil_psi1.getValue() + 90) * D2R); - me["OilPSI2-needle"].setRotation((oil_psi2.getValue() + 90) * D2R); - - # Fuel Used - if (acconfig_weight_kgs.getValue()) { - me["FUEL-used-1"].setText(sprintf("%s", math.round(fuel_used_lbs1.getValue() * LBS2KGS, 10))); - me["FUEL-used-2"].setText(sprintf("%s", math.round(fuel_used_lbs2.getValue() * LBS2KGS, 10))); - me["Fused-weight-unit"].setText("KG"); - } else { - me["FUEL-used-1"].setText(sprintf("%s", math.round(fuel_used_lbs1.getValue(), 10))); - me["FUEL-used-2"].setText(sprintf("%s", math.round(fuel_used_lbs2.getValue(), 10))); - me["Fused-weight-unit"].setText("LBS"); - } - - me.updateBottomStatus(); - }, -}; - -var canvas_lowerECAM_fctl = { - new: func(canvas_group, file) { - var m = {parents: [canvas_lowerECAM_fctl, canvas_lowerECAM_base]}; - m.init(canvas_group, file); - - return m; - }, - getKeys: func() { - return["TAT","SAT","GW","UTCh","UTCm","GLoad","GW-weight-unit","ailL","ailR","elevL","elevR","PTcc","PT","PTupdn","elac1","elac2","sec1","sec2","sec3","ailLblue","ailRblue","elevLblue","elevRblue","rudderblue","ailLgreen","ailRgreen","elevLgreen","ruddergreen","PTgreen", - "elevRyellow","rudderyellow","PTyellow","rudder","spdbrkblue","spdbrkgreen","spdbrkyellow","spoiler1Rex","spoiler1Rrt","spoiler2Rex","spoiler2Rrt","spoiler3Rex","spoiler3Rrt","spoiler4Rex","spoiler4Rrt","spoiler5Rex","spoiler5Rrt","spoiler1Lex", - "spoiler1Lrt","spoiler2Lex","spoiler2Lrt","spoiler3Lex","spoiler3Lrt","spoiler4Lex","spoiler4Lrt","spoiler5Lex","spoiler5Lrt","spoiler1Rf","spoiler2Rf","spoiler3Rf","spoiler4Rf","spoiler5Rf","spoiler1Lf","spoiler2Lf","spoiler3Lf","spoiler4Lf", - "spoiler5Lf","ailLscale","ailRscale","path4249","path4249-3","path4249-3-6-7","path4249-3-6-7-5","path4249-3-6","text4343"]; - }, - update: func() { - blue_psi = systems.HYD.Psi.blue.getValue(); - green_psi = systems.HYD.Psi.green.getValue(); - yellow_psi = systems.HYD.Psi.yellow.getValue(); - elac1Node = fbw.FBW.Computers.elac1.getValue(); - elac2Node = fbw.FBW.Computers.elac2.getValue(); - sec1Node = fbw.FBW.Computers.sec1.getValue(); - sec2Node = fbw.FBW.Computers.sec2.getValue(); - - # Pitch Trim - me["PT"].setText(sprintf("%2.1f", math.round(elevator_trim_deg.getValue(), 0.1))); - - if (math.round(elevator_trim_deg.getValue(), 0.1) >= 0) { - me["PTupdn"].setText(sprintf("UP")); - } else if (math.round(elevator_trim_deg.getValue(), 0.1) < 0) { - me["PTupdn"].setText(sprintf("DN")); - } - - if (green_psi < 1500 and yellow_psi < 1500) { - me["PT"].setColor(0.7333,0.3803,0); - me["PTupdn"].setColor(0.7333,0.3803,0); - me["PTcc"].setColor(0.7333,0.3803,0); - } else { - me["PT"].setColor(0.0509,0.7529,0.2941); - me["PTupdn"].setColor(0.0509,0.7529,0.2941); - me["PTcc"].setColor(0.0509,0.7529,0.2941); - } - - if (fbw.FBW.Failures.ths.getBoolValue()) { - me["text4343"].setColor(0.7333,0.3803,0); - } else { - me["text4343"].setColor(0.8078,0.8039,0.8078); - } - - # Ailerons - me["ailL"].setTranslation(0, aileron_ind_left.getValue() * 100); - me["ailR"].setTranslation(0, aileron_ind_right.getValue() * (-100)); - - if ((blue_psi < 1500 or !elac1Node) and (green_psi < 1500 or !elac2Node)) { - me["ailL"].setColor(0.7333,0.3803,0); - } else { - me["ailL"].setColor(0.0509,0.7529,0.2941); - } - - if ((green_psi < 1500 or !elac1Node) and (blue_psi < 1500 or !elac2Node)) { - me["ailR"].setColor(0.7333,0.3803,0); - } else { - me["ailR"].setColor(0.0509,0.7529,0.2941); - } - - # Elevators - me["elevL"].setTranslation(0, elevator_ind_left.getValue() * 100); - me["elevR"].setTranslation(0, elevator_ind_right.getValue() * 100); - - if ((blue_psi < 1500 or (!elac1Node and !sec1Node)) and (green_psi < 1500 or (!elac2Node and !sec2Node))) { - me["elevL"].setColor(0.7333,0.3803,0); - } else { - me["elevL"].setColor(0.0509,0.7529,0.2941); - } - - if ((blue_psi < 1500 or (!elac1Node and !sec1Node)) and (yellow_psi < 1500 or (!elac2Node and !sec2Node))) { - me["elevR"].setColor(0.7333,0.3803,0); - } else { - me["elevR"].setColor(0.0509,0.7529,0.2941); - } - - # Rudder - me["rudder"].setRotation(final_deg.getValue() * -0.024); - - if (blue_psi < 1500 and yellow_psi < 1500 and green_psi < 1500) { - me["rudder"].setColor(0.7333,0.3803,0); - } else { - me["rudder"].setColor(0.0509,0.7529,0.2941); - } - - # Spoilers - if (spoiler_L1.getValue() < 1.5) { - me["spoiler1Lex"].hide(); - me["spoiler1Lrt"].show(); - } else { - me["spoiler1Lrt"].hide(); - me["spoiler1Lex"].show(); - } - - if (spoiler_L2.getValue() < 1.5) { - me["spoiler2Lex"].hide(); - me["spoiler2Lrt"].show(); - } else { - me["spoiler2Lrt"].hide(); - me["spoiler2Lex"].show(); - } - - if (spoiler_L3.getValue() < 1.5) { - me["spoiler3Lex"].hide(); - me["spoiler3Lrt"].show(); - } else { - me["spoiler3Lrt"].hide(); - me["spoiler3Lex"].show(); - } - - if (spoiler_L4.getValue() < 1.5) { - me["spoiler4Lex"].hide(); - me["spoiler4Lrt"].show(); - } else { - me["spoiler4Lrt"].hide(); - me["spoiler4Lex"].show(); - } - - if (spoiler_L5.getValue() < 1.5) { - me["spoiler5Lex"].hide(); - me["spoiler5Lrt"].show(); - } else { - me["spoiler5Lrt"].hide(); - me["spoiler5Lex"].show(); - } - - if (spoiler_R1.getValue() < 1.5) { - me["spoiler1Rex"].hide(); - me["spoiler1Rrt"].show(); - } else { - me["spoiler1Rrt"].hide(); - me["spoiler1Rex"].show(); - } - - if (spoiler_R2.getValue() < 1.5) { - me["spoiler2Rex"].hide(); - me["spoiler2Rrt"].show(); - } else { - me["spoiler2Rrt"].hide(); - me["spoiler2Rex"].show(); - } - - if (spoiler_R3.getValue() < 1.5) { - me["spoiler3Rex"].hide(); - me["spoiler3Rrt"].show(); - } else { - me["spoiler3Rrt"].hide(); - me["spoiler3Rex"].show(); - } - - if (spoiler_R4.getValue() < 1.5) { - me["spoiler4Rex"].hide(); - me["spoiler4Rrt"].show(); - } else { - me["spoiler4Rrt"].hide(); - me["spoiler4Rex"].show(); - } - - if (spoiler_R5.getValue() < 1.5) { - me["spoiler5Rex"].hide(); - me["spoiler5Rrt"].show(); - } else { - me["spoiler5Rrt"].hide(); - me["spoiler5Rex"].show(); - } - - # Spoiler Fail - if (fbw.FBW.Failures.spoilerl1.getValue() or green_psi < 1500) { - me["spoiler1Lex"].setColor(0.7333,0.3803,0); - me["spoiler1Lrt"].setColor(0.7333,0.3803,0); - if (spoiler_L1.getValue() < 1.5) { - me["spoiler1Lf"].show(); - } else { - me["spoiler1Lf"].hide(); - } - } else { - me["spoiler1Lex"].setColor(0.0509,0.7529,0.2941); - me["spoiler1Lrt"].setColor(0.0509,0.7529,0.2941); - me["spoiler1Lf"].hide(); - } - - if (fbw.FBW.Failures.spoilerl2.getValue() or yellow_psi < 1500) { - me["spoiler2Lex"].setColor(0.7333,0.3803,0); - me["spoiler2Lrt"].setColor(0.7333,0.3803,0); - if (spoiler_L2.getValue() < 1.5) { - me["spoiler2Lf"].show(); - } else { - me["spoiler2Lf"].hide(); - } - } else { - me["spoiler2Lex"].setColor(0.0509,0.7529,0.2941); - me["spoiler2Lrt"].setColor(0.0509,0.7529,0.2941); - me["spoiler2Lf"].hide(); - } - - if (fbw.FBW.Failures.spoilerl3.getValue() or blue_psi < 1500) { - me["spoiler3Lex"].setColor(0.7333,0.3803,0); - me["spoiler3Lrt"].setColor(0.7333,0.3803,0); - if (spoiler_L3.getValue() < 1.5) { - me["spoiler3Lf"].show(); - } else { - me["spoiler3Lf"].hide(); - } - } else { - me["spoiler3Lex"].setColor(0.0509,0.7529,0.2941); - me["spoiler3Lrt"].setColor(0.0509,0.7529,0.2941); - me["spoiler3Lf"].hide(); - } - - if (fbw.FBW.Failures.spoilerl4.getValue() or yellow_psi < 1500) { - me["spoiler4Lex"].setColor(0.7333,0.3803,0); - me["spoiler4Lrt"].setColor(0.7333,0.3803,0); - if (spoiler_L4.getValue() < 1.5) { - me["spoiler4Lf"].show(); - } else { - me["spoiler4Lf"].hide(); - } - } else { - me["spoiler4Lex"].setColor(0.0509,0.7529,0.2941); - me["spoiler4Lrt"].setColor(0.0509,0.7529,0.2941); - me["spoiler4Lf"].hide(); - } - - if (fbw.FBW.Failures.spoilerl5.getValue() or green_psi < 1500) { - me["spoiler5Lex"].setColor(0.7333,0.3803,0); - me["spoiler5Lrt"].setColor(0.7333,0.3803,0); - if (spoiler_L5.getValue() < 1.5) { - me["spoiler5Lf"].show(); - } else { - me["spoiler5Lf"].hide(); - } - } else { - me["spoiler5Lex"].setColor(0.0509,0.7529,0.2941); - me["spoiler5Lrt"].setColor(0.0509,0.7529,0.2941); - me["spoiler5Lf"].hide(); - } - - if (fbw.FBW.Failures.spoilerr1.getValue() or green_psi < 1500) { - me["spoiler1Rex"].setColor(0.7333,0.3803,0); - me["spoiler1Rrt"].setColor(0.7333,0.3803,0); - if (spoiler_R1.getValue() < 1.5) { - me["spoiler1Rf"].show(); - } else { - me["spoiler1Rf"].hide(); - } - } else { - me["spoiler1Rex"].setColor(0.0509,0.7529,0.2941); - me["spoiler1Rrt"].setColor(0.0509,0.7529,0.2941); - me["spoiler1Rf"].hide(); - } - - if (fbw.FBW.Failures.spoilerr2.getValue() or yellow_psi < 1500) { - me["spoiler2Rex"].setColor(0.7333,0.3803,0); - me["spoiler2Rrt"].setColor(0.7333,0.3803,0); - if (spoiler_R2.getValue() < 1.5) { - me["spoiler2Rf"].show(); - } else { - me["spoiler2Rf"].hide(); - } - } else { - me["spoiler2Rex"].setColor(0.0509,0.7529,0.2941); - me["spoiler2Rrt"].setColor(0.0509,0.7529,0.2941); - me["spoiler2Rf"].hide(); - } - - if (fbw.FBW.Failures.spoilerr3.getValue() or blue_psi < 1500) { - me["spoiler3Rex"].setColor(0.7333,0.3803,0); - me["spoiler3Rrt"].setColor(0.7333,0.3803,0); - if (spoiler_R3.getValue() < 1.5) { - me["spoiler3Rf"].show(); - } else { - me["spoiler3Rf"].hide(); - } - } else { - me["spoiler3Rex"].setColor(0.0509,0.7529,0.2941); - me["spoiler3Rrt"].setColor(0.0509,0.7529,0.2941); - me["spoiler3Rf"].hide(); - } - - if (fbw.FBW.Failures.spoilerr4.getValue() or yellow_psi < 1500) { - me["spoiler4Rex"].setColor(0.7333,0.3803,0); - me["spoiler4Rrt"].setColor(0.7333,0.3803,0); - if (spoiler_R4.getValue() < 1.5) { - me["spoiler4Rf"].show(); - } else { - me["spoiler4Rf"].hide(); - } - } else { - me["spoiler4Rex"].setColor(0.0509,0.7529,0.2941); - me["spoiler4Rrt"].setColor(0.0509,0.7529,0.2941); - me["spoiler4Rf"].hide(); - } - - if (fbw.FBW.Failures.spoilerr5.getValue() or green_psi < 1500) { - me["spoiler5Rex"].setColor(0.7333,0.3803,0); - me["spoiler5Rrt"].setColor(0.7333,0.3803,0); - if (spoiler_R5.getValue() < 1.5) { - me["spoiler5Rf"].show(); - } else { - me["spoiler5Rf"].hide(); - } - } else { - me["spoiler5Rex"].setColor(0.0509,0.7529,0.2941); - me["spoiler5Rrt"].setColor(0.0509,0.7529,0.2941); - me["spoiler5Rf"].hide(); - } - - # Flight Computers - if (elac1Node) { - me["elac1"].setColor(0.0509,0.7529,0.2941); - me["path4249"].setColor(0.0509,0.7529,0.2941); - } else if (!elac1Node or fbw.FBW.Failures.elac1.getValue()) { - me["elac1"].setColor(0.7333,0.3803,0); - me["path4249"].setColor(0.7333,0.3803,0); - } - - if (elac2Node) { - me["elac2"].setColor(0.0509,0.7529,0.2941); - me["path4249-3"].setColor(0.0509,0.7529,0.2941); - } else if (!elac2Node or fbw.FBW.Failures.elac2.getValue()) { - me["elac2"].setColor(0.7333,0.3803,0); - me["path4249-3"].setColor(0.7333,0.3803,0); - } - - if (sec1Node) { - me["sec1"].setColor(0.0509,0.7529,0.2941); - me["path4249-3-6-7"].setColor(0.0509,0.7529,0.2941); - } else if (!sec1Node or fbw.FBW.Failures.sec1.getValue()) { - me["sec1"].setColor(0.7333,0.3803,0); - me["path4249-3-6-7"].setColor(0.7333,0.3803,0); - } - - if (sec2Node) { - me["sec2"].setColor(0.0509,0.7529,0.2941); - me["path4249-3-6-7-5"].setColor(0.0509,0.7529,0.2941); - } else if (!sec2Node or fbw.FBW.Failures.sec2.getValue()) { - me["sec2"].setColor(0.7333,0.3803,0); - me["path4249-3-6-7-5"].setColor(0.7333,0.3803,0); - } - - if (fbw.FBW.Computers.sec3.getValue()) { - me["sec3"].setColor(0.0509,0.7529,0.2941); - me["path4249-3-6"].setColor(0.0509,0.7529,0.2941); - } else if (!fbw.FBW.Computers.sec3.getValue() or fbw.FBW.Failures.sec3.getValue()) { - me["sec3"].setColor(0.7333,0.3803,0); - me["path4249-3-6"].setColor(0.7333,0.3803,0); - } - - # Hydraulic Indicators - if (blue_psi >= 1500) { - if (elac1Node) { - me["ailLblue"].setColor(0.0509,0.7529,0.2941); - } else { - me["ailLblue"].setColor(0.7333,0.3803,0); - } - if (elac1Node or sec1Node) { - me["elevLblue"].setColor(0.0509,0.7529,0.2941); - me["elevRblue"].setColor(0.0509,0.7529,0.2941); - } else { - me["elevLblue"].setColor(0.7333,0.3803,0); - me["elevRblue"].setColor(0.7333,0.3803,0); - } - if (elac2Node) { - me["ailRblue"].setColor(0.0509,0.7529,0.2941); - } else { - me["ailRblue"].setColor(0.7333,0.3803,0); - } - me["rudderblue"].setColor(0.0509,0.7529,0.2941); - me["spdbrkblue"].setColor(0.0509,0.7529,0.2941); - } else { - me["ailLblue"].setColor(0.7333,0.3803,0); - me["ailRblue"].setColor(0.7333,0.3803,0); - me["elevLblue"].setColor(0.7333,0.3803,0); - me["elevRblue"].setColor(0.7333,0.3803,0); - me["rudderblue"].setColor(0.7333,0.3803,0); - me["spdbrkblue"].setColor(0.7333,0.3803,0); - } - - if (green_psi >= 1500) { - if (elac2Node or sec2Node) { - me["elevLgreen"].setColor(0.0509,0.7529,0.2941); - } else { - me["elevLgreen"].setColor(0.7333,0.3803,0); - } - - if (elac2Node) { - me["ailLgreen"].setColor(0.0509,0.7529,0.2941); - } else { - me["ailLgreen"].setColor(0.7333,0.3803,0); - } - if (elac1Node) { - me["ailRgreen"].setColor(0.0509,0.7529,0.2941); - } else { - me["ailRgreen"].setColor(0.7333,0.3803,0); - } - me["ruddergreen"].setColor(0.0509,0.7529,0.2941); - me["PTgreen"].setColor(0.0509,0.7529,0.2941); - me["spdbrkgreen"].setColor(0.0509,0.7529,0.2941); - } else { - me["ailLgreen"].setColor(0.7333,0.3803,0); - me["ailRgreen"].setColor(0.7333,0.3803,0); - me["elevLgreen"].setColor(0.7333,0.3803,0); - me["ruddergreen"].setColor(0.7333,0.3803,0); - me["PTgreen"].setColor(0.7333,0.3803,0); - me["spdbrkgreen"].setColor(0.7333,0.3803,0); - } - - if (yellow_psi >= 1500) { - if (elac2Node or sec2Node) { - me["elevRyellow"].setColor(0.0509,0.7529,0.2941); - } else { - me["elevRyellow"].setColor(0.7333,0.3803,0); - } - me["rudderyellow"].setColor(0.0509,0.7529,0.2941); - me["PTyellow"].setColor(0.0509,0.7529,0.2941); - me["spdbrkyellow"].setColor(0.0509,0.7529,0.2941); - } else { - me["elevRyellow"].setColor(0.7333,0.3803,0); - me["rudderyellow"].setColor(0.7333,0.3803,0); - me["PTyellow"].setColor(0.7333,0.3803,0); - me["spdbrkyellow"].setColor(0.7333,0.3803,0); - } - - me.updateBottomStatus(); - }, -}; - -var canvas_lowerECAM_fuel = { - new: func(canvas_group, file) { - var m = {parents: [canvas_lowerECAM_fuel, canvas_lowerECAM_base]}; - m.init(canvas_group, file); - - return m; - }, - getKeys: func() { - return["TAT","SAT","GW","UTCh","UTCm","GLoad","GW-weight-unit","FUEL-Pump-Left-1","FUEL-Pump-Left-2","FUEL-Pump-Center-1","FUEL-Pump-Center-2","FUEL-Pump-Right-1","FUEL-Pump-Right-2","FUEL-Left-blocked","FUEL-Right-blocked","FUEL-Center-blocked","FUEL-Left-Transfer", - "FUEL-Right-Transfer","FUEL-Left-Outer-Inacc","FUEL-Left-Inner-Inacc","FUEL-Center-Inacc","FUEL-Right-Inner-Inacc","FUEL-Right-Outer-Inacc","FUEL-Left-Outer-quantity","FUEL-Left-Inner-quantity","FUEL-Center-quantity","FUEL-Right-Inner-quantity", - "FUEL-Right-Outer-quantity","FUEL-On-Board","FUEL-Flow-per-min","FUEL-APU-arrow","FUEL-APU-line","FUEL-APU-label","FUEL-used-1","FUEL-used-both","FUEL-used-2","FUEL-ENG-Master-1","FUEL-ENG-Master-2","FUEL-XFEED","FUEL-XFEED-pipes","FUEL-Left-Outer-temp", - "FUEL-Left-Inner-temp","FUEL-Right-Inner-temp","FUEL-Right-Outer-temp","FUEL-Pump-Left-1-Closed","FUEL-Pump-Left-1-Open","FUEL-Pump-Left-2-Closed","FUEL-Pump-Left-2-Open","FUEL-Pump-Center-1-Open","FUEL-Pump-Center-1-Closed","FUEL-Pump-Center-2-Closed", - "FUEL-Pump-Center-2-Open","FUEL-Pump-Right-1-Closed","FUEL-Pump-Right-1-Open","FUEL-Pump-Right-2-Closed","FUEL-Pump-Right-2-Open","FUEL-ENG-1-label","FUEL-ENG-2-label","FUEL-ENG-1-pipe","FUEL-ENG-2-pipe","ENG1idFFlow","ENG2idFFlow","FUEL-used-1","FUEL-used-2","FUEL-used-both", - "Fused-weight-unit","FFlow-weight-unit","FOB-weight-unit"]; - }, - update: func() { - _weight_kgs = acconfig_weight_kgs.getValue(); - - if (pts.Engines.Engine.n1Actual[0].getValue() <= 18.8) { - me["ENG1idFFlow"].setColor(0.7333,0.3803,0); - me["FUEL-ENG-1-label"].setColor(0.7333,0.3803,0); - } else { - me["ENG1idFFlow"].setColor(0.8078,0.8039,0.8078); - me["FUEL-ENG-1-label"].setColor(0.8078,0.8039,0.8078); - } - - if (pts.Engines.Engine.n1Actual[1].getValue() <= 18.5) { - me["ENG2idFFlow"].setColor(0.7333,0.3803,0); - me["FUEL-ENG-2-label"].setColor(0.7333,0.3803,0); - } else { - me["ENG2idFFlow"].setColor(0.8078,0.8039,0.8078); - me["FUEL-ENG-2-label"].setColor(0.8078,0.8039,0.8078); - } - - # TODO add FOB half-boxed amber if some fuel is blocked - if (_weight_kgs == 1) - { - me["FUEL-On-Board"].setText(sprintf("%s", math.round(total_fuel_lbs.getValue() * LBS2KGS, 10))); - me["FOB-weight-unit"].setText("KG"); - } else { - me["FUEL-On-Board"].setText(sprintf("%s", math.round(total_fuel_lbs.getValue(), 10))); - me["FOB-weight-unit"].setText("LBS"); - } - - if (_weight_kgs == 1) { - me["FFlow-weight-unit"].setText("KG/MIN"); - } else { - me["FFlow-weight-unit"].setText("LBS/MIN"); - } - - if (systems.FADEC_S.Power.powered1.getValue() and systems.FADEC_S.Power.powered2.getValue() or systems.FADEC_S.Power.powerup.getValue()) { - me["FUEL-Flow-per-min"].setColor(0.0509,0.7529,0.2941); - if (_weight_kgs == 1) { - me["FUEL-Flow-per-min"].setText(sprintf("%s", math.round(((fuel_flow1.getValue() + fuel_flow2.getValue()) * LBS2KGS) / 60, 10))); - } else { - me["FUEL-Flow-per-min"].setText(sprintf("%s", math.round((fuel_flow1.getValue() + fuel_flow2.getValue()) / 60, 10))); - } - } else { - me["FUEL-Flow-per-min"].setColor(0.7333,0.3803,0); - me["FUEL-Flow-per-min"].setText("XX"); - } - - # TODO use the valve prop and add amber if difference between eng master and valve - # TODO add transition state - if (systems.FUEL.Valves.lpValve1.getValue()) { - me["FUEL-ENG-Master-1"].setRotation(0); - me["FUEL-ENG-Master-1"].setColor(0.0509,0.7529,0.2941); - me["FUEL-ENG-Master-1"].setColorFill(0.0509,0.7529,0.2941); - me["FUEL-ENG-1-pipe"].setColor(0.0509,0.7529,0.2941); - } else { - me["FUEL-ENG-Master-1"].setRotation(90 * D2R); - me["FUEL-ENG-Master-1"].setColor(0.7333,0.3803,0); - me["FUEL-ENG-Master-1"].setColorFill(0.7333,0.3803,0); - me["FUEL-ENG-1-pipe"].setColor(0.7333,0.3803,0); - } - - # TODO use the valve prop and add amber if difference between eng master and valve - # TODO add transition state - if (systems.FUEL.Valves.lpValve2.getValue()) { - me["FUEL-ENG-Master-2"].setRotation(0); - me["FUEL-ENG-Master-2"].setColor(0.0509,0.7529,0.2941); - me["FUEL-ENG-Master-2"].setColorFill(0.0509,0.7529,0.2941); - me["FUEL-ENG-2-pipe"].setColor(0.0509,0.7529,0.2941); - } else { - me["FUEL-ENG-Master-2"].setRotation(90 * D2R); - me["FUEL-ENG-Master-2"].setColor(0.7333,0.3803,0); - me["FUEL-ENG-Master-2"].setColorFill(0.7333,0.3803,0); - me["FUEL-ENG-2-pipe"].setColor(0.7333,0.3803,0); - } - - # this is now bound to the XFEED switch - # TODO use the valve prop - # TODO add amber when disagree between switch and btn - # TODO add transition state - if (systems.FUEL.Valves.crossfeed.getBoolValue()) { - me["FUEL-XFEED"].setRotation(0); - me["FUEL-XFEED-pipes"].show(); - } else { - me["FUEL-XFEED"].setRotation(90 * D2R); - me["FUEL-XFEED-pipes"].hide(); - } - - # TODO add LO indication - if (systems.FUEL.Switches.pumpLeft1.getBoolValue()) { - me["FUEL-Pump-Left-1-Open"].show(); - me["FUEL-Pump-Left-1-Closed"].hide(); - me["FUEL-Pump-Left-1"].setColor(0.0509,0.7529,0.2941); - me["FUEL-Pump-Left-1"].setColorFill(0.0509,0.7529,0.2941); - } else { - me["FUEL-Pump-Left-1-Open"].hide(); - me["FUEL-Pump-Left-1-Closed"].show(); - me["FUEL-Pump-Left-1"].setColor(0.7333,0.3803,0); - me["FUEL-Pump-Left-1"].setColorFill(0.7333,0.3803,0); - } - - # TODO add LO indication - if (systems.FUEL.Switches.pumpLeft2.getBoolValue()) { - me["FUEL-Pump-Left-2-Open"].show(); - me["FUEL-Pump-Left-2-Closed"].hide(); - me["FUEL-Pump-Left-2"].setColor(0.0509,0.7529,0.2941); - me["FUEL-Pump-Left-2"].setColorFill(0.0509,0.7529,0.2941); - } else { - me["FUEL-Pump-Left-2-Open"].hide(); - me["FUEL-Pump-Left-2-Closed"].show(); - me["FUEL-Pump-Left-2"].setColor(0.7333,0.3803,0); - me["FUEL-Pump-Left-2"].setColorFill(0.7333,0.3803,0); - } - - # TODO add functionality to match FCOM 1.28.20 "Amber: Transfer valve is open, whereas commanded closed in automatic or manual mode" - if (systems.FUEL.Switches.pumpCenter1.getBoolValue()) { - me["FUEL-Pump-Center-1-Open"].show(); - me["FUEL-Pump-Center-1-Closed"].hide(); - me["FUEL-Pump-Center-1"].setColor(0.0509,0.7529,0.2941); - me["FUEL-Pump-Center-1"].setColorFill(0.0509,0.7529,0.2941); - } else { - me["FUEL-Pump-Center-1-Open"].hide(); - me["FUEL-Pump-Center-1-Closed"].show(); - me["FUEL-Pump-Center-1"].setColor(0.7333,0.3803,0); - me["FUEL-Pump-Center-1"].setColorFill(0.7333,0.3803,0); - } - - # TODO add LO indication - if (systems.FUEL.Switches.pumpCenter2.getBoolValue()) { - me["FUEL-Pump-Center-2-Open"].show(); - me["FUEL-Pump-Center-2-Closed"].hide(); - me["FUEL-Pump-Center-2"].setColor(0.0509,0.7529,0.2941); - me["FUEL-Pump-Center-2"].setColorFill(0.0509,0.7529,0.2941); - } else { - me["FUEL-Pump-Center-2-Open"].hide(); - me["FUEL-Pump-Center-2-Closed"].show(); - me["FUEL-Pump-Center-2"].setColor(0.7333,0.3803,0); - me["FUEL-Pump-Center-2"].setColorFill(0.7333,0.3803,0); - } - - # TODO add LO indication - if (systems.FUEL.Switches.pumpRight1.getBoolValue()) { - me["FUEL-Pump-Right-1-Open"].show(); - me["FUEL-Pump-Right-1-Closed"].hide(); - me["FUEL-Pump-Right-1"].setColor(0.0509,0.7529,0.2941); - me["FUEL-Pump-Right-1"].setColorFill(0.0509,0.7529,0.2941); - } else { - me["FUEL-Pump-Right-1-Open"].hide(); - me["FUEL-Pump-Right-1-Closed"].show(); - me["FUEL-Pump-Right-1"].setColor(0.7333,0.3803,0); - me["FUEL-Pump-Right-1"].setColorFill(0.7333,0.3803,0); - } - - # TODO add LO indication - if (systems.FUEL.Switches.pumpRight2.getBoolValue()) { - me["FUEL-Pump-Right-2-Open"].show(); - me["FUEL-Pump-Right-2-Closed"].hide(); - me["FUEL-Pump-Right-2"].setColor(0.0509,0.7529,0.2941); - me["FUEL-Pump-Right-2"].setColorFill(0.0509,0.7529,0.2941); - } else { - me["FUEL-Pump-Right-2-Open"].hide(); - me["FUEL-Pump-Right-2-Closed"].show(); - me["FUEL-Pump-Right-2"].setColor(0.7333,0.3803,0); - me["FUEL-Pump-Right-2"].setColorFill(0.7333,0.3803,0); - } - - # Fuel Used - if (_weight_kgs == 1) { - me["FUEL-used-1"].setText(sprintf("%s", math.round(fuel_used_lbs1.getValue() * LBS2KGS, 10))); - me["FUEL-used-2"].setText(sprintf("%s", math.round(fuel_used_lbs2.getValue() * LBS2KGS, 10))); - me["FUEL-used-both"].setText(sprintf("%s", (math.round(fuel_used_lbs1.getValue() * LBS2KGS, 10) + math.round(fuel_used_lbs2.getValue() * LBS2KGS, 10)))); - me["Fused-weight-unit"].setText("KG"); - } else { - me["FUEL-used-1"].setText(sprintf("%s", math.round(fuel_used_lbs1.getValue(), 10))); - me["FUEL-used-2"].setText(sprintf("%s", math.round(fuel_used_lbs2.getValue(), 10))); - me["FUEL-used-both"].setText(sprintf("%s", (math.round(fuel_used_lbs1.getValue(), 10) + math.round(fuel_used_lbs2.getValue(), 10)))); - me["Fused-weight-unit"].setText("LBS"); - } - - # Fuel Temp - me["FUEL-Left-Outer-temp"].setText(sprintf("%s", math.round(fuel_left_outer_temp.getValue()))); - me["FUEL-Left-Inner-temp"].setText(sprintf("%s", math.round(fuel_left_inner_temp.getValue()))); - me["FUEL-Right-Outer-temp"].setText(sprintf("%s", math.round(fuel_right_outer_temp.getValue()))); - me["FUEL-Right-Inner-temp"].setText(sprintf("%s", math.round(fuel_right_inner_temp.getValue()))); - - # Fuel Quantity - # TODO add LO indication - if (_weight_kgs == 1) { - me["FUEL-Left-Outer-quantity"].setText(sprintf("%s", math.round(systems.FUEL.Quantity.leftOuter.getValue() * LBS2KGS, 10))); - me["FUEL-Left-Inner-quantity"].setText(sprintf("%s", math.round(systems.FUEL.Quantity.leftInner.getValue() * LBS2KGS, 10))); - me["FUEL-Center-quantity"].setText(sprintf("%s", math.round(systems.FUEL.Quantity.center.getValue() * LBS2KGS, 10))); - me["FUEL-Right-Inner-quantity"].setText(sprintf("%s", math.round(systems.FUEL.Quantity.rightInner.getValue() * LBS2KGS, 10))); - me["FUEL-Right-Outer-quantity"].setText(sprintf("%s", math.round(systems.FUEL.Quantity.rightOuter.getValue() * LBS2KGS, 10))); - } else { - me["FUEL-Left-Outer-quantity"].setText(sprintf("%s", math.round(systems.FUEL.Quantity.leftOuter.getValue(), 10))); - me["FUEL-Left-Inner-quantity"].setText(sprintf("%s", math.round(systems.FUEL.Quantity.leftInner.getValue(), 10))); - me["FUEL-Center-quantity"].setText(sprintf("%s", math.round(systems.FUEL.Quantity.center.getValue(), 10))); - me["FUEL-Right-Inner-quantity"].setText(sprintf("%s", math.round(systems.FUEL.Quantity.rightInner.getValue(), 10))); - me["FUEL-Right-Outer-quantity"].setText(sprintf("%s", math.round(systems.FUEL.Quantity.rightOuter.getValue(), 10))); - } - - if (systems.FUEL.Valves.transfer1.getValue() == 0) { - me["FUEL-Left-Transfer"].hide(); - } else { - if (systems.FUEL.Valves.transfer1.getValue()) { - me["FUEL-Left-Transfer"].setColor(0.0509,0.7529,0.2941); - } else { - me["FUEL-Left-Transfer"].setColor(0.7333,0.3803,0); - } - me["FUEL-Left-Transfer"].show(); - } - - if (systems.FUEL.Valves.transfer2.getValue() == 0) { - me["FUEL-Right-Transfer"].hide(); - } else { - if (systems.FUEL.Valves.transfer2.getValue()) { - me["FUEL-Right-Transfer"].setColor(0.0509,0.7529,0.2941); - } else { - me["FUEL-Right-Transfer"].setColor(0.7333,0.3803,0); - } - me["FUEL-Right-Transfer"].show(); - } - - if (!systems.FUEL.Switches.pumpCenter1.getValue() and !systems.FUEL.Switches.pumpCenter2.getValue()) { - me["FUEL-Center-blocked"].show(); - } else { - me["FUEL-Center-blocked"].hide(); - } - - # APU - if (systems.FUEL.Valves.apu.getValue() and systems.APUNodes.Controls.master.getValue() and !systems.APUNodes.Controls.fire.getValue()) { - me["FUEL-APU-label"].setColor(0.8078, 0.8039, 0.8078); - me["FUEL-APU-line"].setColor(0.0509,0.7529,0.2941); - me["FUEL-APU-arrow"].setColor(0.0509,0.7529,0.2941); - me["FUEL-APU-line"].show(); - me["FUEL-APU-arrow"].show(); - } elsif (systems.FUEL.Valves.apu.getValue() and (!systems.APUNodes.Controls.master.getValue() or systems.APUNodes.Controls.fire.getValue())) { - me["FUEL-APU-label"].setColor(0.7333,0.3803,0); - me["FUEL-APU-line"].setColor(0.7333,0.3803,0); - me["FUEL-APU-arrow"].setColor(0.7333,0.3803,0); - me["FUEL-APU-line"].show(); - me["FUEL-APU-arrow"].show(); - } elsif (systems.FUEL.Valves.apu.getValue() != 1 and (systems.APUNodes.Controls.master.getValue() or systems.APUNodes.Controls.fire.getValue())) { - me["FUEL-APU-label"].setColor(0.7333,0.3803,0); - me["FUEL-APU-line"].hide(); - me["FUEL-APU-arrow"].hide(); - } else { - me["FUEL-APU-label"].setColor(0.8078, 0.8039, 0.8078); - me["FUEL-APU-arrow"].setColor(0.8078, 0.8039, 0.8078); - me["FUEL-APU-line"].hide(); - me["FUEL-APU-arrow"].show(); - } - - # Hide not yet implemented features - # TODO add them - me["FUEL-Left-blocked"].hide(); - me["FUEL-Right-blocked"].hide(); - me["FUEL-Left-Outer-Inacc"].hide(); - me["FUEL-Left-Inner-Inacc"].hide(); - me["FUEL-Right-Outer-Inacc"].hide(); - me["FUEL-Right-Inner-Inacc"].hide(); - me["FUEL-Center-Inacc"].hide(); - me.updateBottomStatus(); - }, -}; - -var canvas_lowerECAM_press = { - new: func(canvas_group, file) { - var m = {parents: [canvas_lowerECAM_press, canvas_lowerECAM_base]}; - m.init(canvas_group, file); - - return m; - }, - getKeys: func() { - return ["TAT","SAT","GW","UTCh","UTCm","GLoad","GW-weight-unit", "PRESS-Cab-VS", "PRESS-Cab-VS-neg", "PRESS-Cab-Alt"]; - }, - update: func() { - me["PRESS-Cab-VS"].setText(sprintf("%4.0f", press_vs_norm.getValue())); - me["PRESS-Cab-Alt"].setText(sprintf("%4.0f", cabinalt.getValue())); - - - me.updateBottomStatus(); - }, -}; - -var canvas_lowerECAM_status = { - new: func(canvas_group, file) { - var m = {parents: [canvas_lowerECAM_status, canvas_lowerECAM_base]}; - m.init(canvas_group, file); - - return m; - }, - getKeys: func() { - return ["TAT","SAT","GW","UTCh","UTCm","GLoad","GW-weight-unit"]; - }, - update: func() { - - me.updateBottomStatus(); - }, -}; - -var canvas_lowerECAM_hyd = { - new: func(canvas_group, file) { - var m = {parents: [canvas_lowerECAM_hyd, canvas_lowerECAM_base]}; - m.init(canvas_group, file); - - return m; - }, - getKeys: func() { - return ["TAT","SAT","GW","UTCh","UTCm","GLoad","GW-weight-unit","Green-Indicator","Blue-Indicator","Yellow-Indicator","Press-Green","Press-Blue","Press-Yellow","Green-Line","Blue-Line","Yellow-Line","PTU-Supply-Line","PTU-supply-yellow","PTU-supply-green","PTU-connection", - "PTU-Auto-or-off","RAT-label","RAT-stowed","RAT-not-stowed","ELEC-Yellow-off","ELEC-Yellow-on","ELEC-Yellow-label","ELEC-OVTH-Yellow","ELEC-Blue-label","ELEC-OVHT-Blue","ELEC-OVHT-Yellow","Pump-Green-label","Pump-Yellow-label","Pump-Green", - "Pump-LOPR-Green","Pump-Green-off","Pump-Green-on","Pump-Yellow","Pump-LOPR-Yellow","Pump-Yellow-off","Pump-Yellow-on","Pump-Blue", "Pump-Blue-off","Pump-Blue-on","Fire-Valve-Green","Fire-Valve-Yellow","LO-AIR-PRESS-Green", - "LO-AIR-PRESS-Yellow","LO-AIR-PRESS-Blue","OVHT-Green","OVHT-Blue","OVHT-Yellow","Quantity-Indicator-Green","Quantity-Indicator-Blue","Quantity-Indicator-Yellow","Green-label","Blue-label","Yellow-label"]; - }, - update: func() { - blue_psi = systems.HYD.Psi.blue.getValue(); - green_psi = systems.HYD.Psi.green.getValue(); - yellow_psi = systems.HYD.Psi.yellow.getValue(); - - me["Press-Green"].setText(sprintf("%s", math.round(green_psi, 50))); - me["Press-Blue"].setText(sprintf("%s", math.round(blue_psi, 50))); - me["Press-Yellow"].setText(sprintf("%s", math.round(yellow_psi, 50))); - - if (blue_psi >= 1500) { - me["Blue-Line"].setColor(0.0509,0.7529,0.2941); - me["Blue-Line"].setColorFill(0.0509,0.7529,0.2941); - me["Blue-Indicator"].setColor(0.0509,0.7529,0.2941); - me["Press-Blue"].setColor(0.0509,0.7529,0.2941); - me["Blue-label"].setColor(0.8078,0.8039,0.8078); - } else { - me["Blue-Line"].setColor(0.7333,0.3803,0); - me["Blue-Line"].setColorFill(0.7333,0.3803,0); - me["Blue-Indicator"].setColor(0.7333,0.3803,0); - me["Press-Blue"].setColor(0.7333,0.3803,0); - me["Blue-label"].setColor(0.7333,0.3803,0); - } - - if (yellow_psi >= 1500) { - me["Yellow-Line"].setColor(0.0509,0.7529,0.2941); - me["Yellow-Line"].setColorFill(0.0509,0.7529,0.2941); - me["Yellow-Indicator"].setColor(0.0509,0.7529,0.2941); - me["Press-Yellow"].setColor(0.0509,0.7529,0.2941); - me["Yellow-label"].setColor(0.8078,0.8039,0.8078); - } else { - me["Yellow-Line"].setColor(0.7333,0.3803,0); - me["Yellow-Line"].setColorFill(0.7333,0.3803,0); - me["Yellow-Indicator"].setColor(0.7333,0.3803,0); - me["Press-Yellow"].setColor(0.7333,0.3803,0); - me["Yellow-label"].setColor(0.7333,0.3803,0); - } - - if (green_psi >= 1500) { - me["Green-Line"].setColor(0.0509,0.7529,0.2941); - me["Green-Line"].setColorFill(0.0509,0.7529,0.2941); - me["Green-Indicator"].setColor(0.0509,0.7529,0.2941); - me["Press-Green"].setColor(0.0509,0.7529,0.2941); - me["Green-label"].setColor(0.8078,0.8039,0.8078); - } else { - me["Green-Line"].setColor(0.7333,0.3803,0); - me["Green-Line"].setColorFill(0.7333,0.3803,0); - me["Green-Indicator"].setColor(0.7333,0.3803,0); - me["Press-Green"].setColor(0.7333,0.3803,0); - me["Green-label"].setColor(0.7333,0.3803,0); - } - - if (systems.HYD.Switch.ptu.getValue() and !systems.HYD.Fail.ptuFault.getValue()) { - me["PTU-connection"].setColor(0.0509,0.7529,0.2941); - - if (systems.HYD.Ptu.active.getValue()) { - if (systems.HYD.Ptu.diff.getValue() < 0) { - me["PTU-Supply-Line"].show(); - me["PTU-supply-yellow"].show(); - me["PTU-supply-green"].hide(); - me["PTU-Auto-or-off"].hide(); - } else { - me["PTU-Supply-Line"].show(); - me["PTU-supply-yellow"].hide(); - me["PTU-supply-green"].show(); - me["PTU-Auto-or-off"].hide(); - } - } else { - me["PTU-Auto-or-off"].setColor(0.0509,0.7529,0.2941); - me["PTU-Supply-Line"].hide(); - me["PTU-supply-yellow"].hide(); - me["PTU-supply-green"].hide(); - me["PTU-Auto-or-off"].show(); - } - } else { - me["PTU-connection"].setColor(0.7333,0.3803,0); - me["PTU-Auto-or-off"].setColor(0.7333,0.3803,0); - me["PTU-Supply-Line"].hide(); - me["PTU-supply-yellow"].hide(); - me["PTU-supply-green"].hide(); - me["PTU-Auto-or-off"].show(); - } - - if (pts.Engines.Engine.n2Actual[0].getValue() >= 59) { - me["Pump-Green-label"].setColor(0.8078,0.8039,0.8078); - } else { - me["Pump-Green-label"].setColor(0.7333,0.3803,0); - } - - if (pts.Engines.Engine.n2Actual[1].getValue() >= 59) { - me["Pump-Yellow-label"].setColor(0.8078,0.8039,0.8078); - } else { - me["Pump-Yellow-label"].setColor(0.7333,0.3803,0); - } - - if (systems.HYD.Switch.greenEDP.getValue()) { - me["Pump-Green-off"].hide(); - if (green_psi >= 1500) { - me["Pump-Green-on"].show(); - me["Pump-LOPR-Green"].hide(); - me["Pump-Green"].setColor(0.0509,0.7529,0.2941); - me["Pump-Green"].setColorFill(0.0509,0.7529,0.2941); - } else { - me["Pump-Green-on"].hide(); - me["Pump-LOPR-Green"].show(); - me["Pump-Green"].setColor(0.7333,0.3803,0); - me["Pump-Green"].setColorFill(0.7333,0.3803,0); - } - } else { - me["Pump-Green-off"].show(); - me["Pump-Green-on"].hide(); - me["Pump-LOPR-Green"].hide(); - me["Pump-Green"].setColor(0.7333,0.3803,0); - } - - if (systems.HYD.Switch.yellowEDP.getValue()) { - me["Pump-Yellow-off"].hide(); - if (yellow_psi >= 1500) { - me["Pump-Yellow-on"].show(); - me["Pump-LOPR-Yellow"].hide(); - me["Pump-Yellow"].setColorFill(0.0509,0.7529,0.2941); - me["Pump-Yellow"].setColor(0.0509,0.7529,0.2941); - } else { - me["Pump-Yellow-on"].hide(); - me["Pump-LOPR-Yellow"].show(); - me["Pump-Yellow"].setColorFill(0.7333,0.3803,0); - me["Pump-Yellow"].setColor(0.7333,0.3803,0); - } - } else { - me["Pump-Yellow-off"].show(); - me["Pump-Yellow-on"].hide(); - me["Pump-LOPR-Yellow"].hide(); - me["Pump-Yellow"].setColorFill(0.7333,0.3803,0); - me["Pump-Yellow"].setColor(0.7333,0.3803,0); - } - - if (systems.HYD.Switch.blueElec.getValue()) { - me["Pump-Blue-off"].hide(); - if (blue_psi >= 1500) { - me["Pump-Blue-on"].show(); - me["Pump-Blue-off"].hide(); - me["Pump-Blue"].setColorFill(0.0509,0.7529,0.2941); - me["Pump-Blue"].setColor(0.0509,0.7529,0.2941); - } else { - me["Pump-Blue-off"].show(); - me["Pump-Blue-on"].hide(); - me["Pump-Blue"].setColorFill(0.7333,0.3803,0); - me["Pump-Blue"].setColor(0.7333,0.3803,0); - } - } else { - me["Pump-Blue-off"].show(); - me["Pump-Blue-on"].hide(); - me["Pump-Blue"].setColorFill(0.7333,0.3803,0); - me["Pump-Blue"].setColor(0.7333,0.3803,0); - } - - if (!systems.HYD.Switch.yellowElec.getValue()) { - me["ELEC-Yellow-on"].hide(); - me["ELEC-Yellow-off"].show(); - } else { - me["ELEC-Yellow-on"].show(); - me["ELEC-Yellow-off"].hide(); - if (yellow_psi >= 1500) { - me["ELEC-Yellow-on"].setColor(0.0509,0.7529,0.2941); - } else { - me["ELEC-Yellow-on"].setColor(0.7333,0.3803,0); - } - } - - if (y_resv_lo_air_press.getValue()) { - me["LO-AIR-PRESS-Yellow"].show(); - } else { - me["LO-AIR-PRESS-Yellow"].hide(); - } - - if (b_resv_lo_air_press.getValue()) { - me["LO-AIR-PRESS-Blue"].show(); - } else { - me["LO-AIR-PRESS-Blue"].hide(); - } - - if (g_resv_lo_air_press.getValue()) { - me["LO-AIR-PRESS-Green"].show(); - } else { - me["LO-AIR-PRESS-Green"].hide(); - } - - if (elec_pump_y_ovht.getValue()) { - me["ELEC-OVHT-Yellow"].show(); - } else { - me["ELEC-OVHT-Yellow"].hide(); - } - - if (elec_pump_b_ovht.getValue()) { - me["ELEC-OVHT-Blue"].show(); - } else { - me["ELEC-OVHT-Blue"].hide(); - } - - if (systems.HYD.Rat.position.getValue()) { - me["RAT-stowed"].hide(); - me["RAT-not-stowed"].show(); - } else { - me["RAT-stowed"].show(); - me["RAT-not-stowed"].hide(); - } - - if (y_resv_ovht.getValue()) { - me["OVHT-Yellow"].show(); - } else { - me["OVHT-Yellow"].hide(); - } - - if (b_resv_ovht.getValue()) { - me["OVHT-Green"].show(); - } else { - me["OVHT-Green"].hide(); - } - - if (g_resv_ovht.getValue()) { - me["OVHT-Blue"].show(); - } else { - me["OVHT-Blue"].hide(); - } - - if (systems.ELEC.Bus.ac1.getValue() >= 110) { - me["ELEC-Blue-label"].setColor(0.8078,0.8039,0.8078); - } else { - me["ELEC-Blue-label"].setColor(0.7333,0.3803,0); - } - - if (systems.ELEC.Bus.ac2.getValue() >= 110) { - me["ELEC-Yellow-label"].setColor(0.8078,0.8039,0.8078); - } else { - me["ELEC-Yellow-label"].setColor(0.7333,0.3803,0); - } - - if (systems.HYD.Valve.yellowFire.getValue() != 0) { - me["Fire-Valve-Yellow"].setColor(0.7333,0.3803,0); - me["Fire-Valve-Yellow"].setRotation(90 * D2R); - } else { - me["Fire-Valve-Yellow"].setColor(0.0509,0.7529,0.2941); - me["Fire-Valve-Yellow"].setRotation(0); - } - - if (systems.HYD.Valve.greenFire.getValue() != 0) { - me["Fire-Valve-Green"].setColor(0.7333,0.3803,0); - me["Fire-Valve-Green"].setRotation(90 * D2R); - } else { - me["Fire-Valve-Green"].setColor(0.0509,0.7529,0.2941); - me["Fire-Valve-Green"].setRotation(0); - } - - me.updateBottomStatus(); - }, -}; - -var canvas_lowerECAM_wheel = { - new: func(canvas_group, file) { - var m = {parents: [canvas_lowerECAM_wheel, canvas_lowerECAM_base]}; - m.init(canvas_group, file); - - return m; - }, - getKeys: func() { - return ["TAT","SAT","GW","UTCh","UTCm","GLoad","GW-weight-unit","lgctltext","NORMbrk","NWStext","leftdoor","rightdoor","nosegeardoorL","nosegeardoorR", - "autobrk","autobrkind","NWS","NWSrect","normbrk-rect","altnbrk","normbrkhyd","spoiler1Rex","spoiler1Rrt","spoiler2Rex","spoiler2Rrt","spoiler3Rex", - "spoiler3Rrt","spoiler4Rex","spoiler4Rrt","spoiler5Rex","spoiler5Rrt","spoiler1Lex","spoiler1Lrt","spoiler2Lex","spoiler2Lrt", - "spoiler3Lex","spoiler3Lrt","spoiler4Lex","spoiler4Lrt","spoiler5Lex","spoiler5Lrt","spoiler1Rf","spoiler2Rf","spoiler3Rf","spoiler4Rf","spoiler5Rf", - "spoiler1Lf","spoiler2Lf","spoiler3Lf","spoiler4Lf","spoiler5Lf","ALTNbrk","altnbrkhyd","altnbrk-rect","antiskidtext","brakearrow","accupress_text", - "accuonlyarrow","accuonly","braketemp1","normbrkhyd","braketemp2","braketemp3","braketemp4","toparc1","toparc2","toparc3","toparc4","leftuplock", - "noseuplock","rightuplock","Triangle-Left1","Triangle-Left2","Triangle-Nose1","Triangle-Nose2","Triangle-Right1","Triangle-Right2","BSCUrect1", - "BSCUrect2","BSCU1","BSCU2","tirepress1","tirepress2","tirepress3","tirepress4","tirepress5","tirepress6"]; - }, - update: func() { - blue_psi = systems.HYD.Psi.blue.getValue(); - green_psi = systems.HYD.Psi.green.getValue(); - yellow_psi = systems.HYD.Psi.yellow.getValue(); - autobrakemode = autobreak_mode.getValue(); - nosegear = gear1_pos.getValue(); - leftgear = gear2_pos.getValue(); - rightgear = gear3_pos.getValue(); - leftdoor = gear_door_L.getValue(); - rightdoor = gear_door_R.getValue(); - nosedoor = gear_door_N.getValue(); - gearlvr = gear_down.getValue(); - askidsw = systems.HYD.Switch.nwsSwitch.getBoolValue(); - brakemode = systems.HYD.Brakes.mode.getBoolValue(); - accum = systems.HYD.Brakes.accumPressPsi.getBoolValue(); - - # L/G CTL - if ((leftgear == 0 or nosegear == 0 or rightgear == 0 and gearlvr == 0) or (leftgear == 1 or nosegear == 1 or rightgear == 1 and gearlvr == 1)) { - me["lgctltext"].hide(); - } else { - me["lgctltext"].show(); - } - - # NWS / Antiskid / Brakes - if (askidsw and yellow_psi >= 1500) { - me["NWStext"].hide(); - me["NWS"].hide(); - me["NWSrect"].hide(); - me["antiskidtext"].hide(); - me["BSCUrect1"].hide(); - me["BSCUrect2"].hide(); - me["BSCU1"].hide(); - me["BSCU2"].hide(); - } else if (!askidsw and yellow_psi >= 1500) { - me["NWStext"].show(); - me["NWS"].show(); - me["NWS"].setColor(0.0509,0.7529,0.2941); - me["NWSrect"].show(); - me["antiskidtext"].show(); - me["antiskidtext"].setColor(0.7333,0.3803,0); - me["BSCUrect1"].show(); - me["BSCUrect2"].show(); - me["BSCU1"].show(); - me["BSCU2"].show(); - } else { - me["NWStext"].show(); - me["NWS"].show(); - me["NWS"].setColor(0.7333,0.3803,0); - me["NWSrect"].show(); - me["antiskidtext"].show(); - me["antiskidtext"].setColor(0.7333,0.3803,0); - me["BSCUrect1"].show(); - me["BSCUrect2"].show(); - me["BSCU1"].show(); - me["BSCU2"].show(); - } - - if (green_psi >= 1500 and brakemode == 1) { - me["NORMbrk"].hide(); - me["normbrk-rect"].hide(); - me["normbrkhyd"].hide(); - } else if (green_psi >= 1500 and askidsw) { - me["NORMbrk"].show(); - me["normbrk-rect"].show(); - me["NORMbrk"].setColor(0.7333,0.3803,0); - me["normbrkhyd"].setColor(0.0509,0.7529,0.2941); - } else if (green_psi < 1500 or !askidsw) { - me["NORMbrk"].show(); - me["normbrk-rect"].show(); - me["NORMbrk"].setColor(0.7333,0.3803,0); - me["normbrkhyd"].setColor(0.7333,0.3803,0); - } - - if (brakemode != 2) { - me["ALTNbrk"].hide(); - me["altnbrk-rect"].hide(); - me["altnbrkhyd"].hide(); - } else if (yellow_psi >= 1500) { - me["ALTNbrk"].show(); - me["altnbrk-rect"].show(); - me["altnbrkhyd"].setColor(0.0509,0.7529,0.2941); - } else { - me["ALTNbrk"].show(); - me["altnbrk-rect"].show(); - me["altnbrkhyd"].setColor(0.7333,0.3803,0); - } - - if (brakemode == 2 and accum < 200 and yellow_psi < 1500) { - me["accupress_text"].show(); - me["brakearrow"].hide(); - me["accupress_text"].setColor(0.7333,0.3803,0); - } else if (brakemode == 2 and accum > 200 and yellow_psi >= 1500){ - me["accupress_text"].show(); - me["brakearrow"].show(); - me["accupress_text"].setColor(0.0509,0.7529,0.2941); - } else if (brakemode == 2 and accum > 200 and yellow_psi < 1500) { - me["accuonlyarrow"].show(); - me["accuonly"].show(); - me["brakearrow"].hide(); - me["accupress_text"].hide(); - } else { - me["accuonlyarrow"].hide(); - me["accuonly"].hide(); - me["brakearrow"].hide(); - me["accupress_text"].hide(); - } - - # Gear Doors - me["leftdoor"].setRotation(door_left.getValue() * D2R); - me["rightdoor"].setRotation(door_right.getValue() * D2R); - me["nosegeardoorL"].setRotation(door_nose_left.getValue() * D2R); - me["nosegeardoorR"].setRotation(door_nose_right.getValue() * D2R); - - if (nosedoor == 0) { - me["nosegeardoorL"].setColorFill(0.0509,0.7529,0.2941); - me["nosegeardoorR"].setColorFill(0.0509,0.7529,0.2941); - } else { - me["nosegeardoorL"].setColorFill(0.7333,0.3803,0); - me["nosegeardoorR"].setColorFill(0.7333,0.3803,0); - } - - if (leftdoor == 0) { - me["leftdoor"].setColorFill(0.0509,0.7529,0.2941); - } else { - me["leftdoor"].setColorFill(0.7333,0.3803,0); - } - - if (rightdoor == 0) { - me["rightdoor"].setColorFill(0.0509,0.7529,0.2941); - } else { - me["rightdoor"].setColorFill(0.7333,0.3803,0); - } - - # Triangles - if (leftgear < 0.2 or leftgear > 0.8) { - me["Triangle-Left1"].hide(); - me["Triangle-Left2"].hide(); - } else { - me["Triangle-Left1"].show(); - me["Triangle-Left2"].show(); - } - - if (leftgear == 1) { - me["Triangle-Left1"].setColor(0.0509,0.7529,0.2941); - me["Triangle-Left2"].setColor(0.0509,0.7529,0.2941); - } else { - me["Triangle-Left1"].setColor(1,0,0); - me["Triangle-Left2"].setColor(1,0,0); - } - - if (nosegear < 0.2 or nosegear > 0.8) { - me["Triangle-Nose1"].hide(); - me["Triangle-Nose2"].hide(); - } else { - me["Triangle-Nose1"].show(); - me["Triangle-Nose2"].show(); - } - - if (nosegear == 1) { - me["Triangle-Nose1"].setColor(0.0509,0.7529,0.2941); - me["Triangle-Nose2"].setColor(0.0509,0.7529,0.2941); - } else { - me["Triangle-Nose1"].setColor(1,0,0); - me["Triangle-Nose2"].setColor(1,0,0); - } - - if (rightgear < 0.2 or rightgear > 0.8) { - me["Triangle-Right1"].hide(); - me["Triangle-Right2"].hide(); - } else { - me["Triangle-Right1"].show(); - me["Triangle-Right2"].show(); - } - - if (rightgear == 1) { - me["Triangle-Right1"].setColor(0.0509,0.7529,0.2941); - me["Triangle-Right2"].setColor(0.0509,0.7529,0.2941); - } else { - me["Triangle-Right1"].setColor(1,0,0); - me["Triangle-Right2"].setColor(1,0,0); - } - - # Autobrake - if (autobrakemode == 0) { - me["autobrkind"].hide(); - } elsif (autobrakemode == 1) { - me["autobrkind"].show(); - me["autobrkind"].setText(sprintf("%s", "LO")); - } elsif (autobrakemode == 2) { - me["autobrkind"].show(); - me["autobrkind"].setText(sprintf("%s", "MED")); - } elsif (autobrakemode == 3) { - me["autobrkind"].show(); - me["autobrkind"].setText(sprintf("%s", "MAX")); - } - - if (autobrakemode != 0) { - me["autobrk"].show(); - } elsif (autobrakemode == 0) { - me["autobrk"].hide(); - } - - # Spoilers - if (spoiler_L1.getValue() < 1.5) { - me["spoiler1Lex"].hide(); - me["spoiler1Lrt"].show(); - } else { - me["spoiler1Lrt"].hide(); - me["spoiler1Lex"].show(); - } - - if (spoiler_L2.getValue() < 1.5) { - me["spoiler2Lex"].hide(); - me["spoiler2Lrt"].show(); - } else { - me["spoiler2Lrt"].hide(); - me["spoiler2Lex"].show(); - } - - if (spoiler_L3.getValue() < 1.5) { - me["spoiler3Lex"].hide(); - me["spoiler3Lrt"].show(); - } else { - me["spoiler3Lrt"].hide(); - me["spoiler3Lex"].show(); - } - - if (spoiler_L4.getValue() < 1.5) { - me["spoiler4Lex"].hide(); - me["spoiler4Lrt"].show(); - } else { - me["spoiler4Lrt"].hide(); - me["spoiler4Lex"].show(); - } - - if (spoiler_L5.getValue() < 1.5) { - me["spoiler5Lex"].hide(); - me["spoiler5Lrt"].show(); - } else { - me["spoiler5Lrt"].hide(); - me["spoiler5Lex"].show(); - } - - if (spoiler_R1.getValue() < 1.5) { - me["spoiler1Rex"].hide(); - me["spoiler1Rrt"].show(); - } else { - me["spoiler1Rrt"].hide(); - me["spoiler1Rex"].show(); - } - - if (spoiler_R2.getValue() < 1.5) { - me["spoiler2Rex"].hide(); - me["spoiler2Rrt"].show(); - } else { - me["spoiler2Rrt"].hide(); - me["spoiler2Rex"].show(); - } - - if (spoiler_R3.getValue() < 1.5) { - me["spoiler3Rex"].hide(); - me["spoiler3Rrt"].show(); - } else { - me["spoiler3Rrt"].hide(); - me["spoiler3Rex"].show(); - } - - if (spoiler_R4.getValue() < 1.5) { - me["spoiler4Rex"].hide(); - me["spoiler4Rrt"].show(); - } else { - me["spoiler4Rrt"].hide(); - me["spoiler4Rex"].show(); - } - - if (spoiler_R5.getValue() < 1.5) { - me["spoiler5Rex"].hide(); - me["spoiler5Rrt"].show(); - } else { - me["spoiler5Rrt"].hide(); - me["spoiler5Rex"].show(); - } - - # Spoiler Fail - if (fbw.FBW.Failures.spoilerl1.getValue() or green_psi < 1500) { - me["spoiler1Lex"].setColor(0.7333,0.3803,0); - me["spoiler1Lrt"].setColor(0.7333,0.3803,0); - if (spoiler_L1.getValue() < 1.5) { - me["spoiler1Lf"].show(); - } else { - me["spoiler1Lf"].hide(); - } - } else { - me["spoiler1Lex"].setColor(0.0509,0.7529,0.2941); - me["spoiler1Lrt"].setColor(0.0509,0.7529,0.2941); - me["spoiler1Lf"].hide(); - } - - if (fbw.FBW.Failures.spoilerl2.getValue() or yellow_psi < 1500) { - me["spoiler2Lex"].setColor(0.7333,0.3803,0); - me["spoiler2Lrt"].setColor(0.7333,0.3803,0); - if (spoiler_L2.getValue() < 1.5) { - me["spoiler2Lf"].show(); - } else { - me["spoiler2Lf"].hide(); - } - } else { - me["spoiler2Lex"].setColor(0.0509,0.7529,0.2941); - me["spoiler2Lrt"].setColor(0.0509,0.7529,0.2941); - me["spoiler2Lf"].hide(); - } - - if (fbw.FBW.Failures.spoilerl3.getValue() or blue_psi < 1500) { - me["spoiler3Lex"].setColor(0.7333,0.3803,0); - me["spoiler3Lrt"].setColor(0.7333,0.3803,0); - if (spoiler_L3.getValue() < 1.5) { - me["spoiler3Lf"].show(); - } else { - me["spoiler3Lf"].hide(); - } - } else { - me["spoiler3Lex"].setColor(0.0509,0.7529,0.2941); - me["spoiler3Lrt"].setColor(0.0509,0.7529,0.2941); - me["spoiler3Lf"].hide(); - } - - if (fbw.FBW.Failures.spoilerl4.getValue() or yellow_psi < 1500) { - me["spoiler4Lex"].setColor(0.7333,0.3803,0); - me["spoiler4Lrt"].setColor(0.7333,0.3803,0); - if (spoiler_L4.getValue() < 1.5) { - me["spoiler4Lf"].show(); - } else { - me["spoiler4Lf"].hide(); - } - } else { - me["spoiler4Lex"].setColor(0.0509,0.7529,0.2941); - me["spoiler4Lrt"].setColor(0.0509,0.7529,0.2941); - me["spoiler4Lf"].hide(); - } - - if (fbw.FBW.Failures.spoilerl5.getValue() or green_psi < 1500) { - me["spoiler5Lex"].setColor(0.7333,0.3803,0); - me["spoiler5Lrt"].setColor(0.7333,0.3803,0); - if (spoiler_L5.getValue() < 1.5) { - me["spoiler5Lf"].show(); - } else { - me["spoiler5Lf"].hide(); - } - } else { - me["spoiler5Lex"].setColor(0.0509,0.7529,0.2941); - me["spoiler5Lrt"].setColor(0.0509,0.7529,0.2941); - me["spoiler5Lf"].hide(); - } - - if (fbw.FBW.Failures.spoilerr1.getValue() or green_psi < 1500) { - me["spoiler1Rex"].setColor(0.7333,0.3803,0); - me["spoiler1Rrt"].setColor(0.7333,0.3803,0); - if (spoiler_R1.getValue() < 1.5) { - me["spoiler1Rf"].show(); - } else { - me["spoiler1Rf"].hide(); - } - } else { - me["spoiler1Rex"].setColor(0.0509,0.7529,0.2941); - me["spoiler1Rrt"].setColor(0.0509,0.7529,0.2941); - me["spoiler1Rf"].hide(); - } - - if (fbw.FBW.Failures.spoilerr2.getValue() or yellow_psi < 1500) { - me["spoiler2Rex"].setColor(0.7333,0.3803,0); - me["spoiler2Rrt"].setColor(0.7333,0.3803,0); - if (spoiler_R2.getValue() < 1.5) { - me["spoiler2Rf"].show(); - } else { - me["spoiler2Rf"].hide(); - } - } else { - me["spoiler2Rex"].setColor(0.0509,0.7529,0.2941); - me["spoiler2Rrt"].setColor(0.0509,0.7529,0.2941); - me["spoiler2Rf"].hide(); - } - - if (fbw.FBW.Failures.spoilerr3.getValue() or blue_psi < 1500) { - me["spoiler3Rex"].setColor(0.7333,0.3803,0); - me["spoiler3Rrt"].setColor(0.7333,0.3803,0); - if (spoiler_R3.getValue() < 1.5) { - me["spoiler3Rf"].show(); - } else { - me["spoiler3Rf"].hide(); - } - } else { - me["spoiler3Rex"].setColor(0.0509,0.7529,0.2941); - me["spoiler3Rrt"].setColor(0.0509,0.7529,0.2941); - me["spoiler3Rf"].hide(); - } - - if (fbw.FBW.Failures.spoilerr4.getValue() or yellow_psi < 1500) { - me["spoiler4Rex"].setColor(0.7333,0.3803,0); - me["spoiler4Rrt"].setColor(0.7333,0.3803,0); - if (spoiler_R4.getValue() < 1.5) { - me["spoiler4Rf"].show(); - } else { - me["spoiler4Rf"].hide(); - } - } else { - me["spoiler4Rex"].setColor(0.0509,0.7529,0.2941); - me["spoiler4Rrt"].setColor(0.0509,0.7529,0.2941); - me["spoiler4Rf"].hide(); - } - - if (fbw.FBW.Failures.spoilerr5.getValue() or green_psi < 1500) { - me["spoiler5Rex"].setColor(0.7333,0.3803,0); - me["spoiler5Rrt"].setColor(0.7333,0.3803,0); - if (spoiler_R5.getValue() < 1.5) { - me["spoiler5Rf"].show(); - } else { - me["spoiler5Rf"].hide(); - } - } else { - me["spoiler5Rex"].setColor(0.0509,0.7529,0.2941); - me["spoiler5Rrt"].setColor(0.0509,0.7529,0.2941); - me["spoiler5Rf"].hide(); - } - - # Show Brakes temperature - if (L1BrakeTempc.getValue() > 300) { - me["braketemp1"].setColor(0.7333,0.3803,0); - } else { - me["braketemp1"].setColor(0.0509,0.7529,0.2941); - } - - if (L2BrakeTempc.getValue() > 300) { - me["braketemp2"].setColor(0.7333,0.3803,0); - } else { - me["braketemp2"].setColor(0.0509,0.7529,0.2941); - } - if (R3BrakeTempc.getValue() > 300) { - me["braketemp3"].setColor(0.7333,0.3803,0); - } else { - me["braketemp3"].setColor(0.0509,0.7529,0.2941); - } - if (R4BrakeTempc.getValue() > 300) { - me["braketemp4"].setColor(0.7333,0.3803,0); - } else { - me["braketemp4"].setColor(0.0509,0.7529,0.2941); - } - - # Brake arcs - if (L1BrakeTempc.getValue() > 300) { - me["toparc1"].setColor(0.7333,0.3803,0); - } else - { - if (L1BrakeTempc.getValue() > 100 and L1BrakeTempc.getValue() < 300) - { - me["toparc1"].setColor(0.0509,0.7529,0.2941); - } - else { - me["toparc1"].setColor(0.8078,0.8039,0.8078); - } - } - if (L2BrakeTempc.getValue() > 300) { - me["toparc2"].setColor(0.7333,0.3803,0); - } else - { - if (L2BrakeTempc.getValue() > 100 and L2BrakeTempc.getValue() < 300) - { - me["toparc2"].setColor(0.0509,0.7529,0.2941); - } - else { - me["toparc2"].setColor(0.8078,0.8039,0.8078); - } - } - if (R3BrakeTempc.getValue() > 300) { - me["toparc3"].setColor(0.7333,0.3803,0); - } else - { - if (R3BrakeTempc.getValue() > 100 and R3BrakeTempc.getValue() < 300) - { - me["toparc3"].setColor(0.0509,0.7529,0.2941); - } - else { - me["toparc3"].setColor(0.8078,0.8039,0.8078); - } - } - if (R4BrakeTempc.getValue() > 300) { - me["toparc4"].setColor(0.7333,0.3803,0); - } else - { - if (R4BrakeTempc.getValue() > 100 and R4BrakeTempc.getValue() < 300) - { - me["toparc4"].setColor(0.0509,0.7529,0.2941); - } - else { - me["toparc4"].setColor(0.8078,0.8039,0.8078); - } - } - me["braketemp1"].setText(sprintf("%s", math.round(L1BrakeTempc.getValue(), 1))); - me["braketemp2"].setText(sprintf("%s", math.round(L2BrakeTempc.getValue(), 1))); - me["braketemp3"].setText(sprintf("%s", math.round(R3BrakeTempc.getValue(), 1))); - me["braketemp4"].setText(sprintf("%s", math.round(R4BrakeTempc.getValue(), 1))); - me["braketemp1"].show(); - me["braketemp2"].show(); - me["braketemp3"].show(); - me["braketemp4"].show(); - me["toparc1"].show(); - me["toparc2"].show(); - me["toparc3"].show(); - me["toparc4"].show(); - - # Hide not yet implemented stuff - me["leftuplock"].hide(); - me["noseuplock"].hide(); - me["rightuplock"].hide(); - me["tirepress1"].hide(); - me["tirepress2"].hide(); - me["tirepress3"].hide(); - me["tirepress4"].hide(); - me["tirepress5"].hide(); - me["tirepress6"].hide(); - - me.updateBottomStatus(); - }, -}; - -var canvas_lowerECAM_test = { - init: func(canvas_group, file) { - var font_mapper = func(family, weight) { - return "LiberationFonts/LiberationSans-Regular.ttf"; - }; - - canvas.parsesvg(canvas_group, file, {"font-mapper": font_mapper}); - - var svg_keys = me.getKeys(); - foreach(var key; svg_keys) { - me[key] = canvas_group.getElementById(key); - } - - me.page = canvas_group; - - return me; - }, - new: func(canvas_group, file) { - var m = {parents: [canvas_lowerECAM_test]}; - m.init(canvas_group, file); - - return m; - }, - getKeys: func() { - return ["Test_white","Test_text"]; - }, - update: func() { - var elapsedtime = pts.Sim.Time.elapsedSec.getValue(); - if (du4_test_time.getValue() + 1 >= elapsedtime) { - me["Test_white"].show(); - me["Test_text"].hide(); - } else { - me["Test_white"].hide(); - me["Test_text"].show(); - } - }, -}; - -setlistener("/sim/signals/fdm-initialized", func { - lowerECAM_display = canvas.new({ - "name": "lowerECAM", - "size": [1024, 1024], - "view": [1024, 1024], - "mipmapping": 1 - }); - lowerECAM_display.addPlacement({"node": "lecam.screen"}); - var groupApu = lowerECAM_display.createGroup(); - var groupBleed = lowerECAM_display.createGroup(); - var groupCond = lowerECAM_display.createGroup(); - var groupCrz = lowerECAM_display.createGroup(); - var groupDoor = lowerECAM_display.createGroup(); - var groupElec = lowerECAM_display.createGroup(); - var groupEng = lowerECAM_display.createGroup(); - var groupFctl = lowerECAM_display.createGroup(); - var groupFuel = lowerECAM_display.createGroup(); - var groupPress = lowerECAM_display.createGroup(); - var groupStatus = lowerECAM_display.createGroup(); - var groupHyd = lowerECAM_display.createGroup(); - var groupWheel = lowerECAM_display.createGroup(); - var group_test = lowerECAM_display.createGroup(); - - lowerECAM_apu = canvas_lowerECAM_apu.new(groupApu, "Aircraft/A320-family/Models/Instruments/Lower-ECAM/res/apu.svg"); - lowerECAM_bleed = canvas_lowerECAM_bleed.new(groupBleed, "Aircraft/A320-family/Models/Instruments/Lower-ECAM/res/bleed.svg"); - lowerECAM_cond = canvas_lowerECAM_cond.new(groupCond, "Aircraft/A320-family/Models/Instruments/Lower-ECAM/res/cond.svg"); - lowerECAM_crz = canvas_lowerECAM_crz.new(groupCrz, "Aircraft/A320-family/Models/Instruments/Lower-ECAM/res/crz.svg"); - lowerECAM_door = canvas_lowerECAM_door.new(groupDoor, "Aircraft/A320-family/Models/Instruments/Lower-ECAM/res/door.svg"); - lowerECAM_elec = canvas_lowerECAM_elec.new(groupElec, "Aircraft/A320-family/Models/Instruments/Lower-ECAM/res/elec.svg"); - lowerECAM_eng = canvas_lowerECAM_eng.new(groupEng, "Aircraft/A320-family/Models/Instruments/Lower-ECAM/res/eng.svg"); - lowerECAM_fctl = canvas_lowerECAM_fctl.new(groupFctl, "Aircraft/A320-family/Models/Instruments/Lower-ECAM/res/fctl.svg"); - lowerECAM_fuel = canvas_lowerECAM_fuel.new(groupFuel, "Aircraft/A320-family/Models/Instruments/Lower-ECAM/res/fuel.svg"); - lowerECAM_press = canvas_lowerECAM_press.new(groupPress, "Aircraft/A320-family/Models/Instruments/Lower-ECAM/res/press.svg"); - lowerECAM_status = canvas_lowerECAM_status.new(groupStatus, "Aircraft/A320-family/Models/Instruments/Lower-ECAM/res/status.svg"); - lowerECAM_hyd = canvas_lowerECAM_hyd.new(groupHyd, "Aircraft/A320-family/Models/Instruments/Lower-ECAM/res/hyd.svg"); - lowerECAM_wheel = canvas_lowerECAM_wheel.new(groupWheel, "Aircraft/A320-family/Models/Instruments/Lower-ECAM/res/wheel.svg"); - lowerECAM_test = canvas_lowerECAM_test.new(group_test, "Aircraft/A320-family/Models/Instruments/Common/res/du-test.svg"); - - lowerECAM_update.start(); - if (rate.getValue() > 1) { - l_rateApply(); - } -}); - -var l_rateApply = func { - lowerECAM_update.restart(0.05 * rate.getValue()); +foreach (var name; keys(input)) { + emesary.GlobalTransmitter.NotifyAll(notifications.FrameNotificationAddProperty.new("A320 System Display", name, input[name])); } -var lowerECAM_update = maketimer(0.05, func { - canvas_lowerECAM_base.update(); -}); - var showLowerECAM = func { var dlg = canvas.Window.new([512, 512], "dialog").set("resize", 1); - dlg.setCanvas(lowerECAM_display); + dlg.setCanvas(canvas_lowerECAM_base.canvas); } setlistener("/systems/electrical/bus/ac-2", func() { - canvas_lowerECAM_base.updateDu4(); -}, 0, 0); + A320SD.MainScreen.powerTransient(); +}, 0, 0); \ No newline at end of file diff --git a/Models/Instruments/Lower-ECAM/res/apu.svg b/Models/Instruments/Lower-ECAM/res/apu.svg index 3f443c84..5c375974 100644 --- a/Models/Instruments/Lower-ECAM/res/apu.svg +++ b/Models/Instruments/Lower-ECAM/res/apu.svg @@ -42,8 +42,8 @@ id="namedview371" showgrid="true" inkscape:zoom="0.76543687" - inkscape:cx="663.42185" - inkscape:cy="457.30228" + inkscape:cx="1295.1967" + inkscape:cy="1096.0742" inkscape:window-x="-8" inkscape:window-y="-8" inkscape:window-maximized="1" @@ -201,7 +201,7 @@ x="465.99081" id="tspan4176" sodipodi:role="line">00 - + id="APUBleedValveCrossBar" + style="fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + inkscape:label="#rect5105-2" /> LEVEL + OFF diff --git a/Models/Instruments/Lower-ECAM/res/bleed.svg b/Models/Instruments/Lower-ECAM/res/bleed.svg index 2bc0a2b7..d08a757a 100644 --- a/Models/Instruments/Lower-ECAM/res/bleed.svg +++ b/Models/Instruments/Lower-ECAM/res/bleed.svg @@ -42,8 +42,8 @@ id="namedview371" showgrid="true" inkscape:zoom="0.73868665" - inkscape:cx="272.22904" - inkscape:cy="280.96379" + inkscape:cx="201.82373" + inkscape:cy="930.76571" inkscape:window-x="-8" inkscape:window-y="-8" inkscape:window-maximized="1" @@ -67,8 +67,9 @@ x="817.61298" height="5.1203089" width="53.195583" - id="rect5105-2" - style="fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + id="BLEED-XFEED-Cross" + style="fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + inkscape:label="#rect5105-2" /> + id="BLEED-ENG-1-Cross" + style="fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + inkscape:label="#rect5105-2-5-7" /> + id="BLEED-Ram-Air-Cross" + style="fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + inkscape:label="#rect5105-2-5-3" /> + id="BLEED-Pack-1-Flow-Valve-Cross" + style="fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + inkscape:label="#rect5105-2-5-3-6-9" /> + id="BLEED-Pack-2-Flow-Valve-Cross" + style="fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + inkscape:label="#rect5105-2-5-3-6-9-2" /> + id="BLEED-ENG-2-Cross" + style="fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + inkscape:label="#rect5105-2-5-7-7" /> + id="CONDHotAirValveCross" + style="fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + inkscape:label="#rect5105-2" /> 00 - @@ -37,16 +37,16 @@ guidetolerance="10" inkscape:pageopacity="1" inkscape:pageshadow="2" - inkscape:window-width="1920" - inkscape:window-height="1047" + inkscape:window-width="1366" + inkscape:window-height="705" id="namedview371" showgrid="true" - inkscape:zoom="0.5" - inkscape:cx="703.8872" - inkscape:cy="827.31856" - inkscape:window-x="3840" - inkscape:window-y="33" - inkscape:window-maximized="0" + inkscape:zoom="1" + inkscape:cx="470.5927" + inkscape:cy="1012.5262" + inkscape:window-x="-8" + inkscape:window-y="-8" + inkscape:window-maximized="1" inkscape:current-layer="svg2" inkscape:snap-nodes="false" inkscape:snap-global="false" @@ -298,13 +298,13 @@ 400 P + transform="matrix(-0.55570012,0,0,0.85384443,799.83103,551.6097)" /> N1 0.0 + sodipodi:role="line">0.2 0.0 + sodipodi:role="line">0.3 0.0 + sodipodi:role="line">0.1 0.0 + sodipodi:role="line">0.2 0 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:36px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:start;text-anchor:start;fill:#0dc04b;stroke-width:1px">500 @@ -37,14 +37,14 @@ guidetolerance="10" inkscape:pageopacity="1" inkscape:pageshadow="2" - inkscape:window-width="1920" - inkscape:window-height="1030" + inkscape:window-width="1366" + inkscape:window-height="705" id="namedview371" showgrid="true" - inkscape:zoom="0.7521195" - inkscape:cx="944.15154" - inkscape:cy="187.23728" - inkscape:window-x="1592" + inkscape:zoom="0.35355339" + inkscape:cx="354.52267" + inkscape:cy="1842.4796" + inkscape:window-x="-8" inkscape:window-y="-8" inkscape:window-maximized="1" inkscape:current-layer="svg2"> @@ -81,8 +81,7 @@ style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Liberation Sans';letter-spacing:0px;word-spacing:0px;fill:#179ab7;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" x="500.75214" y="977.31793" - id="text6232" - sodipodi:linespacing="0%">120000 °C G.LOAD 0.6 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#bb6100;fill-opacity:1">G.LOAD 0.6 SLIDE + style="font-size:32px;line-height:1.25;fill:#cecdce;fill-opacity:1;">SLIDE SLIDE + style="font-size:32.86256409px;line-height:1.25;fill:#cecdce;fill-opacity:1;">SLIDE SLIDE + y="522.78827" + style="font-size:32.86256409px;line-height:1.25;fill:#cecdce;fill-opacity:1;">SLIDE SLIDE + style="font-size:32.86256409px;line-height:1.25;fill:#cecdce;fill-opacity:1;">SLIDE + inkscape:label="#path4438" + inkscape:connector-curvature="0" /> EMEREXIT EMEREXIT + inkscape:label="#path4464" + inkscape:connector-curvature="0" /> SLIDE + style="font-size:32px;line-height:1.25;fill:#cecdce;fill-opacity:1;">SLIDE SLIDE + style="font-size:32.86256409px;line-height:1.25;fill:#cecdce;fill-opacity:1;">SLIDE OXY + x="852.17371" + y="64.937149" + style="font-size:30.04751396px;line-height:0;fill:#cecdce;fill-opacity:1;stroke-width:2.50395942px;">CKPT OXY REGUL LO PR + x="799.85938" + y="133.49768" + style="font-size:30.04800034px;line-height:0">REGUL LO PR 1300 PSI + x="953.60229" + y="100.29736" + style="font-size:30px;line-height:0">PSI + transform="translate(12.944435,6.250187)"> V/S 1650 FT/MIN - - - + id="DOOR-VS-Arrow-DN" /> - - - + id="DOOR-VS-Arrow-UP" /> diff --git a/Models/Instruments/Lower-ECAM/res/eng.svg b/Models/Instruments/Lower-ECAM/res/eng.svg index 212bd01f..4056f45c 100644 --- a/Models/Instruments/Lower-ECAM/res/eng.svg +++ b/Models/Instruments/Lower-ECAM/res/eng.svg @@ -12,8 +12,8 @@ viewBox="0 0 1024 1024" version="1.1" id="svg2" - inkscape:version="0.91 r13725" - sodipodi:docname="eng-eis2.svg"> + inkscape:version="0.92.4 (5da689c313, 2019-01-14)" + sodipodi:docname="eng.svg"> @@ -37,14 +37,14 @@ guidetolerance="10" inkscape:pageopacity="1" inkscape:pageshadow="2" - inkscape:window-width="1920" - inkscape:window-height="1030" + inkscape:window-width="1366" + inkscape:window-height="705" id="namedview371" showgrid="true" - inkscape:zoom="0.5" - inkscape:cx="988.67552" - inkscape:cy="398.82462" - inkscape:window-x="1592" + inkscape:zoom="1" + inkscape:cx="593.89152" + inkscape:cy="650.40507" + inkscape:window-x="-8" inkscape:window-y="-8" inkscape:window-maximized="1" inkscape:current-layer="svg2"> @@ -81,8 +81,7 @@ style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Liberation Sans';letter-spacing:0px;word-spacing:0px;fill:#179ab7;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" x="500.75214" y="977.31793" - id="text6232" - sodipodi:linespacing="0%">120000 °C G.LOAD 0.6 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#bb6100;fill-opacity:1">G.LOAD 0.6   0000 + x="264.69104" + y="181.87344" + style="font-size:30.0000782px;line-height:1.25;fill:#0dc04b;fill-opacity:1;stroke-width:0.75000191">0000 0000 + CLOG + CLOG + CLOG + CLOG + 22 + 0.6 + 0.1 + 0.6 + 0.1 + 22 diff --git a/Models/Instruments/Lower-ECAM/res/fctl.svg b/Models/Instruments/Lower-ECAM/res/fctl.svg index c691e798..3d86bd51 100644 --- a/Models/Instruments/Lower-ECAM/res/fctl.svg +++ b/Models/Instruments/Lower-ECAM/res/fctl.svg @@ -12,7 +12,7 @@ viewBox="0 0 1024 1024" version="1.1" id="svg2" - inkscape:version="0.91 r13725" + inkscape:version="0.92.4 (5da689c313, 2019-01-14)" sodipodi:docname="fctl.svg"> @@ -37,14 +37,14 @@ guidetolerance="10" inkscape:pageopacity="1" inkscape:pageshadow="2" - inkscape:window-width="1920" - inkscape:window-height="1030" + inkscape:window-width="1366" + inkscape:window-height="705" id="namedview371" - showgrid="true" - inkscape:zoom="1" - inkscape:cx="683.58709" - inkscape:cy="286.7536" - inkscape:window-x="1592" + showgrid="false" + inkscape:zoom="1.28" + inkscape:cx="608.14718" + inkscape:cy="323.45523" + inkscape:window-x="-8" inkscape:window-y="-8" inkscape:window-maximized="1" inkscape:current-layer="svg2"> @@ -81,8 +81,7 @@ style="font-style:normal;font-weight:normal;line-height:0%;font-family:'Liberation Sans';letter-spacing:0px;word-spacing:0px;fill:#179ab7;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" x="500.75214" y="977.31793" - id="text6232" - sodipodi:linespacing="0%">120000 °C G.LOAD 0.6 + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;text-anchor:middle;fill:#bb6100;fill-opacity:1">G.LOAD 0.6   - DN ° + style="font-size:32px;line-height:1.25;fill:#179ab7;fill-opacity:1;">°  AIL L  AIL R + y="408.59415" /> G - B + y="408.1442" /> B + y="408.1442" /> G L R + y="408.69415" /> B + y="664.86768" /> B + y="664.86139" /> G + y="663.84418" /> B + y="663.84418" /> Y ELEV ELEV 5 + diff --git a/Models/Instruments/Lower-ECAM/res/fuel.svg b/Models/Instruments/Lower-ECAM/res/fuel.svg index a2d0ce43..d91dff25 100644 --- a/Models/Instruments/Lower-ECAM/res/fuel.svg +++ b/Models/Instruments/Lower-ECAM/res/fuel.svg @@ -50,8 +50,8 @@ id="namedview371" showgrid="false" inkscape:zoom="0.68" - inkscape:cx="817.73616" - inkscape:cy="1022.6281" + inkscape:cx="434.43172" + inkscape:cy="1022.8371" inkscape:window-x="-8" inkscape:window-y="-8" inkscape:window-maximized="1" @@ -148,8 +148,9 @@ x="817.61298" height="5.1203089" width="53.195583" - id="rect5105-2-5-3" - style="fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + id="FUEL-XFEED-Cross" + style="fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + inkscape:label="#rect5105-2-5-3" /> 0000 + style="font-size:30.1989994px;line-height:0;text-align:end;text-anchor:end;">0000 0000 000 + style="font-size:30.1989994px;line-height:0;text-anchor:middle;text-align:center;">000 000 + style="font-size:30.1989994px;line-height:0;text-align:end;text-anchor:end;">000 + id="FUEL-ENG-Master-1-Cross" + style="fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + inkscape:label="#rect5105-2-5-3-4" /> + id="FUEL-ENG-Master-2-Cross" + style="fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + inkscape:label="#rect5105-2-5-3-4-3" /> - - - - + + + + + + - - - - + + + + + + - - - - + + + + + + - - + + + + + + - - - - - - + + + + + + - - - - + + + + + + + ry="0" + transform="matrix(0,1,-1,0,0,0)" + y="-261.75253" + x="232.60442" + height="18.894773" + width="5.3955846" + id="FUEL-APU-line" + style="fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:1.09431255;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + sodipodi:nodetypes="cccccsc" + inkscape:connector-curvature="0" + id="FUEL-APU-arrow" + d="m 209.24999,234.99999 15.75,-7.5 16.5,-8.25 v 17.25 l 0,15.30854 c 0,0 -1.69343,-0.68362 -19.69533,-10.2091 -11.05467,-5.84944 -12.55467,-6.59944 -12.55467,-6.59944 z" + style="fill:none;stroke:#0dc04b;stroke-width:2.77499986;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.80000019;stroke-dasharray:none;stroke-opacity:1" /> 0000 + style="font-size:30px;line-height:1.25;text-align:end;text-anchor:end;fill:#0dc04b;fill-opacity:1;stroke-width:0.75;">0000 0000 + style="font-size:30.00000191px;line-height:1.25;text-align:end;text-anchor:end;fill:#0dc04b;fill-opacity:1;stroke-width:0.75;">0000 0000 + style="font-size:30.00000191px;line-height:1.25;text-align:end;text-anchor:end;fill:#0dc04b;fill-opacity:1;stroke-width:0.75;">0000 @@ -55,10 +55,10 @@ inkscape:window-width="1366" inkscape:window-height="705" id="namedview371" - showgrid="true" - inkscape:zoom="4.0298682" - inkscape:cx="632.99286" - inkscape:cy="609.55322" + showgrid="false" + inkscape:zoom="5.6568542" + inkscape:cx="1081.6807" + inkscape:cy="259.15874" inkscape:window-x="-8" inkscape:window-y="-8" inkscape:window-maximized="1" @@ -84,8 +84,9 @@ x="817.61298" height="5.1203089" width="53.195583" - id="rect5105-2-5-3" - style="fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + id="Fire-Valve-Green-Cross" + style="fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + inkscape:label="#rect5105-2-5-3" /> + style="fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:0.99974996;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"> + style="fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:0.99974996;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + style="fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:0.99974996;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + style="fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:0.99974996;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + style="fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:0.99974996;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + id="Fire-Valve-Yellow-Cross" + style="fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + inkscape:label="#rect5105-2-5-3-8" /> - + id="Green-Line-Middle" + style="fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:1.31405532;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + inkscape:label="#rect5105-6-0-7-8-6-8-8-7-3-8-6" /> + + id="Green-Line-Top" + style="fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:3.44869995;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + inkscape:label="#rect5105-6-0-7-8-6-8-8-7-3-8-6-8" /> - + id="Yellow-Line-Middle" + style="fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:1.24083376;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + inkscape:label="#rect5105-6-0-7-8-6-8-8-7-3-8-6-4" /> + + id="Yellow-Line-Top" + style="fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:3.50812292;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + inkscape:label="#rect5105-6-0-7-8-6-8-8-7-3-8-6-8-3" /> + id="Blue-Line-Top" + style="fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:3.83536959;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + inkscape:label="#rect5105-6-0-7-8-6-8-8-7-3-8-6-8-9" /> + id="Blue-Line-Bottom" + style="fill:#0dc04b;fill-opacity:1;stroke:none;stroke-width:2.05138826;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + inkscape:label="#rect5105-6-0-7-8-6-8-8-7-3-8-6-8-9-6" /> + @@ -882,7 +902,7 @@ sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path5561" - d="m 812.24998,856.74997 h -17.25" + d="m 812.24998,856.74997 h -17.0677" style="fill:none;stroke:#0dc04b;stroke-width:2.625;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + style="fill:#cecdce;fill-opacity:1;stroke:none;stroke-width:2.57043672;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + d="m 813.15523,823.32891 h 11.71524 v 33.68651 h -11.71524 z" + style="fill:none;stroke:#bb6100;stroke-width:2.10803151;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + + style="fill:#cecdce;fill-opacity:1;stroke:none;stroke-width:2.49036217;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + d="m 813.26886,814.62253 h 11.48798 v 42.27926 h -11.48798 z" + style="fill:none;stroke:#bb6100;stroke-width:2.33861709;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + + style="fill:#cecdce;fill-opacity:1;stroke:none;stroke-width:2.63435125;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + d="m 812.88109,830.65833 h 12.26352 v 26.63123 h -12.26352 z" + style="fill:none;stroke:#bb6100;stroke-width:1.91768491;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> 00 - 00 + LO diff --git a/Models/Instruments/Lower-ECAM/res/press.svg b/Models/Instruments/Lower-ECAM/res/press.svg index e2329db1..92a6e964 100644 --- a/Models/Instruments/Lower-ECAM/res/press.svg +++ b/Models/Instruments/Lower-ECAM/res/press.svg @@ -12,7 +12,7 @@ viewBox="0 0 1024 1024" version="1.1" id="svg2" - inkscape:version="0.92.2 (5c3e80d, 2017-08-06)" + inkscape:version="0.92.4 (5da689c313, 2019-01-14)" sodipodi:docname="press.svg"> @@ -41,9 +41,9 @@ inkscape:window-height="705" id="namedview371" showgrid="true" - inkscape:zoom="0.88" - inkscape:cx="397.64824" - inkscape:cy="880.3857" + inkscape:zoom="0.64" + inkscape:cx="770.48025" + inkscape:cy="620.45739" inkscape:window-x="-8" inkscape:window-y="-8" inkscape:window-maximized="1" @@ -467,7 +467,7 @@ style="font-size:32.18700027px;line-height:0">SYS2 MAN + style="font-size:32.18700027px;line-height:0;fill:#0dc04b;fill-opacity:1;">MAN PACK 1 + style="font-size:34.92427444px;line-height:1.25;fill:#cecdce;fill-opacity:1;stroke-width:0.87310684;">PACK 1 PACK 2 + style="font-size:34.92399979px;line-height:1.25;fill:#cecdce;fill-opacity:1;">PACK 2 + id="PRESS-Pack-1-Triangle" + inkscape:connector-curvature="0" + inkscape:label="#path5062" /> + id="PRESS-Pack-2-Triangle" + inkscape:connector-curvature="0" + inkscape:label="#path5062-3" /> - - 0 - . - 1 00 - NORM BRK + style="font-size:32px;line-height:1.25;fill:#bb6100;fill-opacity:1;">NORM BRK 999 ||| + style="font-size:21.63888741px;line-height:1.25;fill:#bb6100;fill-opacity:1;">||| ||| + style="font-size:21.63888741px;line-height:1.25;fill:#bb6100;fill-opacity:1;">||| ||| + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:21.63888741px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';fill:#bb6100;fill-opacity:1;">||| REL ||| + style="font-size:23.3301487px;line-height:1.25;fill:#bb6100;fill-opacity:1;">||| ||| + style="font-size:23.3301487px;line-height:1.25;fill:#bb6100;fill-opacity:1;">||| ||| + style="font-size:23.3301487px;line-height:1.25;fill:#bb6100;fill-opacity:1;">||| ||| + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:23.3301487px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';fill:#bb6100;fill-opacity:1;">||| 2 + style="font-size:32px;line-height:1.25;fill:#0dc04b;fill-opacity:1;">2 1 + style="font-size:32px;line-height:1.25;fill:#0dc04b;fill-opacity:1;">1 ||| + style="font-size:21.63888741px;line-height:1.25;stroke-width:1px;fill:#bb6100;fill-opacity:1;">||| ACCU ONLY + x="441.43594" + y="707.69073">ACCU ONLY 1.75 or getprop("/fdm/jsbsim/hydraulics/stabilizer/final-deg") < -3.65 or getprop("/fdm/jsbsim/hydraulics/rudder/trim-cmd-deg") < -3.55 or getprop("/fdm/jsbsim/hydraulics/rudder/trim-cmd-deg") > 3.55) { setprop("/ECAM/to-config-normal", 0); } else { @@ -3296,7 +3295,7 @@ var messages_config_memo = func { } var messages_memo = func { - phaseVarMemo2 = phaseNode.getValue(); + phaseVarMemo2 = pts.ECAM.fwcWarningPhase.getValue(); if (getprop("/services/fuel-truck/enable") == 1 and toMemoLine1.active != 1 and ldgMemoLine1.active != 1) { refuelg.active = 1; } else { @@ -3399,7 +3398,7 @@ var messages_memo = func { } var messages_right_memo = func { - phaseVarMemo3 = phaseNode.getValue(); + phaseVarMemo3 = pts.ECAM.fwcWarningPhase.getValue(); if (FWC.Timer.toInhibitOutput.getValue() == 1) { to_inhibit.active = 1; } else { diff --git a/Nasal/ECAM/SystemDisplay.nas b/Nasal/ECAM/SystemDisplay.nas index 7fa71d20..d5724414 100644 --- a/Nasal/ECAM/SystemDisplay.nas +++ b/Nasal/ECAM/SystemDisplay.nas @@ -28,7 +28,7 @@ var SystemDisplayController = { displayedPage: nil, lastDisplayedPage: nil, lastMode: nil, - mode: 0, # 0 = man, 1 = warning, 2 = advisory (not used yet), 3 = auto + mode: 3, # 0 = man, 1 = warning, 2 = advisory (not used yet), 3 = auto tempFWCPhase: nil, tempElapsedTime: nil, tempEngineModeSel: nil, @@ -37,6 +37,7 @@ var SystemDisplayController = { ECAMTimer.start(); }, autoCallLoop: func() { + if (me.mode != 3) { return; } me.tempFWCPhase = pts.ECAM.fwcWarningPhase.getValue(); if (me.Display.APU) { diff --git a/Nasal/FBW/it-fbw.nas b/Nasal/FBW/it-fbw.nas index 3772bfed..7a9daa22 100644 --- a/Nasal/FBW/it-fbw.nas +++ b/Nasal/FBW/it-fbw.nas @@ -67,8 +67,8 @@ var FBW = { rtlu1: props.globals.getNode("/systems/failures/fctl/rtlu-1"), rtlu2: props.globals.getNode("/systems/failures/fctl/rtlu-2"), rtlu2: props.globals.getNode("/systems/failures/fctl/rtlu-2"), - ths: props.globals.getNode("/systems/failures/fctl/ths-jam"), - spoilerl1: props.globals.getNode("/systems/failures/spoilers/spoiler-l1"), + ths: props.globals.getNode(""), + spoilerl1: props.globals.getNode(""), spoilerl2: props.globals.getNode("/systems/failures/spoilers/spoiler-l2"), spoilerl3: props.globals.getNode("/systems/failures/spoilers/spoiler-l3"), spoilerl4: props.globals.getNode("/systems/failures/spoilers/spoiler-l4"), diff --git a/Nasal/Libraries/libraries.nas b/Nasal/Libraries/libraries.nas index 01ceae0f..183d09c4 100644 --- a/Nasal/Libraries/libraries.nas +++ b/Nasal/Libraries/libraries.nas @@ -391,6 +391,10 @@ var input = { "seatbelt": "/controls/switches/seatbelt-sign", "noSmoking": "/controls/switches/no-smoking-sign", "gearPosNorm": "/gear/gear[0]/position-norm", + "gearPosNorm1": "/gear/gear[1]/position-norm", + "gearPosNorm2": "/gear/gear[2]/position-norm", + "engine1Running": "/engines/engine[0]/running", + "engine2Running": "/engines/engine[1]/running", }; foreach (var name; keys(input)) { diff --git a/Nasal/Libraries/property-tree-setup.nas b/Nasal/Libraries/property-tree-setup.nas index d9ab95fa..99c33950 100644 --- a/Nasal/Libraries/property-tree-setup.nas +++ b/Nasal/Libraries/property-tree-setup.nas @@ -83,6 +83,7 @@ var Engines = { n1Actual: [props.globals.getNode("/engines/engine[0]/n1-actual"), props.globals.getNode("/engines/engine[1]/n1-actual")], n2Actual: [props.globals.getNode("/engines/engine[0]/n2-actual"), props.globals.getNode("/engines/engine[1]/n2-actual")], oilPsi: [props.globals.getNode("/engines/engine[0]/oil-psi-actual"), props.globals.getNode("/engines/engine[1]/oil-psi-actual")], + oilQt: [props.globals.getNode("/engines/engine[0]/oil-qt-actual"), props.globals.getNode("/engines/engine[1]/oil-qt-actual")], thrust: [props.globals.getNode("/engines/engine[0]/thrust-lb"), props.globals.getNode("/engines/engine[1]/thrust-lb")], reverser: [props.globals.getNode("/engines/engine[0]/reverser-pos-norm"), props.globals.getNode("/engines/engine[1]/reverser-pos-norm")], state: [props.globals.getNode("/engines/engine[0]/state"), props.globals.getNode("/engines/engine[1]/state")], diff --git a/Nasal/Systems/hydraulics.nas b/Nasal/Systems/hydraulics.nas index 04bef4bc..7e75f138 100644 --- a/Nasal/Systems/hydraulics.nas +++ b/Nasal/Systems/hydraulics.nas @@ -64,9 +64,9 @@ var HYD = { }, init: func() { me.resetFail(); - me.Qty.blueInput.setValue(math.round((rand() * 4) + 8 , 0.1)); # Random between 8 and 12 - me.Qty.greenInput.setValue(math.round((rand() * 4) + 8 , 0.1)); # Random between 8 and 12 - me.Qty.yellowInput.setValue(math.round((rand() * 4) + 8 , 0.1)); # Random between 8 and 12 + me.Qty.blueInput.setValue(math.round((rand() * 2) + 6 , 0.1)); # Random between 6 and 8 + me.Qty.greenInput.setValue(math.round((rand() * 4) + 14 , 0.1)); # Random between 14 and 18 + me.Qty.yellowInput.setValue(math.round((rand() * 4) + 10 , 0.1)); # Random between 10 and 14 me.Switch.blueElec.setValue(1); me.Switch.blueElecOvrd.setValue(0); me.Switch.greenEDP.setValue(1); diff --git a/Nasal/emesary/exec.nas b/Nasal/emesary/exec.nas index eda3c5e9..c00a8579 100644 --- a/Nasal/emesary/exec.nas +++ b/Nasal/emesary/exec.nas @@ -42,6 +42,7 @@ input = { frame_rate: "/sim/frame-rate", elapsedTime: "/sim/time/elapsed-sec", FWCPhase: "/ECAM/warning-phase", + acconfigUnits: "/systems/acconfig/options/weight-kgs", # Just about everything uses these properties at some stage, lets add them here! gear0Wow: "/gear/gear[0]/wow", diff --git a/Systems/a320-hydraulic.xml b/Systems/a320-hydraulic.xml index 4be8b6b0..3f8a0c19 100644 --- a/Systems/a320-hydraulic.xml +++ b/Systems/a320-hydraulic.xml @@ -29,13 +29,25 @@ - + /systems/failures/hydraulic/green-leak eq 1 + + + + /systems/hydraulic/green-qty-cmd-cmd + + 2.1 + /gear/gear[0]/position-norm + + + + +