From 109f62d156a10aaa88f75566c444751710731577 Mon Sep 17 00:00:00 2001 From: Bulent Date: Thu, 9 Jan 2025 20:33:37 +0000 Subject: [PATCH 1/3] fix:add condition to check if a380 to pick correct ident --- .../fmgc/src/guidance/GuidanceController.ts | 2 +- .../fmgc/src/guidance/lnav/PseudoWaypoints.ts | 15 +++++++++++---- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/fbw-a32nx/src/systems/fmgc/src/guidance/GuidanceController.ts b/fbw-a32nx/src/systems/fmgc/src/guidance/GuidanceController.ts index c5a975230df..0fdd561e0e7 100644 --- a/fbw-a32nx/src/systems/fmgc/src/guidance/GuidanceController.ts +++ b/fbw-a32nx/src/systems/fmgc/src/guidance/GuidanceController.ts @@ -306,7 +306,7 @@ export class GuidanceController { this.windProfileFactory, this.acConfig, ); - this.pseudoWaypoints = new PseudoWaypoints(flightPlanService, this, this.atmosphericConditions); + this.pseudoWaypoints = new PseudoWaypoints(flightPlanService, this, this.atmosphericConditions, this.acConfig); this.efisVectors = new EfisVectors(this.bus, this.flightPlanService, this, efisInterfaces); this.symbolConfig = acConfig.fmSymbolConfig; } diff --git a/fbw-a32nx/src/systems/fmgc/src/guidance/lnav/PseudoWaypoints.ts b/fbw-a32nx/src/systems/fmgc/src/guidance/lnav/PseudoWaypoints.ts index 5cab0d62d46..54d9343183a 100644 --- a/fbw-a32nx/src/systems/fmgc/src/guidance/lnav/PseudoWaypoints.ts +++ b/fbw-a32nx/src/systems/fmgc/src/guidance/lnav/PseudoWaypoints.ts @@ -16,11 +16,13 @@ import { LateralMode } from '@shared/autopilot'; import { FlightPlanService } from '@fmgc/flightplanning/FlightPlanService'; import { VerticalCheckpoint, VerticalCheckpointReason } from '@fmgc/guidance/vnav/profile/NavGeometryProfile'; import { AtmosphericConditions } from '@fmgc/guidance/vnav/AtmosphericConditions'; +import { AircraftConfig } from '@fmgc/flightplanning/AircraftConfigTypes'; const PWP_IDENT_TOC = '(T/C)'; const PWP_IDENT_STEP_CLIMB = '(S/C)'; const PWP_IDENT_STEP_DESCENT = '(S/D)'; const PWP_IDENT_SPD_LIM = '(LIM)'; +const PWP_IDENT_SPD_LIM_A380 = '(SPDLIM)'; const PWP_IDENT_TOD = '(T/D)'; const PWP_IDENT_DECEL = '(DECEL)'; const PWP_IDENT_FLAP1 = '(FLAP1)'; @@ -82,6 +84,7 @@ export class PseudoWaypoints implements GuidanceComponent { private readonly flightPlanService: FlightPlanService, private readonly guidanceController: GuidanceController, private readonly atmosphericConditions: AtmosphericConditions, + private readonly acConfig: AircraftConfig, ) {} acceptVerticalProfile() { @@ -368,6 +371,10 @@ export class PseudoWaypoints implements GuidanceComponent { ): PseudoWaypoint | undefined { let [efisSymbolLla, distanceFromLegTermination, alongLegIndex] = [undefined, undefined, undefined]; + const numberOfEngines = this.acConfig.engineModelParameters.numberOfEngines; + const isA380 = numberOfEngines === 4; + console.log('[FMS/PWP] Aircraft config:', this.acConfig); + const isLatAutoControlArmedOrActive = this.guidanceController.vnavDriver.isLatAutoControlActive() || this.guidanceController.vnavDriver.isLatAutoControlArmedWithIntercept(); @@ -412,27 +419,27 @@ export class PseudoWaypoints implements GuidanceComponent { }; case VerticalCheckpointReason.CrossingClimbSpeedLimit: return { - ident: PWP_IDENT_SPD_LIM, + ident: isA380 ? PWP_IDENT_SPD_LIM_A380 : PWP_IDENT_SPD_LIM, alongLegIndex, distanceFromLegTermination, efisSymbolFlag: 0, // Since this is not shown on the ND, it does not need a symbol efisSymbolLla, distanceFromStart: checkpoint.distanceFromStart, displayedOnMcdu: true, - mcduHeader: '\xa0(SPD)', + mcduHeader: isA380 ? null : '\xa0(SPD)', flightPlanInfo: this.formatFlightPlanInfo(checkpoint), displayedOnNd: false, }; case VerticalCheckpointReason.CrossingDescentSpeedLimit: return { - ident: PWP_IDENT_SPD_LIM, + ident: isA380 ? PWP_IDENT_SPD_LIM_A380 : PWP_IDENT_SPD_LIM, alongLegIndex, distanceFromLegTermination, efisSymbolFlag: 0, // Since this is not shown on the ND, it does not need a symbol efisSymbolLla, distanceFromStart: checkpoint.distanceFromStart, displayedOnMcdu: true, - mcduHeader: '\xa0(SPD)', + mcduHeader: isA380 ? null : '\xa0(SPD)', flightPlanInfo: this.formatFlightPlanInfo(checkpoint), displayedOnNd: false, }; From 3c4c897c561226b28f9e6d88281942323b19d607 Mon Sep 17 00:00:00 2001 From: Bulent Date: Thu, 9 Jan 2025 22:18:15 +0000 Subject: [PATCH 2/3] add new attribute LIM_PSEUDO_WPT_LABEL to VnavConfig --- .../fmgc/src/flightplanning/A320AircraftConfig.ts | 1 + .../fmgc/src/flightplanning/A380AircraftConfig.ts | 1 + .../src/flightplanning/AircraftConfigTypes.ts | 7 +++++++ .../fmgc/src/guidance/lnav/PseudoWaypoints.ts | 15 ++++++--------- 4 files changed, 15 insertions(+), 9 deletions(-) diff --git a/fbw-a32nx/src/systems/fmgc/src/flightplanning/A320AircraftConfig.ts b/fbw-a32nx/src/systems/fmgc/src/flightplanning/A320AircraftConfig.ts index fed392d3008..e5cbea3c801 100644 --- a/fbw-a32nx/src/systems/fmgc/src/flightplanning/A320AircraftConfig.ts +++ b/fbw-a32nx/src/systems/fmgc/src/flightplanning/A320AircraftConfig.ts @@ -28,6 +28,7 @@ const vnavConfig: VnavConfig = { VNAV_USE_LATCHED_DESCENT_MODE: false, IDLE_N1_MARGIN: 2, MAXIMUM_FUEL_ESTIMATE: 40000, + LIM_PSEUDO_WPT_LABEL: '(LIM)', }; const flightModelParams: FlightModelParameters = { diff --git a/fbw-a32nx/src/systems/fmgc/src/flightplanning/A380AircraftConfig.ts b/fbw-a32nx/src/systems/fmgc/src/flightplanning/A380AircraftConfig.ts index ec33f0fab8f..4dc5af16d3c 100644 --- a/fbw-a32nx/src/systems/fmgc/src/flightplanning/A380AircraftConfig.ts +++ b/fbw-a32nx/src/systems/fmgc/src/flightplanning/A380AircraftConfig.ts @@ -28,6 +28,7 @@ const vnavConfig: VnavConfig = { VNAV_USE_LATCHED_DESCENT_MODE: false, IDLE_N1_MARGIN: 3, MAXIMUM_FUEL_ESTIMATE: 250_000, + LIM_PSEUDO_WPT_LABEL: '(SPDLIM)', }; const flightModelParams: FlightModelParameters = { diff --git a/fbw-a32nx/src/systems/fmgc/src/flightplanning/AircraftConfigTypes.ts b/fbw-a32nx/src/systems/fmgc/src/flightplanning/AircraftConfigTypes.ts index 975bef42ffb..06075e873ce 100644 --- a/fbw-a32nx/src/systems/fmgc/src/flightplanning/AircraftConfigTypes.ts +++ b/fbw-a32nx/src/systems/fmgc/src/flightplanning/AircraftConfigTypes.ts @@ -63,6 +63,13 @@ export interface VnavConfig { * This value is in lbs. */ MAXIMUM_FUEL_ESTIMATE: number; + + /** + * Label used for pseudo-waypoints that mark where the aircraft crosses + * climb/descent speed limit altitudes. + * Configurable since different Airbus aircraft use different labels (e.g. A320 vs A380). + */ + LIM_PSEUDO_WPT_LABEL: '(LIM)' | '(SPDLIM)'; } /** Only covers aircraft specific configs, no debug switches */ diff --git a/fbw-a32nx/src/systems/fmgc/src/guidance/lnav/PseudoWaypoints.ts b/fbw-a32nx/src/systems/fmgc/src/guidance/lnav/PseudoWaypoints.ts index 54d9343183a..f6c87b663d3 100644 --- a/fbw-a32nx/src/systems/fmgc/src/guidance/lnav/PseudoWaypoints.ts +++ b/fbw-a32nx/src/systems/fmgc/src/guidance/lnav/PseudoWaypoints.ts @@ -21,8 +21,6 @@ import { AircraftConfig } from '@fmgc/flightplanning/AircraftConfigTypes'; const PWP_IDENT_TOC = '(T/C)'; const PWP_IDENT_STEP_CLIMB = '(S/C)'; const PWP_IDENT_STEP_DESCENT = '(S/D)'; -const PWP_IDENT_SPD_LIM = '(LIM)'; -const PWP_IDENT_SPD_LIM_A380 = '(SPDLIM)'; const PWP_IDENT_TOD = '(T/D)'; const PWP_IDENT_DECEL = '(DECEL)'; const PWP_IDENT_FLAP1 = '(FLAP1)'; @@ -371,9 +369,8 @@ export class PseudoWaypoints implements GuidanceComponent { ): PseudoWaypoint | undefined { let [efisSymbolLla, distanceFromLegTermination, alongLegIndex] = [undefined, undefined, undefined]; - const numberOfEngines = this.acConfig.engineModelParameters.numberOfEngines; - const isA380 = numberOfEngines === 4; - console.log('[FMS/PWP] Aircraft config:', this.acConfig); + const PWP_IDENT_SPD_LIM = this.acConfig.vnavConfig.LIM_PSEUDO_WPT_LABEL; + const PWP_SPD_LIM_HEADER = PWP_IDENT_SPD_LIM === '(LIM)' ? '\xa0(SPD)' : undefined; const isLatAutoControlArmedOrActive = this.guidanceController.vnavDriver.isLatAutoControlActive() || @@ -419,27 +416,27 @@ export class PseudoWaypoints implements GuidanceComponent { }; case VerticalCheckpointReason.CrossingClimbSpeedLimit: return { - ident: isA380 ? PWP_IDENT_SPD_LIM_A380 : PWP_IDENT_SPD_LIM, + ident: PWP_IDENT_SPD_LIM, alongLegIndex, distanceFromLegTermination, efisSymbolFlag: 0, // Since this is not shown on the ND, it does not need a symbol efisSymbolLla, distanceFromStart: checkpoint.distanceFromStart, displayedOnMcdu: true, - mcduHeader: isA380 ? null : '\xa0(SPD)', + mcduHeader: PWP_SPD_LIM_HEADER, flightPlanInfo: this.formatFlightPlanInfo(checkpoint), displayedOnNd: false, }; case VerticalCheckpointReason.CrossingDescentSpeedLimit: return { - ident: isA380 ? PWP_IDENT_SPD_LIM_A380 : PWP_IDENT_SPD_LIM, + ident: PWP_IDENT_SPD_LIM, alongLegIndex, distanceFromLegTermination, efisSymbolFlag: 0, // Since this is not shown on the ND, it does not need a symbol efisSymbolLla, distanceFromStart: checkpoint.distanceFromStart, displayedOnMcdu: true, - mcduHeader: isA380 ? null : '\xa0(SPD)', + mcduHeader: PWP_SPD_LIM_HEADER, flightPlanInfo: this.formatFlightPlanInfo(checkpoint), displayedOnNd: false, }; From 75e7ed90283b340471dc364050120d094a2315f9 Mon Sep 17 00:00:00 2001 From: Bulent Date: Thu, 9 Jan 2025 22:31:25 +0000 Subject: [PATCH 3/3] update changelog --- .github/CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/CHANGELOG.md b/.github/CHANGELOG.md index 8da4fccd49e..1cdad71d82b 100644 --- a/.github/CHANGELOG.md +++ b/.github/CHANGELOG.md @@ -114,6 +114,7 @@ 1. [A380X/MFD] Fixed the altitude prediction not rounding to the nearest 10 on the FPLN page - @bulenteroglu (senolitam) 1. [A380X/MFD] Use slashed zero as default font for FMS pages - @bulenteroglu (senolitam) 1. [A380X/ND] Remove leading zeros from terrain elevation display - @BravoMike99 (bruno_pt99) +1. [A380X/MFD] Fixed the crossing climb/descent speed limit pseudo-waypoint label on the A380X - @bulenteroglu (senolitam) ## 0.12.0