Skip to content

Commit 0f8d5fe

Browse files
committed
v0.17 Beta Test
Update Log of v0.17 (2025/02/22) Beta Test [New] Average ground speed. [Fixed] Display latency of ground speed and true airspeed.
1 parent bfa40a5 commit 0f8d5fe

File tree

6 files changed

+83
-12
lines changed

6 files changed

+83
-12
lines changed
4.48 KB
Binary file not shown.

PROJECT/GPS-PFD/index.html

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
<link rel="icon" type="image/png" href="images/Icon_Small.png" />
1111
<title>GPS-PFD</title>
1212
<meta name="author" content="SAM TOKI STUDIO" />
13-
<meta name="version" content="v0.16 (2025/02/04) Beta Test. Since 2024/12/01." />
13+
<meta name="version" content="v0.17 (2025/02/22) Beta Test. Since 2024/12/01." />
1414
<meta name="description" content="利用 GPS 与加速计,在移动设备上模拟飞机驾驶舱的 PFD。" />
1515
<meta name="copyright" content="© 2025 SAM TOKI STUDIO" />
1616

@@ -226,6 +226,10 @@ <h1 class="SectionTitle Hidden" inert="true">PFD</h1>
226226
<span class="InfoBarTitle" id="Label_PFDDefaultPanelGSTitle">地速</span>
227227
<span class="InfoBarValue" id="Label_PFDDefaultPanelGSValue">未知</span>
228228
</li>
229+
<li class="Ctrl">
230+
<span class="InfoBarTitle" id="Label_PFDDefaultPanelAvgGSTitle">平均地速</span>
231+
<span class="InfoBarValue" id="Label_PFDDefaultPanelAvgGSValue">未知</span>
232+
</li>
229233
<li class="Ctrl">
230234
<span class="InfoBarTitle" id="Label_PFDDefaultPanelTASTitle">真空速</span>
231235
<span class="InfoBarValue" id="Label_PFDDefaultPanelTASValue">未知</span>
@@ -1718,6 +1722,18 @@ <h4 class="Hidden" id="Label_SettingsAirportCoordinates" inert="true">机场坐
17181722
<button class="Button" id="Button_SettingsAirportCoordinatesSwap" disabled="true" onclick="SwapAirportCoordinates()">对调</button>
17191723
</li>
17201724
</ul>
1725+
<h4 class="Hidden" id="Label_SettingsETA" inert="true">剩余时间 (ETA)</h4>
1726+
<ul class="CtrlGroup BelowParagraph">
1727+
<li class="Ctrl Hidden" id="Ctrl_SettingsETACalcMethod" inert="true">
1728+
<label for="Combobox_SettingsETACalcMethod">
1729+
<span>计算方法:</span>
1730+
<select class="Combobox" id="Combobox_SettingsETACalcMethod" onchange="SetETACalcMethod()">
1731+
<option value="UseRealTimeGS">使用实时地速</option>
1732+
<option value="UseAvgGS" selected>使用平均地速</option>
1733+
</select>
1734+
</label>
1735+
</li>
1736+
</ul>
17211737
</fieldset>
17221738
</li>
17231739
<li class="Item">
@@ -2140,7 +2156,7 @@ <h4>音频</h4>
21402156
<legend>关于</legend>
21412157
<p>GPS-PFD</p>
21422158
<p>by SAM TOKI STUDIO</p>
2143-
<p>版本 v0.16 (<time datetime="2025-02-04" pubdate="pubdate">2025/02/04</time>) Beta Test<br />
2159+
<p>版本 v0.17 (<time datetime="2025-02-22" pubdate="pubdate">2025/02/22</time>) Beta Test<br />
21442160
始于 2024/12/01</p>
21452161
<p class="GreenText Hidden" id="Label_HelpPWANewVersionReady" inert="true">新版本已就绪,将在下次启动时生效。</p>
21462162
<ul class="CtrlGroup BelowParagraph">

PROJECT/GPS-PFD/script_ServiceWorker.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
// Declare variables
77
"use strict";
88
// Unsaved
9-
const CacheName = "GPS-PFD_v0.16";
9+
const CacheName = "GPS-PFD_v0.17";
1010

