package org.droidplanner.services.android.impl.core.drone.variables;
import org.droidplanner.services.android.impl.core.MAVLink.MavLinkStreamRates;
import org.droidplanner.services.android.impl.core.drone.DroneInterfaces.DroneEventsType;
import org.droidplanner.services.android.impl.core.drone.DroneInterfaces.OnDroneListener;
import org.droidplanner.services.android.impl.core.drone.DroneVariable;
import org.droidplanner.services.android.impl.core.drone.autopilot.MavLinkDrone;
public class StreamRates extends DroneVariable<MavLinkDrone> implements OnDroneListener<MavLinkDrone> {
private Rates rates;
public StreamRates(MavLinkDrone myDrone) {
super(myDrone);
myDrone.addDroneListener(this);
}
public void setRates(Rates rates) {
if(this.rates == null || !this.rates.equals(rates)) {
this.rates = rates;
if (myDrone.isConnected() && myDrone.isConnectionAlive()) {
setupStreamRatesFromPref();
}
}
}
@Override
public void onDroneEvent(DroneEventsType event, MavLinkDrone drone) {
switch (event) {
case CONNECTED:
case HEARTBEAT_FIRST:
case HEARTBEAT_RESTORED:
setupStreamRatesFromPref();
break;
default:
break;
}
}
private void setupStreamRatesFromPref() {
if(rates == null)
return;
MavLinkStreamRates.setupStreamRates(myDrone.getMavClient(), myDrone.getSysid(),
myDrone.getCompid(), rates.extendedStatus, rates.extra1, rates.extra2,
rates.extra3, rates.position, rates.rcChannels, rates.rawSensors,
rates.rawController);
}
public static class Rates {
public int extendedStatus;
public int extra1;
public int extra2;
public int extra3;
public int position;
public int rcChannels;
public int rawSensors;
public int rawController;
public Rates(int rate){
this.extendedStatus = rate;
this.extra1 = rate;
this.extra2 = rate;
this.extra3 = rate;
this.position = rate;
this.rcChannels = rate;
this.rawSensors = rate;
this.rawController = rate;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (!(o instanceof Rates)) {
return false;
}
Rates rates = (Rates) o;
if (extendedStatus != rates.extendedStatus) {
return false;
}
if (extra1 != rates.extra1) {
return false;
}
if (extra2 != rates.extra2) {
return false;
}
if (extra3 != rates.extra3) {
return false;
}
if (position != rates.position) {
return false;
}
if (rcChannels != rates.rcChannels) {
return false;
}
if (rawSensors != rates.rawSensors) {
return false;
}
return rawController == rates.rawController;
}
@Override
public int hashCode() {
int result = extendedStatus;
result = 31 * result + extra1;
result = 31 * result + extra2;
result = 31 * result + extra3;
result = 31 * result + position;
result = 31 * result + rcChannels;
result = 31 * result + rawSensors;
result = 31 * result + rawController;
return result;
}
}
}