Skip to content

Commit

Permalink
feat(a380x/oans): OANS integration for A380X (#8564)
Browse files Browse the repository at this point in the history
* ignore flight phase for BTV display; show BTV message at top of ND

* merge fms-v2 into feat-a380x-oans

* implement Navigraph-less BTV fallback

* feat: fms-v2 msfs sync (#8508)

* add intial sync with all todos and hacks

* serialize dest and origin airports

* fix: guard origin and destination airport in serialization

* fix: waypoint insertion, add extra module for sync

* remove unncecessary change

* use more granular sync events

* some cleanup

* feat: sync flight plan from game

* fix some errors

* more log

* fix: export FlightPlanRpcServer

* fix: mapping

* fix: delay init until ingame

* use native fms2 sync

* fix: missing airport and runway in sync

* Revert "fix: missing airport and runway in sync"

This reverts commit 0d87e5a.

* Revert "use native fms2 sync"

This reverts commit b9f2f1f.

* fix: sync confusion

* small improvement

* enable basic load from sim

* fix: rpcclient creation

* only use rpc client for initial load

* fix: datastore subscription

* fix: enroute waypoint insertion

* fix: approach mapping, off by one error and runway selection

* remove flightPlanTest

* fix: typing errors

* fix: destination runways without secondary designator

* fix: lint

* fix(sync): use sensible defaults if mapping fails

* fix: init issue after fixing other init issue

* Fix wrong FD leg ident

* Improve arrival and departure pages

* Handle explicit NO SID, NO STAR, etc. selection

* Refactor MPR selection

* Fix missing disco after leg deletion in alternate

* Remove arrival procedures after changing alternate

* Dump entire alternate plan when changing altn dest

* feat: load MSFS flightplan in "SAVE" mode too

* Remove commented code

* Remove FacilityCache console logging

* Highlight entire row for selected approach

* Allow repeated constraints in F-PLN page

* Remove duplicate code

* Fix deletion of leg after CI at segment boundary

* Implement basic support for XI IF XF leg combination

* Disable SEC fpln functionality for now

* Disable fms-v2 tests until they are fixed

* improve error handling and runway designatorChars

* make loading and saving more resilient

* Disable inoperative buttons

* Remove debugger statement

* Fix WAYPOINT page entry

* Fix missing error message after waypoint insertion

* fix: potential bogus comparison

* Rebuild arrival after setting all alternate procedures

* fix BTV/FMS rwy disagree; transmit remaining rwy end distance after rwy selection; allow BTV exit selection only in PLAN mode

* calculate LDA if none (or invalid) available from Navigraph data

* Handle missing geometry leg again

* Reset managed speed constraint after GA

* change Simvars to Arinc429; compute fallback data only if no Navigraph avail

* Increase VM leg size

* Make MRP side dependent

* Remove dead code

* Fix AIRPORT button getting stuck

* Fix references to dead functions

* before touchdown, transmit BTV remaining distances from threshold location

* Fix typo

* Remove TODO for clarity

* Sync cruise step deletion

* Re-add licence identifier

* Move `WaypointConstraintType`

* fix: do not transmit empty vectors if not needed

* [OANS] move moving map only if on ground or in ARC mode

* Encode MRP in ARINC429

* Update comment

* Remove unused arguments

* Fix wrong TO waypoint for runways

* [OANS] stop lines & labels

* stopping distance requested: Account for touch down zone distance

* BTV: Fix SimVar

(cherry picked from commit 5544557)

* Fix EFB build again

* fix: efb ts config

* [OANS] potential fix for missing labels

* [OANS] draw stop line, update DRY/WET lines, visualize overrun status

* fix: revert optimization until better solution found

* fix: new allocation optimisation for efis vector sync

* refactor: undefined -> null

* Add null check

* Remove JS FMCDataManager

* [OANC] Don't show stop bar below 20kts, improved stop bar drawing, clamp to runway end (kinda)

* fix: hotfix for departure page issue with selecting new dep runway

* fix: only set atc crz flight level when defined, remove console logs

* Change runway ident format

* fix: fpln sync after recent changes

* [OANS] move DRY/WET lines when floating above runway, fix STOP bar bug

* Remove SID when changing runway

* Remove arrival when changing approach

* [OANS] fix WET/DRY labels in flight, improve exit validity check

* fix: text alignment for constraints (font still needs work)

* ci: Rename workflows from 'PR' to more descriptive names  (#8614)

* Update and rename pr.yml to pr-build.yml

* Update PULL_REQUEST_TEMPLATE.md

* Update and rename pr-target.yml to pr-semantics.yml

* Update pr-build.yml

* feat(flight_model): Add drag from landing lights (#8554)

* add landing light drag

* Doc and naming

* typo

* Auto stash before checking out "origin/master"

* Updated drag values

* changelog

* Update cruise.FLT

---------

Co-authored-by: 2hwk <15316958+2hwk@users.noreply.github.com>
Co-authored-by: donstim <70166617+donstim@users.noreply.github.com>

* refactor: Fadec rewrite using Cpp framework (#8547)

* Initial scaffolding for new fadec

* Added SIMULATION RATE to base data

* Added SIM ON GROUND to base data

* Initial scaffolding for new EngineControl

* Initial scaffolding for both aircraft

* Remove build code for old fadec

* migrated the common.h code to Fadec.h

* removed simulation time params

* inlined var init

* Code cleanup and documentation

* Renaming of context var

* Added ThrustLimit_A380X class and helper methods in Fadec.h

* Improved insertThousandsSeparator helper

* Merge fix

* Commenting ThrustLimits_A380X.h

* Commenting SimDataStructs.h

* Adding Polynomials_A380X.hpp

* Adding Table1502_A380X.hpp

* Adding Table1502_A380X.hpp

* Adding some commenting to framework classes

* Adding FuelConfiguration class

* Added TODO

* Import fix

* code style fix

* Renamed Class

* changed class access and fixed migrated code

* Added FadecSimData class and implemented initialization of EngineControl

* Added EngineControl_A380X.cpp update()

* Adding some commenting to framework class

* Implemented additional update functions

* Implemented all required functions

* Checked initialize

* Checked update

* Bug fix setting feed tanks

* Fix unit for EGT

* Refactored var access

* Added profiler

* Added more profiler

* Refactored writing and added gauge profiler

* added "using DataDefinitionVector"

* Prepared A32NX fadec migration (wip)

* Improved Pause detection (removed unnecessary read)

* Additional profiler when PROFILING is set

* Added usage commenting to SimpleProfiler

* Added default flag to set data on Sim Object

* Added a flag to turn on/off warning of dirty data read.

* Minor docu fix in AircraftVariable.h

* Prepared A32NX fadec migration (wip)

* Fixed reading of initial pause var

* Added fuel config and data definitions

* Added ThrustLimits_A32NX.hpp

* Added Polynomials_A32NX.hpp

* Added Tables1502_A32NX.hpp

* Fixed to_string_with_zero_padding by making static

* Added initializeEngineControlData

* Added comment

* Added Gph (Gallons per hour) to UNITS

* Added profiler metadata output

* Migration done - debugging wip

* Commenting FuelConfiguration_A32NX.h

* Commenting and cleanup

* Commenting, cleanup and removed a recursion

* Commenting

* Added EngineRatios class

* Migration done - debugging wip

* Fixed engine startup - code working so far

* Moved read only Aircraft Variables to DataDefinition for 50% performance increase for data update

* Further cleanup

* Undo change in logic for fuel used

* Migration A380X done - debugging & testing

* Cleanup and commenting

* Fixed fuel issue on A380X

* Cleanup and commenting

* Removed previous fadec code

* Cleanup and commenting

* Reversed tank order of flyPad Fuel Page

* Cleanup and commenting

* Fix LVar resetting

* Review changes

* Added CHANGELOG.md entry

* fix(fadec): flex temp unit conversion (#8617)

fix: flex temp unit conversion

* Show NOT ALLOWED upon procedure reselection

* Merge legs after certain disco deletions

* Fix circling approach not showing up

* fix: Fixed bug in checklist to not display previous checklists as completed (#8615)

Fixed bug in checklist to not display previous checklists as completed.

* Fix ND not updating after TMPY deletion

* Fix disco deletion

* [OANS] take runway length from Navigraph geometry (for improved stop line drawing)

* Show NOT ALLOWED upon procedure reselection

* Merge legs after certain disco deletions

* Fix circling approach not showing up

* Fix ND not updating after TMPY deletion

* Fix disco deletion

* fix: don't throw null true bearing when parsing discont

* fix: check for null vs truthiness

* fix: use strict !==

* Fix FREQ not shown after deduplicating airway fixes

* Port tropopause uplink

* Show NOT ALLOWED when attempting to clr ZFW/ZFWCG

* Remove unused import

* [OANS] clamp stop bars to 100/200m behind end of rwy

* [OANS] improve auto-load, let user select only exit lines

* [OANS] various small fixes

(cherry picked from commit d815cd1)

* HIde circling approaches

* Show CLB or DES prompt when necessary

* Show NO TRANS when explicitly selected

* Show ENTRY for pilot constructed points on PROG page

* Filter STARs when only runway selected

* Revert "Show NO TRANS when explicitly selected"

This reverts commit f6a8905.

* Fix NO SID, NO STAR selection not working

* Improve automatic NONE selection

* Improve automatic NONE trans selection

* Handle missing airways during uplink

* fms-v2 runway ident fixes

* feat(fms): fm legs

* fix(fms): to wpt details for fm leg

* Fix trans lvl being reset when changing runway

* Fix runway formatting on PERF page

* implement "RWY AHEAD" advisory

* feat(utils): add angle normalise functions

* fix(fms): fix vor station declination

fixes fix info radials

* display arrow, if airport outside range

* fix: handle "at or below" constraint

* chore: update fms-v2 workflow

* fix: 380 fadec build

* fix(fms): cf leg interpretation

* fix(fms): idf sids => also sids starting with cf leg

* feat(fms): fa leg v0.0.1

* fix: eslint ref

* style: run lint after merge

* chore: fix lint

* chore: fix lint

* Treat missed approach legs as climb constraints

* Fix missed approach track not being shown

* Allow SID without runway

* linting

* port LinearDeviationIndicator from a32nx PFD

* add PFD warnings for ROW, ROP, OANS

* add speed margins to a380x

* add ROP/ROW/OANS PFD warnings to a32nx

* update two-line message, fix bug in getDisplayIndex()

* make RWY TOO SHORT smaller

* Disable second ISIS; update colors for PFD tapes, PFD horizon, EWD THR gauges

* restructure code, add A380X-only warnings

* refactor Publisher structure, leave only data with existing sources

* switch to data words for ROS/ROP and OANS PFD alerts

* clean up

* feat: add some A429 utils

* fix(pfd): tidy up publishers

* feat: add fwc publisher

* fix(pfd): use fwc data for stall warning

* A380X: GPWS PFD alerts, ROP/ROW aural alerts,
A32NX: Add GPWS discrete word to GPWS,
Both: warnings position update

* use correct discrete word bit fields

* Add ROP/ROW aural alerts to A32NX

* fix lint after rebase

* lint-fix

* lint-fix

* push pnpm-lock, fix build

* remove unused FlightPlanTest

* a380x prettier format

* fix green arrow for similar runway QFUs

* fix OANS RWY AHEAD

* update font for IF WET RWY TOO SHORT (fix for a32nx)

* subtract min. TDZ distance for remaining distances before reaching TDZ

* update a32nx environment: Don't include OANC for now

* import updates

* lint + lint-fixes

* add LS reminder for ILS, frequency of ILS information has same font size before and after decimal point

* sync RWY AHEAD to other ND

* OANS: Fix RWY AHEAD for extreme longitudes

(cherry picked from commit 5e72996)

* consolidate to single definitions.scss, use standard colors for thrust gauge and PFD tapes

* move ISIS changes to other PR

* move logic from A32NX_FWC.js to PseudoFWC

* inhibit single chimes for the first two seconds after power-on

* add "ARPT NOT IN ACTIVE F/PLN" message in OANS layer

* call correct gpwsUpdateDiscreteWords function in A32NX

* fix: wrong speedtape failure indication

* use Arinc429RegisterSubject for rowRop and oans words

* delete a380x/fmgc

* disable typecheck for a380x

* update amdb navigraph client to use auth from Navigraph SDK

* fix unit test (will be deleted with MFD PR anyways)

* [OANS] a32nx fixes

(cherry picked from commit 13e10cd)

* limit canvas size: modify offset when airport is very away

* remove console output

* update lockfile

* fix merge errors

* remove a380x/MathUtils

* remove VD

* fix colors

* migrate to MFD UI elements, fix errors

* update nav data

* disable ROP/ROW/BTV distance update above 600ft AGL and when not in approach

* use font for ROT display

* update feature types

* add VD dummy

* transmit NCD if not within operational ROP/ROW domain

* [OANS] fix flight phase check

(cherry picked from commit d95e46e)

* [OANS] improve turnaround time display

(cherry picked from commit 16c55e5)

* renamed simvars

* fix ND messages bug

* update copyright claims

* clean up subjects/consumersubjects

* css classes improvement

---------

Co-authored-by: Andreas Guther <andreas@guther.family>
Co-authored-by: Saschl <19493808+Saschl@users.noreply.github.com>
Co-authored-by: Saschl <sascharudolf46@gmail.com>
Co-authored-by: BBK <22713769+BlueberryKing@users.noreply.github.com>
Co-authored-by: 2hwk <reasonstouninstall@tutanota.com>
Co-authored-by: 2hwk <15316958+2hwk@users.noreply.github.com>
Co-authored-by: Aurora Takemi <98479040+alepouna@users.noreply.github.com>
Co-authored-by: Croc <38904654+crocket63@users.noreply.github.com>
Co-authored-by: donstim <70166617+donstim@users.noreply.github.com>
Co-authored-by: Frank Kopp <frank@familie-kopp.de>
Co-authored-by: Michael Corcoran <tracer@outlook.co.nz>
Co-authored-by: Benjamin Dupont <4503241+Benjozork@users.noreply.github.com>
  • Loading branch information
13 people authored Sep 1, 2024
1 parent ed84982 commit 7fcdb55
Show file tree
Hide file tree
Showing 99 changed files with 15,110 additions and 456 deletions.
2 changes: 1 addition & 1 deletion fbw-a32nx/.env
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
VITE_BUILD=false
NODE_ENV=production
CLIENT_SECRET=""
CLIENT_ID=""
CLIENT_SECRET=""
SENTRY_DSN=""
AIRCRAFT_PROJECT_PREFIX="a32nx"
AIRCRAFT_VARIANT="a320-251n"
1 change: 1 addition & 0 deletions fbw-a32nx/mach.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ module.exports = {
msfsAvionicsInstrument('ND'),
msfsAvionicsInstrument('EWD'),
msfsAvionicsInstrument('Clock'),
msfsAvionicsInstrument('OANC'),

reactInstrument('SD'),
reactInstrument('DCDU'),
Expand Down
3 changes: 2 additions & 1 deletion fbw-a32nx/src/systems/instruments/src/ND/config.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
"index": "./instrument.tsx",
"isInteractive": false,
"extraDeps": [
"fbw-common/src/systems/instruments/src/ND"
"fbw-common/src/systems/instruments/src/ND",
"fbw-common/src/systems/instruments/src/OANC"
]
}
4 changes: 3 additions & 1 deletion fbw-a32nx/src/systems/instruments/src/ND/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,9 @@
"@tcas/*": ["./tcas/src/*"],
"@typings/*": ["../../../fbw-common/src/typings/*"],
"@flybywiresim/fbw-sdk": ["../../../fbw-common/src/systems/index-no-react.ts"],
"@flybywiresim/navigation-display": ["../../../fbw-common/src/systems/instruments/src/ND/index.ts"]
"@flybywiresim/navigation-display": ["../../../fbw-common/src/systems/instruments/src/ND/index.ts"],
"@flybywiresim/oanc": ["../../../fbw-common/src/systems/instruments/src/OANC/index.ts"],
"@flybywiresim/msfs-avionics-common": ["../../../fbw-common/src/systems/instruments/src/MsfsAvionicsCommon/index.ts"]
}
}
}
11 changes: 11 additions & 0 deletions fbw-a32nx/src/systems/instruments/src/OANC/.eslintrc.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
// Copyright (c) 2023-2024 FlyByWire Simulations
// SPDX-License-Identifier: GPL-3.0

'use strict';

module.exports = {
extends: '../../../../../../.eslintrc.js',

// overrides airbnb, use sparingly
rules: { 'react/react-in-jsx-scope': 'off', 'react/no-unknown-property': 'off', 'react/style-prop-object': 'off' },
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
// Copyright (c) 2023-2024 FlyByWire Simulations
// SPDX-License-Identifier: GPL-3.0

@import "../../Common/definitions";

.oanc-context-menu {
width: 180px;

display: flex;
flex-direction: column;

position: absolute;

margin: 7px 0 7px 0;

background-color: rgb(128, 128, 128);
border: solid 2px white;
}

.oanc-context-menu-item {
width: 100%;
height: 28px;

color: rgb(255, 255, 255);
font-size: 15px;

display: flex;
flex-direction: column;
justify-content: center;

padding-left: 3px;

border: solid 3px transparent;
}

.oanc-context-menu-item-disabled {
color: rgb(255, 255, 255, 0.7);
}

.oanc-context-menu-item:not(.oanc-context-menu-item-disabled):hover {
border: solid 3px $display-cyan;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
// Copyright (c) 2023-2024 FlyByWire Simulations
// SPDX-License-Identifier: GPL-3.0

import {
FSComponent,
DisplayComponent,
VNode,
MapSubject,
Subscribable,
Subscription,
SubscribableUtils,
} from '@microsoft/msfs-sdk';

import './ContextMenu.scss';
import { ContextMenuItemData } from '@flybywiresim/oanc';

export interface ContextMenuProps {
isVisible: Subscribable<boolean>;

x: Subscribable<number>;

y: Subscribable<number>;

items: ContextMenuItemData[];

closeMenu: () => void;
}

export class ContextMenu extends DisplayComponent<ContextMenuProps> {
private readonly subscriptions: Subscription[] = [];

private readonly style = MapSubject.create<string, string>();

onAfterRender() {
this.subscriptions.push(
this.props.isVisible.sub((it) => this.style.setValue('visibility', it ? 'visible' : 'hidden'), true),
this.props.x.sub((it) => this.style.setValue('left', `${it.toFixed(0)}px`), true),
this.props.y.sub((it) => this.style.setValue('top', `${it.toFixed(0)}px`), true),
);
}

private readonly handleItemPressed = (item: ContextMenuItemData) => {
item.onPressed?.();

this.props.closeMenu();
};

render(): VNode | null {
return (
<div class="oanc-context-menu" style={this.style}>
{this.props.items.map((it) => (
<ContextMenuItem
name={it.name}
disabled={SubscribableUtils.toSubscribable(it.disabled, true)}
onPressed={() => this.handleItemPressed(it)}
/>
))}
</div>
);
}
}

export interface ContextMenuItemProps {
name: string;

disabled: Subscribable<boolean>;

onPressed: () => void;
}

export class ContextMenuItem extends DisplayComponent<ContextMenuItemProps> {
private readonly root = FSComponent.createRef<HTMLSpanElement>();

onAfterRender() {
this.root.instance.addEventListener('click', this.handlePressed);
}

private handlePressed = () => this.props.onPressed();

render(): VNode | null {
return (
<span
ref={this.root}
class={{ 'oanc-context-menu-item': true, 'oanc-context-menu-item-disabled': this.props.disabled }}
>
{this.props.name}
</span>
);
}
}
Loading

0 comments on commit 7fcdb55

Please sign in to comment.