From: <ni...@us...> - 2008-04-24 22:04:47
|
Revision: 265 http://mspsim.svn.sourceforge.net/mspsim/?rev=265&view=rev Author: nifi Date: 2008-04-24 15:04:23 -0700 (Thu, 24 Apr 2008) Log Message: ----------- CC2420 and packet radio API cleanup Modified Paths: -------------- mspsim/se/sics/mspsim/chip/CC2420.java mspsim/se/sics/mspsim/chip/PacketListener.java mspsim/se/sics/mspsim/platform/sky/SkyGui.java mspsim/se/sics/mspsim/platform/sky/SkyNode.java mspsim/se/sics/mspsim/util/NetworkConnection.java Modified: mspsim/se/sics/mspsim/chip/CC2420.java =================================================================== --- mspsim/se/sics/mspsim/chip/CC2420.java 2008-04-24 15:29:13 UTC (rev 264) +++ mspsim/se/sics/mspsim/chip/CC2420.java 2008-04-24 22:04:23 UTC (rev 265) @@ -192,8 +192,10 @@ if (packetListener != null) { // First byte is length and is not included in the data buffer (and its length) int len = memory[RAM_TXFIFO]; - int[] data = new int[len]; - System.arraycopy(memory, RAM_TXFIFO + 1, data, 0, len); + byte[] data = new byte[len + 1]; + for (int i = 0, n = data.length; i < n; i++) { + data[i] = (byte) (memory[RAM_TXFIFO + i] & 0xff); + } packetListener.transmissionEnded(data); } status &= ~STATUS_TX_ACTIVE; @@ -500,21 +502,16 @@ } // Length is not assumed to be and no CRC?! - public void setIncomingPacket(int[] packet) { - setIncomingPacket(packet, 0, packet.length); - } - - public void setIncomingPacket(int[] packet, int start, int end) { + public void setIncomingPacket(byte[] receivedData) { int adr = RAM_RXFIFO; // length of packet is data size + RSSI and CRC/Correlation! - memory[adr++] = end - start + 2; - for (int i = start; i < end; i++) { - memory[adr++] = packet[i] & 0xff; + for (byte element: receivedData) { + memory[adr++] = element & 0xff; } // Should take a RSSI value as input or use a set-RSSI value... - memory[adr++] = (registers[REG_RSSI]) & 0xff; + memory[adr - 2] = (registers[REG_RSSI]) & 0xff; // Set CRC ok and add a correlation - memory[adr++] = (37) | 0x80; + memory[adr - 1] = 37 | 0x80; rxPacket = true; rxCursor = 0; rxLen = adr; Modified: mspsim/se/sics/mspsim/chip/PacketListener.java =================================================================== --- mspsim/se/sics/mspsim/chip/PacketListener.java 2008-04-24 15:29:13 UTC (rev 264) +++ mspsim/se/sics/mspsim/chip/PacketListener.java 2008-04-24 22:04:23 UTC (rev 265) @@ -40,5 +40,5 @@ public interface PacketListener { public void transmissionStarted(); - public void transmissionEnded(int[] receivedData); + public void transmissionEnded(byte[] receivedData); } Modified: mspsim/se/sics/mspsim/platform/sky/SkyGui.java =================================================================== --- mspsim/se/sics/mspsim/platform/sky/SkyGui.java 2008-04-24 15:29:13 UTC (rev 264) +++ mspsim/se/sics/mspsim/platform/sky/SkyGui.java 2008-04-24 22:04:23 UTC (rev 265) @@ -183,9 +183,6 @@ // System.out.println("Key Pressed: " + key.getKeyChar()); if (key.getKeyChar() == 'd') { node.setDebug(!node.getDebug()); - } else if (key.getKeyChar() == 'r') { - System.out.println("Setting incoming radio packet..."); - node.radioIncomingPacket(new int[] {11,0,42,0,'H','e','j','s','a','n'}); } } Modified: mspsim/se/sics/mspsim/platform/sky/SkyNode.java =================================================================== --- mspsim/se/sics/mspsim/platform/sky/SkyNode.java 2008-04-24 15:29:13 UTC (rev 264) +++ mspsim/se/sics/mspsim/platform/sky/SkyNode.java 2008-04-24 22:04:23 UTC (rev 265) @@ -176,11 +176,6 @@ flash.dataReceived(source, data); } - - public void radioIncomingPacket(int[] data) { - radio.setIncomingPacket(data); - } - public int getModeMax() { return MODE_MAX; } @@ -258,15 +253,15 @@ network = new NetworkConnection(); network.addPacketListener(new PacketListener() { - public void transmissionEnded(int[] receivedData) { - radio.setIncomingPacket(receivedData, 0, receivedData.length - 2); + public void transmissionEnded(byte[] receivedData) { + radio.setIncomingPacket(receivedData); } public void transmissionStarted() { } }); // TODO: remove this test... radio.setPacketListener(new PacketListener() { - public void transmissionEnded(int[] receivedData) { + public void transmissionEnded(byte[] receivedData) { // System.out.println(getName() + " got packet from radio " + SkyNode.this.cpu.getTimeMillis()); network.dataSent(receivedData); } Modified: mspsim/se/sics/mspsim/util/NetworkConnection.java =================================================================== --- mspsim/se/sics/mspsim/util/NetworkConnection.java 2008-04-24 15:29:13 UTC (rev 264) +++ mspsim/se/sics/mspsim/util/NetworkConnection.java 2008-04-24 22:04:23 UTC (rev 265) @@ -105,39 +105,30 @@ // Data incoming from the network!!! - forward to radio and if server, to // all other nodes - private void dataReceived(byte[] data, int len, ConnectionThread source) { - int[] buf = new int[len]; - for (int i = 0; i < buf.length; i++) { - buf[i] = data[i]; - } + private void dataReceived(byte[] data, ConnectionThread source) { if (listener != null) { // Send this data to the transmitter in this node! listener.transmissionStarted(); - listener.transmissionEnded(buf); + listener.transmissionEnded(data); } // And if this is the server, propagate to the others if (serverSocket != null) { - dataSent(buf, source); + dataSent(data, source); } } - private byte[] buf = new byte[256]; - // Data was sent from the radio in the node (or other node) and should // be sent out to other nodes!!! - public void dataSent(int[] data) { - dataSent(data, null); + public void dataSent(byte[] receivedData) { + dataSent(receivedData, null); } // Data was sent either from radio, or came from another "radio" - // and if so it should be propagated to all others. - public void dataSent(int[] data, ConnectionThread source) { + public void dataSent(byte[] receivedData, ConnectionThread source) { if (connections.size() > 0) { - for (int i = 0; i < data.length; i++) { - buf[i] = (byte) data[i]; - } ConnectionThread[] cthr = connections.toArray(new ConnectionThread[connections.size()]); for (int i = 0; i < cthr.length; i++) { if (cthr[i].isClosed()) { @@ -145,11 +136,10 @@ // Do not write back to the source } else if (cthr[i] != source){ try { - cthr[i].output.write((byte) data.length); - cthr[i].output.write(buf, 0, data.length); + cthr[i].output.write(receivedData, 0, receivedData.length); if (DEBUG) { - System.out.println("NetworkConnection: wrote " + data.length + " bytes"); - printPacket(buf, data.length); + System.out.println("NetworkConnection: wrote " + receivedData.length + " bytes"); + printPacket(receivedData); } } catch (IOException e) { e.printStackTrace(); @@ -160,8 +150,8 @@ } } - private void printPacket(byte[] data, int len) { - for (int i = 0; i < len; i++) { + private void printPacket(byte[] data) { + for (int i = 0, len = data.length; i < len; i++) { System.out.print(Utils.hex8(data[i]) + " "); } System.out.println(); @@ -184,8 +174,6 @@ } class ConnectionThread implements Runnable { - byte[] buffer = new byte[256]; - Socket socket; DataInputStream input; OutputStream output; @@ -216,15 +204,16 @@ if (DEBUG) System.out.println("NetworkConnection: Started connection thread..."); try { while (socket != null) { - int len; - len = input.read(); + int len = input.read(); if (len > 0) { - input.readFully(buffer, 0, len); + byte[] buffer = new byte[len + 1]; + buffer[0] = (byte) (len & 0xff); + input.readFully(buffer, 1, len); if (DEBUG) { System.out.println("NetworkConnection: Read packet with " + len + " bytes"); - printPacket(buffer, len); + printPacket(buffer); } - dataReceived(buffer, len, this); + dataReceived(buffer, this); } } } catch (IOException e) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |