From f5c66d6047a420625431031a1dd51b97fb3bde76 Mon Sep 17 00:00:00 2001
From: legoboyvdlp R <legoboyvdlp@gmail.com>
Date: Sat, 12 Sep 2020 18:21:23 +0100
Subject: [PATCH] JSBSIM Misc file added.

---
 A320-100-CFM.xml                       |   1 +
 A320-200-CFM.xml                       |   1 +
 A320-200-IAE.xml                       |   1 +
 A320neo-CFM.xml                        |   1 +
 A320neo-PW.xml                         |   1 +
 Models/Instruments/OHpanel/OHpanel.xml |  66 ++++++++++++---
 Nasal/Libraries/buttons.nas            | 113 +++++++++----------------
 Nasal/Libraries/libraries.nas          |   6 +-
 Systems/a320-misc.xml                  |  32 +++++++
 9 files changed, 138 insertions(+), 84 deletions(-)
 create mode 100644 Systems/a320-misc.xml

diff --git a/A320-100-CFM.xml b/A320-100-CFM.xml
index 260ee175..7784988c 100644
--- a/A320-100-CFM.xml
+++ b/A320-100-CFM.xml
@@ -213,6 +213,7 @@ xsi:noNamespaceSchemaLocation="http://jsbsim.sourceforge.net/JSBSim.xsd">
 	<system file="a320-adr"/>
 	<system file="a320-apu"/>
 	<system file="a320-fmgc"/>
+	<system file="a320-misc"/>
 	
 	<flight_control name="none"/>
 	<aerodynamics file="Systems/a320-aerodynamics.xml"/>
diff --git a/A320-200-CFM.xml b/A320-200-CFM.xml
index 1d7d24fa..17855ff5 100644
--- a/A320-200-CFM.xml
+++ b/A320-200-CFM.xml
@@ -212,6 +212,7 @@ xsi:noNamespaceSchemaLocation="http://jsbsim.sourceforge.net/JSBSim.xsd">
 	<system file="a320-adr"/>
 	<system file="a320-apu"/>
 	<system file="a320-fmgc"/>
+	<system file="a320-misc"/>
 	
 	<flight_control name="none"/>
 	<aerodynamics file="Systems/a320-aerodynamics.xml"/>
diff --git a/A320-200-IAE.xml b/A320-200-IAE.xml
index 7c1c065f..24f5355d 100644
--- a/A320-200-IAE.xml
+++ b/A320-200-IAE.xml
@@ -212,6 +212,7 @@ xsi:noNamespaceSchemaLocation="http://jsbsim.sourceforge.net/JSBSim.xsd">
 	<system file="a320-adr"/>
 	<system file="a320-apu"/>
 	<system file="a320-fmgc"/>
+	<system file="a320-misc"/>
 	
 	<flight_control name="none"/>
 	<aerodynamics file="Systems/a320-aerodynamics.xml"/>
diff --git a/A320neo-CFM.xml b/A320neo-CFM.xml
index 4bd25cfa..7570cb46 100644
--- a/A320neo-CFM.xml
+++ b/A320neo-CFM.xml
@@ -212,6 +212,7 @@ xsi:noNamespaceSchemaLocation="http://jsbsim.sourceforge.net/JSBSim.xsd">
 	<system file="a320-adr"/>
 	<system file="a320-apu"/>
 	<system file="a320-fmgc"/>
+	<system file="a320-misc"/>
 	
 	<flight_control name="none"/>
 	<aerodynamics file="Systems/a320-aerodynamics.xml"/>
diff --git a/A320neo-PW.xml b/A320neo-PW.xml
index 05d4ea88..fa07ac97 100644
--- a/A320neo-PW.xml
+++ b/A320neo-PW.xml
@@ -212,6 +212,7 @@ xsi:noNamespaceSchemaLocation="http://jsbsim.sourceforge.net/JSBSim.xsd">
 	<system file="a320-adr"/>
 	<system file="a320-apu"/>
 	<system file="a320-fmgc"/>
+	<system file="a320-misc"/>
 	
 	<flight_control name="none"/>
 	<aerodynamics file="Systems/a320-aerodynamics.xml"/>
diff --git a/Models/Instruments/OHpanel/OHpanel.xml b/Models/Instruments/OHpanel/OHpanel.xml
index 64eca44e..b9bc5cc1 100644
--- a/Models/Instruments/OHpanel/OHpanel.xml
+++ b/Models/Instruments/OHpanel/OHpanel.xml
@@ -7204,14 +7204,37 @@
 			<repeatable>false</repeatable>
 			<binding>
 				<condition>
