mirror of
https://github.com/zjs81/meshcore-open.git
synced 2026-06-17 07:56:28 +10:00
aed3b0157a
- Added error handling and logging to the Cayenne LPP parsing methods to manage malformed data gracefully. - Improved the structure of the parsing logic for better readability and maintainability. - Updated the Contact model to include error handling during frame parsing. - Refactored Channels, Contacts, Map, and Neighbours screens to utilize a new AppBarTitle widget for consistent app bar design. - Enhanced the BatteryIndicator widget to display SNR information for direct repeaters. - Introduced SNRUi class for better management of SNR icon and text representation. - Improved error handling in PathTraceMap and Neighbours screens to log errors appropriately.
59 lines
1.5 KiB
Dart
59 lines
1.5 KiB
Dart
import 'package:flutter/material.dart';
|
|
|
|
class SNRUi {
|
|
final IconData icon;
|
|
final Color color;
|
|
final String text;
|
|
const SNRUi(this.icon, this.color, this.text);
|
|
}
|
|
|
|
List<double> getSNRfromSF(int spreadingFactor) {
|
|
switch (spreadingFactor) {
|
|
case 7:
|
|
return [4.0, -2.0, -4.0, -6.0];
|
|
case 8:
|
|
return [4.0, -4.0, -6.0, -8.0];
|
|
case 9:
|
|
return [4.0, -6.0, -8.0, -10.0];
|
|
case 10:
|
|
return [4.0, -8.0, -10.0, -13.0];
|
|
case 11:
|
|
return [4.0, -10.0, -12.5, -15.0];
|
|
case 12:
|
|
return [4.0, -12.5, -15.0, -18.0];
|
|
default:
|
|
return []; // Or throw Exception('Invalid SF: $spreadingFactor');
|
|
}
|
|
}
|
|
|
|
SNRUi snrUiFromSNR(double? snr, int? spreadingFactor) {
|
|
if (snr == null || spreadingFactor == null) {
|
|
return const SNRUi(Icons.signal_cellular_off, Colors.grey, '—');
|
|
}
|
|
|
|
final snrLevels = getSNRfromSF(spreadingFactor);
|
|
|
|
IconData icon;
|
|
Color color;
|
|
String text = '${snr.toStringAsFixed(1)} dB';
|
|
|
|
if (snr >= snrLevels[0]) {
|
|
icon = Icons.signal_cellular_alt;
|
|
color = Colors.green;
|
|
} else if (snr >= snrLevels[1]) {
|
|
icon = Icons.signal_cellular_alt;
|
|
color = Colors.lightGreen;
|
|
} else if (snr >= snrLevels[2]) {
|
|
icon = Icons.signal_cellular_alt;
|
|
color = Colors.yellow;
|
|
} else if (snr >= snrLevels[3]) {
|
|
icon = Icons.signal_cellular_alt_2_bar;
|
|
color = Colors.orange;
|
|
} else {
|
|
icon = Icons.signal_cellular_alt_1_bar;
|
|
color = Colors.red;
|
|
}
|
|
|
|
return SNRUi(icon, color, text);
|
|
}
|