2021-09-20 22:29:10 -07:00
|
|
|
|
/*
|
|
|
|
|
|
See LICENSE folder for this sample’s licensing information.
|
|
|
|
|
|
*/
|
2021-09-14 21:38:12 -07:00
|
|
|
|
import SwiftUI
|
|
|
|
|
|
import CoreLocation
|
|
|
|
|
|
|
2021-09-19 01:10:49 -07:00
|
|
|
|
struct NodeInfoModel: Identifiable, Codable {
|
2021-09-14 21:38:12 -07:00
|
|
|
|
|
2021-09-22 13:00:46 -07:00
|
|
|
|
var id: UInt32
|
2021-09-14 21:38:12 -07:00
|
|
|
|
var num: UInt32
|
2021-09-23 20:10:53 -07:00
|
|
|
|
var myInfo: MyInfoModel?
|
2021-09-14 21:38:12 -07:00
|
|
|
|
var user: User
|
2021-09-19 01:10:49 -07:00
|
|
|
|
struct User: Identifiable, Codable {
|
2021-09-14 21:38:12 -07:00
|
|
|
|
var id: String
|
|
|
|
|
|
var longName: String
|
|
|
|
|
|
var shortName: String
|
|
|
|
|
|
var hwModel: String
|
2021-09-20 22:29:10 -07:00
|
|
|
|
|
|
|
|
|
|
init(id: String, longName: String, shortName: String, hwModel: String) {
|
|
|
|
|
|
self.id = id
|
|
|
|
|
|
self.longName = longName
|
|
|
|
|
|
self.shortName = shortName
|
|
|
|
|
|
self.hwModel = hwModel
|
|
|
|
|
|
}
|
2021-09-14 21:38:12 -07:00
|
|
|
|
}
|
|
|
|
|
|
var position: Position
|
2021-09-19 01:10:49 -07:00
|
|
|
|
struct Position: Codable {
|
2021-09-14 21:38:12 -07:00
|
|
|
|
var latitudeI: Int32?
|
2021-09-18 15:33:35 -07:00
|
|
|
|
var latitude: Double? {
|
|
|
|
|
|
if let unwrappedLat = latitudeI {
|
|
|
|
|
|
let d = Double(unwrappedLat)
|
2021-09-22 13:00:46 -07:00
|
|
|
|
if d == 0 {
|
|
|
|
|
|
return nil
|
|
|
|
|
|
}
|
2021-09-19 01:10:49 -07:00
|
|
|
|
return d / 1e7
|
2021-09-18 15:33:35 -07:00
|
|
|
|
}
|
|
|
|
|
|
else {
|
|
|
|
|
|
return nil
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2021-09-14 21:38:12 -07:00
|
|
|
|
var longitudeI: Int32?
|
2021-09-18 15:33:35 -07:00
|
|
|
|
var longitude: Double? {
|
|
|
|
|
|
if let unwrappedLong = longitudeI {
|
|
|
|
|
|
let d = Double(unwrappedLong)
|
2021-09-22 13:00:46 -07:00
|
|
|
|
if d == 0 {
|
|
|
|
|
|
return nil
|
|
|
|
|
|
}
|
2021-09-19 01:10:49 -07:00
|
|
|
|
return d / 1e7
|
2021-09-18 15:33:35 -07:00
|
|
|
|
}
|
|
|
|
|
|
else {
|
|
|
|
|
|
return nil
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
var coordinate: CLLocationCoordinate2D? {
|
2021-09-28 00:00:09 -07:00
|
|
|
|
if latitude != nil && longitude != nil {
|
2021-09-18 15:33:35 -07:00
|
|
|
|
let coord = CLLocationCoordinate2D(latitude: latitude!, longitude: longitude!)
|
|
|
|
|
|
|
|
|
|
|
|
return coord
|
|
|
|
|
|
}
|
|
|
|
|
|
else {
|
|
|
|
|
|
return nil
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2021-09-14 21:38:12 -07:00
|
|
|
|
var altitude: Int32?
|
|
|
|
|
|
var batteryLevel: Int32?
|
2021-09-21 20:49:12 -07:00
|
|
|
|
var time: UInt32?
|
2021-09-20 22:29:10 -07:00
|
|
|
|
|
2021-09-21 20:49:12 -07:00
|
|
|
|
init(latitudeI: Int32?, longitudeI: Int32?, altitude: Int32?, batteryLevel: Int32?, time: UInt32? ) {
|
2021-09-20 22:29:10 -07:00
|
|
|
|
self.latitudeI = latitudeI
|
|
|
|
|
|
self.longitudeI = longitudeI
|
|
|
|
|
|
self.altitude = altitude
|
|
|
|
|
|
self.batteryLevel = batteryLevel
|
|
|
|
|
|
self.time = time
|
|
|
|
|
|
}
|
2021-09-14 21:38:12 -07:00
|
|
|
|
}
|
|
|
|
|
|
|
2021-09-21 20:49:12 -07:00
|
|
|
|
var lastHeard: UInt32
|
|
|
|
|
|
var snr: Float?
|
2021-09-20 22:29:10 -07:00
|
|
|
|
|
|
|
|
|
|
|
2021-09-22 13:00:46 -07:00
|
|
|
|
init(num: UInt32, user: User, position: Position, lastHeard: UInt32, snr: Float?) {
|
|
|
|
|
|
self.id = num
|
2021-09-20 22:29:10 -07:00
|
|
|
|
self.num = num
|
|
|
|
|
|
self.user = user
|
|
|
|
|
|
self.position = position
|
|
|
|
|
|
self.lastHeard = lastHeard
|
|
|
|
|
|
self.snr = snr
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
extension NodeInfoModel {
|
2021-09-21 20:49:12 -07:00
|
|
|
|
|
2021-09-20 22:29:10 -07:00
|
|
|
|
static var data: [NodeInfoModel] {
|
|
|
|
|
|
[
|
|
|
|
|
|
|
2021-10-20 00:31:22 -07:00
|
|
|
|
// NodeInfoModel(num: 2792101487, user: User(id: "!a66c166f", longName: "RAK Solar 2", shortName: "RS2", hwModel: "RAK4631"), position: Position(latitudeI:nil, longitudeI: nil, altitude: nil, batteryLevel: 68, time: nil), lastHeard: 1631593661, snr: nil),
|
|
|
|
|
|
// NodeInfoModel(num: 1000569662, user: User(id: "!3ba37b3e", longName: "RAK Solar 1", shortName: "RS1", hwModel: "RAK4631"), position: Position(latitudeI:476021390, longitudeI: -1221532609, altitude: 71, batteryLevel: 70, time: 1632202227), lastHeard: 1632202227, snr: 5.25)
|
2021-09-20 22:29:10 -07:00
|
|
|
|
]
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
extension NodeInfoModel {
|
|
|
|
|
|
struct Data {
|
|
|
|
|
|
var num: UInt32 = 0
|
|
|
|
|
|
var user: User
|
|
|
|
|
|
var postion: Position
|
2021-09-21 20:49:12 -07:00
|
|
|
|
var lastHeard: UInt32
|
|
|
|
|
|
var snr: Float?
|
2021-09-20 22:29:10 -07:00
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var data: Data {
|
|
|
|
|
|
return Data(num: num, user: user, postion: position, lastHeard: lastHeard, snr: snr)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
mutating func update(from data: Data) {
|
|
|
|
|
|
num = data.num
|
|
|
|
|
|
user = data.user
|
|
|
|
|
|
position = data.postion
|
|
|
|
|
|
lastHeard = data.lastHeard
|
|
|
|
|
|
snr = data.snr
|
|
|
|
|
|
}
|
2021-09-14 21:38:12 -07:00
|
|
|
|
}
|