1111
// Listeners
1212
// Service worker (https://learn.microsoft.com/en-us/microsoft-edge/progressive-web-apps-chromium/how-to/#step-5---add-a-service-worker)

PROJECT/GPS-PFD/scripts/script.js

Lines changed: 49 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
// Declare variables
77
"use strict";
88
// Unsaved
9-
const CurrentVersion = 0.16,
9+
const CurrentVersion = 0.17,
1010
GeolocationAPIOptions = {
1111
enableHighAccuracy: true
1212
};
@@ -81,7 +81,9 @@
8181
},
8282
Speed: {
8383
Speed: 0, Vertical: 0, Pitch: 0,
84-
GS: 0, GSDisplay: 0, TAS: 0, TASDisplay: 0,
84+
GS: 0, GSDisplay: 0,
85+
SampleCount: 0, AvgGS: 0, AvgGSDisplay: 0,
86+
TAS: 0, TASDisplay: 0,
8587
Wind: {
8688
Heading: 0, RelativeHeading: 0 // Wind "heading" is the opposite of wind direction.
8789
},
@@ -114,6 +116,7 @@
114116
}
115117
};
116118
Automation.ClockPFD = null;
119+
Automation.ClockAvgGS = null;
117120

118121
// Saved
119122
var Subsystem = {
@@ -174,7 +177,8 @@
174177
Arrival: {
175178
Lat: 0, Lon: 0
176179
}
177-
}
180+
},
181+
ETACalcMethod: "UseAvgGS"
178182
},
179183
FlightMode: {
180184
FlightMode: "DepartureGround",
@@ -243,6 +247,7 @@
243247
RefreshSystem();
244248
RefreshSubsystem();
245249
RefreshPFD();
250+
ClockAvgGS();
246251

247252
// PWA
248253
navigator.serviceWorker.register("script_ServiceWorker.js").then(function(ServiceWorkerRegistration) {
@@ -567,6 +572,7 @@
567572
ChangeText("Label_PFDDefaultPanelGPSStatusTitle", "GPS 状态");
568573
ChangeText("Label_PFDDefaultPanelAccelStatusTitle", "加速计状态");
569574
ChangeText("Label_PFDDefaultPanelGSTitle", "地速");
575+
ChangeText("Label_PFDDefaultPanelAvgGSTitle", "平均地速");
570576
ChangeText("Label_PFDDefaultPanelTASTitle", "真空速");
571577
ChangeText("Label_PFDDefaultPanelWindTitle", "风");
572578
ChangeText("Label_PFDDefaultPanelFlapsTitle", "襟翼");
@@ -594,6 +600,7 @@
594600
ChangeText("Label_PFDDefaultPanelGPSStatusTitle", "GPS STS");
595601
ChangeText("Label_PFDDefaultPanelAccelStatusTitle", "ACCEL STS");
596602
ChangeText("Label_PFDDefaultPanelGSTitle", "GS");
603+
ChangeText("Label_PFDDefaultPanelAvgGSTitle", "AVG GS");
597604
ChangeText("Label_PFDDefaultPanelTASTitle", "TAS");
598605
ChangeText("Label_PFDDefaultPanelWindTitle", "WIND");
599606
ChangeText("Label_PFDDefaultPanelFlapsTitle", "FLAPS");
@@ -973,7 +980,10 @@
973980

974981
// GS
975982
PFD0.Stats.Speed.GS = Math.sqrt(Math.max(Math.pow(PFD0.Stats.Speed.Speed, 2) - Math.pow(PFD0.Stats.Speed.Vertical, 2), 0));
976-
PFD0.Stats.Speed.GSDisplay += (PFD0.Stats.Speed.GS - PFD0.Stats.Speed.GSDisplay) / 50;
983+
PFD0.Stats.Speed.GSDisplay += (PFD0.Stats.Speed.GS - PFD0.Stats.Speed.GSDisplay) / 50 * ((PFD0.Stats.ClockTime - PFD0.Stats.PreviousClockTime) / 30);
984+
985+
// Avg GS
986+
PFD0.Stats.Speed.AvgGSDisplay += (PFD0.Stats.Speed.AvgGS - PFD0.Stats.Speed.AvgGSDisplay) / 50 * ((PFD0.Stats.ClockTime - PFD0.Stats.PreviousClockTime) / 30);
977987

978988
// TAS
979989
if(PFD0.Status.GPS.IsHeadingAvailable == true) {
@@ -986,7 +996,7 @@
986996
} else {
987997
PFD0.Stats.Speed.TAS = CalcTAS(PFD0.Stats.Speed.GS, null, null, PFD0.Stats.Speed.Vertical);
988998
}
989-
PFD0.Stats.Speed.TASDisplay += (PFD0.Stats.Speed.TAS - PFD0.Stats.Speed.TASDisplay) / 50;
999+
PFD0.Stats.Speed.TASDisplay += (PFD0.Stats.Speed.TAS - PFD0.Stats.Speed.TASDisplay) / 50 * ((PFD0.Stats.ClockTime - PFD0.Stats.PreviousClockTime) / 30);
9901000

9911001
// IAS
9921002
switch(PFD.FlightMode.FlightMode) {
@@ -1068,8 +1078,20 @@
10681078
AlertSystemError("The value of PFD.FlightMode.FlightMode \"" + PFD.FlightMode.FlightMode + "\" in function RefreshPFDData is invalid.");
10691079
break;
10701080
}
1071-
if(PFD0.Stats.Speed.GSDisplay > 0) {
1072-
PFD0.Stats.DME.ETA = PFD0.Stats.DME.Distance / PFD0.Stats.Speed.GSDisplay * 1000; // (Meter / meter per sec) = sec, sec * 1000 = millisec.
1081+
switch(PFD.DME.ETACalcMethod) {
1082+
case "UseRealTimeGS":
1083+
if(PFD0.Stats.Speed.GSDisplay > 0) {
1084+
PFD0.Stats.DME.ETA = PFD0.Stats.DME.Distance / PFD0.Stats.Speed.GSDisplay * 1000; // (Meter / meter per sec) = sec, sec * 1000 = millisec.
1085+
}
1086+
break;
1087+
case "UseAvgGS":
1088+
if(PFD0.Stats.Speed.AvgGSDisplay > 0) {
1089+
PFD0.Stats.DME.ETA = PFD0.Stats.DME.Distance / PFD0.Stats.Speed.AvgGSDisplay * 1000;
1090+
}
1091+
break;
1092+
default:
1093+
AlertSystemError("The value of PFD.DME.ETACalcMethod \"" + PFD.DME.ETACalcMethod + "\" in function RefreshPFDData is invalid.");
1094+
break;
10731095
}
10741096
}
10751097

@@ -1382,9 +1404,11 @@
13821404
(PFD.Speed.Mode == "DualChannel" && (PFD0.Status.GPS.IsSpeedAvailable == true || PFD0.Status.IsAccelAvailable == true)) ||
13831405
PFD.Speed.Mode == "Manual") {
13841406
ChangeText("Label_PFDDefaultPanelGSValue", ConvertUnit(PFD0.Stats.Speed.GSDisplay, "MeterPerSec", Subsystem.I18n.SpeedUnit).toFixed(0));
1407+
ChangeText("Label_PFDDefaultPanelAvgGSValue", ConvertUnit(PFD0.Stats.Speed.AvgGSDisplay, "MeterPerSec", Subsystem.I18n.SpeedUnit).toFixed(0));
13851408
ChangeText("Label_PFDDefaultPanelTASValue", ConvertUnit(PFD0.Stats.Speed.TASDisplay, "MeterPerSec", Subsystem.I18n.SpeedUnit).toFixed(0));
13861409
} else {
13871410
ChangeText("Label_PFDDefaultPanelGSValue", "---");
1411+
ChangeText("Label_PFDDefaultPanelAvgGSValue", "---");
13881412
ChangeText("Label_PFDDefaultPanelTASValue", "---");
13891413
}
13901414
if(PFD.Speed.Wind.Speed > 0) {
@@ -2437,6 +2461,8 @@
24372461
Show("Ctrl_SettingsAirportCoordinatesDeparture");
24382462
Show("Ctrl_SettingsAirportCoordinatesArrival");
24392463
Show("Ctrl_SettingsAirportCoordinatesSwap");
2464+
Show("Label_SettingsETA");
2465+
Show("Ctrl_SettingsETACalcMethod");
24402466
ChangeValue("Textbox_SettingsAirportCoordinatesDepartureLat", PFD.DME.AirportCoordinates.Departure.Lat.toFixed(5));
24412467
ChangeValue("Textbox_SettingsAirportCoordinatesDepartureLon", PFD.DME.AirportCoordinates.Departure.Lon.toFixed(5));
24422468
ChangeValue("Textbox_SettingsAirportCoordinatesArrivalLat", PFD.DME.AirportCoordinates.Arrival.Lat.toFixed(5));
@@ -2446,12 +2472,15 @@
24462472
} else {
24472473
ChangeDisabled("Button_SettingsAirportCoordinatesSwap", true);
24482474
}
2475+
ChangeValue("Combobox_SettingsETACalcMethod", PFD.DME.ETACalcMethod);
24492476
} else {
24502477
Hide("Label_SettingsAirportCoordinates");
24512478
Hide("Label_SettingsAirportCoordinatesInfo");
24522479
Hide("Ctrl_SettingsAirportCoordinatesDeparture");
24532480
Hide("Ctrl_SettingsAirportCoordinatesArrival");
24542481
Hide("Ctrl_SettingsAirportCoordinatesSwap");
2482+
Hide("Label_SettingsETA");
2483+
Hide("Ctrl_SettingsETACalcMethod");
24552484
}
24562485

24572486
// Flight mode
@@ -2634,6 +2663,15 @@
26342663
// Timestamp
26352664
PFD0.RawData.Accel.Timestamp = Date.now();
26362665
}
2666+
function ClockAvgGS() {
2667+
// Automation
2668+
clearTimeout(Automation.ClockAvgGS);
2669+
Automation.ClockAvgGS = setTimeout(ClockAvgGS, 20);
2670+
2671+
// Main
2672+
PFD0.Stats.Speed.SampleCount++;
2673+
PFD0.Stats.Speed.AvgGS = (PFD0.Stats.Speed.AvgGS * (PFD0.Stats.Speed.SampleCount - 1) + PFD0.Stats.Speed.GS) / PFD0.Stats.Speed.SampleCount;
2674+
}
26372675

