Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions .classpath
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,18 @@
</classpathentry>
<classpathentry kind="src" output="target/test-classes" path="src/test/java">
<attributes>
<attribute name="test" value="true"/>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7">
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
Expand Down
15 changes: 12 additions & 3 deletions .settings/org.eclipse.jdt.core.prefs
Original file line number Diff line number Diff line change
@@ -1,5 +1,14 @@
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
org.eclipse.jdt.core.compiler.compliance=1.7
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
org.eclipse.jdt.core.compiler.compliance=1.8
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
org.eclipse.jdt.core.compiler.debug.localVariable=generate
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
org.eclipse.jdt.core.compiler.source=1.7
org.eclipse.jdt.core.compiler.release=disabled
org.eclipse.jdt.core.compiler.source=1.8
14 changes: 7 additions & 7 deletions pom.xml
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

Expand All @@ -21,8 +22,8 @@
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
Expand Down Expand Up @@ -51,11 +52,10 @@
<artifactId>guava</artifactId>
<version>18.0</version>
</dependency>

<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
<groupId>com.sun.istack</groupId>
<artifactId>istack-commons-runtime</artifactId>
<version>3.0.5</version>
</dependency>
</dependencies>
<scm>
Expand Down
115 changes: 80 additions & 35 deletions src/main/java/com/monstarmike/tlmreader/App.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,25 @@
import org.joda.time.format.PeriodFormatter;
import org.joda.time.format.PeriodFormatterBuilder;

import com.monstarmike.tlmreader.datablock.AirspeedBlock;
import com.monstarmike.tlmreader.datablock.AltitudeBlock;
import com.monstarmike.tlmreader.datablock.AltitudeZeroBlock;
import com.monstarmike.tlmreader.datablock.CurrentBlock;
import com.monstarmike.tlmreader.datablock.DataBlock;
import com.monstarmike.tlmreader.datablock.RXBlock;
import com.monstarmike.tlmreader.datablock.EscBlock;
import com.monstarmike.tlmreader.datablock.FlightPackBlock;
import com.monstarmike.tlmreader.datablock.GForceBlock;
import com.monstarmike.tlmreader.datablock.GPSCollectorBlock;
import com.monstarmike.tlmreader.datablock.GPSLocationBlock;
import com.monstarmike.tlmreader.datablock.GPSStatusBlock;
import com.monstarmike.tlmreader.datablock.JetCatBlock;
import com.monstarmike.tlmreader.datablock.PowerBoxBlock;
import com.monstarmike.tlmreader.datablock.RxBlock;
import com.monstarmike.tlmreader.datablock.ServoDataBlock;
import com.monstarmike.tlmreader.datablock.StandardBlock;
import com.monstarmike.tlmreader.datablock.TemperatureBlock;
import com.monstarmike.tlmreader.datablock.VarioBlock;
import com.monstarmike.tlmreader.datablock.VoltageBlock;

