Skip to content

Instantly share code, notes, and snippets.

@jschementi
Forked from ckundo/gist:743807
Created December 16, 2010 19:08

Revisions

  1. @ckundo ckundo created this gist Dec 16, 2010.
    53 changes: 53 additions & 0 deletions gistfile1.java
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,53 @@
    package earthquake_detector;

    import java.util.Map;

    import com.buglabs.bug.module.gps.pub.IPositionProvider;
    import com.buglabs.bug.swarm.connector.pub.ISyncFilter;

    /**
    * Given a previous sample and the current sample, determine if the difference is great enough to pass data to the server.
    *
    * @author kgilmer
    *
    */
    public class AccelerometerSampleFilter implements ISyncFilter {

    private float lx, ly, lz;
    private final IPositionProvider positionProvider;

    public AccelerometerSampleFilter(IPositionProvider positionProvider) {
    this.positionProvider = positionProvider;
    lx = 0;
    ly = 0;
    lz = 0;
    }

    @Override
    public boolean synchronize(Map model, Object[] keys) {
    boolean retVal = false;

    float ac[] = (float []) model.get(Activator.KEY_ACCELERATION);

    if (ac == null) {
    return false;
    }

    if (deviates(lx, ac[0], 1) || deviates(ly, ac[1], 1) || deviates(lz, ac[2], 1)) {
    //Add our current location in since we'll be sending event data to the server.
    model.put(Activator.KEY_LOCATION, Monitor.positionAsArray(positionProvider.getPosition()));
    retVal = true;
    }

    lx = ac[0];
    ly = ac[1];
    lz = ac[2];

    return retVal;
    }

    private boolean deviates(float src, float target, float delta) {
    return Math.abs(src - target) > delta;
    }

    }