/** Stops the CricketDataBuffer. Allows the thread that reads Cricket data to terminate. */ public synchronized void stop() { if (running) { Logger.log("stopping..."); cricketIface.deregisterCricketDataListener(this); running = false; } else Logger.log("already stopped..."); }
/** Starts the CricketDataBuffer. Creates a thread for reading cricket data. */ public synchronized void start() { if (!running) { Logger.log("starting..."); running = true; cricketIface.registerCricketDataListener(this); // new Thread(this).start(); } else Logger.log("already started..."); }
/** Currently does nothing */ public void run() { Logger.log("thread starting..."); while (running) { try { synchronized (this) { wait(CRICKET_BUFFER_REFRESH_PERIOD); } } catch (InterruptedException e) { e.printStackTrace(); } } Logger.log("thread terminating..."); }
@Override public void newCricketData(CricketData cd) { if (!cd.getConnection()) return; boolean recognized = true; String id = cd.getCricketID(); PlayerPoint3d coord = cricketPositions.get(id); if (coord == null) { recognized = false; Logger.log("New Cricket Data from " + id + ", unrecognized CricketID."); return; } double x = coord.getPx(); double y = coord.getPy(); double z = coord.getPz(); if (!beaconReadings.containsKey(id)) { // is the first time reading from this beacon Logger.logDbg( "Found Cricket Mote " + (recognized ? ("at (" + x + "," + y + "),") : "with unrecognized") + " ID=" + id); } double dist = (double) (cd.getDistance() / 100); // convert distance from cm to meters beaconReadings.put( id, new CricketBeaconReading( System.currentTimeMillis(), x, y, z, dist)); // pythagorean theorem to find distance along ground }
@Override public void run() { // Wait until it's time to start. Logger.logDbg("Pausing for " + waitTime + " milliseconds"); if (waitTime != 0) { synchronized (this) { try { this.wait(waitTime); } catch (InterruptedException e) { e.printStackTrace(); Logger.logWarn("Interrupted while waiting. + " + e.getLocalizedMessage()); } } } isDone = true; Logger.log("Behavior " + getName() + " done."); }