Skip to content

Commit c761f4a

Browse files
committed
Merge pull request #279 from dronekit/release-1.4.0.beta.1
Release 1.4.0.beta.1
2 parents 5e83a4f + 521329f commit c761f4a

File tree

59 files changed

+2793
-173
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

59 files changed

+2793
-173
lines changed

ClientLib/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ apply plugin: 'com.android.library'
33
ext {
44
VERSION_MAJOR = 2
55
VERSION_MINOR = 6
6-
VERSION_PATCH = 1
6+
VERSION_PATCH = 2
77
VERSION_BUILD = 0
88

99
PUBLISH_ARTIFACT_ID = 'dronekit-android'

ClientLib/src/main/java/com/o3dr/android/client/apis/VehicleApi.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
import com.o3dr.android.client.Drone;
66
import com.o3dr.services.android.lib.coordinate.LatLong;
7+
import com.o3dr.services.android.lib.coordinate.LatLongAlt;
78
import com.o3dr.services.android.lib.drone.attribute.AttributeType;
89
import com.o3dr.services.android.lib.drone.connection.ConnectionParameter;
910
import com.o3dr.services.android.lib.drone.property.Gps;
@@ -21,9 +22,11 @@
2122
import static com.o3dr.services.android.lib.drone.action.ParameterActions.ACTION_WRITE_PARAMETERS;
2223
import static com.o3dr.services.android.lib.drone.action.ParameterActions.EXTRA_PARAMETERS;
2324
import static com.o3dr.services.android.lib.drone.action.StateActions.ACTION_ARM;
25+
import static com.o3dr.services.android.lib.drone.action.StateActions.ACTION_SET_VEHICLE_HOME;
2426
import static com.o3dr.services.android.lib.drone.action.StateActions.ACTION_SET_VEHICLE_MODE;
2527
import static com.o3dr.services.android.lib.drone.action.StateActions.EXTRA_ARM;
2628
import static com.o3dr.services.android.lib.drone.action.StateActions.EXTRA_EMERGENCY_DISARM;
29+
import static com.o3dr.services.android.lib.drone.action.StateActions.EXTRA_VEHICLE_HOME_LOCATION;
2730
import static com.o3dr.services.android.lib.drone.action.StateActions.EXTRA_VEHICLE_MODE;
2831

2932
/**
@@ -225,4 +228,15 @@ public void pauseAtCurrentLocation() {
225228
public void pauseAtCurrentLocation(final AbstractCommandListener listener) {
226229
controlApi.pauseAtCurrentLocation(listener);
227230
}
231+
232+
/**
233+
* Changes the vehicle home location.
234+
* @param homeLocation New home coordinate
235+
* @param listener Register a callback to receive update of the command execution state.
236+
*/
237+
public void setVehicleHome(final LatLongAlt homeLocation, final AbstractCommandListener listener){
238+
Bundle params = new Bundle();
239+
params.putParcelable(EXTRA_VEHICLE_HOME_LOCATION, homeLocation);
240+
drone.performAsyncActionOnDroneThread(new Action(ACTION_SET_VEHICLE_HOME, params), listener);
241+
}
228242
}

ClientLib/src/main/java/com/o3dr/services/android/lib/drone/action/StateActions.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@ public class StateActions {
1414
public static final String ACTION_SET_VEHICLE_MODE = Utils.PACKAGE_NAME + ".action.SET_VEHICLE_MODE";
1515
public static final String EXTRA_VEHICLE_MODE = "extra_vehicle_mode";
1616

17+
public static final String ACTION_SET_VEHICLE_HOME = Utils.PACKAGE_NAME + ".action.SET_VEHICLE_HOME";
18+
public static final String EXTRA_VEHICLE_HOME_LOCATION = "extra_vehicle_home_location";
19+
1720
//Private to prevent instantiation
1821
private StateActions(){}
1922
}

