diff --git a/A320-main.xml b/A320-main.xml
index 0ffda41d..a93ccf80 100644
--- a/A320-main.xml
+++ b/A320-main.xml
@@ -1548,6 +1548,9 @@
Aircraft/IDG-A32X/Models/Instruments/MCDU/MCDU.nas
+
+ Aircraft/IDG-A32X/Nasal/ECAM-controller.nas
+
Aircraft/IDG-A32X/Nasal/icing.nas
diff --git a/Models/FlightDeck/a320.flightdeck.xml b/Models/FlightDeck/a320.flightdeck.xml
index 56c27ea0..24bd362c 100644
--- a/Models/FlightDeck/a320.flightdeck.xml
+++ b/Models/FlightDeck/a320.flightdeck.xml
@@ -391,8 +391,6 @@
ecam_wheel_led
exped_led
hdg-text-test
- master_caution_on
- master_warning_on
qnh-test
rudder-trim-test
spd-text-test
@@ -4724,6 +4722,81 @@
controls/lighting/fcu-panel-norm
+
+
+
+ select
+ master_warning_on
+
+
+
+ controls/switches/annun-test
+ 1
+
+
+ ECAM/warnings/master-warning-light
+ 1
+
+
+
+
+
+
+ select
+ master_caution_on
+
+
+
+ controls/switches/annun-test
+ 1
+
+
+ ECAM/warnings/master-caution-light
+ 1
+
+
+
+
+
+
+ pick
+ master_warning
+ master_warning_on
+
+
+
+
+
+ systems/electrical/bus/dc-ess
+ 25
+
+
+ property-assign
+ ECAM/warnings/master-warning-light
+ 0
+
+
+
+
+
+ pick
+ master_caution
+ master_caution_on
+
+
+
+
+
+ systems/electrical/bus/dc-ess
+ 25
+
+
+ property-assign
+ ECAM/warnings/master-caution-light
+ 0
+
+
+
diff --git a/Models/Instruments/Upper-ECAM/Upper-ECAM.nas b/Models/Instruments/Upper-ECAM/Upper-ECAM.nas
index 5dbf1893..7fadeffa 100644
--- a/Models/Instruments/Upper-ECAM/Upper-ECAM.nas
+++ b/Models/Instruments/Upper-ECAM/Upper-ECAM.nas
@@ -147,100 +147,116 @@ var canvas_upperECAM_base = {
me["ECAML7"].setText(sprintf("%s", getprop("/ECAM/msg/line7")));
me["ECAML8"].setText(sprintf("%s", getprop("/ECAM/msg/line8")));
- if (getprop("/ECAM/msg/line1c") == "w") {
+ if (getprop("/ECAM/msg/linec1") == "w") {
me["ECAML1"].setColor(0.8078,0.8039,0.8078);
- } else if (getprop("/ECAM/msg/line1c") == "b") {
+ } else if (getprop("/ECAM/msg/linec1") == "b") {
me["ECAML1"].setColor(0.0901,0.6039,0.7176);
- } else if (getprop("/ECAM/msg/line1c") == "g") {
+ } else if (getprop("/ECAM/msg/linec1") == "g") {
me["ECAML1"].setColor(0.0509,0.7529,0.2941);
- } else if (getprop("/ECAM/msg/line1c") == "a") {
+ } else if (getprop("/ECAM/msg/linec1") == "a") {
me["ECAML1"].setColor(0.7333,0.3803,0);
- } else if (getprop("/ECAM/msg/line1c") == "r") {
+ } else if (getprop("/ECAM/msg/linec1") == "r") {
me["ECAML1"].setColor(1,0,0);
+ } else if (getprop("/ECAM/msg/linec1") == "m") {
+ me["ECAML1"].setColor(0.6901,0.3333,0.7450);
}
- if (getprop("/ECAM/msg/line2c") == "w") {
+ if (getprop("/ECAM/msg/linec2") == "w") {
me["ECAML2"].setColor(0.8078,0.8039,0.8078);
- } else if (getprop("/ECAM/msg/line2c") == "b") {
+ } else if (getprop("/ECAM/msg/linec2") == "b") {
me["ECAML2"].setColor(0.0901,0.6039,0.7176);
- } else if (getprop("/ECAM/msg/line2c") == "g") {
+ } else if (getprop("/ECAM/msg/linec2") == "g") {
me["ECAML2"].setColor(0.0509,0.7529,0.2941);
- } else if (getprop("/ECAM/msg/line2c") == "a") {
+ } else if (getprop("/ECAM/msg/linec2") == "a") {
me["ECAML2"].setColor(0.7333,0.3803,0);
- } else if (getprop("/ECAM/msg/line2c") == "r") {
+ } else if (getprop("/ECAM/msg/linec2") == "r") {
me["ECAML2"].setColor(1,0,0);
+ } else if (getprop("/ECAM/msg/linec2") == "m") {
+ me["ECAML2"].setColor(0.6901,0.3333,0.7450);
}
- if (getprop("/ECAM/msg/line3c") == "w") {
+ if (getprop("/ECAM/msg/linec3") == "w") {
me["ECAML3"].setColor(0.8078,0.8039,0.8078);
- } else if (getprop("/ECAM/msg/line3c") == "b") {
+ } else if (getprop("/ECAM/msg/linec3") == "b") {
me["ECAML3"].setColor(0.0901,0.6039,0.7176);
- } else if (getprop("/ECAM/msg/line3c") == "g") {
+ } else if (getprop("/ECAM/msg/linec3") == "g") {
me["ECAML3"].setColor(0.0509,0.7529,0.2941);
- } else if (getprop("/ECAM/msg/line3c") == "a") {
+ } else if (getprop("/ECAM/msg/linec3") == "a") {
me["ECAML3"].setColor(0.7333,0.3803,0);
- } else if (getprop("/ECAM/msg/line3c") == "r") {
+ } else if (getprop("/ECAM/msg/linec3") == "r") {
me["ECAML3"].setColor(1,0,0);
+ } else if (getprop("/ECAM/msg/linec3") == "m") {
+ me["ECAML3"].setColor(0.6901,0.3333,0.7450);
}
- if (getprop("/ECAM/msg/line4c") == "w") {
+ if (getprop("/ECAM/msg/linec4") == "w") {
me["ECAML4"].setColor(0.8078,0.8039,0.8078);
- } else if (getprop("/ECAM/msg/line4c") == "b") {
+ } else if (getprop("/ECAM/msg/linec4") == "b") {
me["ECAML4"].setColor(0.0901,0.6039,0.7176);
- } else if (getprop("/ECAM/msg/line4c") == "g") {
+ } else if (getprop("/ECAM/msg/linec4") == "g") {
me["ECAML4"].setColor(0.0509,0.7529,0.2941);
- } else if (getprop("/ECAM/msg/line4c") == "a") {
+ } else if (getprop("/ECAM/msg/linec4") == "a") {
me["ECAML4"].setColor(0.7333,0.3803,0);
- } else if (getprop("/ECAM/msg/line4c") == "r") {
+ } else if (getprop("/ECAM/msg/linec4") == "r") {
me["ECAML4"].setColor(1,0,0);
+ } else if (getprop("/ECAM/msg/linec4") == "m") {
+ me["ECAML4"].setColor(0.6901,0.3333,0.7450);
}
- if (getprop("/ECAM/msg/line5c") == "w") {
+ if (getprop("/ECAM/msg/linec5") == "w") {
me["ECAML5"].setColor(0.8078,0.8039,0.8078);
- } else if (getprop("/ECAM/msg/line5c") == "b") {
+ } else if (getprop("/ECAM/msg/linec5") == "b") {
me["ECAML5"].setColor(0.0901,0.6039,0.7176);
- } else if (getprop("/ECAM/msg/line5c") == "g") {
+ } else if (getprop("/ECAM/msg/linec5") == "g") {
me["ECAML5"].setColor(0.0509,0.7529,0.2941);
- } else if (getprop("/ECAM/msg/line5c") == "a") {
+ } else if (getprop("/ECAM/msg/linec5") == "a") {
me["ECAML5"].setColor(0.7333,0.3803,0);
- } else if (getprop("/ECAM/msg/line5c") == "r") {
+ } else if (getprop("/ECAM/msg/linec5") == "r") {
me["ECAML5"].setColor(1,0,0);
+ } else if (getprop("/ECAM/msg/linec5") == "m") {
+ me["ECAML5"].setColor(0.6901,0.3333,0.7450);
}
- if (getprop("/ECAM/msg/line6c") == "w") {
+ if (getprop("/ECAM/msg/linec6") == "w") {
me["ECAML6"].setColor(0.8078,0.8039,0.8078);
- } else if (getprop("/ECAM/msg/line6c") == "b") {
+ } else if (getprop("/ECAM/msg/linec6") == "b") {
me["ECAML6"].setColor(0.0901,0.6039,0.7176);
- } else if (getprop("/ECAM/msg/line6c") == "g") {
+ } else if (getprop("/ECAM/msg/linec6") == "g") {
me["ECAML6"].setColor(0.0509,0.7529,0.2941);
- } else if (getprop("/ECAM/msg/line6c") == "a") {
+ } else if (getprop("/ECAM/msg/linec6") == "a") {
me["ECAML6"].setColor(0.7333,0.3803,0);
- } else if (getprop("/ECAM/msg/line6c") == "r") {
+ } else if (getprop("/ECAM/msg/linec6") == "r") {
me["ECAML6"].setColor(1,0,0);
+ } else if (getprop("/ECAM/msg/linec6") == "m") {
+ me["ECAML6"].setColor(0.6901,0.3333,0.7450);
}
- if (getprop("/ECAM/msg/line7c") == "w") {
+ if (getprop("/ECAM/msg/linec7") == "w") {
me["ECAML7"].setColor(0.8078,0.8039,0.8078);
- } else if (getprop("/ECAM/msg/line7c") == "b") {
+ } else if (getprop("/ECAM/msg/linec7") == "b") {
me["ECAML7"].setColor(0.0901,0.6039,0.7176);
- } else if (getprop("/ECAM/msg/line7c") == "g") {
+ } else if (getprop("/ECAM/msg/linec7") == "g") {
me["ECAML7"].setColor(0.0509,0.7529,0.2941);
- } else if (getprop("/ECAM/msg/line7c") == "a") {
+ } else if (getprop("/ECAM/msg/linec7") == "a") {
me["ECAML7"].setColor(0.7333,0.3803,0);
- } else if (getprop("/ECAM/msg/line7c") == "r") {
+ } else if (getprop("/ECAM/msg/linec7") == "r") {
me["ECAML7"].setColor(1,0,0);
+ } else if (getprop("/ECAM/msg/linec7") == "m") {
+ me["ECAML7"].setColor(0.6901,0.3333,0.7450);
}
- if (getprop("/ECAM/msg/line8c") == "w") {
+ if (getprop("/ECAM/msg/linec8") == "w") {
me["ECAML8"].setColor(0.8078,0.8039,0.8078);
- } else if (getprop("/ECAM/msg/line8c") == "b") {
+ } else if (getprop("/ECAM/msg/linec8") == "b") {
me["ECAML8"].setColor(0.0901,0.6039,0.7176);
- } else if (getprop("/ECAM/msg/line8c") == "g") {
+ } else if (getprop("/ECAM/msg/linec8") == "g") {
me["ECAML8"].setColor(0.0509,0.7529,0.2941);
- } else if (getprop("/ECAM/msg/line8c") == "a") {
+ } else if (getprop("/ECAM/msg/linec8") == "a") {
me["ECAML8"].setColor(0.7333,0.3803,0);
- } else if (getprop("/ECAM/msg/line8c") == "r") {
+ } else if (getprop("/ECAM/msg/linec8") == "r") {
me["ECAML8"].setColor(1,0,0);
+ } else if (getprop("/ECAM/msg/linec8") == "m") {
+ me["ECAML8"].setColor(0.6901,0.3333,0.7450);
}
me["TO_Memo"].hide();
@@ -342,6 +358,136 @@ var canvas_upperECAM_base = {
me["TO_Memo"].hide();
me["LDG_Memo"].hide();
}
+
+ # Right ECAM Messages
+ if (getprop("/ECAM/right-msg") == "MSG") {
+ me["ECAMR1"].setText(sprintf("%s", getprop("/ECAM/rightmsg/line1")));
+ me["ECAMR2"].setText(sprintf("%s", getprop("/ECAM/rightmsg/line2")));
+ me["ECAMR3"].setText(sprintf("%s", getprop("/ECAM/rightmsg/line3")));
+ me["ECAMR4"].setText(sprintf("%s", getprop("/ECAM/rightmsg/line4")));
+ me["ECAMR5"].setText(sprintf("%s", getprop("/ECAM/rightmsg/line5")));
+ me["ECAMR6"].setText(sprintf("%s", getprop("/ECAM/rightmsg/line6")));
+ me["ECAMR7"].setText(sprintf("%s", getprop("/ECAM/rightmsg/line7")));
+ me["ECAMR8"].setText(sprintf("%s", getprop("/ECAM/rightmsg/line8")));
+
+ if (getprop("/ECAM/rightmsg/linec1") == "w") {
+ me["ECAMR1"].setColor(0.8078,0.8039,0.8078);
+ } else if (getprop("/ECAM/rightmsg/linec1") == "b") {
+ me["ECAMR1"].setColor(0.0901,0.6039,0.7176);
+ } else if (getprop("/ECAM/rightmsg/linec1") == "g") {
+ me["ECAMR1"].setColor(0.0509,0.7529,0.2941);
+ } else if (getprop("/ECAM/rightmsg/linec1") == "a") {
+ me["ECAMR1"].setColor(0.7333,0.3803,0);
+ } else if (getprop("/ECAM/rightmsg/linec1") == "r") {
+ me["ECAMR1"].setColor(1,0,0);
+ } else if (getprop("/ECAM/rightmsg/linec1") == "m") {
+ me["ECAMR1"].setColor(0.6901,0.3333,0.7450);
+ }
+
+ if (getprop("/ECAM/rightmsg/linec2") == "w") {
+ me["ECAMR2"].setColor(0.8078,0.8039,0.8078);
+ } else if (getprop("/ECAM/rightmsg/linec2") == "b") {
+ me["ECAMR2"].setColor(0.0901,0.6039,0.7176);
+ } else if (getprop("/ECAM/rightmsg/linec2") == "g") {
+ me["ECAMR2"].setColor(0.0509,0.7529,0.2941);
+ } else if (getprop("/ECAM/rightmsg/linec2") == "a") {
+ me["ECAMR2"].setColor(0.7333,0.3803,0);
+ } else if (getprop("/ECAM/rightmsg/linec2") == "r") {
+ me["ECAMR2"].setColor(1,0,0);
+ } else if (getprop("/ECAM/rightmsg/linec2") == "m") {
+ me["ECAMR2"].setColor(0.6901,0.3333,0.7450);
+ }
+
+ if (getprop("/ECAM/rightmsg/linec3") == "w") {
+ me["ECAMR3"].setColor(0.8078,0.8039,0.8078);
+ } else if (getprop("/ECAM/rightmsg/linec3") == "b") {
+ me["ECAMR3"].setColor(0.0901,0.6039,0.7176);
+ } else if (getprop("/ECAM/rightmsg/linec3") == "g") {
+ me["ECAMR3"].setColor(0.0509,0.7529,0.2941);
+ } else if (getprop("/ECAM/rightmsg/linec3") == "a") {
+ me["ECAMR3"].setColor(0.7333,0.3803,0);
+ } else if (getprop("/ECAM/rightmsg/linec3") == "r") {
+ me["ECAMR3"].setColor(1,0,0);
+ } else if (getprop("/ECAM/rightmsg/linec3") == "m") {
+ me["ECAMR3"].setColor(0.6901,0.3333,0.7450);
+ }
+
+ if (getprop("/ECAM/rightmsg/linec4") == "w") {
+ me["ECAMR4"].setColor(0.8078,0.8039,0.8078);
+ } else if (getprop("/ECAM/rightmsg/linec4") == "b") {
+ me["ECAMR4"].setColor(0.0901,0.6039,0.7176);
+ } else if (getprop("/ECAM/rightmsg/linec4") == "g") {
+ me["ECAMR4"].setColor(0.0509,0.7529,0.2941);
+ } else if (getprop("/ECAM/rightmsg/linec4") == "a") {
+ me["ECAMR4"].setColor(0.7333,0.3803,0);
+ } else if (getprop("/ECAM/rightmsg/linec4") == "r") {
+ me["ECAMR4"].setColor(1,0,0);
+ } else if (getprop("/ECAM/rightmsg/linec4") == "m") {
+ me["ECAMR4"].setColor(0.6901,0.3333,0.7450);
+ }
+
+ if (getprop("/ECAM/rightmsg/linec5") == "w") {
+ me["ECAMR5"].setColor(0.8078,0.8039,0.8078);
+ } else if (getprop("/ECAM/rightmsg/linec5") == "b") {
+ me["ECAMR5"].setColor(0.0901,0.6039,0.7176);
+ } else if (getprop("/ECAM/rightmsg/linec5") == "g") {
+ me["ECAMR5"].setColor(0.0509,0.7529,0.2941);
+ } else if (getprop("/ECAM/rightmsg/linec5") == "a") {
+ me["ECAMR5"].setColor(0.7333,0.3803,0);
+ } else if (getprop("/ECAM/rightmsg/linec5") == "r") {
+ me["ECAMR5"].setColor(1,0,0);
+ } else if (getprop("/ECAM/rightmsg/linec5") == "m") {
+ me["ECAMR5"].setColor(0.6901,0.3333,0.7450);
+ }
+
+ if (getprop("/ECAM/rightmsg/linec6") == "w") {
+ me["ECAMR6"].setColor(0.8078,0.8039,0.8078);
+ } else if (getprop("/ECAM/rightmsg/linec6") == "b") {
+ me["ECAMR6"].setColor(0.0901,0.6039,0.7176);
+ } else if (getprop("/ECAM/rightmsg/linec6") == "g") {
+ me["ECAMR6"].setColor(0.0509,0.7529,0.2941);
+ } else if (getprop("/ECAM/rightmsg/linec6") == "a") {
+ me["ECAMR6"].setColor(0.7333,0.3803,0);
+ } else if (getprop("/ECAM/rightmsg/linec6") == "r") {
+ me["ECAMR6"].setColor(1,0,0);
+ } else if (getprop("/ECAM/rightmsg/linec6") == "m") {
+ me["ECAMR6"].setColor(0.6901,0.3333,0.7450);
+ }
+
+ if (getprop("/ECAM/rightmsg/linec7") == "w") {
+ me["ECAMR7"].setColor(0.8078,0.8039,0.8078);
+ } else if (getprop("/ECAM/rightmsg/linec7") == "b") {
+ me["ECAMR7"].setColor(0.0901,0.6039,0.7176);
+ } else if (getprop("/ECAM/rightmsg/linec7") == "g") {
+ me["ECAMR7"].setColor(0.0509,0.7529,0.2941);
+ } else if (getprop("/ECAM/rightmsg/linec7") == "a") {
+ me["ECAMR7"].setColor(0.7333,0.3803,0);
+ } else if (getprop("/ECAM/rightmsg/linec7") == "r") {
+ me["ECAMR7"].setColor(1,0,0);
+ } else if (getprop("/ECAM/rightmsg/linec7") == "m") {
+ me["ECAMR7"].setColor(0.6901,0.3333,0.7450);
+ }
+
+ if (getprop("/ECAM/rightmsg/linec8") == "w") {
+ me["ECAMR8"].setColor(0.8078,0.8039,0.8078);
+ } else if (getprop("/ECAM/rightmsg/linec8") == "b") {
+ me["ECAMR8"].setColor(0.0901,0.6039,0.7176);
+ } else if (getprop("/ECAM/rightmsg/linec8") == "g") {
+ me["ECAMR8"].setColor(0.0509,0.7529,0.2941);
+ } else if (getprop("/ECAM/rightmsg/linec8") == "a") {
+ me["ECAMR8"].setColor(0.7333,0.3803,0);
+ } else if (getprop("/ECAM/rightmsg/linec8") == "r") {
+ me["ECAMR8"].setColor(1,0,0);
+ } else if (getprop("/ECAM/rightmsg/linec8") == "m") {
+ me["ECAMR8"].setColor(0.6901,0.3333,0.7450);
+ }
+
+ me["ECAM_Right"].show();
+ } else {
+ me["ECAM_Right"].hide();
+ me["TO_Memo"].hide();
+ me["LDG_Memo"].hide();
+ }
},
};
@@ -356,7 +502,7 @@ var canvas_upperECAM_cfm_eis2 = {
return ["N11-needle","N11-thr","N11-ylim","N11","N11-decpnt","N11-decimal","N11-box","N11-scale","N11-scale2","N11-scaletick","N11-scalenum","N11-XX","N11-XX2","N11-XX-box","EGT1-needle","EGT1","EGT1-scale","EGT1-box","EGT1-scale2","EGT1-scaletick",
"EGT1-XX","N21","N21-decpnt","N21-decimal","N21-XX","FF1","FF1-XX","N12-needle","N12-thr","N12-ylim","N12","N12-decpnt","N12-decimal","N12-box","N12-scale","N12-scale2","N12-scaletick","N12-scalenum","N12-XX","N12-XX2","N12-XX-box","EGT2-needle","EGT2",
"EGT2-scale","EGT2-box","EGT2-scale2","EGT2-scaletick","EGT2-XX","N22","N22-decpnt","N22-decimal","N22-XX","FF2","FF2-XX","FOB-LBS","FlapTxt","FlapDots","N1Lim-mode","N1Lim","N1Lim-decpnt","N1Lim-decimal","N1Lim-percent","N1Lim-XX","N1Lim-XX2","REV1",
- "REV1-box","REV2","REV2-box","ECAM_Left","ECAML1","ECAML2","ECAML3","ECAML4","ECAML5","ECAML6","ECAML7","ECAML8","TO_Memo","TO_Autobrake","TO_Signs","TO_Spoilers","TO_Flaps","TO_Config","TO_Autobrake_B","TO_Signs_B","TO_Spoilers_B","TO_Flaps_B",
+ "REV1-box","REV2","REV2-box","ECAM_Left","ECAML1","ECAML2","ECAML3","ECAML4","ECAML5","ECAML6","ECAML7","ECAML8","ECAMR1", "ECAMR2", "ECAMR3", "ECAMR4", "ECAMR5", "ECAMR6", "ECAMR7", "ECAMR8", "ECAM_Right", "TO_Memo","TO_Autobrake","TO_Signs","TO_Spoilers","TO_Flaps","TO_Config","TO_Autobrake_B","TO_Signs_B","TO_Spoilers_B","TO_Flaps_B",
"TO_Config_B","LDG_Memo","LDG_Gear","LDG_Signs","LDG_Spoilers","LDG_Flaps","LDG_Gear_B","LDG_Signs_B","LDG_Spoilers_B","LDG_Flaps_B","LDG_Flaps_B3"];
},
update: func() {
@@ -583,7 +729,7 @@ var canvas_upperECAM_iae_eis2 = {
"N11-needle","N11-thr","N11-ylim","N11","N11-decpnt","N11-decimal","N11-scale","N11-scale2","N11-scaletick","N11-scalenum","N11-XX","N21","N21-decpnt","N21-decimal","N21-XX","FF1","FF1-XX","EPR2-needle","EPR2-thr","EPR2-ylim","EPR2","EPR2-decpnt",
"EPR2-decimal","EPR2-box","EPR2-scale","EPR2-scaletick","EPR2-scalenum","EPR2-XX","EPR2-XX2","EGT2-needle","EGT2","EGT2-scale","EGT2-scale2","EGT2-box","EGT2-scaletick","EGT2-XX","N12-needle","N12-thr","N12-ylim","N12","N12-decpnt","N12-decimal",
"N12-scale","N12-scale2","N12-scaletick","N12-scalenum","N12-XX","N22","N22-decpnt","N22-decimal","N22-XX","FF2","FF2-XX","FOB-LBS","FlapTxt","FlapDots","EPRLim-mode","EPRLim","EPRLim-decpnt","EPRLim-decimal","EPRLim-XX","EPRLim-XX2","REV1","REV1-box",
- "REV2","REV2-box","ECAM_Left","ECAML1","ECAML2","ECAML3","ECAML4","ECAML5","ECAML6","ECAML7","ECAML8","TO_Memo","TO_Autobrake","TO_Signs","TO_Spoilers","TO_Flaps","TO_Config","TO_Autobrake_B","TO_Signs_B","TO_Spoilers_B","TO_Flaps_B","TO_Config_B",
+ "REV2","REV2-box","ECAM_Left","ECAML1","ECAML2","ECAML3","ECAML4","ECAML5","ECAML6","ECAML7","ECAML8", "ECAMR1", "ECAMR2", "ECAMR3", "ECAMR4", "ECAMR5", "ECAMR6", "ECAMR7", "ECAMR8", "ECAM_Right", "TO_Memo","TO_Autobrake","TO_Signs","TO_Spoilers","TO_Flaps","TO_Config","TO_Autobrake_B","TO_Signs_B","TO_Spoilers_B","TO_Flaps_B","TO_Config_B",
"LDG_Memo","LDG_Gear","LDG_Signs","LDG_Spoilers","LDG_Flaps","LDG_Gear_B","LDG_Signs_B","LDG_Spoilers_B","LDG_Flaps_B","LDG_Flaps_B3"];
},
update: func() {
diff --git a/Models/Instruments/Upper-ECAM/res/cfm-eis2.svg b/Models/Instruments/Upper-ECAM/res/cfm-eis2.svg
index 847d0434..cfb5c7fe 100644
--- a/Models/Instruments/Upper-ECAM/res/cfm-eis2.svg
+++ b/Models/Instruments/Upper-ECAM/res/cfm-eis2.svg
@@ -12,7 +12,7 @@
viewBox="0 0 1024 1024"
version="1.1"
id="svg2"
- inkscape:version="0.91 r13725"
+ inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"
sodipodi:docname="cfm-eis2.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="false"
inkscape:zoom="0.50000001"
- inkscape:cx="531.17625"
+ inkscape:cx="659.36853"
inkscape:cy="512.09207"
- inkscape:window-x="1592"
+ inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg2"
@@ -86,9 +86,8 @@
id="FlapTxt"
y="655.34741"
x="729.04968"
- style="font-style:normal;font-weight:normal;font-size:11.69594479px;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"
- sodipodi:linespacing="0%"
transform="scale(0.97466201,1.0259967)">LBS
FOB :
000000
FF
EGT
N1
0000
XX
0000
00
0
00
0
XX
%
00
0
XX
XX
10
LINE 1
LINE 2
LINE 3
LINE 4
LINE 5
LINE 6
LINE 7
AUTO BRK
SIGNS
SPLRS
FLAPS
MAX
ON
ARM
T.O
TEST
LDG
@@ -1596,16 +1523,15 @@
sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
id="path4424"
- d="m 13.8216,741.99564 77.932201,0"
+ d="M 13.8216,741.99564 H 91.753801"
style="fill:none;stroke:#0dc04b;stroke-width:2.4000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
LDG GEAR
SIGNS
CABIN READY
SPLRS
DN
ARM
FULL
3
. . . . . . . . . . . .
+
+ LINE 1
+ LINE 2
+ LINE 3
+ LINE 4
+ LINE 5
+ LINE 6
+ LINE 7
+ LINE 8
+
diff --git a/Models/Instruments/Upper-ECAM/res/iae-eis2.svg b/Models/Instruments/Upper-ECAM/res/iae-eis2.svg
index d4fccf2a..09376700 100644
--- a/Models/Instruments/Upper-ECAM/res/iae-eis2.svg
+++ b/Models/Instruments/Upper-ECAM/res/iae-eis2.svg
@@ -12,7 +12,7 @@
viewBox="0 0 1024 1024"
version="1.1"
id="svg2"
- inkscape:version="0.91 r13725"
+ inkscape:version="0.92.2 (5c3e80d, 2017-08-06)"
sodipodi:docname="iae-eis2.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="false"
- inkscape:zoom="2.1653108"
- inkscape:cx="335.98162"
- inkscape:cy="267.27567"
- inkscape:window-x="1592"
+ inkscape:zoom="0.43942712"
+ inkscape:cx="568.82143"
+ inkscape:cy="433.53356"
+ inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg2"
@@ -64,12 +64,11 @@
inkscape:label="#rect4233" />
LBS
FOB :
000000
FF
EGT
N1
%
0000
XX
0000
00
0
00
0
XX
TOGA
XX
000
XX
1.2
N2
LBS/H
FF
4
00
0
REV
1
1.4
00
0
XX
LINE 1
LINE 2
LINE 3
LINE 4
LINE 5
LINE 6
LINE 7
AUTO BRK
SIGNS
SPLRS
FLAPS
MAX
ON
ARM
T.O
TEST
LDG GEAR
SIGNS
CABIN READY
SPLRS
DN
ARM
FULL
3
. . . . . . . . . . . .
+
+ LINE 1
+ LINE 2
+ LINE 3
+ LINE 4
+ LINE 5
+ LINE 6
+ LINE 7
+ LINE 8
+
diff --git a/Nasal/ECAM-controller.nas b/Nasal/ECAM-controller.nas
new file mode 100644
index 00000000..0b96dcfc
--- /dev/null
+++ b/Nasal/ECAM-controller.nas
@@ -0,0 +1,342 @@
+# A3XX Electronic Centralised Aircraft Monitoring System
+# Jonathan Redpath (legoboyvdlp)
+
+##############################################
+# Copyright (c) Joshua Davidson (it0uchpods) #
+##############################################
+
+# Colors:
+# 1 - Red, 2 - Amber, 3 - Cyan 4 - Green 5 - White
+
+# Priority: 1 - LEVEL 3 2 - LEVEL 2 3 - LEVEL 1 4 - LEVEL 0 5 - MEMO
+# LEVEL 3 has priority over all other warnings
+# LEVEL 2 has priority over 1 and 0
+# LEVEL 1 has priority over 0
+
+# LEVEL 3 Messages Priority:
+# Red visual warning, repetitive chime or sound
+# 1 Stall
+# 2 Over speed
+# 3 Engine dual failure
+# 4 Engine fire
+# 5 APU fire
+# 6 Takeoff configuration
+# 7 Sidestick fault
+# 8 Excessive cabin altitude
+# 9 Engine oil lo pressure
+# 10 L + R Elevator fault
+# 11 Landing gear
+# 12 Autopilot disconnection
+# 13 Auto land
+# 14 Smoke
+# 15 Emergency configuration
+# 16 Dual hydraulic failure
+
+# LEVEL 2 Messages:
+# Amber warning, single chime
+
+# LEVEL 1 Messages:
+# Amber warning, no chime
+
+# LEVEL 0 Messages:
+# No visual warning or chime: ECAM blue, green, or white message
+
+# TYPES: Independent, Primary and Secondary, Status, and MEMO
+
+# Operation: FWC receives electrical boolean or numeric signals, from the systems, and outputs a message, audible warning, or visual alert
+
+# Electrical Connection: FWC1 is controlled by AC ESS, FWC2 by AC BUS 2
+
+# Sounds: reduce volume by 6DB is engines are off
+
+# ARINC 429: 100kb/s (high speed)
+
+# PHASE: /FMGC/status/phase
+
+# DISPLAY: 1 - EWD 2 - MEMO 3 - STATUS
+
+# commented lines of logic are waiting for proper FMGC warning phases
+var num_lines = 6;
+var msg = nil;
+var spacer = nil;
+var line = nil;
+var right_line = nil;
+var wow = getprop("/gear/gear[1]/wow");
+setprop("/ECAM/warnings/master-warning-light", 0);
+setprop("/ECAM/warnings/master-caution-light", 0);
+
+var warning = {
+ msg: "",
+ active: 0,
+ colour: "",
+ aural: "",
+ light: "",
+ noRepeat: 0,
+ new: func(msg,active,colour,aural,light,noRepeat) {
+
+ var t = {parents:[warning]};
+
+ t.msg = msg;
+ t.active = active;
+ t.colour = colour;
+ t.aural = aural;
+ t.light = light;
+ t.noRepeat = noRepeat;
+
+ return t
+
+ },
+ write: func() {
+ var line = 1;
+ while (getprop("/ECAM/msg/line" ~ line) != "") {
+ line = line + 1; # go to next line until empty line
+ }
+
+ # if (getprop("/ECAM/msg/line" ~ line) != me.msg)
+ if (getprop("/ECAM/msg/line" ~ line) == "" and me.active == 1 and me.msg != "") { # at empty line. Also checks if message is not blank to allow for some warnings with no displayed msg, eg stall
+ setprop("/ECAM/msg/line" ~ line, me.msg);
+ setprop("/ECAM/msg/linec" ~ line, me.colour);
+ }
+ },
+ warnlight: func() {
+ if (me.light != "none" and me.noRepeat == 0 and me.active == 1) { # only toggle light once per message, allows canceling
+ setprop("/ECAM/warnings/master-"~me.light~"-light", 1);
+ me.noRepeat = 1;
+ }
+ },
+ sound: func() {
+ if (me.active and me.aural != "none" and getprop("/sim/sound/warnings/"~me.aural) != 1) {
+ setprop("/sim/sound/warnings/"~me.aural, 1);
+ } else if (!me.active or me.aural == "none") {
+ if (getprop("/sim/sound/warnings/"~me.aural) == 1) {
+ setprop("/sim/sound/warnings/"~me.aural, 0);
+ }
+ }
+ },
+};
+
+var memo = {
+ msg: "",
+ active: 0,
+ colour: "",
+ new: func(msg,active,colour) {
+
+ var t = {parents:[memo]};
+
+ t.msg = msg;
+ t.active = active;
+ t.colour = colour;
+
+ return t
+
+ },
+ write: func() {
+ var right_line = 1;
+ while (getprop("/ECAM/rightmsg/line" ~ right_line) != "") {
+ right_line = right_line + 1; # go to next line until empty line
+ }
+
+ if (getprop("/ECAM/rightmsg/line" ~ right_line) == "" and me.active == 1) { # at empty line
+ setprop("/ECAM/rightmsg/line" ~ right_line, me.msg);
+ setprop("/ECAM/rightmsg/linec" ~ right_line, me.colour);
+ }
+ },
+};
+# messages logic and added to arrays
+
+var warnings = std.Vector.new([
+var lg_not_dn = warning.new(msg: "L/G GEAR NOT DOWN", active: 0, colour: "r", aural: "crc", light: "warning", noRepeat: 0),
+var park_brk_on = warning.new(msg: "PARK BRK ON", active: 0, colour: "a", aural: "chime", light: "caution", noRepeat: 0)
+]);
+
+var memos = std.Vector.new([
+var to_inhibit = memo.new(msg: "T.O. INHIBIT", active: 0, colour: "m"),
+var ldg_inhibit = memo.new(msg: "LDG INHIBIT", active: 0, colour: "m"),
+var spd_brk = memo.new(msg: "SPEED BRK", active: 0, colour: "g"),
+var fob_3T = memo.new(msg: "FOB BELOW 3T", active: 0, colour: "g"),
+var emer_gen = memo.new(msg: "EMER GEN", active: 0, colour: "g"),
+var rat = memo.new(msg: "RAT OUT", active: 0, colour: "g"),
+var gnd_splrs = memo.new(msg: "GND SPLRS ARMED", active: 0, colour: "g"),
+var park_brk = memo.new(msg: "PARK BRK", active: 0, colour: "g"),
+var refuelg = memo.new(msg: "REFUELG", active: 0, colour: "g"),
+var ram_air = memo.new(msg: "RAM AIR ON", active: 0, colour: "g"),
+var ptu = memo.new(msg: "HYD PTU", active: 0, colour: "g"),
+var eng_aice = memo.new(msg: "ENG A.ICE", active: 0, colour: "g"),
+var wing_aice = memo.new(msg: "WING A.ICE", active: 0, colour: "g"),
+var fuelx = memo.new(msg: "FUEL X FEED", active: 0, colour: "g")
+]);
+
+
+var messages_priority_3 = func {
+ if (getprop("/controls/flight/flap-pos") > 2 and getprop("/position/gear-agl-ft") < 750 and getprop("/gear/gear[1]/position-norm") != 1 and getprop("/FMGC/status/phase") == 5) {
+ # if ((getprop("/controls/flight/flap-pos") > 2 and getprop("/position/gear-agl-ft") < 750 and getprop("/gear/gear[1]/position-norm") != 1 and (getprop("/FMGC/status/phase") != 3 and getprop("/FMGC/status/phase") != 4 and getprop("/FMGC/status/phase") != 5)) or ((getprop("/engines/engine[0]/n1-actual") < 75.0 and getprop("/engines/engine[1]/n1-actual") < 75.0) and getprop("/position/gear-agl-ft") < 750 and getprop("/gear/gear[1]/position-norm") != 1 and (getprop("/FMGC/status/phase") != 3 and getprop("/FMGC/status/phase") != 4 and getprop("/FMGC/status/phase") != 5 and getprop("/FMGC/status/phase") != 6)) or (((getprop("/engines/engine[0]/n1-actual") < 77.0 and getprop("/controls/engines/engine[1]/cutoff-switch") == 0) or (getprop("/engines/engine[1]/n1-actual") < 77.0 and getprop("/controls/engines/engine[0]/cutoff-switch") == 0) and getprop("/position/gear-agl-ft") < 750 and getprop("/gear/gear[1]/position-norm") != 1 and (getprop("/FMGC/status/phase") != 3 and getprop("/FMGC/status/phase") != 4 and getprop("/FMGC/status/phase") != 5 and getprop("/FMGC/status/phase") != 6))) {
+ lg_not_dn.active = 1;
+ } else {
+ lg_not_dn.active = 0;
+ lg_not_dn.noRepeat = 0;
+ }
+}
+var messages_priority_2 = func {
+ # if (getprop("/controls/gear/brake-parking") and (getprop("/FMGC/status/phase") >= 6 and getprop("/FMGC/status/phase") <= 7)) {
+ if (getprop("/controls/gear/brake-parking") and (getprop("/FMGC/status/phase") >= 2 and getprop("/FMGC/status/phase") <= 5)) {
+ park_brk_on.active = 1;
+ } else {
+ park_brk_on.active = 0;
+ park_brk_on.noRepeat = 0;
+ }
+}
+var messages_priority_1 = func {}
+var messages_priority_0 = func {}
+var messages_memo = func {}
+var messages_right_memo = func {
+ if (getprop("/FMGC/status/phase") >= 3 and getprop("/FMGC/status/phase") <= 5) {
+ to_inhibit.active = 1;
+ } else {
+ to_inhibit.active = 0;
+ }
+
+ if (getprop("/FMGC/status/phase") >= 7 and getprop("/FMGC/status/phase") <= 7) {
+ ldg_inhibit.active = 1;
+ } else {
+ ldg_inhibit.active = 0;
+ }
+
+ if (getprop("controls/flight/speedbrake-arm") == 1) {
+ gnd_splrs.active = 1;
+ } else {
+ gnd_splrs.active = 0;
+ }
+
+ #if (getprop("/controls/gear/brake-parking") == 1 and getprop("/FMGC/status/phase") != 3) {
+ if (getprop("/controls/gear/brake-parking") == 1) {
+ park_brk.active = 1;
+ } else {
+ park_brk.active = 0;
+ }
+ if (getprop("/FMGC/status/phase") >= 4 and getprop("/FMGC/status/phase") <= 8) {
+ park_brk.colour = "a";
+ } else {
+ park_brk.colour = "g";
+ }
+
+ if (getprop("/controls/pneumatic/switches/ram-air") == 1) {
+ ram_air.active = 1;
+ } else {
+ ram_air.active = 0;
+ }
+
+ if (getprop("/controls/electrical/switches/emer-gen") == 1 and getprop("/controls/hydraulic/rat-deployed") == 1 and !wow) {
+ emer_gen.active = 1;
+ } else {
+ emer_gen.active = 0;
+ }
+
+ if ((getprop("/FMGC/status/phase") >= 2 and getprop("/FMGC/status/phase") <= 7) and getprop("controls/flight/speedbrake") != 0) {
+ spd_brk.active = 1;
+ } else {
+ spd_brk.active = 0;
+ }
+
+ if (getprop("/systems/thrust/state1") == "IDLE" and getprop("/systems/thrust/state2") == "IDLE" and getprop("/FMGC/status/phase") >= 6 and getprop("/FMGC/status/phase") <= 7) {
+ spd_brk.colour = "g";
+ } else if ((getprop("/FMGC/status/phase") >= 2 and getprop("/FMGC/status/phase") <= 5) or ((getprop("/systems/thrust/state1") != "IDLE" or getprop("/systems/thrust/state2") != "IDLE") and (getprop("/FMGC/status/phase") >= 6 and getprop("/FMGC/status/phase") <= 7))) {
+ spd_brk.colour = "a";
+ }
+
+ if (getprop("services/fuel-truck/enable") == 1 and getprop("/ECAM/left-msg") != "TO-MEMO" and getprop("/ECAM/left-msg") != "LDG-MEMO") {
+ refuelg.active = 1;
+ } else {
+ refuelg.active = 0;
+ }
+
+ if (getprop("/consumables/fuel/total-fuel-lbs") < 6000 and getprop("/ECAM/left-msg") != "TO-MEMO" and getprop("/ECAM/left-msg") != "LDG-MEMO") { # assuming US short ton 2000lb
+ fob_3T.active = 1;
+ } else {
+ fob_3T.active = 0;
+ }
+
+ if (getprop("/systems/fuel/x-feed") == 1 and getprop("controls/fuel/x-feed") == 1) {
+ fuelx.active = 1;
+ } else {
+ fuelx.active = 0;
+ }
+
+ if (getprop("/FMGC/status/phase") >= 3 and getprop("/FMGC/status/phase") <= 5) {
+ fuelx.colour = "a";
+ } else {
+ fuelx.colour = "g";
+ }
+
+ if (getprop("/controls/hydraulic/ptu") == 1 and ((getprop("/systems/hydraulic/yellow-psi") < 1450 and getprop("/systems/hydraulic/green-psi") > 1450 and getprop("/controls/hydraulic/elec-pump-yellow") == 0) or (getprop("/systems/hydraulic/yellow-psi") > 1450 and getprop("/systems/hydraulic/green-psi") < 1450))) {
+ ptu.active = 1;
+ } else {
+ ptu.active = 0;
+ }
+
+ if (getprop("/controls/hydraulic/rat-deployed") == 1) {
+ rat.active = 1;
+ } else {
+ rat.active = 0;
+ }
+
+ if (getprop("/FMGC/status/phase") >= 1 and getprop("/FMGC/status/phase") <= 2) {
+ rat.colour = "a";
+ } else {
+ rat.colour = "g";
+ }
+
+ if (getprop("/controls/switches/leng") == 1 or getprop("/controls/switches/reng") == 1 or getprop("/systems/electrical/bus/dc1") == 0 or getprop("/systems/electrical/bus/dc2") == 0) {
+ eng_aice.active = 1;
+ } else {
+ eng_aice.active = 0;
+ }
+
+ if (getprop("/controls/switches/wing") == 1) {
+ eng_aice.active = 1;
+ } else {
+ eng_aice.active = 0;
+ }
+}
+
+# Finally the controller
+
+var ECAM_controller = {
+ loop: func() {
+
+ # check active messages
+ # config_warnings();
+ messages_priority_3();
+ messages_priority_2();
+ messages_priority_1();
+ messages_priority_0();
+ messages_memo();
+ messages_right_memo();
+
+ # clear display momentarily
+
+
+ if (warnings.size() > 0) {
+ for(var n=1; n<8; n+=1) {
+ setprop("/ECAM/msg/line" ~ n, "");
+ }
+ }
+
+ if (memos.size() > 0) {
+ for(var n=1; n<8; n+=1) {
+ setprop("/ECAM/rightmsg/line" ~ n, "");
+ }
+ }
+
+ # write to ECAM
+
+ foreach (var i; warnings.vector) {
+ i.write();
+ i.warnlight();
+ i.sound();
+ }
+
+ foreach (var m; memos.vector) {
+ m.write();
+ }
+ },
+};
diff --git a/Nasal/ECAM.nas b/Nasal/ECAM.nas
index 2accbd0e..5129a218 100644
--- a/Nasal/ECAM.nas
+++ b/Nasal/ECAM.nas
@@ -37,14 +37,30 @@ var ECAM = {
setprop("/ECAM/msg/line6", "");
setprop("/ECAM/msg/line7", "");
setprop("/ECAM/msg/line8", "");
- setprop("/ECAM/msg/line1c", "w");
- setprop("/ECAM/msg/line2c", "w");
- setprop("/ECAM/msg/line3c", "w");
- setprop("/ECAM/msg/line4c", "w");
- setprop("/ECAM/msg/line5c", "w");
- setprop("/ECAM/msg/line6c", "w");
- setprop("/ECAM/msg/line7c", "w");
- setprop("/ECAM/msg/line8c", "w");
+ setprop("/ECAM/msg/linec1", "w");
+ setprop("/ECAM/msg/linec2", "w");
+ setprop("/ECAM/msg/linec3", "w");
+ setprop("/ECAM/msg/linec4", "w");
+ setprop("/ECAM/msg/linec5", "w");
+ setprop("/ECAM/msg/linec6", "w");
+ setprop("/ECAM/msg/linec7", "w");
+ setprop("/ECAM/msg/linec8", "w");
+ setprop("/ECAM/rightmsg/line1", "");
+ setprop("/ECAM/rightmsg/line2", "");
+ setprop("/ECAM/rightmsg/line3", "");
+ setprop("/ECAM/rightmsg/line4", "");
+ setprop("/ECAM/rightmsg/line5", "");
+ setprop("/ECAM/rightmsg/line6", "");
+ setprop("/ECAM/rightmsg/line7", "");
+ setprop("/ECAM/rightmsg/line8", "");
+ setprop("/ECAM/rightmsg/linec1", "w");
+ setprop("/ECAM/rightmsg/linec2", "w");
+ setprop("/ECAM/rightmsg/linec3", "w");
+ setprop("/ECAM/rightmsg/linec4", "w");
+ setprop("/ECAM/rightmsg/linec5", "w");
+ setprop("/ECAM/rightmsg/linec6", "w");
+ setprop("/ECAM/rightmsg/linec7", "w");
+ setprop("/ECAM/rightmsg/linec8", "w");
},
loop: func() {
stateL = getprop("/engines/engine[0]/state");
@@ -80,7 +96,9 @@ var ECAM = {
setprop("/ECAM/ldg-memo-enable", 0);
}
- if (getprop("/FMGC/status/phase") == 0 and stateL == 3 and stateR == 3 and getprop("/ECAM/engine-start-time") + 120 < getprop("/sim/time/elapsed-sec") and getprop("/ECAM/to-memo-enable") == 1 and wow == 1) {
+ if (ecam.warnings.size() > 0) {
+ setprop("/ECAM/left-msg", "MSG");
+ } else if (getprop("/FMGC/status/phase") == 0 and stateL == 3 and stateR == 3 and getprop("/ECAM/engine-start-time") + 120 < getprop("/sim/time/elapsed-sec") and getprop("/ECAM/to-memo-enable") == 1 and wow == 1) {
setprop("/ECAM/left-msg", "TO-MEMO");
} else if (getprop("/ECAM/ldg-memo-enable") == 1) {
setprop("/ECAM/left-msg", "LDG-MEMO");
@@ -88,6 +106,12 @@ var ECAM = {
setprop("/ECAM/left-msg", "NONE");
}
+ if (ecam.memos.size() > 0) {
+ setprop("/ECAM/right-msg", "MSG");
+ } else {
+ setprop("/ECAM/right-msg", "NONE");
+ }
+
if (getprop("/controls/autobrake/mode") == 3 and getprop("/controls/switches/no-smoking-sign") == 1 and getprop("/controls/switches/seatbelt-sign") == 1 and getprop("/controls/flight/speedbrake-arm") == 1 and getprop("/controls/flight/flap-pos") > 0
and getprop("/controls/flight/flap-pos") < 5) {
# Do nothing
diff --git a/Nasal/icing.nas b/Nasal/icing.nas
index 8243708d..17af577d 100644
--- a/Nasal/icing.nas
+++ b/Nasal/icing.nas
@@ -236,6 +236,15 @@ var icingModel = func {
setprop("/systems/pitot/failed", 0);
}
}
+
+ if (getprop("/systems/electrical/bus/dc1") == 0 or getprop("/systems/electrical/bus/dc2") == 0) {
+ setprop("/controls/switches/leng", 1);
+ setprop("/controls/switches/reng", 1);
+ }
+
+ if (getprop("/systems/electrical/bus/dc-ess-shed") == 0) {
+ setprop("/controls/switches/wing", 0);
+ }
}
#################
diff --git a/Nasal/libraries.nas b/Nasal/libraries.nas
index c04dcb0f..7fce8a01 100644
--- a/Nasal/libraries.nas
+++ b/Nasal/libraries.nas
@@ -206,6 +206,7 @@ var systemsLoop = maketimer(0.1, func {
systems.FUEL.loop();
systems.ADIRS.loop();
libraries.ECAM.loop();
+ ecam.ECAM_controller.loop();
fadec.fadecLoop();
if ((getprop("/controls/pneumatic/switches/groundair") or getprop("/controls/switches/cart")) and ((getprop("/velocities/groundspeed-kt") > 2) or getprop("/controls/gear/brake-parking") == 0)) {
@@ -583,4 +584,4 @@ if (getprop("/controls/flight/auto-coordination") == 1) {
setprop("/controls/flight/aileron-drives-tiller", 0);
}
-setprop("/systems/acconfig/libraries-loaded", 1);
+setprop("/systems/acconfig/libraries-loaded", 1);
\ No newline at end of file
diff --git a/Sounds/A320-common-sound.xml b/Sounds/A320-common-sound.xml
index 33ef403a..64aca775 100644
--- a/Sounds/A320-common-sound.xml
+++ b/Sounds/A320-common-sound.xml
@@ -1468,6 +1468,57 @@
0.60
+
+
+ Chime
+ Aircraft/IDG-A32X/Sounds/Cockpit/chime.wav
+ once
+ avionics
+
+ /sim/sound/warnings/chime
+
+
+ sim/sound/effects/volume
+
+ 10
+ 100
+
+
+
+ CRC
+ Aircraft/IDG-A32X/Sounds/Cockpit/crc.wav
+ looped
+ avionics
+
+ /ECAM/warnings/master-warning-light
+ /sim/sound/warnings/crc
+
+
+ sim/sound/effects/volume
+
+ 10
+ 100
+
+
+
+ stall-voice
+ looped
+ /Aircraft/IDG-A32X/Sounds/Cockpit/stall_voice.wav
+ avionics
+
+ warnings/stall/active
+
+
+ sim/sound/effects/volume
+ 3
+
+ 1
+ 6
+
+
+ 10
+ 100.0
+
\ No newline at end of file
diff --git a/Sounds/Cockpit/chime.wav b/Sounds/Cockpit/chime.wav
new file mode 100644
index 00000000..4a575fce
Binary files /dev/null and b/Sounds/Cockpit/chime.wav differ
diff --git a/Sounds/Cockpit/crc.wav b/Sounds/Cockpit/crc.wav
new file mode 100644
index 00000000..72888c8e
Binary files /dev/null and b/Sounds/Cockpit/crc.wav differ
diff --git a/Sounds/Cockpit/stall_voice.wav b/Sounds/Cockpit/stall_voice.wav
new file mode 100644
index 00000000..ff066513
Binary files /dev/null and b/Sounds/Cockpit/stall_voice.wav differ