From 58d9d561df35f88884b2959d2cf322f1ee69e3cd Mon Sep 17 00:00:00 2001 From: Arturs Artamonovs Date: Wed, 26 Jun 2024 08:29:38 +0100 Subject: Decoding lat/lon seems to work --- ADSBDecoder/AirplaneTracker.swift | 110 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 ADSBDecoder/AirplaneTracker.swift (limited to 'ADSBDecoder/AirplaneTracker.swift') diff --git a/ADSBDecoder/AirplaneTracker.swift b/ADSBDecoder/AirplaneTracker.swift new file mode 100644 index 0000000..0ac8bfc --- /dev/null +++ b/ADSBDecoder/AirplaneTracker.swift @@ -0,0 +1,110 @@ +// +// 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() +} + +class AirPlaneTracker { + + var airplanes:[Int:Airplane] = [:] + + init () { + + } + + 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 + } + } + } + + func addDF17AirBornPosition(_ address: Int, _ cpr_lat: Int, _ cpr_long: Int, _ alt: Int, _ even: Bool) { + + if airplanes[address] == nil { + return + } + + //deal with altitude + //if airplanes[address] != nil { + if (airplanes[address]?.altitudeReady != true) { + airplanes[address]?.altitudeReady = true + airplanes[address]?.altitude = alt + airplanes[address]?.altitudeCount += 1 + } else { + airplanes[address]?.altitude = alt + airplanes[address]?.altitudeCount += 1 + } + //} + //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()) + } + + } + + + 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 + } + + func getAltitude() { + + print("not implemented") + } + + func printAllICAOnames() { + let extra = true + var once=false + for (address,plane) in airplanes { + if plane.ICAOready { + print(String("\(plane.ICAOname) "), terminator: "") + } + if (extra) { + print("Alitude \(plane.altitudeCount) Positions \(plane.positionDecoder.queue.count)") + } + //if (!once) { + // for i in plane.positionDecoder.queue { + // print("\(i.cpr_lat) \(i.cpr_long) \(i.even)") + // } + // once = true + //} + } + } + +} -- cgit v1.2.3