Merge branch 'ECAM-sys-develop' into dev

This commit is contained in:
Joshua Davidson 2018-09-05 21:08:25 -04:00
commit c0b991efd1
13 changed files with 1126 additions and 453 deletions

View file

@ -1548,6 +1548,9 @@
<canvas_mcdu>
<file>Aircraft/IDG-A32X/Models/Instruments/MCDU/MCDU.nas</file>
</canvas_mcdu>
<ecam>
<file>Aircraft/IDG-A32X/Nasal/ECAM-controller.nas</file>
</ecam>
<icing>
<file>Aircraft/IDG-A32X/Nasal/icing.nas</file>
</icing>

View file

@ -391,8 +391,6 @@
<object-name>ecam_wheel_led</object-name>
<object-name>exped_led</object-name>
<object-name>hdg-text-test</object-name>
<object-name>master_caution_on</object-name>
<object-name>master_warning_on</object-name>
<object-name>qnh-test</object-name>
<object-name>rudder-trim-test</object-name>
<object-name>spd-text-test</object-name>
@ -4724,6 +4722,81 @@
<factor-prop>controls/lighting/fcu-panel-norm</factor-prop>
</emission>
</animation>
<!-- Master Warning and Caution -->
<animation>
<type>select</type>
<object-name>master_warning_on</object-name>
<condition>
<or>
<equals>
<property>controls/switches/annun-test</property>
<value>1</value>
</equals>
<equals>
<property>ECAM/warnings/master-warning-light</property>
<value>1</value>
</equals>
</or>
</condition>
</animation>
<animation>
<type>select</type>
<object-name>master_caution_on</object-name>
<condition>
<or>
<equals>
<property>controls/switches/annun-test</property>
<value>1</value>
</equals>
<equals>
<property>ECAM/warnings/master-caution-light</property>
<value>1</value>
</equals>
</or>
</condition>
</animation>
<animation>
<type>pick</type>
<object-name>master_warning</object-name>
<object-name>master_warning_on</object-name>
<action>
<button>0</button>
<binding>
<condition>
<greater-than-equals>
<property>systems/electrical/bus/dc-ess</property>
<value>25</value>
</greater-than-equals>
</condition>
<command>property-assign</command>
<property>ECAM/warnings/master-warning-light</property>
<value>0</value>
</binding>
</action>
</animation>
<animation>
<type>pick</type>
<object-name>master_caution</object-name>
<object-name>master_caution_on</object-name>
<action>
<button>0</button>
<binding>
<condition>
<greater-than-equals>
<property>systems/electrical/bus/dc-ess</property>
<value>25</value>
</greater-than-equals>
</condition>
<command>property-assign</command>
<property>ECAM/warnings/master-caution-light</property>
<value>0</value>
</binding>
</action>
</animation>
<!-- Overhead Panel-2 lighting -->
<animation>

View file

@ -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() {

File diff suppressed because it is too large Load diff

Before

Width:  |  Height:  |  Size: 110 KiB

After

Width:  |  Height:  |  Size: 112 KiB

File diff suppressed because it is too large Load diff

Before

Width:  |  Height:  |  Size: 133 KiB

After

Width:  |  Height:  |  Size: 135 KiB

342
Nasal/ECAM-controller.nas Normal file
View file

@ -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();
}
},
};

View file

@ -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

View file

@ -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);
}
}
#################

View file

@ -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);

View file

@ -1468,6 +1468,57 @@
<factor>0.60</factor>
</volume>
</announcements>
<chime>
<name>Chime</name>
<path>Aircraft/IDG-A32X/Sounds/Cockpit/chime.wav</path>
<mode>once</mode>
<type>avionics</type>
<condition>
<property>/sim/sound/warnings/chime</property>
</condition>
<volume>
<property>sim/sound/effects/volume</property>
</volume>
<reference-dist>10</reference-dist>
<max-dist>100</max-dist>
</chime>
<crc>
<name>CRC</name>
<path>Aircraft/IDG-A32X/Sounds/Cockpit/crc.wav</path>
<mode>looped</mode>
<type>avionics</type>
<condition>
<property>/ECAM/warnings/master-warning-light</property>
<property>/sim/sound/warnings/crc</property>
</condition>
<volume>
<property>sim/sound/effects/volume</property>
</volume>
<reference-dist>10</reference-dist>
<max-dist>100</max-dist>
</crc>
<stall-voice>
<name>stall-voice</name>
<mode>looped</mode>
<path>/Aircraft/IDG-A32X/Sounds/Cockpit/stall_voice.wav</path>
<type>avionics</type>
<condition>
<property>warnings/stall/active</property>
</condition>
<volume>
<property>sim/sound/effects/volume</property>
<factor>3</factor>
<!--offset>1</offset-->
<min>1</min>
<max>6</max>
</volume>
<reference-dist>10</reference-dist>
<max-dist>100.0</max-dist>
</stall-voice>
</fx>
</PropertyList>

BIN
Sounds/Cockpit/chime.wav Normal file

Binary file not shown.

BIN
Sounds/Cockpit/crc.wav Normal file

Binary file not shown.

Binary file not shown.