From d02ad7922b828b4a6cbf149584e37bf4f9fb3eb2 Mon Sep 17 00:00:00 2001 From: Stuart Buchanan <stuart_d_buchanan@yahoo.co.uk> Date: Wed, 25 Sep 2019 20:52:54 +0100 Subject: [PATCH] FG1000 bugfixes - Simulate solid-state gyro for orientation - Improve behaviour restarting interfaces - Improve generic support through Debug menu. --- .../Instruments-3d/FG1000/Nasal/FG1000.nas | 4 ++-- .../Nasal/Interfaces/GenericADCPublisher.nas | 10 ++++++--- .../Interfaces/GenericInterfaceController.nas | 2 +- .../Nasal/Interfaces/PropertyPublisher.nas | 6 ++++- gui/menubar.xml | 22 +++++++------------ 5 files changed, 23 insertions(+), 21 deletions(-) diff --git a/Aircraft/Instruments-3d/FG1000/Nasal/FG1000.nas b/Aircraft/Instruments-3d/FG1000/Nasal/FG1000.nas index 3f50da760..650cd6416 100644 --- a/Aircraft/Instruments-3d/FG1000/Nasal/FG1000.nas +++ b/Aircraft/Instruments-3d/FG1000/Nasal/FG1000.nas @@ -91,7 +91,7 @@ addMFD : func(index=nil, targetcanvas=nil) { index = size(keys(me.displays)); } else if (me.displays[index] != nil) { print("FG1000 Index " ~ index ~ " already exists!"); - return + return index; } if (targetcanvas == nil) { @@ -117,7 +117,7 @@ addPFD : func(index=nil, targetcanvas=nil) { index = size(keys(me.displays)); } else if (me.displays[index] != nil) { print("FG1000 Index " ~ index ~ " already exists!"); - return + return index; } if (targetcanvas == nil) { diff --git a/Aircraft/Instruments-3d/FG1000/Nasal/Interfaces/GenericADCPublisher.nas b/Aircraft/Instruments-3d/FG1000/Nasal/Interfaces/GenericADCPublisher.nas index d17f63526..b4cd5f1db 100644 --- a/Aircraft/Instruments-3d/FG1000/Nasal/Interfaces/GenericADCPublisher.nas +++ b/Aircraft/Instruments-3d/FG1000/Nasal/Interfaces/GenericADCPublisher.nas @@ -41,15 +41,19 @@ var GenericADCPublisher = ], }; + # Air data comes from the airspeed indicator as for a non-glass panel aircraft. obj.addPropMap("ADCTrueAirspeed", "/instrumentation/airspeed-indicator/true-speed-kt"); obj.addPropMap("ADCIndicatedAirspeed", "/instrumentation/airspeed-indicator/indicated-speed-kt"); - obj.addPropMap("ADCPitchDeg", "/instrumentation/attitude-indicator/indicated-pitch-deg"); - obj.addPropMap("ADCRollDeg", "/instrumentation/attitude-indicator/indicated-roll-deg"); + # Assume an accurate solid-state magnetometer + obj.addPropMap("ADCPitchDeg", "/orientation/pitch-deg"); + obj.addPropMap("ADCRollDeg", "/orientation/roll-deg"); + + # TODO: Replace these with real values - shouldn't rely on steam-powered gauges. obj.addPropMap("ADCTurnRate", "/instrumentation/turn-indicator/indicated-turn-rate"); obj.addPropMap("ADCSlipSkid", "/instrumentation/slip-skid-ball/indicated-slip-skid"); - # Assume an accurate solid-state compass + # Assume an accurate solid-state magnetometer obj.addPropMap("ADCHeadingMagneticDeg", "/orientation/heading-magnetic-deg"); obj.addPropMap("ADCMagneticVariationDeg", "/environment/magnetic-variation-deg"); diff --git a/Aircraft/Instruments-3d/FG1000/Nasal/Interfaces/GenericInterfaceController.nas b/Aircraft/Instruments-3d/FG1000/Nasal/Interfaces/GenericInterfaceController.nas index 47c47bd45..d01553e33 100644 --- a/Aircraft/Instruments-3d/FG1000/Nasal/Interfaces/GenericInterfaceController.nas +++ b/Aircraft/Instruments-3d/FG1000/Nasal/Interfaces/GenericInterfaceController.nas @@ -90,7 +90,7 @@ var GenericInterfaceController = { stop : func() { if (me.running == 0) return; - + foreach (var interface; GenericInterfaceController.INTERFACE_LIST) { io.load_nasal(nasal_dir ~ 'Interfaces/' ~ interface ~ '.nas', "fg1000"); var code = 'me.' ~ interface ~ 'Instance.stop();'; diff --git a/Aircraft/Instruments-3d/FG1000/Nasal/Interfaces/PropertyPublisher.nas b/Aircraft/Instruments-3d/FG1000/Nasal/Interfaces/PropertyPublisher.nas index 64e6d4502..6da1ffba5 100644 --- a/Aircraft/Instruments-3d/FG1000/Nasal/Interfaces/PropertyPublisher.nas +++ b/Aircraft/Instruments-3d/FG1000/Nasal/Interfaces/PropertyPublisher.nas @@ -159,7 +159,11 @@ var TriggeredPropertyPublisher = stop : func() { foreach (var l; me._listeners) { - removelistener(l); + # In some circumstances we may not have a valid listener ID, so we + # just ignore the problem. + var err = []; + call( func removelistener(l), nil, err); + if (size(err)) print("Ignoring error : " ~ err[0]); } if(me._timer != nil) me._timer.stop(); diff --git a/gui/menubar.xml b/gui/menubar.xml index a08eb6851..712c2e6e5 100644 --- a/gui/menubar.xml +++ b/gui/menubar.xml @@ -840,16 +840,13 @@ io.load_nasal(nasal_dir ~ 'Interfaces/GenericInterfaceController.nas', "fg1000"); } - var fg1000system = fg1000.FG1000.getOrCreateInstance(); - var pfdindex = fg1000system.addPFD(); - fg1000system.displayGUI(pfdindex); - - # Start the interface controller after the FG1000, as it will publish - # immediately and update the NAV/COM data. var interfaceController = fg1000.GenericInterfaceController.getOrCreateInstance(); - interfaceController.stop(); interfaceController.start(); + var fg1000system = fg1000.FG1000.getOrCreateInstance(); + var pfdindex = fg1000system.addPFD(1); + fg1000system.displayGUI(pfdindex); + </script> </binding> </item> @@ -865,16 +862,13 @@ io.load_nasal(nasal_dir ~ 'Interfaces/GenericInterfaceController.nas', "fg1000"); } - var fg1000system = fg1000.FG1000.getOrCreateInstance(); - var mfdindex = fg1000system.addMFD(); - fg1000system.displayGUI(mfdindex); - - # Start the interface controller after the FG1000, as it will publish - # immediately and update the NAV/COM data. var interfaceController = fg1000.GenericInterfaceController.getOrCreateInstance(); - interfaceController.stop(); interfaceController.start(); + var fg1000system = fg1000.FG1000.getOrCreateInstance(); + var mfdindex = fg1000system.addMFD(2); + fg1000system.displayGUI(mfdindex); + </script> </binding> </item>