Meshtastic-Apple/Meshtastic/Views/Helpers/LoRaSignalStrength.swift
2023-05-21 08:03:23 -07:00

96 lines
3 KiB
Swift

//
// LoRaSignalStrength.swift
// Meshtastic
//
// Created by Garth Vander Houwen on 5/15/23.
//
import Foundation
import SwiftUI
struct LoRaSignalStrengthMeter: View {
var snr: Float
var rssi: Int32
var preset: ModemPresets
var compact: Bool
var body: some View {
let signalStrength = getLoRaSignalStrength(snr: snr, rssi: rssi, preset: preset)
let gradient = Gradient(colors: [.red, .orange, .yellow, .green])
if !compact {
VStack {
LoRaSignalStrengthIndicator(signalStrength: signalStrength)
Text("Signal \(signalStrength.description)").font(.footnote)
Text("SNR \(String(format: "%.2f", snr))dB")
.foregroundColor(getSnrColor(snr: snr, preset: ModemPresets.longFast))
.font(.caption2)
Text("RSSI \(rssi)dB")
.foregroundColor(getRssiColor(rssi: rssi))
.font(.caption2)
}
} else {
Gauge(value: Double(signalStrength.rawValue), in: 0...3) {
} currentValueLabel: {
Image(systemName: "dot.radiowaves.left.and.right")
.font(.caption)
Text("Signal \(signalStrength.description)")
.font(.caption)
}
.gaugeStyle(.accessoryLinear)
.tint(gradient)
.font(.caption)
}
}
}
struct LoRaSignalStrengthMeter_Previews: PreviewProvider {
static var previews: some View {
ScrollView {
VStack {
HStack {
// Good
LoRaSignalStrengthMeter(snr: -10, rssi: -100, preset: ModemPresets.longFast, compact: false)
LoRaSignalStrengthMeter(snr: -17, rssi: -100, preset: ModemPresets.longFast, compact: false)
}
HStack {
// Fair
LoRaSignalStrengthMeter(snr: -9.5, rssi: -119, preset: ModemPresets.longFast, compact: false)
LoRaSignalStrengthMeter(snr: -17.5, rssi: -100, preset: ModemPresets.longFast, compact: false)
}
HStack {
// Bad
LoRaSignalStrengthMeter(snr: -11.25, rssi: -120, preset: ModemPresets.longFast, compact: false)
LoRaSignalStrengthMeter(snr: -12.75, rssi: -139, preset: ModemPresets.longFast, compact: false)
}
HStack {
LoRaSignalStrengthMeter(snr: -20.25, rssi: -128, preset: ModemPresets.longFast, compact: false)
LoRaSignalStrengthMeter(snr: -30, rssi: -120, preset: ModemPresets.longFast, compact: false)
}
HStack {
LoRaSignalStrengthMeter(snr: -15, rssi: -124, preset: ModemPresets.longFast, compact: false)
LoRaSignalStrengthMeter(snr: -17.25, rssi: -126, preset: ModemPresets.longFast, compact: false)
LoRaSignalStrengthMeter(snr: -19.5, rssi: -128, preset: ModemPresets.longFast, compact: false)
}
HStack {
// None
LoRaSignalStrengthMeter(snr: -26.0, rssi: -129, preset: ModemPresets.longFast, compact: false)
}
}
}
VStack {
// Good
LoRaSignalStrengthMeter(snr: -10, rssi: -100, preset: ModemPresets.longFast, compact: true)
// Fair
LoRaSignalStrengthMeter(snr: -9.5, rssi: -119, preset: ModemPresets.longFast, compact: true)
// Bad
LoRaSignalStrengthMeter(snr: -12.75, rssi: -139, preset: ModemPresets.longFast, compact: true)
// None
LoRaSignalStrengthMeter(snr: -26.0, rssi: -128, preset: ModemPresets.longFast, compact: true)
}
}
}