MSFS Avionics Framework - 0.2.0
·
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
toVNAVDirector
constructor. - [Breaking Change] Added required parameter
settingsManager
toAltitudeSelectManager
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
andVNAVDirector
now use thetargetAltitude
field.
- Added the
- [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 fromapValues
. The fields removed werelateralActive
,lateralArmed
,verticalActive
,verticalArmed
. - [Breaking Change] Refactored
VNavPathCalculator
interface and implemented classesSmoothingPathCalculator
andBottomTargetPathCalculator
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
toLNAVDirector
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
'sapValues
,lateralArmed
andverticalArmed
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 fromLNavEvents
has been removed and replaced withisSuspended
.- Added ability to supply an external
captureAltitude()
method toAPAltCapDirector
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
andGlidePathCalculator
. - added
firstDescentConstraintLegIndex
,lastDescentConstraintLegIndex
toVerticalFlightPlan
interface. AddedisDirectToTarget
toVNavLeg
interface. - Adjusted
BottomTargetPathCalculator
for changed interfaces. - Updated and added more
VNavUtils
methods. As appropriate - generallyVNavUtils
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
toVNAVState
, changedVNavSimVarEvents
vnav_mode
tovnav_state
, changed enumVNavMode
toVNavState
. - Renamed and refactored the default SDK
VNavDirector
toVNavManager
interface. - Changed
APVerticalModes
enum to includePATH
instead ofVNAV
. - Added new SDK Autopilot Director,
APVNavPathDirector
- Updated
APFLCDirector
allowing it to be armed. - Refactored
Autopilot
in SDK to handle newVNavManager
injection. - Added vertical and lateral wind correction to AP directors.
components
- [Breaking Change] Renamed
MapAbstractWaypointRenderer
toMapWaypointRenderer
. - [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
, andSynVisComponent
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
andFlightPathLegPatternRenderer
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
andLatLonDisplay
now acceptSubscribableSet
for theirclass
prop.DurationDisplay
can now accept a static value for itsvalue
prop.
data
- [Breaking Change] Removed
vnav_enabled
event fromControlEvents
. - [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 toControlEvents
. - Added new
lnav_inhibit_next_sequence
event toControlEvents
. - Added new
activate_missed_approach
event toControlEvents
. - Added new
approach_freq_set
event toControlEvents
. - Added new
approach_available
event toControlEvents
. - 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 thatEventBus
publishes when a topic is subscribed to.
- Added the existing previously interface-less
- Added a
getTopicSubscriberCount()
method toEventBus
. - Changed
SimVarPublisher
to automatically start polling simvars that it gets subscriptions for.- The existing
subscribe()
andunsubscribe()
methods onSimVarPublisher
now do nothing.
- The existing
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 intoHoldInboundLeg
andHoldOutboundLeg
. - [Breaking Change] Split the
HoldEntry
flight path vector flag intoHoldDirectEntry
,HoldTeardropEntry
, andHoldParallelEntry
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 insdk/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
andDateTimeFormatter
classes. - Added new
SvgPathStream
class. - Adjusted the behavior of
PathStream.arc()
when called immediately afterbeginPath()
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
toNavRadioEvents
and redefined the event topic names. - Added
PressurizationPublisher
. - Added RAT temperature to
ADCPublisher
. - Added ISA temperature to
ADCPublisher
. - Added
ap_yd_engage
andap_yd_disengage
events toAPEvents
for processing yaw director events. - ADC now publishes
mach_number
. - Added a
set_signal_strength
event toNavCom
. - 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 toNavRadioEvents
. - Added support for course sync events to
NavProcessor
andNPConfig
.
math
- [Breaking Change]
Transform2D.reflection()
was renamed toTransform2D.toReflection()
. - [Breaking Change] Added new
ReadonlyFloat64Array
type and changed the vector math, geo, flight path calc, and map codebases to useReadonlyFloat64Array
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
toFacilityRepository
. - [Breaking Change] The
name
,flags
, andverticalData
fields inLegDefinition
are now readonly (including the fields insideverticalData
, except forfpa
, 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 asaddLeg
,removeLeg
, andsetVerticalData
. - [Breaking Change] Changed name of
FacilitySearchType.None
toFacilitySearchType.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 implementsMutableSubscribable
interface.
sub
Subscribable
interface now requires anisSubscribable
property.- Added ability to bind style attribute to
ObjectSubject
in JSX. - Added
MutableSubscribable
interface, whichSubject
,ComputedSubject
, andObjectSubject
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 andSetSubject
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
andGeoKdTree
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
andSubject
-related files formerly found inutils/
to thesub/
top-level directory. AbstractSubscribable
andMappedSubject
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 tographics/
. - Moved
HardwareUiControl.ts
andHardwareUiControlList.ts
tocomponents/controls/
. - Removed all files in the former
ui/map/
directory. - Removed
utils/Units.ts
from the SDK. Please use the API found inmath/NumberUnit.ts
instead.