summaryrefslogtreecommitdiff
path: root/LearnMapKit
diff options
context:
space:
mode:
Diffstat (limited to 'LearnMapKit')
-rw-r--r--LearnMapKit/ContentView.swift28
-rw-r--r--LearnMapKit/FlighState.swift221
-rw-r--r--LearnMapKit/LearnMapKitApp.swift86
-rw-r--r--LearnMapKit/NetworkConfigure.swift12
4 files changed, 218 insertions, 129 deletions
diff --git a/LearnMapKit/ContentView.swift b/LearnMapKit/ContentView.swift
index e85c3b2..9f18e30 100644
--- a/LearnMapKit/ContentView.swift
+++ b/LearnMapKit/ContentView.swift
@@ -62,34 +62,6 @@ struct ContentView: View {
var body: some View {
VStack {
- HStack(alignment: .top) {
- Button("1") {
- print("Pressed 1")
- }
- Button("2") {
- print("Pressed 2")
- }
- Button("3") {
- print("Pressed 3")
- }
- Button("4") {
- print("Pressed 4")
- }
- Button("5") {
- print("Pressed 5")
- }
- Button("6") {
- print("Pressed 6")
- }
- Button("7") {
- print("Pressed 7")
- //print(evilClass.update_postions.count)
- }
- }
- .border(.blue)
- //.frame(maxWidth:.infinity)
- //.padding()
-
Map(initialPosition: initialPosition) {
ForEach(self.evilClass.flight.sorted(by: { $0.key < $1.key} ), id:\.key) { k in
Annotation("\(k.key)", coordinate: CLLocationCoordinate2D(latitude: self.evilClass.flight[k.key]!.lat, longitude:self.evilClass.flight[k.key]!.long)) {
diff --git a/LearnMapKit/FlighState.swift b/LearnMapKit/FlighState.swift
index 446b491..9f42369 100644
--- a/LearnMapKit/FlighState.swift
+++ b/LearnMapKit/FlighState.swift
@@ -28,126 +28,173 @@ class FlightState: ObservableObject {
@Published var flight:[Int:FlightTracker] = [:]
//configuration options
- let sourceFile = false
- let default_file_path = "/Users/jackyjack/Downloads/2024_05_27_raw_adsb.txt"
- let process_per_second = 120
+ var sourceFile = false
+ var default_file_path = "/Users/jackyjack/Downloads/2024_05_27_raw_adsb.txt"
+ var process_per_second = 120
- let sourceDump1090Server = true
- let dump1090address = "192.168.4.201"
- let dump1090port = 30002
+ var sourceDump1090Server = true
+ var dump1090address = "192.168.4.201"
+ var dump1090port = 30002
init() {
+ print("Init")
var count = 0
//let ADSBtask = ADSBFileRunner(filename: "")
//let adsb_net = ADSBNetRunner(address: dump1090address, port: dump1090port)
- if sourceFile {
- let adsb_file = ADSBFileRunner(filename: self.default_file_path)
- DispatchQueue.global(qos: .background).sync {
- print("Open file")
- adsb_file.openFile()
- adsb_file.readFile()
- }
-
- DispatchQueue.global(qos: .background).async {
- print("Start decoding data")
- adsb_file.decodeFromFile()
- print("Stop decoding data")
- }
-
- //once a second read some data from decoded queue
- timer = Timer.scheduledTimer(
- withTimeInterval: 1,
- repeats: true
- ) { _ in
- //get the 10 entries if there is
- if adsb_file.jobDone() {
- print("Decoding done let get some data \(adsb_file.getCount())")
- //if adsb_file
- if adsb_file.getCount() > self.process_per_second {
- let data = adsb_file.getPlainData(self.process_per_second)
- //print(data.getCount())
- for idx in 0..<data.getCount() {
- let nextTag = data.getNextTag()
- if nextTag == DataStreamType.ADSB_ALTITUDE {
- let _ = data.getAltitude()
-#warning("Implement this")
- } else if (nextTag == DataStreamType.ADSB_ICAO) {
- let icao = data.getIcaoName()
- print("Tag icao \(icao) count:\(data.icaoArray.count)")
- self.addIcaoName(icao.address, icao.ICAOname)
- } else if (nextTag == DataStreamType.ADSB_LOCATION) {
- print("tag location")
- let loc = data.getLocation()
- self.addLocation(loc.address, loc.lat, loc.long)
- }
- }
-
- } else {
- print("Data stream is empty")
- }
- }
- }
+ //if sourceFile {
+ // startSourceFile()
+ //}
+
+ //if sourceDump1090Server {
+ // startDump1090()
+ //}
+ }
+
+ init(filename: String) {
+ fileMode(filepath: filename)
+ startSourceFile()
+ }
+
+ init(hostname: String, port: Int) {
+ networkMode(hostname: hostname, port: port)
+ startDump1090()
+ }
+
+ func networkMode(hostname: String, port: Int) {
+ print("network mode")
+ self.dump1090address = hostname
+ self.dump1090port = port
+ self.sourceDump1090Server = true
+ self.sourceFile = false
+ }
+
+ func fileMode(filepath: String) {
+ print("file mode")
+ self.default_file_path = filepath
+ self.sourceFile = true
+ self.sourceDump1090Server = false
+ }
+
+ func defaultMode() {
+ print("default mode")
+ self.sourceDump1090Server = true
+ self.sourceFile = false
+ }
+
+ func startSourceFile() {
+ print("Start reading ADSB messages from \(self.default_file_path)")
+ let adsb_file = ADSBFileRunner(filename: self.default_file_path)
+ DispatchQueue.global(qos: .background).sync {
+ print("Open file")
+ adsb_file.openFile()
+ adsb_file.readFile()
}
- if sourceDump1090Server {
- //let ADSBClient = NetADSBDecoder(host: "192.168.4.201", port: 30002)
- let ADSBClient = ADSBNetRunner(address: "192.168.4.201", port: 30002)
- timer = Timer.scheduledTimer(
- withTimeInterval: 1,
- repeats: true
- ) { _ in
- //print("Timer drain queue")
- //print("\(ADSBClient.msgarray.message_array.count)")
- /*if ADSBClient.msgarray.message_array.count > 0 {
- print(ADSBClient.msgarray.message_array.count)
- for i in 0..<ADSBClient.msgarray.message_array.count {
- print(ADSBClient.msgarray.message_array.popLast()!,terminator: "")
- }
- }*/
- if ADSBClient.adsb_tag_stream.getCount() > 0 {
- print("Process onse a second")
- for idx in 0..<ADSBClient.adsb_tag_stream.getCount() {
- let nextTag = ADSBClient.adsb_tag_stream.getNextTag()
+ DispatchQueue.global(qos: .background).async {
+ print("Start decoding data")
+ adsb_file.decodeFromFile()
+ print("Stop decoding data")
+ }
+
+ //once a second read some data from decoded queue
+ timer = Timer.scheduledTimer(
+ withTimeInterval: 1,
+ repeats: true
+ ) { _ in
+ //get the 10 entries if there is
+ if adsb_file.jobDone() {
+ print("Decoding done let get some data \(adsb_file.getCount())")
+ //if adsb_file
+ if adsb_file.getCount() > self.process_per_second {
+ let data = adsb_file.getPlainData(self.process_per_second)
+ //print(data.getCount())
+ for idx in 0..<data.getCount() {
+ let nextTag = data.getNextTag()
if nextTag == DataStreamType.ADSB_ALTITUDE {
- let _ = ADSBClient.adsb_tag_stream.getAltitude()
+ let _ = data.getAltitude()
#warning("Implement this")
} else if (nextTag == DataStreamType.ADSB_ICAO) {
- let icao = ADSBClient.adsb_tag_stream.getIcaoName()
- print("Tag icao \(icao) count:\(ADSBClient.adsb_tag_stream.icaoArray.count)")
+ let icao = data.getIcaoName()
+ print("Tag icao \(icao) count:\(data.icaoArray.count)")
self.addIcaoName(icao.address, icao.ICAOname)
} else if (nextTag == DataStreamType.ADSB_LOCATION) {
print("tag location")
- let loc = ADSBClient.adsb_tag_stream.getLocation()
+ let loc = data.getLocation()
self.addLocation(loc.address, loc.lat, loc.long)
}
}
+
+ } else {
+ print("Data stream is empty")
}
}
- /*
- DispatchQueue.global(qos: .background).async {
- do {
- try ADSBClient.start()
- } catch let error {
- print("Error: \(error.localizedDescription)")
- ADSBClient.stop()
+ }
+ }
+
+ func startDump1090() {
+ print("Start reading ADSB messages from \(dump1090address):\(dump1090port)")
+ //let ADSBClient = NetADSBDecoder(host: "192.168.4.201", port: 30002)
+ //let ADSBClient = ADSBNetRunner(address: "192.168.4.201", port: 30002)
+ let ADSBClient = ADSBNetRunner(address: dump1090address, port: dump1090port)
+ timer = Timer.scheduledTimer(
+ withTimeInterval: 1,
+ repeats: true
+ ) { _ in
+ //print("Timer drain queue")
+ //print("\(ADSBClient.msgarray.message_array.count)")
+ /*if ADSBClient.msgarray.message_array.count > 0 {
+ print(ADSBClient.msgarray.message_array.count)
+ for i in 0..<ADSBClient.msgarray.message_array.count {
+ print(ADSBClient.msgarray.message_array.popLast()!,terminator: "")
}
}*/
+ if ADSBClient.adsb_tag_stream.getCount() > 0 {
+ print("Process onse a second")
+ for idx in 0..<ADSBClient.adsb_tag_stream.getCount() {
+ let nextTag = ADSBClient.adsb_tag_stream.getNextTag()
+ if nextTag == DataStreamType.ADSB_ALTITUDE {
+ let _ = ADSBClient.adsb_tag_stream.getAltitude()
+#warning("Implement this")
+ } else if (nextTag == DataStreamType.ADSB_ICAO) {
+ let icao = ADSBClient.adsb_tag_stream.getIcaoName()
+ print("Tag icao \(icao) count:\(ADSBClient.adsb_tag_stream.icaoArray.count)")
+ self.addIcaoName(icao.address, icao.ICAOname)
+ } else if (nextTag == DataStreamType.ADSB_LOCATION) {
+ print("tag location")
+ let loc = ADSBClient.adsb_tag_stream.getLocation()
+ self.addLocation(loc.address, loc.lat, loc.long)
+ }
+ }
+ }
+ }
+ /*
+ DispatchQueue.global(qos: .background).async {
do {
- print("Start")
try ADSBClient.start()
} catch let error {
print("Error: \(error.localizedDescription)")
ADSBClient.stop()
}
-
+ }*/
+ do {
+ print("Start")
+ try ADSBClient.start()
+ } catch let error {
+ print("Error: \(error.localizedDescription)")
+ ADSBClient.stop()
}
}
- init(filename: String) {
- #warning("not implemented at all")
+ func run() {
+ print("run")
+ if self.sourceFile {
+ startSourceFile()
+ } else if self.sourceDump1090Server {
+ startDump1090()
+ }
}
func addLocation(_ address: Int, _ lat: Double, _ long: Double) {
diff --git a/LearnMapKit/LearnMapKitApp.swift b/LearnMapKit/LearnMapKitApp.swift
index 62a902f..8132c92 100644
--- a/LearnMapKit/LearnMapKitApp.swift
+++ b/LearnMapKit/LearnMapKitApp.swift
@@ -11,26 +11,60 @@ import ArgumentParser
//https://www.hackingwithswift.com/quick-start/swiftui/how-to-run-code-when-your-app-launches
-
+struct CommandLineArgs: ParsableCommand {
+ @Option(name: .shortAndLong) var hostname: String? = nil
+ @Option(name: .shortAndLong) var port: Int? = nil
+ @Option(name: .shortAndLong) var inputfile: String? = nil
+ @Flag(name: .shortAndLong) var debug:Bool = false
+ @Flag(name: .shortAndLong) var version:Bool = false
+}
@main
struct LearnMapKitApp: App {
-
+ var network_mode = false
+ var file_mode = false
@State var queue: Deque<ADSBLocation> = []
@State var netconfig: NetworkConfigure = NetworkConfigure()
- @StateObject private var flightState = FlightState()
+ @StateObject private var flightState:FlightState = FlightState()
+
+ var default_hostname = "192.168.4.201"
+ var default_port = 30002
+ var default_input_file = ""
init() {
-
print("Init app")
- let ADSBClient = NetADSBDecoder(host: "192.168.4.201", port: 30002)
- /*do {
- try ADSBClient.start()
- } catch let error {
- print("Error: \(error.localizedDescription)")
- ADSBClient.stop()
- }*/
+ //parse arguments
+ //let args = CommandLineArgs.parseOrExit()
+ //flightState.defaultMode()
+ let args = CommandLineArgs.parseOrExit()
+ print(args)
+ print(args.inputfile)
+ //exit(0)
+ //if (true)//
+ if let args = CommandLineArgs.parseNotExit()
+ {
+ if args.hostname != nil {
+ default_hostname = args.hostname!
+ network_mode = true
+ }
+ if args.port != nil {
+ default_port = args.port!
+ network_mode = true
+ }
+
+ if args.inputfile != nil {
+ default_input_file = args.inputfile!
+ file_mode = true
+ }
+ print("Set this")
+
+ }
+
+ //flightState.run()
+
+
+ /*let ADSBClient = NetADSBDecoder(host: default_hostname, port: default_port)
DispatchQueue.global(qos: .background).async {
do {
try ADSBClient.start()
@@ -38,17 +72,41 @@ struct LearnMapKitApp: App {
print("Error: \(error.localizedDescription)")
ADSBClient.stop()
}
- }
+ }*/
}
var body: some Scene {
WindowGroup {
- ContentView(pos_queue: $queue, net_config: $netconfig)
+ ContentView(pos_queue: $queue, net_config: $netconfig).onAppear(perform: {
+ if network_mode {
+ print("network mode")
+ flightState.networkMode(hostname: self.default_hostname, port: self.default_port)
+ } else if (file_mode){
+ print("RUn file mode")
+ flightState.fileMode(filepath: self.default_input_file)
+ } else {
+ print("Run default mode")
+ flightState.defaultMode()
+ }
+ flightState.run()
+ })
}.environmentObject(flightState)
WindowGroup("Network", id: "net-config") {
NetConfigView(net_config: $netconfig)
}
}
-
+}
+
+extension ParsableArguments {
+ static func parseNotExit(
+ _ arguments: [String]? = nil
+ ) -> Self! {
+ do {
+ return try parse(arguments)
+ } catch {
+ print("Ignore error")
+ return nil
+ }
+ }
}
diff --git a/LearnMapKit/NetworkConfigure.swift b/LearnMapKit/NetworkConfigure.swift
index a566f8b..2baf6ad 100644
--- a/LearnMapKit/NetworkConfigure.swift
+++ b/LearnMapKit/NetworkConfigure.swift
@@ -10,4 +10,16 @@ import Foundation
class NetworkConfigure {
var servername: String = "192.168.4.201"
var serverport: Int = 30002
+
+ var default_values: Bool = true
+
+ func setPort(_ port: Int) {
+ default_values = false
+ self.serverport = port
+ }
+
+ func setHost(_ hostname: String) {
+ default_values = false
+ self.servername = hostname
+ }
}