From b32ecfab276fb8e1dff0e1d72ed819b548323328 Mon Sep 17 00:00:00 2001 From: Arturs Artamonovs Date: Tue, 16 Jul 2024 06:45:43 +0100 Subject: Working implementation of ADSB loaded from file. Net1090 can read from dump1090 socket --- LearnMapKit/ADSBRunner.swift | 110 ++++++++++++++++++++++++++++++++++--------- 1 file changed, 87 insertions(+), 23 deletions(-) (limited to 'LearnMapKit/ADSBRunner.swift') diff --git a/LearnMapKit/ADSBRunner.swift b/LearnMapKit/ADSBRunner.swift index 6d2bbc5..e05978c 100644 --- a/LearnMapKit/ADSBRunner.swift +++ b/LearnMapKit/ADSBRunner.swift @@ -34,81 +34,91 @@ enum DataStreamType { //get stream of decoded data, to tagged stream so all can be processed in sequence class ADSBDataQueue { - var icaoQueue: Deque = [] + //var icaoQueue: Deque = [] + var icaoArray: Array = [] var altQueue: Deque = [] var locQueue: Deque = [] - var tagQueue: Deque = [] + //var tagQueue: Deque<> = [] + var tagArray: Array = [] func getNextTag() -> DataStreamType { - if tagQueue.count < 0 { + if tagArray.count < 0 { return DataStreamType.EMPTY } - return tagQueue[tagQueue.count-1] + return tagArray[tagArray.count-1] } func addIcaoName(_ address: Int, _ icaoname: String) { - tagQueue.append(DataStreamType.ADSB_ICAO) - icaoQueue.append(ADSBICAOname(address: address, ICAOname: icaoname)) + tagArray.append(DataStreamType.ADSB_ICAO) + icaoArray.append(ADSBICAOname(address: address, ICAOname: icaoname)) } func addAltitude(_ address: Int, _ altitude: Int) { - tagQueue.append(DataStreamType.ADSB_ALTITUDE) + tagArray.append(DataStreamType.ADSB_ALTITUDE) altQueue.append(ADSBAltitude(address: address, altitude: altitude)) } func addLocation(_ address: Int, _ lat: Double, _ long: Double) { - tagQueue.append(DataStreamType.ADSB_LOCATION) + tagArray.append(DataStreamType.ADSB_LOCATION) locQueue.append(ADSBLocation(address: address, lat: lat, long: long)) } func getIcaoName() -> ADSBICAOname { - if tagQueue.count < 1 { - print("ADSB tag Queue is empry") - return ADSBICAOname(address:0,ICAOname: "") + if tagArray.count < 1 { + print("ADSB tag Queue is empty") + return ADSBICAOname(address:0,ICAOname: "TEmpty") } - let tag = tagQueue[tagQueue.count-1] + let tag = tagArray[tagArray.count-1] if tag != DataStreamType.ADSB_ICAO { print("ADSB Queue empty") - return ADSBICAOname(address:0,ICAOname: "") + return ADSBICAOname(address:0,ICAOname: "QEmpty") + } + tagArray.removeLast() + var ret_icao_name = ADSBICAOname(address:0, ICAOname: "Default") + if let last_icao_name = icaoArray.popLast() { + ret_icao_name = last_icao_name } - tagQueue.removeLast() - return icaoQueue.popLast()! + return ret_icao_name } func getAltitude() -> ADSBAltitude { - if tagQueue.count < 1 { + if tagArray.count < 1 { print("ADSB tag Queue is empry") return ADSBAltitude(address:0,altitude:0) } - let tag = tagQueue[tagQueue.count-1] + let tag = tagArray[tagArray.count-1] if tag != DataStreamType.ADSB_ALTITUDE { print("ADSB Queue empty") return ADSBAltitude(address:0,altitude:0) } - tagQueue.removeLast() + tagArray.removeLast() return altQueue.popLast()! } func getLocation() -> ADSBLocation { - if tagQueue.count < 1 { + if tagArray.count < 1 { print("ADSB tag Queue is empry") return ADSBLocation(address:0,lat:0.0,long:0.0) } - let tag = tagQueue[tagQueue.count-1] + let tag = tagArray[tagArray.count-1] if tag != DataStreamType.ADSB_LOCATION { print("ADSB Queue empty") return ADSBLocation(address:0,lat:0.0,long:0.0) } - tagQueue.removeLast() + tagArray.removeLast() return locQueue.popLast()! } func haveNum(_ num: Int) -> Bool { - if (tagQueue.count > num) { + if (tagArray.count > num) { return true } return false } + + func getCount() -> Int { + return tagArray.count + } } class ADSBFileRunner { @@ -117,13 +127,27 @@ class ADSBFileRunner { //track all airplanes var tracker = AirPlaneTracker() var adsb_source: String = "" + //should make it outside and use here? var adsb_tag_stream = ADSBDataQueue() + private var decoded_status: Bool = false init(filename:String) { self.filename = URL(fileURLWithPath:filename) } + init() { + self.filename = URL(fileURLWithPath:"") + } + + func setFileName(_ filename:String) { + self.filename = URL(fileURLWithPath: filename) + } + func openFile() { + if self.filename == URL(fileURLWithPath:"") { + print("File name for ADSBRunner not specified") + return + } print("File location [\(filename.absoluteString)]") //check if file excists @@ -139,7 +163,7 @@ class ADSBFileRunner { adsb_source = try String(contentsOfFile: filename.path) print("Loaded \(adsb_source.count) bytes") } catch { - print("Couldn't load text from a file \(filename.path)") + print("Couldn't load text from a file \(filename.path) \(error)") exit(1) } print("If there anything new in file") @@ -192,7 +216,47 @@ class ADSBFileRunner { print("Unknown adsb data line \(line)") } } + self.decoded_status = true //try to free the string after decoded //adsb_source = "" + for i in 0.. Bool { + return self.decoded_status + } + + func getPlainData(_ num_queries: Int) -> ADSBDataQueue { + var ret = ADSBDataQueue() + if adsb_tag_stream.haveNum(num_queries) { + + for _ in 0.. Int { + return self.adsb_tag_stream.getCount() } } -- cgit v1.2.3