26382676
// Cmds
26392677
// PFD
@@ -3089,6 +3127,10 @@
30893127
PFD.DME.AirportCoordinates.Arrival = structuredClone(Swapper);
30903128
RefreshPFD();
30913129
}
3130+
function SetETACalcMethod() {
3131+
PFD.DME.ETACalcMethod = ReadValue("Combobox_SettingsETACalcMethod");
3132+
RefreshPFD();
3133+
}
30923134

30933135
// Flight mode
30943136
function SetFlightMode() {

PROJECT/GPS-PFD/styles/style.css

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -174,8 +174,8 @@
174174
width: 100%; height: 140px;
175175
}
176176
#CtrlGroup_PFDDefaultPanelAdditionalSpeeds {
177-
position: absolute; top: calc(50% - 110px); left: 0;
178-
width: 100%; height: 220px;
177+
position: absolute; top: calc(50% - 140px); left: 0;
178+
width: 100%; height: 280px;
179179
}
180180
#CtrlGroup_PFDDefaultPanelFlapStatus {
181181
position: absolute; bottom: 0; left: 0;

PROJECT/scripts/common_UserDataRepairer.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,4 +127,17 @@
127127
"Repaired user data \"YamanoboRyou Game Stats Keystroke\".");
128128
}
129129
}
130+
131+
// GPS-PFD
132+
// v0.17 (2025/02/22) Beta Test
133+
// New feature (Avg GS)
134+
if(localStorage.GPSPFD_PFD != undefined) {
135+
let PFD = JSON.parse(localStorage.getItem("GPSPFD_PFD"));
136+
if(PFD.DME.ETACalcMethod == undefined) {
137+
PFD.DME.ETACalcMethod = "UseAvgGS";
138+
localStorage.setItem("GPSPFD_PFD", JSON.stringify(PFD));
139+
console.info("● User Data Repairer\n" +
140+
"Repaired user data \"GPSPFD PFD DME ETACalcMethod\".");
141+
}
142+
}
130143
}

0 commit comments

Comments
 (0)