Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor: remove simplane calls from pfd #7301

Open
wants to merge 13 commits into
base: master
Choose a base branch
from
47 changes: 24 additions & 23 deletions fbw-a32nx/src/systems/instruments/src/PFD/AltitudeIndicator.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,10 @@ import { ClockEvents, DisplayComponent, FSComponent, Subject, Subscribable, VNod
import { ArincEventBus, Arinc429Register, Arinc429Word, Arinc429WordData, Arinc429RegisterSubject } from '@flybywiresim/fbw-sdk';

import { VerticalMode } from '@shared/autopilot';
import { BaroPressureMode } from 'instruments/src/PFD/shared/BaroPressureMode';
import { PressureUnit } from 'instruments/src/PFD/shared/PressureUnit';
import { PFDSimvars } from './shared/PFDSimvarPublisher';
import { DigitalAltitudeReadout } from './DigitalAltitudeReadout';
import { SimplaneValues } from './shared/SimplaneValueProvider';
import { VerticalTape } from './VerticalTape';
import { Arinc429Values } from './shared/ArincValueProvider';

Expand Down Expand Up @@ -127,20 +128,20 @@ class MinimumDescentAltitudeIndicator extends DisplayComponent<{ bus: ArincEvent

private inLandingPhases = false;

private altMode: 'STD' | 'QNH' | 'QFE' = 'STD';
private altMode: BaroPressureMode = BaroPressureMode.QNH;

private readonly mda = Arinc429RegisterSubject.createEmpty();

private landingElevation = new Arinc429Word(0);
private landingElevation = new Arinc429Word(0)

private updateIndication(): void {
this.qnhLandingAltValid = !this.landingElevation.isFailureWarning()
&& !this.landingElevation.isNoComputedData()
&& this.inLandingPhases
&& this.altMode === 'QNH';
&& this.altMode === BaroPressureMode.QNH;

this.qfeLandingAltValid = this.inLandingPhases
&& this.altMode === 'QFE';
&& this.altMode === BaroPressureMode.QNH;

const altDelta = this.mda.get().value - this.altitude;

Expand All @@ -162,7 +163,7 @@ class MinimumDescentAltitudeIndicator extends DisplayComponent<{ bus: ArincEvent
onAfterRender(node: VNode): void {
super.onAfterRender(node);

const sub = this.props.bus.getArincSubscriber<PFDSimvars & Arinc429Values & SimplaneValues>();
const sub = this.props.bus.getArincSubscriber<PFDSimvars & Arinc429Values>();

sub.on('chosenRa').whenArinc429SsmChanged().handle((ra) => {
this.radioAltitudeValid = !ra.isFailureWarning() && !ra.isNoComputedData();
Expand Down Expand Up @@ -287,7 +288,7 @@ export class AltitudeIndicatorOfftape extends DisplayComponent<AltitudeIndicator
onAfterRender(node: VNode): void {
super.onAfterRender(node);

const sub = this.props.bus.getSubscriber<PFDSimvars & Arinc429Values & SimplaneValues>();
const sub = this.props.bus.getSubscriber<PFDSimvars & Arinc429Values>();

sub.on('altitudeAr').handle((altitude) => {
if (!altitude.isNormalOperation()) {
Expand Down Expand Up @@ -380,7 +381,7 @@ interface SelectedAltIndicatorProps {
}

class SelectedAltIndicator extends DisplayComponent<SelectedAltIndicatorProps> {
private mode: 'QNH' | 'QFE' | 'STD' = 'QNH';
private mode: BaroPressureMode;

private selectedAltLowerGroupRef = FSComponent.createRef<SVGGElement>();

Expand Down Expand Up @@ -437,7 +438,7 @@ class SelectedAltIndicator extends DisplayComponent<SelectedAltIndicatorProps> {
onAfterRender(node: VNode): void {
super.onAfterRender(node);

const sub = this.props.bus.getArincSubscriber<PFDSimvars & Arinc429Values & SimplaneValues>();
const sub = this.props.bus.getArincSubscriber<PFDSimvars & Arinc429Values>();

sub.on('altitudeAr').withArinc429Precision(2).handle((a) => {
this.altitude = a;
Expand All @@ -448,7 +449,7 @@ class SelectedAltIndicator extends DisplayComponent<SelectedAltIndicatorProps> {
sub.on('baroMode').whenChanged().handle((m) => {
this.mode = m;

if (this.mode === 'STD') {
if (this.mode === BaroPressureMode.STD) {
this.selectedAltLowerFLText.instance.style.visibility = 'visible';
this.selectedAltUpperFLText.instance.style.visibility = 'visible';
} else {
Expand Down Expand Up @@ -490,7 +491,7 @@ class SelectedAltIndicator extends DisplayComponent<SelectedAltIndicatorProps> {
private setText() {
let boxLength = 19.14;
let text = '0';
if (this.mode === 'STD') {
if (this.mode === BaroPressureMode.STD) {
text = Math.round(this.shownTargetAltitude / 100).toString().padStart(3, '0');
boxLength = 12.5;
} else {
Expand Down Expand Up @@ -532,13 +533,13 @@ interface AltimeterIndicatorProps {
}

class AltimeterIndicator extends DisplayComponent<AltimeterIndicatorProps> {
private mode = Subject.create('');
private mode = Subject.create<BaroPressureMode>(BaroPressureMode.QNH);

private text = Subject.create('');

private pressure = 0;

private unit = '';
private unit: PressureUnit;

private transAltAr = Arinc429Register.empty();

Expand All @@ -555,20 +556,20 @@ class AltimeterIndicator extends DisplayComponent<AltimeterIndicatorProps> {
onAfterRender(node: VNode): void {
super.onAfterRender(node);

const sub = this.props.bus.getArincSubscriber<PFDSimvars & SimplaneValues & Arinc429Values>();
const sub = this.props.bus.getArincSubscriber<PFDSimvars & Arinc429Values>();

sub.on('baroMode').whenChanged().handle((m) => {
if (m === 'QFE') {
if (m === BaroPressureMode.QFE) {
this.mode.set(m);
this.stdGroup.instance.classList.add('HiddenElement');
this.qfeGroup.instance.classList.remove('HiddenElement');
this.qfeBorder.instance.classList.remove('HiddenElement');
} else if (m === 'QNH') {
} else if (m === BaroPressureMode.QNH) {
this.mode.set(m);
this.stdGroup.instance.classList.add('HiddenElement');
this.qfeGroup.instance.classList.remove('HiddenElement');
this.qfeBorder.instance.classList.add('HiddenElement');
} else if (m === 'STD') {
} else if (m !== BaroPressureMode.QFE && m !== BaroPressureMode.QNH) {
this.mode.set(m);
this.stdGroup.instance.classList.remove('HiddenElement');
this.qfeGroup.instance.classList.add('HiddenElement');
Expand Down Expand Up @@ -602,12 +603,12 @@ class AltimeterIndicator extends DisplayComponent<AltimeterIndicatorProps> {
this.getText();
});

sub.on('units').whenChanged().handle((u) => {
sub.on('baroUnit').whenChanged().handle((u) => {
this.unit = u;
this.getText();
});

sub.on('pressure').whenChanged().handle((p) => {
sub.on('baroPressure').whenChanged().handle((p) => {
this.pressure = p;
this.getText();
});
Expand All @@ -618,7 +619,7 @@ class AltimeterIndicator extends DisplayComponent<AltimeterIndicatorProps> {
}

private handleBlink() {
if (this.mode.get() === 'STD') {
if (this.mode.get() === BaroPressureMode.STD) {
if (this.flightPhase > 3 && this.transLvlAr.isNormalOperation() && 100 * this.transLvlAr.value > this.props.altitude.get()) {
this.stdGroup.instance.classList.add('BlinkInfinite');
} else {
Expand All @@ -633,7 +634,7 @@ class AltimeterIndicator extends DisplayComponent<AltimeterIndicatorProps> {

private getText() {
if (this.pressure !== null) {
if (this.unit === 'millibar') {
if (this.unit === PressureUnit.MB) {
this.text.set(Math.round(this.pressure).toString());
} else {
this.text.set(this.pressure.toFixed(2));
Expand All @@ -654,7 +655,7 @@ class AltimeterIndicator extends DisplayComponent<AltimeterIndicatorProps> {

<g ref={this.qfeGroup} id="QFEGroup">
<path ref={this.qfeBorder} class="NormalStroke White" d="m 116.83686,133.0668 h 13.93811 v 5.8933 h -13.93811 z" />
<text id="AltimeterModeText" class="FontMedium White" x="118.23066" y="138.11342">{this.mode}</text>
<text id="AltimeterModeText" class="FontMedium White" x="118.23066" y="138.11342">{this.mode.map((m) => BaroPressureMode[m])}</text>
<text id="AltimeterSettingText" class="FontMedium MiddleAlign Cyan" x="141.25583" y="138.09006">{this.text}</text>
</g>
</g>
Expand Down Expand Up @@ -698,7 +699,7 @@ class MetricAltIndicator extends DisplayComponent<MetricAltIndicatorProps> {
onAfterRender(node: VNode): void {
super.onAfterRender(node);

const sub = this.props.bus.getArincSubscriber<PFDSimvars & Arinc429Values & ClockEvents & SimplaneValues>();
const sub = this.props.bus.getArincSubscriber<PFDSimvars & Arinc429Values & ClockEvents>();

this.mda.sub(() => this.needsUpdate = true);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import { ConsumerSubject, DisplayComponent, FSComponent, MappedSubject, NodeReference, Subject, Subscribable, VNode } from '@microsoft/msfs-sdk';
import { ArincEventBus, Arinc429RegisterSubject } from '@flybywiresim/fbw-sdk';

import { SimplaneBaroMode, SimplaneValues } from 'instruments/src/PFD/shared/SimplaneValueProvider';
import { BaroPressureMode } from 'instruments/src/PFD/shared/BaroPressureMode';
import { Arinc429Values } from './shared/ArincValueProvider';
import { PFDSimvars } from './shared/PFDSimvarPublisher';

Expand Down Expand Up @@ -63,7 +63,7 @@ export class DigitalAltitudeReadout extends DisplayComponent<DigitalAltitudeRead

private readonly altitude = Arinc429RegisterSubject.createEmpty();

private readonly baroMode = ConsumerSubject.create<SimplaneBaroMode>(null, 'QNH');
private readonly baroMode = ConsumerSubject.create<BaroPressureMode>(null, BaroPressureMode.QNH);

private isNegativeSub = Subject.create('hidden')

Expand Down Expand Up @@ -92,7 +92,7 @@ export class DigitalAltitudeReadout extends DisplayComponent<DigitalAltitudeRead
onAfterRender(node: VNode): void {
super.onAfterRender(node);

const sub = this.props.bus.getArincSubscriber<Arinc429Values & PFDSimvars & SimplaneValues>();
const sub = this.props.bus.getArincSubscriber<Arinc429Values & PFDSimvars>();

this.altitude.sub((altitude) => {
const isNegative = altitude.value < 0;
Expand Down
12 changes: 6 additions & 6 deletions fbw-a32nx/src/systems/instruments/src/PFD/SpeedIndicator.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import { ArincEventBus, Arinc429Word, Arinc429WordData } from '@flybywiresim/fbw
import { FmsVars } from 'instruments/src/MsfsAvionicsCommon/providers/FmsDataPublisher';
import { PFDSimvars } from './shared/PFDSimvarPublisher';
import { VerticalTape } from './VerticalTape';
import { SimplaneValues } from './shared/SimplaneValueProvider';
import { Arinc429Values } from './shared/ArincValueProvider';

const ValueSpacing = 10;
Expand Down Expand Up @@ -893,10 +892,11 @@ class SpeedTarget extends DisplayComponent <{ bus: ArincEventBus }> {
super.onAfterRender(node);
this.needsUpdate = true;

const sub = this.props.bus.getArincSubscriber<PFDSimvars & SimplaneValues & ClockEvents & Arinc429Values>();
const sub = this.props.bus.getArincSubscriber<PFDSimvars & ClockEvents & Arinc429Values>();

sub.on('isSelectedSpeed').whenChanged().handle((s) => {
this.speedState.isSpeedManaged = !s;
sub.on('selectedSpeedMode').whenChanged().handle((s) => {
const isSelected = s === 1;
this.speedState.isSpeedManaged = !isSelected;
this.needsUpdate = true;
});

Expand All @@ -906,12 +906,12 @@ class SpeedTarget extends DisplayComponent <{ bus: ArincEventBus }> {
this.needsUpdate = true;
});

sub.on('holdValue').whenChanged().handle((s) => {
sub.on('airspeedHoldValue').whenChanged().handle((s) => {
this.speedState.holdValue = s;
this.needsUpdate = true;
});

sub.on('machActive').whenChanged().handle((s) => {
sub.on('isAirspeedMach').whenChanged().handle((s) => {
this.speedState.isMach = s;
this.needsUpdate = true;
});
Expand Down
10 changes: 5 additions & 5 deletions fbw-a32nx/src/systems/instruments/src/PFD/instrument.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@ import { ArincEventBus } from '@flybywiresim/fbw-sdk';

import { DmcPublisher } from 'instruments/src/MsfsAvionicsCommon/providers/DmcPublisher';
import { FmsDataPublisher } from 'instruments/src/MsfsAvionicsCommon/providers/FmsDataPublisher';
import { SimplaneValueProvider } from 'instruments/src/PFD/shared/SimplaneValueProvider';
import { getDisplayIndex, PFDComponent } from './PFD';
import { AdirsValueProvider } from '../MsfsAvionicsCommon/AdirsValueProvider';
import { ArincValueProvider } from './shared/ArincValueProvider';
import { PFDSimvarPublisher, PFDSimvars } from './shared/PFDSimvarPublisher';
import { SimplaneValueProvider } from './shared/SimplaneValueProvider';

import './style.scss';

Expand All @@ -24,8 +24,6 @@ class A32NX_PFD extends BaseInstrument {

private readonly arincProvider: ArincValueProvider;

private readonly simplaneValueProvider: SimplaneValueProvider;

private readonly clock: Clock;

private adirsValueProvider: AdirsValueProvider<PFDSimvars>;
Expand All @@ -34,6 +32,8 @@ class A32NX_PFD extends BaseInstrument {

private fmsDataPublisher: FmsDataPublisher;

private simplaneValueProvider: SimplaneValueProvider;

/**
* "mainmenu" = 0
* "loading" = 1
Expand All @@ -48,9 +48,9 @@ class A32NX_PFD extends BaseInstrument {
this.simVarPublisher = new PFDSimvarPublisher(this.bus);
this.hEventPublisher = new HEventPublisher(this.bus);
this.arincProvider = new ArincValueProvider(this.bus);
this.simplaneValueProvider = new SimplaneValueProvider(this.bus);
this.clock = new Clock(this.bus);
this.dmcPublisher = new DmcPublisher(this.bus);
this.simplaneValueProvider = new SimplaneValueProvider(this.bus, this.simVarPublisher);
}

get templateID(): string {
Expand Down Expand Up @@ -97,11 +97,11 @@ class A32NX_PFD extends BaseInstrument {
this.adirsValueProvider.start();
this.dmcPublisher.startPublish();
this.fmsDataPublisher.startPublish();
this.simplaneValueProvider.start();
}
this.gameState = gamestate;
} else {
this.simVarPublisher.onUpdate();
this.simplaneValueProvider.onUpdate();
this.clock.onUpdate();
this.dmcPublisher.onUpdate();
this.fmsDataPublisher.onUpdate();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export enum BaroPressureMode {
'QFE', 'QNH', 'STD'
}
Original file line number Diff line number Diff line change
Expand Up @@ -163,8 +163,16 @@ export type PFDSimvars = AdirsSimVars & SwitchingPanelVSimVars & {
fm1TransAltRaw: number;
fm2TransAltRaw: number;
fm1TransLvlRaw: number;
fm2TransLvlRaw: number
}
fm2TransLvlRaw: number;
baroMode: number;
baroUnit: number;
baroPressure: number;
selectedSpeedMode: number;
selectedAltitude: number;
isAirspeedMach: boolean;
airspeedHoldValue: number;

}

export enum PFDVars {
coldDark = 'L:A32NX_COLD_AND_DARK_SPAWN',
Expand Down Expand Up @@ -321,6 +329,13 @@ export enum PFDVars {
fm2TransAltRaw = 'L:A32NX_FM2_TRANS_ALT',
fm1TransLvlRaw = 'L:A32NX_FM1_TRANS_LVL',
fm2TransLvlRaw = 'L:A32NX_FM2_TRANS_LVL',
baroMode = 'L:XMLVAR_Baro1_Mode',
baroUnit = 'L:XMLVAR_Baro_Selector_HPA_1',
baroPressure = 'KOHLSMAN SETTING HG',
selectedSpeedMode = 'AUTOPILOT SPEED SLOT INDEX',
selectedAltitude = 'AUTOPILOT ALTITUDE LOCK VAR:3',
isAirspeedMach = 'L:XMLVAR_AirSpeedIsInMach',
airspeedHoldValue = 'AUTOPILOT MACH HOLD VAR',
}

/** A publisher to poll and publish nav/com simvars. */
Expand Down Expand Up @@ -479,6 +494,13 @@ export class PFDSimvarPublisher extends UpdatableSimVarPublisher<PFDSimvars> {
['fm2TransAltRaw', { name: PFDVars.fm2TransAltRaw, type: SimVarValueType.Number }],
['fm1TransLvlRaw', { name: PFDVars.fm1TransLvlRaw, type: SimVarValueType.Number }],
['fm2TransLvlRaw', { name: PFDVars.fm2TransLvlRaw, type: SimVarValueType.Number }],
['baroMode', { name: PFDVars.baroMode, type: SimVarValueType.Number }],
['baroUnit', { name: PFDVars.baroUnit, type: SimVarValueType.Number }],
['baroPressure', { name: PFDVars.baroPressure, type: SimVarValueType.InHG }],
['selectedSpeedMode', { name: PFDVars.selectedSpeedMode, type: SimVarValueType.Number }],
['selectedAltitude', { name: PFDVars.selectedAltitude, type: SimVarValueType.Feet }],
['isAirspeedMach', { name: PFDVars.isAirspeedMach, type: SimVarValueType.Bool }],
['airspeedHoldValue', { name: PFDVars.airspeedHoldValue, type: SimVarValueType.Number }],
])

public constructor(bus: ArincEventBus) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
export enum PressureUnit {
InHG,
MB,
}
Loading
Loading