feat: Update project version to 11 and enhance BLE packet logging with RSSI and SNR information

This commit is contained in:
Janez T
2025-10-16 14:20:40 +02:00
parent 9ae3acb3dc
commit 9c1922b4fd
10 changed files with 35 additions and 18 deletions

2
.gitignore vendored
View File

@@ -45,3 +45,5 @@ app.*.map.json
/android/app/release /android/app/release
*.zip *.zip
*.ipa *.ipa
ios/Runner.app.dSYM.zip
ios/Runner.ipa

Binary file not shown.

Binary file not shown.

View File

@@ -489,7 +489,7 @@
buildSettings = { buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_MODULES = YES;
CURRENT_PROJECT_VERSION = 9; CURRENT_PROJECT_VERSION = 11;
DEVELOPMENT_TEAM = JND55328G8; DEVELOPMENT_TEAM = JND55328G8;
ENABLE_BITCODE = NO; ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist; INFOPLIST_FILE = Runner/Info.plist;
@@ -511,7 +511,7 @@
buildSettings = { buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)"; BUNDLE_LOADER = "$(TEST_HOST)";
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 9; CURRENT_PROJECT_VERSION = 11;
GENERATE_INFOPLIST_FILE = YES; GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.0; MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.meshcore.sar.meshcoreSarApp.RunnerTests; PRODUCT_BUNDLE_IDENTIFIER = com.meshcore.sar.meshcoreSarApp.RunnerTests;
@@ -529,7 +529,7 @@
buildSettings = { buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)"; BUNDLE_LOADER = "$(TEST_HOST)";
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 9; CURRENT_PROJECT_VERSION = 11;
GENERATE_INFOPLIST_FILE = YES; GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.0; MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.meshcore.sar.meshcoreSarApp.RunnerTests; PRODUCT_BUNDLE_IDENTIFIER = com.meshcore.sar.meshcoreSarApp.RunnerTests;
@@ -545,7 +545,7 @@
buildSettings = { buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)"; BUNDLE_LOADER = "$(TEST_HOST)";
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 9; CURRENT_PROJECT_VERSION = 11;
GENERATE_INFOPLIST_FILE = YES; GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.0; MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.meshcore.sar.meshcoreSarApp.RunnerTests; PRODUCT_BUNDLE_IDENTIFIER = com.meshcore.sar.meshcoreSarApp.RunnerTests;
@@ -676,7 +676,7 @@
buildSettings = { buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_MODULES = YES;
CURRENT_PROJECT_VERSION = 9; CURRENT_PROJECT_VERSION = 11;
DEVELOPMENT_TEAM = JND55328G8; DEVELOPMENT_TEAM = JND55328G8;
ENABLE_BITCODE = NO; ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist; INFOPLIST_FILE = Runner/Info.plist;
@@ -699,7 +699,7 @@
buildSettings = { buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_MODULES = YES;
CURRENT_PROJECT_VERSION = 9; CURRENT_PROJECT_VERSION = 11;
DEVELOPMENT_TEAM = JND55328G8; DEVELOPMENT_TEAM = JND55328G8;
ENABLE_BITCODE = NO; ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist; INFOPLIST_FILE = Runner/Info.plist;

View File

@@ -21,7 +21,7 @@
<key>CFBundleSignature</key> <key>CFBundleSignature</key>
<string>????</string> <string>????</string>
<key>CFBundleVersion</key> <key>CFBundleVersion</key>
<string>9</string> <string>11</string>
<key>LSRequiresIPhoneOS</key> <key>LSRequiresIPhoneOS</key>
<true/> <true/>
<key>UILaunchStoryboardName</key> <key>UILaunchStoryboardName</key>

View File

@@ -5,22 +5,17 @@
<testcase classname="fastlane.lanes" name="0: default_platform" time="0.000226"> <testcase classname="fastlane.lanes" name="0: default_platform" time="0.000217">
</testcase> </testcase>
<testcase classname="fastlane.lanes" name="1: increment_build_number" time="0.29873"> <testcase classname="fastlane.lanes" name="1: increment_build_number" time="0.275265">
</testcase> </testcase>
<testcase classname="fastlane.lanes" name="2: build_app" time="91.771779"> <testcase classname="fastlane.lanes" name="2: build_app" time="1.053223">
</testcase>
<testcase classname="fastlane.lanes" name="3: upload_to_testflight" time="354.81791">
</testcase> </testcase>

View File

@@ -9,6 +9,8 @@ class LogRxDataInfo {
final List<String> embeddedStrings; final List<String> embeddedStrings;
final double entropy; final double entropy;
final bool isLikelyEncrypted; final bool isLikelyEncrypted;
final double? snrDb; // Signal-to-Noise Ratio in dB
final int? rssiDbm; // Received Signal Strength Indicator in dBm
LogRxDataInfo({ LogRxDataInfo({
this.airtimeMs, this.airtimeMs,
@@ -17,6 +19,8 @@ class LogRxDataInfo {
this.embeddedStrings = const [], this.embeddedStrings = const [],
required this.entropy, required this.entropy,
required this.isLikelyEncrypted, required this.isLikelyEncrypted,
this.snrDb,
this.rssiDbm,
}); });
/// Get sender public key as hex string (short) /// Get sender public key as hex string (short)
@@ -30,6 +34,9 @@ class LogRxDataInfo {
String get summary { String get summary {
final parts = <String>[]; final parts = <String>[];
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 (airtimeMs != null) parts.add('airtime:${airtimeMs}ms');
if (ackCode != null) parts.add('ACK:$ackCode'); if (ackCode != null) parts.add('ACK:$ackCode');
if (senderKeyShort != null) parts.add('from:$senderKeyShort'); if (senderKeyShort != null) parts.add('from:$senderKeyShort');

View File

@@ -587,7 +587,7 @@ class _HomeScreenState extends State<HomeScreen>
Text( Text(
'${deviceInfo.signalRssi}dBm', '${deviceInfo.signalRssi}dBm',
style: TextStyle( style: TextStyle(
fontSize: 12, fontSize: 14,
color: _getSignalColor(deviceInfo.signalRssi!), color: _getSignalColor(deviceInfo.signalRssi!),
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
), ),

View File

@@ -515,6 +515,17 @@ class _PacketLogCard extends StatelessWidget {
icon: Icons.tag, icon: Icons.tag,
label: log.opcodeDescription, 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',
),
], ],
), ),
], ],

View File

@@ -392,10 +392,12 @@ class BleResponseHandler {
final entropy = uniqueBytes / rawPacketData.length; final entropy = uniqueBytes / rawPacketData.length;
final isLikelyEncrypted = entropy > 0.7; final isLikelyEncrypted = entropy > 0.7;
// Create decoded info for packet log // Create decoded info for packet log (includes SNR and RSSI)
final logRxDataInfo = LogRxDataInfo( final logRxDataInfo = LogRxDataInfo(
entropy: entropy, entropy: entropy,
isLikelyEncrypted: isLikelyEncrypted, isLikelyEncrypted: isLikelyEncrypted,
snrDb: snrDb,
rssiDbm: rssiDbm,
); );
// Update the most recent packet log entry // Update the most recent packet log entry