From 292fcb4a80618c35f862151fc85fe4e006362ab2 Mon Sep 17 00:00:00 2001 From: Determinant Date: Sat, 7 Sep 2024 16:33:59 -0700 Subject: WIP: make gauges/displays also key-like (pressable) --- app.mjs | 12 +++++++++--- profile.yaml | 4 ++++ 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/app.mjs b/app.mjs index 389b656..9904e79 100755 --- a/app.mjs +++ b/app.mjs @@ -1,13 +1,15 @@ #!/usr/bin/env node import { registerFont } from "canvas"; + +const defaultFont = "OCR A Extended"; if (process.platform == "linux") { console.warn( "node-canvas does not support directly using font file in Linux (see https://github.com/Automattic/node-canvas/issues/2097#issuecomment-1803950952), please copy ./ocr-a-ext.ttf in this folder to your local font folder (~/.fonts/) or install it system-wide.", ); } else { registerFont(`${import.meta.dirname}/ocr-a-ext.ttf`, { - family: "OCR A Extended", + family: defaultFont, }); } @@ -17,7 +19,6 @@ import { parse } from "yaml"; import { queue } from "async"; import { XPlane } from "./xplane.mjs"; -const defaultFont = "OCR A Extended"; const defaultTextSize = 22; const xplane = new XPlane(); @@ -222,6 +223,7 @@ const renderMultiLineText = (c, x0, y0, w, h, text, styles, conf) => { const drawKey = async (id, conf, pressed) => { if (conf && conf.display != null) { // not an input, but a display gauge + conf.isPressed = pressed; return; } @@ -761,6 +763,9 @@ const renderHSI = (c, display, values) => { if (!isObject(src)) { src = null; } + if (src) { + xplane.sendCommand(src.next.toString()); + } const crs = src ? deg2Rad(values[src.crs]) : null; const fromto = src ? values[src.fromto] : null; let def = src ? Math.min(Math.max(values[src.def], -3), 3) : null; @@ -931,7 +936,7 @@ const drawGauge = (key, label, values) => { if (types[display.type]) { renderTasks.push({ key, - func: (c) => types[display.type](c, display, values), + func: (c) => types[display.type](c, display, values, pressed), }); } }; @@ -1003,6 +1008,7 @@ device.on("connect", async () => { : 1; const msPerFrame = 1000 / freq; + conf.isPressed = false; conf.renderStart = () => { let enabled = true; let startTime = new Date(); diff --git a/profile.yaml b/profile.yaml index 4d28e65..3b36642 100644 --- a/profile.yaml +++ b/profile.yaml @@ -202,18 +202,22 @@ def: 3 received: 4 color: magenta + next: sim/autopilot/hsi_select_nav1 0: crs: 7 fromto: 8 def: 3 received: 4 color: '#2dfe54' + next: sim/autopilot/hsi_select_nav2 1: crs: 9 fromto: 10 def: 3 received: 4 color: '#2dfe54' + next: sim/autopilot/hsi_select_gps + pressed: {} - display: type: text freq: 6 -- cgit v1.2.3-70-g09d2 From 7135e9af4926e5086419edb8c6d6e3864be5edd2 Mon Sep 17 00:00:00 2001 From: Determinant Date: Sat, 7 Sep 2024 16:54:27 -0700 Subject: now supports pressable display (e.g., press HSI to switch among GPS/NAV1/NAV2) --- app.mjs | 9 +++++---- profile.yaml | 4 ++-- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/app.mjs b/app.mjs index 9904e79..a558885 100755 --- a/app.mjs +++ b/app.mjs @@ -221,9 +221,9 @@ const renderMultiLineText = (c, x0, y0, w, h, text, styles, conf) => { }; const drawKey = async (id, conf, pressed) => { - if (conf && conf.display != null) { + if (conf && isObject(conf.display)) { // not an input, but a display gauge - conf.isPressed = pressed; + conf.display.pressed = pressed; return; } @@ -763,7 +763,8 @@ const renderHSI = (c, display, values) => { if (!isObject(src)) { src = null; } - if (src) { + if (display.pressed && src) { + display.pressed = false; xplane.sendCommand(src.next.toString()); } const crs = src ? deg2Rad(values[src.crs]) : null; @@ -1008,7 +1009,7 @@ device.on("connect", async () => { : 1; const msPerFrame = 1000 / freq; - conf.isPressed = false; + conf.display.pressed = false; conf.renderStart = () => { let enabled = true; let startTime = new Date(); diff --git a/profile.yaml b/profile.yaml index 3b36642..bcf9780 100644 --- a/profile.yaml +++ b/profile.yaml @@ -202,14 +202,14 @@ def: 3 received: 4 color: magenta - next: sim/autopilot/hsi_select_nav1 + next: sim/autopilot/hsi_select_nav_1 0: crs: 7 fromto: 8 def: 3 received: 4 color: '#2dfe54' - next: sim/autopilot/hsi_select_nav2 + next: sim/autopilot/hsi_select_nav_2 1: crs: 9 fromto: 10 -- cgit v1.2.3-70-g09d2