/*
* Copyright (c) 2005-2010 KOM � Multimedia Communications Lab
*
* This file is part of Simonstrator.KOM.
*
* Simonstrator.KOM is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* PeerfactSim.KOM is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with PeerfactSim.KOM. If not, see .
*
*/
package de.tud.kom.p2psim.api.topology.component;
import java.util.LinkedList;
import de.tud.kom.p2psim.impl.topology.component.BaseTopologyComponent;
import de.tud.kom.p2psim.impl.topology.placement.UAVBasePlacement;
import de.tud.kom.p2psim.impl.topology.util.PositionVector;
import de.tudarmstadt.maki.simonstrator.api.uavsupport.Actuator;
import de.tudarmstadt.maki.simonstrator.api.uavsupport.callbacks.BaseConnectedCallback;
import de.tudarmstadt.maki.simonstrator.api.uavsupport.callbacks.BaseDisconnectedCallback;
import de.tudarmstadt.maki.simonstrator.api.uavsupport.callbacks.BatteryReplacementCallback;
import de.tudarmstadt.maki.simonstrator.api.uavsupport.callbacks.ReachedLocationCallback;
/**
* A controllable location actuator, that can be turned on and off, gives access
* to the current location and battery levels, and also receives a location for
* a target that the actuator will then approach.
*
* @author Julian Zobel
*
*/
public interface ControllableLocationActuator extends Actuator {
public boolean isActive();
public boolean activate();
public boolean deactivate();
public PositionVector getCurrentLocation();
public PositionVector getCurrentDirection();
public PositionVector getBaseLocation();
public void updateCurrentDirection(PositionVector direction);
public double getCurrentBatteryLevel();
public double getCurrentBatteryEnergy();
public double getMaximumBatteryCapacity();
public LinkedList getTargetLocations();
public void setTargetLocation(PositionVector targetLocation, ReachedLocationCallback cb);
public void addTargetLocation(PositionVector targetLocation, ReachedLocationCallback cb);
public void setTargetLocationRoute(LinkedList route, ReachedLocationCallback cb);
public void removeAllTargetLocations();
public void batteryReplacement(BatteryReplacementCallback cb);
public void returnToBase(ReachedLocationCallback cb);
public void connectToBase(BaseConnectedCallback cb);
public void disconnectFromBase(BaseDisconnectedCallback cb);
public void setMovementSpeed(double speed);
public double getMinMovementSpeed();
public double getMaxMovementSpeed();
public double getMovementSpeed();
public double estimatePowerConsumptionWatt(double velocity);
public double estimateFlightDistance(double velocity, double batterylevel, double batterythreshold);
public double estimateOptimalSpeed();
}