diff --git a/.gitignore b/.gitignore index 6654d52..e31d2ae 100644 --- a/.gitignore +++ b/.gitignore @@ -44,4 +44,6 @@ app.*.map.json /android/app/profile /android/app/release *.zip -*.ipa \ No newline at end of file +*.ipa +ios/Runner.app.dSYM.zip +ios/Runner.ipa diff --git a/ios/Runner.app.dSYM.zip b/ios/Runner.app.dSYM.zip index 4f2e12b..331bfa4 100644 Binary files a/ios/Runner.app.dSYM.zip and b/ios/Runner.app.dSYM.zip differ diff --git a/ios/Runner.ipa b/ios/Runner.ipa index 31fcc7a..0fbcb7d 100644 Binary files a/ios/Runner.ipa and b/ios/Runner.ipa differ diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 76682c2..e48f170 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -489,7 +489,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = 9; + CURRENT_PROJECT_VERSION = 11; DEVELOPMENT_TEAM = JND55328G8; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; @@ -511,7 +511,7 @@ buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 9; + CURRENT_PROJECT_VERSION = 11; GENERATE_INFOPLIST_FILE = YES; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = com.meshcore.sar.meshcoreSarApp.RunnerTests; @@ -529,7 +529,7 @@ buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 9; + CURRENT_PROJECT_VERSION = 11; GENERATE_INFOPLIST_FILE = YES; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = com.meshcore.sar.meshcoreSarApp.RunnerTests; @@ -545,7 +545,7 @@ buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 9; + CURRENT_PROJECT_VERSION = 11; GENERATE_INFOPLIST_FILE = YES; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = com.meshcore.sar.meshcoreSarApp.RunnerTests; @@ -676,7 +676,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = 9; + CURRENT_PROJECT_VERSION = 11; DEVELOPMENT_TEAM = JND55328G8; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; @@ -699,7 +699,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = 9; + CURRENT_PROJECT_VERSION = 11; DEVELOPMENT_TEAM = JND55328G8; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist index 0000d90..7f6e54b 100644 --- a/ios/Runner/Info.plist +++ b/ios/Runner/Info.plist @@ -21,7 +21,7 @@ CFBundleSignature ???? CFBundleVersion - 9 + 11 LSRequiresIPhoneOS UILaunchStoryboardName diff --git a/ios/fastlane/report.xml b/ios/fastlane/report.xml index a317f2a..0c7e961 100644 --- a/ios/fastlane/report.xml +++ b/ios/fastlane/report.xml @@ -5,22 +5,17 @@ - + - + - - - - - - + diff --git a/lib/models/ble_packet_log.dart b/lib/models/ble_packet_log.dart index d4bde04..6b3760a 100644 --- a/lib/models/ble_packet_log.dart +++ b/lib/models/ble_packet_log.dart @@ -9,6 +9,8 @@ class LogRxDataInfo { final List embeddedStrings; final double entropy; final bool isLikelyEncrypted; + final double? snrDb; // Signal-to-Noise Ratio in dB + final int? rssiDbm; // Received Signal Strength Indicator in dBm LogRxDataInfo({ this.airtimeMs, @@ -17,6 +19,8 @@ class LogRxDataInfo { this.embeddedStrings = const [], required this.entropy, required this.isLikelyEncrypted, + this.snrDb, + this.rssiDbm, }); /// Get sender public key as hex string (short) @@ -30,6 +34,9 @@ class LogRxDataInfo { String get summary { final parts = []; + if (rssiDbm != null) parts.add('RSSI:${rssiDbm}dBm'); + final snr = snrDb; + if (snr != null) parts.add('SNR:${snr.toStringAsFixed(1)}dB'); if (airtimeMs != null) parts.add('airtime:${airtimeMs}ms'); if (ackCode != null) parts.add('ACK:$ackCode'); if (senderKeyShort != null) parts.add('from:$senderKeyShort'); diff --git a/lib/screens/home_screen.dart b/lib/screens/home_screen.dart index a4086b3..890d436 100644 --- a/lib/screens/home_screen.dart +++ b/lib/screens/home_screen.dart @@ -587,7 +587,7 @@ class _HomeScreenState extends State Text( '${deviceInfo.signalRssi}dBm', style: TextStyle( - fontSize: 12, + fontSize: 14, color: _getSignalColor(deviceInfo.signalRssi!), fontWeight: FontWeight.w500, ), diff --git a/lib/screens/packet_log_screen.dart b/lib/screens/packet_log_screen.dart index 22c7823..14b3b30 100644 --- a/lib/screens/packet_log_screen.dart +++ b/lib/screens/packet_log_screen.dart @@ -515,6 +515,17 @@ class _PacketLogCard extends StatelessWidget { icon: Icons.tag, label: log.opcodeDescription, ), + // Show RSSI and SNR for LOG_RX_DATA packets + if (log.logRxDataInfo?.rssiDbm != null) + _InfoChip( + icon: Icons.signal_cellular_alt, + label: 'RSSI: ${log.logRxDataInfo!.rssiDbm} dBm', + ), + if (log.logRxDataInfo?.snrDb != null) + _InfoChip( + icon: Icons.waves, + label: 'SNR: ${log.logRxDataInfo!.snrDb!.toStringAsFixed(1)} dB', + ), ], ), ], diff --git a/lib/services/ble/ble_response_handler.dart b/lib/services/ble/ble_response_handler.dart index d1d28e3..d936ced 100644 --- a/lib/services/ble/ble_response_handler.dart +++ b/lib/services/ble/ble_response_handler.dart @@ -392,10 +392,12 @@ class BleResponseHandler { final entropy = uniqueBytes / rawPacketData.length; final isLikelyEncrypted = entropy > 0.7; - // Create decoded info for packet log + // Create decoded info for packet log (includes SNR and RSSI) final logRxDataInfo = LogRxDataInfo( entropy: entropy, isLikelyEncrypted: isLikelyEncrypted, + snrDb: snrDb, + rssiDbm: rssiDbm, ); // Update the most recent packet log entry