From 2b7949090f7fa9b23a574a31ebd3a5fa5b10c1d7 Mon Sep 17 00:00:00 2001 From: Matthias Wirth Date: Sun, 28 Aug 2022 07:29:39 +0200 Subject: [PATCH] uat bias variable show dual source UAT data in preference when setting that in config.js --- html/config.js | 3 +++ html/defaults.js | 3 +++ html/planeObject.js | 4 +++- html/script.js | 54 +++++++++++++++++++++++++++++++-------------- 4 files changed, 46 insertions(+), 18 deletions(-) diff --git a/html/config.js b/html/config.js index 9b862c7..f50cf7f 100644 --- a/html/config.js +++ b/html/config.js @@ -345,3 +345,6 @@ tableColors = { // disableGeoLocation = false; + +// when data is available from both 1090 and 978, give some preference to the 978 data for up to X seconds old 978 data (set this to 15 or 30 for example) +//prefer978 = 0; diff --git a/html/defaults.js b/html/defaults.js index 6be8169..0559664 100644 --- a/html/defaults.js +++ b/html/defaults.js @@ -369,3 +369,6 @@ let tableColors = { }; let disableGeoLocation = false; + +// when data is available from both 1090 and 978, give some preference to the 978 data for up to X seconds old 978 data (set this to 15 or 30 for example) +let prefer978 = 0; diff --git a/html/planeObject.js b/html/planeObject.js index 20bd55f..fda501f 100644 --- a/html/planeObject.js +++ b/html/planeObject.js @@ -2717,13 +2717,15 @@ PlaneObject.prototype.checkVisible = function() { timeout += modeSTime - tisbReduction + refresh; - return (!globeIndex || icaoFilter || this.inView || this.selected || SelectedAllPlanes) && ( + const res = (!globeIndex || icaoFilter || this.inView || this.selected || SelectedAllPlanes) && ( (!globeIndex && this.seen < timeout) || (globeIndex && this.seen_pos < timeout && now - this.last_info_server < noInfoTimeout) || this.selected || noVanish || (nogpsOnly && this.nogps && this.seen < 15 * 60) // ugly hard coded ); + + return res; }; PlaneObject.prototype.setTypeData = function() { diff --git a/html/script.js b/html/script.js index 618b2b3..aabc594 100644 --- a/html/script.js +++ b/html/script.js @@ -182,22 +182,16 @@ function processAircraft(ac, init, uat) { let isArray = Array.isArray(ac); let hex = isArray ? ac[0] : ac.hex; - // Do we already have this plane object in g.planes? - // If not make it. - - /* - if ( ac.messages < 2) { - return; - } - */ if (icaoFilter && !icaoFilter.includes(hex)) return; - if (uatNoTISB && uat && ac.type && ac.type.substring(0,4) == "tisb") { + if (uat && uatNoTISB && ac.type && ac.type.substring(0,4) == "tisb") { // drop non ADS-B planes from UAT (TIS-B) return; } + // Do we already have this plane object in g.planes? + // If not make it. let plane = g.planes[hex] if (!plane) { @@ -219,21 +213,44 @@ function processAircraft(ac, init, uat) { } return; } - // don't use data if the position is more than 1 second older than the position we have - if (ac.seen_pos != null && plane.position_time > now - ac.seen_pos + 1) + if (uat_now == 0) { + plane.updateData(now, last, ac, init); return; + } + + // UAT dual source stuff below + + let newPos = ac.seen_pos; + if (newPos === undefined || isNaN(newPos)) { + newPos = 1000; + } + let oldPos = plane.seen_pos; + if (oldPos === undefined || isNaN(oldPos)) { + oldPos = 1000; + } + let newSeen = ac.seen; + if (newSeen === undefined || isNaN(newSeen)) { + newSeen = 1000; + } + let oldSeen = plane.seen; + if (oldSeen === undefined || isNaN(oldSeen)) { + oldSeen = 1000; + } + if (!uat) { - if (!plane.uat - || (ac.seen_pos < 2 && plane.seen_pos > 4) - || (plane.seen > 10 && ac.seen < 0.8 * plane.seen) || isNaN(plane.seen) + if (!plane.uat // plane isn't uat, new data isn't uat, accept immediately + || (prefer978 < 0 && newPos < -prefer978) + || (newPos < 2 && oldPos > 4 + prefer978) + || (oldPos > 60 && newSeen < 2 && oldSeen > 4 + prefer978) || init) { plane.uat = false; plane.updateData(now, last, ac, init); } } else { - if (plane.uat - || (ac.seen_pos < 2 && (plane.seen_pos > 4 || plane.dataSource == "mlat")) - || (plane.seen > 10 && ac.seen < 0.8 * plane.seen) || isNaN(plane.seen) + if (plane.uat // plane is uat, new data is uat, accept immediately + || (prefer978 > 0 && newPos < prefer978) + || (newPos < 2 && (oldPos > 4 - prefer978 || plane.dataSource == "mlat")) + || (oldPos > 60 && newSeen < 2 && oldSeen > 4 - prefer978) || init) { let tisb = Array.isArray(ac) ? (ac[7] == "tisb") : (ac.tisb != null && ac.tisb.indexOf("lat") >= 0); if (tisb && plane.dataSource == "adsb") { @@ -256,6 +273,9 @@ function processReceiverUpdate(data, init) { uat_last = uat_now; uat_now = data.now; } else { + if (uat_now && now - uat_now > 15) { + uat_now = now; + } if (data.now - now < -3) { // data.now is too old, possibly a caching issues enableDynamicCachebusting = true;