generated from Grigo/AndroidTemplate
Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 880ad3facf |
@@ -18,8 +18,10 @@ public class StatsExtractor {
|
||||
|
||||
private static final Gson GSON = new Gson();
|
||||
|
||||
private static final Pattern FRAME_SEND = Pattern.compile("(?m)^\\s*SEND\\b");
|
||||
private static final Pattern FRAME_RECEIVE = Pattern.compile("(?m)^\\s*RECEIVE\\b");
|
||||
private static final Pattern FRAME_SEND = Pattern.compile(
|
||||
"(?m)^\\s*(?:MODE\\s+LORA\\s+)?SEND\\b", Pattern.CASE_INSENSITIVE);
|
||||
private static final Pattern FRAME_RECEIVE = Pattern.compile(
|
||||
"(?m)^\\s*(?:MODE\\s+LORA\\s+)?RECEIVE\\b", Pattern.CASE_INSENSITIVE);
|
||||
private static final Pattern POWER = Pattern.compile("Power\\s*:\\s*(\\d+(?:\\.\\d+)?)", Pattern.CASE_INSENSITIVE);
|
||||
private static final Pattern RSSI = Pattern.compile("RSSI\\s*:\\s*(-?\\d+(?:\\.\\d+)?)", Pattern.CASE_INSENSITIVE);
|
||||
private static final Pattern SNR = Pattern.compile("SNR\\s*:\\s*(-?\\d+(?:\\.\\d+)?)", Pattern.CASE_INSENSITIVE);
|
||||
|
||||
@@ -20,7 +20,8 @@ public class TelnetFrameParser {
|
||||
private static final Charset CHARSET = StandardCharsets.UTF_8;
|
||||
/** Start of a new radio screen (TX or RX). */
|
||||
private static final Pattern FRAME_HEADER =
|
||||
Pattern.compile("(?m)^\\s*(SEND|RECEIVE)\\b");
|
||||
Pattern.compile("(?m)^\\s*(?:MODE\\s+LORA\\s+)?(SEND|RECEIVE)\\b",
|
||||
Pattern.CASE_INSENSITIVE);
|
||||
|
||||
private final List<byte[]> delimiters;
|
||||
private final FrameListener listener;
|
||||
|
||||
@@ -163,6 +163,40 @@ public class LoraFrameExtractTest {
|
||||
assertTrue(stats.metaJson.contains("\"preamble_length\":8"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void parsesModeLoraSendFrame() {
|
||||
StatsExtractor extractor = StatsExtractor.withDefaults();
|
||||
String frame = """
|
||||
MODE LORA SEND
|
||||
Frequency: 433500000 Hz
|
||||
Power: 20 dBm
|
||||
Spreading Factor: 7
|
||||
Bandwidth: 125 kHz
|
||||
Code Rate: 4/7
|
||||
Preamble Length: 8
|
||||
Low Data Rate Opt: Off
|
||||
CRC: On
|
||||
Payload length: 32 byte
|
||||
On Air: 93 ms, 10.75 pkt/c
|
||||
|
||||
Packet: 1648
|
||||
Payload: Test TX!
|
||||
TX Timeout: 0 ms
|
||||
TX Speed: 10.78 pkt/s, 2759 bit/s
|
||||
""";
|
||||
StatsExtractor.ExtractedStats stats = extractor.extract(frame);
|
||||
|
||||
assertEquals("SEND", stats.frameType);
|
||||
assertEquals(StatsExtractor.ROLE_TX, stats.role);
|
||||
assertEquals(20.0, stats.rssi, 0.01);
|
||||
assertTrue(stats.hasRadioFrame());
|
||||
assertTrue(stats.metaJson.contains("\"frequency_hz\":433500000"));
|
||||
assertTrue(stats.metaJson.contains("\"spreading_factor\":7"));
|
||||
assertTrue(stats.metaJson.contains("\"code_rate\":\"4/7\""));
|
||||
assertTrue(stats.metaJson.contains("\"packet\":1648"));
|
||||
assertTrue(stats.metaJson.contains("\"tx_pkt_per_s\":10.78"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void splitsTwoFramesByReceiveHeaderWithoutEsc() {
|
||||
List<String> frames = new ArrayList<>();
|
||||
|
||||
@@ -63,4 +63,22 @@ public class TelnetFrameParserTest {
|
||||
assertEquals(1, frames.size());
|
||||
assertTrue(frames.get(0).contains("tail"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void splitsModeLoraHeadersWithoutEsc() {
|
||||
String stream = """
|
||||
MODE LORA SEND
|
||||
Packet: 1
|
||||
Payload: tx
|
||||
MODE LORA RECEIVE
|
||||
Packet Number: 1
|
||||
Payload: rx
|
||||
""";
|
||||
parser.append(stream.getBytes(StandardCharsets.UTF_8));
|
||||
parser.flush();
|
||||
|
||||
assertEquals(2, frames.size());
|
||||
assertTrue(frames.get(0).contains("MODE LORA SEND"));
|
||||
assertTrue(frames.get(1).contains("MODE LORA RECEIVE"));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user