Skip to content

MSFS Avionics Framework - 0.2.0

Compare
Choose a tag to compare
@mattnischan mattnischan released this 10 May 13:33
· 13 commits to main since this release

Working Title Avionics Framework v0.2

This release of the Avionics Framework includes a new component, the Garmin SDK. This contains common code meant to be used across Garmin systems to facilitate the development of new Garmin products which use similar paradigms. Since this is the initial release of the Garmin SDK there is no change log for that, but changes to it in future releases will be documented here.

SDK Changes by Directory

autopilot

  • [Breaking Change] Refactored LNAV events.
  • [Breaking Change] Added required param primaryPlanIndex to VNAVDirector constructor.
  • [Breaking Change] Added required parameter settingsManager to AltitudeSelectManager constructor.
  • [Breaking Change] Renamed LNavVars L-Vars from WT1000_to WTAP_.
  • [Breaking Change] Renamed VNavSimVars L-Vars from WT1000_to WTAP_.
  • [Breaking Change] Made the following changes to the VNavConstraint interface.
    • Added the minAltitude, maxAltitude properties.
    • Changed the altitude property to targetAltitude.
    • BottomTargetPathCalculator and VNAVDirector now use the targetAltitude field.
  • [Breaking Change] Changed apValues.navToNavLocArm to be a function that returns the latest value from the nav to nav manager.
  • [Breaking Change] Removed some protected fields from AutoPilot in favor of using the subjects with the same names from apValues. The fields removed were lateralActive, lateralArmed, verticalActive, verticalArmed.
  • [Breaking Change] Refactored VNavPathCalculator interface and implemented classes SmoothingPathCalculator and BottomTargetPathCalculator to support multiple flight plans, requiring methods to supply a plan index or a vertical plan for each method run. This allows vnav path calculations to be run, and data to be retained, for multiple plans at the same time.
  • [Breaking Change] Moved and Renamed (from VnavUtils) the static class VNavUtils to it's own file in the SDK.
  • [Breaking Change] Moved and refactored a significant number of methods from the calculators to VNavUtils.
  • [Breaking Change] Refactored all vnav related events; they now follow the correct snake-case for topic naming. They also now live in these three event classes:
    • VNavEvents are all events published directly by VNav based on data directly from the path calculator. Many, but not all of these, are lvar-driven events.
    • VNavDataEvents are all events published by other data processors/users based on/related to VNav data, but are not published directly by the VNav classes themselves.
    • VNavControlEvents are generic or common events used by avionics to control aspects of VNav via the bus.
  • APPublisher now publishes yaw_damper state
  • Added new interface ObsDirector.
  • Added optional param obsDirector to LNAVDirector constructor.
  • Added new interface VnavPathCalculator.
  • Added new GlidePathCalculator class.
  • Fixed sync of GPS WP DISTANCE in GpsSynchronizer.
  • Added new interface VNavControlEvents.
  • Added new class VNavUtils.
  • FLCDirector now supports mach hold.
  • AltitudeSelectManager now supports input acceleration and a variety of other configuration options.
  • Added 2 new subjects to AutoPilot's apValues, lateralArmed and verticalArmed
  • LNavDirector now accepts true or false value on the 'suspend_sequencing' Control Event on the bus, and correctly sets the suspend state in LNAV.
  • suspChanged event from LNavEvents has been removed and replaced with isSuspended.
  • Added ability to supply an external captureAltitude() method to APAltCapDirector for tuning specific aircraft; if supplied this is used, if unsupplied a default method is used.
  • Fixed bug where APNavDirector's localizer tracking would be offset.
  • Added instances of the iterator on BottomTargetPathCalculator and GlidePathCalculator.
  • added firstDescentConstraintLegIndex, lastDescentConstraintLegIndex to VerticalFlightPlan interface. Added isDirectToTarget to VNavLeg interface.
  • Adjusted BottomTargetPathCalculator for changed interfaces.
  • Updated and added more VNavUtils methods. As appropriate - generally VNavUtils methods are those that are common across all vnav implementations, while the private static methods in the calculator itself represent logic specific to the calculator.
  • Changed VNavVar VNAVMode to VNAVState, changed VNavSimVarEvents vnav_mode to vnav_state, changed enum VNavMode to VNavState.
  • Renamed and refactored the default SDK VNavDirector to VNavManager interface.
  • Changed APVerticalModes enum to include PATH instead of VNAV.
  • Added new SDK Autopilot Director, APVNavPathDirector
  • Updated APFLCDirector allowing it to be armed.
  • Refactored Autopilot in SDK to handle new VNavManager injection.
  • Added vertical and lateral wind correction to AP directors.

