updated cc2420 converter to 6 byte xmac headers

This commit is contained in:
fros4943 2009-05-26 13:33:35 +00:00
parent cd00bd3fdc
commit a8e66853bc

View File

@ -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: CC2420RadioPacketConverter.java,v 1.9 2009/05/06 12:59:12 fros4943 Exp $ * $Id: CC2420RadioPacketConverter.java,v 1.10 2009/05/26 13:33:35 fros4943 Exp $
*/ */
package se.sics.cooja.mspmote.interfaces; package se.sics.cooja.mspmote.interfaces;
@ -35,6 +35,7 @@ import org.apache.log4j.Logger;
import se.sics.cooja.ConvertedRadioPacket; import se.sics.cooja.ConvertedRadioPacket;
import se.sics.cooja.RadioPacket; import se.sics.cooja.RadioPacket;
import se.sics.cooja.util.StringUtils;
/** /**
* Converts radio packets between X-MAC/CC24240/Sky and COOJA. * Converts radio packets between X-MAC/CC24240/Sky and COOJA.
@ -48,7 +49,7 @@ public class CC2420RadioPacketConverter {
public static final boolean WITH_PREAMBLE = true; public static final boolean WITH_PREAMBLE = true;
public static final boolean WITH_SYNCH = true; public static final boolean WITH_SYNCH = true;
public static final boolean WITH_XMAC = true; public static final boolean WITH_XMAC = true;
public static final boolean WITH_CHECKSUM = true; public static final boolean WITH_CHECKSUM = false;
public static final boolean WITH_TIMESTAMP = true; public static final boolean WITH_TIMESTAMP = true;
public static final boolean WITH_FOOTER = true; public static final boolean WITH_FOOTER = true;
@ -75,7 +76,7 @@ public class CC2420RadioPacketConverter {
/* 1 byte length */ /* 1 byte length */
len = (byte) packetData.length; len = (byte) packetData.length;
if (WITH_XMAC) { if (WITH_XMAC) {
len += 4; len += 6;
} }
if (WITH_CHECKSUM) { if (WITH_CHECKSUM) {
len += 2; len += 2;
@ -90,12 +91,16 @@ public class CC2420RadioPacketConverter {
/* (TODO) 4 byte X-MAC */ /* (TODO) 4 byte X-MAC */
if (WITH_XMAC) { if (WITH_XMAC) {
cc2420Data[pos++] = 0; cc2420Data[pos++] = 1; /* TYPE_DATA */
accumulatedCRC = CRCCoder.crc16Add((byte)0, accumulatedCRC); accumulatedCRC = CRCCoder.crc16Add((byte)0, accumulatedCRC);
cc2420Data[pos++] = 0; cc2420Data[pos++] = 0;
accumulatedCRC = CRCCoder.crc16Add((byte)0, accumulatedCRC); accumulatedCRC = CRCCoder.crc16Add((byte)0, accumulatedCRC);
cc2420Data[pos++] = 0; /* XXX sender: 0.0 */
accumulatedCRC = CRCCoder.crc16Add((byte)0, accumulatedCRC);
cc2420Data[pos++] = 0; cc2420Data[pos++] = 0;
accumulatedCRC = CRCCoder.crc16Add((byte)0, accumulatedCRC); accumulatedCRC = CRCCoder.crc16Add((byte)0, accumulatedCRC);
cc2420Data[pos++] = 0; /* XXX receiver: 0.0 */
accumulatedCRC = CRCCoder.crc16Add((byte)0, accumulatedCRC);
cc2420Data[pos++] = 0; cc2420Data[pos++] = 0;
accumulatedCRC = CRCCoder.crc16Add((byte)0, accumulatedCRC); accumulatedCRC = CRCCoder.crc16Add((byte)0, accumulatedCRC);
} }
@ -157,8 +162,8 @@ public class CC2420RadioPacketConverter {
/* (IGNORED) 4 byte X-MAC */ /* (IGNORED) 4 byte X-MAC */
if (WITH_XMAC) { if (WITH_XMAC) {
pos += 4; pos += 6;
len -= 4; len -= 6;
} }
/* (IGNORED) 2 bytes checksum */ /* (IGNORED) 2 bytes checksum */
@ -182,7 +187,7 @@ public class CC2420RadioPacketConverter {
byte originalData[] = new byte[originalLen]; byte originalData[] = new byte[originalLen];
System.arraycopy(data, 6, originalData, 0, originalLen); System.arraycopy(data, 6, originalData, 0, originalLen);
if (len < 0) { if (len < 0) {
logger.fatal("Negative length radio packet. Conversion failed."); logger.warn("No cross-level conversion available: negative packet length");
return new ConvertedRadioPacket(new byte[0], originalData); return new ConvertedRadioPacket(new byte[0], originalData);
} }
byte convertedData[] = new byte[len]; byte convertedData[] = new byte[len];