package org.droidplanner.services.android.impl.core.MAVLink; import com.MAVLink.Messages.MAVLinkMessage; import com.MAVLink.common.msg_heartbeat; import com.MAVLink.enums.MAV_AUTOPILOT; import com.MAVLink.enums.MAV_TYPE; import org.droidplanner.services.android.impl.core.drone.manager.MavLinkDroneManager; import org.droidplanner.services.android.impl.core.firmware.FirmwareType; /** * Parse the received mavlink messages, and update the drone state appropriately. */ public class MavLinkMsgHandler { public static final int AUTOPILOT_COMPONENT_ID = 1; private final MavLinkDroneManager droneMgr; public MavLinkMsgHandler(MavLinkDroneManager droneMgr) { this.droneMgr = droneMgr; } public void receiveData(MAVLinkMessage msg) { if (msg.compid != AUTOPILOT_COMPONENT_ID) { return; } switch (msg.msgid) { case msg_heartbeat.MAVLINK_MSG_ID_HEARTBEAT: msg_heartbeat msg_heart = (msg_heartbeat) msg; handleHeartbeat(msg_heart); break; default: break; } } private void handleHeartbeat(msg_heartbeat heartbeat) { switch (heartbeat.autopilot) { case MAV_AUTOPILOT.MAV_AUTOPILOT_ARDUPILOTMEGA: switch (heartbeat.type) { case MAV_TYPE.MAV_TYPE_FIXED_WING: droneMgr.onVehicleTypeReceived(FirmwareType.ARDU_PLANE); break; case MAV_TYPE.MAV_TYPE_GENERIC: case MAV_TYPE.MAV_TYPE_QUADROTOR: case MAV_TYPE.MAV_TYPE_COAXIAL: case MAV_TYPE.MAV_TYPE_HELICOPTER: case MAV_TYPE.MAV_TYPE_HEXAROTOR: case MAV_TYPE.MAV_TYPE_OCTOROTOR: case MAV_TYPE.MAV_TYPE_TRICOPTER: droneMgr.onVehicleTypeReceived(FirmwareType.ARDU_COPTER); break; case MAV_TYPE.MAV_TYPE_GROUND_ROVER: case MAV_TYPE.MAV_TYPE_SURFACE_BOAT: droneMgr.onVehicleTypeReceived(FirmwareType.ARDU_ROVER); break; } break; case MAV_AUTOPILOT.MAV_AUTOPILOT_PX4: droneMgr.onVehicleTypeReceived(FirmwareType.PX4_NATIVE); break; case MAV_AUTOPILOT.MAV_AUTOPILOT_GENERIC: case MAV_AUTOPILOT.MAV_AUTOPILOT_GENERIC_MISSION_FULL: case MAV_AUTOPILOT.MAV_AUTOPILOT_GENERIC_WAYPOINTS_ONLY: case MAV_AUTOPILOT.MAV_AUTOPILOT_GENERIC_WAYPOINTS_AND_SIMPLE_NAVIGATION_ONLY: default: droneMgr.onVehicleTypeReceived(FirmwareType.GENERIC); break; } } }