Meshtastic-Apple/MeshtasticClient/Model/NodeInfoModel.swift

120 lines
3.4 KiB
Swift
Raw Normal View History

/*
See LICENSE folder for this samples licensing information.
*/
import SwiftUI
import CoreLocation
struct NodeInfoModel: Identifiable, Codable {
2021-11-29 15:59:06 -08:00
var id: UInt32
var num: UInt32
var myInfo: MyInfoModel?
var user: User
struct User: Identifiable, Codable {
var id: String
var longName: String
var shortName: String
var hwModel: String
2021-11-29 15:59:06 -08:00
init(id: String, longName: String, shortName: String, hwModel: String) {
self.id = id
self.longName = longName
self.shortName = shortName
self.hwModel = hwModel
}
}
var position: Position
struct Position: Codable {
var latitudeI: Int32?
var latitude: Double? {
if let unwrappedLat = latitudeI {
let d = Double(unwrappedLat)
if d == 0 {
return nil
}
return d / 1e7
2021-11-29 15:59:06 -08:00
} else {
return nil
}
}
var longitudeI: Int32?
var longitude: Double? {
if let unwrappedLong = longitudeI {
let d = Double(unwrappedLong)
if d == 0 {
return nil
}
return d / 1e7
2021-11-29 15:59:06 -08:00
} else {
return nil
}
}
var coordinate: CLLocationCoordinate2D? {
2021-09-28 00:00:09 -07:00
if latitude != nil && longitude != nil {
let coord = CLLocationCoordinate2D(latitude: latitude!, longitude: longitude!)
2021-11-29 15:59:06 -08:00
return coord
2021-11-29 15:59:06 -08:00
} else {
return nil
}
}
var altitude: Int32?
var batteryLevel: Int32?
2021-09-21 20:49:12 -07:00
var time: UInt32?
2021-11-29 15:59:06 -08:00
2021-09-21 20:49:12 -07:00
init(latitudeI: Int32?, longitudeI: Int32?, altitude: Int32?, batteryLevel: Int32?, time: UInt32? ) {
self.latitudeI = latitudeI
self.longitudeI = longitudeI
self.altitude = altitude
self.batteryLevel = batteryLevel
self.time = time
}
}
2021-11-29 15:59:06 -08:00
2021-09-21 20:49:12 -07:00
var lastHeard: UInt32
var snr: Float?
init(num: UInt32, user: User, position: Position, lastHeard: UInt32, snr: Float?) {
self.id = num
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
static var data: [NodeInfoModel] {
[
// 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)
]
}
}
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-11-29 15:59:06 -08: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
}
}