package org.droidplanner.services.android.impl.core.mission.commands;
import com.MAVLink.common.msg_mission_item;
import com.MAVLink.enums.MAV_CMD;
import org.droidplanner.services.android.impl.core.helpers.geoTools.GeoTools;
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 java.util.List;
public class ConditionYawImpl extends MissionCMD {
private boolean isRelative = false;
private double angle = 0;
private double angularSpeed = 0;
public ConditionYawImpl(MissionItemImpl item) {
super(item);
}
public ConditionYawImpl(msg_mission_item msg, MissionImpl missionImpl) {
super(missionImpl);
unpackMAVMessage(msg);
}
public ConditionYawImpl(MissionImpl missionImpl, double angle, boolean isRelative) {
super(missionImpl);
setAngle(angle);
setRelative(isRelative);
}
@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_CONDITION_YAW;
mavMsg.param1 = (float) GeoTools.warpToPositiveAngle(angle);
mavMsg.param2 = (float) Math.abs(angularSpeed);
mavMsg.param3 = (angularSpeed < 0) ? 1 : -1;
mavMsg.param4 = isRelative ? 1: 0;
return list;
}
@Override
public void unpackMAVMessage(msg_mission_item mavMsg) {
isRelative = mavMsg.param4 != 0;
angle = mavMsg.param1;
angularSpeed = mavMsg.param2 * (mavMsg.param3>0 ? -1: +1);
}
@Override
public MissionItemType getType() {
return MissionItemType.CONDITION_YAW;
}
public void setAngle(double angle) {
this.angle = angle;
}
public void setRelative(boolean isRelative){
this.isRelative = isRelative;
}
public void setAngularSpeed(double angularSpeed) {
this.angularSpeed = angularSpeed;
}
public double getAngle() {
return angle;
}
public double getAngularSpeed() {
return angularSpeed;
}
public boolean isRelative(){
return isRelative;
}
}