From 3a9c14e9464fdbbe26cf5de7bfcd9ce1bc0a5fa7 Mon Sep 17 00:00:00 2001 From: Hacuchino-hash <246103064+Hacuchino-hash@users.noreply.github.com> Date: Thu, 6 Aug 2026 08:32:52 -0500 Subject: [PATCH] Show connected node hardware and firmware in device info --- lib/connector/meshcore_connector.dart | 18 ++++++++++++++++++ lib/l10n/app_en.arb | 2 ++ lib/l10n/app_localizations.dart | 12 ++++++++++++ lib/l10n/app_localizations_bg.dart | 6 ++++++ lib/l10n/app_localizations_de.dart | 6 ++++++ lib/l10n/app_localizations_en.dart | 6 ++++++ lib/l10n/app_localizations_es.dart | 6 ++++++ lib/l10n/app_localizations_fr.dart | 6 ++++++ lib/l10n/app_localizations_hu.dart | 6 ++++++ lib/l10n/app_localizations_it.dart | 6 ++++++ lib/l10n/app_localizations_ja.dart | 6 ++++++ lib/l10n/app_localizations_ko.dart | 6 ++++++ lib/l10n/app_localizations_nl.dart | 6 ++++++ lib/l10n/app_localizations_pl.dart | 6 ++++++ lib/l10n/app_localizations_pt.dart | 6 ++++++ lib/l10n/app_localizations_ru.dart | 6 ++++++ lib/l10n/app_localizations_sk.dart | 6 ++++++ lib/l10n/app_localizations_sl.dart | 6 ++++++ lib/l10n/app_localizations_sv.dart | 6 ++++++ lib/l10n/app_localizations_uk.dart | 6 ++++++ lib/l10n/app_localizations_zh.dart | 6 ++++++ lib/screens/settings_screen.dart | 12 ++++++++++++ 22 files changed, 152 insertions(+) diff --git a/lib/connector/meshcore_connector.dart b/lib/connector/meshcore_connector.dart index 4e3ac7d8..0ad5302e 100644 --- a/lib/connector/meshcore_connector.dart +++ b/lib/connector/meshcore_connector.dart @@ -271,6 +271,8 @@ class MeshCoreConnector extends ChangeNotifier { bool _batteryRequested = false; bool _awaitingSelfInfo = false; bool _hasReceivedDeviceInfo = false; + String? _manufacturerName; + String? _firmwareVersionString; // Initial sync is serialized for predictable progress. Firmware exposes one // FIFO queued-message stream, so direct/room frames are buffered until after // contacts are known. @@ -459,6 +461,8 @@ class MeshCoreConnector extends ChangeNotifier { Uint8List? get selfPublicKey => _selfPublicKey; String get selfPublicKeyHex => pubKeyToHex(_selfPublicKey ?? Uint8List(0)); String? get selfName => _selfName; + String? get manufacturerName => _manufacturerName; + String? get firmwareVersionString => _firmwareVersionString; double? get selfLatitude => _selfLatitude; double? get selfLongitude => _selfLongitude; List get directRepeaters => _directRepeaters; @@ -4460,6 +4464,20 @@ class MeshCoreConnector extends ChangeNotifier { } _firmwareVerCode = frame[1]; + // Manufacturer/model name (bytes 20..59) and firmware version (60..79) + String? readCString(int start, int maxLen) { + if (frame.length < start + maxLen) return null; + final bytes = frame.sublist(start, start + maxLen); + final end = bytes.indexOf(0); + final s = String.fromCharCodes( + end >= 0 ? bytes.sublist(0, end) : bytes, + ).trim(); + return s.isEmpty ? null : s; + } + + _manufacturerName = readCString(20, 40); + _firmwareVersionString = readCString(60, 20); + // Parse client_repeat from firmware v9+ (byte 80) if (frame.length >= 81) { _clientRepeat = frame[80] != 0; diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index 9c9c8286..2e620aae 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -248,6 +248,8 @@ "settings_infoPublicKey": "Public Key", "settings_infoContactsCount": "Contacts Count", "settings_infoChannelCount": "Channel Count", + "settings_infoHardware": "Hardware", + "settings_infoFirmware": "Firmware", "settings_presets": "Presets", "settings_frequency": "Frequency (MHz)", "settings_frequencyHelper": "300.0 - 2500.0", diff --git a/lib/l10n/app_localizations.dart b/lib/l10n/app_localizations.dart index 2ad4638e..7240bb1e 100644 --- a/lib/l10n/app_localizations.dart +++ b/lib/l10n/app_localizations.dart @@ -1240,6 +1240,18 @@ abstract class AppLocalizations { /// **'Channel Count'** String get settings_infoChannelCount; + /// No description provided for @settings_infoHardware. + /// + /// In en, this message translates to: + /// **'Hardware'** + String get settings_infoHardware; + + /// No description provided for @settings_infoFirmware. + /// + /// In en, this message translates to: + /// **'Firmware'** + String get settings_infoFirmware; + /// No description provided for @settings_presets. /// /// In en, this message translates to: diff --git a/lib/l10n/app_localizations_bg.dart b/lib/l10n/app_localizations_bg.dart index 41c11438..e22205a1 100644 --- a/lib/l10n/app_localizations_bg.dart +++ b/lib/l10n/app_localizations_bg.dart @@ -626,6 +626,12 @@ class AppLocalizationsBg extends AppLocalizations { @override String get settings_infoChannelCount => 'Брой канали'; + @override + String get settings_infoHardware => 'Hardware'; + + @override + String get settings_infoFirmware => 'Firmware'; + @override String get settings_presets => 'Предварителни настройки'; diff --git a/lib/l10n/app_localizations_de.dart b/lib/l10n/app_localizations_de.dart index 5da89506..5e106cd9 100644 --- a/lib/l10n/app_localizations_de.dart +++ b/lib/l10n/app_localizations_de.dart @@ -623,6 +623,12 @@ class AppLocalizationsDe extends AppLocalizations { @override String get settings_infoChannelCount => 'Kanäle'; + @override + String get settings_infoHardware => 'Hardware'; + + @override + String get settings_infoFirmware => 'Firmware'; + @override String get settings_presets => 'Voreinstellungen'; diff --git a/lib/l10n/app_localizations_en.dart b/lib/l10n/app_localizations_en.dart index ccdd9ed0..1acb83b9 100644 --- a/lib/l10n/app_localizations_en.dart +++ b/lib/l10n/app_localizations_en.dart @@ -611,6 +611,12 @@ class AppLocalizationsEn extends AppLocalizations { @override String get settings_infoChannelCount => 'Channel Count'; + @override + String get settings_infoHardware => 'Hardware'; + + @override + String get settings_infoFirmware => 'Firmware'; + @override String get settings_presets => 'Presets'; diff --git a/lib/l10n/app_localizations_es.dart b/lib/l10n/app_localizations_es.dart index da679126..328c00cf 100644 --- a/lib/l10n/app_localizations_es.dart +++ b/lib/l10n/app_localizations_es.dart @@ -622,6 +622,12 @@ class AppLocalizationsEs extends AppLocalizations { @override String get settings_infoChannelCount => 'Número de canales'; + @override + String get settings_infoHardware => 'Hardware'; + + @override + String get settings_infoFirmware => 'Firmware'; + @override String get settings_presets => 'Preajustes'; diff --git a/lib/l10n/app_localizations_fr.dart b/lib/l10n/app_localizations_fr.dart index 29022552..53e87874 100644 --- a/lib/l10n/app_localizations_fr.dart +++ b/lib/l10n/app_localizations_fr.dart @@ -626,6 +626,12 @@ class AppLocalizationsFr extends AppLocalizations { @override String get settings_infoChannelCount => 'Nombre de canaux'; + @override + String get settings_infoHardware => 'Hardware'; + + @override + String get settings_infoFirmware => 'Firmware'; + @override String get settings_presets => 'Préréglages'; diff --git a/lib/l10n/app_localizations_hu.dart b/lib/l10n/app_localizations_hu.dart index 7fa5c541..be93b14a 100644 --- a/lib/l10n/app_localizations_hu.dart +++ b/lib/l10n/app_localizations_hu.dart @@ -619,6 +619,12 @@ class AppLocalizationsHu extends AppLocalizations { @override String get settings_infoChannelCount => 'Csatornaszám'; + @override + String get settings_infoHardware => 'Hardware'; + + @override + String get settings_infoFirmware => 'Firmware'; + @override String get settings_presets => 'Előbeállítások'; diff --git a/lib/l10n/app_localizations_it.dart b/lib/l10n/app_localizations_it.dart index 0e01ff91..486e13b2 100644 --- a/lib/l10n/app_localizations_it.dart +++ b/lib/l10n/app_localizations_it.dart @@ -624,6 +624,12 @@ class AppLocalizationsIt extends AppLocalizations { @override String get settings_infoChannelCount => 'Numero di canali'; + @override + String get settings_infoHardware => 'Hardware'; + + @override + String get settings_infoFirmware => 'Firmware'; + @override String get settings_presets => 'Preset'; diff --git a/lib/l10n/app_localizations_ja.dart b/lib/l10n/app_localizations_ja.dart index e16d6419..82466445 100644 --- a/lib/l10n/app_localizations_ja.dart +++ b/lib/l10n/app_localizations_ja.dart @@ -594,6 +594,12 @@ class AppLocalizationsJa extends AppLocalizations { @override String get settings_infoChannelCount => 'チャンネル数'; + @override + String get settings_infoHardware => 'Hardware'; + + @override + String get settings_infoFirmware => 'Firmware'; + @override String get settings_presets => 'プリセット'; diff --git a/lib/l10n/app_localizations_ko.dart b/lib/l10n/app_localizations_ko.dart index 209867fe..bba7db51 100644 --- a/lib/l10n/app_localizations_ko.dart +++ b/lib/l10n/app_localizations_ko.dart @@ -595,6 +595,12 @@ class AppLocalizationsKo extends AppLocalizations { @override String get settings_infoChannelCount => '채널 수'; + @override + String get settings_infoHardware => 'Hardware'; + + @override + String get settings_infoFirmware => 'Firmware'; + @override String get settings_presets => '프리셋'; diff --git a/lib/l10n/app_localizations_nl.dart b/lib/l10n/app_localizations_nl.dart index bf33733a..1e67053e 100644 --- a/lib/l10n/app_localizations_nl.dart +++ b/lib/l10n/app_localizations_nl.dart @@ -618,6 +618,12 @@ class AppLocalizationsNl extends AppLocalizations { @override String get settings_infoChannelCount => 'Aantal Kanalen'; + @override + String get settings_infoHardware => 'Hardware'; + + @override + String get settings_infoFirmware => 'Firmware'; + @override String get settings_presets => 'Voorgeprogrammeerde instellingen'; diff --git a/lib/l10n/app_localizations_pl.dart b/lib/l10n/app_localizations_pl.dart index f0f57506..7ae9c0bf 100644 --- a/lib/l10n/app_localizations_pl.dart +++ b/lib/l10n/app_localizations_pl.dart @@ -626,6 +626,12 @@ class AppLocalizationsPl extends AppLocalizations { @override String get settings_infoChannelCount => 'Liczba kanałów'; + @override + String get settings_infoHardware => 'Hardware'; + + @override + String get settings_infoFirmware => 'Firmware'; + @override String get settings_presets => 'Presety'; diff --git a/lib/l10n/app_localizations_pt.dart b/lib/l10n/app_localizations_pt.dart index 55c2fa48..c43ce186 100644 --- a/lib/l10n/app_localizations_pt.dart +++ b/lib/l10n/app_localizations_pt.dart @@ -624,6 +624,12 @@ class AppLocalizationsPt extends AppLocalizations { @override String get settings_infoChannelCount => 'Número do Canal'; + @override + String get settings_infoHardware => 'Hardware'; + + @override + String get settings_infoFirmware => 'Firmware'; + @override String get settings_presets => 'Configurações pré-definidas'; diff --git a/lib/l10n/app_localizations_ru.dart b/lib/l10n/app_localizations_ru.dart index d32b69a4..61c1123f 100644 --- a/lib/l10n/app_localizations_ru.dart +++ b/lib/l10n/app_localizations_ru.dart @@ -623,6 +623,12 @@ class AppLocalizationsRu extends AppLocalizations { @override String get settings_infoChannelCount => 'Количество каналов'; + @override + String get settings_infoHardware => 'Hardware'; + + @override + String get settings_infoFirmware => 'Firmware'; + @override String get settings_presets => 'Пресеты'; diff --git a/lib/l10n/app_localizations_sk.dart b/lib/l10n/app_localizations_sk.dart index 5ee8ec33..5cf42db7 100644 --- a/lib/l10n/app_localizations_sk.dart +++ b/lib/l10n/app_localizations_sk.dart @@ -618,6 +618,12 @@ class AppLocalizationsSk extends AppLocalizations { @override String get settings_infoChannelCount => 'Počet kanálov'; + @override + String get settings_infoHardware => 'Hardware'; + + @override + String get settings_infoFirmware => 'Firmware'; + @override String get settings_presets => 'Prednastavenia'; diff --git a/lib/l10n/app_localizations_sl.dart b/lib/l10n/app_localizations_sl.dart index 07d1bd4f..fd2b401b 100644 --- a/lib/l10n/app_localizations_sl.dart +++ b/lib/l10n/app_localizations_sl.dart @@ -616,6 +616,12 @@ class AppLocalizationsSl extends AppLocalizations { @override String get settings_infoChannelCount => 'Število kanalov'; + @override + String get settings_infoHardware => 'Hardware'; + + @override + String get settings_infoFirmware => 'Firmware'; + @override String get settings_presets => 'Prednastavitve'; diff --git a/lib/l10n/app_localizations_sv.dart b/lib/l10n/app_localizations_sv.dart index 8bdd20f9..4d3d33ec 100644 --- a/lib/l10n/app_localizations_sv.dart +++ b/lib/l10n/app_localizations_sv.dart @@ -613,6 +613,12 @@ class AppLocalizationsSv extends AppLocalizations { @override String get settings_infoChannelCount => 'Kanalantal'; + @override + String get settings_infoHardware => 'Hardware'; + + @override + String get settings_infoFirmware => 'Firmware'; + @override String get settings_presets => 'Fördefinierade inställningar'; diff --git a/lib/l10n/app_localizations_uk.dart b/lib/l10n/app_localizations_uk.dart index 2e87ba8d..a7ffc1ea 100644 --- a/lib/l10n/app_localizations_uk.dart +++ b/lib/l10n/app_localizations_uk.dart @@ -621,6 +621,12 @@ class AppLocalizationsUk extends AppLocalizations { @override String get settings_infoChannelCount => 'Кількість каналів'; + @override + String get settings_infoHardware => 'Hardware'; + + @override + String get settings_infoFirmware => 'Firmware'; + @override String get settings_presets => 'Попередні налаштування'; diff --git a/lib/l10n/app_localizations_zh.dart b/lib/l10n/app_localizations_zh.dart index fa2813c3..8daa1a73 100644 --- a/lib/l10n/app_localizations_zh.dart +++ b/lib/l10n/app_localizations_zh.dart @@ -587,6 +587,12 @@ class AppLocalizationsZh extends AppLocalizations { @override String get settings_infoChannelCount => '频道数量'; + @override + String get settings_infoHardware => 'Hardware'; + + @override + String get settings_infoFirmware => 'Firmware'; + @override String get settings_presets => '预设'; diff --git a/lib/screens/settings_screen.dart b/lib/screens/settings_screen.dart index 17cca639..fec9ddf9 100644 --- a/lib/screens/settings_screen.dart +++ b/lib/screens/settings_screen.dart @@ -280,6 +280,18 @@ class _SettingsScreenState extends State { value: connector.deviceIdLabel, ), _buildBatteryInfoRow(context, connector), + if (connector.manufacturerName != null) + _infoRow( + context, + label: l10n.settings_infoHardware, + value: connector.manufacturerName!, + ), + if (connector.firmwareVersionString != null) + _infoRow( + context, + label: l10n.settings_infoFirmware, + value: connector.firmwareVersionString!, + ), if (connector.selfName != null) _infoRow( context,