basic repeater chan util

just repeater stats for now

total channel utilization over uptime i.e. util =
(rxsecs+txsecs) / upsecs
This commit is contained in:
Enot (ded) Skelly
2026-05-05 12:41:06 -07:00
parent f1d93bd5e8
commit c09af98bef
24 changed files with 111 additions and 17 deletions
+1
View File
@@ -1168,6 +1168,7 @@
"repeater_noiseFloor": "Noise Floor",
"repeater_txAirtime": "TX Airtime",
"repeater_rxAirtime": "RX Airtime",
"repeater_chanUtil": "Channel Utilization",
"repeater_packetStatistics": "Packet Statistics",
"repeater_sent": "Sent",
"repeater_received": "Received",
+6
View File
@@ -3909,6 +3909,12 @@ abstract class AppLocalizations {
/// **'RX Airtime'**
String get repeater_rxAirtime;
/// No description provided for @repeater_chanUtil.
///
/// In en, this message translates to:
/// **'Channel Utilization'**
String get repeater_chanUtil;
/// No description provided for @repeater_packetStatistics.
///
/// In en, this message translates to:
+3
View File
@@ -2180,6 +2180,9 @@ class AppLocalizationsBg extends AppLocalizations {
@override
String get repeater_rxAirtime => 'RX Airtime';
@override
String get repeater_chanUtil => 'Channel Utilization';
@override
String get repeater_packetStatistics => 'Статистика на пакетите';
+3
View File
@@ -2176,6 +2176,9 @@ class AppLocalizationsDe extends AppLocalizations {
@override
String get repeater_rxAirtime => 'RX Airtime';
@override
String get repeater_chanUtil => 'Channel Utilization';
@override
String get repeater_packetStatistics => 'Paketstatistiken';
+3
View File
@@ -2135,6 +2135,9 @@ class AppLocalizationsEn extends AppLocalizations {
@override
String get repeater_rxAirtime => 'RX Airtime';
@override
String get repeater_chanUtil => 'Channel Utilization';
@override
String get repeater_packetStatistics => 'Packet Statistics';
+3
View File
@@ -2172,6 +2172,9 @@ class AppLocalizationsEs extends AppLocalizations {
@override
String get repeater_rxAirtime => 'RX Airtime';
@override
String get repeater_chanUtil => 'Channel Utilization';
@override
String get repeater_packetStatistics => 'Estadísticas del Paquete';
+3
View File
@@ -2186,6 +2186,9 @@ class AppLocalizationsFr extends AppLocalizations {
@override
String get repeater_rxAirtime => 'RX Airtime';
@override
String get repeater_chanUtil => 'Channel Utilization';
@override
String get repeater_packetStatistics => 'Statistiques des paquets';
+3
View File
@@ -2189,6 +2189,9 @@ class AppLocalizationsHu extends AppLocalizations {
@override
String get repeater_rxAirtime => 'RX Airtime';
@override
String get repeater_chanUtil => 'Channel Utilization';
@override
String get repeater_packetStatistics => 'Csomagok statisztikája';
+3
View File
@@ -2175,6 +2175,9 @@ class AppLocalizationsIt extends AppLocalizations {
@override
String get repeater_rxAirtime => 'RX Airtime';
@override
String get repeater_chanUtil => 'Channel Utilization';
@override
String get repeater_packetStatistics => 'Statistiche del Pacchetto';
+3
View File
@@ -2086,6 +2086,9 @@ class AppLocalizationsJa extends AppLocalizations {
@override
String get repeater_rxAirtime => 'RX 空き時間';
@override
String get repeater_chanUtil => 'Channel Utilization';
@override
String get repeater_packetStatistics => 'パケット統計';
+3
View File
@@ -2083,6 +2083,9 @@ class AppLocalizationsKo extends AppLocalizations {
@override
String get repeater_rxAirtime => 'RX 에어타임';
@override
String get repeater_chanUtil => 'Channel Utilization';
@override
String get repeater_packetStatistics => '패킷 통계';
+3
View File
@@ -2161,6 +2161,9 @@ class AppLocalizationsNl extends AppLocalizations {
@override
String get repeater_rxAirtime => 'RX-zendtijd';
@override
String get repeater_chanUtil => 'Channel Utilization';
@override
String get repeater_packetStatistics => 'Pakketstatistieken';
+3
View File
@@ -2190,6 +2190,9 @@ class AppLocalizationsPl extends AppLocalizations {
@override
String get repeater_rxAirtime => 'Czas odbioru RX';
@override
String get repeater_chanUtil => 'Channel Utilization';
@override
String get repeater_packetStatistics => 'Statystyki pakietów';
+3
View File
@@ -2172,6 +2172,9 @@ class AppLocalizationsPt extends AppLocalizations {
@override
String get repeater_rxAirtime => 'RX Airtime';
@override
String get repeater_chanUtil => 'Channel Utilization';
@override
String get repeater_packetStatistics => 'Estatísticas de Pacote';
+3
View File
@@ -2177,6 +2177,9 @@ class AppLocalizationsRu extends AppLocalizations {
@override
String get repeater_rxAirtime => 'Время эфира (приём)';
@override
String get repeater_chanUtil => 'Channel Utilization';
@override
String get repeater_packetStatistics => 'Статистика пакетов';
+3
View File
@@ -2162,6 +2162,9 @@ class AppLocalizationsSk extends AppLocalizations {
@override
String get repeater_rxAirtime => 'RX Airtime';
@override
String get repeater_chanUtil => 'Channel Utilization';
@override
String get repeater_packetStatistics => 'Statistiky balíka';
+3
View File
@@ -2159,6 +2159,9 @@ class AppLocalizationsSl extends AppLocalizations {
@override
String get repeater_rxAirtime => 'RX Airtime';
@override
String get repeater_chanUtil => 'Channel Utilization';
@override
String get repeater_packetStatistics => 'Statistika paketa';
+3
View File
@@ -2148,6 +2148,9 @@ class AppLocalizationsSv extends AppLocalizations {
@override
String get repeater_rxAirtime => 'RX Airtime';
@override
String get repeater_chanUtil => 'Channel Utilization';
@override
String get repeater_packetStatistics => 'Paketstatistik';
+3
View File
@@ -2173,6 +2173,9 @@ class AppLocalizationsUk extends AppLocalizations {
@override
String get repeater_rxAirtime => 'Ефірний час RX';
@override
String get repeater_chanUtil => 'Channel Utilization';
@override
String get repeater_packetStatistics => 'Статистика пакетів';
+3
View File
@@ -2043,6 +2043,9 @@ class AppLocalizationsZh extends AppLocalizations {
@override
String get repeater_rxAirtime => '接收空中时间';
@override
String get repeater_chanUtil => 'Channel Utilization';
@override
String get repeater_packetStatistics => '数据包统计';
+14
View File
@@ -56,6 +56,7 @@ class _RepeaterStatusScreenState extends State<RepeaterStatusScreen> {
int? _directRx;
int? _dupFlood;
int? _dupDirect;
double? _chanUtil;
PathSelection? _pendingStatusSelection;
@override
@@ -192,6 +193,7 @@ class _RepeaterStatusScreenState extends State<RepeaterStatusScreen> {
_lastSnr = lastSnrRaw / 4.0;
_dupDirect = directDups;
_dupFlood = floodDups;
_chanUtil = ((txAirSecs + rxAirSecs) / uptimeSecs) * 100;
});
final connector = Provider.of<MeshCoreConnector>(context, listen: false);
connector.updateRepeaterBatterySnapshot(
@@ -283,6 +285,7 @@ class _RepeaterStatusScreenState extends State<RepeaterStatusScreen> {
_directRx = null;
_dupFlood = null;
_dupDirect = null;
_chanUtil = null;
});
try {
@@ -570,6 +573,7 @@ class _RepeaterStatusScreenState extends State<RepeaterStatusScreen> {
_buildInfoRow(l10n.repeater_sent, _packetTxText()),
_buildInfoRow(l10n.repeater_received, _packetRxText()),
_buildInfoRow(l10n.repeater_duplicates, _duplicateText()),
_buildInfoRow(l10n.repeater_chanUtil, _chanUtilText()),
],
),
),
@@ -673,6 +677,11 @@ class _RepeaterStatusScreenState extends State<RepeaterStatusScreen> {
return l10n.repeater_packetRxTotal(_packetsRecv!, flood, direct);
}
String _chanUtilText() {
if (_chanUtil == null) return '';
return _formatPercent(_chanUtil);
}
String _duplicateText() {
final l10n = context.l10n;
if (_dupFlood != null || _dupDirect != null) {
@@ -693,6 +702,11 @@ class _RepeaterStatusScreenState extends State<RepeaterStatusScreen> {
return suffix == null ? value.toString() : '$value$suffix';
}
String _formatPercent(double? p) {
if (p == null) return '';
return '${p.toStringAsFixed(2)}%';
}
String _formatSnr(double? snr) {
if (snr == null) return '';
return snr.toStringAsFixed(2);
+1
View File
@@ -8,6 +8,7 @@ list(APPEND FLUTTER_PLUGIN_LIST
list(APPEND FLUTTER_FFI_PLUGIN_LIST
flserial
jni
)
set(PLUGIN_BUNDLED_LIBRARIES)
+34 -17
View File
@@ -1,86 +1,103 @@
{
"bg": [
"chat_markAsUnread",
"chat_newMessages"
"chat_newMessages",
"repeater_chanUtil"
],
"de": [
"chat_markAsUnread",
"chat_newMessages"
"chat_newMessages",
"repeater_chanUtil"
],
"es": [
"chat_markAsUnread",
"chat_newMessages"
"chat_newMessages",
"repeater_chanUtil"
],
"fr": [
"chat_markAsUnread",
"chat_newMessages"
"chat_newMessages",
"repeater_chanUtil"
],
"hu": [
"chat_markAsUnread",
"chat_newMessages"
"chat_newMessages",
"repeater_chanUtil"
],
"it": [
"chat_markAsUnread",
"chat_newMessages"
"chat_newMessages",
"repeater_chanUtil"
],
"ja": [
"chat_markAsUnread",
"chat_newMessages"
"chat_newMessages",
"repeater_chanUtil"
],
"ko": [
"chat_markAsUnread",
"chat_newMessages"
"chat_newMessages",
"repeater_chanUtil"
],
"nl": [
"chat_markAsUnread",
"chat_newMessages"
"chat_newMessages",
"repeater_chanUtil"
],
"pl": [
"chat_markAsUnread",
"chat_newMessages"
"chat_newMessages",
"repeater_chanUtil"
],
"pt": [
"chat_markAsUnread",
"chat_newMessages"
"chat_newMessages",
"repeater_chanUtil"
],
"ru": [
"chat_markAsUnread",
"chat_newMessages"
"chat_newMessages",
"repeater_chanUtil"
],
"sk": [
"chat_markAsUnread",
"chat_newMessages"
"chat_newMessages",
"repeater_chanUtil"
],
"sl": [
"chat_markAsUnread",
"chat_newMessages"
"chat_newMessages",
"repeater_chanUtil"
],
"sv": [
"chat_markAsUnread",
"chat_newMessages"
"chat_newMessages",
"repeater_chanUtil"
],
"uk": [
"chat_markAsUnread",
"chat_newMessages"
"chat_newMessages",
"repeater_chanUtil"
],
"zh": [
"chat_markAsUnread",
"chat_newMessages"
"chat_newMessages",
"repeater_chanUtil"
]
}
+1
View File
@@ -11,6 +11,7 @@ list(APPEND FLUTTER_PLUGIN_LIST
list(APPEND FLUTTER_FFI_PLUGIN_LIST
flserial
flutter_local_notifications_windows
jni
)
set(PLUGIN_BUNDLED_LIBRARIES)