public void update() { long now = simulation.getSimulationTime(); accumulateDuration(now - lastUpdateTime); /* Radio on/off */ if (radioWasOn) { accumulateRadioOn(now - lastUpdateTime); } /* Radio tx/rx */ if (lastRadioState == RadioState.TRANSMITTING) { accumulateRadioTx(now - lastUpdateTime); } else if (lastRadioState == RadioState.RECEIVING) { accumulateRadioRx(now - lastUpdateTime); } else if (lastRadioState == RadioState.INTERFERED) { accumulateRadioIntefered(now - lastUpdateTime); } /* Await next radio event */ if (radio.isTransmitting()) { lastRadioState = RadioState.TRANSMITTING; } else if (!radio.isRadioOn()) { lastRadioState = RadioState.IDLE; } else if (radio.isInterfered()) { lastRadioState = RadioState.INTERFERED; } else if (radio.isReceiving()) { lastRadioState = RadioState.RECEIVING; } else { lastRadioState = RadioState.IDLE; } radioWasOn = radio.isRadioOn(); lastUpdateTime = now; }
public MoteTracker(Mote mote) { this.simulation = mote.getSimulation(); this.mote = mote; this.radio = mote.getInterfaces().getRadio(); radioWasOn = radio.isRadioOn(); if (radio.isTransmitting()) { lastRadioState = RadioState.TRANSMITTING; } else if (radio.isReceiving()) { lastRadioState = RadioState.RECEIVING; } else if (radio.isInterfered()) { lastRadioState = RadioState.INTERFERED; } else { lastRadioState = RadioState.IDLE; } lastUpdateTime = simulation.getSimulationTime(); radio.addObserver(this); }