diff --git a/Meshtastic/Assets.xcassets/LILYGOTBEAMS3CORE.imageset/Contents.json b/Meshtastic/Assets.xcassets/LILYGOTBEAMS3CORE.imageset/Contents.json
new file mode 100644
index 00000000..1febc627
--- /dev/null
+++ b/Meshtastic/Assets.xcassets/LILYGOTBEAMS3CORE.imageset/Contents.json
@@ -0,0 +1,12 @@
+{
+ "images" : [
+ {
+ "filename" : "tbeam-s3-core.svg",
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Meshtastic/Assets.xcassets/LILYGOTBEAMS3CORE.imageset/tbeam-s3-core.svg b/Meshtastic/Assets.xcassets/LILYGOTBEAMS3CORE.imageset/tbeam-s3-core.svg
new file mode 100644
index 00000000..f42e6d2c
--- /dev/null
+++ b/Meshtastic/Assets.xcassets/LILYGOTBEAMS3CORE.imageset/tbeam-s3-core.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Meshtastic/Assets.xcassets/TECHO.imageset/Contents.json b/Meshtastic/Assets.xcassets/TECHO.imageset/Contents.json
new file mode 100644
index 00000000..e1adcf61
--- /dev/null
+++ b/Meshtastic/Assets.xcassets/TECHO.imageset/Contents.json
@@ -0,0 +1,12 @@
+{
+ "images" : [
+ {
+ "filename" : "t-echo.svg",
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Meshtastic/Assets.xcassets/TECHO.imageset/t-echo.svg b/Meshtastic/Assets.xcassets/TECHO.imageset/t-echo.svg
new file mode 100644
index 00000000..e178a50f
--- /dev/null
+++ b/Meshtastic/Assets.xcassets/TECHO.imageset/t-echo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Meshtastic/Assets.xcassets/TWATCHS3.imageset/Contents.json b/Meshtastic/Assets.xcassets/TWATCHS3.imageset/Contents.json
new file mode 100644
index 00000000..baffc648
--- /dev/null
+++ b/Meshtastic/Assets.xcassets/TWATCHS3.imageset/Contents.json
@@ -0,0 +1,12 @@
+{
+ "images" : [
+ {
+ "filename" : "t-watch-s3.svg",
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Meshtastic/Assets.xcassets/TWATCHS3.imageset/t-watch-s3.svg b/Meshtastic/Assets.xcassets/TWATCHS3.imageset/t-watch-s3.svg
new file mode 100644
index 00000000..19084c19
--- /dev/null
+++ b/Meshtastic/Assets.xcassets/TWATCHS3.imageset/t-watch-s3.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Meshtastic/Assets.xcassets/UNSET.imageset/unknown.svg b/Meshtastic/Assets.xcassets/UNSET.imageset/unknown.svg
index 8e74fbc5..2bac636a 100644
--- a/Meshtastic/Assets.xcassets/UNSET.imageset/unknown.svg
+++ b/Meshtastic/Assets.xcassets/UNSET.imageset/unknown.svg
@@ -1,189 +1 @@
-
-
+
\ No newline at end of file
diff --git a/Meshtastic/Extensions/CoreData/UserEntityExtension.swift b/Meshtastic/Extensions/CoreData/UserEntityExtension.swift
index 662ca5b0..d07d40de 100644
--- a/Meshtastic/Extensions/CoreData/UserEntityExtension.swift
+++ b/Meshtastic/Extensions/CoreData/UserEntityExtension.swift
@@ -37,24 +37,38 @@ extension UserEntity {
var hardwareImage: String? {
guard let hwModel else { return nil }
switch hwModel {
- /// SVG Images for Vendors who are project backers
+ /// SVG Images for Vendors who are signed project backers
/// Heltec
- case "HELTECV3":
- return "HELTECV3"
- case "HELTECWIRELESSPAPER", "HELTECWIRELESSPAPERV10":
- return "HELTECWIRELESSPAPER"
- case "HELTECWIRELESSTRACKER", "HELTECWIRELESSTRACKERV10":
- return "HELTECWIRELESSTRACKER"
- case "HELTECWSLV3":
- return "HELTECWSLV3"
+// case "HELTECV3":
+// return "HELTECV3"
+// case "HELTECWIRELESSPAPER", "HELTECWIRELESSPAPERV10":
+// return "HELTECWIRELESSPAPER"
+// case "HELTECWIRELESSTRACKER", "HELTECWIRELESSTRACKERV10":
+// return "HELTECWIRELESSTRACKER"
+// case "HELTECWSLV3":
+// return "HELTECWSLV3"
/// LilyGO
+ case "TDECK":
+ return "TDECK"
+ case "TECHO":
+ return "TECHO"
+ case "TWATCHS3":
+ return "TWATCHS3"
+ case "LILYGOTBEAMS3CORE":
+ return "LILYGOTBEAMS3CORE"
case "TBEAM", "TBEAM_V0P7":
return "TBEAM"
- case "TLORAT3S3V1":
- return "TLORAT3S3V1"
case "TLORAC6":
return "TLORAC6"
- /// B&O Consulting
+ case "TLORAT3S3EPAPER":
+ return "TLORAT3S3EPAPER"
+ case "TLORAT3S3V1":
+ return "TLORAT3S3V1"
+ case "TLORAV2116":
+ return "TLORAV2116"
+ case "TLORAV2118":
+ return "TLORAV2118"
+ /// B&Q Consulting
case "NANOG1", "NANOG1EXPLORER":
return "NANOG1"
case "NANOG2ULTRA":
@@ -63,9 +77,6 @@ extension UserEntity {
return "STATIONG2"
case "SOLAR_NODE":
return "SOLAR_NODE"
-
- case "UNPHONE":
- return "UNPHONE"
default:
return "UNSET"
}
diff --git a/Meshtastic/Resources/DeviceHardware.json b/Meshtastic/Resources/DeviceHardware.json
index fd874357..a4a6949c 100644
--- a/Meshtastic/Resources/DeviceHardware.json
+++ b/Meshtastic/Resources/DeviceHardware.json
@@ -141,7 +141,7 @@
},
{
"hwModel": 12,
- "hwModelSlug": "TBEAM_S3_CORE",
+ "hwModelSlug": "LILYGO_TBEAM_S3_CORE",
"platformioTarget": "tbeam-s3-core",
"architecture": "esp32-s3",
"activelySupported": true,
diff --git a/Meshtastic/Views/Nodes/Helpers/NodeDetail.swift b/Meshtastic/Views/Nodes/Helpers/NodeDetail.swift
index 0a648571..d9fc50a4 100644
--- a/Meshtastic/Views/Nodes/Helpers/NodeDetail.swift
+++ b/Meshtastic/Views/Nodes/Helpers/NodeDetail.swift
@@ -25,7 +25,6 @@ struct NodeDetail: View {
@State private var showingShutdownConfirm: Bool = false
@State private var showingRebootConfirm: Bool = false
@State private var dateFormatRelative: Bool = true
- @State private var currentDevice: DeviceHardware?
// The node the device is currently connected to
var connectedNode: NodeInfoEntity?
@@ -45,7 +44,7 @@ struct NodeDetail: View {
)
Section("Hardware") {
- NodeInfoItem(node: node, supported: currentDevice?.activelySupported ?? false)
+ NodeInfoItem(node: node)
}
Section("Node") {
HStack(alignment: .center) {
@@ -438,17 +437,6 @@ struct NodeDetail: View {
}
}
.listStyle(.insetGrouped)
- .onFirstAppear {
- Api().loadDeviceHardwareData { (hw) in
- for device in hw {
- let currentHardware = node.user?.hwModel ?? "UNSET"
- let deviceString = device.hwModelSlug.replacingOccurrences(of: "_", with: "")
- if deviceString == currentHardware {
- currentDevice = device
- }
- }
- }
- }
}
}
}
diff --git a/Meshtastic/Views/Nodes/Helpers/NodeInfoItem.swift b/Meshtastic/Views/Nodes/Helpers/NodeInfoItem.swift
index 649fe6d1..cb411709 100644
--- a/Meshtastic/Views/Nodes/Helpers/NodeInfoItem.swift
+++ b/Meshtastic/Views/Nodes/Helpers/NodeInfoItem.swift
@@ -12,28 +12,31 @@ import MapKit
struct NodeInfoItem: View {
@ObservedObject var node: NodeInfoEntity
- var supported: Bool
+ @State private var currentDevice: DeviceHardware?
var body: some View {
if let user = node.user {
ViewThatFits(in: .horizontal) {
HStack {
Spacer()
- VStack(alignment: .center) {
- Spacer()
- Image(systemName: supported ? "checkmark.seal.fill" : "x.circle")
- .resizable()
- .aspectRatio(contentMode: .fill) // << here !!
- .frame(width: 75, height: 75)
- .foregroundStyle(supported ? .green : .red)
- Text( supported ? "Supported" : "Unsupported")
+ if user.hwModel != "UNSET" {
+ VStack(alignment: .center) {
+ Spacer()
+ Image(systemName: currentDevice?.activelySupported ?? false ? "checkmark.seal.fill" : "x.circle")
+ .resizable()
+ .aspectRatio(contentMode: .fill)
+ .frame(width: 75, height: 75)
+ .foregroundStyle(currentDevice?.activelySupported ?? false ? .green : .red)
+ Text( currentDevice?.activelySupported ?? false ? "Supported" : "Unsupported")
.foregroundStyle(.gray)
.font(.callout)
+ }
+ Spacer()
}
- Spacer()
VStack(alignment: .center) {
HStack {
- if user.hwModel != "UNSET" {
+ if user.hardwareImage != "UNSET" {
+ Spacer()
Image(user.hardwareImage ?? "UNSET")
.resizable()
.aspectRatio(contentMode: .fit)
@@ -50,6 +53,18 @@ struct NodeInfoItem: View {
}
Spacer()
}
+ .onAppear {
+ Api().loadDeviceHardwareData { (hw) in
+ for device in hw {
+ let currentHardware = node.user?.hwModel ?? "UNSET"
+ let deviceString = device.hwModelSlug.replacingOccurrences(of: "_", with: "")
+ print(deviceString + " == " + currentHardware)
+ if deviceString == currentHardware {
+ currentDevice = device
+ }
+ }
+ }
+ }
}
.listRowSeparator(.hidden)
HStack {