mirror of
https://github.com/dz0ny/meshcore-sar.git
synced 2026-08-11 16:30:28 +00:00
feat: Update project version to 11 and enhance BLE packet logging with RSSI and SNR information
This commit is contained in:
4
.gitignore
vendored
4
.gitignore
vendored
@@ -44,4 +44,6 @@ app.*.map.json
|
|||||||
/android/app/profile
|
/android/app/profile
|
||||||
/android/app/release
|
/android/app/release
|
||||||
*.zip
|
*.zip
|
||||||
*.ipa
|
*.ipa
|
||||||
|
ios/Runner.app.dSYM.zip
|
||||||
|
ios/Runner.ipa
|
||||||
|
|||||||
Binary file not shown.
BIN
ios/Runner.ipa
BIN
ios/Runner.ipa
Binary file not shown.
@@ -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;
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|
||||||
|
|||||||
@@ -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');
|
||||||
|
|||||||
@@ -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,
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -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',
|
||||||
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user