From ddc88fd64de9b8874763f8d75e810d3ea22c827e Mon Sep 17 00:00:00 2001 From: BravoMike99 <119708186+BravoMike99@users.noreply.github.com> Date: Sun, 12 Jan 2025 12:07:06 +0000 Subject: [PATCH 1/8] fix(mfd): move calculations of trip fuel & extra to fmc --- .../src/MFD/FMC/FlightManagementComputer.ts | 31 +++++++++++++++- .../instruments/src/MFD/FMC/FmcInterface.ts | 3 ++ .../src/MFD/pages/FMS/MfdFmsFuelLoad.tsx | 35 +++---------------- 3 files changed, 38 insertions(+), 31 deletions(-) diff --git a/fbw-a380x/src/systems/instruments/src/MFD/FMC/FlightManagementComputer.ts b/fbw-a380x/src/systems/instruments/src/MFD/FMC/FlightManagementComputer.ts index 4f77aed2269..ace2d4cafa4 100644 --- a/fbw-a380x/src/systems/instruments/src/MFD/FMC/FlightManagementComputer.ts +++ b/fbw-a380x/src/systems/instruments/src/MFD/FMC/FlightManagementComputer.ts @@ -37,6 +37,7 @@ import { EfisSide, Fix, NXDataStore, + Units, UpdateThrottler, Waypoint, a380EfisRangeSettings, @@ -388,7 +389,35 @@ export class FlightManagementComputer implements FmcInterface { } public getTripFuel(): number | null { - return 25_000; // FIXME Dummy value + const destPred = this.guidanceController.vnavDriver.getDestinationPrediction(); + if (destPred) { + const fob = this.fmgc.getFOB() * 1_000; + const destFuelKg = Units.poundToKilogram(destPred.estimatedFuelOnBoard); + return fob - destFuelKg; + } + return null; + } + + public getExtraFuel(): number | null { + const destPred = this.guidanceController.vnavDriver.getDestinationPrediction(); + if (destPred) { + if (this.flightPhase.get() === FmgcFlightPhase.Preflight) { + // EXTRA = BLOCK - TAXI - TRIP - MIN FUEL DEST - RTE RSV + return ( + (this.enginesWereStarted.get() ? this.fmgc.getFOB() * 1_000 : (this.fmgc.data.blockFuel.get() ?? 0)) - + (this.fmgc.data.taxiFuel.get() ?? 0) - + (this.getTripFuel() ?? 0) - + (this.fmgc.data.minimumFuelAtDestination.get() ?? 0) - + (this.fmgc.data.routeReserveFuelWeight.get() ?? 0) + ); + } else { + return ( + Units.poundToKilogram(destPred.estimatedFuelOnBoard) - (this.fmgc.data.minimumFuelAtDestination.get() ?? 0) + ); + } + } + + return null; } public getRecMaxFlightLevel(): number | null { diff --git a/fbw-a380x/src/systems/instruments/src/MFD/FMC/FmcInterface.ts b/fbw-a380x/src/systems/instruments/src/MFD/FMC/FmcInterface.ts index b6d0e133106..526bb770245 100644 --- a/fbw-a380x/src/systems/instruments/src/MFD/FMC/FmcInterface.ts +++ b/fbw-a380x/src/systems/instruments/src/MFD/FMC/FmcInterface.ts @@ -151,6 +151,9 @@ export interface FmcInterface extends FlightPhaseManagerProxyInterface, DataInte /** in kilograms */ getTripFuel(): number | null; + /** in kilograms */ + getExtraFuel(): number | null; + /** as flight level */ getRecMaxFlightLevel(): number | null; diff --git a/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/MfdFmsFuelLoad.tsx b/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/MfdFmsFuelLoad.tsx index e8670b0e13e..930b55bf6b2 100644 --- a/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/MfdFmsFuelLoad.tsx +++ b/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/MfdFmsFuelLoad.tsx @@ -29,7 +29,6 @@ import { FmsPage } from 'instruments/src/MFD/pages/common/FmsPage'; import { MfdSimvars } from 'instruments/src/MFD/shared/MFDSimvarPublisher'; import { FmgcFlightPhase } from '@shared/flightphase'; import { AirlineModifiableInformation } from '@shared/AirlineModifiableInformation'; -import { Units } from '@flybywiresim/fbw-sdk'; import { getEtaFromUtcOrPresent } from '../../shared/utils'; interface MfdFmsFuelLoadProps extends AbstractMfdPageProps {} @@ -166,14 +165,11 @@ export class MfdFmsFuelLoad extends FmsPage { } const destPred = this.props.fmcService.master.guidanceController.vnavDriver.getDestinationPrediction(); + const tripFuel = this.props.fmcService.master.getTripFuel(); + this.tripFuelWeight.set(tripFuel); + this.tripFuelTime.set(getEtaFromUtcOrPresent(destPred?.secondsFromPresent, true)); + this.extraFuelWeight.set(this.props.fmcService.master.getExtraFuel()); if (this.activeFlightPhase.get() === FmgcFlightPhase.Preflight) { - // EXTRA = BLOCK - TAXI - TRIP - MIN FUEL DEST - RTE RSV - const fob = this.props.fmcService.master.fmgc.getFOB() * 1_000; - const tripFuel = - fob - (destPred?.estimatedFuelOnBoard ? Units.poundToKilogram(destPred?.estimatedFuelOnBoard) : fob); - this.tripFuelWeight.set(tripFuel); - this.tripFuelTime.set(getEtaFromUtcOrPresent(destPred?.secondsFromPresent, true)); - // Calculate Rte Rsv fuel if not manually entered const pilotEnteredReserveFuel = this.props.fmcService.master.fmgc.data.routeReserveFuelIsPilotEntered.get(); this.props.fmcService.master.fmgc.data.routeReserveFuelWeightCalculated.set( @@ -184,28 +180,7 @@ export class MfdFmsFuelLoad extends FmsPage { if (!pilotEnteredReserveFuel) { this.props.fmcService.master.fmgc.data.routeReserveFuelWeightPilotEntry.set(null); } - - const block = this.props.fmcService.master.fmgc.data.blockFuel.get() ?? 0; - this.extraFuelWeight.set( - (this.props.fmcService.master.enginesWereStarted.get() ? fob : block) - - (this.props.fmcService.master.fmgc.data.taxiFuel.get() ?? 0) - - (this.tripFuelWeight.get() ?? 0) - - (this.props.fmcService.master.fmgc.data.minimumFuelAtDestination.get() ?? 0) - - (this.props.fmcService.master.fmgc.data.routeReserveFuelWeight.get() ?? 0), - ); - } else { - if (destPred) { - const fobKg = this.props.fmcService.master.fmgc.getFOB() * 1000; - const destFuelKg = Units.poundToKilogram(destPred?.estimatedFuelOnBoard); - const remainingTripFuel = fobKg - destFuelKg; - this.tripFuelWeight.set(remainingTripFuel); - this.tripFuelTime.set(getEtaFromUtcOrPresent(destPred.secondsFromPresent, true)); - this.extraFuelWeight.set( - destFuelKg - (this.props.fmcService.master.fmgc.data.minimumFuelAtDestination.get() ?? 0), - ); - } } - this.updateDestAndAltnPredictions(); }), ); @@ -311,7 +286,7 @@ export class MfdFmsFuelLoad extends FmsPage { } enteredByPilot={this.props.fmcService.master.fmgc.data.taxiFuelIsPilotEntered} value={this.props.fmcService.master.fmgc.data.taxiFuel} - inactive={this.activeFlightPhase.map((it) => it >= FmgcFlightPhase.Takeoff)} + disabled={this.activeFlightPhase.map((it) => it >= FmgcFlightPhase.Takeoff)} alignText="flex-end" containerStyle="width: 150px;" errorHandler={(e) => this.props.fmcService.master?.showFmsErrorMessage(e)} From 348fdc854921d0fda5732105001b16df2ad85964 Mon Sep 17 00:00:00 2001 From: BravoMike99 <119708186+BravoMike99@users.noreply.github.com> Date: Sun, 12 Jan 2025 12:20:55 +0000 Subject: [PATCH 2/8] feat(mfd): add CI in use msg if no CI after engine start --- .../systems/instruments/src/MFD/FMC/FlightManagementComputer.ts | 2 ++ .../src/systems/instruments/src/MFD/shared/NXSystemMessages.ts | 1 + 2 files changed, 3 insertions(+) diff --git a/fbw-a380x/src/systems/instruments/src/MFD/FMC/FlightManagementComputer.ts b/fbw-a380x/src/systems/instruments/src/MFD/FMC/FlightManagementComputer.ts index ace2d4cafa4..8e9f89ff342 100644 --- a/fbw-a380x/src/systems/instruments/src/MFD/FMC/FlightManagementComputer.ts +++ b/fbw-a380x/src/systems/instruments/src/MFD/FMC/FlightManagementComputer.ts @@ -269,6 +269,7 @@ export class FlightManagementComputer implements FmcInterface { !Number.isFinite(this.flightPlanService.active.performanceData.costIndex) ) { this.flightPlanService.active.setPerformanceData('costIndex', 0); + this.addMessageToQueue(NXSystemMessages.costIndexInUse.getModifiedMessage('0')); } }), this.legacyFmsIsHealthy.sub((v) => { @@ -693,6 +694,7 @@ export class FlightManagementComputer implements FmcInterface { this.acInterface.updateThrustReductionAcceleration(); } + pd.taxiFuelPilotEntry.set(null); pd.routeReserveFuelWeightPilotEntry.set(null); pd.routeReserveFuelPercentagePilotEntry.set(0); pd.routeReserveFuelWeightCalculated.set(0); diff --git a/fbw-a380x/src/systems/instruments/src/MFD/shared/NXSystemMessages.ts b/fbw-a380x/src/systems/instruments/src/MFD/shared/NXSystemMessages.ts index f99c82da4e2..838d513e122 100644 --- a/fbw-a380x/src/systems/instruments/src/MFD/shared/NXSystemMessages.ts +++ b/fbw-a380x/src/systems/instruments/src/MFD/shared/NXSystemMessages.ts @@ -73,6 +73,7 @@ export const NXSystemMessages = { checkToData: new TypeIIMessage('CHECK TAKE OFF DATA', true), comUnavailable: new TypeIMessage('COM UNAVAILABLE'), cstrDelUpToWpt: new TypeIIMessage('CONSTRAINTS BEFORE WWWWW : DELETED', false, 'WWWWW'), + costIndexInUse: new TypeIMessage('COST INDEX-NNN IN USE', false, 'NNN'), databaseCodingError: new TypeIIMessage('DATABASE CODING ERROR'), dcduFileFull: new TypeIMessage('DCDU FILE FULL'), destEfobBelowMin: new TypeIIMessage('DEST EFOB BELOW MIN', true), From 3f83da67e03fee7cf72a7cbaac5842708d4995d1 Mon Sep 17 00:00:00 2001 From: BravoMike99 <119708186+BravoMike99@users.noreply.github.com> Date: Sun, 12 Jan 2025 20:16:24 +0000 Subject: [PATCH 3/8] fix(mfd): clear taxi fuel after to. Fix engines running condition --- .../src/MFD/FMC/FlightManagementComputer.ts | 25 ++++++++----------- .../systems/instruments/src/MFD/FMC/fmgc.ts | 9 ++----- .../src/MFD/pages/FMS/MfdFmsFuelLoad.tsx | 6 ++--- 3 files changed, 16 insertions(+), 24 deletions(-) diff --git a/fbw-a380x/src/systems/instruments/src/MFD/FMC/FlightManagementComputer.ts b/fbw-a380x/src/systems/instruments/src/MFD/FMC/FlightManagementComputer.ts index 8e9f89ff342..b40f26f16d8 100644 --- a/fbw-a380x/src/systems/instruments/src/MFD/FMC/FlightManagementComputer.ts +++ b/fbw-a380x/src/systems/instruments/src/MFD/FMC/FlightManagementComputer.ts @@ -374,7 +374,7 @@ export class FlightManagementComputer implements FmcInterface { // TOW before engine start: TOW = ZFW + BLOCK - TAXI const zfw = this.fmgc.data.zeroFuelWeight.get() ?? maxZfw; if (this.fmgc.data.zeroFuelWeight.get() && this.fmgc.data.blockFuel.get() && this.fmgc.data.taxiFuel.get()) { - return zfw + (this.fmgc.data.blockFuel.get() ?? maxBlockFuel) - this.fmgc.data.taxiFuel.get(); + return zfw + (this.fmgc.data.blockFuel.get() ?? maxBlockFuel) - (this.fmgc.data.taxiFuel.get() ?? 0); } return null; } @@ -694,7 +694,8 @@ export class FlightManagementComputer implements FmcInterface { this.acInterface.updateThrustReductionAcceleration(); } - pd.taxiFuelPilotEntry.set(null); + pd.taxiFuel.set(null); + pd.taxiFuelIsPilotEntered.set(false); pd.routeReserveFuelWeightPilotEntry.set(null); pd.routeReserveFuelPercentagePilotEntry.set(0); pd.routeReserveFuelWeightCalculated.set(0); @@ -988,18 +989,14 @@ export class FlightManagementComputer implements FmcInterface { } this.acInterface.updateIlsCourse(this.navigation.getNavaidTuner().getMmrRadioTuningStatus(1)); - if (!this.enginesWereStarted.get()) { - const flightPhase = this.fmgc.getFlightPhase(); - const oneEngineWasStarted = - SimVar.GetSimVarValue('L:A32NX_ENGINE_N2:1', 'percent') > 20 || - SimVar.GetSimVarValue('L:A32NX_ENGINE_N2:2', 'percent') > 20 || - SimVar.GetSimVarValue('L:A32NX_ENGINE_N2:3', 'percent') > 20 || - SimVar.GetSimVarValue('L:A32NX_ENGINE_N2:4', 'percent') > 20; - this.enginesWereStarted.set( - flightPhase >= FmgcFlightPhase.Takeoff || - (flightPhase === FmgcFlightPhase.Preflight && oneEngineWasStarted), - ); - } + const flightPhase = this.flightPhase.get(); + this.enginesWereStarted.set( + flightPhase >= FmgcFlightPhase.Takeoff || + (flightPhase == FmgcFlightPhase.Preflight && SimVar.GetSimVarValue('L:A32NX_ENGINE_N2:1', 'number') > 20) || + SimVar.GetSimVarValue('L:A32NX_ENGINE_N2:2', 'number') > 20 || + SimVar.GetSimVarValue('L:A32NX_ENGINE_N2:3', 'number') > 20 || + SimVar.GetSimVarValue('L:A32NX_ENGINE_N2:4', 'number') > 20, + ); } this.checkGWParams(); this.updateMessageQueue(); diff --git a/fbw-a380x/src/systems/instruments/src/MFD/FMC/fmgc.ts b/fbw-a380x/src/systems/instruments/src/MFD/FMC/fmgc.ts index 1207cbaa2d7..78813f5d91b 100644 --- a/fbw-a380x/src/systems/instruments/src/MFD/FMC/fmgc.ts +++ b/fbw-a380x/src/systems/instruments/src/MFD/FMC/fmgc.ts @@ -91,14 +91,9 @@ export class FmgcData { public readonly blockFuel = Subject.create(null); /** in kg. null if not set. */ - public readonly taxiFuelPilotEntry = Subject.create(null); + public readonly taxiFuel = Subject.create(AirlineModifiableInformation.EK.taxiFuel); - /** in kg */ - public readonly taxiFuel = this.taxiFuelPilotEntry.map((it) => - it === null ? AirlineModifiableInformation.EK.taxiFuel : it, - ); - - public readonly taxiFuelIsPilotEntered = this.taxiFuelPilotEntry.map((it) => it !== null); + public readonly taxiFuelIsPilotEntered = Subject.create(false); /** in kg. null if not set. */ public readonly routeReserveFuelWeightPilotEntry = Subject.create(null); diff --git a/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/MfdFmsFuelLoad.tsx b/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/MfdFmsFuelLoad.tsx index 930b55bf6b2..e4bd8896338 100644 --- a/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/MfdFmsFuelLoad.tsx +++ b/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/MfdFmsFuelLoad.tsx @@ -281,9 +281,9 @@ export class MfdFmsFuelLoad extends FmsPage {
dataEntryFormat={new WeightFormat(Subject.create(0), Subject.create(maxTaxiFuel))} - dataHandlerDuringValidation={async (v) => - this.props.fmcService.master?.fmgc.data.taxiFuelPilotEntry.set(v) - } + dataHandlerDuringValidation={async (v) => { + this.props.fmcService.master?.fmgc.data.taxiFuelIsPilotEntered.set(v !== null); + }} enteredByPilot={this.props.fmcService.master.fmgc.data.taxiFuelIsPilotEntered} value={this.props.fmcService.master.fmgc.data.taxiFuel} disabled={this.activeFlightPhase.map((it) => it >= FmgcFlightPhase.Takeoff)} From ffe3d99f173ae9c95060ee431607d6bf3b585568 Mon Sep 17 00:00:00 2001 From: BravoMike99 <119708186+BravoMike99@users.noreply.github.com> Date: Sun, 19 Jan 2025 19:18:24 +0000 Subject: [PATCH 4/8] fix(mfd): block fuel reset, dont allow taxi fuel delete --- .../src/MFD/FMC/FlightManagementComputer.ts | 4 ++-- .../src/MFD/FMC/FmcAircraftInterface.ts | 4 ++-- .../src/systems/instruments/src/MFD/FMC/fmgc.ts | 16 ++++++++++++---- .../src/MFD/pages/FMS/MfdFmsFuelLoad.tsx | 2 +- 4 files changed, 17 insertions(+), 9 deletions(-) diff --git a/fbw-a380x/src/systems/instruments/src/MFD/FMC/FlightManagementComputer.ts b/fbw-a380x/src/systems/instruments/src/MFD/FMC/FlightManagementComputer.ts index b40f26f16d8..58acde98f27 100644 --- a/fbw-a380x/src/systems/instruments/src/MFD/FMC/FlightManagementComputer.ts +++ b/fbw-a380x/src/systems/instruments/src/MFD/FMC/FlightManagementComputer.ts @@ -694,8 +694,8 @@ export class FlightManagementComputer implements FmcInterface { this.acInterface.updateThrustReductionAcceleration(); } - pd.taxiFuel.set(null); - pd.taxiFuelIsPilotEntered.set(false); + pd.taxiFuelPilotEntry.set(null); + pd.defaultTaxiFuel.set(null); pd.routeReserveFuelWeightPilotEntry.set(null); pd.routeReserveFuelPercentagePilotEntry.set(0); pd.routeReserveFuelWeightCalculated.set(0); diff --git a/fbw-a380x/src/systems/instruments/src/MFD/FMC/FmcAircraftInterface.ts b/fbw-a380x/src/systems/instruments/src/MFD/FMC/FmcAircraftInterface.ts index d2e09fa33e5..4e528df54c6 100644 --- a/fbw-a380x/src/systems/instruments/src/MFD/FMC/FmcAircraftInterface.ts +++ b/fbw-a380x/src/systems/instruments/src/MFD/FMC/FmcAircraftInterface.ts @@ -813,7 +813,7 @@ export class FmcAircraftInterface { case FmgcFlightPhase.GoAround: { if (this.fmaVerticalMode.get() === VerticalMode.SRS_GA) { const speed = Math.min( - this.fmgc.data.approachVls.get() + (engineOut ? 15 : 25), + this.fmgc.data.approachVls.get() ?? Infinity + (engineOut ? 15 : 25), Math.max( SimVar.GetSimVarValue('L:A32NX_GOAROUND_INIT_SPEED', 'number'), this.fmgc.data.approachSpeed.get() ?? 0, @@ -1233,7 +1233,7 @@ export class FmcAircraftInterface { SimVar.SetSimVarValue('L:A32NX_FM_GROSS_WEIGHT', 'Number', gw); } - if (this.fmc.enginesWereStarted.get()) { + if (this.fmc.enginesWereStarted.get() && this.flightPhase.get() !== FmgcFlightPhase.Done) { this.fmc.fmgc.data.blockFuel.set(this.fmc.fmgc.getFOB() * 1_000); } } diff --git a/fbw-a380x/src/systems/instruments/src/MFD/FMC/fmgc.ts b/fbw-a380x/src/systems/instruments/src/MFD/FMC/fmgc.ts index 78813f5d91b..ccc1a808639 100644 --- a/fbw-a380x/src/systems/instruments/src/MFD/FMC/fmgc.ts +++ b/fbw-a380x/src/systems/instruments/src/MFD/FMC/fmgc.ts @@ -91,9 +91,17 @@ export class FmgcData { public readonly blockFuel = Subject.create(null); /** in kg. null if not set. */ - public readonly taxiFuel = Subject.create(AirlineModifiableInformation.EK.taxiFuel); + public readonly taxiFuelPilotEntry = Subject.create(null); - public readonly taxiFuelIsPilotEntered = Subject.create(false); + public readonly taxiFuelIsPilotEntered = this.taxiFuelPilotEntry.map((v) => v !== null); + + public readonly defaultTaxiFuel = Subject.create(AirlineModifiableInformation.EK.taxiFuel); + + public readonly taxiFuel = MappedSubject.create( + ([pilotEntryTaxiFuel, defaultTaxiFuel]) => (pilotEntryTaxiFuel !== null ? pilotEntryTaxiFuel : defaultTaxiFuel), + this.taxiFuelPilotEntry, + this.defaultTaxiFuel, + ); /** in kg. null if not set. */ public readonly routeReserveFuelWeightPilotEntry = Subject.create(null); @@ -299,11 +307,11 @@ export class FmgcData { /** in feet. null if not set. */ public readonly approachRadioMinimum = Subject.create(null); - public readonly approachVref = Subject.create(129); + public readonly approachVref = Subject.create(null); public readonly approachFlapConfig = Subject.create(FlapConf.CONF_FULL); - public readonly approachVls = Subject.create(134); + public readonly approachVls = Subject.create(null); /** * Estimated take-off time, in seconds. Displays as HH:mm:ss. Null if not set diff --git a/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/MfdFmsFuelLoad.tsx b/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/MfdFmsFuelLoad.tsx index e4bd8896338..afe818b9542 100644 --- a/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/MfdFmsFuelLoad.tsx +++ b/fbw-a380x/src/systems/instruments/src/MFD/pages/FMS/MfdFmsFuelLoad.tsx @@ -282,7 +282,7 @@ export class MfdFmsFuelLoad extends FmsPage { dataEntryFormat={new WeightFormat(Subject.create(0), Subject.create(maxTaxiFuel))} dataHandlerDuringValidation={async (v) => { - this.props.fmcService.master?.fmgc.data.taxiFuelIsPilotEntered.set(v !== null); + this.props.fmcService.master?.fmgc.data.taxiFuelPilotEntry.set(v); }} enteredByPilot={this.props.fmcService.master.fmgc.data.taxiFuelIsPilotEntered} value={this.props.fmcService.master.fmgc.data.taxiFuel} From 4892cb1fb350cd7bfc7d8f6f3f22e7faf6e32edb Mon Sep 17 00:00:00 2001 From: BravoMike99 <119708186+BravoMike99@users.noreply.github.com> Date: Sun, 19 Jan 2025 19:20:03 +0000 Subject: [PATCH 5/8] docs: add changelog entry --- .github/CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/CHANGELOG.md b/.github/CHANGELOG.md index c9586f56c19..ea84695ffce 100644 --- a/.github/CHANGELOG.md +++ b/.github/CHANGELOG.md @@ -130,6 +130,7 @@ 1. [A32NX/FMS] Sort instrument procedures for display on the MCDU - @tracernz (Mike) 1. [A380X/ELEC] Various fixes in the electrical system (battery voltage indicator switchup, AC GND SVC BUS and correct behavior of battery contactors) - @Gurgel100 (Pascal) 1. [A380X/FMS] Use cruise mach above crossover altitude - @flogross89 (floridude) +1. [A380X/MFD] Fix wrong Landing weight calculation & block fuel not editable across flights in FUEL & LOAD - @BravoMike99 (bruno_pt99) ## 0.12.0 From 04bd37a673b431664b617a3772d77dede957f21c Mon Sep 17 00:00:00 2001 From: BravoMike99 <119708186+BravoMike99@users.noreply.github.com> Date: Sun, 19 Jan 2025 21:25:46 +0000 Subject: [PATCH 6/8] fix lint --- .../systems/instruments/src/MFD/FMC/FlightManagementComputer.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fbw-a380x/src/systems/instruments/src/MFD/FMC/FlightManagementComputer.ts b/fbw-a380x/src/systems/instruments/src/MFD/FMC/FlightManagementComputer.ts index 58acde98f27..339a8a90437 100644 --- a/fbw-a380x/src/systems/instruments/src/MFD/FMC/FlightManagementComputer.ts +++ b/fbw-a380x/src/systems/instruments/src/MFD/FMC/FlightManagementComputer.ts @@ -405,7 +405,7 @@ export class FlightManagementComputer implements FmcInterface { if (this.flightPhase.get() === FmgcFlightPhase.Preflight) { // EXTRA = BLOCK - TAXI - TRIP - MIN FUEL DEST - RTE RSV return ( - (this.enginesWereStarted.get() ? this.fmgc.getFOB() * 1_000 : (this.fmgc.data.blockFuel.get() ?? 0)) - + (this.enginesWereStarted.get() ? this.fmgc.getFOB() * 1_000 : this.fmgc.data.blockFuel.get() ?? 0) - (this.fmgc.data.taxiFuel.get() ?? 0) - (this.getTripFuel() ?? 0) - (this.fmgc.data.minimumFuelAtDestination.get() ?? 0) - From 4e87f5ac0bcd0b72e8e997120f9ce5935747c4a5 Mon Sep 17 00:00:00 2001 From: BravoMike99 <119708186+BravoMike99@users.noreply.github.com> Date: Mon, 20 Jan 2025 20:50:14 +0000 Subject: [PATCH 7/8] docs: remove inop rte rsv --- fbw-a380x/src/systems/instruments/src/MFD/pages/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fbw-a380x/src/systems/instruments/src/MFD/pages/README.md b/fbw-a380x/src/systems/instruments/src/MFD/pages/README.md index 6b57cd9ef3d..30932f61add 100644 --- a/fbw-a380x/src/systems/instruments/src/MFD/pages/README.md +++ b/fbw-a380x/src/systems/instruments/src/MFD/pages/README.md @@ -15,7 +15,7 @@ Status legend: | Status | URI | Sprint/Prio | Missing functionality | | ------------- | ------------- | ------------- | ------------- | | ✅ | fms/\*/init | 1 | CPNY WIND REQUEST, RTE SEL, ALTN RTE SEL, CPNY T.O REQUEST | -| ✅ | fms/\*/fuel-load | 1 | RTE RSV, correct fuel calculation, FUEL PLANNING | +| ✅ | fms/\*/fuel-load | 1 | correct fuel calculation, FUEL PLANNING | | ✅ | fms/\*/perf | 1 | OPT FL, REC MAX, EO behavior, display of type of speed restriction (when MANAGED), PRED TO | | | | | | | ✅ | fms/\*/f-pln | 1 | F-PLN INFO button, exit of hold not possible via button | From 40338fa0254b16c13f426b3e67565df05cd01b2c Mon Sep 17 00:00:00 2001 From: BravoMike99 <119708186+BravoMike99@users.noreply.github.com> Date: Thu, 23 Jan 2025 20:53:24 +0000 Subject: [PATCH 8/8] change enginesWereStarted order to before weight check --- .../src/MFD/FMC/FlightManagementComputer.ts | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/fbw-a380x/src/systems/instruments/src/MFD/FMC/FlightManagementComputer.ts b/fbw-a380x/src/systems/instruments/src/MFD/FMC/FlightManagementComputer.ts index 339a8a90437..b64cce86105 100644 --- a/fbw-a380x/src/systems/instruments/src/MFD/FMC/FlightManagementComputer.ts +++ b/fbw-a380x/src/systems/instruments/src/MFD/FMC/FlightManagementComputer.ts @@ -966,6 +966,15 @@ export class FlightManagementComputer implements FmcInterface { if (throttledDt !== -1) { this.navigation.update(throttledDt); if (this.flightPlanService.hasActive) { + const flightPhase = this.flightPhase.get(); + this.enginesWereStarted.set( + flightPhase >= FmgcFlightPhase.Takeoff || + (flightPhase == FmgcFlightPhase.Preflight && SimVar.GetSimVarValue('L:A32NX_ENGINE_N2:1', 'number') > 20) || + SimVar.GetSimVarValue('L:A32NX_ENGINE_N2:2', 'number') > 20 || + SimVar.GetSimVarValue('L:A32NX_ENGINE_N2:3', 'number') > 20 || + SimVar.GetSimVarValue('L:A32NX_ENGINE_N2:4', 'number') > 20, + ); + this.acInterface.updateThrustReductionAcceleration(); this.acInterface.updateTransitionAltitudeLevel(); this.acInterface.updatePerformanceData(); @@ -988,15 +997,6 @@ export class FlightManagementComputer implements FmcInterface { this.acInterface.updateMinimums(destPred.distanceFromAircraft); } this.acInterface.updateIlsCourse(this.navigation.getNavaidTuner().getMmrRadioTuningStatus(1)); - - const flightPhase = this.flightPhase.get(); - this.enginesWereStarted.set( - flightPhase >= FmgcFlightPhase.Takeoff || - (flightPhase == FmgcFlightPhase.Preflight && SimVar.GetSimVarValue('L:A32NX_ENGINE_N2:1', 'number') > 20) || - SimVar.GetSimVarValue('L:A32NX_ENGINE_N2:2', 'number') > 20 || - SimVar.GetSimVarValue('L:A32NX_ENGINE_N2:3', 'number') > 20 || - SimVar.GetSimVarValue('L:A32NX_ENGINE_N2:4', 'number') > 20, - ); } this.checkGWParams(); this.updateMessageQueue();