From 79acc307c0dc9d667b578a66aebf863e2a2af88b Mon Sep 17 00:00:00 2001 From: Denis Freund Date: Fri, 16 Feb 2024 10:58:50 +0100 Subject: [PATCH 01/18] refactor: aircraft type check fixes 8499 add simvar description fix simvar docs --- fbw-a32nx/docs/a320-simvars.md | 28 ++++++++++++------- .../fmgc/src/components/ReadySignal.ts | 2 ++ .../EFB/Dashboard/Widgets/FlightWidget.tsx | 2 +- .../src/systems/instruments/src/EFB/Efb.tsx | 18 +++++++++--- .../src/EFB/Ground/Pages/Payload/Payload.tsx | 6 ++-- .../src/EFB/Ground/Pages/ServicesPage.tsx | 5 ++-- .../ThrottleConfig/ThrottleConfig.tsx | 18 ++++++------ .../systems/shared/src/aircraftTypeCheck.ts | 24 +++++++++++----- 8 files changed, 67 insertions(+), 36 deletions(-) diff --git a/fbw-a32nx/docs/a320-simvars.md b/fbw-a32nx/docs/a320-simvars.md index ba6b32cc867..956b06910e3 100644 --- a/fbw-a32nx/docs/a320-simvars.md +++ b/fbw-a32nx/docs/a320-simvars.md @@ -26,6 +26,14 @@ ## Uncategorized +- A32NX_AIRCRAFT_TYPE + - Enum + - Indicates the aircraft type + Aircraft | Value + --- | --- + A320_251N | 0 + A380_842 | 1 + - A32NX_IS_READY - Bool - Indicates that the JavaScript part is ready @@ -42,16 +50,16 @@ - A32NX_START_STATE - Enum - Indicates the state in which MSFS started - - State | Value - --- | --- - Hangar | 1 - Apron | 2 - Taxi | 3 - Runway | 4 - Climb | 5 - Cruise | 6 - Approach | 7 - Final | 8 + State | Value + --- | --- + Hangar | 1 + Apron | 2 + Taxi | 3 + Runway | 4 + Climb | 5 + Cruise | 6 + Approach | 7 + Final | 8 - A32NX_NO_SMOKING_MEMO - Boolean that determines whether the NO SMOKING memo should be visible on the upper ECAM diff --git a/fbw-a32nx/src/systems/fmgc/src/components/ReadySignal.ts b/fbw-a32nx/src/systems/fmgc/src/components/ReadySignal.ts index ad4643a31b6..1795d07fc9f 100644 --- a/fbw-a32nx/src/systems/fmgc/src/components/ReadySignal.ts +++ b/fbw-a32nx/src/systems/fmgc/src/components/ReadySignal.ts @@ -1,5 +1,6 @@ import { FlightPlanManager } from '@fmgc/wtsdk'; import { FmgcComponent } from './FmgcComponent'; +import { AircraftType } from '@flybywiresim/fbw-sdk'; export class ReadySignal implements FmgcComponent { private baseInstrument: BaseInstrument = null; @@ -16,6 +17,7 @@ export class ReadySignal implements FmgcComponent { && SimVar.GetSimVarValue('L:A32NX_IS_READY', 'number') !== 1) { // set ready signal that JS code is initialized and flight is actually started // -> user pressed 'READY TO FLY' button + SimVar.SetSimVarValue('L:A32NX_AIRCRAFT_TYPE', 'enum', AircraftType.A320_251N); SimVar.SetSimVarValue('L:A32NX_IS_READY', 'number', 1); } } diff --git a/fbw-a32nx/src/systems/instruments/src/EFB/Dashboard/Widgets/FlightWidget.tsx b/fbw-a32nx/src/systems/instruments/src/EFB/Dashboard/Widgets/FlightWidget.tsx index 645224e4fac..6c5f2b923fc 100644 --- a/fbw-a32nx/src/systems/instruments/src/EFB/Dashboard/Widgets/FlightWidget.tsx +++ b/fbw-a32nx/src/systems/instruments/src/EFB/Dashboard/Widgets/FlightWidget.tsx @@ -6,7 +6,7 @@ import React, { useState } from 'react'; import { IconPlane } from '@tabler/icons'; import { CloudArrowDown } from 'react-bootstrap-icons'; -import { usePersistentProperty } from '@flybywiresim/fbw-sdk'; +import { AircraftType, usePersistentProperty } from '@flybywiresim/fbw-sdk'; import { toast } from 'react-toastify'; import { fetchSimbriefDataAction, isSimbriefDataLoaded } from '../../Store/features/simBrief'; import { useAppSelector, useAppDispatch } from '../../Store/store'; diff --git a/fbw-a32nx/src/systems/instruments/src/EFB/Efb.tsx b/fbw-a32nx/src/systems/instruments/src/EFB/Efb.tsx index 0f9ca8c1882..f32910ec7da 100644 --- a/fbw-a32nx/src/systems/instruments/src/EFB/Efb.tsx +++ b/fbw-a32nx/src/systems/instruments/src/EFB/Efb.tsx @@ -2,7 +2,7 @@ // SPDX-License-Identifier: GPL-3.0 import React, { useEffect, useState } from 'react'; -import { useSimVar, useInterval, useInteractionEvent, usePersistentNumberProperty, usePersistentProperty, NavigraphClient } from '@flybywiresim/fbw-sdk'; +import { useSimVar, useInterval, useInteractionEvent, usePersistentNumberProperty, usePersistentProperty, NavigraphClient, AircraftType } from '@flybywiresim/fbw-sdk'; import { Redirect, Route, Switch, useHistory } from 'react-router-dom'; import { Battery } from 'react-bootstrap-icons'; import { toast, ToastContainer } from 'react-toastify'; @@ -73,9 +73,19 @@ interface BatteryStatus { export const usePower = () => React.useContext(PowerContext); // this returns either `A380_842` or `A320_251N` depending on the aircraft -export const getAirframeType = () => new URL( - document.querySelectorAll('vcockpit-panel > *')[0].getAttribute('url'), -).searchParams.get('Airframe'); +export function getAirframeType(): AircraftType { + const airframe = new URL( + document.querySelectorAll('vcockpit-panel > *')[0].getAttribute('url') + ).searchParams.get('Airframe'); + + switch (airframe) { + case 'A320_251N': + return AircraftType.A320_251N; + case 'A380_842': + return AircraftType.A380_842; + } +} + const Efb = () => { const [powerState, setPowerState] = useState(PowerStates.SHUTOFF); diff --git a/fbw-a32nx/src/systems/instruments/src/EFB/Ground/Pages/Payload/Payload.tsx b/fbw-a32nx/src/systems/instruments/src/EFB/Ground/Pages/Payload/Payload.tsx index 8a5138770bd..eff08de287a 100644 --- a/fbw-a32nx/src/systems/instruments/src/EFB/Ground/Pages/Payload/Payload.tsx +++ b/fbw-a32nx/src/systems/instruments/src/EFB/Ground/Pages/Payload/Payload.tsx @@ -4,7 +4,7 @@ /* eslint-disable max-len */ import React, { useState } from 'react'; -import { Units, usePersistentProperty, useSimVar } from '@flybywiresim/fbw-sdk'; +import { AircraftType, Units, usePersistentProperty, useSimVar } from '@flybywiresim/fbw-sdk'; import { getAirframeType } from '../../../Efb'; import { A320Payload } from './A320_251N/A320Payload'; import { A380Payload } from './A380_842/A380Payload'; @@ -28,7 +28,7 @@ export const Payload = () => { const [massUnitForDisplay] = useState(Units.usingMetric ? 'KGS' : 'LBS'); switch (getAirframeType()) { - case 'A380_842': + case AircraftType.A380_842: return ( { setBoardingRate={setBoardingRate} /> ); - case 'A320_251N': + case AircraftType.A320_251N: default: return ( { const [airframe] = useState(getAirframeType()); switch (airframe) { - case 'A380_842': + case AircraftType.A380_842: return ( ); - case 'A320_251N': + case AircraftType.A320_251N: default: return ( diff --git a/fbw-a32nx/src/systems/instruments/src/EFB/Settings/ThrottleConfig/ThrottleConfig.tsx b/fbw-a32nx/src/systems/instruments/src/EFB/Settings/ThrottleConfig/ThrottleConfig.tsx index 8ef39497105..d13621d9f56 100644 --- a/fbw-a32nx/src/systems/instruments/src/EFB/Settings/ThrottleConfig/ThrottleConfig.tsx +++ b/fbw-a32nx/src/systems/instruments/src/EFB/Settings/ThrottleConfig/ThrottleConfig.tsx @@ -3,7 +3,7 @@ /* eslint-disable max-len */ import React, { useEffect, useState } from 'react'; -import { usePersistentNumberProperty, useSimVar } from '@flybywiresim/fbw-sdk'; +import { AircraftType, usePersistentNumberProperty, useSimVar } from '@flybywiresim/fbw-sdk'; import { ExclamationCircleFill } from 'react-bootstrap-icons'; import { getAirframeType } from 'instruments/src/EFB/Efb'; import { t } from '../../translation'; @@ -38,9 +38,9 @@ interface ThrottleConfigProps { export const ThrottleConfig = ({ isShown, onClose }: ThrottleConfigProps) => { const [airframe] = useState(getAirframeType()); - const [axisNum, setAxisNum] = usePersistentNumberProperty('THROTTLE_AXIS', airframe === 'A380_842' ? 4 : 2); + const [axisNum, setAxisNum] = usePersistentNumberProperty('THROTTLE_AXIS', airframe === AircraftType.A380_842 ? 4 : 2); // this makes sure that the axis number is set to 2 when the A320 is selected when previously the A380 with 4 axis was used - if (airframe !== 'A380_842' && axisNum === 4) { + if (airframe !== AircraftType.A380_842 && axisNum === 4) { setAxisNum(2); } @@ -64,10 +64,10 @@ export const ThrottleConfig = ({ isShown, onClose }: ThrottleConfigProps) => { const { showModal } = useModals(); // the number of throttles that are used in the aircraft (2 or 4) - const numberOfThrottles = getAirframeType() === 'A380_842' ? 4 : 2; + const numberOfThrottles = getAirframeType() === AircraftType.A380_842 ? 4 : 2; // this makes sure that the axis number is set to 2 when the A320 is selected when previously the A380 with 4 axis was used - if (airframe !== 'A380_842' && axisNum === 4) { + if (airframe !== AircraftType.A380_842 && axisNum === 4) { setAxisNum(2); } @@ -143,7 +143,7 @@ export const ThrottleConfig = ({ isShown, onClose }: ThrottleConfigProps) => { ...getOverlapErrors(2, throttleTwoSimvars), ]; // to avoid false errors on the A320 when only 2 axis are used - if (airframe === 'A380_842') { + if (airframe === AircraftType.A380_842) { errors.push(...getOverlapErrors(3, throttleThreeSimvars)); errors.push(...getOverlapErrors(4, throttleFourSimvars)); } @@ -233,7 +233,7 @@ export const ThrottleConfig = ({ isShown, onClose }: ThrottleConfigProps) => { > 2 - {airframe === 'A380_842' && ( + {airframe === AircraftType.A380_842 && ( setAxisNum(4)} @@ -351,13 +351,13 @@ export const ThrottleConfig = ({ isShown, onClose }: ThrottleConfigProps) => { const getAxis = () => { switch (axisNum) { case 4: - if (airframe === 'A380_842') { + if (airframe === AircraftType.A380_842) { return fourAxis; } console.warn('A320 does not have 4 axis - defaulting to 2 axis'); return twoAxisA320; case 2: - if (airframe === 'A380_842') { + if (airframe === AircraftType.A380_842) { return twoAxisA380; } return twoAxisA320; diff --git a/fbw-common/src/systems/shared/src/aircraftTypeCheck.ts b/fbw-common/src/systems/shared/src/aircraftTypeCheck.ts index 1b48fe3b144..827c79b209f 100644 --- a/fbw-common/src/systems/shared/src/aircraftTypeCheck.ts +++ b/fbw-common/src/systems/shared/src/aircraftTypeCheck.ts @@ -1,19 +1,29 @@ // Copyright (c) 2023-2024 FlyByWire Simulations // SPDX-License-Identifier: GPL-3.0 +export enum AircraftType { + A320_251N = 0, + A380_842 = 1 +} + /** * Determine the aircraft type using the Aircraft Title SimVar. * @returns {string} - the aircraft type (a32nx, a380x, other) */ export function getAircraftType(): string { - const aircraftName :string = SimVar.GetSimVarValue('TITLE', 'string'); + const aircraftType :AircraftType = SimVar.GetSimVarValue('L:A32NX_AIRCRAFT_TYPE', 'enum'); let aircraft: string; - if (aircraftName.includes('A320')) { - aircraft = 'a32nx'; - } else if (aircraftName.includes('A380')) { - aircraft = 'a380x'; - } else { - aircraft = 'other'; + + switch(aircraftType) { + case AircraftType.A320_251N: + aircraft = 'a32nx'; + break; + case AircraftType.A380_842: + aircraft = 'a380x'; + break; + default: + aircraft = 'other'; } + return aircraft; } From 75de63ed36245a294b5ecd249c70daff8961b498 Mon Sep 17 00:00:00 2001 From: Denis Freund Date: Fri, 16 Feb 2024 12:10:32 +0100 Subject: [PATCH 02/18] lint fix --- .../fmgc/src/components/ReadySignal.ts | 2 +- .../src/systems/instruments/src/EFB/Efb.tsx | 19 +++++++++++-------- .../systems/shared/src/aircraftTypeCheck.ts | 18 +++++++++--------- 3 files changed, 21 insertions(+), 18 deletions(-) diff --git a/fbw-a32nx/src/systems/fmgc/src/components/ReadySignal.ts b/fbw-a32nx/src/systems/fmgc/src/components/ReadySignal.ts index 1795d07fc9f..8820b8ba850 100644 --- a/fbw-a32nx/src/systems/fmgc/src/components/ReadySignal.ts +++ b/fbw-a32nx/src/systems/fmgc/src/components/ReadySignal.ts @@ -1,6 +1,6 @@ +import { AircraftType } from '@flybywiresim/fbw-sdk'; import { FlightPlanManager } from '@fmgc/wtsdk'; import { FmgcComponent } from './FmgcComponent'; -import { AircraftType } from '@flybywiresim/fbw-sdk'; export class ReadySignal implements FmgcComponent { private baseInstrument: BaseInstrument = null; diff --git a/fbw-a32nx/src/systems/instruments/src/EFB/Efb.tsx b/fbw-a32nx/src/systems/instruments/src/EFB/Efb.tsx index f32910ec7da..9fd267c88b0 100644 --- a/fbw-a32nx/src/systems/instruments/src/EFB/Efb.tsx +++ b/fbw-a32nx/src/systems/instruments/src/EFB/Efb.tsx @@ -74,18 +74,21 @@ export const usePower = () => React.useContext(PowerContext); // this returns either `A380_842` or `A320_251N` depending on the aircraft export function getAirframeType(): AircraftType { - const airframe = new URL( - document.querySelectorAll('vcockpit-panel > *')[0].getAttribute('url') - ).searchParams.get('Airframe'); + const airframe = new URL(document.querySelectorAll('vcockpit-panel > *')[0].getAttribute('url')).searchParams.get('Airframe'); + let airframeType: AircraftType; switch (airframe) { - case 'A320_251N': - return AircraftType.A320_251N; - case 'A380_842': - return AircraftType.A380_842; + case 'A380_842': + airframeType = AircraftType.A380_842; + break; + case 'A320_251N': + default: + airframeType = AircraftType.A320_251N; + break; } -} + return airframeType; +} const Efb = () => { const [powerState, setPowerState] = useState(PowerStates.SHUTOFF); diff --git a/fbw-common/src/systems/shared/src/aircraftTypeCheck.ts b/fbw-common/src/systems/shared/src/aircraftTypeCheck.ts index 827c79b209f..065ab23faf1 100644 --- a/fbw-common/src/systems/shared/src/aircraftTypeCheck.ts +++ b/fbw-common/src/systems/shared/src/aircraftTypeCheck.ts @@ -14,15 +14,15 @@ export function getAircraftType(): string { const aircraftType :AircraftType = SimVar.GetSimVarValue('L:A32NX_AIRCRAFT_TYPE', 'enum'); let aircraft: string; - switch(aircraftType) { - case AircraftType.A320_251N: - aircraft = 'a32nx'; - break; - case AircraftType.A380_842: - aircraft = 'a380x'; - break; - default: - aircraft = 'other'; + switch (aircraftType) { + case AircraftType.A320_251N: + aircraft = 'a32nx'; + break; + case AircraftType.A380_842: + aircraft = 'a380x'; + break; + default: + aircraft = 'other'; } return aircraft; From 92c413130479b3ee125ce48f12c6e82cea835f7c Mon Sep 17 00:00:00 2001 From: Denis Freund Date: Fri, 16 Feb 2024 12:33:04 +0100 Subject: [PATCH 03/18] lint fix --- .../systems/instruments/src/EFB/Ground/Pages/ServicesPage.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fbw-a32nx/src/systems/instruments/src/EFB/Ground/Pages/ServicesPage.tsx b/fbw-a32nx/src/systems/instruments/src/EFB/Ground/Pages/ServicesPage.tsx index a964f289fc2..7a41281d75f 100644 --- a/fbw-a32nx/src/systems/instruments/src/EFB/Ground/Pages/ServicesPage.tsx +++ b/fbw-a32nx/src/systems/instruments/src/EFB/Ground/Pages/ServicesPage.tsx @@ -3,10 +3,10 @@ /* eslint-disable no-console */ import React, { useState } from 'react'; +import { AircraftType } from '@flybywiresim/fbw-sdk'; import { A380Services } from './Services/A380_842/A380Services'; import { A320Services } from './Services/A320_251N/A320Services'; import { getAirframeType } from '../../Efb'; -import { AircraftType } from '@flybywiresim/fbw-sdk'; export const ServicesPage = () => { const [airframe] = useState(getAirframeType()); From 1e3f0f0cfd9712c4a83120d7b92873d2aea73224 Mon Sep 17 00:00:00 2001 From: Denis Freund Date: Mon, 19 Feb 2024 10:45:00 +0100 Subject: [PATCH 04/18] add extra-host module for airframe check, remove airframe check from efb --- .../FlyByWire_A320_NEO/panel/panel.cfg | 4 +- fbw-a32nx/src/systems/extras-host/index.ts | 7 +++ .../modules/airframe_check/AirframeCheck.ts | 44 +++++++++++++++++++ .../fmgc/src/components/ReadySignal.ts | 2 - .../EFB/Dashboard/Widgets/FlightWidget.tsx | 4 +- .../src/systems/instruments/src/EFB/Efb.tsx | 20 +-------- .../src/EFB/Ground/Pages/Payload/Payload.tsx | 4 +- .../Pages/Services/A380_842/A380Services.tsx | 1 - .../src/EFB/Ground/Pages/ServicesPage.tsx | 5 +-- .../ThrottleConfig/ThrottleConfig.tsx | 5 +-- .../systems/shared/src/aircraftTypeCheck.ts | 6 ++- 11 files changed, 66 insertions(+), 36 deletions(-) create mode 100644 fbw-a32nx/src/systems/extras-host/modules/airframe_check/AirframeCheck.ts diff --git a/fbw-a32nx/src/base/flybywire-aircraft-a320-neo/SimObjects/AirPlanes/FlyByWire_A320_NEO/panel/panel.cfg b/fbw-a32nx/src/base/flybywire-aircraft-a320-neo/SimObjects/AirPlanes/FlyByWire_A320_NEO/panel/panel.cfg index 2b299cde8ea..033f21c5a4b 100644 --- a/fbw-a32nx/src/base/flybywire-aircraft-a320-neo/SimObjects/AirPlanes/FlyByWire_A320_NEO/panel/panel.cfg +++ b/fbw-a32nx/src/base/flybywire-aircraft-a320-neo/SimObjects/AirPlanes/FlyByWire_A320_NEO/panel/panel.cfg @@ -122,7 +122,7 @@ size_mm = 1430,1000 pixel_size = 1430,1000 texture = $EFB -htmlgauge00 = A32NX/EFB/efb.html?Airframe=A320_251N, 0,0,1430,1000 +htmlgauge00 = A32NX/EFB/efb.html, 0,0,1430,1000 [VCockpit17] size_mm = 0,0 @@ -149,7 +149,7 @@ pixel_size = 0,0 texture = NO_TEXTURE background_color = 0,0,0 -htmlgauge00 = A32NX/ExtrasHost/extras-host.html,0,0,1,1 +htmlgauge00 = A32NX/ExtrasHost/extras-host.html?Airframe=A320_251N,0,0,1,1 [VPainting01] size_mm = 2048,512 diff --git a/fbw-a32nx/src/systems/extras-host/index.ts b/fbw-a32nx/src/systems/extras-host/index.ts index 7eb48aa10c3..246bd97658a 100644 --- a/fbw-a32nx/src/systems/extras-host/index.ts +++ b/fbw-a32nx/src/systems/extras-host/index.ts @@ -7,6 +7,7 @@ import { ExtrasSimVarPublisher } from 'extras-host/modules/common/ExtrasSimVarPu import { PushbuttonCheck } from 'extras-host/modules/pushbutton_check/PushbuttonCheck'; import { KeyInterceptor } from './modules/key_interceptor/KeyInterceptor'; import { VersionCheck } from './modules/version_check/VersionCheck'; +import { AirframeCheck } from './modules/airframe_check/AirframeCheck'; /** * This is the main class for the extras-host instrument. @@ -40,6 +41,8 @@ class ExtrasHost extends BaseInstrument { private readonly keyInterceptor: KeyInterceptor; + private readonly airframeCheck: AirframeCheck; + /** * "mainmenu" = 0 * "loading" = 1 @@ -60,6 +63,7 @@ class ExtrasHost extends BaseInstrument { this.pushbuttonCheck = new PushbuttonCheck(this.bus, this.notificationManager); this.versionCheck = new VersionCheck(this.bus); this.keyInterceptor = new KeyInterceptor(this.bus, this.notificationManager); + this.airframeCheck = new AirframeCheck(this.bus); console.log('A32NX_EXTRASHOST: Created'); } @@ -82,6 +86,7 @@ class ExtrasHost extends BaseInstrument { this.pushbuttonCheck.connectedCallback(); this.versionCheck.connectedCallback(); this.keyInterceptor.connectedCallback(); + this.airframeCheck.connectedCallback(); } public Update(): void { @@ -94,6 +99,7 @@ class ExtrasHost extends BaseInstrument { this.versionCheck.startPublish(); this.keyInterceptor.startPublish(); this.simVarPublisher.startPublish(); + this.airframeCheck.startPublish(); } this.gameState = gs; } else { @@ -102,6 +108,7 @@ class ExtrasHost extends BaseInstrument { this.versionCheck.update(); this.keyInterceptor.update(); + this.airframeCheck.update(); } } diff --git a/fbw-a32nx/src/systems/extras-host/modules/airframe_check/AirframeCheck.ts b/fbw-a32nx/src/systems/extras-host/modules/airframe_check/AirframeCheck.ts new file mode 100644 index 00000000000..e2686516e59 --- /dev/null +++ b/fbw-a32nx/src/systems/extras-host/modules/airframe_check/AirframeCheck.ts @@ -0,0 +1,44 @@ +// Copyright (c) 2022 FlyByWire Simulations +// SPDX-License-Identifier: GPL-3.0 + +import { AircraftType } from '@flybywiresim/fbw-sdk'; +import { EventBus } from '@microsoft/msfs-sdk'; + +/** + * This class is used to check the airframe of the aircraft and set the LVar + */ +export class AirframeCheck { + constructor(private readonly bus: EventBus) { + console.log('AirframeCheck: Created'); + } + + public connectedCallback(): void { + // empty + } + + public startPublish(): void { + console.log('AirframeCheck: startPublish()'); + + const airframe = new URL(document.querySelectorAll('vcockpit-panel > *')[0].getAttribute('url')).searchParams.get('Airframe'); + let aircraftType: AircraftType; + + switch (airframe) { + case 'A380_842': + aircraftType = AircraftType.A380_842; + break; + case 'A320_251N': + aircraftType = AircraftType.A320_251N; + break; + default: + aircraftType = AircraftType.Unknown; + break; + } + + SimVar.SetSimVarValue('L:A32NX_AIRCRAFT_TYPE', 'enum', aircraftType); + console.log(`AirframeCheck: set ${aircraftType}`); + } + + public update(): void { + // empty + } +} diff --git a/fbw-a32nx/src/systems/fmgc/src/components/ReadySignal.ts b/fbw-a32nx/src/systems/fmgc/src/components/ReadySignal.ts index 8820b8ba850..ad4643a31b6 100644 --- a/fbw-a32nx/src/systems/fmgc/src/components/ReadySignal.ts +++ b/fbw-a32nx/src/systems/fmgc/src/components/ReadySignal.ts @@ -1,4 +1,3 @@ -import { AircraftType } from '@flybywiresim/fbw-sdk'; import { FlightPlanManager } from '@fmgc/wtsdk'; import { FmgcComponent } from './FmgcComponent'; @@ -17,7 +16,6 @@ export class ReadySignal implements FmgcComponent { && SimVar.GetSimVarValue('L:A32NX_IS_READY', 'number') !== 1) { // set ready signal that JS code is initialized and flight is actually started // -> user pressed 'READY TO FLY' button - SimVar.SetSimVarValue('L:A32NX_AIRCRAFT_TYPE', 'enum', AircraftType.A320_251N); SimVar.SetSimVarValue('L:A32NX_IS_READY', 'number', 1); } } diff --git a/fbw-a32nx/src/systems/instruments/src/EFB/Dashboard/Widgets/FlightWidget.tsx b/fbw-a32nx/src/systems/instruments/src/EFB/Dashboard/Widgets/FlightWidget.tsx index 6c5f2b923fc..ad553b59c23 100644 --- a/fbw-a32nx/src/systems/instruments/src/EFB/Dashboard/Widgets/FlightWidget.tsx +++ b/fbw-a32nx/src/systems/instruments/src/EFB/Dashboard/Widgets/FlightWidget.tsx @@ -6,7 +6,7 @@ import React, { useState } from 'react'; import { IconPlane } from '@tabler/icons'; import { CloudArrowDown } from 'react-bootstrap-icons'; -import { AircraftType, usePersistentProperty } from '@flybywiresim/fbw-sdk'; +import { AircraftType, usePersistentProperty, useSimVar } from '@flybywiresim/fbw-sdk'; import { toast } from 'react-toastify'; import { fetchSimbriefDataAction, isSimbriefDataLoaded } from '../../Store/features/simBrief'; import { useAppSelector, useAppDispatch } from '../../Store/store'; @@ -71,7 +71,7 @@ export const FlightWidget = () => { const [simbriefDataPending, setSimbriefDataPending] = useState(false); const [navigraphUsername] = usePersistentProperty('NAVIGRAPH_USERNAME'); const [overrideSimBriefUserID] = usePersistentProperty('CONFIG_OVERRIDE_SIMBRIEF_USERID'); - const [airframe] = useState(getAirframeType()); + const [airframe] = useSimVar('L:A32NX_AIRCRAFT_TYPE', 'Enum'); const { schedIn, diff --git a/fbw-a32nx/src/systems/instruments/src/EFB/Efb.tsx b/fbw-a32nx/src/systems/instruments/src/EFB/Efb.tsx index 9fd267c88b0..062a8ec77b8 100644 --- a/fbw-a32nx/src/systems/instruments/src/EFB/Efb.tsx +++ b/fbw-a32nx/src/systems/instruments/src/EFB/Efb.tsx @@ -2,7 +2,7 @@ // SPDX-License-Identifier: GPL-3.0 import React, { useEffect, useState } from 'react'; -import { useSimVar, useInterval, useInteractionEvent, usePersistentNumberProperty, usePersistentProperty, NavigraphClient, AircraftType } from '@flybywiresim/fbw-sdk'; +import { useSimVar, useInterval, useInteractionEvent, usePersistentNumberProperty, usePersistentProperty, NavigraphClient } from '@flybywiresim/fbw-sdk'; import { Redirect, Route, Switch, useHistory } from 'react-router-dom'; import { Battery } from 'react-bootstrap-icons'; import { toast, ToastContainer } from 'react-toastify'; @@ -72,24 +72,6 @@ interface BatteryStatus { export const usePower = () => React.useContext(PowerContext); -// this returns either `A380_842` or `A320_251N` depending on the aircraft -export function getAirframeType(): AircraftType { - const airframe = new URL(document.querySelectorAll('vcockpit-panel > *')[0].getAttribute('url')).searchParams.get('Airframe'); - let airframeType: AircraftType; - - switch (airframe) { - case 'A380_842': - airframeType = AircraftType.A380_842; - break; - case 'A320_251N': - default: - airframeType = AircraftType.A320_251N; - break; - } - - return airframeType; -} - const Efb = () => { const [powerState, setPowerState] = useState(PowerStates.SHUTOFF); const [absoluteTime] = useSimVar('E:ABSOLUTE TIME', 'seconds', 5000); diff --git a/fbw-a32nx/src/systems/instruments/src/EFB/Ground/Pages/Payload/Payload.tsx b/fbw-a32nx/src/systems/instruments/src/EFB/Ground/Pages/Payload/Payload.tsx index eff08de287a..f2195fa4498 100644 --- a/fbw-a32nx/src/systems/instruments/src/EFB/Ground/Pages/Payload/Payload.tsx +++ b/fbw-a32nx/src/systems/instruments/src/EFB/Ground/Pages/Payload/Payload.tsx @@ -5,7 +5,6 @@ /* eslint-disable max-len */ import React, { useState } from 'react'; import { AircraftType, Units, usePersistentProperty, useSimVar } from '@flybywiresim/fbw-sdk'; -import { getAirframeType } from '../../../Efb'; import { A320Payload } from './A320_251N/A320Payload'; import { A380Payload } from './A380_842/A380Payload'; import { useAppSelector } from '../../../Store/store'; @@ -26,8 +25,9 @@ export const Payload = () => { const simbriefDataLoaded = isSimbriefDataLoaded(); const [massUnitForDisplay] = useState(Units.usingMetric ? 'KGS' : 'LBS'); + const [airframe] = useSimVar('L:A32NX_AIRCRAFT_TYPE', 'Enum'); - switch (getAirframeType()) { + switch (airframe) { case AircraftType.A380_842: return ( { - const [airframe] = useState(getAirframeType()); + const [airframe] = useSimVar('L:A32NX_AIRCRAFT_TYPE', 'Enum') switch (airframe) { case AircraftType.A380_842: diff --git a/fbw-a32nx/src/systems/instruments/src/EFB/Settings/ThrottleConfig/ThrottleConfig.tsx b/fbw-a32nx/src/systems/instruments/src/EFB/Settings/ThrottleConfig/ThrottleConfig.tsx index d13621d9f56..1764aef6511 100644 --- a/fbw-a32nx/src/systems/instruments/src/EFB/Settings/ThrottleConfig/ThrottleConfig.tsx +++ b/fbw-a32nx/src/systems/instruments/src/EFB/Settings/ThrottleConfig/ThrottleConfig.tsx @@ -5,7 +5,6 @@ import React, { useEffect, useState } from 'react'; import { AircraftType, usePersistentNumberProperty, useSimVar } from '@flybywiresim/fbw-sdk'; import { ExclamationCircleFill } from 'react-bootstrap-icons'; -import { getAirframeType } from 'instruments/src/EFB/Efb'; import { t } from '../../translation'; import { Toggle } from '../../UtilComponents/Form/Toggle'; import { SelectGroup, SelectItem, VerticalSelectGroup } from '../../UtilComponents/Form/Select'; @@ -36,7 +35,7 @@ interface ThrottleConfigProps { * @constructor */ export const ThrottleConfig = ({ isShown, onClose }: ThrottleConfigProps) => { - const [airframe] = useState(getAirframeType()); + const [airframe] = useSimVar('L:A32NX_AIRCRAFT_TYPE', 'Enum'); const [axisNum, setAxisNum] = usePersistentNumberProperty('THROTTLE_AXIS', airframe === AircraftType.A380_842 ? 4 : 2); // this makes sure that the axis number is set to 2 when the A320 is selected when previously the A380 with 4 axis was used @@ -64,7 +63,7 @@ export const ThrottleConfig = ({ isShown, onClose }: ThrottleConfigProps) => { const { showModal } = useModals(); // the number of throttles that are used in the aircraft (2 or 4) - const numberOfThrottles = getAirframeType() === AircraftType.A380_842 ? 4 : 2; + const numberOfThrottles = airframe === AircraftType.A380_842 ? 4 : 2; // this makes sure that the axis number is set to 2 when the A320 is selected when previously the A380 with 4 axis was used if (airframe !== AircraftType.A380_842 && axisNum === 4) { diff --git a/fbw-common/src/systems/shared/src/aircraftTypeCheck.ts b/fbw-common/src/systems/shared/src/aircraftTypeCheck.ts index 065ab23faf1..69d12e5ceed 100644 --- a/fbw-common/src/systems/shared/src/aircraftTypeCheck.ts +++ b/fbw-common/src/systems/shared/src/aircraftTypeCheck.ts @@ -2,8 +2,9 @@ // SPDX-License-Identifier: GPL-3.0 export enum AircraftType { - A320_251N = 0, - A380_842 = 1 + Unknown = 0, + A320_251N = 1, + A380_842 = 2 } /** @@ -21,6 +22,7 @@ export function getAircraftType(): string { case AircraftType.A380_842: aircraft = 'a380x'; break; + case AircraftType.Unknown: default: aircraft = 'other'; } From 8f8b1e56171648b0f3249031d0ffb2c184afd7b1 Mon Sep 17 00:00:00 2001 From: Denis Freund Date: Mon, 19 Feb 2024 12:31:35 +0100 Subject: [PATCH 05/18] update conflict files: overview, flight widget fix fix fix port-back fix fix --- .../src/EFB/Dashboard/Widgets/FlightWidget.tsx | 6 ++---- .../src/EFB/Dispatch/Pages/OverviewPage.tsx | 10 ++++++---- .../instruments/src/EFB/Ground/Pages/Fuel/Fuel.tsx | 10 +++++----- .../src/EFB/Ground/Pages/Payload/Payload.tsx | 2 +- .../instruments/src/EFB/Ground/Pages/PushbackMap.tsx | 11 +++++------ .../instruments/src/EFB/Ground/Pages/ServicesPage.tsx | 4 ++-- .../EFB/Settings/ThrottleConfig/ThrottleConfig.tsx | 8 ++++---- 7 files changed, 25 insertions(+), 26 deletions(-) diff --git a/fbw-a32nx/src/systems/instruments/src/EFB/Dashboard/Widgets/FlightWidget.tsx b/fbw-a32nx/src/systems/instruments/src/EFB/Dashboard/Widgets/FlightWidget.tsx index ad553b59c23..5acb8e8ad23 100644 --- a/fbw-a32nx/src/systems/instruments/src/EFB/Dashboard/Widgets/FlightWidget.tsx +++ b/fbw-a32nx/src/systems/instruments/src/EFB/Dashboard/Widgets/FlightWidget.tsx @@ -6,15 +6,13 @@ import React, { useState } from 'react'; import { IconPlane } from '@tabler/icons'; import { CloudArrowDown } from 'react-bootstrap-icons'; -import { AircraftType, usePersistentProperty, useSimVar } from '@flybywiresim/fbw-sdk'; +import { usePersistentProperty, useSimVar } from '@flybywiresim/fbw-sdk'; import { toast } from 'react-toastify'; import { fetchSimbriefDataAction, isSimbriefDataLoaded } from '../../Store/features/simBrief'; import { useAppSelector, useAppDispatch } from '../../Store/store'; import { ScrollableContainer } from '../../UtilComponents/ScrollableContainer'; import { t } from '../../translation'; -import { getAirframeType } from '../../Efb'; -import { AC_TYPE } from '../../Enum/Airframe'; interface InformationEntryProps { title: string; @@ -138,7 +136,7 @@ export const FlightWidget = () => { {' '} | {' '} - {(airframe !== null ? AC_TYPE[airframe] : 'A320-251N')} + {'A320-251N'} )} diff --git a/fbw-a32nx/src/systems/instruments/src/EFB/Dispatch/Pages/OverviewPage.tsx b/fbw-a32nx/src/systems/instruments/src/EFB/Dispatch/Pages/OverviewPage.tsx index abc32843b7f..b35834b60c4 100644 --- a/fbw-a32nx/src/systems/instruments/src/EFB/Dispatch/Pages/OverviewPage.tsx +++ b/fbw-a32nx/src/systems/instruments/src/EFB/Dispatch/Pages/OverviewPage.tsx @@ -2,17 +2,19 @@ // // SPDX-License-Identifier: GPL-3.0 import React from 'react'; +import { AircraftType, useSimVar } from '@flybywiresim/fbw-sdk'; import { A320Overview } from 'instruments/src/EFB/Dispatch/Pages/Overview/A320_251N/A320Overview'; import { A380Overview } from 'instruments/src/EFB/Dispatch/Pages/Overview/A380_842/A380Overview'; -import { getAirframeType } from '../../Efb'; export const OverviewPage = () => { - switch (getAirframeType()) { - case 'A320_251N': + const [airframe] = useSimVar('L:A32NX_AIRCRAFT_TYPE', 'Enum'); + + switch (airframe) { + case AircraftType.A320_251N: return ( ); - case 'A380_842': + case AircraftType.A380_842: return ( ); diff --git a/fbw-a32nx/src/systems/instruments/src/EFB/Ground/Pages/Fuel/Fuel.tsx b/fbw-a32nx/src/systems/instruments/src/EFB/Ground/Pages/Fuel/Fuel.tsx index 56ee43f968b..ea7cadee3d6 100644 --- a/fbw-a32nx/src/systems/instruments/src/EFB/Ground/Pages/Fuel/Fuel.tsx +++ b/fbw-a32nx/src/systems/instruments/src/EFB/Ground/Pages/Fuel/Fuel.tsx @@ -4,14 +4,14 @@ /* eslint-disable max-len */ import React, { useState } from 'react'; -import { Units, useSimVar } from '@flybywiresim/fbw-sdk'; -import { getAirframeType } from '../../../Efb'; +import { AircraftType, Units, useSimVar } from '@flybywiresim/fbw-sdk'; import { isSimbriefDataLoaded } from '../../../Store/features/simBrief'; import { A320Fuel } from './A320_251N/A320Fuel'; import { A380Fuel } from './A380_842/A380Fuel'; import { useAppSelector } from '../../../Store/store'; export const Fuel = () => { + const [airframe] = useSimVar('L:A32NX_AIRCRAFT_TYPE', 'Enum'); const [isOnGround] = useSimVar('SIM ON GROUND', 'Bool', 8_059); const simbriefUnits = useAppSelector((state) => state.simbrief.data.units); const simbriefPlanRamp = useAppSelector((state) => state.simbrief.data.fuels.planRamp); @@ -21,8 +21,8 @@ export const Fuel = () => { const [massUnitForDisplay] = useState(Units.usingMetric ? 'KGS' : 'LBS'); const [convertUnit] = useState(Units.usingMetric ? 1 : (1 / 0.4535934)); - switch (getAirframeType()) { - case 'A380_842': + switch (airframe) { + case AircraftType.A380_842: return ( { isOnGround={isOnGround} /> ); - case 'A320_251N': + case AircraftType.A320_251N: default: return ( { + const [airframe] = useSimVar('L:A32NX_AIRCRAFT_TYPE', 'Enum'); const simbriefUnits = useAppSelector((state) => state.simbrief.data.units); const simbriefBagWeight = parseInt(useAppSelector((state) => state.simbrief.data.weights.bagWeight)); const simbriefPaxWeight = parseInt(useAppSelector((state) => state.simbrief.data.weights.passengerWeight)); @@ -25,7 +26,6 @@ export const Payload = () => { const simbriefDataLoaded = isSimbriefDataLoaded(); const [massUnitForDisplay] = useState(Units.usingMetric ? 'KGS' : 'LBS'); - const [airframe] = useSimVar('L:A32NX_AIRCRAFT_TYPE', 'Enum'); switch (airframe) { case AircraftType.A380_842: diff --git a/fbw-a32nx/src/systems/instruments/src/EFB/Ground/Pages/PushbackMap.tsx b/fbw-a32nx/src/systems/instruments/src/EFB/Ground/Pages/PushbackMap.tsx index ea66835a5e8..1d0ed9c7cd7 100644 --- a/fbw-a32nx/src/systems/instruments/src/EFB/Ground/Pages/PushbackMap.tsx +++ b/fbw-a32nx/src/systems/instruments/src/EFB/Ground/Pages/PushbackMap.tsx @@ -3,7 +3,7 @@ /* eslint-disable max-len */ import React, { useEffect, useState } from 'react'; -import { useSimVar, MathUtils } from '@flybywiresim/fbw-sdk'; +import { useSimVar, MathUtils, AircraftType } from '@flybywiresim/fbw-sdk'; import { ZoomIn, ZoomOut } from 'react-bootstrap-icons'; import { IconPlane } from '@tabler/icons'; import { Coordinates } from 'msfs-geo'; @@ -21,7 +21,6 @@ import { setMapRange, TScreenCoordinates, } from '../../Store/features/pushback'; -import { getAirframeType } from '../../Efb'; interface TurningRadiusIndicatorProps { turningRadius: number; @@ -68,7 +67,7 @@ const TurningRadiusIndicator = ({ turningRadius }: TurningRadiusIndicatorProps) export const PushbackMap = () => { const dispatch = useAppDispatch(); - + const [airframe] = useSimVar('L:A32NX_AIRCRAFT_TYPE', 'Enum'); const [planeHeadingTrue] = useSimVar('PLANE HEADING DEGREES TRUE', 'degrees', 50); const [planeLatitude] = useSimVar('A:PLANE LATITUDE', 'degrees latitude', 50); const [planeLongitude] = useSimVar('A:PLANE LONGITUDE', 'degrees longitude', 50); @@ -83,7 +82,7 @@ export const PushbackMap = () => { 'number', 250, ); - const turnIndicatorTuningDefault = getAirframeType() === 'A320_251N' ? 1.35 : 1.35; // determined by testing + const turnIndicatorTuningDefault = airframe === AircraftType.A320_251N ? 1.35 : 1.35; // determined by testing // Reducer state for pushback const { @@ -100,8 +99,8 @@ export const PushbackMap = () => { // Aircraft wheelbase in meters // Source: https://www.airbus.com/sites/g/files/jlcbta136/files/2021-11/Airbus-Commercial-Aircraft-AC-A320.pdf // Source: https://www.airbus.com/sites/g/files/jlcbta136/files/2022-02/Airbus-A380-Facts-and-Figures-February-2022.pdf - const aircraftWheelBase = getAirframeType() === 'A380_842' ? 31.9 : 12.64; - const aircraftLengthMeter = getAirframeType() === 'A380_842' ? 72.72 : 37.57; + const aircraftWheelBase = airframe === AircraftType.A380_842 ? 31.9 : 12.64; + const aircraftLengthMeter = airframe === AircraftType.A380_842 ? 72.72 : 37.57; // Map const [mouseDown, setMouseDown] = useState(false); diff --git a/fbw-a32nx/src/systems/instruments/src/EFB/Ground/Pages/ServicesPage.tsx b/fbw-a32nx/src/systems/instruments/src/EFB/Ground/Pages/ServicesPage.tsx index 1e044da9a3e..1c2e7ce90ae 100644 --- a/fbw-a32nx/src/systems/instruments/src/EFB/Ground/Pages/ServicesPage.tsx +++ b/fbw-a32nx/src/systems/instruments/src/EFB/Ground/Pages/ServicesPage.tsx @@ -2,13 +2,13 @@ // SPDX-License-Identifier: GPL-3.0 /* eslint-disable no-console */ -import React, { useState } from 'react'; +import React from 'react'; import { AircraftType, useSimVar } from '@flybywiresim/fbw-sdk'; import { A380Services } from './Services/A380_842/A380Services'; import { A320Services } from './Services/A320_251N/A320Services'; export const ServicesPage = () => { - const [airframe] = useSimVar('L:A32NX_AIRCRAFT_TYPE', 'Enum') + const [airframe] = useSimVar('L:A32NX_AIRCRAFT_TYPE', 'Enum'); switch (airframe) { case AircraftType.A380_842: diff --git a/fbw-a32nx/src/systems/instruments/src/EFB/Settings/ThrottleConfig/ThrottleConfig.tsx b/fbw-a32nx/src/systems/instruments/src/EFB/Settings/ThrottleConfig/ThrottleConfig.tsx index 1764aef6511..11d19a5e7d4 100644 --- a/fbw-a32nx/src/systems/instruments/src/EFB/Settings/ThrottleConfig/ThrottleConfig.tsx +++ b/fbw-a32nx/src/systems/instruments/src/EFB/Settings/ThrottleConfig/ThrottleConfig.tsx @@ -142,7 +142,7 @@ export const ThrottleConfig = ({ isShown, onClose }: ThrottleConfigProps) => { ...getOverlapErrors(2, throttleTwoSimvars), ]; // to avoid false errors on the A320 when only 2 axis are used - if (airframe === AircraftType.A380_842) { + if (airframe === 'A380_842') { errors.push(...getOverlapErrors(3, throttleThreeSimvars)); errors.push(...getOverlapErrors(4, throttleFourSimvars)); } @@ -232,7 +232,7 @@ export const ThrottleConfig = ({ isShown, onClose }: ThrottleConfigProps) => { > 2 - {airframe === AircraftType.A380_842 && ( + {airframe === 'A380_842' && ( setAxisNum(4)} @@ -350,13 +350,13 @@ export const ThrottleConfig = ({ isShown, onClose }: ThrottleConfigProps) => { const getAxis = () => { switch (axisNum) { case 4: - if (airframe === AircraftType.A380_842) { + if (airframe === 'A380_842') { return fourAxis; } console.warn('A320 does not have 4 axis - defaulting to 2 axis'); return twoAxisA320; case 2: - if (airframe === AircraftType.A380_842) { + if (airframe === 'A380_842') { return twoAxisA380; } return twoAxisA320; From a597fb1621720f9568cdda1957928a631668c470 Mon Sep 17 00:00:00 2001 From: Denis Freund Date: Mon, 19 Feb 2024 12:47:17 +0100 Subject: [PATCH 06/18] remove airframe enum --- .../instruments/src/EFB/Dashboard/Widgets/FlightWidget.tsx | 4 ++-- fbw-a32nx/src/systems/instruments/src/EFB/Enum/Airframe.ts | 4 ---- 2 files changed, 2 insertions(+), 6 deletions(-) delete mode 100644 fbw-a32nx/src/systems/instruments/src/EFB/Enum/Airframe.ts diff --git a/fbw-a32nx/src/systems/instruments/src/EFB/Dashboard/Widgets/FlightWidget.tsx b/fbw-a32nx/src/systems/instruments/src/EFB/Dashboard/Widgets/FlightWidget.tsx index 5acb8e8ad23..3ce46b76e4a 100644 --- a/fbw-a32nx/src/systems/instruments/src/EFB/Dashboard/Widgets/FlightWidget.tsx +++ b/fbw-a32nx/src/systems/instruments/src/EFB/Dashboard/Widgets/FlightWidget.tsx @@ -6,7 +6,7 @@ import React, { useState } from 'react'; import { IconPlane } from '@tabler/icons'; import { CloudArrowDown } from 'react-bootstrap-icons'; -import { usePersistentProperty, useSimVar } from '@flybywiresim/fbw-sdk'; +import { AircraftType, usePersistentProperty, useSimVar } from '@flybywiresim/fbw-sdk'; import { toast } from 'react-toastify'; import { fetchSimbriefDataAction, isSimbriefDataLoaded } from '../../Store/features/simBrief'; import { useAppSelector, useAppDispatch } from '../../Store/store'; @@ -136,7 +136,7 @@ export const FlightWidget = () => { {' '} | {' '} - {'A320-251N'} + {airframe === AircraftType.A320_251N ? 'A320-251N' : 'A380-842'} )} diff --git a/fbw-a32nx/src/systems/instruments/src/EFB/Enum/Airframe.ts b/fbw-a32nx/src/systems/instruments/src/EFB/Enum/Airframe.ts deleted file mode 100644 index 126d28885a5..00000000000 --- a/fbw-a32nx/src/systems/instruments/src/EFB/Enum/Airframe.ts +++ /dev/null @@ -1,4 +0,0 @@ -export enum AC_TYPE { - A320_251N = 'A320-251N', - A380_842 = 'A380-842' -} From 5a0c15a7969f025797d01268f17af3365549fdcc Mon Sep 17 00:00:00 2001 From: Denis Freund Date: Mon, 19 Feb 2024 13:01:56 +0100 Subject: [PATCH 07/18] fix lint, add missing aircraft type docs --- fbw-a32nx/docs/a320-simvars.md | 5 +++-- .../extras-host/modules/airframe_check/AirframeCheck.ts | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/fbw-a32nx/docs/a320-simvars.md b/fbw-a32nx/docs/a320-simvars.md index 956b06910e3..f22b456fd73 100644 --- a/fbw-a32nx/docs/a320-simvars.md +++ b/fbw-a32nx/docs/a320-simvars.md @@ -31,8 +31,9 @@ - Indicates the aircraft type Aircraft | Value --- | --- - A320_251N | 0 - A380_842 | 1 + Unknown | 0 + A320_251N | 1 + A380_842 | 2 - A32NX_IS_READY - Bool diff --git a/fbw-a32nx/src/systems/extras-host/modules/airframe_check/AirframeCheck.ts b/fbw-a32nx/src/systems/extras-host/modules/airframe_check/AirframeCheck.ts index e2686516e59..ea2b9bd15e5 100644 --- a/fbw-a32nx/src/systems/extras-host/modules/airframe_check/AirframeCheck.ts +++ b/fbw-a32nx/src/systems/extras-host/modules/airframe_check/AirframeCheck.ts @@ -21,7 +21,7 @@ export class AirframeCheck { const airframe = new URL(document.querySelectorAll('vcockpit-panel > *')[0].getAttribute('url')).searchParams.get('Airframe'); let aircraftType: AircraftType; - + switch (airframe) { case 'A380_842': aircraftType = AircraftType.A380_842; From 7ab219f6c5e179dfc34ae36bae9cee5f998cc0ae Mon Sep 17 00:00:00 2001 From: 2hwk Date: Sun, 24 Mar 2024 22:48:18 +0800 Subject: [PATCH 08/18] refactor: boolean logic --- .../src/EFB/Dashboard/Widgets/FlightWidget.tsx | 2 +- .../EFB/Ground/Pages/Pushback/PushbackMap.tsx | 16 +++++++++++----- .../src/EFB/Settings/Pages/AboutPage.tsx | 2 +- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/fbw-common/src/systems/instruments/src/EFB/Dashboard/Widgets/FlightWidget.tsx b/fbw-common/src/systems/instruments/src/EFB/Dashboard/Widgets/FlightWidget.tsx index 0ca45fa5af5..9b795d7c5db 100644 --- a/fbw-common/src/systems/instruments/src/EFB/Dashboard/Widgets/FlightWidget.tsx +++ b/fbw-common/src/systems/instruments/src/EFB/Dashboard/Widgets/FlightWidget.tsx @@ -130,7 +130,7 @@ export const FlightWidget = () => {

