Skip to content

Commit 541780f

Browse files
committed
Merge pull request #280 from dronekit/fix_heartbeat_detection
Fix heartbeat detection
2 parents 17f8923 + 3f27285 commit 541780f

File tree

3 files changed

+25
-37
lines changed

3 files changed

+25
-37
lines changed

ServiceApp/src/org/droidplanner/services/android/core/MAVLink/MavLinkMsgHandler.java

-19
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,6 @@ public void receiveData(MAVLinkMessage msg) {
3232
handleHeartbeat(msg_heart);
3333
break;
3434

35-
/*
36-
TODO: find more reliable method to determine the vehicle firmware.
37-
case msg_statustext.MAVLINK_MSG_ID_STATUSTEXT:
38-
msg_statustext msg_statustext = (msg_statustext) msg;
39-
handleStatusText(msg_statustext.getText());
40-
break;*/
41-
4235
default:
4336
break;
4437
}
@@ -77,16 +70,4 @@ private void handleHeartbeat(msg_heartbeat heartbeat) {
7770
}
7871

7972
}
80-
81-
private void handleStatusText(String message) {
82-
if (message.startsWith("ArduCopter") || message.startsWith("APM:Copter")) {
83-
droneMgr.onVehicleTypeReceived(FirmwareType.ARDU_COPTER);
84-
} else if (message.startsWith("ArduPlane") || message.startsWith("APM:Plane")) {
85-
droneMgr.onVehicleTypeReceived(FirmwareType.ARDU_PLANE);
86-
} else if (message.startsWith("Solo")) {
87-
droneMgr.onVehicleTypeReceived(FirmwareType.ARDU_SOLO);
88-
} else if (message.startsWith("ArduRover") || message.startsWith("APM:Rover")) {
89-
droneMgr.onVehicleTypeReceived(FirmwareType.ARDU_ROVER);
90-
}
91-
}
9273
}

ServiceApp/src/org/droidplanner/services/android/core/drone/autopilot/apm/ArduPilot.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ public int getMavlinkVersion() {
194194
return heartbeat.getMavlinkVersion();
195195
}
196196

197-
protected void onHeartbeat(msg_heartbeat msg) {
197+
protected void onHeartbeat(MAVLinkMessage msg) {
198198
heartbeat.onHeartbeat(msg);
199199
}
200200

@@ -491,10 +491,11 @@ public void onMavLinkMessageReceived(MAVLinkMessage message) {
491491
if (compId != AUTOPILOT_COMPONENT_ID
492492
&& compId != ARTOO_COMPONENT_ID
493493
&& compId != TELEMETRY_RADIO_COMPONENT_ID) {
494-
// Timber.d("Received unsupported component id: %d", compId);
495494
return;
496495
}
497496

497+
onHeartbeat(message);
498+
498499
if (getParameters().processMessage(message)) {
499500
return;
500501
}
@@ -509,7 +510,6 @@ public void onMavLinkMessageReceived(MAVLinkMessage message) {
509510
processState(msg_heart);
510511
ApmModes newMode = ApmModes.getMode(msg_heart.custom_mode, getType());
511512
getState().setMode(newMode);
512-
onHeartbeat(msg_heart);
513513
break;
514514

515515
case msg_statustext.MAVLINK_MSG_ID_STATUSTEXT:

ServiceApp/src/org/droidplanner/services/android/core/drone/variables/HeartBeat.java

+22-15
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.droidplanner.services.android.core.drone.variables;
22

3+
import com.MAVLink.Messages.MAVLinkMessage;
34
import com.MAVLink.common.msg_heartbeat;
45

56
import org.droidplanner.services.android.core.drone.DroneInterfaces.DroneEventsType;
@@ -60,25 +61,35 @@ public short getMavlinkVersion() {
6061
return mMavlinkVersion;
6162
}
6263

63-
public void onHeartbeat(msg_heartbeat msg) {
64-
sysid = (byte) msg.sysid;
65-
compid = (byte) msg.compid;
66-
mMavlinkVersion = msg.mavlink_version;
64+
public void onHeartbeat(MAVLinkMessage msg) {
65+
msg_heartbeat heartBeatMsg = msg instanceof msg_heartbeat ? (msg_heartbeat) msg : null;
66+
if(heartBeatMsg != null){
67+
sysid = (byte) msg.sysid;
68+
compid = (byte) msg.compid;
69+
mMavlinkVersion = heartBeatMsg.mavlink_version;
70+
}
6771

6872
switch (heartbeatState) {
6973
case FIRST_HEARTBEAT:
70-
notifyConnected();
71-
Timber.d("Received first heartbeat.");
72-
myDrone.notifyDroneEvent(DroneEventsType.HEARTBEAT_FIRST);
74+
if(heartBeatMsg != null) {
75+
Timber.i("Received first heartbeat.");
76+
77+
heartbeatState = HeartbeatState.NORMAL_HEARTBEAT;
78+
restartWatchdog(HEARTBEAT_NORMAL_TIMEOUT);
79+
80+
myDrone.notifyDroneEvent(DroneEventsType.HEARTBEAT_FIRST);
81+
}
7382
break;
7483

7584
case LOST_HEARTBEAT:
7685
myDrone.notifyDroneEvent(DroneEventsType.HEARTBEAT_RESTORED);
86+
// FALL THROUGH
87+
88+
default:
89+
heartbeatState = HeartbeatState.NORMAL_HEARTBEAT;
90+
restartWatchdog(HEARTBEAT_NORMAL_TIMEOUT);
7791
break;
7892
}
79-
80-
heartbeatState = HeartbeatState.NORMAL_HEARTBEAT;
81-
restartWatchdog(HEARTBEAT_NORMAL_TIMEOUT);
8293
}
8394

8495
public boolean hasHeartbeat() {
@@ -108,10 +119,6 @@ public void onDroneEvent(DroneEventsType event, MavLinkDrone drone) {
108119
}
109120
}
110121

111-
private void notifyConnected() {
112-
restartWatchdog(HEARTBEAT_NORMAL_TIMEOUT);
113-
}
114-
115122
private void notifyDisconnected() {
116123
watchdog.removeCallbacks(watchdogCallback);
117124
heartbeatState = HeartbeatState.FIRST_HEARTBEAT;
@@ -126,7 +133,7 @@ private void onHeartbeatTimeout() {
126133
break;
127134

128135
case FIRST_HEARTBEAT:
129-
Timber.d("First heartbeat timeout.");
136+
Timber.i("First heartbeat timeout.");
130137
myDrone.notifyDroneEvent(DroneEventsType.CONNECTION_FAILED);
131138
break;
132139

0 commit comments

Comments
 (0)