From c0e617b0fb9640a24e108312d1422790521bbe72 Mon Sep 17 00:00:00 2001 From: Phu Nguyen Date: Wed, 22 Jun 2016 20:51:19 -0700 Subject: [PATCH 1/6] update gradle version --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 3dc9ef094d..ee85b0c85c 100644 --- a/build.gradle +++ b/build.gradle @@ -18,7 +18,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:1.5.0' + classpath 'com.android.tools.build:gradle:2.1.2' classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.2' classpath 'io.fabric.tools:gradle:1.21.2' From 5719dca54be29461ee80d31f4838df585d9db8a0 Mon Sep 17 00:00:00 2001 From: Phu Nguyen Date: Mon, 18 Jul 2016 00:09:34 -0700 Subject: [PATCH 2/6] Added new shot messages for Pano and Zipline --- ClientLib/build.gradle | 2 +- .../companion/solo/tlv/SoloMessageShot.java | 20 +++ .../companion/solo/tlv/SoloPanoOptions.java | 157 ++++++++++++++++++ .../companion/solo/tlv/SoloPanoStatus.java | 61 +++++++ .../companion/solo/tlv/SoloZiplineLock.java | 42 +++++ .../solo/tlv/SoloZiplineOptions.java | 87 ++++++++++ .../companion/solo/tlv/TLVMessageParser.java | 18 ++ .../companion/solo/tlv/TLVMessageTypes.java | 8 + ClientLib/src/main/res/values/strings.xml | 5 + 9 files changed, 399 insertions(+), 1 deletion(-) create mode 100644 ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloPanoOptions.java create mode 100644 ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloPanoStatus.java create mode 100644 ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloZiplineLock.java create mode 100644 ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloZiplineOptions.java diff --git a/ClientLib/build.gradle b/ClientLib/build.gradle index 6f5664746b..cf8f19aeeb 100644 --- a/ClientLib/build.gradle +++ b/ClientLib/build.gradle @@ -3,7 +3,7 @@ apply plugin: 'com.android.library' ext { VERSION_MAJOR = 2 VERSION_MINOR = 9 - VERSION_PATCH = 0 + VERSION_PATCH = 1 VERSION_SUFFIX = "release" PUBLISH_ARTIFACT_ID = 'dronekit-android' diff --git a/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloMessageShot.java b/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloMessageShot.java index f5fec3a54d..0a4ecb30fb 100644 --- a/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloMessageShot.java +++ b/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloMessageShot.java @@ -18,8 +18,13 @@ public abstract class SoloMessageShot extends TLVPacket { public static final int SHOT_SELFIE = 0; public static final int SHOT_ORBIT = 1; public static final int SHOT_CABLECAM = 2; + public static final int SHOT_ZIPLINE = 3; public static final int SHOT_FOLLOW = 5; public static final int SHOT_MPCC = 6; + public static final int SHOT_PANO = 7; + public static final int SHOT_REWIND = 8; + public static final int SHOT_TRANSECT = 9; + public static final int SHOT_RETURN_HOME = 10; /* Site Scan shots @@ -78,6 +83,21 @@ public static CharSequence getShotLabel(Context context, int shotType) { case SHOT_SCAN: return context.getString(R.string.label_scan); + case SHOT_ZIPLINE: + return context.getString(R.string.label_zipline); + + case SHOT_PANO: + return context.getString(R.string.label_pano); + + case SHOT_REWIND: + return context.getString(R.string.label_rewind); + + case SHOT_RETURN_HOME: + return context.getString(R.string.label_return_home); + + case SHOT_TRANSECT: + return context.getString(R.string.label_transect); + default: return null; } diff --git a/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloPanoOptions.java b/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloPanoOptions.java new file mode 100644 index 0000000000..2f55d29253 --- /dev/null +++ b/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloPanoOptions.java @@ -0,0 +1,157 @@ +package com.o3dr.services.android.lib.drone.companion.solo.tlv; + +import android.os.Parcel; +import android.support.annotation.IntDef; + +import java.nio.ByteBuffer; + +/** + * Created by phu on 6/24/16. + */ +public class SoloPanoOptions extends SoloShotOptions { + + public static final int MESSAGE_LENGTH = 12; + + /** + * Pano can automatically run, is it running? + */ + private static final int PANO_ON_VALUE = 1; + private static final int PANO_OFF_VALUE = 0; + + private boolean isRunning; + + /** + * Pano has multiple sub modes + */ + @IntDef({ + PANO_PREFERENCE_CYLINDRICAL, + PANO_PREFERENCE_SPHERICAL, + PANO_PREFERENCE_VIDEO + }) + public @interface PanoPreference{} + + public static final int PANO_PREFERENCE_CYLINDRICAL = 0; + public static final int PANO_PREFERENCE_SPHERICAL = 1; + public static final int PANO_PREFERENCE_VIDEO = 2; + @PanoPreference + private int panoPreference; + + /** + * Pan angle (used in cylindrical) + */ + private short panAngle; + + /** + * Yaw speed (used in video) + */ + private float degreesPerSecondYawSpeed; + + /** + * Camera FOV + */ + private float cameraFOV; + + public boolean isRunning() { + return isRunning; + } + + public void setRunning(boolean running) { + isRunning = running; + } + + @PanoPreference + public int getPanoPreference() { + return panoPreference; + } + + public void setPanoPreference(int panoPreference) { + this.panoPreference = panoPreference; + } + + public short getPanAngle() { + return panAngle; + } + + public void setPanAngle(short panAngle) { + this.panAngle = panAngle; + } + + public float getDegreesPerSecondYawSpeed() { + return degreesPerSecondYawSpeed; + } + + public void setDegreesPerSecondYawSpeed(float degreesPerSecondYawSpeed) { + this.degreesPerSecondYawSpeed = degreesPerSecondYawSpeed; + } + + public float getCameraFOV() { + return cameraFOV; + } + + public void setCameraFOV(float cameraFOV) { + this.cameraFOV = cameraFOV; + } + + public SoloPanoOptions(boolean isRunning, int panoPreference, short panAngle, float degreesPerSecondYawSpeed, float cameraFOV) { + super(TLVMessageTypes.TYPE_SOLO_PANO_OPTIONS, MESSAGE_LENGTH, PAUSED_CRUISE_SPEED); + this.panoPreference = panoPreference; + this.isRunning = isRunning; + this.panAngle = panAngle; + this.degreesPerSecondYawSpeed = degreesPerSecondYawSpeed; + this.cameraFOV = cameraFOV; + } + + SoloPanoOptions(ByteBuffer buffer) { + this(buffer.get() == PANO_ON_VALUE, buffer.get(), (short) buffer.getShort(), buffer.getFloat(), buffer.getFloat()); + } + + @Override + protected void getMessageValue(ByteBuffer valueCarrier) { + valueCarrier.put((byte) panoPreference); + valueCarrier.put((byte) (isRunning ? 1 : 0)); + valueCarrier.putShort(panAngle); + valueCarrier.putFloat(degreesPerSecondYawSpeed); + valueCarrier.putFloat(cameraFOV); + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + super.writeToParcel(dest, flags); + dest.writeByte((byte) panoPreference); + dest.writeByte(isRunning ? (byte) 1 : (byte) 0); + dest.writeInt(panAngle); + dest.writeFloat(degreesPerSecondYawSpeed); + dest.writeFloat(cameraFOV); + } + + protected SoloPanoOptions(Parcel in) { + super(in); + @PanoPreference int panoPreference = (int) in.readByte(); + this.panoPreference = panoPreference; + this.isRunning = in.readByte() != 0; + this.panAngle = (short) in.readInt(); + this.degreesPerSecondYawSpeed = in.readFloat(); + this.cameraFOV = in.readFloat(); + } + + public static final Creator CREATOR = new Creator() { + public SoloPanoOptions createFromParcel(Parcel source) { + return new SoloPanoOptions(source); + } + + public SoloPanoOptions[] newArray(int size) { + return new SoloPanoOptions[size]; + } + }; + + @Override + public String toString() { + return "SoloPanoOptions{" + + "panoPreference=" + panoPreference + + "isRunning=" + isRunning + + "panAngle=" + panAngle + + "degreesPerSecondYawSpeed=" + degreesPerSecondYawSpeed + + "cameraFOV=" + cameraFOV + + '}'; + } +} diff --git a/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloPanoStatus.java b/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloPanoStatus.java new file mode 100644 index 0000000000..f0e03e7cb5 --- /dev/null +++ b/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloPanoStatus.java @@ -0,0 +1,61 @@ +package com.o3dr.services.android.lib.drone.companion.solo.tlv; + +import android.os.Parcel; + +import java.nio.ByteBuffer; + +/** + * Created by phu on 7/17/16. + */ +public class SoloPanoStatus extends TLVPacket { + public static final int MESSAGE_LENGTH = 2; + private int currentStep; + private int totalSteps; + + public SoloPanoStatus(int currentStep, int totalSteps) { + super(TLVMessageTypes.TYPE_SOLO_PANO_OPTIONS, MESSAGE_LENGTH); + this.currentStep = currentStep; + this.totalSteps = totalSteps; + } + + SoloPanoStatus(ByteBuffer buffer) { + this((int) buffer.get(), (int) buffer.get()); + } + + @Override + protected void getMessageValue(ByteBuffer valueCarrier) { + valueCarrier.put((byte) currentStep); + valueCarrier.put((byte) totalSteps); + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + super.writeToParcel(dest, flags); + dest.writeByte((byte) currentStep); + dest.writeByte((byte) totalSteps); + } + + protected SoloPanoStatus(Parcel in) { + super(in); + this.currentStep = (int) in.readByte(); + this.totalSteps = (int) in.readByte(); + } + + public static final Creator CREATOR = new Creator() { + public SoloPanoStatus createFromParcel(Parcel source) { + return new SoloPanoStatus(source); + } + public SoloPanoStatus[] newArray(int size) { + return new SoloPanoStatus[size]; + } + }; + + @Override + public String toString() { + return "SoloPanoStatus{" + + "currentStep=" + currentStep + + "totalSteps=" + totalSteps + + '}'; + } + +} diff --git a/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloZiplineLock.java b/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloZiplineLock.java new file mode 100644 index 0000000000..25f3bb6a02 --- /dev/null +++ b/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloZiplineLock.java @@ -0,0 +1,42 @@ +package com.o3dr.services.android.lib.drone.companion.solo.tlv; + +import android.os.Parcel; + +import java.nio.ByteBuffer; + +/** + * Created by phu on 7/6/16. + */ +public class SoloZiplineLock extends TLVPacket { + public SoloZiplineLock() { + super(TLVMessageTypes.TYPE_SOLO_ZIPLINE_LOCK, 0); + } + + @Override + protected void getMessageValue(ByteBuffer valueCarrier) { + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + super.writeToParcel(dest, flags); + } + + protected SoloZiplineLock(Parcel in) { + super(in); + } + + public static final Creator CREATOR = new Creator() { + public SoloZiplineLock createFromParcel(Parcel source) { + return new SoloZiplineLock(source); + } + + public SoloZiplineLock[] newArray(int size) { + return new SoloZiplineLock[size]; + } + }; + + @Override + public String toString() { + return "SoloZiplineLock{}"; + } +} diff --git a/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloZiplineOptions.java b/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloZiplineOptions.java new file mode 100644 index 0000000000..8f2b6bbfde --- /dev/null +++ b/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloZiplineOptions.java @@ -0,0 +1,87 @@ +package com.o3dr.services.android.lib.drone.companion.solo.tlv; + +import android.os.Parcel; + +import java.nio.ByteBuffer; + +/** + * Created by phu on 7/6/16. + */ +public class SoloZiplineOptions extends SoloShotOptions { + public static final int MESSAGE_LENGTH = 6; + + /** + * Zipline can do a 3D path (with altitude) or 2d + */ + private boolean is3D; + + /** + * Zipline can lock the camera on a GPS spot while the copter is moving + */ + private boolean cameraLock; + + public boolean is3D() { + return is3D; + } + + public void setIs3D(boolean is3D) { + this.is3D = is3D; + } + + public boolean isCameraLock() { + return cameraLock; + } + + public void setCameraLock(boolean cameraLock) { + this.cameraLock = cameraLock; + } + + public SoloZiplineOptions(float cruiseSpeed, boolean is3D, boolean cameraLock) { + super(TLVMessageTypes.TYPE_SOLO_ZIPLINE_OPTIONS, MESSAGE_LENGTH, cruiseSpeed); + this.is3D = is3D; + this.cameraLock = cameraLock; + } + + SoloZiplineOptions(ByteBuffer buffer) { + this(buffer.getFloat(), buffer.get() == 1, buffer.get() == 1); + } + + @Override + protected void getMessageValue(ByteBuffer valueCarrier) { + super.getMessageValue(valueCarrier); + valueCarrier.put((byte) (is3D ? 1 : 0)); + valueCarrier.put((byte) (cameraLock ? 1 : 0)); + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + super.writeToParcel(dest, flags); + dest.writeByte(is3D ? (byte) 1 : (byte) 0); + dest.writeByte(cameraLock ? (byte) 1 : (byte) 0); + } + + protected SoloZiplineOptions(Parcel in) { + super(in); + this.is3D = in.readByte() != 0; + this.cameraLock = in.readByte() != 0; + } + + public static final Creator CREATOR = new Creator() { + public SoloZiplineOptions createFromParcel(Parcel source) { + return new SoloZiplineOptions(source); + } + + public SoloZiplineOptions[] newArray(int size) { + return new SoloZiplineOptions[size]; + } + }; + + @Override + public String toString() { + return "SoloZiplineOptions{" + + "cruiseSpeed=" + getCruiseSpeed() + + "is3D=" + is3D + + "cameraLock=" + cameraLock + + '}'; + } +} diff --git a/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/TLVMessageParser.java b/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/TLVMessageParser.java index 0be0641668..3d8461f97c 100644 --- a/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/TLVMessageParser.java +++ b/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/TLVMessageParser.java @@ -44,6 +44,7 @@ import static com.o3dr.services.android.lib.drone.companion.solo.tlv.TLVMessageTypes.TYPE_SOLO_MESSAGE_RECORD_POSITION; import static com.o3dr.services.android.lib.drone.companion.solo.tlv.TLVMessageTypes.TYPE_SOLO_MESSAGE_SET_CURRENT_SHOT; import static com.o3dr.services.android.lib.drone.companion.solo.tlv.TLVMessageTypes.TYPE_SOLO_MESSAGE_SHOT_MANAGER_ERROR; +import static com.o3dr.services.android.lib.drone.companion.solo.tlv.TLVMessageTypes.TYPE_SOLO_PANO_OPTIONS; import static com.o3dr.services.android.lib.drone.companion.solo.tlv.TLVMessageTypes.TYPE_SOLO_PAUSE_BUTTON; import static com.o3dr.services.android.lib.drone.companion.solo.tlv.TLVMessageTypes.TYPE_SOLO_SCAN_START; import static com.o3dr.services.android.lib.drone.companion.solo.tlv.TLVMessageTypes.TYPE_SOLO_SET_BUTTON_SETTING; @@ -58,6 +59,8 @@ import static com.o3dr.services.android.lib.drone.companion.solo.tlv.TLVMessageTypes.TYPE_SOLO_SPLINE_RECORD; import static com.o3dr.services.android.lib.drone.companion.solo.tlv.TLVMessageTypes.TYPE_SOLO_SPLINE_SEEK; import static com.o3dr.services.android.lib.drone.companion.solo.tlv.TLVMessageTypes.TYPE_SOLO_SURVEY_START; +import static com.o3dr.services.android.lib.drone.companion.solo.tlv.TLVMessageTypes.TYPE_SOLO_ZIPLINE_LOCK; +import static com.o3dr.services.android.lib.drone.companion.solo.tlv.TLVMessageTypes.TYPE_SOLO_ZIPLINE_OPTIONS; /** * Utility class to generate tlv packet from received bytes. @@ -274,6 +277,21 @@ public static List parseTLVPacket(ByteBuffer packetBuffer) { break; } + case TYPE_SOLO_PANO_OPTIONS: { + packet = new SoloPanoOptions(packetBuffer); + break; + } + + case TYPE_SOLO_ZIPLINE_OPTIONS: { + packet = new SoloZiplineOptions(packetBuffer); + break; + } + + case TYPE_SOLO_ZIPLINE_LOCK: { + packet = new SoloZiplineLock(); + break; + } + /************************ Site Scan tlv packets **************/ case TYPE_SOLO_INSPECT_START:{ packet = new SoloInspectStart(packetBuffer); diff --git a/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/TLVMessageTypes.java b/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/TLVMessageTypes.java index 1ed03112b9..a815d847fa 100644 --- a/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/TLVMessageTypes.java +++ b/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/TLVMessageTypes.java @@ -19,6 +19,14 @@ public class TLVMessageTypes { public static final int TYPE_SOLO_SHOT_OPTIONS = 20; public static final int TYPE_SOLO_SHOT_ERROR = 21; + public static final int TYPE_SOLO_PANO_OPTIONS = 22; + public static final int TYPE_SOLO_ZIPLINE_OPTIONS = 23; + public static final int TYPE_SOLO_REWIND_OPTIONS = 24; + public static final int TYPE_SOLO_PANO_STATUS = 25; + public static final int TYPE_RTL_HOME_POINT = 26; + public static final int TYPE_SOLO_POWER_STATE = 27; + public static final int TYPE_SOLO_ZIPLINE_LOCK = 28; + public static final int TYPE_SOLO_MESSAGE_SHOT_MANAGER_ERROR = 1000; public static final int TYPE_SOLO_CABLE_CAM_WAYPOINT = 1001; diff --git a/ClientLib/src/main/res/values/strings.xml b/ClientLib/src/main/res/values/strings.xml index 1b088e5d76..1782a93bab 100644 --- a/ClientLib/src/main/res/values/strings.xml +++ b/ClientLib/src/main/res/values/strings.xml @@ -59,6 +59,11 @@ Inspect Survey Scan + Pano + Zipline + Rewind + Return Home + Transect FLY: Manual From 99e37ce05abc6af3c8acaeba9e62d10e58386144 Mon Sep 17 00:00:00 2001 From: Phu Nguyen Date: Wed, 20 Jul 2016 22:29:51 -0700 Subject: [PATCH 3/6] Update Pano messages --- .../drone/companion/solo/tlv/SoloPanoOptions.java | 6 +++--- .../drone/companion/solo/tlv/SoloPanoStatus.java | 13 +++++++++++-- .../drone/companion/solo/tlv/TLVMessageParser.java | 6 ++++++ 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloPanoOptions.java b/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloPanoOptions.java index 2f55d29253..3501e85cc0 100644 --- a/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloPanoOptions.java +++ b/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloPanoOptions.java @@ -92,7 +92,7 @@ public void setCameraFOV(float cameraFOV) { this.cameraFOV = cameraFOV; } - public SoloPanoOptions(boolean isRunning, int panoPreference, short panAngle, float degreesPerSecondYawSpeed, float cameraFOV) { + public SoloPanoOptions(int panoPreference, boolean isRunning, short panAngle, float degreesPerSecondYawSpeed, float cameraFOV) { super(TLVMessageTypes.TYPE_SOLO_PANO_OPTIONS, MESSAGE_LENGTH, PAUSED_CRUISE_SPEED); this.panoPreference = panoPreference; this.isRunning = isRunning; @@ -102,7 +102,7 @@ public SoloPanoOptions(boolean isRunning, int panoPreference, short panAngle, fl } SoloPanoOptions(ByteBuffer buffer) { - this(buffer.get() == PANO_ON_VALUE, buffer.get(), (short) buffer.getShort(), buffer.getFloat(), buffer.getFloat()); + this(buffer.get(), buffer.get() == PANO_ON_VALUE, (short) buffer.getShort(), buffer.getFloat(), buffer.getFloat()); } @Override @@ -126,7 +126,7 @@ public void writeToParcel(Parcel dest, int flags) { protected SoloPanoOptions(Parcel in) { super(in); - @PanoPreference int panoPreference = (int) in.readByte(); + @PanoPreference int panoPreference = (int)in.readByte(); this.panoPreference = panoPreference; this.isRunning = in.readByte() != 0; this.panAngle = (short) in.readInt(); diff --git a/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloPanoStatus.java b/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloPanoStatus.java index f0e03e7cb5..7c8e0e6297 100644 --- a/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloPanoStatus.java +++ b/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloPanoStatus.java @@ -8,12 +8,21 @@ * Created by phu on 7/17/16. */ public class SoloPanoStatus extends TLVPacket { - public static final int MESSAGE_LENGTH = 2; + private int currentStep; + public static final int MESSAGE_LENGTH = 2; + + public int getCurrentStep() { + return currentStep; + } + private int totalSteps; + public int getTotalSteps() { + return totalSteps; + } public SoloPanoStatus(int currentStep, int totalSteps) { - super(TLVMessageTypes.TYPE_SOLO_PANO_OPTIONS, MESSAGE_LENGTH); + super(TLVMessageTypes.TYPE_SOLO_PANO_STATUS, MESSAGE_LENGTH); this.currentStep = currentStep; this.totalSteps = totalSteps; } diff --git a/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/TLVMessageParser.java b/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/TLVMessageParser.java index 3d8461f97c..0ba4291f57 100644 --- a/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/TLVMessageParser.java +++ b/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/TLVMessageParser.java @@ -45,6 +45,7 @@ import static com.o3dr.services.android.lib.drone.companion.solo.tlv.TLVMessageTypes.TYPE_SOLO_MESSAGE_SET_CURRENT_SHOT; import static com.o3dr.services.android.lib.drone.companion.solo.tlv.TLVMessageTypes.TYPE_SOLO_MESSAGE_SHOT_MANAGER_ERROR; import static com.o3dr.services.android.lib.drone.companion.solo.tlv.TLVMessageTypes.TYPE_SOLO_PANO_OPTIONS; +import static com.o3dr.services.android.lib.drone.companion.solo.tlv.TLVMessageTypes.TYPE_SOLO_PANO_STATUS; import static com.o3dr.services.android.lib.drone.companion.solo.tlv.TLVMessageTypes.TYPE_SOLO_PAUSE_BUTTON; import static com.o3dr.services.android.lib.drone.companion.solo.tlv.TLVMessageTypes.TYPE_SOLO_SCAN_START; import static com.o3dr.services.android.lib.drone.companion.solo.tlv.TLVMessageTypes.TYPE_SOLO_SET_BUTTON_SETTING; @@ -282,6 +283,11 @@ public static List parseTLVPacket(ByteBuffer packetBuffer) { break; } + case TYPE_SOLO_PANO_STATUS: { + packet = new SoloPanoStatus(packetBuffer); + break; + } + case TYPE_SOLO_ZIPLINE_OPTIONS: { packet = new SoloZiplineOptions(packetBuffer); break; From 89425a899ee47f2262369fe19f4e3bf4c856b558 Mon Sep 17 00:00:00 2001 From: Phu Nguyen Date: Sun, 24 Jul 2016 01:53:37 -0700 Subject: [PATCH 4/6] added Return To Me home point message Added Rewind options message --- .../tlv/SoloReturnHomeLocationMessage.java | 61 ++++++++++ .../companion/solo/tlv/SoloRewindOptions.java | 104 ++++++++++++++++++ .../companion/solo/tlv/TLVMessageParser.java | 15 +++ 3 files changed, 180 insertions(+) create mode 100644 ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloReturnHomeLocationMessage.java create mode 100644 ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloRewindOptions.java diff --git a/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloReturnHomeLocationMessage.java b/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloReturnHomeLocationMessage.java new file mode 100644 index 0000000000..81049cad60 --- /dev/null +++ b/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloReturnHomeLocationMessage.java @@ -0,0 +1,61 @@ +package com.o3dr.services.android.lib.drone.companion.solo.tlv; + +import android.os.Parcel; + +import com.o3dr.services.android.lib.coordinate.LatLongAlt; + +import java.nio.ByteBuffer; + +/** + * Created by phu on 7/21/16. + */ +public class SoloReturnHomeLocationMessage extends TLVPacket { + + private LatLongAlt coordinate; + + public SoloReturnHomeLocationMessage(double latitude, double longitude, float altitudeInMeters) { + super(TLVMessageTypes.TYPE_RTL_HOME_POINT, 20); + this.coordinate = new LatLongAlt(latitude, longitude, altitudeInMeters); + } + + public SoloReturnHomeLocationMessage(LatLongAlt coordinate){ + super(TLVMessageTypes.TYPE_RTL_HOME_POINT, 20); + this.coordinate = coordinate; + } + + public LatLongAlt getCoordinate() { + return coordinate; + } + + public void setCoordinate(LatLongAlt coordinate) { + this.coordinate = coordinate; + } + + @Override + protected void getMessageValue(ByteBuffer valueCarrier) { + valueCarrier.putDouble(coordinate.getLatitude()); + valueCarrier.putDouble(coordinate.getLongitude()); + valueCarrier.putFloat((float) coordinate.getAltitude()); + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + super.writeToParcel(dest, flags); + dest.writeParcelable(this.coordinate, 0); + } + + protected SoloReturnHomeLocationMessage(Parcel in) { + super(in); + this.coordinate = in.readParcelable(LatLongAlt.class.getClassLoader()); + } + + public static final Creator CREATOR = new Creator() { + public SoloReturnHomeLocationMessage createFromParcel(Parcel source) { + return new SoloReturnHomeLocationMessage(source); + } + + public SoloReturnHomeLocationMessage[] newArray(int size) { + return new SoloReturnHomeLocationMessage[size]; + } + }; +} diff --git a/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloRewindOptions.java b/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloRewindOptions.java new file mode 100644 index 0000000000..b225586a26 --- /dev/null +++ b/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloRewindOptions.java @@ -0,0 +1,104 @@ +package com.o3dr.services.android.lib.drone.companion.solo.tlv; + +import android.os.Parcel; +import android.support.annotation.IntDef; + +import java.nio.ByteBuffer; + +/** + * Created by phu on 7/21/16. + */ +public class SoloRewindOptions extends TLVPacket { + + public static final int MESSAGE_LENGTH = 6; + + public static final int RETURN_AND_HOVER = 1; + public static final int RETURN_AND_LAND = 0; + @IntDef({ + RETURN_AND_HOVER, + RETURN_AND_LAND, + }) + public @interface ReturnPreference{} + private boolean isRewindEnabled; + @ReturnPreference + private int returnPreference; + + private float rewindDistance; + + public float getRewindDistance() { + return rewindDistance; + } + + public void setRewindDistance(float rewindDistance) { + this.rewindDistance = rewindDistance; + } + + public int getReturnPreference() { + return returnPreference; + } + + public void setReturnPreference(int returnPreference) { + this.returnPreference = returnPreference; + } + + public boolean isRewindEnabled() { + return isRewindEnabled; + } + + public void setRewindEnabled(boolean rewindEnabled) { + isRewindEnabled = rewindEnabled; + } + + public SoloRewindOptions(boolean isRewindEnabled, int returnPreference, float rewindDistance) { + super(TLVMessageTypes.TYPE_SOLO_REWIND_OPTIONS, MESSAGE_LENGTH); + this.isRewindEnabled = isRewindEnabled; + this.returnPreference = returnPreference; + this.rewindDistance = rewindDistance; + } + + SoloRewindOptions(ByteBuffer byteBuffer) { + this(byteBuffer.get() == 1, (int) byteBuffer.get(), byteBuffer.getFloat()); + } + + @Override + protected void getMessageValue(ByteBuffer valueCarrier) { + valueCarrier.put((byte) (isRewindEnabled ? 1 : 0)); + valueCarrier.put((byte) returnPreference); + valueCarrier.putFloat(rewindDistance); + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + super.writeToParcel(dest, flags); + dest.writeByte((byte) (isRewindEnabled ? 1 : 0)); + dest.writeByte((byte) returnPreference); + dest.writeFloat(rewindDistance); + } + + protected SoloRewindOptions(Parcel in) { + super(in); + this.isRewindEnabled = in.readByte() != 0; + @ReturnPreference int pref = (int) in.readByte(); + this.returnPreference = pref; + this.rewindDistance = in.readFloat(); + } + + public static final Creator CREATOR = new Creator() { + public SoloRewindOptions createFromParcel(Parcel source) { + return new SoloRewindOptions(source); + } + + public SoloRewindOptions[] newArray(int size) { + return new SoloRewindOptions[size]; + } + }; + + @Override + public String toString() { + return "SoloRewindOptions{" + + "isRewindEnabled=" + isRewindEnabled + + "returnPreference=" + returnPreference + + "rewindDistance=" + rewindDistance + + '}'; + } +} diff --git a/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/TLVMessageParser.java b/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/TLVMessageParser.java index 0ba4291f57..d5aee45054 100644 --- a/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/TLVMessageParser.java +++ b/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/TLVMessageParser.java @@ -24,6 +24,7 @@ import java.util.List; import static com.o3dr.services.android.lib.drone.companion.solo.tlv.TLVMessageTypes.TYPE_ARTOO_INPUT_REPORT_MESSAGE; +import static com.o3dr.services.android.lib.drone.companion.solo.tlv.TLVMessageTypes.TYPE_RTL_HOME_POINT; import static com.o3dr.services.android.lib.drone.companion.solo.tlv.TLVMessageTypes.TYPE_SOLO_CABLE_CAM_OPTIONS; import static com.o3dr.services.android.lib.drone.companion.solo.tlv.TLVMessageTypes.TYPE_SOLO_CABLE_CAM_WAYPOINT; import static com.o3dr.services.android.lib.drone.companion.solo.tlv.TLVMessageTypes.TYPE_SOLO_FOLLOW_OPTIONS; @@ -47,6 +48,7 @@ import static com.o3dr.services.android.lib.drone.companion.solo.tlv.TLVMessageTypes.TYPE_SOLO_PANO_OPTIONS; import static com.o3dr.services.android.lib.drone.companion.solo.tlv.TLVMessageTypes.TYPE_SOLO_PANO_STATUS; import static com.o3dr.services.android.lib.drone.companion.solo.tlv.TLVMessageTypes.TYPE_SOLO_PAUSE_BUTTON; +import static com.o3dr.services.android.lib.drone.companion.solo.tlv.TLVMessageTypes.TYPE_SOLO_REWIND_OPTIONS; import static com.o3dr.services.android.lib.drone.companion.solo.tlv.TLVMessageTypes.TYPE_SOLO_SCAN_START; import static com.o3dr.services.android.lib.drone.companion.solo.tlv.TLVMessageTypes.TYPE_SOLO_SET_BUTTON_SETTING; import static com.o3dr.services.android.lib.drone.companion.solo.tlv.TLVMessageTypes.TYPE_SOLO_SHOT_ERROR; @@ -298,6 +300,19 @@ public static List parseTLVPacket(ByteBuffer packetBuffer) { break; } + case TYPE_RTL_HOME_POINT: { + final double latitude = packetBuffer.getDouble(); + final double longitude = packetBuffer.getDouble(); + final float altitude = packetBuffer.getFloat(); + packet = new SoloReturnHomeLocationMessage(latitude, longitude, altitude); + break; + } + + case TYPE_SOLO_REWIND_OPTIONS: { + packet = new SoloRewindOptions(packetBuffer); + break; + } + /************************ Site Scan tlv packets **************/ case TYPE_SOLO_INSPECT_START:{ packet = new SoloInspectStart(packetBuffer); From 8630d8993aea14e73fbb7b45f59eb17f7ae98d92 Mon Sep 17 00:00:00 2001 From: Phu Nguyen Date: Mon, 25 Jul 2016 09:56:34 -0700 Subject: [PATCH 5/6] Updated based on PR comments - Pano and Rewind options: restrict input of preference parameters - SoloZiplineLock - removed necessary code - build.gradle - revert back to 1.5.0 --- .../lib/drone/companion/solo/tlv/SoloPanoOptions.java | 2 +- .../companion/solo/tlv/SoloReturnHomeLocationMessage.java | 2 +- .../lib/drone/companion/solo/tlv/SoloRewindOptions.java | 3 ++- .../lib/drone/companion/solo/tlv/SoloZiplineLock.java | 5 ----- build.gradle | 2 +- 5 files changed, 5 insertions(+), 9 deletions(-) diff --git a/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloPanoOptions.java b/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloPanoOptions.java index 3501e85cc0..6222f8bbae 100644 --- a/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloPanoOptions.java +++ b/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloPanoOptions.java @@ -64,7 +64,7 @@ public int getPanoPreference() { return panoPreference; } - public void setPanoPreference(int panoPreference) { + public void setPanoPreference(@PanoPreference int panoPreference) { this.panoPreference = panoPreference; } diff --git a/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloReturnHomeLocationMessage.java b/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloReturnHomeLocationMessage.java index 81049cad60..031d764784 100644 --- a/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloReturnHomeLocationMessage.java +++ b/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloReturnHomeLocationMessage.java @@ -41,7 +41,7 @@ protected void getMessageValue(ByteBuffer valueCarrier) { @Override public void writeToParcel(Parcel dest, int flags) { super.writeToParcel(dest, flags); - dest.writeParcelable(this.coordinate, 0); + dest.writeParcelable(this.coordinate, flags); } protected SoloReturnHomeLocationMessage(Parcel in) { diff --git a/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloRewindOptions.java b/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloRewindOptions.java index b225586a26..b58fe9feed 100644 --- a/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloRewindOptions.java +++ b/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloRewindOptions.java @@ -33,11 +33,12 @@ public void setRewindDistance(float rewindDistance) { this.rewindDistance = rewindDistance; } + @ReturnPreference public int getReturnPreference() { return returnPreference; } - public void setReturnPreference(int returnPreference) { + public void setReturnPreference(@ReturnPreference int returnPreference) { this.returnPreference = returnPreference; } diff --git a/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloZiplineLock.java b/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloZiplineLock.java index 25f3bb6a02..08c4fc4a91 100644 --- a/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloZiplineLock.java +++ b/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloZiplineLock.java @@ -16,11 +16,6 @@ public SoloZiplineLock() { protected void getMessageValue(ByteBuffer valueCarrier) { } - @Override - public void writeToParcel(Parcel dest, int flags) { - super.writeToParcel(dest, flags); - } - protected SoloZiplineLock(Parcel in) { super(in); } diff --git a/build.gradle b/build.gradle index ee85b0c85c..3dc9ef094d 100644 --- a/build.gradle +++ b/build.gradle @@ -18,7 +18,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:2.1.2' + classpath 'com.android.tools.build:gradle:1.5.0' classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.2' classpath 'io.fabric.tools:gradle:1.21.2' From 7e809effa1ac09f727186aae5d29dae9487c72a1 Mon Sep 17 00:00:00 2001 From: Phu Nguyen Date: Mon, 25 Jul 2016 17:31:55 -0700 Subject: [PATCH 6/6] Updated per PR review - Made PanoOptions a subclass of TLVPacket since it does not use anything from the previous parent (SoloShotOptions) - changed PanoStatus variables to byte instead of int --- .../companion/solo/tlv/SoloPanoOptions.java | 4 +-- .../companion/solo/tlv/SoloPanoStatus.java | 35 ++++++++++--------- 2 files changed, 20 insertions(+), 19 deletions(-) diff --git a/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloPanoOptions.java b/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloPanoOptions.java index 6222f8bbae..b1bc4663c7 100644 --- a/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloPanoOptions.java +++ b/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloPanoOptions.java @@ -8,7 +8,7 @@ /** * Created by phu on 6/24/16. */ -public class SoloPanoOptions extends SoloShotOptions { +public class SoloPanoOptions extends TLVPacket { public static final int MESSAGE_LENGTH = 12; @@ -93,7 +93,7 @@ public void setCameraFOV(float cameraFOV) { } public SoloPanoOptions(int panoPreference, boolean isRunning, short panAngle, float degreesPerSecondYawSpeed, float cameraFOV) { - super(TLVMessageTypes.TYPE_SOLO_PANO_OPTIONS, MESSAGE_LENGTH, PAUSED_CRUISE_SPEED); + super(TLVMessageTypes.TYPE_SOLO_PANO_OPTIONS, MESSAGE_LENGTH); this.panoPreference = panoPreference; this.isRunning = isRunning; this.panAngle = panAngle; diff --git a/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloPanoStatus.java b/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloPanoStatus.java index 7c8e0e6297..37e1e01997 100644 --- a/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloPanoStatus.java +++ b/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloPanoStatus.java @@ -9,45 +9,38 @@ */ public class SoloPanoStatus extends TLVPacket { - private int currentStep; public static final int MESSAGE_LENGTH = 2; - public int getCurrentStep() { - return currentStep; - } - - private int totalSteps; - public int getTotalSteps() { - return totalSteps; - } + private byte currentStep; + private byte totalSteps; - public SoloPanoStatus(int currentStep, int totalSteps) { + public SoloPanoStatus(byte currentStep, byte totalSteps) { super(TLVMessageTypes.TYPE_SOLO_PANO_STATUS, MESSAGE_LENGTH); this.currentStep = currentStep; this.totalSteps = totalSteps; } SoloPanoStatus(ByteBuffer buffer) { - this((int) buffer.get(), (int) buffer.get()); + this(buffer.get(), buffer.get()); } @Override protected void getMessageValue(ByteBuffer valueCarrier) { - valueCarrier.put((byte) currentStep); - valueCarrier.put((byte) totalSteps); + valueCarrier.put(currentStep); + valueCarrier.put(totalSteps); } @Override public void writeToParcel(Parcel dest, int flags) { super.writeToParcel(dest, flags); - dest.writeByte((byte) currentStep); - dest.writeByte((byte) totalSteps); + dest.writeByte(currentStep); + dest.writeByte(totalSteps); } protected SoloPanoStatus(Parcel in) { super(in); - this.currentStep = (int) in.readByte(); - this.totalSteps = (int) in.readByte(); + this.currentStep = in.readByte(); + this.totalSteps = in.readByte(); } public static final Creator CREATOR = new Creator() { @@ -67,4 +60,12 @@ public String toString() { '}'; } + public int getCurrentStep() { + return currentStep; + } + + public int getTotalSteps() { + return totalSteps; + } + }