-					<greater-than-equals>
-						<property>systems/electrical/bus/dc-ess</property>
-						<value>25</value>
-					</greater-than-equals>
+					<and>
+						<greater-than-equals>
+							<property>systems/electrical/bus/dc-ess</property>
+							<value>25</value>
+						</greater-than-equals>
+						<or>
+							<not>
+								<property>gear/gear[1]/wow</property>
+							</not>
+							<equals>
+								<property>/engines/engine[0]/state</property>
+								<value>3</value>
+							</equals>
+							<equals>
+								<property>/engines/engine[1]/state</property>
+								<value>3</value>
+							</equals>
+						</or>
+					</and>
 				</condition>
-				<command>property-toggle</command>
+				<command>property-assign</command>
 				<property>controls/switches/LrainRpt</property>
+				<value>1</value>
 			</binding>
+			<mod-up>
+				<binding>
+					<command>property-assign</command>
+					<property>controls/switches/LrainRpt</property>
+					<value>0</value>
+				</binding>
+			</mod-up>
 			<binding>
 				<command>nasal</command>
 				<script>setprop("sim/sounde/oh-btn", 1);</script>
@@ -7227,14 +7250,37 @@
 			<repeatable>false</repeatable>
 			<binding>
 				<condition>
-					<greater-than-equals>
-						<property>systems/electrical/bus/dc-ess</property>
-						<value>25</value>
-					</greater-than-equals>
+					<and>
+						<greater-than-equals>
+							<property>systems/electrical/bus/dc-2</property>
+							<value>25</value>
+						</greater-than-equals>
+						<or>
+							<not>
+								<property>gear/gear[1]/wow</property>
+							</not>
+							<equals>
+								<property>/engines/engine[0]/state</property>
+								<value>3</value>
+							</equals>
+							<equals>
+								<property>/engines/engine[1]/state</property>
+								<value>3</value>
+							</equals>
+						</or>
+					</and>
 				</condition>
-				<command>property-toggle</command>
+				<command>property-assign</command>
 				<property>controls/switches/RrainRpt</property>
+				<value>1</value>
 			</binding>
+			<mod-up>
+				<binding>
+					<command>property-assign</command>
+					<property>controls/switches/RrainRpt</property>
+					<value>0</value>
+				</binding>
+			</mod-up>
 			<binding>
 				<command>nasal</command>
 				<script>setprop("sim/sounde/oh-btn", 1);</script>
diff --git a/Nasal/Libraries/buttons.nas b/Nasal/Libraries/buttons.nas
index 58c8f0e6..f5ade43d 100644
--- a/Nasal/Libraries/buttons.nas
+++ b/Nasal/Libraries/buttons.nas
@@ -5,77 +5,71 @@
 
 var wow = nil;
 var wowr = nil;
-var Lrain = props.globals.getNode("/controls/switches/LrainRpt");
-var Rrain = props.globals.getNode("/controls/switches/RrainRpt");
 var OnLt = props.globals.getNode("/controls/switches/emerCallLtO");
 var CallLt = props.globals.getNode("/controls/switches/emerCallLtC");
 var EmerCall = props.globals.getNode("/controls/switches/emerCall");
 var CabinCall = props.globals.getNode("/controls/switches/cabinCall");
 var MechCall = props.globals.getNode("/controls/switches/mechCall");	