public class App {

Expand All @@ -34,7 +50,6 @@ public static void main(String[] args) {
long end = System.currentTimeMillis();
System.out.println("duration: " + (end - start) + " ms");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Expand All @@ -45,41 +60,71 @@ private static void printFlightDefinitions(IFlight flight) {
}

private static void printDataBlocks(Flight flight) {
int lastTimestamp = 0;
for (DataBlock dataBlock : flight.getDataBlocks()) {
// if (dataBlock instanceof StandardBlock) {
// System.out.println("Timestamp: " + dataBlock.getTimestamp());
// if (lastTimestamp >= dataBlock.getTimestamp()) {
// System.out.println(
// " ---------------- last: " + lastTimestamp + " current: " +
// dataBlock.getTimestamp());
// }
// }
// printStandardBlock(dataBlock);
// printRxBlock(dataBlock);
}
}

private static void printRxBlock(DataBlock dataBlock) {
if (dataBlock instanceof RXBlock) {
RXBlock rxBlock = (RXBlock) dataBlock;
System.out.println(rxBlock);
// System.out.println("A: " + rxBlock.getLostPacketsReceiverA() + ",
// B: " + rxBlock.getLostPacketsReceiverB() + ", L: " +
// rxBlock.getLostPacketsReceiverL()
// + ", R: " + rxBlock.getLostPacketsReceiverR() + ", FrameLoss: " +
// rxBlock.getFrameLoss() + ", Holds: "
// + rxBlock.getHolds());
}
}
if (dataBlock instanceof StandardBlock) {
System.out.println(((StandardBlock) dataBlock).toString());
}
else if (dataBlock instanceof RxBlock) {
System.out.println(((RxBlock) dataBlock).toString());
}
else if (dataBlock instanceof VarioBlock) {
System.out.println(((VarioBlock) dataBlock).toString());
}
//primitive data blocks
else if (dataBlock instanceof AltitudeBlock) {
System.out.println(((AltitudeBlock) dataBlock).toString());
}
else if (dataBlock instanceof AltitudeZeroBlock) {
System.out.println(((AltitudeZeroBlock) dataBlock).toString());
}
else if (dataBlock instanceof VoltageBlock) {
System.out.println(((VoltageBlock) dataBlock).toString());
}
else if (dataBlock instanceof CurrentBlock) {
System.out.println(((CurrentBlock) dataBlock).toString());
}
else if (dataBlock instanceof TemperatureBlock) {
System.out.println(((TemperatureBlock) dataBlock).toString());
}
else if (dataBlock instanceof AirspeedBlock) {
System.out.println(((AirspeedBlock) dataBlock).toString());
}
//other important data blocks
else if (dataBlock instanceof GPSLocationBlock) {
System.out.println(((GPSLocationBlock) dataBlock).toString());
GPSCollectorBlock.getInstance().updateLocation((GPSLocationBlock) dataBlock);
if (GPSCollectorBlock.getInstance().isUpdated()) {
System.out.println(GPSCollectorBlock.getInstance().toString());
}
}
else if (dataBlock instanceof GPSStatusBlock) {
System.out.println(((GPSStatusBlock) dataBlock).toString());
GPSCollectorBlock.getInstance().updateStatus((GPSStatusBlock) dataBlock);
if (GPSCollectorBlock.getInstance().isUpdated()) {
System.out.println(GPSCollectorBlock.getInstance().toString());
}
}
else if (dataBlock instanceof FlightPackBlock) {
System.out.println(((FlightPackBlock) dataBlock).toString());
}
else if (dataBlock instanceof EscBlock) {
System.out.println(((EscBlock) dataBlock).toString());
}
else if (dataBlock instanceof PowerBoxBlock) {
System.out.println(((PowerBoxBlock) dataBlock).toString());
}
else if (dataBlock instanceof JetCatBlock) {
System.out.println(((JetCatBlock) dataBlock).toString());
}
else if (dataBlock instanceof GForceBlock) {
System.out.println(((GForceBlock) dataBlock).toString());
}
else if (dataBlock instanceof ServoDataBlock) {
System.out.println(((ServoDataBlock) dataBlock).toString());
}
else //undefined dataBlocks
System.out.println(dataBlock.toString());

private static void printStandardBlock(DataBlock dataBlock) {
if (dataBlock instanceof StandardBlock) {
StandardBlock standardBlock = (StandardBlock) dataBlock;
System.out.println("Std: rpm: " + standardBlock.getRpm() + "(" + standardBlock.hasValidRpmData()
+ ") volt: " + standardBlock.getVoltageInHunderthOfVolts() + "("
+ standardBlock.hasValidVoltageData() + ") temp: " + standardBlock.getTemperatureInGradFahrenheit()
+ "(" + standardBlock.hasValidTemperatureData() + ")");
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,29 @@

public class AirspeedBlock extends DataBlock {

// typedef struct
// {
// UINT8 identifier;
// UINT8 sID; // Secondary ID
// UINT16 airspeed; // 1 km/h increments
// UINT16 maxAirspeed; // 1 km/h increments
// } STRU_TELE_SPEED;
/*
* Address 0x11: Airspeed
*
* 11.00.MSB,LSB,01,F9,00,00,00,00,00,00,00,00,00,00 MSB and LSB are a 16Bit
* value, 1 unit is 1 km/h. Displays up to 65535 km/h, maximum alarm value
* id, 1 unit is 1 km/h. Displays up to 65535 km/h, maximum alarm id
* 563 km/h
*/

private short airspeedKmPerHour;
private short airspeedKmPerHour;

public AirspeedBlock(final byte[] rawData) {
super(rawData);
decode(rawData);
measurementNames.add("AirSpeed");
measurementUnits.add("km/h");
measurementFactors.add(1.0);
}

public short getAirspeedInKmPerHour() {
Expand All @@ -26,12 +36,14 @@ public short getAirspeedInKmPerHour() {
public boolean areValuesEquals(DataBlock block) {
if (block instanceof AirspeedBlock) {
AirspeedBlock air = (AirspeedBlock) block;
return air.getAirspeedInKmPerHour() == this.airspeedKmPerHour;
return air.airspeedKmPerHour == this.airspeedKmPerHour;
}
return false;
}

private void decode(byte[] rawData) {
airspeedKmPerHour = Shorts.fromBytes(rawData[6], rawData[7]);
measurementValues.add((int)getAirspeedInKmPerHour());
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -12,18 +12,29 @@ public final class AltitudeBlock extends DataBlock {
* is -3276.8m
*/

// typedef struct
// {
// UINT8 identifier;
// UINT8 sID; // Secondary ID
// INT16 altitude; // .1m increments
// INT16 maxAltitude; // .1m increments
// } STRU_TELE_ALT;

private short altitudeInTenthOfMeter;

public AltitudeBlock(byte[] rawData) {
super(rawData);
decode(rawData);
measurementNames.add("Altitude A");
measurementUnits.add("m");
measurementFactors.add(0.1);
}

@Override
public boolean areValuesEquals(DataBlock block) {
if (block instanceof AltitudeBlock) {
AltitudeBlock alt = (AltitudeBlock) block;
return alt.getAltitudeInTenthOfMeter() == this.altitudeInTenthOfMeter;
return alt.altitudeInTenthOfMeter == this.altitudeInTenthOfMeter;
}
return false;
}
Expand All @@ -34,6 +45,7 @@ public short getAltitudeInTenthOfMeter() {

private void decode(byte[] rawData) {
altitudeInTenthOfMeter = Shorts.fromBytes(rawData[6], rawData[7]);
measurementValues.add((int)getAltitudeInTenthOfMeter());
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package com.monstarmike.tlmreader.datablock;

import com.google.common.primitives.Ints;

public class AltitudeZeroBlock extends DataBlock {

// typedef struct
// {
// UINT8 identifier; // Source device = 0x7B
// UINT8 sID; // Secondary ID
// UINT8 spare[2];
// UINT32 altOffset; // Altitude "zero" log
// } STRU_TELE_ALT_ZERO;

private int altOffset;

public AltitudeZeroBlock(byte[] rawData) {
super(rawData);
altOffset = Ints.fromBytes(rawData[8], rawData[9], rawData[10], rawData[11]);
measurementNames.add("Altitude Offset");
measurementUnits.add("m");
measurementFactors.add(0.1);
measurementValues.add((int)getAltOffset());
}

@Override
public boolean areValuesEquals(DataBlock block) {
if (block instanceof AltitudeBlock) {
AltitudeZeroBlock alt = (AltitudeZeroBlock) block;
return alt.altOffset == this.altOffset;
}
return false;
}

public int getAltOffset() {
return altOffset;
}

}
5 changes: 0 additions & 5 deletions src/main/java/com/monstarmike/tlmreader/datablock/Block.java

This file was deleted.

20 changes: 10 additions & 10 deletions src/main/java/com/monstarmike/tlmreader/datablock/CurrentBlock.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,36 +8,36 @@ public class CurrentBlock extends DataBlock {
* 1.01.
*
* 03,00,MSB,LSB,00,00,00,00,00,00,00,00,00,00,00,00 MSB and LSB are a 16bit
* value, 1 unit is 0.1967A, seems to be some sensor related value. You can
* id, 1 unit is 0.1967A, seems to be some sensor related id. You can
* display 4 digits, I tried up to 0x2000 (displaying 1612A). Please beware
* that the maximum alarm value you can set in the radio is 200A.
* that the maximum alarm id you can set in the radio is 200A.
*/
private float current;
private short current;

public CurrentBlock(byte[] rawData) {
super(rawData);
decode(rawData);
measurementNames.add("Current C");
measurementUnits.add("A");
measurementFactors.add(0.1967);
}

@Override
public boolean areValuesEquals(DataBlock block) {
if (block instanceof CurrentBlock) {
CurrentBlock current = (CurrentBlock) block;
return current.getCurrent() == this.current;
return current.current == this.current;
}
return false;
}

public float getCurrent() {
public short getCurrent() {
return current;
}

private void decode(byte[] rawData) {
current = 0.1967f * Shorts.fromBytes(rawData[6], rawData[7]);
current = Shorts.fromBytes(rawData[6], rawData[7]);
measurementValues.add((int)getCurrent());
}

@Override
public String toString() {
return super.toString() + " - " + getCurrent();
}
}
Loading