>([
+ ['ovhd_ann_lt_test_switch', { name: 'L:A32NX_OVHD_INTLT_ANN', type: SimVarValueType.Enum }],
+ [
+ 'ovhd_ann_lt_test_active',
+ { name: 'L:A32NX_OVHD_INTLT_ANN', type: SimVarValueType.Enum, map: (v) => v === AnnLightTestState.Test },
+ ],
+ ]),
+ bus,
+ );
+ }
+}
diff --git a/fbw-common/src/systems/shared/src/index.ts b/fbw-common/src/systems/shared/src/index.ts
index 1e9799b2d8e..36b435b4daa 100644
--- a/fbw-common/src/systems/shared/src/index.ts
+++ b/fbw-common/src/systems/shared/src/index.ts
@@ -14,6 +14,7 @@ export * from './GenericDataListenerSync';
export * from './MathUtils';
export * from './PathVector';
export * from './PilotSeat';
+export * from './publishers';
export * from './RadioTypes';
export * from './RadioUtils';
export * from './RunwayUtils';
diff --git a/fbw-common/src/systems/shared/src/publishers/Msfs/MsfsAutopilotAssistancePublisher.ts b/fbw-common/src/systems/shared/src/publishers/Msfs/MsfsAutopilotAssistancePublisher.ts
new file mode 100644
index 00000000000..5f29c7cf060
--- /dev/null
+++ b/fbw-common/src/systems/shared/src/publishers/Msfs/MsfsAutopilotAssistancePublisher.ts
@@ -0,0 +1,51 @@
+import {
+ EventBus,
+ IndexedEventType,
+ PublishPacer,
+ SimVarPublisher,
+ SimVarPublisherEntry,
+ SimVarValueType,
+} from '@microsoft/msfs-sdk';
+
+interface MsfsAutopilotAssistanceBaseEvents {
+ /** Get the slot index which the altitude hold mode will track when captured, in feet. */
+ msfs_autopilot_altitude_lock_var: number;
+}
+
+type IndexedTopics = 'msfs_autopilot_altitude_lock_var';
+
+type MsfsAutopilotAssitanceIndexedEvents = {
+ [P in keyof Pick<
+ MsfsAutopilotAssistanceBaseEvents,
+ IndexedTopics
+ > as IndexedEventType]: MsfsAutopilotAssistanceBaseEvents[P];
+};
+
+/**
+ * Events for simvars listed on https://docs.flightsimulator.com/html/Programming_Tools/SimVars/Aircraft_SimVars/Aircraft_AutopilotAssistant_Variables.htm.
+ * Event names are the same as the simvar names, with msfs_ prefix, and index as suffix for indexed simvars.
+ */
+export interface MsfsAutopilotAssistanceEvents
+ extends MsfsAutopilotAssistanceBaseEvents,
+ MsfsAutopilotAssitanceIndexedEvents {}
+
+/**
+ * Publisher for simvars listed on https://docs.flightsimulator.com/html/Programming_Tools/SimVars/Aircraft_SimVars/Aircraft_AutopilotAssistant_Variables.htm.
+ */
+export class MsfsAutopilotAssitancePublisher extends SimVarPublisher {
+ /**
+ * Create a publisher.
+ * @param bus The EventBus to publish to
+ * @param pacer An optional pacer to use to control the rate of publishing
+ */
+ public constructor(bus: EventBus, pacer?: PublishPacer) {
+ const simvars = new Map>([
+ [
+ 'msfs_autopilot_altitude_lock_var',
+ { name: `AUTOPILOT ALTITUDE LOCK VAR:#index#`, type: SimVarValueType.Feet, indexed: true },
+ ],
+ ]);
+
+ super(simvars, bus, pacer);
+ }
+}
diff --git a/fbw-common/src/systems/shared/src/publishers/Msfs/MsfsRadioNavigationPublisher.ts b/fbw-common/src/systems/shared/src/publishers/Msfs/MsfsRadioNavigationPublisher.ts
new file mode 100644
index 00000000000..f1cfe74f0fa
--- /dev/null
+++ b/fbw-common/src/systems/shared/src/publishers/Msfs/MsfsRadioNavigationPublisher.ts
@@ -0,0 +1,46 @@
+import {
+ EventBus,
+ IndexedEventType,
+ PublishPacer,
+ SimVarPublisher,
+ SimVarPublisherEntry,
+ SimVarValueType,
+} from '@microsoft/msfs-sdk';
+
+interface MsfsRadioNavigationBaseEvents {
+ /** Radar altitude in feet. */
+ msfs_radio_height: number;
+}
+
+type IndexedTopics = null;
+
+type MsfsAutopilotAssitanceIndexedEvents = {
+ [P in keyof Pick<
+ MsfsRadioNavigationBaseEvents,
+ IndexedTopics
+ > as IndexedEventType]: MsfsRadioNavigationBaseEvents[P];
+};
+
+/**
+ * Events for simvars listed on https://docs.flightsimulator.com/html/Programming_Tools/SimVars/Aircraft_SimVars/Aircraft_RadioNavigation_Variables.htm.
+ * Event names are the same as the simvar names, with msfs_ prefix, and index as suffix for indexed simvars.
+ */
+export interface MsfsRadioNavigationEvents extends MsfsRadioNavigationBaseEvents, MsfsAutopilotAssitanceIndexedEvents {}
+
+/**
+ * Publisher for simvars listed on https://docs.flightsimulator.com/html/Programming_Tools/SimVars/Aircraft_SimVars/Aircraft_RadioNavigation_Variables.htm.
+ */
+export class MsfsRadioNavigationPublisher extends SimVarPublisher {
+ /**
+ * Create a publisher.
+ * @param bus The EventBus to publish to
+ * @param pacer An optional pacer to use to control the rate of publishing
+ */
+ public constructor(bus: EventBus, pacer?: PublishPacer) {
+ const simvars = new Map>([
+ ['msfs_radio_height', { name: `RADIO HEIGHT`, type: SimVarValueType.Feet }],
+ ]);
+
+ super(simvars, bus, pacer);
+ }
+}
diff --git a/fbw-common/src/systems/shared/src/publishers/Msfs/index.ts b/fbw-common/src/systems/shared/src/publishers/Msfs/index.ts
new file mode 100644
index 00000000000..bc41a2e7615
--- /dev/null
+++ b/fbw-common/src/systems/shared/src/publishers/Msfs/index.ts
@@ -0,0 +1,2 @@
+export * from './MsfsAutopilotAssistancePublisher';
+export * from './MsfsRadioNavigationPublisher';
diff --git a/fbw-common/src/systems/shared/src/publishers/index.ts b/fbw-common/src/systems/shared/src/publishers/index.ts
new file mode 100644
index 00000000000..f87ad7264ad
--- /dev/null
+++ b/fbw-common/src/systems/shared/src/publishers/index.ts
@@ -0,0 +1 @@
+export * from './Msfs';
diff --git a/fbw-common/src/typings/fs-base-ui/html_ui/JS/SimPlane.d.ts b/fbw-common/src/typings/fs-base-ui/html_ui/JS/SimPlane.d.ts
index 38adea318c7..debe34f456d 100644
--- a/fbw-common/src/typings/fs-base-ui/html_ui/JS/SimPlane.d.ts
+++ b/fbw-common/src/typings/fs-base-ui/html_ui/JS/SimPlane.d.ts
@@ -273,9 +273,9 @@ declare global {
function getDesignSpeeds(): DesignSpeeds;
function getTrueSpeed(): Knots;
function getIndicatedSpeed(): Knots;
- function getVerticalSpeed(): FeetPerMinute | null;
+ function getVerticalSpeed(): number;
function getGroundSpeed(): Knots | null;
- function getMachSpeed(): Mach | null;
+ function getMachSpeed(): number;
/**
* Gets the V1 speed up during and before takeoff, -1 after.
@@ -321,7 +321,11 @@ declare global {
function getStallSpeedPredicted(flapIndex: number): Knots | null;
function getWindDirection(): Degrees | null;
function getWindStrength(): Knots | null;
- function getAutoPilotActive(apIndex: number): boolean | null;
+ /**
+ * Checks autopilot master status.
+ * @param apIndex Defaults to 0 if undefined.
+ */
+ function getAutoPilotActive(apIndex?: number): boolean;
function getAutoPilotAirspeedManaged(): boolean;
function getAutoPilotAirspeedSelected(): boolean;
function getAutoPilotAirspeedHoldActive(isManaged?: boolean): boolean | null;
@@ -353,7 +357,7 @@ declare global {
/**
* @param units Default = feet.
*/
- function getAutoPilotDisplayedAltitudeLockValue(units?: string): number | null;
+ function getAutoPilotDisplayedAltitudeLockValue(units?: string): number;
function getAutoPilotAltitudeLockUnits(): 'feet';
function getAutoPilotVerticalSpeedHoldActive(): boolean | null;
function getAutoPilotVerticalSpeedHoldValue(): FeetPerMinute | null;
@@ -421,7 +425,7 @@ declare global {
function getInclinometer(): Position | null;
function getAngleOfAttack(): Angl16 | null;
function getOrientationAxis(): XYZ | null;
- function getAltitude(): Feet | null;
+ function getAltitude(): number;
function getGroundReference(): Feet | null;
function getTurnRate(): RadiansPerSecond | null;
function getHeadingMagnetic(): Heading | null;
@@ -450,8 +454,8 @@ declare global {
function getTotalFuel(): Kilograms | null;
function getFuelUsed(engineIndex: number): Kilograms | null;
function getCompassAngle(): Radians | null;
- function getPressureValue(): InchesOfMercury | null;
- function getPressureValue(units?: 'inches of mercury' | 'millibar'): InchesOfMercury | Millibar | null;
+ function getPressureValue(): number;
+ function getPressureValue(units?: 'inches of mercury' | 'millibar'): number;
function getPressureSelectedUnits(): 'inches of mercury' | 'millibar';
function getPressureSelectedMode(aircraft: Aircraft): 'QFE' | 'QNH' | 'STD' | '';
function getHasGlassCockpit(): boolean | null;