summaryrefslogtreecommitdiff
path: root/LearnMapKit/ADSBRunner.swift
diff options
context:
space:
mode:
Diffstat (limited to 'LearnMapKit/ADSBRunner.swift')
-rw-r--r--LearnMapKit/ADSBRunner.swift105
1 files changed, 105 insertions, 0 deletions
diff --git a/LearnMapKit/ADSBRunner.swift b/LearnMapKit/ADSBRunner.swift
new file mode 100644
index 0000000..0f09759
--- /dev/null
+++ b/LearnMapKit/ADSBRunner.swift
@@ -0,0 +1,105 @@
+//
+// ADSBRunner.swift
+// LearnMapKit
+//
+// Created by Jacky Jack on 28/06/2024.
+//
+
+import Foundation
+
+struct ADSBLocation {
+ let address: Int
+ let lat: Double
+ let long: Double
+ //let alt: Int
+}
+
+struct ADSBAltitude {
+ let address: Int
+ let altitude: Int
+}
+
+struct ADSBICAOname {
+ let address: Int
+ let ICAOname: String
+}
+
+class ADSBFileRunner {
+
+ var filename: URL
+ //track all airplanes
+ var tracker = AirPlaneTracker()
+ var adsb_source: String = ""
+
+ init(filename:String) {
+ self.filename = URL(fileURLWithPath:filename)
+ }
+
+ func openFile() {
+ print("File location [\(filename.absoluteString)]")
+
+ //check if file excists
+ if (checkIfFileExists(filename.path) == false) {
+ print("Supplied path \(filename.path) doesnt exists")
+ exit(1)
+ }
+ }
+
+ func readFile() {
+ //load the file with adsb data
+ do {
+ adsb_source = try String(contentsOfFile: filename.path)
+ print("Loaded \(adsb_source.count) bytes")
+ } catch {
+ print("Couldn't load text from a file \(filename.path)")
+ exit(1)
+ }
+ print("If there anything new in file")
+ }
+
+ func decode() {
+ for line in self.adsb_source.components(separatedBy: .newlines) {
+ var found=false
+ do {
+ if let tokenMatch = try matchADSBLong.prefixMatch(in: line) {
+ //print("\(String(tokenMatch.output))")
+ found = true
+ let str = String(tokenMatch.output)
+ let startIndex = str.index(str.startIndex, offsetBy: 1)
+ let endIndex = str.index(str.endIndex, offsetBy: -2)
+ let decoder = Decoder(String(str[startIndex...endIndex]))
+ if decoder.DataFormat == 17 {
+ if let d17 = decoder.getDataFormat17() {
+ if (d17.TypeCode == 4) {
+ if let indentification = d17.messageIdentification {
+ tracker.addDF17Indentification(d17.AddressAnnounced, indentification.ICAOName)
+ }
+ } else if (d17.TypeCode >= 9 && d17.TypeCode <= 18) {
+ if let airbornposition = d17.messageAirbornPositon {
+ tracker.addDF17AirBornPosition(
+ d17.AddressAnnounced,
+ airbornposition.Latitude,
+ airbornposition.Longitude,
+ airbornposition.Altitude,
+ airbornposition.CPRFormat == 0
+ )
+ if let position = tracker.getPosition(d17.AddressAnnounced) {
+ print("position: \(position)")
+ }
+ }
+ }
+ }
+ }
+ };
+ } catch {
+ print("Error")
+ }
+
+ if (found == false) {
+ print("Unknown adsb data line \(line)")
+ }
+ }
+ //try to free the string after decoded
+ //adsb_source = ""
+ }
+}