fixed cc2420's received signal strength indicator to be an average of the last 8 symbols (192us)
This commit is contained in:
parent
cae40439d7
commit
2f20d6b108
|
@ -26,7 +26,7 @@
|
||||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
* $Id: SkyByteRadio.java,v 1.24 2010/03/10 10:11:36 fros4943 Exp $
|
* $Id: SkyByteRadio.java,v 1.25 2010/03/15 19:22:03 fros4943 Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package se.sics.cooja.mspmote.interfaces;
|
package se.sics.cooja.mspmote.interfaces;
|
||||||
|
@ -325,19 +325,51 @@ public class SkyByteRadio extends Radio implements CustomDataRadio {
|
||||||
return 31;
|
return 31;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Current received signal strength.
|
||||||
|
* May differ from CC2420's internal value which is an average of the last 8 symbols.
|
||||||
|
*/
|
||||||
double currentSignalStrength = 0;
|
double currentSignalStrength = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Last 8 received signal strengths
|
||||||
|
*/
|
||||||
|
private double[] rssiLast = new double[8];
|
||||||
|
private int rssiLastCounter = 0;
|
||||||
|
|
||||||
public double getCurrentSignalStrength() {
|
public double getCurrentSignalStrength() {
|
||||||
return currentSignalStrength;
|
return currentSignalStrength;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setCurrentSignalStrength(final double signalStrength) {
|
public void setCurrentSignalStrength(final double signalStrength) {
|
||||||
|
if (signalStrength == currentSignalStrength) {
|
||||||
|
return; /* ignored */
|
||||||
|
}
|
||||||
currentSignalStrength = signalStrength;
|
currentSignalStrength = signalStrength;
|
||||||
getMote().getSimulation().scheduleEvent(new MspMoteTimeEvent(mote, 0) {
|
if (rssiLastCounter == 0) {
|
||||||
public void execute(long t) {
|
getMote().getSimulation().scheduleEvent(new MspMoteTimeEvent(mote, 0) {
|
||||||
super.execute(t);
|
public void execute(long t) {
|
||||||
cc2420.setRSSI((int) signalStrength);
|
super.execute(t);
|
||||||
}
|
|
||||||
}, mote.getSimulation().getSimulationTime());
|
/* Update average */
|
||||||
|
System.arraycopy(rssiLast, 1, rssiLast, 0, 7);
|
||||||
|
rssiLast[7] = currentSignalStrength;
|
||||||
|
double avg = 0;
|
||||||
|
for (double v: rssiLast) {
|
||||||
|
avg += v;
|
||||||
|
}
|
||||||
|
avg /= rssiLast.length;
|
||||||
|
|
||||||
|
cc2420.setRSSI((int) avg);
|
||||||
|
|
||||||
|
rssiLastCounter--;
|
||||||
|
if (rssiLastCounter > 0) {
|
||||||
|
mote.getSimulation().scheduleEvent(this, t+DELAY_BETWEEN_BYTES/2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, mote.getSimulation().getSimulationTime());
|
||||||
|
}
|
||||||
|
rssiLastCounter = 8;
|
||||||
}
|
}
|
||||||
|
|
||||||
public JPanel getInterfaceVisualizer() {
|
public JPanel getInterfaceVisualizer() {
|
||||||
|
|
Loading…
Reference in a new issue