package com.dronecontrol.droneapi.commands.simple; import com.dronecontrol.droneapi.CommandSender; import com.dronecontrol.droneapi.CommandSenderCoordinator; import com.dronecontrol.droneapi.data.DroneConfiguration; import com.dronecontrol.droneapi.data.NavData; import com.dronecontrol.droneapi.data.enums.ControlDataMode; import static com.google.common.base.Preconditions.checkState; public class ControlDataATCommand extends ATCommandAbstract { private final ControlDataMode controlDataMode; public ControlDataATCommand(ControlDataMode controlDataMode) { super(false); this.controlDataMode = controlDataMode; } @Override public void execute(CommandSender commandSender, CommandSenderCoordinator commandSenderCoordinator) { if (controlDataMode == ControlDataMode.GET_CONFIGURATION_DATA) { commandSenderCoordinator.resetConfiguration(); } super.execute(commandSender, commandSenderCoordinator); } @Override protected String getCommand(int sequenceNumber) { return String.format("AT*CTRL=%d,%d,0", sequenceNumber, controlDataMode.getControlModeCode()); } @Override public int getTimeoutMillis() { switch (controlDataMode) { case RESET_ACK_FLAG: return DEFAULT_NAVDATA_TIMEOUT; case GET_CONFIGURATION_DATA: return DEFAULT_CONFIGURATION_TIMEOUT; default: return 0; } } @Override public void checkSuccess(NavData navData, DroneConfiguration droneConfiguration) { switch (controlDataMode) { case RESET_ACK_FLAG: checkState(!navData.getState().isControlReceived(), "The command config ACK flag was not reset"); break; case GET_CONFIGURATION_DATA: checkState(droneConfiguration != null, "The drone configuration was not sent"); break; } } }