package com.dronecontrol.droneapi.commands.simple;
import com.dronecontrol.droneapi.CommandSender;
import com.dronecontrol.droneapi.CommandSenderCoordinator;
import com.dronecontrol.droneapi.commands.ATCommand;
import com.dronecontrol.droneapi.data.DroneConfiguration;
import com.dronecontrol.droneapi.data.NavData;
public abstract class ATCommandAbstract implements ATCommand
{
private static final String CARRIAGE_RETURN = "\r";
private static final int NO_TIMEOUT = 0;
private final boolean preparationCommandNeeded;
public ATCommandAbstract(boolean preparationCommandNeeded)
{
this.preparationCommandNeeded = preparationCommandNeeded;
}
@Override
public void execute(CommandSender commandSender, CommandSenderCoordinator commandSenderCoordinator)
{
commandSender.sendCommand(this);
}
@Override
public String getPreparationCommandText(int sequenceNumber)
{
return getPreparationCommand(sequenceNumber) == null ? null : getPreparationCommand(sequenceNumber) + CARRIAGE_RETURN;
}
@Override
public String getCommandText(int sequenceNumber)
{
return getCommand(sequenceNumber) + CARRIAGE_RETURN;
}
protected abstract String getCommand(int sequenceNumber);
protected String getPreparationCommand(int sequenceNumber)
{
return null;
}
@Override
public boolean isPreparationCommandNeeded()
{
return preparationCommandNeeded;
}
@Override
public int getTimeoutMillis()
{
// Overwrite if something different is needed
return NO_TIMEOUT;
}
@Override
public void checkSuccess(NavData navData, DroneConfiguration droneConfiguration)
{
// Overwrite if something different is needed
}
}