{t('Dashboard.YourFlight.Title')}

{simbriefDataLoaded ? `${(airline.length > 0 ? airline : '') + flightNum} | ` : ''} - {airframe === AircraftType.A320_251N ? 'A320-251N' : 'A380-842'} + {airframe === AircraftType.A380_842 ? 'A380-842' : 'A320-251N'}

diff --git a/fbw-common/src/systems/instruments/src/EFB/Ground/Pages/Pushback/PushbackMap.tsx b/fbw-common/src/systems/instruments/src/EFB/Ground/Pages/Pushback/PushbackMap.tsx index 487974902b6..cfa8a5abe10 100644 --- a/fbw-common/src/systems/instruments/src/EFB/Ground/Pages/Pushback/PushbackMap.tsx +++ b/fbw-common/src/systems/instruments/src/EFB/Ground/Pages/Pushback/PushbackMap.tsx @@ -2,7 +2,7 @@ // SPDX-License-Identifier: GPL-3.0 /* eslint-disable max-len */ -import React, { useEffect, useState } from 'react'; +import React, { useEffect, useMemo, useState } from 'react'; import { useSimVar, MathUtils, AircraftType } from '@flybywiresim/fbw-sdk'; import { ZoomIn, ZoomOut } from 'react-bootstrap-icons'; import { IconPlane } from '@tabler/icons'; @@ -79,7 +79,7 @@ export const PushbackMap = () => { 'number', 250, ); - const turnIndicatorTuningDefault = airframe === AircraftType.A320_251N ? 1.35 : 1.35; // determined by testing + const turnIndicatorTuningDefault = airframe === AircraftType.A380_842 ? 1.35 : 1.35; // determined by testing // Reducer state for pushback const { @@ -218,9 +218,15 @@ export const PushbackMap = () => { } }, [dragging, mouseDown, mouseCoords]); - const mapConfigPath = airframe === AircraftType.A320_251N - ? '/Pages/VCockpit/Instruments/Airliners/FlyByWire_A320_Neo/EFB/' - : '/Pages/VCockpit/Instruments/Airliners/FlyByWire_A380/EFB/'; + const mapConfigPath = useMemo(() => { + switch (airframe) { + case AircraftType.A380_842: + return '/Pages/VCockpit/Instruments/Airliners/FlyByWire_A380/EFB/'; + case AircraftType.A320_251N: + default: + return '/Pages/VCockpit/Instruments/Airliners/FlyByWire_A320_Neo/EFB/'; + } + }, [airframe]); return ( <> diff --git a/fbw-common/src/systems/instruments/src/EFB/Settings/Pages/AboutPage.tsx b/fbw-common/src/systems/instruments/src/EFB/Settings/Pages/AboutPage.tsx index bef4b74aeeb..f8b50e31218 100644 --- a/fbw-common/src/systems/instruments/src/EFB/Settings/Pages/AboutPage.tsx +++ b/fbw-common/src/systems/instruments/src/EFB/Settings/Pages/AboutPage.tsx @@ -61,7 +61,7 @@ export const AboutPage = () => { useEffect(() => { AircraftVersionChecker.getBuildInfo( - airframe === AircraftType.A320_251N ? 'a32nx' : 'a380x', + airframe === AircraftType.A380_842 ? 'a380x' : 'a32nx', ).then((info) => setBuildInfo(info)); }, [airframe]); From 735e79e18c934c553d5f422bdb58e4dbf61d19cf Mon Sep 17 00:00:00 2001 From: 2hwk Date: Sun, 24 Mar 2024 22:57:17 +0800 Subject: [PATCH 09/18] fix: panel cfg --- .../SimObjects/AirPlanes/FlyByWire_A380_842/panel/panel.cfg | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fbw-a380x/src/base/flybywire-aircraft-a380-842/SimObjects/AirPlanes/FlyByWire_A380_842/panel/panel.cfg b/fbw-a380x/src/base/flybywire-aircraft-a380-842/SimObjects/AirPlanes/FlyByWire_A380_842/panel/panel.cfg index 0a1953fa006..f23d2048d79 100644 --- a/fbw-a380x/src/base/flybywire-aircraft-a380-842/SimObjects/AirPlanes/FlyByWire_A380_842/panel/panel.cfg +++ b/fbw-a380x/src/base/flybywire-aircraft-a380-842/SimObjects/AirPlanes/FlyByWire_A380_842/panel/panel.cfg @@ -120,7 +120,7 @@ size_mm=1430,1000 pixel_size=1430,1000 texture=$SCREEN_EFB -htmlgauge00=A380X/EFB/efb.html?Airframe=A380_842, 0,0,1430,1000 +htmlgauge00=A380X/EFB/efb.html, 0,0,1430,1000 [VCockpit16] size_mm=1664,1024 @@ -168,4 +168,4 @@ pixel_size=0,0 texture=NO_TEXTURE background_color=0,0,0 -htmlgauge04=A380X/ExtrasHost/extras-host.html,0,0,1,1 +htmlgauge04=A380X/ExtrasHost/extras-host.html?Airframe=A380_842,0,0,1,1 From 885998270290369b5bc2b590747ee8e76eeba0c8 Mon Sep 17 00:00:00 2001 From: 2hwk Date: Tue, 26 Mar 2024 02:05:23 +0800 Subject: [PATCH 10/18] feat: A/C prefix environ --- .github/workflows/a380x-exp.yml | 4 ++++ .github/workflows/ingamepanels-checklist-fix.yml | 2 ++ .github/workflows/master.yml | 4 ++++ .github/workflows/pr.yml | 4 +++- .github/workflows/pre-release.yml | 2 ++ .github/workflows/release.yml | 2 ++ fbw-a32nx/.env | 1 + fbw-a32nx/src/systems/instruments/buildSrc/plugins.mjs | 1 + fbw-a380x/.env | 1 + fbw-a380x/src/systems/instruments/buildSrc/plugins.mjs | 1 + .../systems/instruments/src/EFB/Settings/Pages/AboutPage.tsx | 2 +- fbw-common/src/systems/instruments/src/EFB/vite.config.ts | 2 +- 12 files changed, 23 insertions(+), 3 deletions(-) diff --git a/.github/workflows/a380x-exp.yml b/.github/workflows/a380x-exp.yml index 0413e34f140..c9cfd28dcb7 100644 --- a/.github/workflows/a380x-exp.yml +++ b/.github/workflows/a380x-exp.yml @@ -17,6 +17,7 @@ jobs: FBW_PRODUCTION_BUILD: 1 A32NX_INSTRUMENTS_BUILD_WORKERS: 2 BUILD_DIR_NAME: a380x-experimental-a32nx + AIRCRAFT_PREFIX: a32nx steps: - name: Checkout source uses: actions/checkout@v4 @@ -29,6 +30,7 @@ jobs: echo CLIENT_SECRET=\"${{ secrets.NAVIGRAPH_CLIENT_SECRET }}\" >> fbw-a32nx/.env echo CHARTFOX_SECRET=\"${{ secrets.CHARTFOX_SECRET }}\" >> fbw-a32nx/.env echo SENTRY_DSN=\"${{ secrets.SENTRY_DSN }}\" >> fbw-a32nx/.env + echo AIRCRAFT_PREFIX=${{ env.AIRCRAFT_PREFIX }} >> fbw-a32nx/.env echo BUILD_DIR_NAME=${{ env.BUILD_DIR_NAME }} >> .env echo LOCALAZY_READ_KEY=${{ secrets.LOCALAZY_READ_KEY }} >> .env echo VITE_BUILD=false >> .env @@ -66,6 +68,7 @@ jobs: env: FBW_PRODUCTION_BUILD: 1 BUILD_DIR_NAME: a380x-experimental-a380x + AIRCRAFT_PREFIX: a380x steps: - name: Checkout source uses: actions/checkout@v4 @@ -78,6 +81,7 @@ jobs: echo CLIENT_SECRET=\"${{ secrets.NAVIGRAPH_CLIENT_SECRET_A380X }}\" >> fbw-a380x/.env echo CHARTFOX_SECRET=\"${{ secrets.CHARTFOX_SECRET }}\" >> fbw-a380x/.env echo SENTRY_DSN=\"${{ secrets.SENTRY_DSN }}\" >> fbw-a380x/.env + echo AIRCRAFT_PREFIX=${{ env.AIRCRAFT_PREFIX }} >> fbw-a380x/.env echo BUILD_DIR_NAME=${{ env.BUILD_DIR_NAME }} >> .env echo LOCALAZY_READ_KEY=${{ secrets.LOCALAZY_READ_KEY }} >> .env echo VITE_BUILD=false >> .env diff --git a/.github/workflows/ingamepanels-checklist-fix.yml b/.github/workflows/ingamepanels-checklist-fix.yml index 475918fa82a..f6689c66f51 100644 --- a/.github/workflows/ingamepanels-checklist-fix.yml +++ b/.github/workflows/ingamepanels-checklist-fix.yml @@ -21,6 +21,7 @@ jobs: FBW_PRODUCTION_BUILD: 1 MASTER_ZIP_NAME: ingamepanels-checklist-fix-master.zip BUILD_DIR_NAME: master + AIRCRAFT_PREFIX: a32nx steps: - name: Checkout source uses: actions/checkout@v2 @@ -33,6 +34,7 @@ jobs: echo CLIENT_SECRET=${{ secrets.NAVIGRAPH_CLIENT_SECRET }} >> .env echo CHARTFOX_SECRET=${{ secrets.CHARTFOX_SECRET }} >> .env echo SENTRY_DSN=${{ secrets.SENTRY_DSN }} >> .env + echo AIRCRAFT_PREFIX=${{ env.AIRCRAFT_PREFIX }} >> .env echo BUILD_DIR_NAME=${{ env.BUILD_DIR_NAME }} >> .env echo LOCALAZY_READ_KEY=${{ secrets.LOCALAZY_READ_KEY }} >> .env - name: Build In-Game Panels Checklist Fix diff --git a/.github/workflows/master.yml b/.github/workflows/master.yml index 6673268dff4..8c9553bd4e8 100644 --- a/.github/workflows/master.yml +++ b/.github/workflows/master.yml @@ -22,6 +22,7 @@ jobs: VMASTER_PRE_RELEASE_ID: 32243965 VMASTER_PRE_RELEASE_TAG: vmaster BUILD_DIR_NAME: master-a32nx + AIRCRAFT_PREFIX: a32nx steps: - name: Checkout source uses: actions/checkout@v4 @@ -34,6 +35,7 @@ jobs: echo CLIENT_SECRET=\"${{ secrets.NAVIGRAPH_CLIENT_SECRET }}\" >> fbw-a32nx/.env echo CHARTFOX_SECRET=\"${{ secrets.CHARTFOX_SECRET }}\" >> fbw-a32nx/.env echo SENTRY_DSN=\"${{ secrets.SENTRY_DSN }}\" >> fbw-a32nx/.env + echo AIRCRAFT_PREFIX=\"${{ env.AIRCRAFT_PREFIX }}\" >> fbw-a32nx/.env echo BUILD_DIR_NAME=${{ env.BUILD_DIR_NAME }} >> .env echo LOCALAZY_READ_KEY=${{ secrets.LOCALAZY_READ_KEY }} >> .env echo VITE_BUILD=false >> .env @@ -100,6 +102,7 @@ jobs: VMASTER_PRE_RELEASE_ID: 32243965 VMASTER_PRE_RELEASE_TAG: vmaster BUILD_DIR_NAME: master-a380x + AIRCRAFT_PREFIX: a380x steps: - name: Checkout source uses: actions/checkout@v4 @@ -112,6 +115,7 @@ jobs: echo CLIENT_SECRET=\"${{ secrets.NAVIGRAPH_CLIENT_SECRET_A380X }}\" >> fbw-a380x/.env echo CHARTFOX_SECRET=\"${{ secrets.CHARTFOX_SECRET }}\" >> fbw-a380x/.env echo SENTRY_DSN=\"${{ secrets.SENTRY_DSN }}\" >> fbw-a380x/.env + echo AIRCRAFT_PREFIX=\"${{ env.AIRCRAFT_PREFIX }}\" >> fbw-a380x/.env echo BUILD_DIR_NAME=${{ env.BUILD_DIR_NAME }} >> .env echo LOCALAZY_READ_KEY=${{ secrets.LOCALAZY_READ_KEY }} >> .env echo VITE_BUILD=false >> .env diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 846b0abaf78..67f8c5e9c3d 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -49,6 +49,7 @@ jobs: if: github.event.pull_request.draft == false env: FBW_PRODUCTION_BUILD: 1 + AIRCRAFT_PREFIX: a32nx steps: - name: Checkout source uses: actions/checkout@v4 @@ -60,6 +61,7 @@ jobs: echo CLIENT_SECRET=\"${{ secrets.NAVIGRAPH_CLIENT_SECRET_A380X }}\" >> fbw-a32nx/.env echo CHARTFOX_SECRET=\"${{ secrets.CHARTFOX_SECRET }}\" >> fbw-a32nx/.env echo SENTRY_DSN=\"${{ secrets.SENTRY_DSN }}\" >> fbw-a32nx/.env + echo AIRCRAFT_PREFIX=\"${{ env.AIRCRAFT_PREFIX }}\" >> fbw-a32nx/.env echo LOCALAZY_READ_KEY=${{ secrets.LOCALAZY_READ_KEY }} >> .env echo VITE_BUILD=false >> .env cat fbw-a32nx/.env @@ -124,4 +126,4 @@ jobs: if: github.event.pull_request.auto_merge == false with: name: flybywire-aircraft-a380-842 - path: ./fbw-a380x/out/flybywire-aircraft-a380-842/ \ No newline at end of file + path: ./fbw-a380x/out/flybywire-aircraft-a380-842/ diff --git a/.github/workflows/pre-release.yml b/.github/workflows/pre-release.yml index 97e11779b8b..9e15f120ea0 100644 --- a/.github/workflows/pre-release.yml +++ b/.github/workflows/pre-release.yml @@ -12,6 +12,7 @@ jobs: FBW_PRODUCTION_BUILD: 1 RELEASE_ZIP_NAME: A32NX-stable.7z BUILD_DIR_NAME: stable + AIRCRAFT_PREFIX: a32nx steps: - name: Checkout source uses: actions/checkout@v2 @@ -23,6 +24,7 @@ jobs: echo CHARTFOX_SECRET=\"${{ secrets.CHARTFOX_SECRET }}\" >> fbw-a32nx/.env echo SENTRY_DSN=\"${{ secrets.SENTRY_DSN }}\" >> fbw-a32nx/.env echo BUILD_DIR_NAME=${{ env.BUILD_DIR_NAME }} >> .env + echo BUILD_DIR_NAME=${{ env.AIRCRAFT_PREFIX }} >> fbw-a32nx/.env echo LOCALAZY_READ_KEY=${{ secrets.LOCALAZY_READ_KEY }} >> .env echo VITE_BUILD=false >> .env - name: Build A32NX diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 4772659929b..9af8e0867a9 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -15,6 +15,7 @@ jobs: STABLE_PRE_RELEASE_TAG: assets/stable STABLE_ZIP_NAME: A32NX-stable.7z BUILD_DIR_NAME: stable + AIRCRAFT_PREFIX: a32nx steps: - name: Checkout source uses: actions/checkout@v2 @@ -25,6 +26,7 @@ jobs: echo CLIENT_SECRET=\"${{ secrets.NAVIGRAPH_CLIENT_SECRET }}\" >> fbw-a32nx/.env echo CHARTFOX_SECRET=\"${{ secrets.CHARTFOX_SECRET }}\" >> fbw-a32nx/.env echo SENTRY_DSN=\"${{ secrets.SENTRY_DSN }}\" >> fbw-a32nx/.env + echo AIRCRAFT_PREFIX=\"${{ secrets.AIRCRAFT_PREFIX }}\" >> fbw-a32nx/.env echo BUILD_DIR_NAME=${{ env.BUILD_DIR_NAME }} >> .env echo LOCALAZY_READ_KEY=${{ secrets.LOCALAZY_READ_KEY }} >> .env echo VITE_BUILD=false >> .env diff --git a/fbw-a32nx/.env b/fbw-a32nx/.env index c7304412e55..dad87189b33 100644 --- a/fbw-a32nx/.env +++ b/fbw-a32nx/.env @@ -3,3 +3,4 @@ NODE_ENV=production CLIENT_SECRET="" CLIENT_ID="" SENTRY_DSN="" +AIRCRAFT_PREFIX="a32nx" diff --git a/fbw-a32nx/src/systems/instruments/buildSrc/plugins.mjs b/fbw-a32nx/src/systems/instruments/buildSrc/plugins.mjs index 3d57c9680cb..6556f9dba32 100644 --- a/fbw-a32nx/src/systems/instruments/buildSrc/plugins.mjs +++ b/fbw-a32nx/src/systems/instruments/buildSrc/plugins.mjs @@ -79,6 +79,7 @@ export function baseCompile(instrumentName, instrumentFolder) { 'process.env.CLIENT_SECRET': JSON.stringify(process.env.CLIENT_SECRET), 'process.env.CHARTFOX_SECRET': JSON.stringify(process.env.CHARTFOX_SECRET), 'process.env.SENTRY_DSN': JSON.stringify(process.env.SENTRY_DSN), + 'process.env.AIRCRAFT_PREFIX': JSON.stringify(process.env.AIRCRAFT_PREFIX), }), postCss(instrumentName, instrumentFolder), ]; diff --git a/fbw-a380x/.env b/fbw-a380x/.env index c7304412e55..8d20fe430bf 100644 --- a/fbw-a380x/.env +++ b/fbw-a380x/.env @@ -3,3 +3,4 @@ NODE_ENV=production CLIENT_SECRET="" CLIENT_ID="" SENTRY_DSN="" +AIRCRAFT_PREFIX="a380x" diff --git a/fbw-a380x/src/systems/instruments/buildSrc/plugins.mjs b/fbw-a380x/src/systems/instruments/buildSrc/plugins.mjs index 3d57c9680cb..6556f9dba32 100644 --- a/fbw-a380x/src/systems/instruments/buildSrc/plugins.mjs +++ b/fbw-a380x/src/systems/instruments/buildSrc/plugins.mjs @@ -79,6 +79,7 @@ export function baseCompile(instrumentName, instrumentFolder) { 'process.env.CLIENT_SECRET': JSON.stringify(process.env.CLIENT_SECRET), 'process.env.CHARTFOX_SECRET': JSON.stringify(process.env.CHARTFOX_SECRET), 'process.env.SENTRY_DSN': JSON.stringify(process.env.SENTRY_DSN), + 'process.env.AIRCRAFT_PREFIX': JSON.stringify(process.env.AIRCRAFT_PREFIX), }), postCss(instrumentName, instrumentFolder), ]; diff --git a/fbw-common/src/systems/instruments/src/EFB/Settings/Pages/AboutPage.tsx b/fbw-common/src/systems/instruments/src/EFB/Settings/Pages/AboutPage.tsx index f8b50e31218..ee330793349 100644 --- a/fbw-common/src/systems/instruments/src/EFB/Settings/Pages/AboutPage.tsx +++ b/fbw-common/src/systems/instruments/src/EFB/Settings/Pages/AboutPage.tsx @@ -61,7 +61,7 @@ export const AboutPage = () => { useEffect(() => { AircraftVersionChecker.getBuildInfo( - airframe === AircraftType.A380_842 ? 'a380x' : 'a32nx', + process.env.AIRCRAFT_PREFIX, ).then((info) => setBuildInfo(info)); }, [airframe]); diff --git a/fbw-common/src/systems/instruments/src/EFB/vite.config.ts b/fbw-common/src/systems/instruments/src/EFB/vite.config.ts index 73b7e4be2ac..4ca6e46bc9f 100644 --- a/fbw-common/src/systems/instruments/src/EFB/vite.config.ts +++ b/fbw-common/src/systems/instruments/src/EFB/vite.config.ts @@ -11,7 +11,7 @@ import dotenv from 'dotenv'; dotenv.config({ path: '../../../../../../.env' }); -const envVarsToReplace = ['CLIENT_ID', 'CLIENT_SECRET', 'SENTRY_DSN']; +const envVarsToReplace = ['CLIENT_ID', 'CLIENT_SECRET', 'SENTRY_DSN', 'AIRCRAFT_PREFIX']; export default defineConfig({ css: { From ce3cf3a64aff4998496e1f7def54c13dc6f20d64 Mon Sep 17 00:00:00 2001 From: 2hwk Date: Sat, 30 Mar 2024 22:16:35 +0800 Subject: [PATCH 11/18] feat: bones for xml config to AirCraftSync (from AirframeCheck) --- fbw-a32nx/src/systems/extras-host/index.ts | 19 +++++++++++++------ .../AircraftSync.ts} | 12 +++++++++--- fbw-common/src/systems/shared/src/index.ts | 2 +- 3 files changed, 23 insertions(+), 10 deletions(-) rename fbw-a32nx/src/systems/extras-host/modules/{airframe_check/AirframeCheck.ts => aircraft_sync/AircraftSync.ts} (81%) diff --git a/fbw-a32nx/src/systems/extras-host/index.ts b/fbw-a32nx/src/systems/extras-host/index.ts index 246bd97658a..56e7a30ad4b 100644 --- a/fbw-a32nx/src/systems/extras-host/index.ts +++ b/fbw-a32nx/src/systems/extras-host/index.ts @@ -7,7 +7,7 @@ import { ExtrasSimVarPublisher } from 'extras-host/modules/common/ExtrasSimVarPu import { PushbuttonCheck } from 'extras-host/modules/pushbutton_check/PushbuttonCheck'; import { KeyInterceptor } from './modules/key_interceptor/KeyInterceptor'; import { VersionCheck } from './modules/version_check/VersionCheck'; -import { AirframeCheck } from './modules/airframe_check/AirframeCheck'; +import { AircraftSync } from './modules/aircraft_sync/AircraftSync'; /** * This is the main class for the extras-host instrument. @@ -41,7 +41,9 @@ class ExtrasHost extends BaseInstrument { private readonly keyInterceptor: KeyInterceptor; - private readonly airframeCheck: AirframeCheck; + private readonly aircraftSync: AircraftSync; + + public readonly xmlConfig: Document; /** * "mainmenu" = 0 @@ -63,7 +65,7 @@ class ExtrasHost extends BaseInstrument { this.pushbuttonCheck = new PushbuttonCheck(this.bus, this.notificationManager); this.versionCheck = new VersionCheck(this.bus); this.keyInterceptor = new KeyInterceptor(this.bus, this.notificationManager); - this.airframeCheck = new AirframeCheck(this.bus); + this.aircraftSync = new AircraftSync(this.bus); console.log('A32NX_EXTRASHOST: Created'); } @@ -86,7 +88,12 @@ class ExtrasHost extends BaseInstrument { this.pushbuttonCheck.connectedCallback(); this.versionCheck.connectedCallback(); this.keyInterceptor.connectedCallback(); - this.airframeCheck.connectedCallback(); + this.aircraftSync.connectedCallback(); + } + + public parseXMLConfig(): void { + super.parseXMLConfig(); + this.aircraftSync.parseXMLConfig(this.xmlConfig); } public Update(): void { @@ -99,7 +106,7 @@ class ExtrasHost extends BaseInstrument { this.versionCheck.startPublish(); this.keyInterceptor.startPublish(); this.simVarPublisher.startPublish(); - this.airframeCheck.startPublish(); + this.aircraftSync.startPublish(); } this.gameState = gs; } else { @@ -108,7 +115,7 @@ class ExtrasHost extends BaseInstrument { this.versionCheck.update(); this.keyInterceptor.update(); - this.airframeCheck.update(); + this.aircraftSync.update(); } } diff --git a/fbw-a32nx/src/systems/extras-host/modules/airframe_check/AirframeCheck.ts b/fbw-a32nx/src/systems/extras-host/modules/aircraft_sync/AircraftSync.ts similarity index 81% rename from fbw-a32nx/src/systems/extras-host/modules/airframe_check/AirframeCheck.ts rename to fbw-a32nx/src/systems/extras-host/modules/aircraft_sync/AircraftSync.ts index ea2b9bd15e5..cf7ca38191e 100644 --- a/fbw-a32nx/src/systems/extras-host/modules/airframe_check/AirframeCheck.ts +++ b/fbw-a32nx/src/systems/extras-host/modules/aircraft_sync/AircraftSync.ts @@ -7,17 +7,23 @@ import { EventBus } from '@microsoft/msfs-sdk'; /** * This class is used to check the airframe of the aircraft and set the LVar */ -export class AirframeCheck { +export class AircraftSync { + public xmlConfig: Document + constructor(private readonly bus: EventBus) { - console.log('AirframeCheck: Created'); + console.log('AircraftSync: Created'); } public connectedCallback(): void { // empty } + public parseXMLConfig(xmlConfig: Document): void { + this.xmlConfig = xmlConfig; + } + public startPublish(): void { - console.log('AirframeCheck: startPublish()'); + console.log('AicraftSync: startPublish()'); const airframe = new URL(document.querySelectorAll('vcockpit-panel > *')[0].getAttribute('url')).searchParams.get('Airframe'); let aircraftType: AircraftType; diff --git a/fbw-common/src/systems/shared/src/index.ts b/fbw-common/src/systems/shared/src/index.ts index 196cc0e4992..f9f5c542a58 100644 --- a/fbw-common/src/systems/shared/src/index.ts +++ b/fbw-common/src/systems/shared/src/index.ts @@ -14,7 +14,7 @@ export * from './MathUtils'; export * from './PathVector'; export * from './RunwayUtils'; export * from './UpdateThrottler'; -export * from './aircraftTypeCheck'; +export * from './AircraftTypeCheck'; export * from './arinc429'; export * from './array'; export * from './ata'; From 53f0eef08eec295bf72c46587deb8c41232459ca Mon Sep 17 00:00:00 2001 From: 2hwk Date: Sun, 31 Mar 2024 14:01:15 +0800 Subject: [PATCH 12/18] refactor: env.AIRCRAFT_PREFIX -> env.AIRCRAFT_PROJECT_PREFIX --- .github/workflows/a380x-exp.yml | 4 ++-- .github/workflows/ingamepanels-checklist-fix.yml | 4 ++-- .github/workflows/master.yml | 8 ++++---- .github/workflows/pr.yml | 4 ++-- .github/workflows/pre-release.yml | 4 ++-- .github/workflows/release.yml | 4 ++-- fbw-a32nx/.env | 2 +- fbw-a32nx/src/systems/instruments/buildSrc/plugins.mjs | 2 +- fbw-a380x/.env | 2 +- fbw-a380x/src/systems/instruments/buildSrc/plugins.mjs | 2 +- .../instruments/src/EFB/Settings/Pages/AboutPage.tsx | 7 +++---- fbw-common/src/systems/instruments/src/EFB/vite.config.ts | 2 +- 12 files changed, 22 insertions(+), 23 deletions(-) diff --git a/.github/workflows/a380x-exp.yml b/.github/workflows/a380x-exp.yml index c9cfd28dcb7..3fbb99fc130 100644 --- a/.github/workflows/a380x-exp.yml +++ b/.github/workflows/a380x-exp.yml @@ -17,7 +17,7 @@ jobs: FBW_PRODUCTION_BUILD: 1 A32NX_INSTRUMENTS_BUILD_WORKERS: 2 BUILD_DIR_NAME: a380x-experimental-a32nx - AIRCRAFT_PREFIX: a32nx + AIRCRAFT_PROJECT_PREFIX: a32nx steps: - name: Checkout source uses: actions/checkout@v4 @@ -30,7 +30,7 @@ jobs: echo CLIENT_SECRET=\"${{ secrets.NAVIGRAPH_CLIENT_SECRET }}\" >> fbw-a32nx/.env echo CHARTFOX_SECRET=\"${{ secrets.CHARTFOX_SECRET }}\" >> fbw-a32nx/.env echo SENTRY_DSN=\"${{ secrets.SENTRY_DSN }}\" >> fbw-a32nx/.env - echo AIRCRAFT_PREFIX=${{ env.AIRCRAFT_PREFIX }} >> fbw-a32nx/.env + echo AIRCRAFT_PROJECT_PREFIX=${{ env.AIRCRAFT_PREFIX }} >> fbw-a32nx/.env echo BUILD_DIR_NAME=${{ env.BUILD_DIR_NAME }} >> .env echo LOCALAZY_READ_KEY=${{ secrets.LOCALAZY_READ_KEY }} >> .env echo VITE_BUILD=false >> .env diff --git a/.github/workflows/ingamepanels-checklist-fix.yml b/.github/workflows/ingamepanels-checklist-fix.yml index f6689c66f51..8c7392890d1 100644 --- a/.github/workflows/ingamepanels-checklist-fix.yml +++ b/.github/workflows/ingamepanels-checklist-fix.yml @@ -21,7 +21,7 @@ jobs: FBW_PRODUCTION_BUILD: 1 MASTER_ZIP_NAME: ingamepanels-checklist-fix-master.zip BUILD_DIR_NAME: master - AIRCRAFT_PREFIX: a32nx + AIRCRAFT_PROJECT_PREFIX: a32nx steps: - name: Checkout source uses: actions/checkout@v2 @@ -34,7 +34,7 @@ jobs: echo CLIENT_SECRET=${{ secrets.NAVIGRAPH_CLIENT_SECRET }} >> .env echo CHARTFOX_SECRET=${{ secrets.CHARTFOX_SECRET }} >> .env echo SENTRY_DSN=${{ secrets.SENTRY_DSN }} >> .env - echo AIRCRAFT_PREFIX=${{ env.AIRCRAFT_PREFIX }} >> .env + echo AIRCRAFT_PROJECT_PREFIX=${{ env.AIRCRAFT_PROJECT_PREFIX }} >> .env echo BUILD_DIR_NAME=${{ env.BUILD_DIR_NAME }} >> .env echo LOCALAZY_READ_KEY=${{ secrets.LOCALAZY_READ_KEY }} >> .env - name: Build In-Game Panels Checklist Fix diff --git a/.github/workflows/master.yml b/.github/workflows/master.yml index 8c9553bd4e8..ed2ef93b4ca 100644 --- a/.github/workflows/master.yml +++ b/.github/workflows/master.yml @@ -22,7 +22,7 @@ jobs: VMASTER_PRE_RELEASE_ID: 32243965 VMASTER_PRE_RELEASE_TAG: vmaster BUILD_DIR_NAME: master-a32nx - AIRCRAFT_PREFIX: a32nx + AIRCRAFT_PROJECT_PREFIX: a32nx steps: - name: Checkout source uses: actions/checkout@v4 @@ -35,7 +35,7 @@ jobs: echo CLIENT_SECRET=\"${{ secrets.NAVIGRAPH_CLIENT_SECRET }}\" >> fbw-a32nx/.env echo CHARTFOX_SECRET=\"${{ secrets.CHARTFOX_SECRET }}\" >> fbw-a32nx/.env echo SENTRY_DSN=\"${{ secrets.SENTRY_DSN }}\" >> fbw-a32nx/.env - echo AIRCRAFT_PREFIX=\"${{ env.AIRCRAFT_PREFIX }}\" >> fbw-a32nx/.env + echo AIRCRAFT_PROJECT_PREFIX=\"${{ env.AIRCRAFT_PROJECT_PREFIX }}\" >> fbw-a32nx/.env echo BUILD_DIR_NAME=${{ env.BUILD_DIR_NAME }} >> .env echo LOCALAZY_READ_KEY=${{ secrets.LOCALAZY_READ_KEY }} >> .env echo VITE_BUILD=false >> .env @@ -102,7 +102,7 @@ jobs: VMASTER_PRE_RELEASE_ID: 32243965 VMASTER_PRE_RELEASE_TAG: vmaster BUILD_DIR_NAME: master-a380x - AIRCRAFT_PREFIX: a380x + AIRCRAFT_PROJECT_PREFIX: a380x steps: - name: Checkout source uses: actions/checkout@v4 @@ -115,7 +115,7 @@ jobs: echo CLIENT_SECRET=\"${{ secrets.NAVIGRAPH_CLIENT_SECRET_A380X }}\" >> fbw-a380x/.env echo CHARTFOX_SECRET=\"${{ secrets.CHARTFOX_SECRET }}\" >> fbw-a380x/.env echo SENTRY_DSN=\"${{ secrets.SENTRY_DSN }}\" >> fbw-a380x/.env - echo AIRCRAFT_PREFIX=\"${{ env.AIRCRAFT_PREFIX }}\" >> fbw-a380x/.env + echo AIRCRAFT_PROJECT_PREFIX=\"${{ env.AIRCRAFT_PROJECT_PREFIX }}\" >> fbw-a380x/.env echo BUILD_DIR_NAME=${{ env.BUILD_DIR_NAME }} >> .env echo LOCALAZY_READ_KEY=${{ secrets.LOCALAZY_READ_KEY }} >> .env echo VITE_BUILD=false >> .env diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 67f8c5e9c3d..456aa8f90da 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -49,7 +49,7 @@ jobs: if: github.event.pull_request.draft == false env: FBW_PRODUCTION_BUILD: 1 - AIRCRAFT_PREFIX: a32nx + AIRCRAFT_PROJECT_PREFIX: a32nx steps: - name: Checkout source uses: actions/checkout@v4 @@ -61,7 +61,7 @@ jobs: echo CLIENT_SECRET=\"${{ secrets.NAVIGRAPH_CLIENT_SECRET_A380X }}\" >> fbw-a32nx/.env echo CHARTFOX_SECRET=\"${{ secrets.CHARTFOX_SECRET }}\" >> fbw-a32nx/.env echo SENTRY_DSN=\"${{ secrets.SENTRY_DSN }}\" >> fbw-a32nx/.env - echo AIRCRAFT_PREFIX=\"${{ env.AIRCRAFT_PREFIX }}\" >> fbw-a32nx/.env + echo AIRCRAFT_PROJECT_PREFIX=\"${{ env.AIRCRAFT_PROJECT_PREFIX }}\" >> fbw-a32nx/.env echo LOCALAZY_READ_KEY=${{ secrets.LOCALAZY_READ_KEY }} >> .env echo VITE_BUILD=false >> .env cat fbw-a32nx/.env diff --git a/.github/workflows/pre-release.yml b/.github/workflows/pre-release.yml index 9e15f120ea0..6621055bc8a 100644 --- a/.github/workflows/pre-release.yml +++ b/.github/workflows/pre-release.yml @@ -12,7 +12,7 @@ jobs: FBW_PRODUCTION_BUILD: 1 RELEASE_ZIP_NAME: A32NX-stable.7z BUILD_DIR_NAME: stable - AIRCRAFT_PREFIX: a32nx + AIRCRAFT_PROJECT_PREFIX: a32nx steps: - name: Checkout source uses: actions/checkout@v2 @@ -24,7 +24,7 @@ jobs: echo CHARTFOX_SECRET=\"${{ secrets.CHARTFOX_SECRET }}\" >> fbw-a32nx/.env echo SENTRY_DSN=\"${{ secrets.SENTRY_DSN }}\" >> fbw-a32nx/.env echo BUILD_DIR_NAME=${{ env.BUILD_DIR_NAME }} >> .env - echo BUILD_DIR_NAME=${{ env.AIRCRAFT_PREFIX }} >> fbw-a32nx/.env + echo BUILD_DIR_NAME=${{ env.AIRCRAFT_PROJECT_PREFIX }} >> fbw-a32nx/.env echo LOCALAZY_READ_KEY=${{ secrets.LOCALAZY_READ_KEY }} >> .env echo VITE_BUILD=false >> .env - name: Build A32NX diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 9af8e0867a9..318e98b4a9c 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -15,7 +15,7 @@ jobs: STABLE_PRE_RELEASE_TAG: assets/stable STABLE_ZIP_NAME: A32NX-stable.7z BUILD_DIR_NAME: stable - AIRCRAFT_PREFIX: a32nx + AIRCRAFT_PROJECT_PREFIX: a32nx steps: - name: Checkout source uses: actions/checkout@v2 @@ -26,7 +26,7 @@ jobs: echo CLIENT_SECRET=\"${{ secrets.NAVIGRAPH_CLIENT_SECRET }}\" >> fbw-a32nx/.env echo CHARTFOX_SECRET=\"${{ secrets.CHARTFOX_SECRET }}\" >> fbw-a32nx/.env echo SENTRY_DSN=\"${{ secrets.SENTRY_DSN }}\" >> fbw-a32nx/.env - echo AIRCRAFT_PREFIX=\"${{ secrets.AIRCRAFT_PREFIX }}\" >> fbw-a32nx/.env + echo AIRCRAFT_PROJECT_PREFIX=\"${{ secrets.AIRCRAFT_PROJECT_PREFIX }}\" >> fbw-a32nx/.env echo BUILD_DIR_NAME=${{ env.BUILD_DIR_NAME }} >> .env echo LOCALAZY_READ_KEY=${{ secrets.LOCALAZY_READ_KEY }} >> .env echo VITE_BUILD=false >> .env diff --git a/fbw-a32nx/.env b/fbw-a32nx/.env index dad87189b33..bcf1eb67da6 100644 --- a/fbw-a32nx/.env +++ b/fbw-a32nx/.env @@ -3,4 +3,4 @@ NODE_ENV=production CLIENT_SECRET="" CLIENT_ID="" SENTRY_DSN="" -AIRCRAFT_PREFIX="a32nx" +AIRCRAFT_PROJECT_PREFIX="a32nx" diff --git a/fbw-a32nx/src/systems/instruments/buildSrc/plugins.mjs b/fbw-a32nx/src/systems/instruments/buildSrc/plugins.mjs index 6556f9dba32..f4175e1e896 100644 --- a/fbw-a32nx/src/systems/instruments/buildSrc/plugins.mjs +++ b/fbw-a32nx/src/systems/instruments/buildSrc/plugins.mjs @@ -79,7 +79,7 @@ export function baseCompile(instrumentName, instrumentFolder) { 'process.env.CLIENT_SECRET': JSON.stringify(process.env.CLIENT_SECRET), 'process.env.CHARTFOX_SECRET': JSON.stringify(process.env.CHARTFOX_SECRET), 'process.env.SENTRY_DSN': JSON.stringify(process.env.SENTRY_DSN), - 'process.env.AIRCRAFT_PREFIX': JSON.stringify(process.env.AIRCRAFT_PREFIX), + 'process.env.AIRCRAFT_PROJECT_PREFIX': JSON.stringify(process.env.AIRCRAFT_PROJECT_PREFIX), }), postCss(instrumentName, instrumentFolder), ]; diff --git a/fbw-a380x/.env b/fbw-a380x/.env index 8d20fe430bf..3bbcdbda4b3 100644 --- a/fbw-a380x/.env +++ b/fbw-a380x/.env @@ -3,4 +3,4 @@ NODE_ENV=production CLIENT_SECRET="" CLIENT_ID="" SENTRY_DSN="" -AIRCRAFT_PREFIX="a380x" +AIRCRAFT_PROJECT_PREFIX="a380x" diff --git a/fbw-a380x/src/systems/instruments/buildSrc/plugins.mjs b/fbw-a380x/src/systems/instruments/buildSrc/plugins.mjs index 6556f9dba32..f4175e1e896 100644 --- a/fbw-a380x/src/systems/instruments/buildSrc/plugins.mjs +++ b/fbw-a380x/src/systems/instruments/buildSrc/plugins.mjs @@ -79,7 +79,7 @@ export function baseCompile(instrumentName, instrumentFolder) { 'process.env.CLIENT_SECRET': JSON.stringify(process.env.CLIENT_SECRET), 'process.env.CHARTFOX_SECRET': JSON.stringify(process.env.CHARTFOX_SECRET), 'process.env.SENTRY_DSN': JSON.stringify(process.env.SENTRY_DSN), - 'process.env.AIRCRAFT_PREFIX': JSON.stringify(process.env.AIRCRAFT_PREFIX), + 'process.env.AIRCRAFT_PROJECT_PREFIX': JSON.stringify(process.env.AIRCRAFT_PROJECT_PREFIX), }), postCss(instrumentName, instrumentFolder), ]; diff --git a/fbw-common/src/systems/instruments/src/EFB/Settings/Pages/AboutPage.tsx b/fbw-common/src/systems/instruments/src/EFB/Settings/Pages/AboutPage.tsx index ee330793349..13fa4857983 100644 --- a/fbw-common/src/systems/instruments/src/EFB/Settings/Pages/AboutPage.tsx +++ b/fbw-common/src/systems/instruments/src/EFB/Settings/Pages/AboutPage.tsx @@ -2,7 +2,7 @@ // SPDX-License-Identifier: GPL-3.0 import React, { useEffect, useState } from 'react'; -import { usePersistentProperty, useSessionStorage, AircraftVersionChecker, BuildInfo, SentryConsentState, SENTRY_CONSENT_KEY, useSimVar, AircraftType } from '@flybywiresim/fbw-sdk'; +import { usePersistentProperty, useSessionStorage, AircraftVersionChecker, BuildInfo, SentryConsentState, SENTRY_CONSENT_KEY, useSimVar, AircraftInfo } from '@flybywiresim/fbw-sdk'; import { t } from '@flybywiresim/flypad'; import { SettingsPage } from '../Settings'; // @ts-ignore @@ -49,7 +49,6 @@ export const AboutPage = () => { const [sessionId] = usePersistentProperty('A32NX_SENTRY_SESSION_ID'); const [version, setVersion] = useSessionStorage('SIM_VERSION', ''); const [sentryEnabled] = usePersistentProperty(SENTRY_CONSENT_KEY, SentryConsentState.Refused); - const [airframe] = useSimVar('L:A32NX_AIRCRAFT_TYPE', 'Enum'); // Callback function to set sBuildVersion from the community panel const onSetPlayerData = (data: CommunityPanelPlayerData) => { @@ -61,9 +60,9 @@ export const AboutPage = () => { useEffect(() => { AircraftVersionChecker.getBuildInfo( - process.env.AIRCRAFT_PREFIX, + process.env.AIRCRAFT_PROJECT_PREFIX, ).then((info) => setBuildInfo(info)); - }, [airframe]); + }, [process.env.AIRCRAFT_PROJECT_PREFIX]); return ( diff --git a/fbw-common/src/systems/instruments/src/EFB/vite.config.ts b/fbw-common/src/systems/instruments/src/EFB/vite.config.ts index 4ca6e46bc9f..5ab4a79192b 100644 --- a/fbw-common/src/systems/instruments/src/EFB/vite.config.ts +++ b/fbw-common/src/systems/instruments/src/EFB/vite.config.ts @@ -11,7 +11,7 @@ import dotenv from 'dotenv'; dotenv.config({ path: '../../../../../../.env' }); -const envVarsToReplace = ['CLIENT_ID', 'CLIENT_SECRET', 'SENTRY_DSN', 'AIRCRAFT_PREFIX']; +const envVarsToReplace = ['CLIENT_ID', 'CLIENT_SECRET', 'SENTRY_DSN', 'AIRCRAFT_PROJECT_PREFIX']; export default defineConfig({ css: { From 0b29cb4467f1f00ef92f0686d91bfb4f67904303 Mon Sep 17 00:00:00 2001 From: 2hwk Date: Sun, 31 Mar 2024 15:35:50 +0800 Subject: [PATCH 13/18] refactor: remove getAircraftType redundant function and clean up 'a32nx' to use environ --- fbw-a32nx/src/systems/extras-host/index.ts | 4 ++-- .../modules/aircraft_sync/AircraftSync.ts | 8 +++---- .../modules/version_check/VersionCheck.ts | 6 ++--- .../systems/instruments/src/Common/index.tsx | 2 +- .../src/systems/sentry-client/src/index.ts | 2 +- .../src/EFB/Apis/Simbrief/simbriefParser.ts | 4 ++-- .../src/EFB/Settings/Pages/AboutPage.tsx | 5 ++-- ...ker.ts => AircraftGithubVersionChecker.ts} | 10 ++++---- .../systems/shared/src/aircraftTypeCheck.ts | 23 ------------------- 9 files changed, 21 insertions(+), 43 deletions(-) rename fbw-common/src/systems/shared/src/{AircraftVersionChecker.ts => AircraftGithubVersionChecker.ts} (96%) diff --git a/fbw-a32nx/src/systems/extras-host/index.ts b/fbw-a32nx/src/systems/extras-host/index.ts index 56e7a30ad4b..2acc3bc385e 100644 --- a/fbw-a32nx/src/systems/extras-host/index.ts +++ b/fbw-a32nx/src/systems/extras-host/index.ts @@ -63,9 +63,9 @@ class ExtrasHost extends BaseInstrument { this.notificationManager = new NotificationManager(); this.pushbuttonCheck = new PushbuttonCheck(this.bus, this.notificationManager); - this.versionCheck = new VersionCheck(this.bus); this.keyInterceptor = new KeyInterceptor(this.bus, this.notificationManager); - this.aircraftSync = new AircraftSync(this.bus); + this.versionCheck = new VersionCheck(process.env.AIRCRAFT_PROJECT_PREFIX, this.bus); + this.aircraftSync = new AircraftSync(process.env.AIRCRAFT_PROJECT_PREFIX, this.bus); console.log('A32NX_EXTRASHOST: Created'); } diff --git a/fbw-a32nx/src/systems/extras-host/modules/aircraft_sync/AircraftSync.ts b/fbw-a32nx/src/systems/extras-host/modules/aircraft_sync/AircraftSync.ts index cf7ca38191e..a208795fc3e 100644 --- a/fbw-a32nx/src/systems/extras-host/modules/aircraft_sync/AircraftSync.ts +++ b/fbw-a32nx/src/systems/extras-host/modules/aircraft_sync/AircraftSync.ts @@ -10,7 +10,7 @@ import { EventBus } from '@microsoft/msfs-sdk'; export class AircraftSync { public xmlConfig: Document - constructor(private readonly bus: EventBus) { + constructor(private readonly aircraftProjectPrefix: string, private readonly bus: EventBus) { console.log('AircraftSync: Created'); } @@ -22,6 +22,8 @@ export class AircraftSync { this.xmlConfig = xmlConfig; } + // TODO: Remove this sync when VFS config is done. + // Replace with new function for commbus implementation to sync VFS markup config to WASM public startPublish(): void { console.log('AicraftSync: startPublish()'); @@ -33,10 +35,8 @@ export class AircraftSync { aircraftType = AircraftType.A380_842; break; case 'A320_251N': - aircraftType = AircraftType.A320_251N; - break; default: - aircraftType = AircraftType.Unknown; + aircraftType = AircraftType.A320_251N; break; } diff --git a/fbw-a32nx/src/systems/extras-host/modules/version_check/VersionCheck.ts b/fbw-a32nx/src/systems/extras-host/modules/version_check/VersionCheck.ts index baa68ffe25f..1450c0abed1 100644 --- a/fbw-a32nx/src/systems/extras-host/modules/version_check/VersionCheck.ts +++ b/fbw-a32nx/src/systems/extras-host/modules/version_check/VersionCheck.ts @@ -2,13 +2,13 @@ // SPDX-License-Identifier: GPL-3.0 import { EventBus } from '@microsoft/msfs-sdk'; -import { AircraftVersionChecker } from '@fbw-common/shared/AircraftVersionChecker'; +import { AircraftGithubVersionChecker } from '@fbw-common/shared/AircraftGithubVersionChecker'; /** * This class is used to check the version of the aircraft and display a warning if it is too old. */ export class VersionCheck { - constructor(private readonly bus: EventBus) { + constructor(private readonly aircraftProjectPrefix: string, private readonly bus: EventBus) { console.log('VersionCheck: Created'); } @@ -18,7 +18,7 @@ export class VersionCheck { public startPublish(): void { console.log('VersionCheck: startPublish()'); - AircraftVersionChecker.checkVersion('a32nx'); + AircraftGithubVersionChecker.checkVersion(this.aircraftProjectPrefix); } public update(): void { diff --git a/fbw-a32nx/src/systems/instruments/src/Common/index.tsx b/fbw-a32nx/src/systems/instruments/src/Common/index.tsx index 234a0ecb464..e0ae9d30229 100644 --- a/fbw-a32nx/src/systems/instruments/src/Common/index.tsx +++ b/fbw-a32nx/src/systems/instruments/src/Common/index.tsx @@ -15,7 +15,7 @@ export const render = (Slot: React.ReactElement, enableSentryTracing = false, se const doRender = () => { new FbwAircraftSentryClient().onInstrumentLoaded({ dsn: process.env.SENTRY_DSN, - buildInfoFilePrefix: 'a32nx', + buildInfoFilePrefix: process.env.AIRCRAFT_PROJECT_PREFIX, enableTracing: enableSentryTracing, root: sentryRootClient, }); diff --git a/fbw-a32nx/src/systems/sentry-client/src/index.ts b/fbw-a32nx/src/systems/sentry-client/src/index.ts index b721968a9e9..e3ac35d7ed8 100644 --- a/fbw-a32nx/src/systems/sentry-client/src/index.ts +++ b/fbw-a32nx/src/systems/sentry-client/src/index.ts @@ -8,7 +8,7 @@ declare const process: any; new FbwAircraftSentryClient().onInstrumentLoaded({ dsn: process.env.SENTRY_DSN, - buildInfoFilePrefix: 'a32nx', + buildInfoFilePrefix: process.env.AIRCRAFT_PROJECT_PREFIX, root: false, enableTracing: false, }); diff --git a/fbw-common/src/systems/instruments/src/EFB/Apis/Simbrief/simbriefParser.ts b/fbw-common/src/systems/instruments/src/EFB/Apis/Simbrief/simbriefParser.ts index 4cbe0b460d9..50e6a210878 100644 --- a/fbw-common/src/systems/instruments/src/EFB/Apis/Simbrief/simbriefParser.ts +++ b/fbw-common/src/systems/instruments/src/EFB/Apis/Simbrief/simbriefParser.ts @@ -1,7 +1,7 @@ // Copyright (c) 2023-2024 FlyByWire Simulations // SPDX-License-Identifier: GPL-3.0 -import { AircraftVersionChecker, getAircraftType } from '@flybywiresim/fbw-sdk'; +import { AircraftGithubVersionChecker } from '@flybywiresim/fbw-sdk'; import { ISimbriefData } from './simbriefInterface'; const SIMBRIEF_BASE_URL = 'https://www.simbrief.com/api/xml.fetcher.php'; @@ -30,7 +30,7 @@ export const getSimbriefData = async (navigraphUsername: string, overrideSimbrie // will throw an error - if this is fixed (build_info for a380x is readable from the flyPad for the A380X) then // this try/catch could be removed, but it doesn't hurt to have it here even then as an extra safety measure try { - const versionInfo = await AircraftVersionChecker.getBuildInfo(getAircraftType()); + const versionInfo = await AircraftGithubVersionChecker.getBuildInfo(process.env.AIRCRAFT_PROJECT_PREFIX); simbriefApiParams.append('client', `fbw-${versionInfo.version}`); } catch (e) { console.error('Error getting build info', e); diff --git a/fbw-common/src/systems/instruments/src/EFB/Settings/Pages/AboutPage.tsx b/fbw-common/src/systems/instruments/src/EFB/Settings/Pages/AboutPage.tsx index 13fa4857983..f1b45868861 100644 --- a/fbw-common/src/systems/instruments/src/EFB/Settings/Pages/AboutPage.tsx +++ b/fbw-common/src/systems/instruments/src/EFB/Settings/Pages/AboutPage.tsx @@ -2,7 +2,7 @@ // SPDX-License-Identifier: GPL-3.0 import React, { useEffect, useState } from 'react'; -import { usePersistentProperty, useSessionStorage, AircraftVersionChecker, BuildInfo, SentryConsentState, SENTRY_CONSENT_KEY, useSimVar, AircraftInfo } from '@flybywiresim/fbw-sdk'; +import { usePersistentProperty, useSessionStorage, AircraftGithubVersionChecker, BuildInfo, SentryConsentState, SENTRY_CONSENT_KEY, useSimVar, AircraftInfo } from '@flybywiresim/fbw-sdk'; import { t } from '@flybywiresim/flypad'; import { SettingsPage } from '../Settings'; // @ts-ignore @@ -49,6 +49,7 @@ export const AboutPage = () => { const [sessionId] = usePersistentProperty('A32NX_SENTRY_SESSION_ID'); const [version, setVersion] = useSessionStorage('SIM_VERSION', ''); const [sentryEnabled] = usePersistentProperty(SENTRY_CONSENT_KEY, SentryConsentState.Refused); + const [aircraftInfo, setAircraftInfo] = useState(undefined); // Callback function to set sBuildVersion from the community panel const onSetPlayerData = (data: CommunityPanelPlayerData) => { @@ -59,7 +60,7 @@ export const AboutPage = () => { useViewListenerEvent('JS_LISTENER_COMMUNITY', 'SetGamercardInfo', onSetPlayerData); useEffect(() => { - AircraftVersionChecker.getBuildInfo( + AircraftGithubVersionChecker.getBuildInfo( process.env.AIRCRAFT_PROJECT_PREFIX, ).then((info) => setBuildInfo(info)); }, [process.env.AIRCRAFT_PROJECT_PREFIX]); diff --git a/fbw-common/src/systems/shared/src/AircraftVersionChecker.ts b/fbw-common/src/systems/shared/src/AircraftGithubVersionChecker.ts similarity index 96% rename from fbw-common/src/systems/shared/src/AircraftVersionChecker.ts rename to fbw-common/src/systems/shared/src/AircraftGithubVersionChecker.ts index 07d15bce13d..0df5114d11b 100644 --- a/fbw-common/src/systems/shared/src/AircraftVersionChecker.ts +++ b/fbw-common/src/systems/shared/src/AircraftGithubVersionChecker.ts @@ -40,7 +40,7 @@ export enum KnowBranchNames { * Provides functions to the check the version of the aircraft against the * published GitHub version */ -export class AircraftVersionChecker { +export class AircraftGithubVersionChecker { private static notification: NotificationManager; private static versionChecked = false; @@ -59,7 +59,7 @@ export class AircraftVersionChecker { * @returns true if the aircraft version has been checked, false if no check has been commenced. */ public static async checkVersion(aircraft: string): Promise { - console.log('Checking aircraft version'); + console.log(`Checking aircraft version for A/C project: ${aircraft}`); this.notification = new NotificationManager(); @@ -80,9 +80,9 @@ export class AircraftVersionChecker { const versionInfo = this.getVersionInfo(this.buildInfo.version); if (this.checkOutdated(versionInfo)) { this.setOutdatedVersionFlag(true); - console.log('Aircraft version outdated'); + console.log(`Aircraft ${aircraft} - version outdated`); } else { - console.log('Aircraft version ok'); + console.log(`Aircraft ${aircraft} - version ok`); } this.versionChecked = true; } catch (error) { @@ -152,7 +152,7 @@ export class AircraftVersionChecker { this.releaseInfo = await GitVersions.getReleases('flybywiresim', aircraft, false, 0, 1); this.newestCommit = await GitVersions.getNewestCommit('flybywiresim', aircraft, 'master'); this.newestExpCommit = await GitVersions.getNewestCommit('flybywiresim', aircraft, 'experimental'); - this.buildInfo = await AircraftVersionChecker.getBuildInfo(aircraft); + this.buildInfo = await AircraftGithubVersionChecker.getBuildInfo(aircraft); } /** diff --git a/fbw-common/src/systems/shared/src/aircraftTypeCheck.ts b/fbw-common/src/systems/shared/src/aircraftTypeCheck.ts index 44cb735c338..a7bf5afab03 100644 --- a/fbw-common/src/systems/shared/src/aircraftTypeCheck.ts +++ b/fbw-common/src/systems/shared/src/aircraftTypeCheck.ts @@ -6,26 +6,3 @@ export enum AircraftType { A320_251N = 1, A380_842 = 2 } - -/** - * Determine the aircraft type using the Aircraft Title SimVar. - * @returns {string} - the aircraft type (a32nx, a380x, other) - */ -export function getAircraftType(): string { - const aircraftType: AircraftType = SimVar.GetSimVarValue('L:A32NX_AIRCRAFT_TYPE', 'enum'); - let aircraft: string; - - switch (aircraftType) { - case AircraftType.A320_251N: - aircraft = 'a32nx'; - break; - case AircraftType.A380_842: - aircraft = 'a380x'; - break; - case AircraftType.Unknown: - default: - aircraft = 'other'; - } - - return aircraft; -} From 3bdbd570b298c33f1c2615dbe66ca08a7ecc22c8 Mon Sep 17 00:00:00 2001 From: 2hwk Date: Sun, 31 Mar 2024 15:38:49 +0800 Subject: [PATCH 14/18] fix: broken index.ts --- fbw-common/src/systems/shared/src/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fbw-common/src/systems/shared/src/index.ts b/fbw-common/src/systems/shared/src/index.ts index f9f5c542a58..556d3387f84 100644 --- a/fbw-common/src/systems/shared/src/index.ts +++ b/fbw-common/src/systems/shared/src/index.ts @@ -1,4 +1,4 @@ -export * from './AircraftVersionChecker'; +export * from './AircraftGithubVersionChecker'; export * from './ApproachUtils'; export * from './Arinc429ConsumerSubject'; export * from './Arinc429RegisterSubject'; From 3e37b2bc5537aae4886b2e3e8484ed8f03268ae9 Mon Sep 17 00:00:00 2001 From: 2hwk Date: Sun, 31 Mar 2024 16:13:36 +0800 Subject: [PATCH 15/18] fix: remove aboutpage diff --- .../src/systems/instruments/src/EFB/Settings/Pages/AboutPage.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/fbw-common/src/systems/instruments/src/EFB/Settings/Pages/AboutPage.tsx b/fbw-common/src/systems/instruments/src/EFB/Settings/Pages/AboutPage.tsx index f1b45868861..de202e0fb10 100644 --- a/fbw-common/src/systems/instruments/src/EFB/Settings/Pages/AboutPage.tsx +++ b/fbw-common/src/systems/instruments/src/EFB/Settings/Pages/AboutPage.tsx @@ -49,7 +49,6 @@ export const AboutPage = () => { const [sessionId] = usePersistentProperty('A32NX_SENTRY_SESSION_ID'); const [version, setVersion] = useSessionStorage('SIM_VERSION', ''); const [sentryEnabled] = usePersistentProperty(SENTRY_CONSENT_KEY, SentryConsentState.Refused); - const [aircraftInfo, setAircraftInfo] = useState(undefined); // Callback function to set sBuildVersion from the community panel const onSetPlayerData = (data: CommunityPanelPlayerData) => { From 968cc0fbe8b59b51bbd774716b768948bbb6b6f6 Mon Sep 17 00:00:00 2001 From: 2hwk Date: Mon, 1 Apr 2024 00:55:34 +0800 Subject: [PATCH 16/18] fix: adding aircraftsync to a380 and removing aircraftTypeCheck --- fbw-a380x/src/systems/extras-host/index.ts | 13 ++++- .../modules/aircraft_sync/AircraftSync.ts | 50 +++++++++++++++++++ .../modules/version_check/VersionCheck.ts | 2 +- .../systems/shared/src/aircraftTypeCheck.ts | 8 --- fbw-common/src/systems/shared/src/index.ts | 1 - 5 files changed, 63 insertions(+), 11 deletions(-) create mode 100644 fbw-a380x/src/systems/extras-host/modules/aircraft_sync/AircraftSync.ts delete mode 100644 fbw-common/src/systems/shared/src/aircraftTypeCheck.ts diff --git a/fbw-a380x/src/systems/extras-host/index.ts b/fbw-a380x/src/systems/extras-host/index.ts index 1ac80686e76..89032dc5043 100644 --- a/fbw-a380x/src/systems/extras-host/index.ts +++ b/fbw-a380x/src/systems/extras-host/index.ts @@ -7,6 +7,7 @@ import { ExtrasSimVarPublisher } from 'extras-host/modules/common/ExtrasSimVarPu import { PushbuttonCheck } from 'extras-host/modules/pushbutton_check/PushbuttonCheck'; import { KeyInterceptor } from './modules/key_interceptor/KeyInterceptor'; import { VersionCheck } from './modules/version_check/VersionCheck'; +import { AircraftSync } from 'extras-host/modules/aircraft_sync/AircraftSync'; /** * This is the main class for the extras-host instrument. @@ -40,6 +41,8 @@ class ExtrasHost extends BaseInstrument { private readonly keyInterceptor: KeyInterceptor; + private readonly aircraftSync: AircraftSync; + /** * "mainmenu" = 0 * "loading" = 1 @@ -58,8 +61,9 @@ class ExtrasHost extends BaseInstrument { this.notificationManager = new NotificationManager(); this.pushbuttonCheck = new PushbuttonCheck(this.bus, this.notificationManager); - this.versionCheck = new VersionCheck(this.bus); this.keyInterceptor = new KeyInterceptor(this.bus, this.notificationManager); + this.versionCheck = new VersionCheck(process.env.AIRCRAFT_PROJECT_PREFIX, this.bus); + this.aircraftSync = new AircraftSync(process.env.AIRCRAFT_PROJECT_PREFIX, this.bus); console.log('A380X_EXTRASHOST: Created'); } @@ -80,6 +84,12 @@ class ExtrasHost extends BaseInstrument { super.connectedCallback(); this.pushbuttonCheck.connectedCallback(); + this.aircraftSync.connectedCallback(); + } + + public parseXMLConfig(): void { + super.parseXMLConfig(); + this.aircraftSync.parseXMLConfig(this.xmlConfig); } public Update(): void { @@ -93,6 +103,7 @@ class ExtrasHost extends BaseInstrument { this.versionCheck.startPublish(); this.keyInterceptor.startPublish(); this.simVarPublisher.startPublish(); + this.aircraftSync.startPublish(); // Signal that the aircraft is ready via L:A32NX_IS_READY SimVar.SetSimVarValue('L:A32NX_IS_READY', 'number', 1); diff --git a/fbw-a380x/src/systems/extras-host/modules/aircraft_sync/AircraftSync.ts b/fbw-a380x/src/systems/extras-host/modules/aircraft_sync/AircraftSync.ts new file mode 100644 index 00000000000..a208795fc3e --- /dev/null +++ b/fbw-a380x/src/systems/extras-host/modules/aircraft_sync/AircraftSync.ts @@ -0,0 +1,50 @@ +// Copyright (c) 2022 FlyByWire Simulations +// SPDX-License-Identifier: GPL-3.0 + +import { AircraftType } from '@flybywiresim/fbw-sdk'; +import { EventBus } from '@microsoft/msfs-sdk'; + +/** + * This class is used to check the airframe of the aircraft and set the LVar + */ +export class AircraftSync { + public xmlConfig: Document + + constructor(private readonly aircraftProjectPrefix: string, private readonly bus: EventBus) { + console.log('AircraftSync: Created'); + } + + public connectedCallback(): void { + // empty + } + + public parseXMLConfig(xmlConfig: Document): void { + this.xmlConfig = xmlConfig; + } + + // TODO: Remove this sync when VFS config is done. + // Replace with new function for commbus implementation to sync VFS markup config to WASM + public startPublish(): void { + console.log('AicraftSync: startPublish()'); + + const airframe = new URL(document.querySelectorAll('vcockpit-panel > *')[0].getAttribute('url')).searchParams.get('Airframe'); + let aircraftType: AircraftType; + + switch (airframe) { + case 'A380_842': + aircraftType = AircraftType.A380_842; + break; + case 'A320_251N': + default: + aircraftType = AircraftType.A320_251N; + break; + } + + SimVar.SetSimVarValue('L:A32NX_AIRCRAFT_TYPE', 'enum', aircraftType); + console.log(`AirframeCheck: set ${aircraftType}`); + } + + public update(): void { + // empty + } +} diff --git a/fbw-a380x/src/systems/extras-host/modules/version_check/VersionCheck.ts b/fbw-a380x/src/systems/extras-host/modules/version_check/VersionCheck.ts index e4f28374938..54e63fa7f57 100644 --- a/fbw-a380x/src/systems/extras-host/modules/version_check/VersionCheck.ts +++ b/fbw-a380x/src/systems/extras-host/modules/version_check/VersionCheck.ts @@ -7,7 +7,7 @@ import { EventBus } from '@microsoft/msfs-sdk'; * This class is used to check the version of the aircraft and display a warning if it is too old. */ export class VersionCheck { - constructor(private readonly bus: EventBus) { + constructor(private readonly aircraftProjectPrefix: string, private readonly bus: EventBus) { console.log('VersionCheck: Created'); } diff --git a/fbw-common/src/systems/shared/src/aircraftTypeCheck.ts b/fbw-common/src/systems/shared/src/aircraftTypeCheck.ts deleted file mode 100644 index a7bf5afab03..00000000000 --- a/fbw-common/src/systems/shared/src/aircraftTypeCheck.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Copyright (c) 2023-2024 FlyByWire Simulations -// SPDX-License-Identifier: GPL-3.0 - -export enum AircraftType { - Unknown = 0, - A320_251N = 1, - A380_842 = 2 -} diff --git a/fbw-common/src/systems/shared/src/index.ts b/fbw-common/src/systems/shared/src/index.ts index 556d3387f84..74ca5c6821b 100644 --- a/fbw-common/src/systems/shared/src/index.ts +++ b/fbw-common/src/systems/shared/src/index.ts @@ -14,7 +14,6 @@ export * from './MathUtils'; export * from './PathVector'; export * from './RunwayUtils'; export * from './UpdateThrottler'; -export * from './AircraftTypeCheck'; export * from './arinc429'; export * from './array'; export * from './ata'; From 7c6e15a8ae97bb8c924ea6fe653224e4ba88ad80 Mon Sep 17 00:00:00 2001 From: 2hwk Date: Mon, 1 Apr 2024 01:04:51 +0800 Subject: [PATCH 17/18] fix: AircraftType --- .../src/systems/shared/src/AircraftGithubVersionChecker.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/fbw-common/src/systems/shared/src/AircraftGithubVersionChecker.ts b/fbw-common/src/systems/shared/src/AircraftGithubVersionChecker.ts index 0df5114d11b..c968d994490 100644 --- a/fbw-common/src/systems/shared/src/AircraftGithubVersionChecker.ts +++ b/fbw-common/src/systems/shared/src/AircraftGithubVersionChecker.ts @@ -5,6 +5,12 @@ import Compare from 'semver/functions/compare'; import { CommitInfo, GitVersions, ReleaseInfo } from '@flybywiresim/api-client'; import { NotificationManager, PopUpDialog } from '@flybywiresim/fbw-sdk'; +export enum AircraftType { + Unknown = 0, + A320_251N = 1, + A380_842 = 2 +} + /** * Contains the ${aircraft}_build_info.json file's information in a structured way. */ From dc9d0be0eda9697bdbb5de5b566c9ea8a48d85ff Mon Sep 17 00:00:00 2001 From: 2hwk Date: Sat, 6 Apr 2024 00:03:09 +0800 Subject: [PATCH 18/18] fix: process.env --- fbw-common/src/systems/instruments/src/EFB/Efb.tsx | 7 ------- .../src/EFB/Ground/Pages/Pushback/PushbackMap.tsx | 2 +- .../src/systems/shared/src/checklists/ChecklistProvider.ts | 5 ++--- 3 files changed, 3 insertions(+), 11 deletions(-) diff --git a/fbw-common/src/systems/instruments/src/EFB/Efb.tsx b/fbw-common/src/systems/instruments/src/EFB/Efb.tsx index 6c0fc7939ff..37879a412bd 100644 --- a/fbw-common/src/systems/instruments/src/EFB/Efb.tsx +++ b/fbw-common/src/systems/instruments/src/EFB/Efb.tsx @@ -90,13 +90,6 @@ interface BatteryStatus { export const usePower = () => React.useContext(PowerContext); -// this returns either `A380_842` or `A320_251N` depending on the aircraft -// TODO: this will be replaced and improved by PR #8599 -export function getAirframeType() { - return new URL(document.querySelectorAll('vcockpit-panel > *')[0].getAttribute('url')) - .searchParams.get('Airframe'); -} - interface EfbProps { aircraftChecklistsProp: ChecklistJsonDefinition[], } diff --git a/fbw-common/src/systems/instruments/src/EFB/Ground/Pages/Pushback/PushbackMap.tsx b/fbw-common/src/systems/instruments/src/EFB/Ground/Pages/Pushback/PushbackMap.tsx index 27915ea4a5a..cfa8a5abe10 100644 --- a/fbw-common/src/systems/instruments/src/EFB/Ground/Pages/Pushback/PushbackMap.tsx +++ b/fbw-common/src/systems/instruments/src/EFB/Ground/Pages/Pushback/PushbackMap.tsx @@ -10,7 +10,7 @@ import { Coordinates } from 'msfs-geo'; import { computeDestinationPoint, getGreatCircleBearing } from 'geolib'; import getDistance from 'geolib/es/getPreciseDistance'; import { GeolibInputCoordinates } from 'geolib/es/types'; -import { BingMap, t, TooltipWrapper, useAppDispatch, useAppSelector, getAirframeType } from '@flybywiresim/flypad'; +import { BingMap, t, TooltipWrapper, useAppDispatch, useAppSelector } from '@flybywiresim/flypad'; import { setActualMapLatLon, setAircraftIconPosition, diff --git a/fbw-common/src/systems/shared/src/checklists/ChecklistProvider.ts b/fbw-common/src/systems/shared/src/checklists/ChecklistProvider.ts index 9607346fa8c..b3fb1f58ac0 100644 --- a/fbw-common/src/systems/shared/src/checklists/ChecklistProvider.ts +++ b/fbw-common/src/systems/shared/src/checklists/ChecklistProvider.ts @@ -1,7 +1,7 @@ // Copyright (c) 2023-2024 FlyByWire Simulations // SPDX-License-Identifier: GPL-3.0 -import { ConditionType, getAircraftType } from '@flybywiresim/fbw-sdk'; +import { ConditionType } from '@flybywiresim/fbw-sdk'; import JSON5 from 'json5'; import { ChecklistItem, ChecklistJsonDefinition } from './ChecklistInterfaces'; @@ -57,8 +57,7 @@ export class ChecklistProvider { private constructor() { // TODO: adapt to the new unified configuration (PR #8599) - const aircraft = getAircraftType(); - this.configFilename = `/VFS/config/${aircraft}_checklists.json5`; + this.configFilename = `/VFS/config/${process.env.AIRCRAFT_PROJECT_PREFIX}_checklists.json5`; } /**