summaryrefslogtreecommitdiff
path: root/LearnMapKit
diff options
context:
space:
mode:
Diffstat (limited to 'LearnMapKit')
-rw-r--r--LearnMapKit/ADSBRunner.swift105
-rw-r--r--LearnMapKit/ContentView.swift29
-rw-r--r--LearnMapKit/FlighState.swift45
-rw-r--r--LearnMapKit/LearnMapKitApp.swift45
4 files changed, 218 insertions, 6 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 = ""
+ }
+}
diff --git a/LearnMapKit/ContentView.swift b/LearnMapKit/ContentView.swift
index d9e3377..08f4192 100644
--- a/LearnMapKit/ContentView.swift
+++ b/LearnMapKit/ContentView.swift
@@ -7,11 +7,15 @@
import SwiftUI
import MapKit
+import Collections
struct ContentView: View {
-
@State private var region = MKCoordinateRegion()
+ @State private var isImporting = false
+
+ @Binding var pos_queue: Deque<ADSBLocation>
+ @EnvironmentObject var evilClass: FlightState
let initialPosition: MapCameraPosition = {
let center = CLLocationCoordinate2D(latitude: 55.90159, longitude:-3.53154)
@@ -49,6 +53,7 @@ struct ContentView: View {
}
Button("7") {
print("Pressed 7")
+ print(evilClass.update_postions.count)
}
}
.border(.blue)
@@ -105,6 +110,22 @@ struct ContentView: View {
.border(.green)
.layoutPriority(1)
.mapStyle(.hybrid(elevation: .realistic))
+ .toolbar {
+ ToolbarItem() {
+ Button {
+ isImporting = true
+ } label: {
+ Label("Import file", systemImage: "square.and.arrow.down")
+ }
+ }
+ } .fileImporter(isPresented: $isImporting, allowedContentTypes: [.text], allowsMultipleSelection: false) {
+ result in switch result {
+ case .success(let files):
+ print(files)
+ case .failure(let error):
+ print(error)
+ }
+ }
}
@@ -114,6 +135,6 @@ struct ContentView: View {
}
}
-#Preview {
- ContentView()
-}
+//#Preview {
+ //ContentView(pos_queue: pos_queue)
+//}
diff --git a/LearnMapKit/FlighState.swift b/LearnMapKit/FlighState.swift
new file mode 100644
index 0000000..f3895cb
--- /dev/null
+++ b/LearnMapKit/FlighState.swift
@@ -0,0 +1,45 @@
+//
+// FlighState.swift
+// LearnMapKit
+//
+// Created by Jacky Jack on 30/06/2024.
+//
+
+import Foundation
+import Collections
+
+class FlightState: ObservableObject {
+ @Published var name = "Some Name"
+ @Published var isEnabled = false
+ var timer: Timer?
+ var update_postions: Deque<ADSBLocation> = []
+ var fromFile: Bool = false
+ init() {
+ var count = 0
+
+ let ADSBtask = ADSBFileRunner(filename: "")
+ timer = Timer.scheduledTimer(
+ withTimeInterval: 1,
+ repeats: true
+ ) { _ in
+
+ //queue.append(MapADSBData(lat: 0.0, long: 0.0, alt: 1))
+
+ //let timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { timer in
+ print("Evil object \(count)")
+ //ADSBtask.runFromFile()
+ self.update_postions.append(ADSBLocation(address: 0, lat: 0.0, long: 0.0))
+ // print(update_postions.count)
+ count += 1
+ //}
+ }
+ }
+ init(filename: String) {
+
+ }
+
+ func loadFromFile() {
+
+ }
+}
+
diff --git a/LearnMapKit/LearnMapKitApp.swift b/LearnMapKit/LearnMapKitApp.swift
index eebb4b8..5fa170a 100644
--- a/LearnMapKit/LearnMapKitApp.swift
+++ b/LearnMapKit/LearnMapKitApp.swift
@@ -6,12 +6,53 @@
//
import SwiftUI
+import Collections
+
+//https://www.hackingwithswift.com/quick-start/swiftui/how-to-run-code-when-your-app-launches
+
+
@main
struct LearnMapKitApp: App {
+
+ @State var queue: Deque<ADSBLocation> = []
+
+ @StateObject private var flightState = FlightState()
+
+ init() {
+ print("Init app")
+ var update_postions: Deque<ADSBLocation> = []
+ DispatchQueue.global(qos: .background).sync {
+ print("Dispatch")
+ //var count = 0
+
+
+ //let ADSBtask = ADSBRunner()
+ //queue.append(MapADSBData(lat: 0.0, long: 0.0, alt: 1))
+ /*
+ let timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { timer in
+ print("Timer fired! \(count)")
+ ADSBtask.runFromFile()
+ update_postions.append(MapADSBData(lat: 0.0, long: 0.0, alt: 1))
+ print(update_postions.count)
+ count += 1
+ }*/
+ print("Exit dispatch")
+ }
+
+ //push all new data to state queue from a runner
+ DispatchQueue.global(qos: .background).sync {
+ // Update the UI on the main thread
+ let c = queue.count
+ }
+ }
+
+
+
var body: some Scene {
WindowGroup {
- ContentView()
- }
+ ContentView(pos_queue: $queue)
+ }.environmentObject(flightState)
}
+
}