1
0
Fork 0

Merge branch 'dev' into 3D

This commit is contained in:
Jonathan Redpath 2022-01-02 18:26:09 +00:00
commit dea151a6eb
16 changed files with 177 additions and 219 deletions

View file

@ -401,9 +401,9 @@ var beforestart_b = func {
setprop("/controls/adirs/mcducbtn", 1);
setprop("/controls/switches/beacon", 1);
setprop("/controls/lighting/nav-lights-switch", 1);
libraries.noSmokingSwitch.setValue(0.5);
libraries.seatbeltSwitch.setValue(1.0);
libraries.emerLtsSwitch.setValue(0.5);
pts.Controls.Switches.noSmokingSwitch.setValue(0.5);
pts.Controls.Switches.seatbeltSwitch.setValue(1.0);
pts.Controls.Switches.emerLtsSwitch.setValue(0.5);
setprop("/controls/radio/rmp[0]/on", 1);
setprop("/controls/radio/rmp[1]/on", 1);
setprop("/controls/radio/rmp[2]/on", 1);
@ -499,9 +499,9 @@ var taxi_b = func {
setprop("/controls/switches/beacon", 1);
setprop("/controls/switches/wing-lights", 1);
setprop("/controls/lighting/nav-lights-switch", 1);
libraries.noSmokingSwitch.setValue(0.5);
libraries.seatbeltSwitch.setValue(1.0);
libraries.emerLtsSwitch.setValue(0.5);
pts.Controls.Switches.noSmokingSwitch.setValue(0.5);
pts.Controls.Switches.seatbeltSwitch.setValue(1.0);
pts.Controls.Switches.emerLtsSwitch.setValue(0.5);
setprop("/controls/radio/rmp[0]/on", 1);
setprop("/controls/radio/rmp[1]/on", 1);
setprop("/controls/radio/rmp[2]/on", 1);

View file

@ -1224,6 +1224,7 @@
<!-- Remove from this animation once you simulate -->
<animation>
<type>select</type>
<object-name>atc-test</object-name>
<object-name>audio_att_sgn</object-name>
<object-name>audio_call_hf2_led</object-name>
<object-name>audio_call_hf1_led</object-name>
@ -1233,13 +1234,10 @@
<object-name>audio_mech_sgn</object-name>
<object-name>ecam_c_b_led</object-name>
<object-name>ecam_el_dc_led</object-name>
<object-name>ecam_sts_led</object-name>
<object-name>engine_fault_1</object-name>
<object-name>engine_fault_2</object-name>
<object-name>exped_led</object-name>
<object-name>qnh-test</object-name>
<object-name>radio_opt_led</object-name>
<object-name>ver.fmgc</object-name>
<condition>
<property>controls/switches/annun-test</property>
</condition>
@ -1250,7 +1248,9 @@
<object-name>alt-text-test</object-name>
<object-name>hdg-text-test</object-name>
<object-name>spd-text-test</object-name>
<object-name>qnh-test</object-name>
<object-name>vs-text-test</object-name>
<object-name>ver.fmgc</object-name>
<condition>
<or>
<not><property>FMGC/FCU-working</property></not>

View file

@ -25,7 +25,7 @@ var new = func(layer) {
map: layer.map,
listeners: [],
};
layer.searcher._equals = func(l,r) 0; # TODO: create model objects instead?
layer.searcher._equals = func(l,r) return (l == r);
append(m.listeners, setlistener(layer.options.active_node, func m.layer.update() ), setlistener(layer.options.wp_num, func m.layer.update() ));
m.addVisibilityListener();
var driver = opt_member(m.layer.options, 'route_driver');

View file

@ -21,7 +21,6 @@
<object-name>CargoHotAirBtn1F</object-name>
<object-name>CargoHotAirBtn2O</object-name>
<object-name>CrewOxyBtn2O</object-name>
<object-name>ExtPwrBtn1A</object-name>
<object-name>GalleyPwrBtn1F</object-name>
<object-name>GalleyPwrBtn2O</object-name>
<object-name>Gen1LineBtn1S</object-name>
@ -110,6 +109,44 @@
</condition>
</animation>
<!-- Special for EXT pwr AVAIL light -->
<animation>
<type>select</type>
<object-name>ExtPwrBtn1A</object-name>
<condition>
<or>
<and>
<or>
<greater-than-equals>
<property>systems/electrical/bus/ac-si-bus</property>
<value>110</value>
</greater-than-equals>
<greater-than-equals>
<property>systems/electrical/bus/ac-ess-shed</property>
<value>110</value>
</greater-than-equals>
</or>
<greater-than-equals>
<property>systems/electrical/bus/ac-ess</property>
<value>110</value>
</greater-than-equals>
</and>
<and>
<greater-than>
<property>/systems/electrical/sources/ext/output-volt</property>
<value>110</value>
</greater-than>
<not>
<greater-than-equals>
<property>systems/electrical/bus/ac-ess</property>
<value>110</value>
</greater-than-equals>
</not>
</and>
</or>
</condition>
</animation>
<!-- 36LP AC 2 202XP 5VAC transformer -->
<animation>
<type>select</type>

View file

@ -3314,7 +3314,7 @@ var messages_config_memo = func {
toMemoLine1.colour = "c";
}
if (libraries.seatbeltSwitch.getValue() and libraries.noSmokingSwitch.getValue() ) {
if (pts.Controls.Switches.seatbeltSwitch.getValue() and pts.Controls.Switches.noSmokingSwitch.getValue()) {
toMemoLine2.msg = " SIGNS ON";
toMemoLine2.colour = "g";
} else {
@ -3380,7 +3380,7 @@ var messages_config_memo = func {
ldgMemoLine1.colour = "c";
}
if (libraries.seatbeltSwitch.getValue() and libraries.noSmokingSwitch.getValue()) {
if (pts.Controls.Switches.seatbeltSwitch.getValue() and pts.Controls.Switches.noSmokingSwitch.getValue()) {
ldgMemoLine2.msg = " SIGNS ON";
ldgMemoLine2.colour = "g";
} else {
@ -3505,19 +3505,19 @@ var messages_memo = func {
gnd_splrs.active = 0;
}
if (libraries.seatbeltLight.getValue() == 1 and toMemoLine1.active != 1 and ldgMemoLine1.active != 1) {
if (pts.Controls.Lighting.seatbeltSign.getValue() and toMemoLine1.active != 1 and ldgMemoLine1.active != 1) {
seatbelts.active = 1;
} else {
seatbelts.active = 0;
}
if (libraries.noSmokingLight.getValue() == 1 and toMemoLine1.active != 1 and ldgMemoLine1.active != 1) { # should go off after takeoff assuming switch is in auto due to old logic from the days when smoking was allowed!
if (pts.Controls.Lighting.noSmokingSign.getValue() and toMemoLine1.active != 1 and ldgMemoLine1.active != 1) { # should go off after takeoff assuming switch is in auto due to old logic from the days when smoking was allowed!
nosmoke.active = 1;
} else {
nosmoke.active = 0;
}
if (getprop("/controls/lighting/strobe") == 0 and !pts.Gear.wow[1].getValue() and toMemoLine1.active != 1 and ldgMemoLine1.active != 1) { # todo: use gear branch properties
if (!pts.Controls.Lighting.strobe.getValue() and !pts.Gear.wow[1].getValue() and toMemoLine1.active != 1 and ldgMemoLine1.active != 1) { # todo: use gear branch properties
strobe_lt_off.active = 1;
} else {
strobe_lt_off.active = 0;
@ -3542,7 +3542,7 @@ var messages_memo = func {
fob_66L.active = 0;
}
if (getprop("instrumentation/mk-viii/inputs/discretes/momentary-flap-all-override") == 1 and toMemoLine1.active != 1 and ldgMemoLine1.active != 1) {
if (pts.Instrumentation.MKVII.Inputs.Discretes.flapAllOverride.getValue() and toMemoLine1.active != 1 and ldgMemoLine1.active != 1) {
gpws_flap_mode_off.active = 1;
} else {
gpws_flap_mode_off.active = 0;
@ -3737,7 +3737,7 @@ var messages_right_memo = func {
brk_fan.active = 0;
}
if (pts.Instrumentation.MKVII.Inputs.Discretes.flap3Override.getValue() == 1) { # todo: emer elec
if (pts.Instrumentation.MKVII.Inputs.Discretes.flap3Override.getValue()) { # todo: emer elec
gpws_flap3.active = 1;
} else {
gpws_flap3.active = 0;

View file

@ -22,7 +22,7 @@ var variousReset = func() {
setprop("/instrumentation/mk-viii/inputs/discretes/momentary-flap-3-override", 0);
setprop("/controls/switches/cabinCall", 0);
setprop("/controls/switches/mechCall", 0);
libraries.emerLtsSwitch.setValue(0.5);
pts.Controls.Switches.emerLtsSwitch.setValue(0.5);
pts.Controls.Gear.brakeParking.setBoolValue(0);
# cockpit voice recorder stuff
setprop("/controls/CVR/power", 0);
@ -60,9 +60,9 @@ var variousReset = func() {
setprop("/modes/fcu/hdg-time", -45);
setprop("/controls/navigation/switching/att-hdg", 0);
setprop("/controls/navigation/switching/air-data", 0);
libraries.noSmokingSwitch.setValue(0.0);
libraries.seatbeltSwitch.setValue(0.0);
libraries.emerLtsSwitch.setValue(0.0);
pts.Controls.Switches.noSmokingSwitch.setValue(0);
pts.Controls.Switches.seatbeltSwitch.setValue(0);
pts.Controls.Switches.emerLtsSwitch.setValue(0);
}
var BUTTONS = {

View file

@ -86,7 +86,7 @@ var triggerDoor = func(door, doorName, doorDesc) {
gui.popupTip("Closing " ~ doorDesc ~ " door");
door.toggle();
} else {
if (getprop("/velocities/groundspeed-kt") > 5) {
if (pts.Velocities.groundspeedKt.getValue() > 5) {
gui.popupTip("You cannot open the doors while the aircraft is moving!");
} else {
gui.popupTip("Opening " ~ doorDesc ~ " door");
@ -148,48 +148,6 @@ setlistener("/sim/signals/fdm-initialized", func() {
emesary.GlobalTransmitter.Register(A320Libraries);
});
var collectorTankL = props.globals.getNode("/fdm/jsbsim/propulsion/tank[5]/contents-lbs");
var collectorTankR = props.globals.getNode("/fdm/jsbsim/propulsion/tank[6]/contents-lbs");
var groundAir = props.globals.getNode("/controls/pneumatics/switches/ground-air");
var groundCart = props.globals.getNode("/controls/electrical/switches/ground-cart");
var chocks = props.globals.getNode("/services/chocks/enable");
var groundspeed = 0;
var stateL = 0;
var stateR = 0;
var seatbeltSwitch = props.globals.getNode("/controls/switches/seatbelt-sign");
var noSmokingSwitch = props.globals.getNode("/controls/switches/no-smoking-sign");
var emerLtsSwitch = props.globals.getNode("/controls/switches/emer-lights");
var seatbeltLight = props.globals.getNode("/controls/lighting/seatbelt-sign");
var noSmokingLight = props.globals.getNode("/controls/lighting/no-smoking-sign");
var update_items = [
props.UpdateManager.FromHashValue("seatbelt", nil, func(val) {
if (val) {
if (!seatbeltLight.getBoolValue()) {
seatbeltLight.setValue(1);
}
} else {
if (seatbeltLight.getBoolValue()) {
seatbeltLight.setValue(0);
}
}
}),
props.UpdateManager.FromHashList(["noSmoking","gearPosNorm"], nil, func(val) {
if (val.noSmoking == 1) {
if (!noSmokingLight.getBoolValue()) {
noSmokingLight.setBoolValue(1);
}
} elsif (val.noSmoking == 0.5 and val.gearPosNorm != 0) { # todo: should be when uplocks not engaged
if (!noSmokingLight.getBoolValue()) {
noSmokingLight.setBoolValue(1);
}
} else {
noSmokingLight.setBoolValue(0); # sign stays on in cabin but sound still occurs
}
}),
];
var systemsLoop = func(notification) {
if (!systemsInitialized and getprop("/systems/acconfig/mismatch-code") != "0x000") { return; }
systems.PNEU.loop(notification);
@ -221,66 +179,55 @@ var systemsLoop = func(notification) {
}
}
if ((notification.engine1State == 2 or notification.engine1State == 3) and collectorTankL.getValue() < 1) {
if (notification.engine1State >= 2 and pts.Fdm.JSBsim.Propulsion.Tank.contentsLbs[5].getValue() < 1) {
systems.cutoff_one();
}
if ((notification.engine2State == 2 or notification.engine2State == 3) and collectorTankR.getValue() < 1) {
systems.cutoff_two();
}
foreach (var update_item; update_items) {
update_item.update(notification);
if (notification.engine2State >= 2 and pts.Fdm.JSBsim.Propulsion.Tank.contentsLbs[6].getValue() < 1) {
systems.cutoff_two();
}
}
# GPWS
var GPWS = {
inhibitNode: props.globals.getNode("/instrumentation/mk-viii/inputs/discretes/gpws-inhibit"),
tatcfInhibit: props.globals.getNode("/instrumentation/mk-viii/inputs/discretes/ta-tcf-inhibit"),
volume: props.globals.getNode("/instrumentation/mk-viii/speaker/volume"),
flapAllOverride: props.globals.getNode("/instrumentation/mk-viii/inputs/discretes/momentary-flap-all-override"),
flap3Override: props.globals.getNode("/instrumentation/mk-viii/inputs/discretes/momentary-flap-3-override"),
flapOverride: props.globals.getNode("/instrumentation/mk-viii/inputs/discretes/momentary-flap-override"),
alertMode: props.globals.initNode("/instrumentation/mk-viii/outputs/alert-mode",0,"INT"),
alertMode: props.globals.initNode("/instrumentation/mk-viii/outputs/alert-mode", 0, "INT"),
alert: props.globals.getNode("instrumentation/mk-viii/outputs/discretes/gpws-alert"),
warning: props.globals.getNode("instrumentation/mk-viii/outputs/discretes/gpws-warning"),
};
setlistener("/instrumentation/mk-viii/inputs/discretes/gpws-inhibit", func() {
if (GPWS.inhibitNode.getBoolValue()) {
GPWS.volume.setValue(2);
} else {
GPWS.volume.setValue(0);
}
}, 0, 0);
var updateGPWSFlap = func() {
if (GPWS.flapAllOverride.getBoolValue() or (GPWS.flap3Override.getBoolValue() and pts.Controls.Flight.flapsPos.getValue() >= 4)) {
GPWS.flapOverride.setBoolValue(1);
} else {
GPWS.flapOverride.setBoolValue(0);
}
}
setlistener("/instrumentation/mk-viii/inputs/discretes/momentary-flap-all-override", func() {
updateGPWSFlap();
}, 0, 0);
setlistener("/instrumentation/mk-viii/inputs/discretes/momentary-flap-3-override", func() {
updateGPWSFlap();
}, 0, 0);
# GPWS alert pooling for get mode change - a little esoteric way but it works
var gpws_alert_watch = maketimer(0.8,func {
var alert = 0;
if (getprop("instrumentation/mk-viii/outputs/discretes/gpws-warning")) alert = 2; # MODE2 - warning - RED
else if (getprop("instrumentation/mk-viii/outputs/discretes/gpws-alert")) alert = 1; # MODE1 - caution - YELLOW
if (GPWS.alertMode.getValue()!=alert) GPWS.alertMode.setValue(alert);
var GPWSAlertStatus = 0;
var gpws_alert_watch = maketimer(0.8, func() {
if (GPWS.warning.getValue()) {
GPWSAlertStatus = 2; # MODE2 - warning - RED
} else if (GPWS.alert.getValue()) {
GPWSAlertStatus = 1; # MODE1 - caution - YELLOW
} else {
GPWSAlertStatus = 0;
}
if (GPWS.alertMode.getValue() != GPWSAlertStatus) {
GPWS.alertMode.setValue(GPWSAlertStatus);
}
});
setlistener("/instrumentation/mk-viii/inputs/discretes/ta-tcf-inhibit", func{ # detect GPWS switch status
var failure = GPWS.tatcfInhibit.getBoolValue();
if (!failure) gpws_alert_watch.start();
else gpws_alert_watch.stop();
},1,0);
# detect GPWS switch status
setlistener("/instrumentation/mk-viii/inputs/discretes/ta-tcf-inhibit", func (val) {
if (!val.getBoolValue()) {
gpws_alert_watch.start();
} else {
gpws_alert_watch.stop();
}
}, 1, 0);
# Steep ILS
setlistener("/options/steep-ils", func(val) {
if (val.getValue()) {
pts.Instrumentation.MKVII.Inputs.Discretes.steepApproach.setValue(1);
} else {
pts.Instrumentation.MKVII.Inputs.Discretes.steepApproach.setValue(0);
}
}, 0, 0);
# Replay
var replayState = props.globals.getNode("/sim/replay/replay-state");
@ -292,15 +239,6 @@ setlistener(replayState, func(v) {
}
}, 0, 0);
# Steep ILS
setlistener("/options/steep-ils", func() {
if (getprop("/options/steep-ils") == 1) {
setprop("/instrumentation/mk-viii/inputs/discretes/steep-approach", 1);
} else {
setprop("/instrumentation/mk-viii/inputs/discretes/steep-approach", 0);
}
}, 0, 0);
# hackCanvas
canvas.Text._lastText = canvas.Text["_lastText"];
canvas.Text.setText = func(text) {
@ -414,8 +352,6 @@ var LibrariesRecipient =
var input = {
# Libraries
"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",
@ -451,8 +387,8 @@ setlistener("/sim/current-view/internal", func() {
# TODO split EFIS altimeters
var newinhg = nil;
setlistener("/instrumentation/altimeter/setting-inhg", func() {
newinhg = getprop("/instrumentation/altimeter/setting-inhg");
setlistener("/instrumentation/altimeter/setting-inhg", func(val) {
newinhg = val.getValue();
setprop("/instrumentation/altimeter[1]/setting-inhg", newinhg);
setprop("/instrumentation/altimeter[2]/setting-inhg", newinhg);
setprop("/instrumentation/altimeter[3]/setting-inhg", newinhg);
@ -461,8 +397,8 @@ setlistener("/instrumentation/altimeter/setting-inhg", func() {
}, 0, 0);
var newhpa = nil;
setlistener("/instrumentation/altimeter/setting-hpa", func() {
newhpa = getprop("/instrumentation/altimeter/setting-hpa");
setlistener("/instrumentation/altimeter/setting-hpa", func(val) {
newhpa = val.getValue();
setprop("/instrumentation/altimeter[1]/setting-hpa", newhpa);
setprop("/instrumentation/altimeter[2]/setting-hpa", newhpa);
setprop("/instrumentation/altimeter[3]/setting-hpa", newhpa);

View file

@ -65,9 +65,15 @@ var Controls = {
},
Lighting: {
landingLights: [props.globals.getNode("/controls/lighting/landing-lights[0]"),props.globals.getNode("/controls/lighting/landing-lights[1]"),props.globals.getNode("/controls/lighting/landing-lights[2]")],
noSmokingSign: props.globals.getNode("/controls/lighting/no-smoking-sign"),
seatbeltSign: props.globals.getNode("/controls/lighting/seatbelt-sign"),
strobe: props.globals.getNode("/controls/lighting/strobe"),
},
Switches: {
annunTest: props.globals.getNode("/controls/switches/annun-test"),
emerLtsSwitch: props.globals.getNode("/controls/switches/emer-lights"),
noSmokingSwitch: props.globals.getNode("/controls/switches/no-smoking-sign"),
seatbeltSwitch: props.globals.getNode("/controls/switches/seatbelt-sign"),
},
};
@ -137,6 +143,10 @@ var Fdm = {
fuelUsed: [props.globals.getNode("/fdm/jsbsim/propulsion/engine[0]/fuel-used-lbs"), props.globals.getNode("/fdm/jsbsim/propulsion/engine[1]/fuel-used-lbs")],
reverserAngle: [props.globals.getNode("/fdm/jsbsim/propulsion/engine[0]/reverser-angle-rad"), props.globals.getNode("/fdm/jsbsim/propulsion/engine[1]/reverser-angle-rad")],
},
Tank: {
contentsLbs: [props.globals.getNode("/fdm/jsbsim/propulsion/tank[0]/contents-lbs"), props.globals.getNode("/fdm/jsbsim/propulsion/tank[1]/contents-lbs"), props.globals.getNode("/fdm/jsbsim/propulsion/tank[2]/contents-lbs"),
props.globals.getNode("/fdm/jsbsim/propulsion/tank[3]/contents-lbs"), props.globals.getNode("/fdm/jsbsim/propulsion/tank[4]/contents-lbs"), props.globals.getNode("/fdm/jsbsim/propulsion/tank[5]/contents-lbs"), props.globals.getNode("/fdm/jsbsim/propulsion/tank[6]/contents-lbs")],
},
},
},
};
@ -227,6 +237,8 @@ var Instrumentation = {
Inputs: {
Discretes: {
flap3Override: props.globals.getNode("/instrumentation/mk-viii/inputs/discretes/momentary-flap-3-override"),
flapAllOverride: props.globals.getNode("/instrumentation/mk-viii/inputs/discretes/momentary-flap-all-override"),
steepApproach: props.globals.getNode("/instrumentation/mk-viii/inputs/discretes/steep-approach"),
},
},
},

View file

@ -19,7 +19,7 @@ var ground_services = {
setprop("/services/deicing_truck/de-ice", 0);
# Set them all to 0 if the aircraft is not stationary
if (getprop("velocities/groundspeed-kt") >= 2) {
if (pts.Velocities.groundspeedKt.getValue() >= 2) {
setprop("/services/fuel-truck/enable", 0);
setprop("/services/deicing_truck/enable", 0);
setprop("/services/catering/enable", 0);

View file

@ -772,7 +772,7 @@
<switch name="/systems/fctl/fac1-healthy-signal">
<default value="0"/>
<test logic="AND" value="1">
/systems/fctl/fac1-healthy ne 0
/systems/fctl/fac1-healthy eq 1
<test logic="OR">
/systems/fctl/fac1-healthy-latch eq 0
/gear/gear[0]/wow eq 1
@ -843,7 +843,7 @@
<switch name="/systems/fctl/fac2-healthy-signal">
<default value="0"/>
<test logic="AND" value="1">
/systems/fctl/fac2-healthy ne 0
/systems/fctl/fac2-healthy eq 1
<test logic="OR">
/systems/fctl/fac2-healthy-latch eq 0
/gear/gear[0]/wow eq 1

View file

@ -187,7 +187,6 @@
</switch>
<actuator name="/systems/fuel/pumps/center-control-low-level">
<description>Timer for the Fuel Center pumps</description>
<input>/systems/fuel/quantity/center-low</input>
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
<rate_limit sense="incr">0.00333</rate_limit> <!-- 300 seconds -->

View file

@ -7,7 +7,6 @@
<channel name="FWC Phase Logic Timers" execrate="8">
<actuator name="/ECAM/timer/ground-calc">
<description>Timer for the ECAM phase system</description>
<input>/ECAM/logic/ground-calc-immediate</input>
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
<rate_limit sense="incr">1</rate_limit> <!-- 1 second -->

View file

@ -14,363 +14,311 @@
</actuator>
<actuator name="/ECAM/phases/timer/eng1idle-output">
<description>Timer for the ECAM system</description>
<input>/ECAM/phases/timer/eng1idle</input>
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
<rate_limit sense="incr">0.033</rate_limit> <!-- 30 seconds -->
</actuator>
<actuator name="/ECAM/phases/timer/eng2idle-output">
<description>Timer for the ECAM system</description>
<input>/ECAM/phases/timer/eng2idle</input>
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
<rate_limit sense="incr">0.033</rate_limit> <!-- 30 seconds -->
</actuator>
<actuator name="/ECAM/phases/timer/to-inhibit-output">
<description>Timer for the ECAM system</description>
<input>/ECAM/phases/timer/to-inhibit</input>
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
<rate_limit sense="incr">0.33</rate_limit> <!-- 3 seconds -->
</actuator>
<actuator name="/ECAM/phases/timer/ldg-inhibit-output">
<description>Timer for the ECAM system</description>
<input>/ECAM/phases/timer/ldg-inhibit</input>
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
<rate_limit sense="incr">0.33</rate_limit> <!-- 3 seconds -->
</actuator>
<actuator name="/ECAM/warnings/timer/bleed-1-fault-output">
<description>Timer for the ECAM system</description>
<input>/ECAM/warnings/timer/bleed-1-fault</input>
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
<rate_limit sense="incr">0.2</rate_limit> <!-- 5 seconds -->
</actuator>
<actuator name="/ECAM/warnings/timer/bleed-2-fault-output">
<description>Timer for the ECAM system</description>
<input>/ECAM/warnings/timer/bleed-2-fault</input>
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
<rate_limit sense="incr">0.2</rate_limit> <!-- 5 seconds -->
</actuator>
<actuator name="/ECAM/warnings/timer/apu-fault-output">
<description>Timer for the ECAM system</description>
<input>/ECAM/warnings/logic/apu-bleed-fault</input>
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
<rate_limit sense="incr">0.1</rate_limit> <!-- 10 seconds -->
</actuator>
<actuator name="/ECAM/warnings/timer/xbleed-fault-output">
<description>Timer for the ECAM system</description>
<input>/systems/pneumatics/warnings/crossbleed-disag</input>
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
<rate_limit sense="incr">0.1</rate_limit> <!-- 10 seconds -->
</actuator>
<actuator name="/ECAM/warnings/timer/xbleed-fault-output-10"> <!-- 10 second delay on fall -->
<description>Timer for the ECAM system</description>
<input>/ECAM/warnings/logic/crossbleed-fault-timer-was-one</input>
<rate_limit sense="decr">0.1</rate_limit> <!-- 10 seconds -->
<rate_limit sense="incr">120</rate_limit> <!-- Instant -->
</actuator>
<actuator name="/ECAM/warnings/timer/xbleed-fault-eng-fire">
<description>Timer for the ECAM system</description>
<input>/controls/engines/engine[0]/fire-btn</input>
<rate_limit>0.06666666666</rate_limit>
</actuator>
<actuator name="/ECAM/warnings/timer/prv-1-not-shut-apu-output">
<description>Timer for the ECAM system</description>
<input>/ECAM/warnings/logic/prv-1-not-shut-apu</input>
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
<rate_limit sense="incr">1</rate_limit> <!-- 1 second -->
</actuator>
<actuator name="/ECAM/warnings/timer/prv-2-not-shut-apu-output">
<description>Timer for the ECAM system</description>
<input>/ECAM/warnings/logic/prv-2-not-shut-apu</input>
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
<rate_limit sense="incr">1</rate_limit> <!-- 1 second -->
</actuator>
<actuator name="/ECAM/warnings/timer/prv-1-not-shut-output">
<description>Timer for the ECAM system</description>
<input>/ECAM/warnings/logic/prv-1-not-shut</input>
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
<rate_limit sense="incr">1</rate_limit> <!-- 1 second -->
</actuator>
<actuator name="/ECAM/warnings/timer/prv-2-not-shut-output">
<description>Timer for the ECAM system</description>
<input>/ECAM/warnings/logic/prv-2-not-shut</input>
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
<rate_limit sense="incr">1</rate_limit> <!-- 1 second -->
</actuator>
<actuator name="/ECAM/warnings/timer/bleed-1-and-2-low-temp-output">
<description>Timer for the ECAM system</description>
<input>/ECAM/warnings/timer/bleed-1-and-2-low-temp</input>
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
<rate_limit sense="incr">0.00185185</rate_limit> <!-- 540 seconds -->
</actuator>
<actuator name="/ECAM/warnings/timer/bleed-1-low-temp-output">
<description>Timer for the ECAM system</description>
<input>/systems/pneumatics/warnings/lowtemp-1-mem</input>
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
<rate_limit sense="incr">0.016666</rate_limit> <!-- 60 seconds -->
</actuator>
<actuator name="/ECAM/warnings/timer/bleed-2-low-temp-output">
<description>Timer for the ECAM system</description>
<input>/systems/pneumatics/warnings/lowtemp-2-mem</input>
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
<rate_limit sense="incr">0.016666</rate_limit> <!-- 60 seconds -->
</actuator>
<actuator name="/ECAM/warnings/logic/bleed-1-off-60-output">
<description>Timer for the ECAM system</description>
<input>/ECAM/warnings/logic/bleed-1-off-60</input>
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
<rate_limit sense="incr">0.016666</rate_limit> <!-- 60 seconds -->
</actuator>
<actuator name="/ECAM/warnings/logic/bleed-2-off-60-output">
<description>Timer for the ECAM system</description>
<input>/ECAM/warnings/logic/bleed-2-off-60</input>
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
<rate_limit sense="incr">0.016666</rate_limit> <!-- 60 seconds -->
</actuator>
<actuator name="/ECAM/warnings/logic/bleed-1-off-5-output">
<description>Timer for the ECAM system</description>
<input>/ECAM/warnings/logic/bleed-1-off-5</input>
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
<rate_limit sense="incr">0.2</rate_limit> <!-- 5 seconds -->
</actuator>
<actuator name="/ECAM/warnings/timer/bleed-2-off-5-output">
<description>Timer for the ECAM system</description>
<input>/ECAM/warnings/logic/bleed-2-off-5</input>
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
<rate_limit sense="incr">0.2</rate_limit> <!-- 5 seconds -->
</actuator>
<actuator name="/ECAM/warnings/timer/eng-aice-1-open-output">
<description>Timer for the ECAM system</description>
<input>/ECAM/warnings/logic/eng-aice-1-open</input>
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
<rate_limit sense="incr">0.2</rate_limit> <!-- 5 seconds -->
</actuator>
<actuator name="/ECAM/warnings/timer/eng-aice-2-open-output">
<description>Timer for the ECAM system</description>
<input>/ECAM/warnings/logic/eng-aice-2-open</input>
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
<rate_limit sense="incr">0.2</rate_limit> <!-- 5 seconds -->
</actuator>
<actuator name="/ECAM/warnings/timer/eng-aice-1-closed-output">
<description>Timer for the ECAM system</description>
<input>/ECAM/warnings/logic/eng-aice-1-closed</input>
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
<rate_limit sense="incr">0.1</rate_limit> <!-- 10 seconds -->
</actuator>
<actuator name="/ECAM/warnings/timer/eng-aice-2-closed-output">
<description>Timer for the ECAM system</description>
<input>/ECAM/warnings/logic/eng-aice-2-closed</input>
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
<rate_limit sense="incr">0.1</rate_limit> <!-- 10 seconds -->
</actuator>
<actuator name="/ECAM/warnings/logic/wing-anti-ice-flipflop-set">
<description>Timer for the ECAM system</description>
<input>/ECAM/warnings/logic/wing-anti-ice-flipflop-set-input</input>
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
<rate_limit sense="incr">0.0285714</rate_limit> <!-- 35 seconds -->
</actuator>
<actuator name="/ECAM/warnings/timer/phase-1">
<description>Timer for the ECAM system</description>
<input>/ECAM/warnings/timer/phase-1-input</input>
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
<rate_limit sense="incr">0.5</rate_limit> <!-- 2 seconds -->
</actuator>
<actuator name="/ECAM/warnings/timer/wing-anti-ice-25">
<description>Timer for the ECAM system</description>
<input>/controls/ice-protection/wing</input>
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
<rate_limit sense="incr">0.04</rate_limit> <!-- 25 seconds -->
</actuator>
<actuator name="/ECAM/warnings/logic/wing-anti-ice-left-closed-set-timer">
<description>Timer for the ECAM system</description>
<input>/ECAM/warnings/logic/wing-anti-ice-left-closed-set-input</input>
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
<rate_limit sense="incr">0.066666</rate_limit> <!-- 15 seconds -->
</actuator>
<actuator name="/ECAM/warnings/logic/wing-anti-ice-right-closed-set-timer">
<description>Timer for the ECAM system</description>
<input>/ECAM/warnings/logic/wing-anti-ice-right-closed-set-input</input>
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
<rate_limit sense="incr">0.066666</rate_limit> <!-- 15 seconds -->
</actuator>
<actuator name="/ECAM/warnings/logic/proc-wai-shutdown-output">
<description>Timer for the ECAM system</description>
<input>/ECAM/warnings/logic/proc-wai-shutdown-flipflop</input>
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
<rate_limit sense="incr">0.1</rate_limit> <!-- 10 seconds -->
</actuator>
<actuator name="/ECAM/warnings/timer/wing-hi-pr-left">
<description>Timer for the ECAM system</description>
<input>/ECAM/warnings/logic/wing-hi-pr-left-input</input>
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
<rate_limit sense="incr">0.025</rate_limit> <!-- 40 seconds -->
</actuator>
<actuator name="/ECAM/warnings/timer/wing-hi-pr-right">
<description>Timer for the ECAM system</description>
<input>/ECAM/warnings/logic/wing-hi-pr-right-input</input>
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
<rate_limit sense="incr">0.025</rate_limit> <!-- 40 seconds -->
</actuator>
<actuator name="/ECAM/warnings/timer/cranking-35-sec">
<description>Timer for the ECAM system</description>
<input>/ECAM/warnings/logic/cranking-35-sec-input</input>
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
<rate_limit sense="incr">0.028571</rate_limit> <!-- 35 seconds -->
</actuator>
<actuator name="/ECAM/warnings/timer/pack-1-fault-closed">
<description>Timer for the ECAM system</description>
<input>/ECAM/warnings/logic/pack-1-fault-closed-input</input>
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
<rate_limit sense="incr">0.1</rate_limit> <!-- 10 seconds -->
</actuator>
<actuator name="/ECAM/warnings/timer/pack-2-fault-closed">
<description>Timer for the ECAM system</description>
<input>/ECAM/warnings/logic/pack-2-fault-closed-input</input>
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
<rate_limit sense="incr">0.1</rate_limit> <!-- 10 seconds -->
</actuator>
<actuator name="/ECAM/warnings/timer/pack-1-disagree">
<description>Timer for the ECAM system</description>
<input>/ECAM/warnings/logic/pack-1-disagree-input</input>
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
<rate_limit sense="incr">0.1</rate_limit> <!-- 10 seconds -->
</actuator>
<actuator name="/ECAM/warnings/timer/pack-2-disagree">
<description>Timer for the ECAM system</description>
<input>/ECAM/warnings/logic/pack-2-disagree-input</input>
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
<rate_limit sense="incr">0.1</rate_limit> <!-- 10 seconds -->
</actuator>
<actuator name="/ECAM/warnings/timer/ignition">
<description>Timer for the ECAM system</description>
<input>/ECAM/warnings/logic/ignition</input>
<rate_limit sense="incr">100</rate_limit> <!-- Instant -->
<rate_limit sense="decr">0.028571</rate_limit> <!-- 35 seconds -->
</actuator>
<actuator name="/ECAM/warnings/timer/pack-1-fault-5">
<description>Timer for the ECAM system</description>
<input>/ECAM/warnings/logic/pack-1-fault-input</input>
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
<rate_limit sense="incr">0.20</rate_limit> <!-- 5 seconds -->
</actuator>
<actuator name="/ECAM/warnings/timer/pack-2-fault-5">
<description>Timer for the ECAM system</description>
<input>/ECAM/warnings/logic/pack-2-fault-input</input>
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
<rate_limit sense="incr">0.20</rate_limit> <!-- 5 seconds -->
</actuator>
<actuator name="/ECAM/warnings/timer/pack-1-fault-2">
<description>Timer for the ECAM system</description>
<input>/ECAM/warnings/logic/pack-1-fault-warning-input</input>
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
<rate_limit sense="incr">0.50</rate_limit> <!-- 2 seconds -->
</actuator>
<actuator name="/ECAM/warnings/timer/pack-2-fault-2">
<description>Timer for the ECAM system</description>
<input>/ECAM/warnings/logic/pack-2-fault-warning-input</input>
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
<rate_limit sense="incr">0.50</rate_limit> <!-- 2 seconds -->
</actuator>
<actuator name="/ECAM/warnings/timer/pack-1-off">
<description>Timer for the ECAM system</description>
<input>/ECAM/warnings/logic/pack-1-off-input</input>
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
<rate_limit sense="incr">0.0166666</rate_limit> <!-- 60 seconds -->
</actuator>
<actuator name="/ECAM/warnings/timer/pack-2-off">
<description>Timer for the ECAM system</description>
<input>/ECAM/warnings/logic/pack-2-off-input</input>
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
<rate_limit sense="incr">0.0166666</rate_limit> <!-- 60 seconds -->
</actuator>
<actuator name="/ECAM/warnings/timer/trim-air-fault">
<description>Timer for the ECAM system</description>
<input>/ECAM/warnings/logic/trim-air-fault-input</input>
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
<rate_limit sense="incr">0.2</rate_limit> <!-- 5 seconds -->
</actuator>
<actuator name="/ECAM/warnings/timer/yaw-damper-1-fault">
<description>Timer for the ECAM system</description>
<input>/ECAM/warnings/logic/yaw-damper-1-fault</input>
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
<rate_limit sense="incr">0.2</rate_limit> <!-- 5 seconds -->
</actuator>
<actuator name="/ECAM/warnings/timer/yaw-damper-2-fault">
<description>Timer for the ECAM system</description>
<input>/ECAM/warnings/logic/yaw-damper-2-fault</input>
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
<rate_limit sense="incr">0.2</rate_limit> <!-- 5 seconds -->
</actuator>
<actuator name="/ECAM/warnings/timer/nav-gpws-terr-fault">
<description>Timer for the ECAM system</description>
<input>/ECAM/warnings/logic/nav-gpws-terr-fault</input>
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
<rate_limit sense="incr">1.0</rate_limit> <!-- 1 second -->
</actuator>
<actuator name="/ECAM/warnings/timer/apu-gen-fault-reset">
<description>Timer for the ECAM system</description>
<input>/ECAM/warnings/logic/apu-gen-fault-reset</input>
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
<rate_limit sense="incr">0.5</rate_limit> <!-- 2 seconds -->
</actuator>
<actuator name="/ECAM/warnings/logic/wing-anti-ice-left-open-set-15">
<description>Timer for the ECAM system</description>
<input>/ECAM/warnings/logic/wing-anti-ice-left-open-set-15-input</input>
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
<rate_limit sense="incr">0.06666666666</rate_limit> <!-- 15 seconds -->
</actuator>
<actuator name="/ECAM/warnings/logic/wing-anti-ice-right-open-set-15">
<description>Timer for the ECAM system</description>
<input>/ECAM/warnings/logic/wing-anti-ice-right-open-set-15-input</input>
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
<rate_limit sense="incr">0.06666666666</rate_limit> <!-- 15 seconds -->
@ -1726,7 +1674,6 @@
</switch>
<actuator name="/ECAM/warnings/timer/gen-1-fault-set">
<description>Timer for the ECAM system</description>
<input>/ECAM/warnings/logic/gen-1-fault-set</input>
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
<rate_limit sense="incr">0.1818</rate_limit> <!-- 5.5 seconds -->
@ -1794,7 +1741,6 @@
</switch>
<actuator name="/ECAM/warnings/timer/gen-2-fault-set">
<description>Timer for the ECAM system</description>
<input>/ECAM/warnings/logic/gen-2-fault-set</input>
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
<rate_limit sense="incr">0.1818</rate_limit> <!-- 5.5 seconds -->
@ -1861,7 +1807,6 @@
</switch>
<actuator name="/ECAM/warnings/timer/apu-gen-fault-set">
<description>Timer for the ECAM system</description>
<input>/ECAM/warnings/logic/apu-gen-fault-set</input>
<rate_limit sense="decr">120</rate_limit> <!-- Instant -->
<rate_limit sense="incr">0.2</rate_limit> <!-- 5 seconds -->

View file

@ -233,7 +233,6 @@
</switch>
<actuator name="/systems/hydraulic/sources/blue-elec/pump-operate-apu-timer">
<description>Timer for the ECAM system</description>
<input>/systems/hydraulic/sources/blue-elec/pump-operate-apu</input>
<rate_limit sense="incr">100</rate_limit> <!-- Instant -->
<rate_limit sense="decr">0.0083333</rate_limit> <!-- 120 seconds -->

View file

@ -225,37 +225,6 @@
</test>
</switch>
<switch name="/controls/lighting/landing-lights[1]">
<default value="0"/>
<test logic="AND" value="1">
/controls/switches/landing-lights-l eq 1
/systems/electrical/bus/ac-1 ge 110
</test>
</switch>
<switch name="/controls/lighting/landing-lights[2]">
<default value="0"/>
<test logic="AND" value="1">
/controls/switches/landing-lights-r eq 1
/systems/electrical/bus/ac-2 ge 110
</test>
</switch>
<switch name="/fdm/jsbsim/rubbish/landL">
<default value="0"/>
<test logic="AND" value="1">
/controls/lighting/landing-lights[1] ge 0.5
</test>
</switch>
<switch name="/fdm/jsbsim/rubbish/landR">
<default value="0"/>
<test logic="AND" value="1">
/controls/lighting/landing-lights[2] ge 0.5
</test>
</switch>
</channel>
<channel name="External lights">
@ -318,5 +287,45 @@
</actuator>
</channel>
<channel name="Signs">
<switch name="/controls/lighting/no-smoking-sign">
<default value="0"/>
<test logic="AND" value="1">
<test logic="OR">
/systems/electrical/bus/dc-ess ge 25
/systems/electrical/bus/dc-service-bus ge 25
</test>
<test logic="OR">
/systems/pressurization/cabinalt-norm ge 11300
/controls/switches/no-smoking-sign eq 1
</test>
</test>
<test logic="AND" value="1">
/controls/switches/no-smoking-sign eq 0.5
/gear/gear[0]/position-norm ge 0.8
<test logic="OR">
/systems/electrical/bus/dc-ess ge 25
/systems/electrical/bus/dc-service-bus ge 25
</test>
</test>
</switch>
<switch name="/controls/lighting/seatbelt-sign">
<default value="0"/>
<test logic="AND" value="1">
<test logic="OR">
/systems/electrical/bus/dc-ess ge 25
/systems/electrical/bus/dc-service-bus ge 25
</test>
<test logic="OR">
/systems/pressurization/cabinalt-norm ge 11300
/controls/switches/seatbelt-sign eq 1
</test>
</test>
</switch>
</channel>
</system>

View file

@ -385,6 +385,28 @@
</channel>
<channel name="GPWS" execrate="8">
<switch name="/instrumentation/mk-viii/inputs/discretes/momentary-flap-override">
<default value="0"/>
<test logic="OR" value="1">
/instrumentation/mk-viii/inputs/discretes/momentary-flap-all-override eq 1
<test logic="AND">
/instrumentation/mk-viii/inputs/discretes/momentary-flap-3-override eq 1
/controls/flight/flaps-pos ge 4
</test>
</test>
</switch>
<switch name="/instrumentation/mk-viii/speaker/volume">
<default value="0"/>
<test logic="OR" value="2">
/instrumentation/mk-viii/inputs/discretes/gpws-inhibit eq 0
</test>
</switch>
</channel>
<channel name="System Display" execrate="8">
<switch name="/ECAM/Lower/g-force-display-cmd">