mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-04 03:13:49 +00:00
added a test that reads all messages from the test file
This commit is contained in:
1 parent
7a45beb74b
commit
01e669da9f
5 files changed
+56
-2
No files matched your search
+21
@@ -5,6 +5,8 @@ import static org.junit.Assert.assertNotNull;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
@@ -25,4 +27,23 @@ public class ParseSingleSwissTimingPacketFromFileTest {
|
||||
assertEquals((double) lat / 10000000., swissTimingMessage.getPosition().getLatDeg(), 0.0000000001);
|
||||
assertEquals((double) lng / 10000000., swissTimingMessage.getPosition().getLngDeg(), 0.0000000001);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void readAllPacketsFromFile() throws IOException, SwissTimingFormatException {
|
||||
byte[] message = new byte[65536];
|
||||
List<SwissTimingMessage> messages = new ArrayList<SwissTimingMessage>();
|
||||
InputStream is = getClass().getResourceAsStream("/SwissTimingExampleTrack.bin");
|
||||
int bytesRead = is.read(message);
|
||||
int offset = 0;
|
||||
int messageLength = 0;
|
||||
while (offset < bytesRead) {
|
||||
SwissTimingMessage swissTimingMessage = SwissTimingMessageParser.INSTANCE.parse(message, offset);
|
||||
assertNotNull(swissTimingMessage);
|
||||
messages.add(swissTimingMessage);
|
||||
messageLength = swissTimingMessage.length();
|
||||
offset += messageLength;
|
||||
}
|
||||
assertEquals(bytesRead/messageLength, messages.size());
|
||||
}
|
||||
|
||||
}
|
||||
+5
@@ -20,4 +20,9 @@ public interface SwissTimingMessage {
|
||||
int getNumberOfSatellites();
|
||||
|
||||
int getBatteryPercent();
|
||||
|
||||
/**
|
||||
* @return the number of bytes that were used to encode this message
|
||||
*/
|
||||
int length();
|
||||
}
|
||||
+2
@@ -6,4 +6,6 @@ public interface SwissTimingMessageParser {
|
||||
SwissTimingMessageParser INSTANCE = new SwissTimingMessageParserImpl();
|
||||
|
||||
SwissTimingMessage parse(byte[] message) throws SwissTimingFormatException;
|
||||
|
||||
SwissTimingMessage parse(byte[] message, int offset) throws SwissTimingFormatException;
|
||||
}
|
||||
+21
-1
@@ -14,9 +14,10 @@ public class SwissTimingMessageImpl implements SwissTimingMessage {
|
||||
private final Speed speed;
|
||||
private final int numberOfSatellites;
|
||||
private final int batteryPercent;
|
||||
private final int length;
|
||||
|
||||
public SwissTimingMessageImpl(String raceID, int packetID, TimePoint timestamp, int gpsID, Position position, Speed speed,
|
||||
int numberOfSatellites, int batteryPercent) {
|
||||
int numberOfSatellites, int batteryPercent, int length) {
|
||||
super();
|
||||
this.raceID = raceID;
|
||||
this.packetID = packetID;
|
||||
@@ -26,38 +27,57 @@ public class SwissTimingMessageImpl implements SwissTimingMessage {
|
||||
this.speed = speed;
|
||||
this.numberOfSatellites = numberOfSatellites;
|
||||
this.batteryPercent = batteryPercent;
|
||||
this.length = length;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getRaceID() {
|
||||
return raceID;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getPacketID() {
|
||||
return packetID;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TimePoint getTimestamp() {
|
||||
return timestamp;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getGpsID() {
|
||||
return gpsID;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Position getPosition() {
|
||||
return position;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Speed getSpeed() {
|
||||
return speed;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getNumberOfSatellites() {
|
||||
return numberOfSatellites;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getBatteryPercent() {
|
||||
return batteryPercent;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int length() {
|
||||
return length;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "#"+getPacketID()+"/"+getGpsID()+" "+getTimestamp()+": "+getPosition()+", "+getSpeed()+". "+getNumberOfSatellites()+" satellites, battery: "+
|
||||
getBatteryPercent()+"%";
|
||||
}
|
||||
}
|
||||
+7
-1
@@ -13,6 +13,12 @@ public class SwissTimingMessageParserImpl implements SwissTimingMessageParser {
|
||||
@Override
|
||||
public SwissTimingMessage parse(byte[] message) throws SwissTimingFormatException {
|
||||
int i=0;
|
||||
return parse(message, i);
|
||||
}
|
||||
|
||||
@Override
|
||||
public SwissTimingMessage parse(byte[] message, int offset) throws SwissTimingFormatException {
|
||||
int i = offset;
|
||||
if (message[i] != 0x10 || message[i+1] != 0x00) {
|
||||
throw new SwissTimingFormatException("Didn't find start marker 0x1000", message);
|
||||
}
|
||||
@@ -48,7 +54,7 @@ public class SwissTimingMessageParserImpl implements SwissTimingMessageParser {
|
||||
return new SwissTimingMessageImpl(raceID, packetID, new MillisecondsTimePoint(timestamp), gpsID,
|
||||
new DegreePosition((double) latitude / 10000000., (double) longitude / 10000000.),
|
||||
new KilometersPerHourSpeedWithBearingImpl(0.36*speedInDecimetersPerSecond, new DegreeBearingImpl(course)),
|
||||
numberOfSatellites, batteryPercent);
|
||||
numberOfSatellites, batteryPercent, i-offset);
|
||||
}
|
||||
|
||||
private short parseShort(byte[] message, int offset) {
|
||||
|
||||
Reference in new issue
Block a user