ClientLib/src/main/java/com/o3dr/services/android/lib/drone/attribute/AttributeEvent.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,19 +148,28 @@ private AttributeEvent() {
148148

149149
/**
150150
* Signals updates of the ekf status.
151+
* @see {@link com.o3dr.services.android.lib.drone.property.State}
151152
*/
152153
public static final String STATE_EKF_REPORT = PACKAGE_NAME + ".STATE_EKF_REPORT";
153154

154155
/**
155156
* Signals updates to the ekf position state.
157+
* @see {@link com.o3dr.services.android.lib.drone.property.State}
156158
*/
157159
public static final String STATE_EKF_POSITION = PACKAGE_NAME + ".STATE_EKF_POSITION";
158160

159161
/**
160162
* Signals update of the vehicle mode.
163+
* @see {@link com.o3dr.services.android.lib.drone.property.State}
161164
*/
162165
public static final String STATE_VEHICLE_MODE = PACKAGE_NAME + ".STATE_VEHICLE_MODE";
163166

167+
/**
168+
* Signals vehicle vibration updates.
169+
* @see {@link com.o3dr.services.android.lib.drone.property.State}
170+
*/
171+
public static final String STATE_VEHICLE_VIBRATION = PACKAGE_NAME + ".STATE_VEHICLE_VIBRATION";
172+
164173
/**
165174
* Home attribute events.
166175
*/

ClientLib/src/main/java/com/o3dr/services/android/lib/drone/property/State.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,15 @@ public class State implements DroneAttribute {
2323
private EkfStatus ekfStatus = new EkfStatus();
2424
private boolean isTelemetryLive;
2525

26+
private Vibration vehicleVibration = new Vibration();
27+
2628
public State() {
2729
}
2830

2931
public State(boolean isConnected, VehicleMode mode, boolean armed, boolean flying,
30-
String autopilotErrorId, int mavlinkVersion, String calibrationStatus, long flightStartTime, EkfStatus ekfStatus, boolean isTelemetryLive) {
32+
String autopilotErrorId, int mavlinkVersion, String calibrationStatus,
33+
long flightStartTime, EkfStatus ekfStatus, boolean isTelemetryLive,
34+
Vibration vibration) {
3135
this.isConnected = isConnected;
3236
this.armed = armed;
3337
this.isFlying = flying;
@@ -43,6 +47,9 @@ public State(boolean isConnected, VehicleMode mode, boolean armed, boolean flyin
4347
this.vehicleMode = mode;
4448

4549
this.isTelemetryLive = isTelemetryLive;
50+
51+
if(vibration != null)
52+
this.vehicleVibration = vibration;
4653
}
4754

4855
public boolean isConnected() {
@@ -133,6 +140,10 @@ public EkfStatus getEkfStatus() {
133140
return ekfStatus;
134141
}
135142

143+
public Vibration getVehicleVibration() {
144+
return vehicleVibration;
145+
}
146+
136147
@Override
137148
public int describeContents() {
138149
return 0;
@@ -150,6 +161,7 @@ public void writeToParcel(Parcel dest, int flags) {
150161
dest.writeLong(this.flightStartTime);
151162
dest.writeParcelable(this.ekfStatus, 0);
152163
dest.writeByte(isTelemetryLive ? (byte) 1 : (byte) 0);
164+
dest.writeParcelable(this.vehicleVibration, 0);
153165
}
154166

155167
private State(Parcel in) {
@@ -163,6 +175,7 @@ private State(Parcel in) {
163175
this.flightStartTime = in.readLong();
164176
this.ekfStatus = in.readParcelable(EkfStatus.class.getClassLoader());
165177
this.isTelemetryLive = in.readByte() != 0;
178+
this.vehicleVibration = in.readParcelable(Vibration.class.getClassLoader());
166179
}
167180

168181
public static final Creator<State> CREATOR = new Creator<State>() {
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
package com.o3dr.services.android.lib.drone.property;
2+
3+
parcelable Vibration;
Lines changed: 179 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,179 @@
1+
package com.o3dr.services.android.lib.drone.property;
2+
3+
import android.os.Parcel;
4+
5+
/**
6+
* Reports the vehicle vibration levels and accelerometer clipping.
7+
* Created by Fredia Huya-Kouadio on 9/14/15.
8+
*/
9+
public class Vibration implements DroneAttribute {
10+
11+
/*
12+
Vibration levels thresholds:
13+
- Good <= 30
14+
- 30 < Warning <= 60
15+
- 60 < Danger
16+
*/
17+
18+
/**
19+
* Vibration levels on the x-axis.
20+
*/
21+
private float vibrationX;
22+
23+
/**
24+
* Vibration levels on the y-axis.
25+
*/
26+
private float vibrationY;
27+
28+
/**
29+
* Vibration levels on the z-axis.
30+
*/
31+
private float vibrationZ;
32+
33+
/**
34+
* First accelerometer clipping count.
35+
*/
36+
private long firstAccelClipping;
37+
38+
/**
39+
* Second accelerometer clipping count.
40+
*/
41+
private long secondAccelClipping;
42+
43+
/**
44+
* Third accelerometer clipping count.
45+
*/
46+
private long thirdAccelClipping;
47+
48+
public Vibration(){}
49+
50+
public Vibration(long firstAccelClipping, long secondAccelClipping, long thirdAccelClipping, float vibrationX, float vibrationY, float vibrationZ) {
51+
this.firstAccelClipping = firstAccelClipping;
52+
this.secondAccelClipping = secondAccelClipping;
53+
this.thirdAccelClipping = thirdAccelClipping;
54+
this.vibrationX = vibrationX;
55+
this.vibrationY = vibrationY;
56+
this.vibrationZ = vibrationZ;
57+
}
58+
59+
public long getFirstAccelClipping() {
60+
return firstAccelClipping;
61+
}
62+
63+
public void setFirstAccelClipping(long firstAccelClipping) {
64+
this.firstAccelClipping = firstAccelClipping;
65+
}
66+
67+
public long getSecondAccelClipping() {
68+
return secondAccelClipping;
69+
}
70+
71+
public void setSecondAccelClipping(long secondAccelClipping) {
72+
this.secondAccelClipping = secondAccelClipping;
73+
}
74+
75+
public long getThirdAccelClipping() {
76+
return thirdAccelClipping;
77+
}
78+
79+
public void setThirdAccelClipping(long thirdAccelClipping) {
80+
this.thirdAccelClipping = thirdAccelClipping;
81+
}
82+
83+
public float getVibrationX() {
84+
return vibrationX;
85+
}
86+
87+
public void setVibrationX(float vibrationX) {
88+
this.vibrationX = vibrationX;
89+
}
90+
91+
public float getVibrationY() {
92+
return vibrationY;
93+
}
94+
95+
public void setVibrationY(float vibrationY) {
96+
this.vibrationY = vibrationY;
97+
}
98+
99+
public float getVibrationZ() {
100+
return vibrationZ;
101+
}
102+
103+
public void setVibrationZ(float vibrationZ) {
104+
this.vibrationZ = vibrationZ;
105+
}
106+
107+
@Override
108+
public boolean equals(Object o) {
109+
if (this == o) return true;
110+
if (!(o instanceof Vibration)) return false;
111+
112+
Vibration vibration = (Vibration) o;
113+
114+
if (Float.compare(vibration.vibrationX, vibrationX) != 0) return false;
115+
if (Float.compare(vibration.vibrationY, vibrationY) != 0) return false;
116+
if (Float.compare(vibration.vibrationZ, vibrationZ) != 0) return false;
117+
if (firstAccelClipping != vibration.firstAccelClipping) return false;
118+
if (secondAccelClipping != vibration.secondAccelClipping) return false;
119+
return thirdAccelClipping == vibration.thirdAccelClipping;
120+
121+
}
122+
123+
@Override
124+
public int hashCode() {
125+
int result = (vibrationX != +0.0f ? Float.floatToIntBits(vibrationX) : 0);
126+
result = 31 * result + (vibrationY != +0.0f ? Float.floatToIntBits(vibrationY) : 0);
127+
result = 31 * result + (vibrationZ != +0.0f ? Float.floatToIntBits(vibrationZ) : 0);
128+
result = 31 * result + (int) (firstAccelClipping ^ (firstAccelClipping >>> 32));
129+
result = 31 * result + (int) (secondAccelClipping ^ (secondAccelClipping >>> 32));
130+
result = 31 * result + (int) (thirdAccelClipping ^ (thirdAccelClipping >>> 32));
131+
return result;
132+
}
133+
134+
@Override
135+
public String toString() {
136+
return "Vibration{" +
137+
"firstAccelClipping=" + firstAccelClipping +
138+
", vibrationX=" + vibrationX +
139+
", vibrationY=" + vibrationY +
140+
", vibrationZ=" + vibrationZ +
141+
", secondAccelClipping=" + secondAccelClipping +
142+
", thirdAccelClipping=" + thirdAccelClipping +
143+
'}';
144+
}
145+
146+
@Override
147+
public int describeContents() {
148+
return 0;
149+
}
150+
151+
@Override
152+
public void writeToParcel(Parcel dest, int flags) {
153+
dest.writeFloat(this.vibrationX);
154+
dest.writeFloat(this.vibrationY);
155+
dest.writeFloat(this.vibrationZ);
156+
dest.writeLong(this.firstAccelClipping);
157+
dest.writeLong(this.secondAccelClipping);
158+
dest.writeLong(this.thirdAccelClipping);
159+
}
160+
161+
protected Vibration(Parcel in) {
162+
this.vibrationX = in.readFloat();
163+
this.vibrationY = in.readFloat();
164+
this.vibrationZ = in.readFloat();
165+
this.firstAccelClipping = in.readLong();
166+
this.secondAccelClipping = in.readLong();
167+
this.thirdAccelClipping = in.readLong();
168+
}
169+
170+
public static final Creator<Vibration> CREATOR = new Creator<Vibration>() {
171+
public Vibration createFromParcel(Parcel source) {
172+
return new Vibration(source);
173+
}
174+
175+
public Vibration[] newArray(int size) {
176+
return new Vibration[size];
177+
}
178+
};
179+
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<resources>
3-
<integer name="core_lib_version">20500</integer>
3+
<integer name="core_lib_version">20502</integer>
44
</resources>

ServiceApp/AndroidManifest.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
1212
<uses-permission android:name="android.permission.BLUETOOTH"/>
1313
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
14+
<uses-permission android:name="android.permission.WAKE_LOCK" />
1415

1516
<!-- Support devices without Bluetooth since there are other connection types -->
1617
<uses-feature

ServiceApp/build.gradle

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ dependencies {
4242
def versionMajor = 1
4343
def versionMinor = 4
4444
def versionPatch = 0
45-
def versionBuild = 0 //bump for dogfood builds, public betas, etc.
45+
def versionBuild = 1 //bump for dogfood builds, public betas, etc.
4646
def versionPrefix = "3DR Services v"
4747

4848
//Log levels values
@@ -132,11 +132,14 @@ android {
132132
beta {
133133
signingConfig signingConfigs.release
134134
versionNameSuffix generateVersionNameSuffix(versionBuild, "beta")
135+
buildConfigField "boolean", "WRITE_LOG_FILE", "true"
136+
debuggable true
135137
}
136138

137139
sitl {
138140
signingConfig signingConfigs.debug
139141
buildConfigField "boolean", "SITL_DEBUG", "true"
142+
buildConfigField "boolean", "WRITE_LOG_FILE", "true"
140143
debuggable true
141144
}
142145

0 commit comments

Comments
 (0)