diff options
| author | Arturs Artamonovs <arturs.artamonovs@protonmail.com> | 2026-09-26 21:53:06 +0100 |
|---|---|---|
| committer | Arturs Artamonovs <arturs.artamonovs@protonmail.com> | 2026-09-26 21:53:06 +0100 |
| commit | 40038b02ce651958ae703c8ecfe5f5578e1f7f09 (patch) | |
| tree | f6bc782c1b1d1a21073e5d40e4136d887f6fa4cd /ADSBDecoderFramework/AirplaneTracker.swift | |
| parent | 505b23afc68ecbb63b8f0a7d44c0b0ad063d5cfd (diff) | |
| download | ADSBDecoder-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.swift | 120 |
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)") + } + } + } + +} |