-var cvr_gndCtl = props.globals.getNode("/controls/CVR/gndctl");
-var cvr_power = props.globals.getNode("/controls/CVR/power");
 var cvr_tone = props.globals.getNode("/controls/CVR/tone");
 
 # Resets buttons to the default values
 var variousReset = func {
 	setprop("modes/cpt-du-xfr", 0);
 	setprop("modes/fo-du-xfr", 0);
-	setprop("controls/fadec/n1mode1", 0);
-	setprop("controls/fadec/n1mode2", 0);
+	setprop("/controls/fadec/n1mode1", 0);
+	setprop("/controls/fadec/n1mode2", 0);
 	setprop("instrumentation/mk-viii/serviceable", 1);
 	setprop("instrumentation/mk-viii/inputs/discretes/ta-tcf-inhibit", 0);
 	setprop("instrumentation/mk-viii/inputs/discretes/gpws-inhibit", 0);
 	setprop("instrumentation/mk-viii/inputs/discretes/glideslope-inhibit", 0);
 	setprop("instrumentation/mk-viii/inputs/discretes/momentary-flap-all-override", 0);
 	setprop("instrumentation/mk-viii/inputs/discretes/momentary-flap-3-override", 0);
-	setprop("controls/switches/cabinCall", 0);
-	setprop("controls/switches/mechCall", 0);
-	setprop("controls/switches/emer-lights", 0.5);
+	setprop("/controls/switches/cabinCall", 0);
+	setprop("/controls/switches/mechCall", 0);
+	setprop("/controls/switches/emer-lights", 0.5);
 	# cockpit voice recorder stuff
-	setprop("controls/CVR/power", 0);
-	setprop("controls/CVR/test", 0);
-	setprop("controls/CVR/tone", 0);
-	setprop("controls/CVR/gndctl", 0);
-	setprop("controls/CVR/erase", 0);
-	setprop("controls/switches/pneumatics/cabin-fans", 1);
-	setprop("controls/oxygen/crewOxyPB", 1); # 0 = OFF 1 = AUTO
-	setprop("controls/switches/emerCallLtO", 0); # ON light, flashes white for 10s
-	setprop("controls/switches/emerCallLtC", 0); # CALL light, flashes amber for 10s
-	setprop("controls/switches/emerCall", 0);
-	setprop("controls/switches/LrainRpt", 0);
-	setprop("controls/switches/RrainRpt", 0);
-	setprop("controls/switches/wiperLspd", 0); # -1 = INTM 0 = OFF 1 = LO 2 = HI
-	setprop("controls/switches/wiperRspd", 0); # -1 = INTM 0 = OFF 1 = LO 2 = HI
-	setprop("controls/lighting/strobe", 0);
-	setprop("controls/lighting/beacon", 0);
-	setprop("controls/switches/beacon", 0);
-	setprop("controls/switches/wing-lights", 0);
-	setprop("controls/switches/landing-lights-l", 0);
-	setprop("controls/switches/landing-lights-r", 0);
-	setprop("controls/lighting/wing-lights", 0);
-	setprop("controls/lighting/nav-lights-switch", 0);
-	setprop("controls/lighting/landing-lights[1]", 0);
-	setprop("controls/lighting/landing-lights[2]", 0);
-	setprop("controls/lighting/taxi-light-switch", 0);
-	setprop("controls/lighting/DU/du1", 1);
-	setprop("controls/lighting/DU/du2", 1);
-	setprop("controls/lighting/DU/du3", 1);
-	setprop("controls/lighting/DU/du4", 1);
-	setprop("controls/lighting/DU/du5", 1);
-	setprop("controls/lighting/DU/du6", 1);
-	setprop("controls/lighting/DU/mcdu1", 1);
-	setprop("controls/lighting/DU/mcdu2", 1);
+	setprop("/controls/CVR/power", 0);
+	setprop("/controls/CVR/test", 0);
+	setprop("/controls/CVR/tone", 0);
+	setprop("/controls/CVR/gndctl", 0);
+	setprop("/controls/CVR/erase", 0);
+	setprop("/controls/switches/pneumatics/cabin-fans", 1);
+	setprop("/controls/oxygen/crewOxyPB", 1); # 0 = OFF 1 = AUTO
+	setprop("/controls/switches/emerCallLtO", 0); # ON light, flashes white for 10s
+	setprop("/controls/switches/emerCallLtC", 0); # CALL light, flashes amber for 10s
+	setprop("/controls/switches/emerCall", 0);
+	setprop("/controls/switches/LrainRpt", 0);
+	setprop("/controls/switches/RrainRpt", 0);
+	setprop("/controls/switches/wiperLspd", 0); # -1 = INTM 0 = OFF 1 = LO 2 = HI
+	setprop("/controls/switches/wiperRspd", 0); # -1 = INTM 0 = OFF 1 = LO 2 = HI
+	setprop("/controls/lighting/strobe", 0);
+	setprop("/controls/lighting/beacon", 0);
+	setprop("/controls/switches/beacon", 0);
+	setprop("/controls/switches/wing-lights", 0);
+	setprop("/controls/switches/landing-lights-l", 0);
+	setprop("/controls/switches/landing-lights-r", 0);
+	setprop("/controls/lighting/wing-lights", 0);
+	setprop("/controls/lighting/nav-lights-switch", 0);
+	setprop("/controls/lighting/landing-lights[1]", 0);
+	setprop("/controls/lighting/landing-lights[2]", 0);
+	setprop("/controls/lighting/taxi-light-switch", 0);
+	setprop("/controls/lighting/DU/du1", 1);
+	setprop("/controls/lighting/DU/du2", 1);
+	setprop("/controls/lighting/DU/du3", 1);
+	setprop("/controls/lighting/DU/du4", 1);
+	setprop("/controls/lighting/DU/du5", 1);
+	setprop("/controls/lighting/DU/du6", 1);
+	setprop("/controls/lighting/DU/mcdu1", 1);
+	setprop("/controls/lighting/DU/mcdu2", 1);
 	setprop("modes/fcu/hdg-time", -45);
-	setprop("controls/switching/ATTHDG", 0);
-	setprop("controls/switching/AIRDATA", 0);
-	setprop("controls/switches/no-smoking-sign", 1);
-	setprop("controls/switches/seatbelt-sign", 1);
+	setprop("/controls/switching/ATTHDG", 0);
+	setprop("/controls/switching/AIRDATA", 0);
+	setprop("/controls/switches/no-smoking-sign", 1);
+	setprop("/controls/switches/seatbelt-sign", 1);
 }
 
 var BUTTONS = {
 	update: func() {
-		rainRepel();
-		CVR_master();
 		if (EmerCall.getValue()) {
 			EmerCallOnLight();
 			EmerCallLight();
@@ -83,17 +77,6 @@ var BUTTONS = {
 	},
 };
 
-var rainRepel = func() {
-	if (pts.Engines.Engine.state[0].getValue() != 3 and pts.Engines.Engine.state[1].getValue() != 3 and pts.Gear.wow[0].getValue()) { 
-		if (Lrain.getValue()) {
-			Lrain.setValue(0);
-		}
-		if (Rrain.getValue()) {
-			Rrain.setValue(0);
-		}
-	}
-}
-
 var _OnLt = nil;
 var _EmerCall = nil;
 
@@ -120,18 +103,6 @@ var EmerCallLight = func() {
 	}
 }
 
-var CVR_master = func() {
-	wow = pts.Gear.wow[0].getValue();
-	wowr = pts.Gear.wow[1].getValue();
-	if (systems.ELEC.Bus.acEss.getValue() > 0 and wow and wowr and (cvr_gndCtl.getValue() or (pts.Engines.Engine.state[0].getValue() == 3 or pts.Engines.Engine.state[1].getValue() == 3))) {
-		cvr_power.setValue(1);
-	} else if (!wow and !wowr and systems.ELEC.Bus.acEss.getValue() > 0) {
-		cvr_power.setValue(1);
-	} else {
-		cvr_power.setValue(0);
-	}
-}
-
 var EmerCallFunc = func {
 	EmerCall.setValue(1);
 	settimer(func() {
diff --git a/Nasal/Libraries/libraries.nas b/Nasal/Libraries/libraries.nas
index bf2351ed..45086eaf 100644
--- a/Nasal/Libraries/libraries.nas
+++ b/Nasal/Libraries/libraries.nas
@@ -257,15 +257,15 @@ var systemsLoop = maketimer(0.1, func {
 	systems.PNEU.loop();
 	systems.HYD.loop();
 	systems.ADIRS.loop();
+	systems.APUController.loop();
 	ecam.ECAM.loop();
-	libraries.BUTTONS.update();
 	fadec.FADEC.loop();
 	rmp.rmpUpdate();
 	fcu.FCUController.loop();
 	dmc.DMController.loop();
-	systems.APUController.loop();
-	systems.HFLoop();
 	atsu.ATSU.loop();
+	libraries.BUTTONS.update();
+	systems.HFLoop();
 	
 	groundspeed = pts.Velocities.groundspeed.getValue();
 	if ((groundAir.getBoolValue() or groundCart.getBoolValue()) and ((groundspeed > 2) or (!pts.Controls.Gear.parkingBrake.getBoolValue() and !chocks.getBoolValue()))) {
diff --git a/Systems/a320-misc.xml b/Systems/a320-misc.xml
new file mode 100644
index 00000000..119da28e
--- /dev/null
+++ b/Systems/a320-misc.xml
@@ -0,0 +1,32 @@
+<!-- Airbus A320 Misc Systems -->
+
+<!-- Copyright (c) 2020 Jonathan Redpath -->
+
+<system name="A320: APU">
+
+    <channel name="CVR" execrate="8">
+	
+		<switch name="/controls/CVR/power">
+			<default value="0"/>
+			<test logic="AND" value="1">
+				/systems/electrical/bus/ac-ess ge 110
+				<test logic="OR">
+					/gear/gear[1]/wow eq 1
+					/gear/gear[2]/wow eq 1
+				</test>
+				<test logic="OR">
+					/controls/CVR/gndctl eq 1
+					/engines/engine[0]/state eq 3
+					/engines/engine[1]/state eq 3
+				</test>
+			</test>
+			<test logic="AND" value="1">
+				/systems/electrical/bus/ac-ess ge 110
+				/gear/gear[1]/wow eq 0
+				/gear/gear[2]/wow eq 0
+			</test>
+		</switch>
+		
+	</channel>
+
+</system>