using cc2420 packet converter for conversions between cc2420 and cooja
This commit is contained in:
parent
6e792ff766
commit
8668f69077
|
@ -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.2 2008/10/28 17:03:37 fros4943 Exp $
|
* $Id: SkyByteRadio.java,v 1.3 2008/10/29 18:38:26 fros4943 Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package se.sics.cooja.mspmote.interfaces;
|
package se.sics.cooja.mspmote.interfaces;
|
||||||
|
@ -46,9 +46,9 @@ import se.sics.cooja.interfaces.Position;
|
||||||
import se.sics.cooja.interfaces.Radio;
|
import se.sics.cooja.interfaces.Radio;
|
||||||
import se.sics.cooja.mspmote.SkyMote;
|
import se.sics.cooja.mspmote.SkyMote;
|
||||||
import se.sics.mspsim.chip.CC2420;
|
import se.sics.mspsim.chip.CC2420;
|
||||||
import se.sics.mspsim.chip.PacketListener;
|
|
||||||
import se.sics.mspsim.chip.RFListener;
|
import se.sics.mspsim.chip.RFListener;
|
||||||
import se.sics.mspsim.platform.sky.RadioWrapper;
|
import se.sics.mspsim.chip.CC2420.RadioState;
|
||||||
|
import se.sics.mspsim.chip.CC2420.StateListener;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* CC2420 to COOJA wrapper.
|
* CC2420 to COOJA wrapper.
|
||||||
|
@ -76,9 +76,9 @@ public class SkyByteRadio extends Radio implements CustomDataRadio {
|
||||||
|
|
||||||
private boolean radioOn = true;
|
private boolean radioOn = true;
|
||||||
|
|
||||||
private CC2420RadioByte lastOutgoingCC2420Packet = null;
|
private CC2420RadioByte lastOutgoingByte = null;
|
||||||
|
|
||||||
private RadioPacket lastIncomingCC2420Packet = null;
|
private CC2420RadioByte lastIncomingByte = null;
|
||||||
|
|
||||||
private RadioPacket lastOutgoingPacket = null;
|
private RadioPacket lastOutgoingPacket = null;
|
||||||
|
|
||||||
|
@ -106,7 +106,7 @@ public class SkyByteRadio extends Radio implements CustomDataRadio {
|
||||||
}
|
}
|
||||||
|
|
||||||
/* send this byte to all nodes */
|
/* send this byte to all nodes */
|
||||||
lastOutgoingCC2420Packet = new CC2420RadioByte(data);
|
lastOutgoingByte = new CC2420RadioByte(data);
|
||||||
lastEventTime = myMote.getSimulation().getSimulationTime();
|
lastEventTime = myMote.getSimulation().getSimulationTime();
|
||||||
lastEvent = RadioEvent.CUSTOM_DATA_TRANSMITTED;
|
lastEvent = RadioEvent.CUSTOM_DATA_TRANSMITTED;
|
||||||
setChanged();
|
setChanged();
|
||||||
|
@ -121,10 +121,8 @@ public class SkyByteRadio extends Radio implements CustomDataRadio {
|
||||||
|
|
||||||
if (len == expLen) {
|
if (len == expLen) {
|
||||||
/*logger.debug("----- SKY CUSTOM DATA TRANSMITTED -----");*/
|
/*logger.debug("----- SKY CUSTOM DATA TRANSMITTED -----");*/
|
||||||
/* TODO: fix conversion later... */
|
|
||||||
byte[] packet = new byte[expLen - 5 - 1 - 2];
|
lastOutgoingPacket = CC2420RadioPacketConverter.fromCC2420ToCooja(buffer);
|
||||||
System.arraycopy(buffer, 6, packet, 0, packet.length);
|
|
||||||
lastOutgoingPacket = new COOJARadioPacket(packet);
|
|
||||||
lastEventTime = myMote.getSimulation().getSimulationTime();
|
lastEventTime = myMote.getSimulation().getSimulationTime();
|
||||||
lastEvent = RadioEvent.PACKET_TRANSMITTED;
|
lastEvent = RadioEvent.PACKET_TRANSMITTED;
|
||||||
/*logger.debug("----- SKY PACKET TRANSMITTED -----");*/
|
/*logger.debug("----- SKY PACKET TRANSMITTED -----");*/
|
||||||
|
@ -143,13 +141,6 @@ public class SkyByteRadio extends Radio implements CustomDataRadio {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
// cc2420.addOperatingModeListener(new OperatingModeListener() {
|
|
||||||
//
|
|
||||||
// public void modeChanged(Chip source, int mode) {
|
|
||||||
// SkyRadio.this.mode = mode;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// });
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Packet radio support */
|
/* Packet radio support */
|
||||||
|
@ -161,24 +152,60 @@ public class SkyByteRadio extends Radio implements CustomDataRadio {
|
||||||
return lastIncomingPacket;
|
return lastIncomingPacket;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private byte[] crossBufferedData = null;
|
||||||
|
|
||||||
|
private StateListener cc2420StateListener = new StateListener() {
|
||||||
|
public void newState(RadioState state) {
|
||||||
|
if (cc2420.getState() == CC2420.RadioState.RX_SFD_SEARCH) {
|
||||||
|
cc2420.setStateListener(null);
|
||||||
|
if (crossBufferedData == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*logger.info("Radio is now ready to receive the incoming data");*/
|
||||||
|
|
||||||
|
for (byte b: crossBufferedData) {
|
||||||
|
cc2420.receivedByte(b);
|
||||||
|
}
|
||||||
|
crossBufferedData = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
public void setReceivedPacket(RadioPacket packet) {
|
public void setReceivedPacket(RadioPacket packet) {
|
||||||
lastIncomingPacket = packet;
|
lastIncomingPacket = packet;
|
||||||
//lastIncomingCC2420Packet = CC2420RadioPacketConverter.fromCoojaToCC24240(packet);
|
|
||||||
|
/* TODO Receiving all bytes at the same time ok? */
|
||||||
|
byte[] packetData = CC2420RadioPacketConverter.fromCoojaToCC24240((COOJARadioPacket) packet);
|
||||||
|
|
||||||
|
if (cc2420.getState() != CC2420.RadioState.RX_SFD_SEARCH) {
|
||||||
|
/*logger.info("Radio is not currently active. Let's wait some...");*/
|
||||||
|
|
||||||
|
crossBufferedData = packetData;
|
||||||
|
cc2420.setStateListener(cc2420StateListener);
|
||||||
|
|
||||||
|
/* TODO Event to remove listener and give up */
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (byte b: packetData) {
|
||||||
|
cc2420.receivedByte(b);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Custom data radio support */
|
/* Custom data radio support */
|
||||||
public Object getLastCustomDataTransmitted() {
|
public Object getLastCustomDataTransmitted() {
|
||||||
return lastOutgoingCC2420Packet;
|
return lastOutgoingByte;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Object getLastCustomDataReceived() {
|
public Object getLastCustomDataReceived() {
|
||||||
return lastIncomingCC2420Packet;
|
return lastIncomingByte;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void receiveCustomData(Object data) {
|
public void receiveCustomData(Object data) {
|
||||||
if (data instanceof CC2420RadioByte) {
|
if (data instanceof CC2420RadioByte) {
|
||||||
lastIncomingCC2420Packet = (CC2420RadioByte) data;
|
lastIncomingByte = (CC2420RadioByte) data;
|
||||||
cc2420.receivedByte(lastIncomingCC2420Packet.getPacketData()[0]);
|
cc2420.receivedByte(lastIncomingByte.getPacketData()[0]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -196,7 +223,9 @@ public class SkyByteRadio extends Radio implements CustomDataRadio {
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getChannel() {
|
public int getChannel() {
|
||||||
return cc2420.getActiveChannel();
|
/* TODO XXX Enable CC2420 channel selection (when implemented) */
|
||||||
|
//return cc2420.getActiveChannel();
|
||||||
|
return 26;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getFrequency() {
|
public int getFrequency() {
|
||||||
|
@ -239,7 +268,6 @@ public class SkyByteRadio extends Radio implements CustomDataRadio {
|
||||||
isReceiving = false;
|
isReceiving = false;
|
||||||
// hasFailedReception = false;
|
// hasFailedReception = false;
|
||||||
lastIncomingPacket = null;
|
lastIncomingPacket = null;
|
||||||
lastIncomingCC2420Packet = null;
|
|
||||||
cc2420.setCCA(true);
|
cc2420.setCCA(true);
|
||||||
|
|
||||||
lastEventTime = myMote.getSimulation().getSimulationTime();
|
lastEventTime = myMote.getSimulation().getSimulationTime();
|
||||||
|
|
Loading…
Reference in a new issue