diff --git a/tools/cooja/apps/avrora/src/org/contikios/cooja/avrmote/AvrMoteMemory.java b/tools/cooja/apps/avrora/src/org/contikios/cooja/avrmote/AvrMoteMemory.java index 83e5203e0..bd2b719cb 100644 --- a/tools/cooja/apps/avrora/src/org/contikios/cooja/avrmote/AvrMoteMemory.java +++ b/tools/cooja/apps/avrora/src/org/contikios/cooja/avrmote/AvrMoteMemory.java @@ -28,15 +28,11 @@ package org.contikios.cooja.avrmote; -import java.util.ArrayList; -import java.util.Iterator; import org.apache.log4j.Logger; -import org.contikios.cooja.AddressMemory; import avrora.arch.avr.AVRProperties; import avrora.core.SourceMapping; -import avrora.core.SourceMapping.Location; import avrora.sim.AtmelInterpreter; import avrora.sim.Simulator.Watch; import java.util.Map; @@ -45,7 +41,7 @@ import org.contikios.cooja.mote.memory.MemoryLayout; /** * @author Joakim Eriksson */ -public class AvrMoteMemory implements MemoryInterface, AddressMemory { +public class AvrMoteMemory implements MemoryInterface { private static Logger logger = Logger.getLogger(AvrMoteMemory.class); private SourceMapping memoryMap; @@ -67,109 +63,6 @@ public class AvrMoteMemory implements MemoryInterface, AddressMemory { return 0; } - @Override - public byte[] getByteArray(String varName, int length) - throws UnknownVariableException { - return null; - } - - @Override - public byte getByteValueOf(String varName) throws UnknownVariableException { - return (byte) getValueOf(varName, 1); - } - - private int getValueOf(String varName, int len) throws UnknownVariableException { - Location mem = memoryMap.getLocation(varName); - if (mem == null) throw new UnknownVariableException("Variable does not exist: " + varName); - - System.out.println("Variable:" + varName + " in section: " + mem.section); - System.out.println("LMA: " + Integer.toHexString(mem.lma_addr)); - System.out.println("VMA: " + Integer.toHexString(mem.vma_addr)); - - System.out.println("Data: " + interpreter.getDataByte(mem.lma_addr & 0xfffff)); - System.out.println("Flash: " + interpreter.getFlashByte(mem.lma_addr & 0xfffff)); - int data = 0; - if (mem.vma_addr > 0xfffff) { - for (int i = 0; i < len; i++) { - data = (data << 8) + (interpreter.getDataByte((mem.vma_addr & 0xfffff) + len - i - 1) & 0xff); - System.out.println("Read byte: " + interpreter.getDataByte((mem.vma_addr & 0xfffff) + i) + - " => " + data); - } - } else { - for (int i = 0; i < len; i++) { - data = (data << 8) + interpreter.getFlashByte(mem.vma_addr + len - i - 1) & 0xff; - } - } - return data; - } - - private void setValue(String varName, int val, int len) throws UnknownVariableException { - Location mem = memoryMap.getLocation(varName); - if (mem == null) throw new UnknownVariableException("Variable does not exist: " + varName); - - int data = val; - if (mem.vma_addr > 0xfffff) { - // write LSB first. - for (int i = 0; i < len; i++) { - interpreter.writeDataByte((mem.vma_addr & 0xfffff) + i, (byte) (data & 0xff)); - System.out.println("Wrote byte: " + (data & 0xff)); - data = data >> 8; - } - } else { - for (int i = 0; i < len; i++) { - interpreter.writeFlashByte(mem.vma_addr + i, (byte) (data & 0xff)); - data = data >> 8; - } - } - } - - @Override - public int getIntValueOf(String varName) throws UnknownVariableException { - return getValueOf(varName, 2); - } - - @Override - public int getIntegerLength() { - return 2; - } - - @Override - public int getVariableAddress(String varName) - throws UnknownVariableException { - return 0; - } - - @Override - public String[] getVariableNames() { - ArrayList symbols = new ArrayList(); - for (Iterator i = memoryMap.getIterator(); i.hasNext();) { - symbols.add(((Location) i.next()).name); - } - return symbols.toArray(new String[0]); - } - - @Override - public void setByteArray(String varName, byte[] data) - throws UnknownVariableException { - } - - @Override - public void setByteValueOf(String varName, byte newVal) - throws UnknownVariableException { - setValue(varName, newVal, 1); - } - - @Override - public void setIntValueOf(String varName, int newVal) - throws UnknownVariableException { - setValue(varName, newVal, 2); - } - - @Override - public boolean variableExists(String varName) { - return memoryMap.getLocation(varName) != null; - } - @Override public byte[] getMemory() throws MoteMemoryException { throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. diff --git a/tools/cooja/apps/avrora/src/org/contikios/cooja/avrmote/interfaces/MicaZID.java b/tools/cooja/apps/avrora/src/org/contikios/cooja/avrmote/interfaces/MicaZID.java index a9b9e2190..b52e40730 100644 --- a/tools/cooja/apps/avrora/src/org/contikios/cooja/avrmote/interfaces/MicaZID.java +++ b/tools/cooja/apps/avrora/src/org/contikios/cooja/avrmote/interfaces/MicaZID.java @@ -38,16 +38,15 @@ import javax.swing.JPanel; import org.apache.log4j.Logger; import org.jdom.Element; -import avrora.sim.State; -import avrora.sim.Simulator.Watch; - import org.contikios.cooja.Mote; import org.contikios.cooja.MoteTimeEvent; import org.contikios.cooja.Simulation; import org.contikios.cooja.TimeEvent; -import org.contikios.cooja.avrmote.AvrMoteMemory; import org.contikios.cooja.avrmote.MicaZMote; import org.contikios.cooja.interfaces.MoteID; +import org.contikios.cooja.mote.memory.MemoryInterface; +import org.contikios.cooja.mote.memory.MemoryInterface.SegmentMonitor; +import org.contikios.cooja.mote.memory.VarMemory; public class MicaZID extends MoteID { @@ -57,7 +56,7 @@ public class MicaZID extends MoteID { private int moteID = -1; /* TODO Implement */ - private AvrMoteMemory moteMem; + private VarMemory moteMem; boolean tosID = false; boolean contikiID = false; private MicaZMote mote; @@ -80,23 +79,26 @@ public class MicaZID extends MoteID { public MicaZID(Mote mote) { this.mote = (MicaZMote) mote; - this.moteMem = (AvrMoteMemory) mote.getMemory(); + this.moteMem = new VarMemory(mote.getMemory()); if (moteMem.variableExists("node_id")) { contikiID = true; - int addr = moteMem.getVariableAddress("node_id"); - moteMem.insertWatch(new Watch() { - public void fireAfterRead(State arg0, int arg1, byte arg2) { - System.out.println("Read from node_id: " + arg2); + int addr = (int) moteMem.getVariableAddress("node_id"); + moteMem.addVarMonitor( + SegmentMonitor.EventType.READWRITE, + "node_id", + new SegmentMonitor() { + + @Override + public void memoryChanged(MemoryInterface memory, SegmentMonitor.EventType type, long address) { + if (type == EventType.READ) { + System.out.println("Read from node_id."); + } else { + System.out.println("Writing to node_id."); + } } - public void fireAfterWrite(State arg0, int arg1, byte arg2) { - } - public void fireBeforeRead(State arg0, int arg1) { - } - public void fireBeforeWrite(State arg0, int arg1, byte arg2) { - System.out.println("Writing to node_id: " + arg2); - }}, addr); + }); } if (moteMem.variableExists("TOS_NODE_ID")) { diff --git a/tools/cooja/apps/mspsim/src/org/contikios/cooja/mspmote/MspMoteMemory.java b/tools/cooja/apps/mspsim/src/org/contikios/cooja/mspmote/MspMoteMemory.java index 834fb70a6..16b453bf4 100644 --- a/tools/cooja/apps/mspsim/src/org/contikios/cooja/mspmote/MspMoteMemory.java +++ b/tools/cooja/apps/mspsim/src/org/contikios/cooja/mspmote/MspMoteMemory.java @@ -33,14 +33,13 @@ import java.util.Map; import org.apache.log4j.Logger; -import org.contikios.cooja.AddressMemory; import org.contikios.cooja.Mote; import org.contikios.cooja.mote.memory.MemoryInterface; import org.contikios.cooja.mote.memory.MemoryLayout; import se.sics.mspsim.core.MSP430; import se.sics.mspsim.util.MapEntry; -public class MspMoteMemory implements MemoryInterface, AddressMemory { +public class MspMoteMemory implements MemoryInterface { private static Logger logger = Logger.getLogger(MspMoteMemory.class); private final ArrayList mapEntries; @@ -58,145 +57,11 @@ public class MspMoteMemory implements MemoryInterface, AddressMemory { this.cpu = cpu; } - @Override - public String[] getVariableNames() { - String[] names = new String[mapEntries.size()]; - for (int i = 0; i < mapEntries.size(); i++) { - names[i] = mapEntries.get(i).getName(); - } - return names; - } - - private MapEntry getMapEntry(String varName) throws UnknownVariableException { - for (MapEntry entry: mapEntries) { - if (entry.getName().equals(varName)) { - return entry; - } - } - throw new UnknownVariableException(varName); - } - - @Override - public int getVariableAddress(String varName) throws UnknownVariableException { - MapEntry entry = getMapEntry(varName); - return entry.getAddress(); - } - - @Override - public int getIntegerLength() { - return 2; - } - -// @Override -// public byte[] getMemorySegment(int address, int size) { -// int[] memInts = new int[size]; -// -// System.arraycopy(cpu.memory, address, memInts, 0, size); -// -// /* Convert to byte array */ -// byte[] memBytes = new byte[size]; -// for (int i=0; i < size; i++) { -// memBytes[i] = (byte) memInts[i]; -// } -// -// return memBytes; -// } -// -// @Override -// public void setMemorySegment(int address, byte[] data) { -// /* Convert to int array */ -// int[] memInts = new int[data.length]; -// for (int i=0; i < data.length; i++) { -// memInts[i] = data[i]; -// } -// -// System.arraycopy(memInts, 0, cpu.memory, address, data.length); -// } - @Override public int getTotalSize() { return cpu.memory.length; } - @Override - public boolean variableExists(String varName) { - for (MapEntry entry: mapEntries) { - if (entry.getName().equals(varName)) { - return true; - } - } - - return false; - } - - /* TODO Check correct variable size in below methods */ - - @Override - public int getIntValueOf(String varName) throws UnknownVariableException { - MapEntry entry = getMapEntry(varName); - - int varAddr = entry.getAddress(); - byte[] varData = getMemorySegment(varAddr, 2); - return parseInt(varData); - } - - @Override - public void setIntValueOf(String varName, int newVal) throws UnknownVariableException { - MapEntry entry = getMapEntry(varName); - int varAddr = entry.getAddress(); - - int newValToSet = Integer.reverseBytes(newVal); - - // Create byte array - int pos = 0; - - byte[] varData = new byte[2]; - varData[pos++] = (byte) ((newValToSet & 0xFF000000) >> 24); - varData[pos++] = (byte) ((newValToSet & 0xFF0000) >> 16); - - setMemorySegment(varAddr, varData); - } - - @Override - public byte getByteValueOf(String varName) throws UnknownVariableException { - MapEntry entry = getMapEntry(varName); - int varAddr = entry.getAddress(); - - byte[] varData = getMemorySegment(varAddr, 1); - - return varData[0]; - } - - @Override - public void setByteValueOf(String varName, byte newVal) throws UnknownVariableException { - MapEntry entry = getMapEntry(varName); - int varAddr = entry.getAddress(); - - byte[] varData = new byte[1]; - - varData[0] = newVal; - - setMemorySegment(varAddr, varData); - } - - @Override - public byte[] getByteArray(String varName, int length) throws UnknownVariableException { - MapEntry entry = getMapEntry(varName); - int varAddr = entry.getAddress(); - - return getMemorySegment(varAddr, length); - } - - @Override - public void setByteArray(String varName, byte[] data) throws UnknownVariableException { - MapEntry entry = getMapEntry(varName); - int varAddr = entry.getAddress(); - - setMemorySegment(varAddr, data); - } - -// private ArrayList cpuMonitorArray = new ArrayList(); - @Override public byte[] getMemory() throws MoteMemoryException { throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. diff --git a/tools/cooja/apps/mspsim/src/org/contikios/cooja/mspmote/interfaces/MspDebugOutput.java b/tools/cooja/apps/mspsim/src/org/contikios/cooja/mspmote/interfaces/MspDebugOutput.java index 80df3ece4..af72bc63a 100644 --- a/tools/cooja/apps/mspsim/src/org/contikios/cooja/mspmote/interfaces/MspDebugOutput.java +++ b/tools/cooja/apps/mspsim/src/org/contikios/cooja/mspmote/interfaces/MspDebugOutput.java @@ -40,8 +40,9 @@ import org.jdom.Element; import org.contikios.cooja.ClassDescription; import org.contikios.cooja.Mote; import org.contikios.cooja.interfaces.Log; +import org.contikios.cooja.mote.memory.MemoryInterface; +import org.contikios.cooja.mote.memory.VarMemory; import org.contikios.cooja.mspmote.MspMote; -import org.contikios.cooja.mspmote.MspMoteMemory; import se.sics.mspsim.core.Memory; import se.sics.mspsim.core.MemoryMonitor; @@ -64,24 +65,24 @@ public class MspDebugOutput extends Log { private final static String CONTIKI_POINTER = "cooja_debug_ptr"; private MspMote mote; - private MspMoteMemory mem; + private VarMemory mem; private String lastLog = null; private MemoryMonitor memoryMonitor = null; public MspDebugOutput(Mote mote) { this.mote = (MspMote) mote; - this.mem = (MspMoteMemory) this.mote.getMemory(); + this.mem = new VarMemory(this.mote.getMemory()); if (!mem.variableExists(CONTIKI_POINTER)) { /* Disabled */ return; } - this.mote.getCPU().addWatchPoint(mem.getVariableAddress(CONTIKI_POINTER), + this.mote.getCPU().addWatchPoint((int) mem.getVariableAddress(CONTIKI_POINTER), memoryMonitor = new MemoryMonitor.Adapter() { @Override public void notifyWriteAfter(int adr, int data, Memory.AccessMode mode) { - String msg = extractString(mem, data); + String msg = extractString(MspDebugOutput.this.mote.getMemory(), data); if (msg != null && msg.length() > 0) { lastLog = "DEBUG: " + msg; setChanged(); @@ -91,7 +92,7 @@ public class MspDebugOutput extends Log { }); } - private String extractString(MspMoteMemory mem, int address) { + private String extractString(MemoryInterface mem, int address) { StringBuilder sb = new StringBuilder(); while (true) { byte[] data = mem.getMemorySegment(address, 8); @@ -136,7 +137,7 @@ public class MspDebugOutput extends Log { super.removed(); if (memoryMonitor != null) { - mote.getCPU().removeWatchPoint(mem.getVariableAddress(CONTIKI_POINTER), memoryMonitor); + mote.getCPU().removeWatchPoint((int) mem.getVariableAddress(CONTIKI_POINTER), memoryMonitor); } } } diff --git a/tools/cooja/apps/mspsim/src/org/contikios/cooja/mspmote/interfaces/MspMoteID.java b/tools/cooja/apps/mspsim/src/org/contikios/cooja/mspmote/interfaces/MspMoteID.java index 0c71ca208..a7ced648b 100644 --- a/tools/cooja/apps/mspsim/src/org/contikios/cooja/mspmote/interfaces/MspMoteID.java +++ b/tools/cooja/apps/mspsim/src/org/contikios/cooja/mspmote/interfaces/MspMoteID.java @@ -39,8 +39,8 @@ import org.apache.log4j.Logger; import org.contikios.cooja.Mote; import org.contikios.cooja.interfaces.MoteID; +import org.contikios.cooja.mote.memory.VarMemory; import org.contikios.cooja.mspmote.MspMote; -import org.contikios.cooja.mspmote.MspMoteMemory; import se.sics.mspsim.core.Memory; import se.sics.mspsim.core.MemoryMonitor; @@ -53,7 +53,7 @@ public class MspMoteID extends MoteID { private static Logger logger = Logger.getLogger(MspMoteID.class); private MspMote mote; - private MspMoteMemory moteMem = null; + private VarMemory moteMem = null; private boolean writeFlashHeader = true; private int moteID = -1; @@ -69,7 +69,7 @@ public class MspMoteID extends MoteID { */ public MspMoteID(Mote m) { this.mote = (MspMote) m; - this.moteMem = (MspMoteMemory) mote.getMemory(); + this.moteMem = new VarMemory(mote.getMemory()); } public int getMoteID() { @@ -144,7 +144,7 @@ public class MspMoteID extends MoteID { byte[] id = new byte[2]; id[0] = (byte) (moteID & 0xff); id[1] = (byte) ((moteID >> 8) & 0xff); - moteMem.setMemorySegment(dstAddress & ~1, id); + mote.getMemory().setMemorySegment(dstAddress & ~1, id); } }; @@ -201,7 +201,7 @@ public class MspMoteID extends MoteID { private void addMonitor(String variable, MemoryMonitor monitor) { if (moteMem.variableExists(variable)) { - int address = moteMem.getVariableAddress(variable); + int address = (int) moteMem.getVariableAddress(variable); if ((address & 1) != 0) { // Variable can not be a word - must be a byte } else { @@ -213,7 +213,7 @@ public class MspMoteID extends MoteID { private void removeMonitor(String variable, MemoryMonitor monitor) { if (moteMem.variableExists(variable)) { - int address = moteMem.getVariableAddress(variable); + int address = (int) moteMem.getVariableAddress(variable); mote.getCPU().removeWatchPoint(address, monitor); mote.getCPU().removeWatchPoint(address + 1, monitor); } diff --git a/tools/cooja/java/org/contikios/cooja/AddressMemory.java b/tools/cooja/java/org/contikios/cooja/AddressMemory.java deleted file mode 100644 index 4f126ab7e..000000000 --- a/tools/cooja/java/org/contikios/cooja/AddressMemory.java +++ /dev/null @@ -1,124 +0,0 @@ -/* - * Copyright (c) 2006, 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. - * - */ - -package org.contikios.cooja; - -public interface AddressMemory { - - /** - * @return All variable names known and residing in this memory - */ - public String[] getVariableNames(); - - /** - * Checks if given variable exists in memory. - * - * @param varName Variable name - * @return True if variable exists, false otherwise - */ - public boolean variableExists(String varName); - - /** - * Returns address of variable with given name. - * - * @param varName Variable name - * @return Variable address - * @throws UnknownVariableException Variable does not exist - */ - public int getVariableAddress(String varName) throws UnknownVariableException; - - /** - * Returns a value of the byte variable with the given name. - * - * @param varName Name of byte variable - * @return Value of byte variable - * @throws UnknownVariableException Variable does not exist - */ - public byte getByteValueOf(String varName) throws UnknownVariableException; - - /** - * Set byte value of variable with given name. - * - * @param varName Name of byte variable - * @param newVal New value of byte - * @throws UnknownVariableException Variable does not exist - */ - public void setByteValueOf(String varName, byte newVal) throws UnknownVariableException; - - /** - * Returns byte array of given length and with the given name. - * - * @param varName Name of array - * @param length Length of array - * @return Data of array - * @throws UnknownVariableException Variable does not exist - */ - public byte[] getByteArray(String varName, int length) throws UnknownVariableException; - - /** - * Set byte array of the variable with the given name. - * - * @param varName Name of array - * @param data New data of array - * @throws UnknownVariableException Variable does not exist - */ - public void setByteArray(String varName, byte[] data) throws UnknownVariableException; - - /** - * @return Number of bytes in an integer - */ - public int getIntegerLength(); - - /** - * Returns a value of the integer variable with the given name. - * - * @param varName Name of integer variable - * @return Value of integer variable - * @throws UnknownVariableException Variable does not exist - */ - public int getIntValueOf(String varName) throws UnknownVariableException; - - /** - * Set integer value of variable with given name. - * - * @param varName Name of integer variable - * @param newVal New integer value - * @throws UnknownVariableException Variable does not exist - */ - public void setIntValueOf(String varName, int newVal) throws UnknownVariableException; - - /** - * Unknown variable name exception. - */ - public class UnknownVariableException extends RuntimeException { - public UnknownVariableException(String varName) { - super("Unknown variable name: " + varName); - } - } - -} diff --git a/tools/cooja/java/org/contikios/cooja/SectionMoteMemory.java b/tools/cooja/java/org/contikios/cooja/SectionMoteMemory.java index e772f9f7c..73f246eb2 100644 --- a/tools/cooja/java/org/contikios/cooja/SectionMoteMemory.java +++ b/tools/cooja/java/org/contikios/cooja/SectionMoteMemory.java @@ -46,7 +46,7 @@ import org.contikios.cooja.mote.memory.MemoryLayout; * * @author Fredrik Osterlind */ -public class SectionMoteMemory implements MemoryInterface, AddressMemory { +public class SectionMoteMemory implements MemoryInterface { private static Logger logger = Logger.getLogger(SectionMoteMemory.class); private ArrayList sections = new ArrayList(); @@ -69,73 +69,16 @@ public class SectionMoteMemory implements MemoryInterface, AddressMemory { this.offset = offset; } - @Override - public String[] getVariableNames() { - return addresses.keySet().toArray(new String[0]); - } - - @Override - public int getVariableAddress(String varName) throws UnknownVariableException { - /* Cooja address space */ - if (!addresses.containsKey(varName)) { - throw new UnknownVariableException(varName); - } - - return addresses.get(varName).intValue() + offset; - } - - @Override - public int getIntegerLength() { - return 4; - } @Override public void clearMemory() { sections.clear(); } -// @Override -// public byte[] getMemorySegment(int address, int size) { -// /* Cooja address space */ -// address -= offset; -// -// for (MoteMemorySection section : sections) { -// if (section.includesAddr(address) -// && section.includesAddr(address + size - 1)) { -// return section.getMemorySegment(address, size); -// } -// } -// -// /* Check if in readonly section */ -// for (MoteMemorySection section : readonlySections) { -// if (section.includesAddr(address) -// && section.includesAddr(address + size - 1)) { -// return section.getMemorySegment(address, size); -// } -// } -// -// return null; -// } - public void setMemorySegmentNative(int address, byte[] data) { setMemorySegment(address+offset, data); } -// @Override -// public void setMemorySegment(int address, byte[] data) { -// /* Cooja address space */ -// address -= offset; -// -// /* TODO XXX Sections may overlap */ -// for (MoteMemorySection section : sections) { -// if (section.includesAddr(address) -// && section.includesAddr(address + data.length - 1)) { -// section.setMemorySegment(address, data); -// return; -// } -// } -// sections.add(new MoteMemorySection(address, data)); -// } public void setReadonlyMemorySegment(int address, byte[] data) { /* Cooja address space */ @@ -202,75 +145,6 @@ public class SectionMoteMemory implements MemoryInterface, AddressMemory { return sections.get(sectionNr).getData(); } - @Override - public boolean variableExists(String varName) { - return addresses.containsKey(varName); - } - - @Override - public int getIntValueOf(String varName) throws UnknownVariableException { - int varAddr = getVariableAddress(varName); - byte[] varData = getMemorySegment(varAddr, 4); - - if (varData == null) { - throw new UnknownVariableException(varName); - } - - return parseInt(varData); - } - - @Override - public void setIntValueOf(String varName, int newVal) throws UnknownVariableException { - int varAddr = getVariableAddress(varName); - - /* TODO Correct for all platforms? */ - int newValToSet = Integer.reverseBytes(newVal); - - int pos = 0; - - byte[] varData = new byte[4]; - varData[pos++] = (byte) ((newValToSet & 0xFF000000) >> 24); - varData[pos++] = (byte) ((newValToSet & 0xFF0000) >> 16); - varData[pos++] = (byte) ((newValToSet & 0xFF00) >> 8); - varData[pos++] = (byte) ((newValToSet & 0xFF) >> 0); - - setMemorySegment(varAddr, varData); - } - - @Override - public byte getByteValueOf(String varName) throws UnknownVariableException { - int varAddr = getVariableAddress(varName); - byte[] varData = getMemorySegment(varAddr, 1); - - if (varData == null) { - throw new UnknownVariableException(varName); - } - - return varData[0]; - } - - @Override - public void setByteValueOf(String varName, byte newVal) throws UnknownVariableException { - int varAddr = getVariableAddress(varName); - byte[] varData = new byte[1]; - - varData[0] = newVal; - - setMemorySegment(varAddr, varData); - } - - @Override - public byte[] getByteArray(String varName, int length) throws UnknownVariableException { - int varAddr = getVariableAddress(varName); - return getMemorySegment(varAddr, length); - } - - @Override - public void setByteArray(String varName, byte[] data) throws UnknownVariableException { - int varAddr = getVariableAddress(varName); - setMemorySegment(varAddr, data); - } - @Override public byte[] getMemory() throws MoteMemoryException { throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. diff --git a/tools/cooja/java/org/contikios/cooja/contikimote/ContikiMoteType.java b/tools/cooja/java/org/contikios/cooja/contikimote/ContikiMoteType.java index f3ff8f4c4..8ca58f6c1 100644 --- a/tools/cooja/java/org/contikios/cooja/contikimote/ContikiMoteType.java +++ b/tools/cooja/java/org/contikios/cooja/contikimote/ContikiMoteType.java @@ -68,6 +68,7 @@ import org.contikios.cooja.dialogs.CompileContiki; import org.contikios.cooja.dialogs.ContikiMoteCompileDialog; import org.contikios.cooja.dialogs.MessageList; import org.contikios.cooja.dialogs.MessageList.MessageContainer; +import org.contikios.cooja.mote.memory.VarMemory; import org.contikios.cooja.util.StringUtils; /** @@ -505,6 +506,7 @@ public class ContikiMoteType implements MoteType { int offset; { SectionMoteMemory tmp = new SectionMoteMemory(addresses, 0); + VarMemory varMem = new VarMemory(tmp); byte[] data = new byte[dataSectionSize]; getCoreMemory(dataSectionAddr, dataSectionSize, data); tmp.setMemorySegment(dataSectionAddr, data); @@ -512,7 +514,7 @@ public class ContikiMoteType implements MoteType { getCoreMemory(bssSectionAddr, bssSectionSize, bss); tmp.setMemorySegment(bssSectionAddr, bss); - offset = tmp.getIntValueOf("referenceVar"); + offset = varMem.getIntValueOf("referenceVar"); logger.info(getContikiFirmwareFile().getName() + ": offsetting Cooja mote address space: " + offset); } diff --git a/tools/cooja/java/org/contikios/cooja/contikimote/interfaces/ContikiBeeper.java b/tools/cooja/java/org/contikios/cooja/contikimote/interfaces/ContikiBeeper.java index c9ef326a9..5fce4e931 100644 --- a/tools/cooja/java/org/contikios/cooja/contikimote/interfaces/ContikiBeeper.java +++ b/tools/cooja/java/org/contikios/cooja/contikimote/interfaces/ContikiBeeper.java @@ -48,6 +48,7 @@ import org.contikios.cooja.SectionMoteMemory; import org.contikios.cooja.contikimote.ContikiMoteInterface; import org.contikios.cooja.interfaces.Beeper; import org.contikios.cooja.interfaces.PolledAfterActiveTicks; +import org.contikios.cooja.mote.memory.VarMemory; /** * Beeper mote interface. @@ -70,7 +71,7 @@ import org.contikios.cooja.interfaces.PolledAfterActiveTicks; */ public class ContikiBeeper extends Beeper implements ContikiMoteInterface, PolledAfterActiveTicks { private Mote mote = null; - private SectionMoteMemory moteMem = null; + private VarMemory moteMem = null; private static Logger logger = Logger.getLogger(ContikiBeeper.class); /** @@ -83,7 +84,7 @@ public class ContikiBeeper extends Beeper implements ContikiMoteInterface, Polle */ public ContikiBeeper(Mote mote) { this.mote = mote; - this.moteMem = (SectionMoteMemory) mote.getMemory(); + this.moteMem = new VarMemory(mote.getMemory()); } public boolean isBeeping() { diff --git a/tools/cooja/java/org/contikios/cooja/contikimote/interfaces/ContikiButton.java b/tools/cooja/java/org/contikios/cooja/contikimote/interfaces/ContikiButton.java index 57f7b7fd6..852383a09 100644 --- a/tools/cooja/java/org/contikios/cooja/contikimote/interfaces/ContikiButton.java +++ b/tools/cooja/java/org/contikios/cooja/contikimote/interfaces/ContikiButton.java @@ -40,6 +40,7 @@ import org.contikios.cooja.*; import org.contikios.cooja.contikimote.ContikiMote; import org.contikios.cooja.contikimote.ContikiMoteInterface; import org.contikios.cooja.interfaces.Button; +import org.contikios.cooja.mote.memory.VarMemory; /** * Button mote interface. @@ -62,7 +63,7 @@ import org.contikios.cooja.interfaces.Button; * @author Fredrik Osterlind */ public class ContikiButton extends Button implements ContikiMoteInterface { - private SectionMoteMemory moteMem; + private VarMemory moteMem; private ContikiMote mote; private static Logger logger = Logger.getLogger(ContikiButton.class); @@ -76,7 +77,7 @@ public class ContikiButton extends Button implements ContikiMoteInterface { */ public ContikiButton(Mote mote) { this.mote = (ContikiMote) mote; - this.moteMem = (SectionMoteMemory) mote.getMemory(); + this.moteMem = new VarMemory(mote.getMemory()); } public static String[] getCoreInterfaceDependencies() { diff --git a/tools/cooja/java/org/contikios/cooja/contikimote/interfaces/ContikiCFS.java b/tools/cooja/java/org/contikios/cooja/contikimote/interfaces/ContikiCFS.java index e831a1607..5a8dbb41e 100644 --- a/tools/cooja/java/org/contikios/cooja/contikimote/interfaces/ContikiCFS.java +++ b/tools/cooja/java/org/contikios/cooja/contikimote/interfaces/ContikiCFS.java @@ -43,6 +43,7 @@ import org.jdom.Element; import org.contikios.cooja.*; import org.contikios.cooja.contikimote.ContikiMoteInterface; import org.contikios.cooja.interfaces.PolledAfterActiveTicks; +import org.contikios.cooja.mote.memory.VarMemory; /** * Contiki FileSystem (CFS) interface (such as external flash). @@ -71,7 +72,7 @@ public class ContikiCFS extends MoteInterface implements ContikiMoteInterface, P public int FILESYSTEM_SIZE = 4000; /* Configure CFS size here and in cfs-cooja.c */ private Mote mote = null; - private SectionMoteMemory moteMem = null; + private VarMemory moteMem = null; private int lastRead = 0; private int lastWritten = 0; @@ -85,7 +86,7 @@ public class ContikiCFS extends MoteInterface implements ContikiMoteInterface, P */ public ContikiCFS(Mote mote) { this.mote = mote; - this.moteMem = (SectionMoteMemory) mote.getMemory(); + this.moteMem = new VarMemory(mote.getMemory()); } public static String[] getCoreInterfaceDependencies() { diff --git a/tools/cooja/java/org/contikios/cooja/contikimote/interfaces/ContikiClock.java b/tools/cooja/java/org/contikios/cooja/contikimote/interfaces/ContikiClock.java index 3864c4724..dce0063cb 100644 --- a/tools/cooja/java/org/contikios/cooja/contikimote/interfaces/ContikiClock.java +++ b/tools/cooja/java/org/contikios/cooja/contikimote/interfaces/ContikiClock.java @@ -44,6 +44,7 @@ import org.contikios.cooja.contikimote.ContikiMoteInterface; import org.contikios.cooja.interfaces.Clock; import org.contikios.cooja.interfaces.PolledAfterAllTicks; import org.contikios.cooja.interfaces.PolledBeforeActiveTicks; +import org.contikios.cooja.mote.memory.VarMemory; /** * Clock mote interface. Controls Contiki time. @@ -71,7 +72,7 @@ public class ContikiClock extends Clock implements ContikiMoteInterface, PolledB private Simulation simulation; private ContikiMote mote; - private SectionMoteMemory moteMem; + private VarMemory moteMem; private long moteTime; /* Microseconds */ private long timeDrift; /* Microseconds */ @@ -85,7 +86,7 @@ public class ContikiClock extends Clock implements ContikiMoteInterface, PolledB public ContikiClock(Mote mote) { this.simulation = mote.getSimulation(); this.mote = (ContikiMote) mote; - this.moteMem = (SectionMoteMemory) mote.getMemory(); + this.moteMem = new VarMemory(mote.getMemory()); timeDrift = 0; moteTime = 0; } diff --git a/tools/cooja/java/org/contikios/cooja/contikimote/interfaces/ContikiEEPROM.java b/tools/cooja/java/org/contikios/cooja/contikimote/interfaces/ContikiEEPROM.java index a1b1d5e56..aeca322d1 100644 --- a/tools/cooja/java/org/contikios/cooja/contikimote/interfaces/ContikiEEPROM.java +++ b/tools/cooja/java/org/contikios/cooja/contikimote/interfaces/ContikiEEPROM.java @@ -45,6 +45,7 @@ import org.jdom.Element; import org.contikios.cooja.*; import org.contikios.cooja.contikimote.ContikiMoteInterface; import org.contikios.cooja.interfaces.PolledAfterActiveTicks; +import org.contikios.cooja.mote.memory.VarMemory; /** * Contiki EEPROM interface @@ -73,7 +74,7 @@ public class ContikiEEPROM extends MoteInterface implements ContikiMoteInterface public int EEPROM_SIZE = 1024; /* Configure EEPROM size here and in eeprom.c. Should really be multiple of 16 */ private Mote mote = null; - private SectionMoteMemory moteMem = null; + private VarMemory moteMem = null; private int lastRead = 0; private int lastWritten = 0; @@ -87,7 +88,7 @@ public class ContikiEEPROM extends MoteInterface implements ContikiMoteInterface */ public ContikiEEPROM(Mote mote) { this.mote = mote; - this.moteMem = (SectionMoteMemory) mote.getMemory(); + this.moteMem = new VarMemory(mote.getMemory()); } public static String[] getCoreInterfaceDependencies() { diff --git a/tools/cooja/java/org/contikios/cooja/contikimote/interfaces/ContikiLED.java b/tools/cooja/java/org/contikios/cooja/contikimote/interfaces/ContikiLED.java index b6372751d..cc549e142 100644 --- a/tools/cooja/java/org/contikios/cooja/contikimote/interfaces/ContikiLED.java +++ b/tools/cooja/java/org/contikios/cooja/contikimote/interfaces/ContikiLED.java @@ -40,6 +40,7 @@ import org.contikios.cooja.*; import org.contikios.cooja.contikimote.ContikiMoteInterface; import org.contikios.cooja.interfaces.LED; import org.contikios.cooja.interfaces.PolledAfterActiveTicks; +import org.contikios.cooja.mote.memory.VarMemory; /** * LEDs mote interface. @@ -64,7 +65,7 @@ public class ContikiLED extends LED implements ContikiMoteInterface, PolledAfter private static Logger logger = Logger.getLogger(ContikiLED.class); private Mote mote = null; - private SectionMoteMemory moteMem = null; + private VarMemory moteMem = null; private byte currentLedValue = 0; private static final byte LEDS_GREEN = 1; @@ -91,7 +92,7 @@ public class ContikiLED extends LED implements ContikiMoteInterface, PolledAfter */ public ContikiLED(Mote mote) { this.mote = mote; - this.moteMem = (SectionMoteMemory) mote.getMemory(); + this.moteMem = new VarMemory(mote.getMemory()); } public static String[] getCoreInterfaceDependencies() { diff --git a/tools/cooja/java/org/contikios/cooja/contikimote/interfaces/ContikiMoteID.java b/tools/cooja/java/org/contikios/cooja/contikimote/interfaces/ContikiMoteID.java index 8a9887638..e83d0c2fa 100644 --- a/tools/cooja/java/org/contikios/cooja/contikimote/interfaces/ContikiMoteID.java +++ b/tools/cooja/java/org/contikios/cooja/contikimote/interfaces/ContikiMoteID.java @@ -38,6 +38,7 @@ import org.jdom.Element; import org.contikios.cooja.*; import org.contikios.cooja.contikimote.ContikiMoteInterface; import org.contikios.cooja.interfaces.MoteID; +import org.contikios.cooja.mote.memory.VarMemory; /** * Mote ID interface: 'node_id'. @@ -60,7 +61,7 @@ import org.contikios.cooja.interfaces.MoteID; * @author Fredrik Osterlind */ public class ContikiMoteID extends MoteID implements ContikiMoteInterface { - private SectionMoteMemory moteMem = null; + private VarMemory moteMem = null; private static Logger logger = Logger.getLogger(ContikiMoteID.class); private int moteID = 0; @@ -77,7 +78,7 @@ public class ContikiMoteID extends MoteID implements ContikiMoteInterface { */ public ContikiMoteID(Mote mote) { this.mote = mote; - this.moteMem = (SectionMoteMemory) mote.getMemory(); + this.moteMem = new VarMemory(mote.getMemory()); } public static String[] getCoreInterfaceDependencies() { diff --git a/tools/cooja/java/org/contikios/cooja/contikimote/interfaces/ContikiPIR.java b/tools/cooja/java/org/contikios/cooja/contikimote/interfaces/ContikiPIR.java index 0dbb90f03..c56233d25 100644 --- a/tools/cooja/java/org/contikios/cooja/contikimote/interfaces/ContikiPIR.java +++ b/tools/cooja/java/org/contikios/cooja/contikimote/interfaces/ContikiPIR.java @@ -41,6 +41,7 @@ import org.contikios.cooja.SectionMoteMemory; import org.contikios.cooja.contikimote.ContikiMote; import org.contikios.cooja.contikimote.ContikiMoteInterface; import org.contikios.cooja.interfaces.PIR; +import org.contikios.cooja.mote.memory.VarMemory; /** * Passive IR sensor mote interface. @@ -65,7 +66,7 @@ import org.contikios.cooja.interfaces.PIR; public class ContikiPIR extends PIR implements ContikiMoteInterface { private ContikiMote mote; - private SectionMoteMemory moteMem; + private VarMemory moteMem; /** * Creates an interface to the PIR at mote. @@ -77,7 +78,7 @@ public class ContikiPIR extends PIR implements ContikiMoteInterface { */ public ContikiPIR(Mote mote) { this.mote = (ContikiMote) mote; - this.moteMem = (SectionMoteMemory) mote.getMemory(); + this.moteMem = new VarMemory(mote.getMemory()); } public static String[] getCoreInterfaceDependencies() { diff --git a/tools/cooja/java/org/contikios/cooja/contikimote/interfaces/ContikiRS232.java b/tools/cooja/java/org/contikios/cooja/contikimote/interfaces/ContikiRS232.java index 304ffa5ae..2607bc1ea 100644 --- a/tools/cooja/java/org/contikios/cooja/contikimote/interfaces/ContikiRS232.java +++ b/tools/cooja/java/org/contikios/cooja/contikimote/interfaces/ContikiRS232.java @@ -38,6 +38,7 @@ import org.contikios.cooja.contikimote.ContikiMote; import org.contikios.cooja.contikimote.ContikiMoteInterface; import org.contikios.cooja.dialogs.SerialUI; import org.contikios.cooja.interfaces.PolledAfterActiveTicks; +import org.contikios.cooja.mote.memory.VarMemory; /** * Contiki mote serial port and log interfaces. @@ -68,7 +69,7 @@ public class ContikiRS232 extends SerialUI implements ContikiMoteInterface, Poll private static Logger logger = Logger.getLogger(ContikiRS232.class); private ContikiMote mote = null; - private SectionMoteMemory moteMem = null; + private VarMemory moteMem = null; static final int SERIAL_BUF_SIZE = 1024; /* rs232.c:40 */ @@ -82,7 +83,7 @@ public class ContikiRS232 extends SerialUI implements ContikiMoteInterface, Poll */ public ContikiRS232(Mote mote) { this.mote = (ContikiMote) mote; - this.moteMem = (SectionMoteMemory) mote.getMemory(); + this.moteMem = new VarMemory(mote.getMemory()); } public static String[] getCoreInterfaceDependencies() { diff --git a/tools/cooja/java/org/contikios/cooja/contikimote/interfaces/ContikiRadio.java b/tools/cooja/java/org/contikios/cooja/contikimote/interfaces/ContikiRadio.java index ebe24e52a..be239338b 100644 --- a/tools/cooja/java/org/contikios/cooja/contikimote/interfaces/ContikiRadio.java +++ b/tools/cooja/java/org/contikios/cooja/contikimote/interfaces/ContikiRadio.java @@ -46,6 +46,7 @@ import org.contikios.cooja.contikimote.ContikiMoteInterface; import org.contikios.cooja.interfaces.PolledAfterActiveTicks; import org.contikios.cooja.interfaces.Position; import org.contikios.cooja.interfaces.Radio; +import org.contikios.cooja.mote.memory.VarMemory; import org.contikios.cooja.radiomediums.UDGM; /** @@ -89,7 +90,7 @@ import org.contikios.cooja.radiomediums.UDGM; public class ContikiRadio extends Radio implements ContikiMoteInterface, PolledAfterActiveTicks { private ContikiMote mote; - private SectionMoteMemory myMoteMemory; + private VarMemory myMoteMemory; private static Logger logger = Logger.getLogger(ContikiRadio.class); @@ -132,7 +133,7 @@ public class ContikiRadio extends Radio implements ContikiMoteInterface, PolledA ContikiRadio.class, "RADIO_TRANSMISSION_RATE_kbps"); this.mote = (ContikiMote) mote; - this.myMoteMemory = (SectionMoteMemory) mote.getMemory(); + this.myMoteMemory = new VarMemory(mote.getMemory()); radioOn = myMoteMemory.getByteValueOf("simRadioHWOn") == 1; } diff --git a/tools/cooja/java/org/contikios/cooja/contikimote/interfaces/ContikiVib.java b/tools/cooja/java/org/contikios/cooja/contikimote/interfaces/ContikiVib.java index 9584674ac..f80a1bc63 100644 --- a/tools/cooja/java/org/contikios/cooja/contikimote/interfaces/ContikiVib.java +++ b/tools/cooja/java/org/contikios/cooja/contikimote/interfaces/ContikiVib.java @@ -42,6 +42,7 @@ import org.contikios.cooja.MoteInterface; import org.contikios.cooja.SectionMoteMemory; import org.contikios.cooja.contikimote.ContikiMote; import org.contikios.cooja.contikimote.ContikiMoteInterface; +import org.contikios.cooja.mote.memory.VarMemory; /** * Vibration sensor mote interface. @@ -67,7 +68,7 @@ import org.contikios.cooja.contikimote.ContikiMoteInterface; public class ContikiVib extends MoteInterface implements ContikiMoteInterface { private ContikiMote mote; - private SectionMoteMemory moteMem; + private VarMemory moteMem; /** * Creates an interface to the vibration sensor at mote. @@ -79,7 +80,7 @@ public class ContikiVib extends MoteInterface implements ContikiMoteInterface { */ public ContikiVib(Mote mote) { this.mote = (ContikiMote) mote; - this.moteMem = (SectionMoteMemory) mote.getMemory(); + this.moteMem = new VarMemory(mote.getMemory()); } public static String[] getCoreInterfaceDependencies() { diff --git a/tools/cooja/java/org/contikios/cooja/dialogs/ConfigurationWizard.java b/tools/cooja/java/org/contikios/cooja/dialogs/ConfigurationWizard.java index 3010625e4..82726f266 100644 --- a/tools/cooja/java/org/contikios/cooja/dialogs/ConfigurationWizard.java +++ b/tools/cooja/java/org/contikios/cooja/dialogs/ConfigurationWizard.java @@ -68,6 +68,7 @@ import org.contikios.cooja.Cooja; import org.contikios.cooja.MoteType.MoteTypeCreationException; import org.contikios.cooja.SectionMoteMemory; import org.contikios.cooja.contikimote.ContikiMoteType; +import org.contikios.cooja.mote.memory.VarMemory; /* TODO Test common section */ /* TODO Test readonly section */ @@ -944,14 +945,15 @@ public class ConfigurationWizard extends JDialog { javaLibrary.getMemory(relDataSectionAddr, dataSectionSize, initialDataSection); javaLibrary.getMemory(relBssSectionAddr, bssSectionSize, initialBssSection); SectionMoteMemory memory = new SectionMoteMemory(addresses, 0); + VarMemory varMem = new VarMemory(memory); memory.setMemorySegment(relDataSectionAddr, initialDataSection); memory.setMemorySegment(relBssSectionAddr, initialBssSection); int contikiDataCounter, contikiBSSCounter; testOutput.addMessage("### Checking initial variable values: 1,0"); - contikiDataCounter = memory.getIntValueOf("var1"); - contikiBSSCounter = memory.getIntValueOf("uvar1"); + contikiDataCounter = varMem.getIntValueOf("var1"); + contikiBSSCounter = varMem.getIntValueOf("uvar1"); int javaDataCounter = 1; int javaBSSCounter = 0; if (contikiDataCounter != javaDataCounter) { @@ -975,8 +977,8 @@ public class ConfigurationWizard extends JDialog { javaLibrary.getMemory(relBssSectionAddr, bssSectionSize, initialBssSection); memory.setMemorySegment(relDataSectionAddr, initialDataSection); memory.setMemorySegment(relBssSectionAddr, initialBssSection); - contikiDataCounter = memory.getIntValueOf("var1"); - contikiBSSCounter = memory.getIntValueOf("uvar1"); + contikiDataCounter = varMem.getIntValueOf("var1"); + contikiBSSCounter = varMem.getIntValueOf("uvar1"); if (contikiDataCounter != javaDataCounter) { testOutput.addMessage("### Data section mismatch (" + contikiDataCounter + " != " + javaDataCounter + ")", MessageList.ERROR); return false; @@ -1004,8 +1006,8 @@ public class ConfigurationWizard extends JDialog { javaLibrary.getMemory(relBssSectionAddr, bssSectionSize, initialBssSection); memory.setMemorySegment(relDataSectionAddr, initialDataSection); memory.setMemorySegment(relBssSectionAddr, initialBssSection); - contikiDataCounter = memory.getIntValueOf("var1"); - contikiBSSCounter = memory.getIntValueOf("uvar1"); + contikiDataCounter = varMem.getIntValueOf("var1"); + contikiBSSCounter = varMem.getIntValueOf("uvar1"); if (contikiDataCounter != javaDataCounter) { testOutput.addMessage("### Data section mismatch (" + contikiDataCounter + " != " + javaDataCounter + ")", MessageList.ERROR); return false; @@ -1029,8 +1031,8 @@ public class ConfigurationWizard extends JDialog { javaLibrary.getMemory(relBssSectionAddr, bssSectionSize, initialBssSection); memory.setMemorySegment(relDataSectionAddr, initialDataSection); memory.setMemorySegment(relBssSectionAddr, initialBssSection); - contikiDataCounter = memory.getIntValueOf("var1"); - contikiBSSCounter = memory.getIntValueOf("uvar1"); + contikiDataCounter = varMem.getIntValueOf("var1"); + contikiBSSCounter = varMem.getIntValueOf("uvar1"); if (contikiDataCounter != javaDataCounter) { testOutput.addMessage("### Data section mismatch (" + contikiDataCounter + " != " + javaDataCounter + ")", MessageList.ERROR); return false; @@ -1049,8 +1051,8 @@ public class ConfigurationWizard extends JDialog { javaLibrary.getMemory(relBssSectionAddr, bssSectionSize, initialBssSection); memory.setMemorySegment(relDataSectionAddr, initialDataSection); memory.setMemorySegment(relBssSectionAddr, initialBssSection); - contikiDataCounter = memory.getIntValueOf("var1"); - contikiBSSCounter = memory.getIntValueOf("uvar1"); + contikiDataCounter = varMem.getIntValueOf("var1"); + contikiBSSCounter = varMem.getIntValueOf("uvar1"); if (contikiDataCounter != javaDataCounter) { testOutput.addMessage("### Data section mismatch (" + contikiDataCounter + " != " + javaDataCounter + ")", MessageList.ERROR); return false; diff --git a/tools/cooja/java/org/contikios/cooja/plugins/VariableWatcher.java b/tools/cooja/java/org/contikios/cooja/plugins/VariableWatcher.java index b6dc2061c..6c8c82ea9 100644 --- a/tools/cooja/java/org/contikios/cooja/plugins/VariableWatcher.java +++ b/tools/cooja/java/org/contikios/cooja/plugins/VariableWatcher.java @@ -44,8 +44,10 @@ import java.awt.event.KeyListener; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.text.NumberFormat; -import java.util.Arrays; +import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; +import java.util.List; import java.util.Vector; import javax.swing.BorderFactory; @@ -64,7 +66,6 @@ import javax.swing.text.PlainDocument; import org.jdom.Element; -import org.contikios.cooja.AddressMemory; import org.contikios.cooja.ClassDescription; import org.contikios.cooja.Cooja; import org.contikios.cooja.Mote; @@ -72,7 +73,8 @@ import org.contikios.cooja.MotePlugin; import org.contikios.cooja.PluginType; import org.contikios.cooja.Simulation; import org.contikios.cooja.VisPlugin; -import org.contikios.cooja.AddressMemory.UnknownVariableException; +import org.contikios.cooja.mote.memory.UnknownVariableException; +import org.contikios.cooja.mote.memory.VarMemory; /** * Variable Watcher enables a user to watch mote variables during a simulation. @@ -87,7 +89,7 @@ import org.contikios.cooja.AddressMemory.UnknownVariableException; public class VariableWatcher extends VisPlugin implements MotePlugin { private static final long serialVersionUID = 1L; - private AddressMemory moteMemory; + private VarMemory moteMemory; private final static int LABEL_WIDTH = 170; private final static int LABEL_HEIGHT = 15; @@ -124,7 +126,7 @@ public class VariableWatcher extends VisPlugin implements MotePlugin { public VariableWatcher(Mote moteToView, Simulation simulation, Cooja gui) { super("Variable Watcher (" + moteToView + ")", gui); this.mote = moteToView; - moteMemory = (AddressMemory) moteToView.getMemory(); + moteMemory = new VarMemory(moteToView.getMemory()); JLabel label; integerFormat = NumberFormat.getIntegerInstance(); @@ -143,8 +145,8 @@ public class VariableWatcher extends VisPlugin implements MotePlugin { varName.setEditable(true); varName.setSelectedItem("[enter or pick name]"); - String[] allPotentialVarNames = moteMemory.getVariableNames(); - Arrays.sort(allPotentialVarNames); + List allPotentialVarNames = new ArrayList<>(moteMemory.getVariableNames()); + Collections.sort(allPotentialVarNames); for (String aVarName: allPotentialVarNames) { varName.addItem(aVarName); } @@ -172,7 +174,7 @@ public class VariableWatcher extends VisPlugin implements MotePlugin { varType = new JComboBox(); varType.addItem("Byte (1 byte)"); // BYTE_INDEX = 0 - varType.addItem("Integer (" + moteMemory.getIntegerLength() + " bytes)"); // INT_INDEX = 1 + varType.addItem("Integer (" + moteToView.getMemory().getLayout().intSize + " bytes)"); // INT_INDEX = 1 varType.addItem("Byte array (x bytes)"); // ARRAY_INDEX = 2 varType.addItem("Char array (x bytes)"); // CHAR_ARRAY_INDEX = 3