components

  • [Breaking Change] Renamed MapAbstractWaypointRenderer to MapWaypointRenderer.
  • [Breaking Change] Shortened the names of some flight path renderer classes.
  • [Breaking Change] All flight path renderer classes now use the new GeoProjectionPathStreamStack class.
  • [Breaking Change] AbstractFlightPathLegRenderer.render() now accepts bitflags to determine which part of the leg to render.
  • [Breaking Change] BingComponent, MapBingLayer, and SynVisComponent now require a prop that provides the current game state.
  • Added new HardwareUiControl base class for use when developing GUI menus.
  • Added support to HardwareUiControl for:
    • defining whether a control requires a focused child in order to be focused itself.
    • defining desired focus position on scroll.
    • defining how to handle focus when a focused control is left without a focused child after a blur operation.
  • MapWaypointRenderer now supports injectable render role selection behavior.
  • Added support for dynamically adding and removing roles to MapWaypointRenderer.
  • Added new PathStream classes.
  • Added new GeoCirclePathRenderer class.
  • Added the GeoProjectionPathStreamStack class.
  • Added new CustomFlightPathLegRenderer class.
  • Added new FlightPathLegLineRenderer and FlightPathLegPatternRenderer classes.
  • MapProjection now supports setting arbitrary endpoints to define range.
  • Added additional sim crash protections to BingComponent
  • Added new MapSystem map building system API and related components.
  • DurationDisplay and LatLonDisplay now accept SubscribableSet for their class prop.
  • DurationDisplay can now accept a static value for its value prop.

data

  • [Breaking Change] Removed vnav_enabled event from ControlEvents.
  • [Breaking Change] Enforces that event bus topics must be of type string in places where it wasn't already.
  • [Breaking Change] KeyInterceptManager now converts key event values to their correct format (signed 32-bit integers) before publishing them on the event bus.
  • Added new suspend_sequencing event to ControlEvents.
  • Added new lnav_inhibit_next_sequence event to ControlEvents.
  • Added new activate_missed_approach event to ControlEvents.
  • Added new approach_freq_set event to ControlEvents.
  • Added new approach_available event to ControlEvents.
  • Added mach unit to SimVarValueType.
  • Fixed potential handler leaks within filtered Consumers.
  • Created an EventBusMetaEvents event interface.
    • Added the existing previously interface-less event_bus event to this new interface.
    • Created an event_bus_topic_sub event topic to this new interface that EventBus publishes when a topic is subscribed to.
  • Added a getTopicSubscriberCount() method to EventBus.
  • Changed SimVarPublisher to automatically start polling simvars that it gets subscriptions for.
    • The existing subscribe() and unsubscribe() methods on SimVarPublisher now do nothing.
  • ConsumerSubject now allows pausing, resuming, and setting consumer after instantiation.
  • Added additional sim crash protections to KeyInterceptManager
  • Subscribables, Consumers, EventBus, and SubEvent now return a Subscription object when a handler function is subscribed to them.
  • The old method of unsubscribing handlers from Subscribables, Consumers, EventBus, and SubEvent has been deprecated in favor of using Subscription.
  • Added new GameStateProvider class.

fadec

  • Added ThrottleLeverManager class.
  • Added JetFadec class.

flightplan

  • [Breaking Change] The HoldLeg flight path vector flag has been separated into HoldInboundLeg and HoldOutboundLeg.
  • [Breaking Change] Split the HoldEntry flight path vector flag into HoldDirectEntry, HoldTeardropEntry, and HoldParallelEntry flags.
  • Instantiating FlightPlanner now provides an option for the user to specify a naming method to name legs. The default garmin naming framework remains.
  • Added new DirectToPointBuilder flight path vector builder class.
  • Added a new method, FlightPathUtils.isPointAlongArc(), for checking if a point lies on a geo circle arc.
  • Added new flight plan leg type: ThruDiscontinuity. This is a discontinuity leg that does not trigger LNAV to suspend sequencing.
  • Added new FlightPlanLegIterator class in sdk/flightplan with methods for iterating forward or reverse through the legs of a flight plan.

geo

  • Added new static methods to GeoPoint for calculating distance and bearing from raw lat/lon values.
  • Added new GeoCircleResampler class.
  • GeoProjection now supports full 3D pre-rotation.

graphics

  • Added new DurationFormatter and DateTimeFormatter classes.
  • Added new SvgPathStream class.
  • Adjusted the behavior of PathStream.arc() when called immediately after beginPath() to match what canvas does.

