package org.droidplanner.services.android.impl.core.mission.waypoints;
import com.MAVLink.common.msg_mission_item;
import com.MAVLink.enums.MAV_CMD;
import org.droidplanner.services.android.impl.core.mission.MissionImpl;
import org.droidplanner.services.android.impl.core.mission.MissionItemImpl;
import org.droidplanner.services.android.impl.core.mission.MissionItemType;
import com.o3dr.services.android.lib.coordinate.LatLongAlt;
import java.util.List;
public class WaypointImpl extends SpatialCoordItem {
private double delay;
private double acceptanceRadius;
private double yawAngle;
private double orbitalRadius;
private boolean orbitCCW;
public WaypointImpl(MissionItemImpl item) {
super(item);
}
public WaypointImpl(MissionImpl missionImpl, LatLongAlt coord) {
super(missionImpl, coord);
}
public WaypointImpl(msg_mission_item msg, MissionImpl missionImpl) {
super(missionImpl, null);
unpackMAVMessage(msg);
}
@Override
public List<msg_mission_item> packMissionItem() {
List<msg_mission_item> list = super.packMissionItem();
msg_mission_item mavMsg = list.get(0);
mavMsg.command = MAV_CMD.MAV_CMD_NAV_WAYPOINT;
mavMsg.param1 = (float) getDelay();
mavMsg.param2 = (float) getAcceptanceRadius();
mavMsg.param3 = (float) (isOrbitCCW() ? getOrbitalRadius() * -1.0 : getOrbitalRadius());
mavMsg.param4 = (float) getYawAngle();
return list;
}
@Override
public void unpackMAVMessage(msg_mission_item mavMsg) {
super.unpackMAVMessage(mavMsg);
setDelay(mavMsg.param1);
setAcceptanceRadius(mavMsg.param2);
setOrbitCCW(mavMsg.param3 < 0);
setOrbitalRadius(Math.abs(mavMsg.param3));
setYawAngle(mavMsg.param4);
}
@Override
public MissionItemType getType() {
return MissionItemType.WAYPOINT;
}
public double getDelay() {
return delay;
}
public void setDelay(double delay) {
this.delay = delay;
}
public double getAcceptanceRadius() {
return acceptanceRadius;
}
public void setAcceptanceRadius(double acceptanceRadius) {
this.acceptanceRadius = acceptanceRadius;
}
public double getYawAngle() {
return yawAngle;
}
public void setYawAngle(double yawAngle) {
this.yawAngle = yawAngle;
}
public double getOrbitalRadius() {
return orbitalRadius;
}
public void setOrbitalRadius(double orbitalRadius) {
this.orbitalRadius = orbitalRadius;
}
public boolean isOrbitCCW() {
return orbitCCW;
}
public void setOrbitCCW(boolean orbitCCW) {
this.orbitCCW = orbitCCW;
}
}