2021-07-08 11:34:30 +00:00
|
|
|
# A3XX Lower ECAM Canvas
|
2022-12-31 17:56:08 +00:00
|
|
|
# Copyright (c) 2023 Josh Davidson (Octal450) and Jonathan Redpath
|
2021-07-08 11:34:30 +00:00
|
|
|
|
|
|
|
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);
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
# init
|
2021-07-08 16:19:27 +00:00
|
|
|
obj["CONDFanFwdFault"].hide();
|
|
|
|
obj["CONDFanAftFault"].hide();
|
|
|
|
|
|
|
|
# aft cargo ventilation disabled
|
|
|
|
obj["CargoCond"].hide();
|
2021-07-08 11:34:30 +00:00
|
|
|
|
|
|
|
obj.update_items = [
|
2021-07-08 16:19:27 +00:00
|
|
|
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);
|
|
|
|
}),
|
2022-04-20 20:22:33 +00:00
|
|
|
props.UpdateManager.FromHashList(["condHotAirSwitch","condHotAirValve","condHotAirCmd"], 0.01, func(val) {
|
|
|
|
if (val.condHotAirValve <= 0.01) {
|
2021-07-08 16:19:27 +00:00
|
|
|
obj["CONDHotAirValve"].setRotation(90 * D2R);
|
2022-04-20 20:22:33 +00:00
|
|
|
if (val.condHotAirCmd) {
|
|
|
|
obj["CONDHotAirValve"].setColor(0.7333,0.3803,0);
|
|
|
|
obj["CONDHotAirValveCross"].setColorFill(0.7333,0.3803,0);
|
|
|
|
} else {
|
|
|
|
obj["CONDHotAirValve"].setColor(0.0509,0.7529,0.2941);
|
|
|
|
obj["CONDHotAirValveCross"].setColorFill(0.0509,0.7529,0.2941);
|
|
|
|
}
|
2021-07-08 16:19:27 +00:00
|
|
|
} else {
|
|
|
|
obj["CONDHotAirValve"].setRotation(0);
|
2022-04-20 20:22:33 +00:00
|
|
|
if (val.condHotAirCmd) {
|
|
|
|
obj["CONDHotAirValve"].setColor(0.0509,0.7529,0.2941);
|
|
|
|
obj["CONDHotAirValveCross"].setColorFill(0.0509,0.7529,0.2941);
|
|
|
|
} else {
|
|
|
|
obj["CONDHotAirValve"].setColor(0.7333,0.3803,0);
|
|
|
|
obj["CONDHotAirValveCross"].setColorFill(0.7333,0.3803,0);
|
|
|
|
}
|
2021-07-08 16:19:27 +00:00
|
|
|
}
|
|
|
|
}),
|
2021-07-08 11:34:30 +00:00
|
|
|
];
|
|
|
|
|
|
|
|
obj.updateItemsBottom = [
|
2022-05-05 18:13:09 +00:00
|
|
|
props.UpdateManager.FromHashValue("acconfigUnits", 1, func(val) {
|
2021-07-08 11:34:30 +00:00
|
|
|
if (val) {
|
|
|
|
obj["GW-weight-unit"].setText("KG");
|
|
|
|
} else {
|
|
|
|
obj["GW-weight-unit"].setText("LBS");
|
|
|
|
}
|
|
|
|
}),
|
2022-04-19 17:15:23 +00:00
|
|
|
props.UpdateManager.FromHashValue("hour", 1, func(val) {
|
2021-07-08 11:34:30 +00:00
|
|
|
obj["UTCh"].setText(sprintf("%02d", val));
|
|
|
|
}),
|
2022-04-19 17:15:23 +00:00
|
|
|
props.UpdateManager.FromHashValue("minute", 1, func(val) {
|
2021-07-08 11:34:30 +00:00
|
|
|
obj["UTCm"].setText(sprintf("%02d", val));
|
|
|
|
}),
|
|
|
|
props.UpdateManager.FromHashValue("gForce", 0.05, func(val) {
|
2022-04-19 17:15:23 +00:00
|
|
|
obj["GLoad"].setText("G.LOAD " ~ sprintf("%3.1f", val));
|
2021-07-08 11:34:30 +00:00
|
|
|
}),
|
|
|
|
props.UpdateManager.FromHashValue("gForceDisplay", nil, func(val) {
|
2022-04-19 17:15:23 +00:00
|
|
|
if (val) {
|
2021-07-08 11:34:30 +00:00
|
|
|
obj["GLoad"].show();
|
|
|
|
} else {
|
|
|
|
obj["GLoad"].hide();
|
|
|
|
}
|
|
|
|
}),
|
2022-04-19 17:15:23 +00:00
|
|
|
props.UpdateManager.FromHashValue("satTemp", 0.5, func(val) {
|
|
|
|
obj["SAT"].setText(sprintf("%+2.0f", val));
|
|
|
|
}),
|
|
|
|
props.UpdateManager.FromHashValue("tatTemp", 0.5, func(val) {
|
|
|
|
obj["TAT"].setText(sprintf("%+2.0f", val));
|
|
|
|
}),
|
2021-07-08 11:34:30 +00:00
|
|
|
];
|
2022-04-21 15:02:39 +00:00
|
|
|
obj.timer = maketimestamp();
|
|
|
|
obj.times = [];
|
2021-07-08 11:34:30 +00:00
|
|
|
return obj;
|
|
|
|
},
|
|
|
|
getKeysBottom: func() {
|
|
|
|
return ["TAT","SAT","GW","UTCh","UTCm","GLoad","GW-weight-unit"];
|
|
|
|
},
|
|
|
|
getKeys: func() {
|
2021-07-08 16:19:27 +00:00
|
|
|
return["CargoCond","CONDHotAirValve","CONDFanFwdFault","CONDFanAftFault","CONDTrimValveCKPT","CONDTrimValveAFT","CONDTrimValveFWD","CONDDuctTempCKPT",
|
|
|
|
"CONDDuctTempAFT","CONDDuctTempFWD","CONDTempCKPT","CONDTempAFT","CONDTempFWD","CONDHotAirValveCross"];
|
|
|
|
},
|
2021-07-08 11:34:30 +00:00
|
|
|
updateBottom: func(notification) {
|
|
|
|
if (fmgc.FMGCInternal.fuelRequest and fmgc.FMGCInternal.blockConfirmed and !fmgc.FMGCInternal.fuelCalculating and notification.FWCPhase != 1) {
|
2022-05-05 18:13:09 +00:00
|
|
|
if (notification.acconfigUnits) {
|
2021-07-08 11:34:30 +00:00
|
|
|
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 {
|
2021-07-27 15:38:00 +00:00
|
|
|
me["GW"].setText(sprintf("%s", " -- "));
|
2021-07-08 11:34:30 +00:00
|
|
|
me["GW"].setColor(0.0901,0.6039,0.7176);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (dmc.DMController.DMCs[1].outputs[4] != nil) {
|
2022-04-19 17:15:23 +00:00
|
|
|
notification.satTemp = dmc.DMController.DMCs[1].outputs[4].getValue();
|
2021-07-08 11:34:30 +00:00
|
|
|
me["SAT"].setColor(0.0509,0.7529,0.2941);
|
|
|
|
} else {
|
2022-04-19 21:10:54 +00:00
|
|
|
me["SAT"].setText("XX");
|
2021-07-08 11:34:30 +00:00
|
|
|
me["SAT"].setColor(0.7333,0.3803,0);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (dmc.DMController.DMCs[1].outputs[5] != nil) {
|
2022-04-19 17:15:23 +00:00
|
|
|
notification.tatTemp = dmc.DMController.DMCs[1].outputs[5].getValue();
|
2021-07-08 11:34:30 +00:00
|
|
|
me["TAT"].setColor(0.0509,0.7529,0.2941);
|
|
|
|
} else {
|
2022-04-19 21:10:54 +00:00
|
|
|
me["TAT"].setText("XX");
|
2021-07-08 11:34:30 +00:00
|
|
|
me["TAT"].setColor(0.7333,0.3803,0);
|
|
|
|
}
|
2022-04-19 17:15:23 +00:00
|
|
|
|
|
|
|
foreach(var update_item_bottom; me.updateItemsBottom)
|
|
|
|
{
|
|
|
|
update_item_bottom.update(notification);
|
|
|
|
}
|
2021-07-08 11:34:30 +00:00
|
|
|
},
|
|
|
|
update: func(notification) {
|
2022-04-21 15:02:39 +00:00
|
|
|
me.timer.stamp();
|
2021-07-08 11:34:30 +00:00
|
|
|
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);
|
2022-04-21 15:02:39 +00:00
|
|
|
append(me.times, me.timer.elapsedUSec());
|
2021-07-08 11:34:30 +00:00
|
|
|
},
|
|
|
|
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 {
|
2021-07-27 17:55:36 +00:00
|
|
|
if (pts.Modes.EcamDuXfr.getBoolValue()) {
|
|
|
|
if (du3_lgt.getValue() > 0.01 and systems.ELEC.Bus.acEss.getValue() >= 110) {
|
|
|
|
if (du3_test_time.getValue() + du3_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);
|
|
|
|
me.test.setVisible(0);
|
|
|
|
}
|
2021-07-08 11:34:30 +00:00
|
|
|
}
|
|
|
|
} else {
|
|
|
|
me.group.setVisible(0);
|
2021-07-08 16:19:27 +00:00
|
|
|
# don't hide the test group; just let whichever page is active control it
|
2021-07-08 11:34:30 +00:00
|
|
|
}
|
|
|
|
},
|
|
|
|
};
|
|
|
|
|
|
|
|
var input = {
|
2021-07-08 16:19:27 +00:00
|
|
|
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"
|
2021-07-08 11:34:30 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
foreach (var name; keys(input)) {
|
|
|
|
emesary.GlobalTransmitter.NotifyAll(notifications.FrameNotificationAddProperty.new("A320 System Display", name, input[name]));
|
|
|
|
}
|