mirror of https://github.com/contiki-ng/mspsim
Added common base class for 802.15.4 radio chips
This commit is contained in:
parent
a4bdb2b864
commit
b272931e53
|
|
@ -37,13 +37,16 @@
|
|||
*/
|
||||
|
||||
package se.sics.mspsim.chip;
|
||||
|
||||
import se.sics.mspsim.core.*;
|
||||
import se.sics.mspsim.core.IOPort;
|
||||
import se.sics.mspsim.core.MSP430Core;
|
||||
import se.sics.mspsim.core.TimeEvent;
|
||||
import se.sics.mspsim.core.USARTListener;
|
||||
import se.sics.mspsim.core.USARTSource;
|
||||
import se.sics.mspsim.util.ArrayFIFO;
|
||||
import se.sics.mspsim.util.CCITT_CRC;
|
||||
import se.sics.mspsim.util.Utils;
|
||||
|
||||
public class CC2420 extends Chip implements USARTListener, RFListener, RFSource {
|
||||
public class CC2420 extends Radio802154 implements USARTListener {
|
||||
|
||||
public enum Reg {
|
||||
SNOP, SXOSCON, STXCAL, SRXON, /* 0x00 */
|
||||
|
|
@ -310,8 +313,6 @@ public class CC2420 extends Chip implements USARTListener, RFListener, RFSource
|
|||
|
||||
private int txCursor;
|
||||
private boolean on;
|
||||
private RFListener rfListener;
|
||||
private ChannelListener channelListener;
|
||||
|
||||
private TimeEvent oscillatorEvent = new TimeEvent(0, "CC2420 OSC") {
|
||||
public void execute(long t) {
|
||||
|
|
@ -1257,6 +1258,11 @@ public class CC2420 extends Chip implements USARTListener, RFListener, RFSource
|
|||
* External APIs for simulators simulating Radio medium, etc.
|
||||
*
|
||||
*****************************************************************************/
|
||||
@Override
|
||||
public boolean isReadyToReceive() {
|
||||
return getState() == RadioState.RX_SFD_SEARCH;
|
||||
}
|
||||
|
||||
public void updateActiveFrequency() {
|
||||
/* INVERTED: f = 5 * (c - 11) + 357 + 0x4000 */
|
||||
activeFrequency = registers[REG_FSCTRL] - 357 + 2405 - 0x4000;
|
||||
|
|
@ -1264,10 +1270,12 @@ public class CC2420 extends Chip implements USARTListener, RFListener, RFSource
|
|||
}
|
||||
|
||||
public int getActiveFrequency() {
|
||||
updateActiveFrequency();
|
||||
return activeFrequency;
|
||||
}
|
||||
|
||||
public int getActiveChannel() {
|
||||
updateActiveFrequency();
|
||||
return activeChannel;
|
||||
}
|
||||
|
||||
|
|
@ -1336,24 +1344,6 @@ public class CC2420 extends Chip implements USARTListener, RFListener, RFSource
|
|||
return -100;
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized void addRFListener(RFListener rf) {
|
||||
rfListener = RFListener.Proxy.INSTANCE.add(rfListener, rf);
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized void removeRFListener(RFListener rf) {
|
||||
rfListener = RFListener.Proxy.INSTANCE.remove(rfListener, rf);
|
||||
}
|
||||
|
||||
public synchronized void addChannelListener(ChannelListener listener) {
|
||||
channelListener = ChannelListener.Proxy.INSTANCE.add(channelListener, listener);
|
||||
}
|
||||
|
||||
public synchronized void removeChannelListener(ChannelListener listener) {
|
||||
channelListener = ChannelListener.Proxy.INSTANCE.remove(channelListener, listener);
|
||||
}
|
||||
|
||||
public void notifyReset() {
|
||||
super.notifyReset();
|
||||
setChipSelect(false);
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ import se.sics.mspsim.util.ArrayFIFO;
|
|||
import se.sics.mspsim.util.CCITT_CRC;
|
||||
import se.sics.mspsim.util.Utils;
|
||||
|
||||
public class CC2520 extends Chip implements USARTListener, RFListener, RFSource, SPIData {
|
||||
public class CC2520 extends Radio802154 implements USARTListener, SPIData {
|
||||
public static final int FIFO_POLARITY = (1<<10);
|
||||
public static final int FIFOP_POLARITY = (1<<9);
|
||||
public static final int SFD_POLARITY = (1<<8);
|
||||
|
|
@ -405,8 +405,6 @@ public class CC2520 extends Chip implements USARTListener, RFListener, RFSource,
|
|||
|
||||
private int txCursor;
|
||||
private boolean isRadioOn;
|
||||
private RFListener rfListener;
|
||||
private ChannelListener channelListener;
|
||||
|
||||
private TimeEvent oscillatorEvent = new TimeEvent(0, "CC2520 OSC") {
|
||||
public void execute(long t) {
|
||||
|
|
@ -1232,21 +1230,32 @@ public class CC2520 extends Chip implements USARTListener, RFListener, RFSource,
|
|||
* External APIs for simulators simulating Radio medium, etc.
|
||||
*
|
||||
*****************************************************************************/
|
||||
public void updateActiveFrequency() {
|
||||
|
||||
@Override
|
||||
public boolean isReadyToReceive() {
|
||||
return getState() == RadioState.RX_SFD_SEARCH;
|
||||
}
|
||||
|
||||
private void updateActiveFrequency() {
|
||||
/* INVERTED: f = 5 * (c - 11) + 357 + 0x4000 */
|
||||
int freg = memory[REG_FREQCTRL] & 0x7f;
|
||||
activeFrequency = freg + 2394;
|
||||
activeChannel = 11 + (freg - 11) / 5;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getActiveFrequency() {
|
||||
updateActiveFrequency();
|
||||
return activeFrequency;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getActiveChannel() {
|
||||
updateActiveFrequency();
|
||||
return activeChannel;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getOutputPowerIndicator() {
|
||||
return (memory[REG_TXPOWER] & 0x1f);
|
||||
}
|
||||
|
|
@ -1256,12 +1265,22 @@ public class CC2520 extends Chip implements USARTListener, RFListener, RFSource,
|
|||
* @param lqi The Corr-val
|
||||
* @sa CC2520 Datasheet
|
||||
*/
|
||||
@Override
|
||||
public void setLQI(int lqi){
|
||||
if(lqi < 0) lqi = 0;
|
||||
else if(lqi > 0x7f ) lqi = 0x7f;
|
||||
if(lqi < 0) {
|
||||
lqi = 0;
|
||||
} else if(lqi > 0x7f ) {
|
||||
lqi = 0x7f;
|
||||
}
|
||||
corrval = lqi;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getLQI() {
|
||||
return corrval;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setRSSI(int power) {
|
||||
final int minp = -128 + RSSI_OFFSET;
|
||||
final int maxp = 128 + RSSI_OFFSET;
|
||||
|
|
@ -1279,10 +1298,12 @@ public class CC2520 extends Chip implements USARTListener, RFListener, RFSource,
|
|||
updateCCA();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRSSI() {
|
||||
return rssi;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getOutputPower() {
|
||||
/* From CC2520 datasheet, table 17 */
|
||||
int indicator = getOutputPowerIndicator();
|
||||
|
|
@ -1331,24 +1352,6 @@ public class CC2520 extends Chip implements USARTListener, RFListener, RFSource,
|
|||
return -100;
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized void addRFListener(RFListener rf) {
|
||||
rfListener = RFListener.Proxy.INSTANCE.add(rfListener, rf);
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized void removeRFListener(RFListener rf) {
|
||||
rfListener = RFListener.Proxy.INSTANCE.remove(rfListener, rf);
|
||||
}
|
||||
|
||||
public synchronized void addChannelListener(ChannelListener listener) {
|
||||
channelListener = ChannelListener.Proxy.INSTANCE.add(channelListener, listener);
|
||||
}
|
||||
|
||||
public synchronized void removeChannelListener(ChannelListener listener) {
|
||||
channelListener = ChannelListener.Proxy.INSTANCE.remove(channelListener, listener);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notifyReset() {
|
||||
super.notifyReset();
|
||||
|
|
|
|||
|
|
@ -0,0 +1,80 @@
|
|||
/**
|
||||
* Copyright (c) 2012, Swedish Institute of Computer Science.
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. Neither the name of the Institute nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* This file is part of MSPSim.
|
||||
*/
|
||||
package se.sics.mspsim.chip;
|
||||
import se.sics.mspsim.core.Chip;
|
||||
import se.sics.mspsim.core.MSP430Core;
|
||||
|
||||
/**
|
||||
* @author Niclas Finne
|
||||
*/
|
||||
public abstract class Radio802154 extends Chip implements RFListener, RFSource {
|
||||
|
||||
protected RFListener rfListener;
|
||||
protected ChannelListener channelListener;
|
||||
|
||||
public Radio802154(String id, String name, MSP430Core cpu) {
|
||||
super(id, name, cpu);
|
||||
}
|
||||
|
||||
public abstract boolean isReadyToReceive();
|
||||
|
||||
@Override
|
||||
public abstract void receivedByte(byte c);
|
||||
|
||||
public abstract int getActiveChannel();
|
||||
public abstract int getActiveFrequency();
|
||||
public abstract int getOutputPower();
|
||||
public abstract int getOutputPowerIndicator();
|
||||
|
||||
public abstract int getRSSI();
|
||||
public abstract void setRSSI(int rssi);
|
||||
|
||||
public abstract int getLQI();
|
||||
public abstract void setLQI(int lqi);
|
||||
|
||||
@Override
|
||||
public synchronized void addRFListener(RFListener rf) {
|
||||
rfListener = RFListener.Proxy.INSTANCE.add(rfListener, rf);
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized void removeRFListener(RFListener rf) {
|
||||
rfListener = RFListener.Proxy.INSTANCE.remove(rfListener, rf);
|
||||
}
|
||||
|
||||
public synchronized void addChannelListener(ChannelListener listener) {
|
||||
channelListener = ChannelListener.Proxy.INSTANCE.add(channelListener, listener);
|
||||
}
|
||||
|
||||
public synchronized void removeChannelListener(ChannelListener listener) {
|
||||
channelListener = ChannelListener.Proxy.INSTANCE.remove(channelListener, listener);
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Reference in New Issue