instruments

  • [Breaking Change] The gps_wp_bearing event is now published as string instead of number of degrees.
  • [Breaking Change] Renamed APEvent topics to achieve a more consistent naming scheme.
  • [Breaking Change] XPDRInstrument now supports an arbitrary number of transponders. All transponder-related sim var event topics are now indexed.
  • [Breaking Change] Renamed NavEventsExtentions to NavRadioEvents and redefined the event topic names.
  • Added PressurizationPublisher.
  • Added RAT temperature to ADCPublisher.
  • Added ISA temperature to ADCPublisher.
  • Added ap_yd_engage and ap_yd_disengage events to APEvents for processing yaw director events.
  • ADC now publishes mach_number.
  • Added a set_signal_strength event to NavCom.
  • Added new topics for engine starter and combustions SimVars to EngineEvents.
  • Added kias to mach conversion factor event to ADCEvents.
  • Added new DecisionHeightManager class to handle the new DH/DA logic added in SU8, with unit switching capabilities.
  • Added pressure altitude ADC event.
  • Added new BaseInstrumentPublisher class.
  • Added nav_radio_active_mag_var event to NavRadioEvents.
  • Added support for course sync events to NavProcessor and NPConfig.

math

  • [Breaking Change] Transform2D.reflection() was renamed to Transform2D.toReflection().
  • [Breaking Change] Added new ReadonlyFloat64Array type and changed the vector math, geo, flight path calc, and map codebases to use ReadonlyFloat64Array where appropriate.
  • Added some pi-related constants to MathUtils.
  • Added lerp() method to MathUtils.
  • Added acceleration unit types.
  • Added new Transform3D class.
  • Fixed a bug in Transform2D with setting origin points in the .toTranslate/Scale/Rotation/Reflection methods.
  • Added new VecNMath class.

navigation

  • [Breaking Change] Renamed FacilityRespository to FacilityRepository.
  • [Breaking Change] The name, flags, and verticalData fields in LegDefinition are now readonly (including the fields inside verticalData, except for fpa, because it is a calculated field. This was done so that people won't change these fields expecting the changes to get picked up automatically. LegDefinitions should be mostly treated as immutable, and changes should only go through the appropriate FlightPlan functions, such as addLeg, removeLeg, and setVerticalData.
  • [Breaking Change] Changed name of FacilitySearchType.None to FacilitySearchType.All.
  • Added several runway length properties to OneWayRunway.
  • Added getAssociatedAirportIdent() static function to ICAO class.
  • FacilityRepository now maintains a k-d tree of user facilities.
  • FacilityLoader now supports nearest search for user facilities.
  • Created AdaptiveNearestSubscription to automatically size nearest subscriptions.
    • Renamed NearestSubscription to AbstractNearestSubscription.
    • Exposed NearestSubscripton as an interface rather than abstract class.
  • Added support for additional filtering via callback into NearestWaypointSubscription.
  • Added filter callback argument to NearestAirportSubscription constructor.

settings

  • Added new DeferredUserSettingManager class.
  • UserSetting now implements MutableSubscribable interface.

sub

  • Subscribable interface now requires an isSubscribable property.
  • Added ability to bind style attribute to ObjectSubject in JSX.
  • Added MutableSubscribable interface, which Subject, ComputedSubject, and ObjectSubject all implement.
  • AbstractSubscribable now implements the .map() method.
  • ComputedSubject now properly supports removing subs during a notify.
  • Added the ability to pipe values from a Subscribable to a MutableSubscribable.
  • Added new SubscribableSet interface and SetSubject class.
  • Added support for binding CSS class attribute to SubscribableSet via JSX.

traffic

  • [Breaking Change] Refactored TCAS to support resolution advisories.
  • TCAS now publishes TA/RA intruder counts.

utils

  • [Breaking Change] Moved SortedMappedSubscribableArray to the utils/datastructures/ directory.
  • Added new LerpLookupTable class.
  • Added new KdTree and GeoKdTree classes.

Miscellaneous

  • [Breaking Change] Substantially re-organized the SDK file structure.
    • Moved all math and geo-related files to their own top-level directories.
    • Moved all Subscribable and Subject-related files formerly found in utils/ to the sub/ top-level directory.
    • AbstractSubscribable and MappedSubject were moved into their own files.
    • Reorganized the utils/ directory, with some files moving to other locations and others placed into sub-directories.
    • Renamed the ui/ top-level directory to graphics/.
    • Moved HardwareUiControl.ts and HardwareUiControlList.ts to components/controls/.
    • Removed all files in the former ui/map/ directory.
    • Removed utils/Units.ts from the SDK. Please use the API found in math/NumberUnit.ts instead.