allow radio to flush before feeding with packet data
This commit is contained in:
parent
a7a87386b5
commit
3c7565dd68
|
@ -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.3 2008/10/29 18:38:26 fros4943 Exp $
|
* $Id: SkyByteRadio.java,v 1.4 2008/11/03 12:31:33 fros4943 Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package se.sics.cooja.mspmote.interfaces;
|
package se.sics.cooja.mspmote.interfaces;
|
||||||
|
@ -63,7 +63,7 @@ public class SkyByteRadio extends Radio implements CustomDataRadio {
|
||||||
|
|
||||||
private RadioEvent lastEvent = RadioEvent.UNKNOWN;
|
private RadioEvent lastEvent = RadioEvent.UNKNOWN;
|
||||||
|
|
||||||
private SkyMote myMote;
|
private SkyMote mote;
|
||||||
|
|
||||||
private CC2420 cc2420;
|
private CC2420 cc2420;
|
||||||
|
|
||||||
|
@ -89,7 +89,7 @@ public class SkyByteRadio extends Radio implements CustomDataRadio {
|
||||||
//TODO: HW on/off
|
//TODO: HW on/off
|
||||||
|
|
||||||
public SkyByteRadio(SkyMote mote) {
|
public SkyByteRadio(SkyMote mote) {
|
||||||
this.myMote = mote;
|
this.mote = mote;
|
||||||
this.cc2420 = mote.skyNode.radio;
|
this.cc2420 = mote.skyNode.radio;
|
||||||
|
|
||||||
cc2420.setRFListener(new RFListener() {
|
cc2420.setRFListener(new RFListener() {
|
||||||
|
@ -98,7 +98,7 @@ public class SkyByteRadio extends Radio implements CustomDataRadio {
|
||||||
byte[] buffer = new byte[127 + 5];
|
byte[] buffer = new byte[127 + 5];
|
||||||
public void receivedByte(byte data) {
|
public void receivedByte(byte data) {
|
||||||
if (len == 0) {
|
if (len == 0) {
|
||||||
lastEventTime = myMote.getSimulation().getSimulationTime();
|
lastEventTime = SkyByteRadio.this.mote.getSimulation().getSimulationTime();
|
||||||
lastEvent = RadioEvent.TRANSMISSION_STARTED;
|
lastEvent = RadioEvent.TRANSMISSION_STARTED;
|
||||||
/*logger.debug("----- SKY TRANSMISSION STARTED -----");*/
|
/*logger.debug("----- SKY TRANSMISSION STARTED -----");*/
|
||||||
setChanged();
|
setChanged();
|
||||||
|
@ -107,7 +107,7 @@ public class SkyByteRadio extends Radio implements CustomDataRadio {
|
||||||
|
|
||||||
/* send this byte to all nodes */
|
/* send this byte to all nodes */
|
||||||
lastOutgoingByte = new CC2420RadioByte(data);
|
lastOutgoingByte = new CC2420RadioByte(data);
|
||||||
lastEventTime = myMote.getSimulation().getSimulationTime();
|
lastEventTime = SkyByteRadio.this.mote.getSimulation().getSimulationTime();
|
||||||
lastEvent = RadioEvent.CUSTOM_DATA_TRANSMITTED;
|
lastEvent = RadioEvent.CUSTOM_DATA_TRANSMITTED;
|
||||||
setChanged();
|
setChanged();
|
||||||
notifyObservers();
|
notifyObservers();
|
||||||
|
@ -123,7 +123,7 @@ public class SkyByteRadio extends Radio implements CustomDataRadio {
|
||||||
/*logger.debug("----- SKY CUSTOM DATA TRANSMITTED -----");*/
|
/*logger.debug("----- SKY CUSTOM DATA TRANSMITTED -----");*/
|
||||||
|
|
||||||
lastOutgoingPacket = CC2420RadioPacketConverter.fromCC2420ToCooja(buffer);
|
lastOutgoingPacket = CC2420RadioPacketConverter.fromCC2420ToCooja(buffer);
|
||||||
lastEventTime = myMote.getSimulation().getSimulationTime();
|
lastEventTime = SkyByteRadio.this.mote.getSimulation().getSimulationTime();
|
||||||
lastEvent = RadioEvent.PACKET_TRANSMITTED;
|
lastEvent = RadioEvent.PACKET_TRANSMITTED;
|
||||||
/*logger.debug("----- SKY PACKET TRANSMITTED -----");*/
|
/*logger.debug("----- SKY PACKET TRANSMITTED -----");*/
|
||||||
setChanged();
|
setChanged();
|
||||||
|
@ -132,7 +132,7 @@ public class SkyByteRadio extends Radio implements CustomDataRadio {
|
||||||
|
|
||||||
// System.out.println("## CC2420 Transmission finished...");
|
// System.out.println("## CC2420 Transmission finished...");
|
||||||
|
|
||||||
lastEventTime = myMote.getSimulation().getSimulationTime();
|
lastEventTime = SkyByteRadio.this.mote.getSimulation().getSimulationTime();
|
||||||
/*logger.debug("----- SKY TRANSMISSION FINISHED -----");*/
|
/*logger.debug("----- SKY TRANSMISSION FINISHED -----");*/
|
||||||
lastEvent = RadioEvent.TRANSMISSION_FINISHED;
|
lastEvent = RadioEvent.TRANSMISSION_FINISHED;
|
||||||
setChanged();
|
setChanged();
|
||||||
|
@ -154,20 +154,37 @@ public class SkyByteRadio extends Radio implements CustomDataRadio {
|
||||||
|
|
||||||
private byte[] crossBufferedData = null;
|
private byte[] crossBufferedData = null;
|
||||||
|
|
||||||
|
private TimeEvent receiveCrosslevelDataEvent = new TimeEvent(0) {
|
||||||
|
public void execute(int t) {
|
||||||
|
|
||||||
|
if (crossBufferedData == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*logger.info("Radio is now ready to receive the incoming data");*/
|
||||||
|
|
||||||
|
for (byte b: crossBufferedData) {
|
||||||
|
cc2420.receivedByte(b);
|
||||||
|
}
|
||||||
|
crossBufferedData = null;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
private StateListener cc2420StateListener = new StateListener() {
|
private StateListener cc2420StateListener = new StateListener() {
|
||||||
public void newState(RadioState state) {
|
public void newState(RadioState state) {
|
||||||
if (cc2420.getState() == CC2420.RadioState.RX_SFD_SEARCH) {
|
if (cc2420.getState() == CC2420.RadioState.RX_SFD_SEARCH) {
|
||||||
cc2420.setStateListener(null);
|
cc2420.setStateListener(null);
|
||||||
|
|
||||||
if (crossBufferedData == null) {
|
if (crossBufferedData == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*logger.info("Radio is now ready to receive the incoming data");*/
|
/* Receive data very soon (just wait for a radio flush) */
|
||||||
|
mote.getSimulation().scheduleEvent(
|
||||||
|
receiveCrosslevelDataEvent,
|
||||||
|
mote.getSimulation().getSimulationTime()+1
|
||||||
|
);
|
||||||
|
|
||||||
for (byte b: crossBufferedData) {
|
|
||||||
cc2420.receivedByte(b);
|
|
||||||
}
|
|
||||||
crossBufferedData = null;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -176,7 +193,7 @@ public class SkyByteRadio extends Radio implements CustomDataRadio {
|
||||||
lastIncomingPacket = packet;
|
lastIncomingPacket = packet;
|
||||||
|
|
||||||
/* TODO Receiving all bytes at the same time ok? */
|
/* TODO Receiving all bytes at the same time ok? */
|
||||||
byte[] packetData = CC2420RadioPacketConverter.fromCoojaToCC24240((COOJARadioPacket) packet);
|
byte[] packetData = CC2420RadioPacketConverter.fromCoojaToCC2420((COOJARadioPacket) packet);
|
||||||
|
|
||||||
if (cc2420.getState() != CC2420.RadioState.RX_SFD_SEARCH) {
|
if (cc2420.getState() != CC2420.RadioState.RX_SFD_SEARCH) {
|
||||||
/*logger.info("Radio is not currently active. Let's wait some...");*/
|
/*logger.info("Radio is not currently active. Let's wait some...");*/
|
||||||
|
@ -238,7 +255,7 @@ public class SkyByteRadio extends Radio implements CustomDataRadio {
|
||||||
isReceiving = true;
|
isReceiving = true;
|
||||||
/* TODO cc2420.setSFD(true); */
|
/* TODO cc2420.setSFD(true); */
|
||||||
|
|
||||||
lastEventTime = myMote.getSimulation().getSimulationTime();
|
lastEventTime = mote.getSimulation().getSimulationTime();
|
||||||
lastEvent = RadioEvent.RECEPTION_STARTED;
|
lastEvent = RadioEvent.RECEPTION_STARTED;
|
||||||
/*logger.debug("----- SKY RECEPTION STARTED -----");*/
|
/*logger.debug("----- SKY RECEPTION STARTED -----");*/
|
||||||
setChanged();
|
setChanged();
|
||||||
|
@ -252,7 +269,7 @@ public class SkyByteRadio extends Radio implements CustomDataRadio {
|
||||||
isInterfered = false;
|
isInterfered = false;
|
||||||
cc2420.setCCA(false);
|
cc2420.setCCA(false);
|
||||||
|
|
||||||
lastEventTime = myMote.getSimulation().getSimulationTime();
|
lastEventTime = mote.getSimulation().getSimulationTime();
|
||||||
lastEvent = RadioEvent.RECEPTION_FINISHED;
|
lastEvent = RadioEvent.RECEPTION_FINISHED;
|
||||||
/*logger.debug("----- SKY RECEPTION FINISHED -----");*/
|
/*logger.debug("----- SKY RECEPTION FINISHED -----");*/
|
||||||
setChanged();
|
setChanged();
|
||||||
|
@ -270,7 +287,7 @@ public class SkyByteRadio extends Radio implements CustomDataRadio {
|
||||||
lastIncomingPacket = null;
|
lastIncomingPacket = null;
|
||||||
cc2420.setCCA(true);
|
cc2420.setCCA(true);
|
||||||
|
|
||||||
lastEventTime = myMote.getSimulation().getSimulationTime();
|
lastEventTime = mote.getSimulation().getSimulationTime();
|
||||||
lastEvent = RadioEvent.RECEPTION_INTERFERED;
|
lastEvent = RadioEvent.RECEPTION_INTERFERED;
|
||||||
/*logger.debug("----- SKY RECEPTION INTERFERED -----");*/
|
/*logger.debug("----- SKY RECEPTION INTERFERED -----");*/
|
||||||
setChanged();
|
setChanged();
|
||||||
|
@ -380,11 +397,11 @@ public class SkyByteRadio extends Radio implements CustomDataRadio {
|
||||||
}
|
}
|
||||||
|
|
||||||
public Mote getMote() {
|
public Mote getMote() {
|
||||||
return myMote;
|
return mote;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Position getPosition() {
|
public Position getPosition() {
|
||||||
return myMote.getInterfaces().getPosition();
|
return mote.getInterfaces().getPosition();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Collection<Element> getConfigXML() {
|
public Collection<Element> getConfigXML() {
|
||||||
|
|
Loading…
Reference in a new issue