@@ -74,10 +74,6 @@ struct MeterView: View {
|
||
| 74 | 74 |
.padding(.leading, 6) |
| 75 | 75 |
.padding(.vertical) |
| 76 | 76 |
} |
| 77 |
- NavigationLink(destination: MeterInfoView().environmentObject(meter)) {
|
|
| 78 |
- Image(systemName: "info.circle.fill") |
|
| 79 |
- .padding(.vertical) |
|
| 80 |
- } |
|
| 81 | 77 |
NavigationLink(destination: MeterSettingsView().environmentObject(meter)) {
|
| 82 | 78 |
Image(systemName: "gearshape.fill") |
| 83 | 79 |
.padding(.vertical) |
@@ -272,17 +268,55 @@ struct MeterView: View {
|
||
| 272 | 268 |
} |
| 273 | 269 |
|
| 274 | 270 |
private var homeInfoPreview: some View {
|
| 275 |
- VStack(spacing: 12) {
|
|
| 271 |
+ VStack(spacing: 14) {
|
|
| 276 | 272 |
MeterInfoCard(title: "Overview", tint: meter.color) {
|
| 277 | 273 |
MeterInfoRow(label: "Name", value: meter.name) |
| 278 |
- MeterInfoRow(label: "Model", value: meter.deviceModelName) |
|
| 279 |
- if !meter.firmwareVersion.isEmpty {
|
|
| 280 |
- MeterInfoRow(label: "Firmware", value: meter.firmwareVersion) |
|
| 281 |
- } |
|
| 274 |
+ MeterInfoRow(label: "Device Model", value: meter.deviceModelName) |
|
| 275 |
+ MeterInfoRow(label: "Advertised Model", value: meter.modelString) |
|
| 276 |
+ MeterInfoRow(label: "Working Voltage", value: meter.documentedWorkingVoltage) |
|
| 277 |
+ MeterInfoRow(label: "Temperature Unit", value: meter.temperatureUnitDescription) |
|
| 282 | 278 |
} |
| 283 | 279 |
|
| 284 | 280 |
MeterInfoCard(title: "Identifiers", tint: .blue) {
|
| 285 | 281 |
MeterInfoRow(label: "MAC", value: meter.btSerial.macAddress.description) |
| 282 |
+ if meter.modelNumber != 0 {
|
|
| 283 |
+ MeterInfoRow(label: "Model Identifier", value: "\(meter.modelNumber)") |
|
| 284 |
+ } |
|
| 285 |
+ } |
|
| 286 |
+ |
|
| 287 |
+ MeterInfoCard(title: "Screen Reporting", tint: .orange) {
|
|
| 288 |
+ if meter.reportsCurrentScreenIndex {
|
|
| 289 |
+ MeterInfoRow(label: "Current Screen", value: meter.currentScreenDescription) |
|
| 290 |
+ Text("The active screen index is reported by the meter and mapped by the app to a known label.")
|
|
| 291 |
+ .font(.footnote) |
|
| 292 |
+ .foregroundColor(.secondary) |
|
| 293 |
+ } else {
|
|
| 294 |
+ MeterInfoRow(label: "Current Screen", value: "Not Reported") |
|
| 295 |
+ Text("The current screen is not reported by the device payload, or we have not yet identified where and how the protocol announces it.")
|
|
| 296 |
+ .font(.footnote) |
|
| 297 |
+ .foregroundColor(.secondary) |
|
| 298 |
+ } |
|
| 299 |
+ } |
|
| 300 |
+ |
|
| 301 |
+ MeterInfoCard(title: "Live Device Details", tint: .indigo) {
|
|
| 302 |
+ if meter.operationalState == .dataIsAvailable {
|
|
| 303 |
+ if !meter.firmwareVersion.isEmpty {
|
|
| 304 |
+ MeterInfoRow(label: "Firmware", value: meter.firmwareVersion) |
|
| 305 |
+ } |
|
| 306 |
+ if meter.supportsChargerDetection {
|
|
| 307 |
+ MeterInfoRow(label: "Detected Charger", value: meter.chargerTypeDescription) |
|
| 308 |
+ } |
|
| 309 |
+ if meter.serialNumber != 0 {
|
|
| 310 |
+ MeterInfoRow(label: "Serial", value: "\(meter.serialNumber)") |
|
| 311 |
+ } |
|
| 312 |
+ if meter.bootCount != 0 {
|
|
| 313 |
+ MeterInfoRow(label: "Boot Count", value: "\(meter.bootCount)") |
|
| 314 |
+ } |
|
| 315 |
+ } else {
|
|
| 316 |
+ Text("Connect to the meter to load firmware, serial, and boot details.")
|
|
| 317 |
+ .font(.footnote) |
|
| 318 |
+ .foregroundColor(.secondary) |
|
| 319 |
+ } |
|
| 286 | 320 |
} |
| 287 | 321 |
} |
| 288 | 322 |
.padding(.horizontal, pageHorizontalPadding) |
@@ -591,78 +625,6 @@ struct MeterView: View {
|
||
| 591 | 625 |
} |
| 592 | 626 |
} |
| 593 | 627 |
|
| 594 |
-private struct MeterInfoView: View {
|
|
| 595 |
- @EnvironmentObject private var meter: Meter |
|
| 596 |
- |
|
| 597 |
- var body: some View {
|
|
| 598 |
- ScrollView {
|
|
| 599 |
- VStack(spacing: 14) {
|
|
| 600 |
- MeterInfoCard(title: "Overview", tint: meter.color) {
|
|
| 601 |
- MeterInfoRow(label: "Name", value: meter.name) |
|
| 602 |
- MeterInfoRow(label: "Device Model", value: meter.deviceModelName) |
|
| 603 |
- MeterInfoRow(label: "Advertised Model", value: meter.modelString) |
|
| 604 |
- MeterInfoRow(label: "Working Voltage", value: meter.documentedWorkingVoltage) |
|
| 605 |
- MeterInfoRow(label: "Temperature Unit", value: meter.temperatureUnitDescription) |
|
| 606 |
- } |
|
| 607 |
- |
|
| 608 |
- MeterInfoCard(title: "Identifiers", tint: .blue) {
|
|
| 609 |
- MeterInfoRow(label: "MAC", value: meter.btSerial.macAddress.description) |
|
| 610 |
- if meter.modelNumber != 0 {
|
|
| 611 |
- MeterInfoRow(label: "Model Identifier", value: "\(meter.modelNumber)") |
|
| 612 |
- } |
|
| 613 |
- } |
|
| 614 |
- |
|
| 615 |
- MeterInfoCard(title: "Screen Reporting", tint: .orange) {
|
|
| 616 |
- if meter.reportsCurrentScreenIndex {
|
|
| 617 |
- MeterInfoRow(label: "Current Screen", value: meter.currentScreenDescription) |
|
| 618 |
- Text("The active screen index is reported by the meter and mapped by the app to a known label.")
|
|
| 619 |
- .font(.footnote) |
|
| 620 |
- .foregroundColor(.secondary) |
|
| 621 |
- } else {
|
|
| 622 |
- MeterInfoRow(label: "Current Screen", value: "Not Reported") |
|
| 623 |
- Text("The current screen is not reported by the device payload, or we have not yet identified where and how the protocol announces it.")
|
|
| 624 |
- .font(.footnote) |
|
| 625 |
- .foregroundColor(.secondary) |
|
| 626 |
- } |
|
| 627 |
- } |
|
| 628 |
- |
|
| 629 |
- if meter.operationalState == .dataIsAvailable {
|
|
| 630 |
- MeterInfoCard(title: "Live Device Details", tint: .indigo) {
|
|
| 631 |
- if !meter.firmwareVersion.isEmpty {
|
|
| 632 |
- MeterInfoRow(label: "Firmware", value: meter.firmwareVersion) |
|
| 633 |
- } |
|
| 634 |
- if meter.supportsChargerDetection {
|
|
| 635 |
- MeterInfoRow(label: "Detected Charger", value: meter.chargerTypeDescription) |
|
| 636 |
- } |
|
| 637 |
- if meter.serialNumber != 0 {
|
|
| 638 |
- MeterInfoRow(label: "Serial", value: "\(meter.serialNumber)") |
|
| 639 |
- } |
|
| 640 |
- if meter.bootCount != 0 {
|
|
| 641 |
- MeterInfoRow(label: "Boot Count", value: "\(meter.bootCount)") |
|
| 642 |
- } |
|
| 643 |
- } |
|
| 644 |
- } else {
|
|
| 645 |
- MeterInfoCard(title: "Live Device Details", tint: .secondary) {
|
|
| 646 |
- Text("Connect to the meter to load firmware, serial, and boot details.")
|
|
| 647 |
- .font(.footnote) |
|
| 648 |
- .foregroundColor(.secondary) |
|
| 649 |
- } |
|
| 650 |
- } |
|
| 651 |
- } |
|
| 652 |
- .padding() |
|
| 653 |
- } |
|
| 654 |
- .background( |
|
| 655 |
- LinearGradient( |
|
| 656 |
- colors: [meter.color.opacity(0.14), Color.clear], |
|
| 657 |
- startPoint: .topLeading, |
|
| 658 |
- endPoint: .bottomTrailing |
|
| 659 |
- ) |
|
| 660 |
- .ignoresSafeArea() |
|
| 661 |
- ) |
|
| 662 |
- .navigationBarTitle("Device Info")
|
|
| 663 |
- .navigationBarItems(trailing: RSSIView(RSSI: meter.btSerial.RSSI).frame(width: 18, height: 18)) |
|
| 664 |
- } |
|
| 665 |
-} |
|
| 666 | 628 |
|
| 667 | 629 |
private struct MeterInfoCard<Content: View>: View {
|
| 668 | 630 |
let title: String |