package org.schmivits.dynonskyview; public class DummyFlightData { private static interface Signal { public float computeValue(long currentTime); } private static Signal makeSignal( final long startTime, final long period, final float phase, final float min, final float max) { return new Signal() { @Override public float computeValue(long currentTime) { double x = (((double) currentTime - startTime) / period) + phase; float value = (float) ((1 + Math.sin(x)) * (max - min) / 2 + min); return value; } }; } private static interface BlockUpdater { public void update(long currentTime, ADAHRSDataBlock block); } private final BlockUpdater mUpdater; public DummyFlightData(final long period, final long startTime) { final Signal airspeed = makeSignal(startTime, period, 0.0f, 18f, 86f); // meters/second final Signal displayedAltitude = makeSignal(startTime, period, 0.2f, 1000f, 2000f); // meters final Signal lateralAcceleration = makeSignal(startTime, period, 0.3f, -0.1f, 0.1f); // g's final Signal angleOfAttack = makeSignal(startTime, period, 0.4f, 0f, 0.95f); // ratio of critical mUpdater = new BlockUpdater() { @Override public void update(long currentTime, ADAHRSDataBlock block) { block.time = currentTime - startTime; block.pitch = Float.NaN; block.roll = Float.NaN; block.yaw = Float.NaN; block.airspeed = airspeed.computeValue(currentTime); block.displayedAltitude = displayedAltitude.computeValue(currentTime); block.pressureAltitude = Float.NaN; block.turnRate = 0f; block.verticalSpeed = Float.NaN; block.lateralAcceleration = lateralAcceleration.computeValue(currentTime); block.verticalAcceleration = Float.NaN; block.angleOfAttack = angleOfAttack.computeValue(currentTime); } }; } public ADAHRSDataBlock getBlock(long currentTime) { ADAHRSDataBlock block = new ADAHRSDataBlock(); mUpdater.update(currentTime, block); return block; } }