From 1b6d3276fd62c367accd165e55826c72ea071bc9 Mon Sep 17 00:00:00 2001 From: ne0fhyk Date: Tue, 8 Mar 2016 13:10:42 -0800 Subject: [PATCH 01/26] Update client library dependencies to fix travis build issues --- ClientLib/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ClientLib/build.gradle b/ClientLib/build.gradle index dd991d43e3..e7adf85cc5 100644 --- a/ClientLib/build.gradle +++ b/ClientLib/build.gradle @@ -58,8 +58,8 @@ dependencies { compile "com.android.support:support-v4:${support_lib_version}" compile "com.google.android.gms:play-services-base:${play_services_version}" - compile project(':Mavlink') - compile files('libs/Mavlink.jar') + debugCompile project(':Mavlink') + releaseCompile files('libs/Mavlink.jar') } assemble.dependsOn ':Mavlink:jar' From bc98385bcdfe92057ed68389493dda64281ed870 Mon Sep 17 00:00:00 2001 From: ne0fhyk Date: Thu, 10 Mar 2016 13:19:47 -0800 Subject: [PATCH 02/26] Disable stream rates update for solo --- .../core/drone/autopilot/apm/solo/ArduSolo.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/ServiceApp/src/org/droidplanner/services/android/core/drone/autopilot/apm/solo/ArduSolo.java b/ServiceApp/src/org/droidplanner/services/android/core/drone/autopilot/apm/solo/ArduSolo.java index cff21e13fa..80a8c42200 100644 --- a/ServiceApp/src/org/droidplanner/services/android/core/drone/autopilot/apm/solo/ArduSolo.java +++ b/ServiceApp/src/org/droidplanner/services/android/core/drone/autopilot/apm/solo/ArduSolo.java @@ -39,6 +39,7 @@ import org.droidplanner.services.android.core.drone.autopilot.apm.ArduCopter; import org.droidplanner.services.android.core.drone.variables.ApmModes; import org.droidplanner.services.android.core.drone.variables.HeartBeat; +import org.droidplanner.services.android.core.drone.variables.StreamRates; import org.droidplanner.services.android.core.firmware.FirmwareType; import org.droidplanner.services.android.core.model.AutopilotWarningParser; import org.droidplanner.services.android.utils.SoloApiUtils; @@ -174,6 +175,15 @@ public SoloComp getSoloComp() { return soloComp; } + /** + * No need to update the stream rates for Solo as it's being set by the companion computer + * @return + */ + @Override + public StreamRates getStreamRates() { + return null; + } + @Override public int getType() { return MAV_TYPE.MAV_TYPE_QUADROTOR; From cd79db63e309b83dbd5e77ac35d14e38d83f878b Mon Sep 17 00:00:00 2001 From: ne0fhyk Date: Sat, 12 Mar 2016 21:06:44 -0800 Subject: [PATCH 03/26] Fix the issue causing follow exit on follow mode switch --- .../services/android/core/gcs/follow/Follow.java | 13 ++++++++++--- .../android/core/gcs/follow/FollowAlgorithm.java | 11 +---------- 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/ServiceApp/src/org/droidplanner/services/android/core/gcs/follow/Follow.java b/ServiceApp/src/org/droidplanner/services/android/core/gcs/follow/Follow.java index ae765dded3..b622ddfe0c 100644 --- a/ServiceApp/src/org/droidplanner/services/android/core/gcs/follow/Follow.java +++ b/ServiceApp/src/org/droidplanner/services/android/core/gcs/follow/Follow.java @@ -2,17 +2,19 @@ import android.os.Handler; +import com.o3dr.services.android.lib.drone.action.ControlActions; import com.o3dr.services.android.lib.drone.attribute.AttributeEvent; +import com.o3dr.services.android.lib.model.action.Action; import org.droidplanner.services.android.core.drone.DroneInterfaces.DroneEventsType; import org.droidplanner.services.android.core.drone.DroneInterfaces.OnDroneListener; +import org.droidplanner.services.android.core.drone.autopilot.MavLinkDrone; import org.droidplanner.services.android.core.drone.manager.MavLinkDroneManager; import org.droidplanner.services.android.core.drone.variables.GuidedPoint; import org.droidplanner.services.android.core.drone.variables.State; import org.droidplanner.services.android.core.gcs.location.Location; import org.droidplanner.services.android.core.gcs.location.Location.LocationFinder; import org.droidplanner.services.android.core.gcs.location.Location.LocationReceiver; -import org.droidplanner.services.android.core.drone.autopilot.MavLinkDrone; public class Follow implements OnDroneListener, LocationReceiver { @@ -57,7 +59,6 @@ public void toggleFollowMeState() { } else { if (droneMgr.isConnected()) { if (droneState.isArmed()) { - GuidedPoint.changeToGuidedMode(drone, null); enableFollowMe(); } else { state = FollowStates.FOLLOW_DRONE_NOT_ARMED; @@ -69,7 +70,8 @@ public void toggleFollowMeState() { } private void enableFollowMe() { - lastLocation = null; + GuidedPoint.changeToGuidedMode(droneMgr.getDrone(), null); + state = FollowStates.FOLLOW_START; locationFinder.enableLocationUpdates(); @@ -88,6 +90,11 @@ private void disableFollowMe() { state = FollowStates.FOLLOW_END; droneMgr.onAttributeEvent(AttributeEvent.FOLLOW_STOP, null, false); } + + final MavLinkDrone drone = droneMgr.getDrone(); + if (GuidedPoint.isGuidedMode(drone)) { + droneMgr.getDrone().executeAsyncAction(new Action(ControlActions.ACTION_SEND_BRAKE_VEHICLE), null); + } } public boolean isEnabled() { diff --git a/ServiceApp/src/org/droidplanner/services/android/core/gcs/follow/FollowAlgorithm.java b/ServiceApp/src/org/droidplanner/services/android/core/gcs/follow/FollowAlgorithm.java index 449b28ef92..60c8fffa99 100644 --- a/ServiceApp/src/org/droidplanner/services/android/core/gcs/follow/FollowAlgorithm.java +++ b/ServiceApp/src/org/droidplanner/services/android/core/gcs/follow/FollowAlgorithm.java @@ -2,14 +2,10 @@ import android.os.Handler; -import com.o3dr.services.android.lib.drone.action.ControlActions; -import com.o3dr.services.android.lib.model.action.Action; - +import org.droidplanner.services.android.core.drone.autopilot.MavLinkDrone; import org.droidplanner.services.android.core.drone.manager.MavLinkDroneManager; -import org.droidplanner.services.android.core.drone.variables.GuidedPoint; import org.droidplanner.services.android.core.gcs.location.Location; import org.droidplanner.services.android.core.gcs.roi.ROIEstimator; -import org.droidplanner.services.android.core.drone.autopilot.MavLinkDrone; import java.util.Collections; import java.util.Map; @@ -40,11 +36,6 @@ public void enableFollow() { public void disableFollow() { if (isFollowEnabled.compareAndSet(true, false)) { - final MavLinkDrone drone = droneMgr.getDrone(); - if (GuidedPoint.isGuidedMode(drone)) { - droneMgr.getDrone().executeAsyncAction(new Action(ControlActions.ACTION_SEND_BRAKE_VEHICLE), null); - } - if (roiEstimator != null) roiEstimator.disableFollow(); } From 1186254feb57f7909bb0d7bdfc53edecdaaef37f Mon Sep 17 00:00:00 2001 From: ne0fhyk Date: Sun, 13 Mar 2016 09:35:53 -0700 Subject: [PATCH 04/26] Add method to the VehicleApi to update the vehicle data stream rate. --- .../o3dr/android/client/apis/VehicleApi.java | 14 ++++++ .../lib/drone/action/StateActions.java | 5 +++ ClientLib/src/main/res/values/version.xml | 2 +- .../generic/GenericMavLinkDrone.java | 22 ++++++++- .../core/drone/variables/StreamRates.java | 13 ++++++ .../utils/prefs/DroidPlannerPrefs.java | 45 +++---------------- 6 files changed, 59 insertions(+), 42 deletions(-) diff --git a/ClientLib/src/main/java/com/o3dr/android/client/apis/VehicleApi.java b/ClientLib/src/main/java/com/o3dr/android/client/apis/VehicleApi.java index 073a80c293..1ccd2b474b 100644 --- a/ClientLib/src/main/java/com/o3dr/android/client/apis/VehicleApi.java +++ b/ClientLib/src/main/java/com/o3dr/android/client/apis/VehicleApi.java @@ -23,9 +23,11 @@ import static com.o3dr.services.android.lib.drone.action.StateActions.ACTION_ENABLE_RETURN_TO_ME; import static com.o3dr.services.android.lib.drone.action.StateActions.ACTION_SET_VEHICLE_HOME; import static com.o3dr.services.android.lib.drone.action.StateActions.ACTION_SET_VEHICLE_MODE; +import static com.o3dr.services.android.lib.drone.action.StateActions.ACTION_UPDATE_VEHICLE_DATA_STREAM_RATE; import static com.o3dr.services.android.lib.drone.action.StateActions.EXTRA_ARM; import static com.o3dr.services.android.lib.drone.action.StateActions.EXTRA_EMERGENCY_DISARM; import static com.o3dr.services.android.lib.drone.action.StateActions.EXTRA_IS_RETURN_TO_ME_ENABLED; +import static com.o3dr.services.android.lib.drone.action.StateActions.EXTRA_VEHICLE_DATA_STREAM_RATE; import static com.o3dr.services.android.lib.drone.action.StateActions.EXTRA_VEHICLE_HOME_LOCATION; import static com.o3dr.services.android.lib.drone.action.StateActions.EXTRA_VEHICLE_MODE; @@ -245,4 +247,16 @@ public void enableReturnToMe(boolean isEnabled, final AbstractCommandListener li params.putBoolean(EXTRA_IS_RETURN_TO_ME_ENABLED, isEnabled); drone.performAsyncActionOnDroneThread(new Action(ACTION_ENABLE_RETURN_TO_ME, params), listener); } + + /** + * Update the vehicle data stream rate. + * @param rate The new data stream rate + * @param listener Register a callback to receive update of the command execution state + * @since 2.9.0 + */ + public void updateVehicleDataStreamRate(int rate, final AbstractCommandListener listener){ + Bundle params = new Bundle(); + params.putInt(EXTRA_VEHICLE_DATA_STREAM_RATE, rate); + drone.performAsyncActionOnDroneThread(new Action(ACTION_UPDATE_VEHICLE_DATA_STREAM_RATE, params), listener); + } } diff --git a/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/action/StateActions.java b/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/action/StateActions.java index 6fb1ea4eb1..73442f6ac1 100644 --- a/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/action/StateActions.java +++ b/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/action/StateActions.java @@ -7,6 +7,8 @@ */ public class StateActions { + private static final String PACKAGE_NAME = "com.o3dr.services.android.lib.drone.action.state"; + public static final String ACTION_ARM = Utils.PACKAGE_NAME + ".action.ARM"; public static final String EXTRA_ARM = "extra_arm"; public static final String EXTRA_EMERGENCY_DISARM = "extra_emergency_disarm"; @@ -20,6 +22,9 @@ public class StateActions { public static final String ACTION_ENABLE_RETURN_TO_ME = Utils.PACKAGE_NAME + ".action.ENABLE_RETURN_TO_ME"; public static final String EXTRA_IS_RETURN_TO_ME_ENABLED = "extra_is_return_to_me_enabled"; + public static final String ACTION_UPDATE_VEHICLE_DATA_STREAM_RATE = PACKAGE_NAME + ".action.UPDATE_VEHICLE_DATA_STREAM_RATE"; + public static final String EXTRA_VEHICLE_DATA_STREAM_RATE = "extra_vehicle_data_stream_rate"; + //Private to prevent instantiation private StateActions(){} } diff --git a/ClientLib/src/main/res/values/version.xml b/ClientLib/src/main/res/values/version.xml index ce90820975..88c3f4cfc8 100644 --- a/ClientLib/src/main/res/values/version.xml +++ b/ClientLib/src/main/res/values/version.xml @@ -1,4 +1,4 @@ - 20810 + 20900 \ No newline at end of file diff --git a/ServiceApp/src/org/droidplanner/services/android/core/drone/autopilot/generic/GenericMavLinkDrone.java b/ServiceApp/src/org/droidplanner/services/android/core/drone/autopilot/generic/GenericMavLinkDrone.java index 5d0891b838..4295cd0395 100644 --- a/ServiceApp/src/org/droidplanner/services/android/core/drone/autopilot/generic/GenericMavLinkDrone.java +++ b/ServiceApp/src/org/droidplanner/services/android/core/drone/autopilot/generic/GenericMavLinkDrone.java @@ -21,7 +21,6 @@ import com.MAVLink.common.msg_vibration; import com.MAVLink.enums.MAV_MODE_FLAG; import com.MAVLink.enums.MAV_STATE; -import com.github.zafarkhaja.semver.Version; import com.o3dr.services.android.lib.coordinate.LatLong; import com.o3dr.services.android.lib.coordinate.LatLongAlt; import com.o3dr.services.android.lib.drone.action.CapabilityActions; @@ -46,7 +45,6 @@ import com.o3dr.services.android.lib.drone.property.VehicleMode; import com.o3dr.services.android.lib.drone.property.Vibration; import com.o3dr.services.android.lib.mavlink.MavlinkMessageWrapper; -import com.o3dr.services.android.lib.model.AbstractCommandListener; import com.o3dr.services.android.lib.model.ICommandListener; import com.o3dr.services.android.lib.model.action.Action; import com.o3dr.services.android.lib.util.MathUtils; @@ -75,6 +73,7 @@ import org.droidplanner.services.android.core.mission.Mission; import org.droidplanner.services.android.core.model.AutopilotWarningParser; import org.droidplanner.services.android.utils.CommonApiUtils; +import org.droidplanner.services.android.utils.prefs.DroidPlannerPrefs; import org.droidplanner.services.android.utils.video.VideoManager; /** @@ -362,6 +361,9 @@ public boolean executeAsyncAction(Action action, ICommandListener listener) { case StateActions.ACTION_SET_VEHICLE_MODE: return setVehicleMode(data, listener); + case StateActions.ACTION_UPDATE_VEHICLE_DATA_STREAM_RATE: + return updateVehicleDataStreamRate(data, listener); + // CONTROL ACTIONS case ControlActions.ACTION_DO_GUIDED_TAKEOFF: return performTakeoff(data, listener); @@ -417,6 +419,22 @@ public boolean executeAsyncAction(Action action, ICommandListener listener) { } } + private boolean updateVehicleDataStreamRate(Bundle data, ICommandListener listener) { + StreamRates streamRates = getStreamRates(); + if(streamRates != null){ + int rate = data.getInt(StateActions.EXTRA_VEHICLE_DATA_STREAM_RATE, DroidPlannerPrefs.DEFAULT_STREAM_RATE); + StreamRates.Rates rates = new StreamRates.Rates(rate); + streamRates.setRates(rates); + + streamRates.setupStreamRatesFromPref(); + CommonApiUtils.postSuccessEvent(listener); + return true; + } + + CommonApiUtils.postErrorEvent(CommandExecutionError.COMMAND_UNSUPPORTED, listener); + return false; + } + private boolean checkFeatureSupport(Bundle data, ICommandListener listener) { String featureId = data.getString(CapabilityActions.EXTRA_FEATURE_ID); if (!TextUtils.isEmpty(featureId)) { diff --git a/ServiceApp/src/org/droidplanner/services/android/core/drone/variables/StreamRates.java b/ServiceApp/src/org/droidplanner/services/android/core/drone/variables/StreamRates.java index 47e68fe1aa..d79d5fb747 100644 --- a/ServiceApp/src/org/droidplanner/services/android/core/drone/variables/StreamRates.java +++ b/ServiceApp/src/org/droidplanner/services/android/core/drone/variables/StreamRates.java @@ -51,6 +51,19 @@ public static class Rates { public int rcChannels; public int rawSensors; public int rawController; + + public Rates(){} + + public Rates(int rate){ + this.extendedStatus = rate; + this.extra1 = rate; + this.extra2 = rate; + this.extra3 = rate; + this.position = rate; + this.rcChannels = rate; + this.rawSensors = rate; + this.rawController = rate; + } } } diff --git a/ServiceApp/src/org/droidplanner/services/android/utils/prefs/DroidPlannerPrefs.java b/ServiceApp/src/org/droidplanner/services/android/utils/prefs/DroidPlannerPrefs.java index 5d41c7bc47..7fc938ff2d 100644 --- a/ServiceApp/src/org/droidplanner/services/android/utils/prefs/DroidPlannerPrefs.java +++ b/ServiceApp/src/org/droidplanner/services/android/utils/prefs/DroidPlannerPrefs.java @@ -9,10 +9,8 @@ import org.droidplanner.services.android.core.firmware.FirmwareType; import org.droidplanner.services.android.utils.file.IO.VehicleProfileReader; -import java.util.UUID; - /** - * Provides structured access to Droidplanner preferences + * Provides structured access to 3DR Services preferences *

* Over time it might be good to move the various places that are doing * prefs.getFoo(blah, default) here - to collect prefs in one place and avoid @@ -22,31 +20,16 @@ */ public class DroidPlannerPrefs implements org.droidplanner.services.android.core.drone.Preferences { - // Public for legacy usage - public SharedPreferences prefs; - private Context context; + public static final int DEFAULT_STREAM_RATE = 2; //Hz + + private final SharedPreferences prefs; + private final Context context; public DroidPlannerPrefs(Context context) { this.context = context; prefs = PreferenceManager.getDefaultSharedPreferences(context); } - /** - * Return a unique ID for the vehicle controlled by this tablet. FIXME, - * someday let the users select multiple vehicles - */ - public String getVehicleId() { - String r = prefs.getString("vehicle_id", "").trim(); - - // No ID yet - pick one - if (r.isEmpty()) { - r = UUID.randomUUID().toString(); - - prefs.edit().putString("vehicle_id", r).apply(); - } - return r; - } - @Override public VehicleProfile loadVehicleProfile(FirmwareType firmwareType) { return VehicleProfileReader.load(context, firmwareType); @@ -54,23 +37,7 @@ public VehicleProfile loadVehicleProfile(FirmwareType firmwareType) { @Override public Rates getRates() { - final int defaultRate = 2; - - Rates rates = new Rates(); - - rates.extendedStatus = defaultRate; //Integer.parseInt(prefs.getString("pref_mavlink_stream_rate_ext_stat", "2")); - rates.extra1 = defaultRate; //Integer.parseInt(prefs.getString("pref_mavlink_stream_rate_extra1", "2")); - rates.extra2 = defaultRate; //Integer.parseInt(prefs.getString("pref_mavlink_stream_rate_extra2", "2")); - rates.extra3 = defaultRate; //Integer.parseInt(prefs.getString("pref_mavlink_stream_rate_extra3", "2")); - rates.position = defaultRate; //Integer.parseInt(prefs.getString("pref_mavlink_stream_rate_position", "2")); - rates.rcChannels = defaultRate; //Integer.parseInt(prefs.getString("pref_mavlink_stream_rate_rc_channels", - //"2")); - rates.rawSensors = defaultRate; //Integer.parseInt(prefs.getString("pref_mavlink_stream_rate_raw_sensors", - //"2")); - rates.rawController = defaultRate; //Integer.parseInt(prefs.getString - // ("pref_mavlink_stream_rate_raw_controller", "2")); - - return rates; + return new Rates(DEFAULT_STREAM_RATE); } /** From 8643cf193e8a4f20f317b20696ea6d7ff2a667d6 Mon Sep 17 00:00:00 2001 From: ne0fhyk Date: Wed, 16 Mar 2016 18:02:07 -0700 Subject: [PATCH 05/26] Add support for look at functionality (set the roi programmatically) --- .../o3dr/android/client/apis/ControlApi.java | 22 +++++++++++++-- .../lib/drone/action/ControlActions.java | 7 +++++ .../core/drone/autopilot/apm/ArduPilot.java | 9 +++++- .../android/utils/CommonApiUtils.java | 28 +++++++++++++++++++ 4 files changed, 62 insertions(+), 4 deletions(-) diff --git a/ClientLib/src/main/java/com/o3dr/android/client/apis/ControlApi.java b/ClientLib/src/main/java/com/o3dr/android/client/apis/ControlApi.java index 19645bd21c..d56b1821f2 100644 --- a/ClientLib/src/main/java/com/o3dr/android/client/apis/ControlApi.java +++ b/ClientLib/src/main/java/com/o3dr/android/client/apis/ControlApi.java @@ -4,9 +4,8 @@ import com.o3dr.android.client.Drone; import com.o3dr.services.android.lib.coordinate.LatLong; -import com.o3dr.services.android.lib.drone.attribute.AttributeType; +import com.o3dr.services.android.lib.coordinate.LatLongAlt; import com.o3dr.services.android.lib.drone.attribute.error.CommandExecutionError; -import com.o3dr.services.android.lib.drone.property.Gps; import com.o3dr.services.android.lib.model.AbstractCommandListener; import com.o3dr.services.android.lib.model.action.Action; @@ -14,15 +13,17 @@ import static com.o3dr.services.android.lib.drone.action.ControlActions.ACTION_DO_GUIDED_TAKEOFF; import static com.o3dr.services.android.lib.drone.action.ControlActions.ACTION_ENABLE_MANUAL_CONTROL; +import static com.o3dr.services.android.lib.drone.action.ControlActions.ACTION_LOOK_AT_TARGET; +import static com.o3dr.services.android.lib.drone.action.ControlActions.ACTION_SEND_BRAKE_VEHICLE; import static com.o3dr.services.android.lib.drone.action.ControlActions.ACTION_SEND_GUIDED_POINT; import static com.o3dr.services.android.lib.drone.action.ControlActions.ACTION_SET_CONDITION_YAW; import static com.o3dr.services.android.lib.drone.action.ControlActions.ACTION_SET_GUIDED_ALTITUDE; import static com.o3dr.services.android.lib.drone.action.ControlActions.ACTION_SET_VELOCITY; -import static com.o3dr.services.android.lib.drone.action.ControlActions.ACTION_SEND_BRAKE_VEHICLE; import static com.o3dr.services.android.lib.drone.action.ControlActions.EXTRA_ALTITUDE; import static com.o3dr.services.android.lib.drone.action.ControlActions.EXTRA_DO_ENABLE; import static com.o3dr.services.android.lib.drone.action.ControlActions.EXTRA_FORCE_GUIDED_POINT; import static com.o3dr.services.android.lib.drone.action.ControlActions.EXTRA_GUIDED_POINT; +import static com.o3dr.services.android.lib.drone.action.ControlActions.EXTRA_LOOK_AT_TARGET; import static com.o3dr.services.android.lib.drone.action.ControlActions.EXTRA_VELOCITY_X; import static com.o3dr.services.android.lib.drone.action.ControlActions.EXTRA_VELOCITY_Y; import static com.o3dr.services.android.lib.drone.action.ControlActions.EXTRA_VELOCITY_Z; @@ -99,6 +100,21 @@ public void goTo(LatLong point, boolean force, AbstractCommandListener listener) drone.performAsyncActionOnDroneThread(new Action(ACTION_SEND_GUIDED_POINT, params), listener); } + /** + * Instructs the vehicle to orient toward the specified location + * + * @param point + * @param force + * @param listener + * @since 2.8.1 + */ + public void lookAt(LatLongAlt point, boolean force, AbstractCommandListener listener){ + Bundle params = new Bundle(); + params.putBoolean(EXTRA_FORCE_GUIDED_POINT, force); + params.putParcelable(EXTRA_LOOK_AT_TARGET, point); + drone.performAsyncActionOnDroneThread(new Action(ACTION_LOOK_AT_TARGET, params), listener); + } + /** * Instructs the vehicle to climb to the specified altitude. * diff --git a/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/action/ControlActions.java b/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/action/ControlActions.java index d9e1efbd48..2857822d36 100644 --- a/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/action/ControlActions.java +++ b/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/action/ControlActions.java @@ -46,6 +46,13 @@ public class ControlActions { public static final String EXTRA_DO_ENABLE = "extra_do_enable"; + public static final String ACTION_LOOK_AT_TARGET = PACKAGE_NAME + ".action.LOOK_AT_TARGET"; + + /** + * Geo coordinate to orient the vehicle to + */ + public static final String EXTRA_LOOK_AT_TARGET = "extra_look_at_target"; + //Private to prevent instantiation private ControlActions(){} diff --git a/ServiceApp/src/org/droidplanner/services/android/core/drone/autopilot/apm/ArduPilot.java b/ServiceApp/src/org/droidplanner/services/android/core/drone/autopilot/apm/ArduPilot.java index ac31a2d2f8..88b36c1a54 100644 --- a/ServiceApp/src/org/droidplanner/services/android/core/drone/autopilot/apm/ArduPilot.java +++ b/ServiceApp/src/org/droidplanner/services/android/core/drone/autopilot/apm/ArduPilot.java @@ -232,12 +232,19 @@ public boolean executeAsyncAction(Action action, final ICommandListener listener return true; // CONTROL ACTIONS - case ControlActions.ACTION_SEND_GUIDED_POINT: + case ControlActions.ACTION_SEND_GUIDED_POINT: { data.setClassLoader(LatLong.class.getClassLoader()); boolean force = data.getBoolean(ControlActions.EXTRA_FORCE_GUIDED_POINT); LatLong guidedPoint = data.getParcelable(ControlActions.EXTRA_GUIDED_POINT); CommonApiUtils.sendGuidedPoint(this, guidedPoint, force, listener); return true; + } + + case ControlActions.ACTION_LOOK_AT_TARGET: + boolean force = data.getBoolean(ControlActions.EXTRA_FORCE_GUIDED_POINT); + LatLongAlt lookAtTarget = data.getParcelable(ControlActions.EXTRA_LOOK_AT_TARGET); + CommonApiUtils.sendLookAtTarget(this, lookAtTarget, force, listener); + return true; case ControlActions.ACTION_SET_GUIDED_ALTITUDE: double guidedAltitude = data.getDouble(ControlActions.EXTRA_ALTITUDE); diff --git a/ServiceApp/src/org/droidplanner/services/android/utils/CommonApiUtils.java b/ServiceApp/src/org/droidplanner/services/android/utils/CommonApiUtils.java index a9ff692db3..b3de4522a0 100644 --- a/ServiceApp/src/org/droidplanner/services/android/utils/CommonApiUtils.java +++ b/ServiceApp/src/org/droidplanner/services/android/utils/CommonApiUtils.java @@ -829,6 +829,34 @@ public static void sendGuidedPoint(MavLinkDrone drone, LatLong point, boolean fo } } + public static void sendLookAtTarget(final MavLinkDrone drone, final LatLongAlt target, final boolean force, final ICommandListener listener){ + if(drone == null) + return; + + GuidedPoint guidedPoint = drone.getGuidedPoint(); + if(guidedPoint.isInitialized()){ + MavLinkDoCmds.setROI(drone, target, listener); + } + else if (force) { + GuidedPoint.changeToGuidedMode(drone, new AbstractCommandListener() { + @Override + public void onSuccess() { + MavLinkDoCmds.setROI(drone, target, listener); + } + + @Override + public void onError(int executionError) { + postErrorEvent(executionError, listener); + } + + @Override + public void onTimeout() { + postTimeoutEvent(listener); + } + }); + } + } + public static void setGuidedAltitude(MavLinkDrone drone, double altitude) { if (drone == null) return; From 080c7dd6a0514436110ffacc0ceb82b457e2f439 Mon Sep 17 00:00:00 2001 From: ne0fhyk Date: Wed, 16 Mar 2016 18:03:55 -0700 Subject: [PATCH 06/26] Bump client library version --- ClientLib/build.gradle | 6 +++--- .../main/java/com/o3dr/android/client/apis/ControlApi.java | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/ClientLib/build.gradle b/ClientLib/build.gradle index e7adf85cc5..d4732a4635 100644 --- a/ClientLib/build.gradle +++ b/ClientLib/build.gradle @@ -2,9 +2,9 @@ apply plugin: 'com.android.library' ext { VERSION_MAJOR = 2 - VERSION_MINOR = 8 - VERSION_PATCH = 1 - VERSION_SUFFIX = "release" + VERSION_MINOR = 9 + VERSION_PATCH = 0 + VERSION_SUFFIX = "alpha1" PUBLISH_ARTIFACT_ID = 'dronekit-android' PUBLISH_VERSION = generateVersionName("", VERSION_MAJOR, VERSION_MINOR, VERSION_PATCH, VERSION_SUFFIX) diff --git a/ClientLib/src/main/java/com/o3dr/android/client/apis/ControlApi.java b/ClientLib/src/main/java/com/o3dr/android/client/apis/ControlApi.java index d56b1821f2..5806705305 100644 --- a/ClientLib/src/main/java/com/o3dr/android/client/apis/ControlApi.java +++ b/ClientLib/src/main/java/com/o3dr/android/client/apis/ControlApi.java @@ -106,7 +106,7 @@ public void goTo(LatLong point, boolean force, AbstractCommandListener listener) * @param point * @param force * @param listener - * @since 2.8.1 + * @since 2.9.0 */ public void lookAt(LatLongAlt point, boolean force, AbstractCommandListener listener){ Bundle params = new Bundle(); From 22f3236b37b859ab4de16fabdd6117f9a65ee790 Mon Sep 17 00:00:00 2001 From: ne0fhyk Date: Fri, 18 Mar 2016 11:06:36 -0700 Subject: [PATCH 07/26] Update documentation for the `VehicleApi#updateVehicleDataStreamRate(...)` method --- .../main/java/com/o3dr/android/client/apis/VehicleApi.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ClientLib/src/main/java/com/o3dr/android/client/apis/VehicleApi.java b/ClientLib/src/main/java/com/o3dr/android/client/apis/VehicleApi.java index 1ccd2b474b..1b7ef38b43 100644 --- a/ClientLib/src/main/java/com/o3dr/android/client/apis/VehicleApi.java +++ b/ClientLib/src/main/java/com/o3dr/android/client/apis/VehicleApi.java @@ -250,6 +250,10 @@ public void enableReturnToMe(boolean isEnabled, final AbstractCommandListener li /** * Update the vehicle data stream rate. + * + * Note: This is ineffective for Solo vehicles since their data stream rate is handled + * by the onboard companion computer. + * * @param rate The new data stream rate * @param listener Register a callback to receive update of the command execution state * @since 2.9.0 From 7a9d3fadab0698b45601eea17ddd5948343b56a3 Mon Sep 17 00:00:00 2001 From: Chavi Weingarten Date: Mon, 21 Mar 2016 11:37:47 -0700 Subject: [PATCH 08/26] Added tlv pause packet. Added docs for other sitescan messages --- .../drone/companion/solo/tlv/SoloPause.java | 43 +++++++++++++++++++ .../companion/solo/tlv/TLVMessageParser.java | 6 +++ .../companion/solo/tlv/TLVMessageTypes.java | 1 + .../inspect/SoloInspectMoveGimbal.java | 11 ++++- .../inspect/SoloInspectMoveVehicle.java | 11 ++++- .../inspect/SoloInspectSetWaypoint.java | 11 ++++- .../sitescan/inspect/SoloInspectStart.java | 8 +++- .../solo/tlv/sitescan/scan/SoloScanStart.java | 2 +- .../tlv/sitescan/survey/SoloSurveyStart.java | 2 +- 9 files changed, 89 insertions(+), 6 deletions(-) create mode 100644 ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloPause.java diff --git a/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloPause.java b/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloPause.java new file mode 100644 index 0000000000..0a8ff3c778 --- /dev/null +++ b/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloPause.java @@ -0,0 +1,43 @@ +package com.o3dr.services.android.lib.drone.companion.solo.tlv; + +import android.os.Parcel; + +import java.nio.ByteBuffer; + +/** + * Used by ShotManager or app to transmit a pause request. + */ +public class SoloPause extends TLVPacket { + + public SoloPause() { + super(TLVMessageTypes.TYPE_SOLO_PAUSE_BUTTON, 0); + } + + @Override + protected void getMessageValue(ByteBuffer valueCarrier) { + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + super.writeToParcel(dest, flags); + } + + protected SoloPause(Parcel in) { + super(in); + } + + public static final Creator CREATOR = new Creator() { + public SoloPause createFromParcel(Parcel source) { + return new SoloPause(source); + } + + public SoloPause[] newArray(int size) { + return new SoloPause[size]; + } + }; + + @Override + public String toString() { + return "SoloPause{}"; + } +} 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 807706e4e1..0be0641668 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_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; import static com.o3dr.services.android.lib.drone.companion.solo.tlv.TLVMessageTypes.TYPE_SOLO_SHOT_ERROR; @@ -304,6 +305,11 @@ public static List parseTLVPacket(ByteBuffer packetBuffer) { break; } + case TYPE_SOLO_PAUSE_BUTTON:{ + packet = new SoloPause(); + break; + } + default: break; } 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 47574ac9a6..1ed03112b9 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 @@ -12,6 +12,7 @@ public class TLVMessageTypes { public static final int TYPE_SOLO_CABLE_CAM_OPTIONS = 4; public static final int TYPE_SOLO_GET_BUTTON_SETTING = 5; public static final int TYPE_SOLO_SET_BUTTON_SETTING = 6; + public static final int TYPE_SOLO_PAUSE_BUTTON = 7; public static final int TYPE_SOLO_FOLLOW_OPTIONS = 19; public static final int TYPE_SOLO_FOLLOW_OPTIONS_V2 = 119; diff --git a/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/sitescan/inspect/SoloInspectMoveGimbal.java b/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/sitescan/inspect/SoloInspectMoveGimbal.java index ff69cf82f8..9cb024a2d8 100644 --- a/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/sitescan/inspect/SoloInspectMoveGimbal.java +++ b/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/sitescan/inspect/SoloInspectMoveGimbal.java @@ -8,11 +8,20 @@ import java.nio.ByteBuffer; /** - * Created by chavi on 12/9/15. + * Sent by the app to ShotManager to instruct Solo to actuate gimbal to desired orientation. */ public class SoloInspectMoveGimbal extends TLVPacket { + /** + * Pitch in degrees + */ private float pitch; + /** + * Roll in degrees + */ private float roll; + /** + * Yaw (heading) in degrees + */ private float yaw; public SoloInspectMoveGimbal(float pitch, float roll, float yaw) { diff --git a/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/sitescan/inspect/SoloInspectMoveVehicle.java b/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/sitescan/inspect/SoloInspectMoveVehicle.java index 174df32297..44b56546bb 100644 --- a/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/sitescan/inspect/SoloInspectMoveVehicle.java +++ b/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/sitescan/inspect/SoloInspectMoveVehicle.java @@ -8,11 +8,20 @@ import java.nio.ByteBuffer; /** - * Created by chavi on 12/9/15. + * Sent by the app to ShotManager to instruct Solo to move with a certain velocity (body-relative NED frame). */ public class SoloInspectMoveVehicle extends TLVPacket { + /** + * Desired velocity in body-x (NED) + */ private float vx; + /** + * Desired velocity in body-y (NED) + */ private float vy; + /** + * Desired velocity in body-z (NED) + */ private float vz; public SoloInspectMoveVehicle(float vx, float vy, float vz) { diff --git a/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/sitescan/inspect/SoloInspectSetWaypoint.java b/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/sitescan/inspect/SoloInspectSetWaypoint.java index 9516dabcc1..c212ecdf6c 100644 --- a/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/sitescan/inspect/SoloInspectSetWaypoint.java +++ b/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/sitescan/inspect/SoloInspectSetWaypoint.java @@ -8,11 +8,20 @@ import java.nio.ByteBuffer; /** - * Created by chavi on 12/9/15. + * Sent by the app to ShotManager to instruct Solo to navigate towards the provided waypoint. */ public class SoloInspectSetWaypoint extends TLVPacket { + /** + * Latitude in decimal degrees + */ private float lat; + /** + * Longitude in decimal degrees + */ private float lon; + /** + * Relative altitude from takeoff (in meters) + */ private float alt; public SoloInspectSetWaypoint(float lat, float lon, float alt) { diff --git a/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/sitescan/inspect/SoloInspectStart.java b/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/sitescan/inspect/SoloInspectStart.java index 0fe30be5df..4ea4f4a90f 100644 --- a/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/sitescan/inspect/SoloInspectStart.java +++ b/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/sitescan/inspect/SoloInspectStart.java @@ -8,9 +8,15 @@ import java.nio.ByteBuffer; /** - * Created by chavi on 12/8/15. + * Sent by the app to ShotManager to notify that the inspect shot is ready to + * commence and the vehicle should climb to the provided takeoffAlt. + * Shotmanager will either takeoff or place the vehicle into GUIDED + * depending on whether the vehicle is already in the air or not. */ public class SoloInspectStart extends TLVPacket { + /** + * Relative altitude from takeoff (in meters) that the vehicle should navigate to. + */ private float alt; public SoloInspectStart(float alt) { diff --git a/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/sitescan/scan/SoloScanStart.java b/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/sitescan/scan/SoloScanStart.java index c5a6c410c4..46a1307f16 100644 --- a/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/sitescan/scan/SoloScanStart.java +++ b/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/sitescan/scan/SoloScanStart.java @@ -8,7 +8,7 @@ import java.nio.ByteBuffer; /** - * Created by Fredia Huya-Kouadio on 1/2/16. + * Sent by the app to ShotManager to notify that the scan shot is ready to commence */ public class SoloScanStart extends TLVPacket { diff --git a/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/sitescan/survey/SoloSurveyStart.java b/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/sitescan/survey/SoloSurveyStart.java index 2d386533ad..ff593c288e 100644 --- a/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/sitescan/survey/SoloSurveyStart.java +++ b/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/sitescan/survey/SoloSurveyStart.java @@ -8,7 +8,7 @@ import java.nio.ByteBuffer; /** - * Created by Fredia Huya-Kouadio on 1/2/16. + * Sent by the app to ShotManager to notify that the survey shot is ready to commence. */ public class SoloSurveyStart extends TLVPacket { From 8062f608707698a6b33d0796a7bffe3655623366 Mon Sep 17 00:00:00 2001 From: Chavi Weingarten Date: Mon, 21 Mar 2016 11:43:49 -0700 Subject: [PATCH 09/26] Update docs to match ShotManager --- .../solo/tlv/sitescan/inspect/SoloInspectMoveGimbal.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/sitescan/inspect/SoloInspectMoveGimbal.java b/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/sitescan/inspect/SoloInspectMoveGimbal.java index 9cb024a2d8..d2211f4cae 100644 --- a/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/sitescan/inspect/SoloInspectMoveGimbal.java +++ b/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/sitescan/inspect/SoloInspectMoveGimbal.java @@ -12,15 +12,15 @@ */ public class SoloInspectMoveGimbal extends TLVPacket { /** - * Pitch in degrees + * Body-relative pitch in degrees (0 to -90) */ private float pitch; /** - * Roll in degrees + * Body-relative roll in degrees */ private float roll; /** - * Yaw (heading) in degrees + * Earth frame Yaw (heading) in degrees (0 to 360) */ private float yaw; From 7c700cc1f94f185af979ee3a37963656825fcd8f Mon Sep 17 00:00:00 2001 From: ne0fhyk Date: Thu, 24 Mar 2016 09:32:44 -0700 Subject: [PATCH 10/26] Bump version for release 1.5.3 --- ServiceApp/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ServiceApp/build.gradle b/ServiceApp/build.gradle index 5a2fa419af..110308e469 100644 --- a/ServiceApp/build.gradle +++ b/ServiceApp/build.gradle @@ -39,8 +39,8 @@ dependencies { //Decomposed version name and code (https://plus.google.com/+JakeWharton/posts/6f5TcVPRZij) def versionMajor = 1 def versionMinor = 5 -def versionPatch = 2 -def versionBuild = 4 //bump for dogfood builds, public betas, etc. +def versionPatch = 3 +def versionBuild = 0 //bump for dogfood builds, public betas, etc. def versionPrefix = "3DR Services v" //Log levels values From c23e5a9b0b0845a46dc7bd0dcb7bd6f58e95681c Mon Sep 17 00:00:00 2001 From: Chavi Weingarten Date: Thu, 24 Mar 2016 10:34:00 -0700 Subject: [PATCH 11/26] Updated to alpha2 --- ClientLib/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ClientLib/build.gradle b/ClientLib/build.gradle index d4732a4635..827f51deb6 100644 --- a/ClientLib/build.gradle +++ b/ClientLib/build.gradle @@ -4,7 +4,7 @@ ext { VERSION_MAJOR = 2 VERSION_MINOR = 9 VERSION_PATCH = 0 - VERSION_SUFFIX = "alpha1" + VERSION_SUFFIX = "alpha2" PUBLISH_ARTIFACT_ID = 'dronekit-android' PUBLISH_VERSION = generateVersionName("", VERSION_MAJOR, VERSION_MINOR, VERSION_PATCH, VERSION_SUFFIX) From adb4db5a8bc1d7a6eecfd0134af397f55f204459 Mon Sep 17 00:00:00 2001 From: ne0fhyk Date: Sun, 27 Mar 2016 02:49:08 -0700 Subject: [PATCH 12/26] Update gradle build dependency for the client library to fix compilation issues --- ClientLib/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ClientLib/build.gradle b/ClientLib/build.gradle index 827f51deb6..a619ac14eb 100644 --- a/ClientLib/build.gradle +++ b/ClientLib/build.gradle @@ -58,7 +58,7 @@ dependencies { compile "com.android.support:support-v4:${support_lib_version}" compile "com.google.android.gms:play-services-base:${play_services_version}" - debugCompile project(':Mavlink') + compile project(':Mavlink') releaseCompile files('libs/Mavlink.jar') } From 204cb06bdedaf6b90089cd0723fc223e99fa887b Mon Sep 17 00:00:00 2001 From: ne0fhyk Date: Tue, 29 Mar 2016 00:02:23 -0700 Subject: [PATCH 13/26] Fix connection bug on nexus devices when switching from home wifi to solo wifi --- .../services/android/api/DroneApi.java | 9 +++- .../connection/AndroidIpConnection.java | 45 +++++++++++++++++++ .../connection/AndroidTcpConnection.java | 17 ++++--- .../connection/AndroidUdpConnection.java | 15 ++++--- .../communication/service/MAVLinkClient.java | 5 ++- 5 files changed, 78 insertions(+), 13 deletions(-) create mode 100644 ServiceApp/src/org/droidplanner/services/android/communication/connection/AndroidIpConnection.java diff --git a/ServiceApp/src/org/droidplanner/services/android/api/DroneApi.java b/ServiceApp/src/org/droidplanner/services/android/api/DroneApi.java index 4fbb2390b1..c3b30e17bd 100644 --- a/ServiceApp/src/org/droidplanner/services/android/api/DroneApi.java +++ b/ServiceApp/src/org/droidplanner/services/android/api/DroneApi.java @@ -200,8 +200,15 @@ private ConnectionParameter checkConnectionParameter(ConnectionParameter connPar public void connect(ConnectionParameter connParams) { try { + //Validate the given connection parameter connParams = checkConnectionParameter(connParams); - if (!connParams.equals(this.connectionParams)) { + + //Validate the current connection parameter for the drone + ConnectionParameter currentConnParams = this.connectionParams == null + ? this.connectionParams + : checkConnectionParameter(this.connectionParams); + + if (!connParams.equals(currentConnParams)) { if (this.droneMgr != null) { LinkConnectionStatus connectionStatus = LinkConnectionStatus .newFailedConnectionStatus(LinkConnectionStatus.ADDRESS_IN_USE, diff --git a/ServiceApp/src/org/droidplanner/services/android/communication/connection/AndroidIpConnection.java b/ServiceApp/src/org/droidplanner/services/android/communication/connection/AndroidIpConnection.java new file mode 100644 index 0000000000..ea1af2a85b --- /dev/null +++ b/ServiceApp/src/org/droidplanner/services/android/communication/connection/AndroidIpConnection.java @@ -0,0 +1,45 @@ +package org.droidplanner.services.android.communication.connection; + +import android.content.Context; + +import org.droidplanner.services.android.utils.connection.WifiConnectionHandler; + +import java.io.IOException; + +/** + * Created by fredia on 3/28/16. + */ +public abstract class AndroidIpConnection extends AndroidMavLinkConnection { + + private final WifiConnectionHandler wifiHandler; + + public AndroidIpConnection(Context applicationContext) { + this(applicationContext, null); + } + + protected AndroidIpConnection(Context context, WifiConnectionHandler wifiHandler){ + super(context); + this.wifiHandler = wifiHandler; + } + + @Override + protected final void openConnection() throws IOException { + if(this.wifiHandler != null) { + this.wifiHandler.start(); + } + onOpenConnection(); + } + + protected abstract void onOpenConnection() throws IOException; + + @Override + protected final void closeConnection() throws IOException { + onCloseConnection(); + if(this.wifiHandler != null) { + this.wifiHandler.stop(); + } + } + + protected abstract void onCloseConnection() throws IOException; + +} diff --git a/ServiceApp/src/org/droidplanner/services/android/communication/connection/AndroidTcpConnection.java b/ServiceApp/src/org/droidplanner/services/android/communication/connection/AndroidTcpConnection.java index 8a57565d64..54b37879e4 100644 --- a/ServiceApp/src/org/droidplanner/services/android/communication/connection/AndroidTcpConnection.java +++ b/ServiceApp/src/org/droidplanner/services/android/communication/connection/AndroidTcpConnection.java @@ -6,17 +6,20 @@ import org.droidplanner.services.android.core.MAVLink.connection.TcpConnection; import org.droidplanner.services.android.core.model.Logger; +import org.droidplanner.services.android.utils.connection.WifiConnectionHandler; import java.io.IOException; -public class AndroidTcpConnection extends AndroidMavLinkConnection { +public class AndroidTcpConnection extends AndroidIpConnection { private final TcpConnection mConnectionImpl; + private final String serverIp; private final int serverPort; - public AndroidTcpConnection(Context context, String tcpServerIp, int tcpServerPort) { - super(context); + public AndroidTcpConnection(Context context, String tcpServerIp, int tcpServerPort, WifiConnectionHandler wifiHandler){ + super(context, wifiHandler); + this.serverIp = tcpServerIp; this.serverPort = tcpServerPort; @@ -48,8 +51,12 @@ protected void onConnectionStatus(LinkConnectionStatus connectionStatus) { }; } + public AndroidTcpConnection(Context context, String tcpServerIp, int tcpServerPort) { + this(context, tcpServerIp, tcpServerPort, null); + } + @Override - protected void closeConnection() throws IOException { + protected void onCloseConnection() throws IOException { mConnectionImpl.closeConnection(); } @@ -59,7 +66,7 @@ protected void loadPreferences() { } @Override - protected void openConnection() throws IOException { + protected void onOpenConnection() throws IOException { mConnectionImpl.openConnection(); } diff --git a/ServiceApp/src/org/droidplanner/services/android/communication/connection/AndroidUdpConnection.java b/ServiceApp/src/org/droidplanner/services/android/communication/connection/AndroidUdpConnection.java index 722d152cdf..98103e94b3 100644 --- a/ServiceApp/src/org/droidplanner/services/android/communication/connection/AndroidUdpConnection.java +++ b/ServiceApp/src/org/droidplanner/services/android/communication/connection/AndroidUdpConnection.java @@ -7,6 +7,7 @@ import org.droidplanner.services.android.core.MAVLink.connection.UdpConnection; import org.droidplanner.services.android.core.model.Logger; +import org.droidplanner.services.android.utils.connection.WifiConnectionHandler; import java.io.IOException; import java.net.InetAddress; @@ -15,7 +16,7 @@ import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; -public class AndroidUdpConnection extends AndroidMavLinkConnection { +public class AndroidUdpConnection extends AndroidIpConnection { private static final String TAG = AndroidUdpConnection.class.getSimpleName(); @@ -26,8 +27,8 @@ public class AndroidUdpConnection extends AndroidMavLinkConnection { private ScheduledExecutorService pingRunner; - public AndroidUdpConnection(Context context, int udpServerPort) { - super(context); + public AndroidUdpConnection(Context context, int udpServerPort, WifiConnectionHandler wifiHandler) { + super(context, wifiHandler); this.serverPort = udpServerPort; mConnectionImpl = new UdpConnection() { @@ -53,6 +54,10 @@ protected void onConnectionStatus(LinkConnectionStatus connectionStatus) { }; } + public AndroidUdpConnection(Context context, int udpServerPort) { + this(context, udpServerPort, null); + } + public void addPingTarget(final InetAddress address, final int port, final long period, final byte[] payload) { if (address == null || payload == null || period <= 0) return; @@ -66,7 +71,7 @@ public void addPingTarget(final InetAddress address, final int port, final long } @Override - protected void closeConnection() throws IOException { + protected void onCloseConnection() throws IOException { Log.d(TAG, "Closing udp connection."); if (pingRunner != null) { Log.d(TAG, "Shutting down pinging tasks."); @@ -83,7 +88,7 @@ protected void loadPreferences() { } @Override - protected void openConnection() throws IOException { + protected void onOpenConnection() throws IOException { Log.d(TAG, "Opening udp connection"); mConnectionImpl.openConnection(); diff --git a/ServiceApp/src/org/droidplanner/services/android/communication/service/MAVLinkClient.java b/ServiceApp/src/org/droidplanner/services/android/communication/service/MAVLinkClient.java index 318295ca67..a646e9b893 100644 --- a/ServiceApp/src/org/droidplanner/services/android/communication/service/MAVLinkClient.java +++ b/ServiceApp/src/org/droidplanner/services/android/communication/service/MAVLinkClient.java @@ -25,6 +25,7 @@ import org.droidplanner.services.android.core.drone.manager.DroneCommandTracker; import org.droidplanner.services.android.data.SessionDB; import org.droidplanner.services.android.utils.analytics.GAUtils; +import org.droidplanner.services.android.utils.connection.WifiConnectionHandler; import org.droidplanner.services.android.utils.file.DirectoryPath; import org.droidplanner.services.android.utils.file.FileUtils; @@ -146,14 +147,14 @@ public synchronized void openConnection() { final String tcpServerIp = paramsBundle.getString(ConnectionType.EXTRA_TCP_SERVER_IP); final int tcpServerPort = paramsBundle.getInt(ConnectionType .EXTRA_TCP_SERVER_PORT, ConnectionType.DEFAULT_TCP_SERVER_PORT); - mavlinkConn = new AndroidTcpConnection(context, tcpServerIp, tcpServerPort); + mavlinkConn = new AndroidTcpConnection(context, tcpServerIp, tcpServerPort, new WifiConnectionHandler(context)); Timber.i("Connecting over tcp."); break; case ConnectionType.TYPE_UDP: final int udpServerPort = paramsBundle .getInt(ConnectionType.EXTRA_UDP_SERVER_PORT, ConnectionType.DEFAULT_UDP_SERVER_PORT); - mavlinkConn = new AndroidUdpConnection(context, udpServerPort); + mavlinkConn = new AndroidUdpConnection(context, udpServerPort, new WifiConnectionHandler(context)); Timber.i("Connecting over udp."); break; From 5e0975ab4edc45095a00e5940cb5011de1bddfab Mon Sep 17 00:00:00 2001 From: ne0fhyk Date: Tue, 29 Mar 2016 01:34:00 -0700 Subject: [PATCH 14/26] Fix the sensors size for the s110 s120 canon camera --- ServiceApp/assets/CameraInfo/Canon S110 S120.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ServiceApp/assets/CameraInfo/Canon S110 S120.xml b/ServiceApp/assets/CameraInfo/Canon S110 S120.xml index db8684eb38..500f3b03a2 100644 --- a/ServiceApp/assets/CameraInfo/Canon S110 S120.xml +++ b/ServiceApp/assets/CameraInfo/Canon S110 S120.xml @@ -1,8 +1,8 @@ Canon S110/S120 - 7.60 - 5.70 + 7.44 + 5.58 12.1 5.2 From ca0f1a10f45f272b337c79453ad895e5c0446514 Mon Sep 17 00:00:00 2001 From: ne0fhyk Date: Tue, 29 Mar 2016 01:50:26 -0700 Subject: [PATCH 15/26] Bump version for beta 1 --- ServiceApp/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ServiceApp/build.gradle b/ServiceApp/build.gradle index 110308e469..e8ea7b54b1 100644 --- a/ServiceApp/build.gradle +++ b/ServiceApp/build.gradle @@ -40,7 +40,7 @@ dependencies { def versionMajor = 1 def versionMinor = 5 def versionPatch = 3 -def versionBuild = 0 //bump for dogfood builds, public betas, etc. +def versionBuild = 1 //bump for dogfood builds, public betas, etc. def versionPrefix = "3DR Services v" //Log levels values From 3468190b387f67b4d5140680797efe9eea8f1f02 Mon Sep 17 00:00:00 2001 From: Chavi Weingarten Date: Tue, 29 Mar 2016 18:23:58 -0700 Subject: [PATCH 16/26] Added new follow preferences --- .../companion/solo/tlv/SoloFollowOptions.java | 7 ++ .../solo/tlv/SoloFollowOptionsV2.java | 99 ++++++++++++------- 2 files changed, 70 insertions(+), 36 deletions(-) diff --git a/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloFollowOptions.java b/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloFollowOptions.java index 0da33d5566..dcc6ae7cd3 100644 --- a/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloFollowOptions.java +++ b/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloFollowOptions.java @@ -88,4 +88,11 @@ public SoloFollowOptions[] newArray(int size) { return new SoloFollowOptions[size]; } }; + + @Override + public String toString() { + return "SoloFollowOptions{" + + "lookAt=" + lookAt + + '}'; + } } diff --git a/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloFollowOptionsV2.java b/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloFollowOptionsV2.java index 1531d0d786..c8a953fc12 100644 --- a/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloFollowOptionsV2.java +++ b/ClientLib/src/main/java/com/o3dr/services/android/lib/drone/companion/solo/tlv/SoloFollowOptionsV2.java @@ -1,6 +1,7 @@ package com.o3dr.services.android.lib.drone.companion.solo.tlv; import android.os.Parcel; +import android.support.annotation.IntDef; import java.nio.ByteBuffer; @@ -9,70 +10,64 @@ */ public class SoloFollowOptionsV2 extends SoloFollowOptions { - private static final int FREE_LOOK_ENABLED_VALUE = 1; - private static final int FREE_LOOK_DISABLED_VALUE = 0; + @IntDef ({ + FOLLOW_PREFERENCE_NONE, + FOLLOW_PREFERENCE_ORBIT, + FOLLOW_PREFERENCE_FREE_LOOK, + FOLLOW_PREFERENCE_LEASH + }) + public @interface FollowPreference{} - private boolean freeLook; + public static final int FOLLOW_PREFERENCE_NONE = -1; + public static final int FOLLOW_PREFERENCE_ORBIT = 0; + public static final int FOLLOW_PREFERENCE_FREE_LOOK = 1; + public static final int FOLLOW_PREFERENCE_LEASH = 2; + + @FollowPreference + private int followPreference; public SoloFollowOptionsV2() { - this(PAUSED_CRUISE_SPEED, true, false); + this(PAUSED_CRUISE_SPEED, true, FOLLOW_PREFERENCE_NONE); } - public SoloFollowOptionsV2(float cruiseSpeed, boolean lookAt, boolean freeLook){ + public SoloFollowOptionsV2(float cruiseSpeed, boolean lookAt, @FollowPreference int followPreference) { super(TLVMessageTypes.TYPE_SOLO_FOLLOW_OPTIONS_V2, 12, cruiseSpeed, lookAt); - this.freeLook = freeLook; + this.followPreference = followPreference; } - SoloFollowOptionsV2(float cruiseSpeed, int lookAtValue, int freeLookValue){ - this(cruiseSpeed, lookAtValue == LOOK_AT_ENABLED_VALUE, freeLookValue == FREE_LOOK_ENABLED_VALUE); + SoloFollowOptionsV2(float cruiseSpeed, int lookAtValue, int followPreference) { + this(cruiseSpeed, lookAtValue == LOOK_AT_ENABLED_VALUE, followPreference); } - SoloFollowOptionsV2(ByteBuffer buffer){ + SoloFollowOptionsV2(ByteBuffer buffer) { this(buffer.getFloat(), buffer.getInt(), buffer.getInt()); } - public boolean isFreeLook() { - return freeLook; - } - - public void setFreeLook(boolean freeLook) { - this.freeLook = freeLook; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof SoloFollowOptionsV2)) return false; - if (!super.equals(o)) return false; - - SoloFollowOptionsV2 that = (SoloFollowOptionsV2) o; - - return freeLook == that.freeLook; - + @FollowPreference + public int getFollowPreference() { + return followPreference; } - @Override - public int hashCode() { - int result = super.hashCode(); - result = 31 * result + (freeLook ? FREE_LOOK_ENABLED_VALUE : FREE_LOOK_DISABLED_VALUE); - return result; + public void setFollowPreference(@FollowPreference int followPreference) { + this.followPreference = followPreference; } @Override - protected void getMessageValue(ByteBuffer valueCarrier){ + protected void getMessageValue(ByteBuffer valueCarrier) { super.getMessageValue(valueCarrier); - valueCarrier.putInt(freeLook ? FREE_LOOK_ENABLED_VALUE : FREE_LOOK_DISABLED_VALUE); + valueCarrier.putInt(followPreference); } @Override public void writeToParcel(Parcel dest, int flags) { super.writeToParcel(dest, flags); - dest.writeByte(freeLook ? (byte) FREE_LOOK_ENABLED_VALUE : (byte) FREE_LOOK_DISABLED_VALUE); + dest.writeInt(followPreference); } protected SoloFollowOptionsV2(Parcel in) { super(in); - this.freeLook = in.readByte() != FREE_LOOK_DISABLED_VALUE; + @FollowPreference int followPreference = in.readInt(); + this.followPreference = followPreference; } public static final Creator CREATOR = new Creator() { @@ -84,4 +79,36 @@ public SoloFollowOptionsV2[] newArray(int size) { return new SoloFollowOptionsV2[size]; } }; + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + if (!super.equals(o)) { + return false; + } + + SoloFollowOptionsV2 that = (SoloFollowOptionsV2) o; + + return followPreference == that.followPreference; + + } + + @Override + public int hashCode() { + int result = super.hashCode(); + result = 31 * result + followPreference; + return result; + } + + @Override + public String toString() { + return "SoloFollowOptionsV2{" + + "followPreference=" + followPreference + + '}'; + } } From 583037e49a64a1ab311e38e3e861e6ef5eefd90d Mon Sep 17 00:00:00 2001 From: Chavi Weingarten Date: Wed, 30 Mar 2016 16:33:26 -0700 Subject: [PATCH 17/26] Updated library and service version --- ClientLib/build.gradle | 2 +- ServiceApp/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ClientLib/build.gradle b/ClientLib/build.gradle index a619ac14eb..6c89cd2e9f 100644 --- a/ClientLib/build.gradle +++ b/ClientLib/build.gradle @@ -4,7 +4,7 @@ ext { VERSION_MAJOR = 2 VERSION_MINOR = 9 VERSION_PATCH = 0 - VERSION_SUFFIX = "alpha2" + VERSION_SUFFIX = "alpha3" PUBLISH_ARTIFACT_ID = 'dronekit-android' PUBLISH_VERSION = generateVersionName("", VERSION_MAJOR, VERSION_MINOR, VERSION_PATCH, VERSION_SUFFIX) diff --git a/ServiceApp/build.gradle b/ServiceApp/build.gradle index e8ea7b54b1..642306d1f6 100644 --- a/ServiceApp/build.gradle +++ b/ServiceApp/build.gradle @@ -40,7 +40,7 @@ dependencies { def versionMajor = 1 def versionMinor = 5 def versionPatch = 3 -def versionBuild = 1 //bump for dogfood builds, public betas, etc. +def versionBuild = 2 //bump for dogfood builds, public betas, etc. def versionPrefix = "3DR Services v" //Log levels values From 0764286a770c5cbe854b2d9ae038510bcdee2da0 Mon Sep 17 00:00:00 2001 From: Chavi Weingarten Date: Thu, 31 Mar 2016 13:12:38 -0700 Subject: [PATCH 18/26] Fixed copy dir for mavlink jar --- dependencyLibs/Mavlink/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dependencyLibs/Mavlink/build.gradle b/dependencyLibs/Mavlink/build.gradle index 0d0fcc0dce..57c9870f6e 100644 --- a/dependencyLibs/Mavlink/build.gradle +++ b/dependencyLibs/Mavlink/build.gradle @@ -11,7 +11,7 @@ sourceSets { } jar { - destinationDir (new File("${rootDir}/../dronekit-android-dev/ClientLib/libs")) + destinationDir (new File("${rootDir}/../dronekit-android/ClientLib/libs")) } dependencies { From dd7814ab879e00c04c9912aad97e114f60650fa0 Mon Sep 17 00:00:00 2001 From: Chavi Weingarten Date: Thu, 31 Mar 2016 17:27:03 -0700 Subject: [PATCH 19/26] Reverted change so debug and release compile different mavlink files --- ClientLib/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ClientLib/build.gradle b/ClientLib/build.gradle index 6c89cd2e9f..f654f408f3 100644 --- a/ClientLib/build.gradle +++ b/ClientLib/build.gradle @@ -58,7 +58,7 @@ dependencies { compile "com.android.support:support-v4:${support_lib_version}" compile "com.google.android.gms:play-services-base:${play_services_version}" - compile project(':Mavlink') + debugCompile project(':Mavlink') releaseCompile files('libs/Mavlink.jar') } From a3f59cb919cb5e8914664734b070b79589aeff3e Mon Sep 17 00:00:00 2001 From: Chavi Weingarten Date: Thu, 31 Mar 2016 17:45:25 -0700 Subject: [PATCH 20/26] bumped client lib version to 2.9.0.alpha4 --- ClientLib/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ClientLib/build.gradle b/ClientLib/build.gradle index f654f408f3..5f374a746c 100644 --- a/ClientLib/build.gradle +++ b/ClientLib/build.gradle @@ -4,7 +4,7 @@ ext { VERSION_MAJOR = 2 VERSION_MINOR = 9 VERSION_PATCH = 0 - VERSION_SUFFIX = "alpha3" + VERSION_SUFFIX = "alpha4" PUBLISH_ARTIFACT_ID = 'dronekit-android' PUBLISH_VERSION = generateVersionName("", VERSION_MAJOR, VERSION_MINOR, VERSION_PATCH, VERSION_SUFFIX) From 16d576c638106037df6e7a73d18abfb8cfde2625 Mon Sep 17 00:00:00 2001 From: ne0fhyk Date: Fri, 1 Apr 2016 14:18:47 -0700 Subject: [PATCH 21/26] Fix issue preventing restore of the original home location when disabling `return to me` --- .../lib/gcs/returnToMe/ReturnToMeState.java | 4 +-- .../services/android/core/gcs/ReturnToMe.java | 25 ++++++++++++++++++- .../core/gcs/location/FusedLocation.java | 2 +- 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/ClientLib/src/main/java/com/o3dr/services/android/lib/gcs/returnToMe/ReturnToMeState.java b/ClientLib/src/main/java/com/o3dr/services/android/lib/gcs/returnToMe/ReturnToMeState.java index 542ef214bb..51b52c6b08 100644 --- a/ClientLib/src/main/java/com/o3dr/services/android/lib/gcs/returnToMe/ReturnToMeState.java +++ b/ClientLib/src/main/java/com/o3dr/services/android/lib/gcs/returnToMe/ReturnToMeState.java @@ -52,7 +52,7 @@ public LatLongAlt getCurrentHomeLocation() { } public void setCurrentHomeLocation(LatLongAlt currentHomeLocation) { - this.currentHomeLocation = currentHomeLocation; + this.currentHomeLocation = currentHomeLocation == null ? null : new LatLongAlt(currentHomeLocation); } public LatLongAlt getOriginalHomeLocation() { @@ -60,7 +60,7 @@ public LatLongAlt getOriginalHomeLocation() { } public void setOriginalHomeLocation(LatLongAlt originalHomeLocation) { - this.originalHomeLocation = originalHomeLocation; + this.originalHomeLocation = originalHomeLocation == null ? null : new LatLongAlt(originalHomeLocation); } @Override diff --git a/ServiceApp/src/org/droidplanner/services/android/core/gcs/ReturnToMe.java b/ServiceApp/src/org/droidplanner/services/android/core/gcs/ReturnToMe.java index d318e7a411..c71e91545a 100644 --- a/ServiceApp/src/org/droidplanner/services/android/core/gcs/ReturnToMe.java +++ b/ServiceApp/src/org/droidplanner/services/android/core/gcs/ReturnToMe.java @@ -82,6 +82,30 @@ public void disable() { locationFinder.disableLocationUpdates(); currentState.setCurrentHomeLocation(null); + + //Reset the original home location + final LatLongAlt originalHomeLocation = currentState.getOriginalHomeLocation(); + if(originalHomeLocation != null){ + MavLinkDoCmds.setVehicleHome(droneMgr.getDrone(), originalHomeLocation, new AbstractCommandListener(){ + + @Override + public void onSuccess() { + Timber.i("Updated vehicle home location to %s", originalHomeLocation.toString()); + droneMgr.getDrone().executeAsyncAction(requestHomeUpdateAction, null); + } + + @Override + public void onError(int executionError) { + Timber.e("Unable to update vehicle home location: %d", executionError); + } + + @Override + public void onTimeout() { + Timber.w("Vehicle home update timed out!"); + } + }); + } + updateCurrentState(ReturnToMeState.STATE_IDLE); this.commandListener = null; @@ -124,7 +148,6 @@ public void onError(int executionError) { Timber.e("Unable to update vehicle home location: %d", executionError); CommonApiUtils.postErrorEvent(executionError, commandListener); updateCurrentState(ReturnToMeState.STATE_ERROR_UPDATING_HOME); - } @Override diff --git a/ServiceApp/src/org/droidplanner/services/android/core/gcs/location/FusedLocation.java b/ServiceApp/src/org/droidplanner/services/android/core/gcs/location/FusedLocation.java index aef6b57f58..6f59f53e21 100644 --- a/ServiceApp/src/org/droidplanner/services/android/core/gcs/location/FusedLocation.java +++ b/ServiceApp/src/org/droidplanner/services/android/core/gcs/location/FusedLocation.java @@ -34,7 +34,7 @@ public class FusedLocation extends LocationCallback implements LocationFinder, G private static final long MIN_TIME_MS = 16; private static final float MIN_DISTANCE_M = 0.0f; - private static final float LOCATION_ACCURACY_THRESHOLD = 15.0f; + private static final float LOCATION_ACCURACY_THRESHOLD = 20.0f; private static final float JUMP_FACTOR = 4.0f; private final static Api[] apisList = new Api[]{LocationServices.API}; From d249da783055a83f56e7bce539eefeaf46ab6105 Mon Sep 17 00:00:00 2001 From: ne0fhyk Date: Fri, 1 Apr 2016 14:32:48 -0700 Subject: [PATCH 22/26] Bump version numbers for beta 3 --- ClientLib/build.gradle | 2 +- ClientLib/src/main/res/values/version.xml | 2 +- ServiceApp/build.gradle | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/ClientLib/build.gradle b/ClientLib/build.gradle index 5f374a746c..0dc5060b69 100644 --- a/ClientLib/build.gradle +++ b/ClientLib/build.gradle @@ -4,7 +4,7 @@ ext { VERSION_MAJOR = 2 VERSION_MINOR = 9 VERSION_PATCH = 0 - VERSION_SUFFIX = "alpha4" + VERSION_SUFFIX = "alpha5" PUBLISH_ARTIFACT_ID = 'dronekit-android' PUBLISH_VERSION = generateVersionName("", VERSION_MAJOR, VERSION_MINOR, VERSION_PATCH, VERSION_SUFFIX) diff --git a/ClientLib/src/main/res/values/version.xml b/ClientLib/src/main/res/values/version.xml index 88c3f4cfc8..90de7a4a26 100644 --- a/ClientLib/src/main/res/values/version.xml +++ b/ClientLib/src/main/res/values/version.xml @@ -1,4 +1,4 @@ - 20900 + 20905 \ No newline at end of file diff --git a/ServiceApp/build.gradle b/ServiceApp/build.gradle index 642306d1f6..39073da58d 100644 --- a/ServiceApp/build.gradle +++ b/ServiceApp/build.gradle @@ -40,7 +40,7 @@ dependencies { def versionMajor = 1 def versionMinor = 5 def versionPatch = 3 -def versionBuild = 2 //bump for dogfood builds, public betas, etc. +def versionBuild = 3 //bump for dogfood builds, public betas, etc. def versionPrefix = "3DR Services v" //Log levels values From a05a3613b7e8d1a695bccc8d0caf0bc341a7afa7 Mon Sep 17 00:00:00 2001 From: Phu Nguyen Date: Mon, 4 Apr 2016 13:48:19 -0700 Subject: [PATCH 23/26] Only send brake command for non-Solo shot follow --- .../droidplanner/services/android/core/gcs/follow/Follow.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ServiceApp/src/org/droidplanner/services/android/core/gcs/follow/Follow.java b/ServiceApp/src/org/droidplanner/services/android/core/gcs/follow/Follow.java index b622ddfe0c..e19a46f9a6 100644 --- a/ServiceApp/src/org/droidplanner/services/android/core/gcs/follow/Follow.java +++ b/ServiceApp/src/org/droidplanner/services/android/core/gcs/follow/Follow.java @@ -92,7 +92,9 @@ private void disableFollowMe() { } final MavLinkDrone drone = droneMgr.getDrone(); - if (GuidedPoint.isGuidedMode(drone)) { + // Send a brake command only on APM Follow, Solo Shot follow braking is handled by its Shot Manager onboard + if (GuidedPoint.isGuidedMode(drone) + && followAlgorithm.getType() != FollowAlgorithm.FollowModes.SOLO_SHOT) { droneMgr.getDrone().executeAsyncAction(new Action(ControlActions.ACTION_SEND_BRAKE_VEHICLE), null); } } From 7c10a367818b72d915c501f2dea03b76a957fac8 Mon Sep 17 00:00:00 2001 From: ne0fhyk Date: Mon, 4 Apr 2016 14:18:52 -0700 Subject: [PATCH 24/26] Bump version for beta 4 --- ServiceApp/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ServiceApp/build.gradle b/ServiceApp/build.gradle index 39073da58d..aee1d285e6 100644 --- a/ServiceApp/build.gradle +++ b/ServiceApp/build.gradle @@ -40,7 +40,7 @@ dependencies { def versionMajor = 1 def versionMinor = 5 def versionPatch = 3 -def versionBuild = 3 //bump for dogfood builds, public betas, etc. +def versionBuild = 4 //bump for dogfood builds, public betas, etc. def versionPrefix = "3DR Services v" //Log levels values From be336489044c1fe62795f30558a323d486cb1298 Mon Sep 17 00:00:00 2001 From: ne0fhyk Date: Thu, 7 Apr 2016 17:22:37 -0700 Subject: [PATCH 25/26] Add plugin to evaluate project method counts --- ServiceApp/build.gradle | 1 + build.gradle | 3 +++ 2 files changed, 4 insertions(+) diff --git a/ServiceApp/build.gradle b/ServiceApp/build.gradle index aee1d285e6..16882fa486 100644 --- a/ServiceApp/build.gradle +++ b/ServiceApp/build.gradle @@ -1,5 +1,6 @@ apply plugin: 'com.android.application' apply plugin: 'io.fabric' +apply plugin: 'com.getkeepsafe.dexcount' dependencies { diff --git a/build.gradle b/build.gradle index f4739af6ce..3dc9ef094d 100644 --- a/build.gradle +++ b/build.gradle @@ -21,6 +21,9 @@ buildscript { 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' + + //Dexcount gradle plugin + classpath 'com.getkeepsafe.dexcount:dexcount-gradle-plugin:0.4.4' } } From abb55d377eec6d3853983c37389fd729be5388e9 Mon Sep 17 00:00:00 2001 From: ne0fhyk Date: Thu, 7 Apr 2016 18:03:28 -0700 Subject: [PATCH 26/26] Bump version for the client library --- ClientLib/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ClientLib/build.gradle b/ClientLib/build.gradle index 0dc5060b69..6f5664746b 100644 --- a/ClientLib/build.gradle +++ b/ClientLib/build.gradle @@ -4,7 +4,7 @@ ext { VERSION_MAJOR = 2 VERSION_MINOR = 9 VERSION_PATCH = 0 - VERSION_SUFFIX = "alpha5" + VERSION_SUFFIX = "release" PUBLISH_ARTIFACT_ID = 'dronekit-android' PUBLISH_VERSION = generateVersionName("", VERSION_MAJOR, VERSION_MINOR, VERSION_PATCH, VERSION_SUFFIX)