summaryrefslogtreecommitdiff
path: root/ADSBDecoderFramework/AirplaneTracker.swift
diff options
context:
space:
mode:
authorArturs Artamonovs <arturs.artamonovs@protonmail.com>2026-09-26 21:53:06 +0100
committerArturs Artamonovs <arturs.artamonovs@protonmail.com>2026-09-26 21:53:06 +0100
commit40038b02ce651958ae703c8ecfe5f5578e1f7f09 (patch)
treef6bc782c1b1d1a21073e5d40e4136d887f6fa4cd /ADSBDecoderFramework/AirplaneTracker.swift
parent505b23afc68ecbb63b8f0a7d44c0b0ad063d5cfd (diff)
downloadADSBDecoder-40038b02ce651958ae703c8ecfe5f5578e1f7f09.tar.gz
ADSBDecoder-40038b02ce651958ae703c8ecfe5f5578e1f7f09.zip
create adsbdecoder as UI, and renmae adsbdecoder to adsbdecodercli for terminal version
Diffstat (limited to 'ADSBDecoderFramework/AirplaneTracker.swift')
-rw-r--r--ADSBDecoderFramework/AirplaneTracker.swift120
1 files changed, 120 insertions, 0 deletions
diff --git a/ADSBDecoderFramework/AirplaneTracker.swift b/ADSBDecoderFramework/AirplaneTracker.swift
new file mode 100644
index 0000000..6c09953
--- /dev/null
+++ b/ADSBDecoderFramework/AirplaneTracker.swift
@@ -0,0 +1,120 @@
+//
+// AirplaneTracker.swift
+// ADSBDecoder
+//
+// Created by Jacky Jack on 20/06/2024.
+//
+
+import Foundation
+
+struct Airplane {
+ var addressReady:Bool = false
+ var Address:Int
+ var ICAOready:Bool = false
+ var ICAOname:String = ""
+ var locationReady:Bool = false
+ var lat:Double = 0.0
+ var long:Double = 0.0
+ var altitudeReady:Bool = false
+ var altitude:Int = 0
+ var altitudeCount:Int = 0
+ var positionDecoder:PositionDecoder = PositionDecoder()
+}
+
+public class AirPlaneTracker {
+
+ var airplanes:[Int:Airplane] = [:]
+
+ public init () {
+
+ }
+
+ public func addDF17Indentification(_ address: Int, _ ICAOname: String) {
+ if (airplanes[address] == nil) {
+ airplanes[address] = Airplane(addressReady: true, Address: address,ICAOready: true, ICAOname: ICAOname)
+
+ } else {
+ if (airplanes[address]?.ICAOname == "") {
+ airplanes[address]?.ICAOname = ICAOname
+ airplanes[address]?.ICAOready = true
+ }
+ }
+ }
+
+ public func addDF17AirBornPosition(_ address: Int, _ cpr_lat: Int, _ cpr_long: Int, _ alt: Int, _ even: Bool) {
+
+ if airplanes[address] == nil {
+ return
+ }
+
+ //deal with altitude
+ airplanes[address]?.altitude = alt
+ airplanes[address]?.altitudeCount += 1
+ airplanes[address]?.altitudeReady = true
+ //do the airborn position
+ if (even) {
+ airplanes[address]?.positionDecoder.addEvenPosition(UInt32(cpr_lat), UInt32(cpr_long), mstime())
+ } else {
+
+ airplanes[address]?.positionDecoder.addOddPosition(UInt32(cpr_lat), UInt32(cpr_long), mstime())
+ }
+
+ }
+
+ public func getPosition(_ address: Int) -> (Double,Double)? {
+ if (airplanes[address] == nil) {
+ return nil
+ }
+
+ if let airplane = airplanes[address] {
+ if (airplane.positionDecoder.calcPosition()) {
+ return airplane.positionDecoder.getPosition()
+ }
+ }
+
+ return nil
+ }
+
+ public func getAltitude(_ address: Int) -> Int? {
+ if (airplanes[address] == nil) {
+ return nil
+ }
+ if let airplane = airplanes[address] {
+ if airplane.altitudeReady {
+ return airplane.altitude
+ } else {
+ return nil
+ }
+ } else {
+ return nil
+ }
+ }
+
+ public func getICAOname(_ address: Int) -> String? {
+ if (airplanes[address] == nil) {
+ return nil
+ }
+ if let airplane = airplanes[address] {
+ if airplane.ICAOready {
+ return airplane.ICAOname
+ } else {
+ return nil
+ }
+ } else {
+ return nil
+ }
+ }
+
+ public func printAllICAOnames() {
+ let extra = false
+ for (address,plane) in airplanes {
+ if plane.ICAOready {
+ print(String("\(plane.ICAOname) "), terminator: "")
+ }
+ if (extra) {
+ print("Alitude \(plane.altitudeCount)")
+ }
+ }
+ }
+
+}