fixed MicaZ ID for contiki nodes by programming EEPROM

This commit is contained in:
joxe 2009-11-17 14:30:26 +00:00
parent f5ae0b9c82
commit 65a50f3d88
3 changed files with 24 additions and 8 deletions

View file

@ -24,7 +24,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* *
* $Id: AvrMoteMemory.java,v 1.3 2009/11/17 14:09:02 joxe Exp $ * $Id: AvrMoteMemory.java,v 1.4 2009/11/17 14:30:26 joxe Exp $
*/ */
package se.sics.cooja.avrmote; package se.sics.cooja.avrmote;
@ -40,7 +40,6 @@ import avrora.arch.avr.AVRProperties;
import avrora.core.SourceMapping; import avrora.core.SourceMapping;
import avrora.core.SourceMapping.Location; import avrora.core.SourceMapping.Location;
import avrora.sim.AtmelInterpreter; import avrora.sim.AtmelInterpreter;
import avrora.sim.State;
import avrora.sim.Simulator.Watch; import avrora.sim.Simulator.Watch;
/** /**
* @author Joakim Eriksson * @author Joakim Eriksson

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: MicaZMote.java,v 1.11 2009/11/17 14:09:02 joxe Exp $ * $Id: MicaZMote.java,v 1.12 2009/11/17 14:30:26 joxe Exp $
*/ */
package se.sics.cooja.avrmote; package se.sics.cooja.avrmote;
@ -50,8 +50,11 @@ import avrora.core.LoadableProgram;
import avrora.sim.AtmelInterpreter; import avrora.sim.AtmelInterpreter;
import avrora.sim.Simulator; import avrora.sim.Simulator;
import avrora.sim.State; import avrora.sim.State;
import avrora.sim.mcu.AtmelMicrocontroller;
import avrora.sim.mcu.EEPROM;
import avrora.sim.mcu.Microcontroller; import avrora.sim.mcu.Microcontroller;
import avrora.sim.platform.MicaZ; import avrora.sim.platform.MicaZ;
import avrora.sim.platform.Platform;
import avrora.sim.platform.PlatformFactory; import avrora.sim.platform.PlatformFactory;
/** /**
@ -65,7 +68,7 @@ public class MicaZMote extends AbstractEmulatedMote implements Mote {
private Simulation mySimulation = null; private Simulation mySimulation = null;
private MoteInterfaceHandler myMoteInterfaceHandler; private MoteInterfaceHandler myMoteInterfaceHandler;
private Microcontroller myCpu = null; private AtmelMicrocontroller myCpu = null;
private MicaZ micaZ = null; private MicaZ micaZ = null;
private LoadableProgram program = null; private LoadableProgram program = null;
private AtmelInterpreter interpreter = null; private AtmelInterpreter interpreter = null;
@ -73,6 +76,8 @@ public class MicaZMote extends AbstractEmulatedMote implements Mote {
private AVRProperties avrProperties = null; private AVRProperties avrProperties = null;
private MicaZMoteType myMoteType = null; private MicaZMoteType myMoteType = null;
private EEPROM eeprom = null;
/* Stack monitoring variables */ /* Stack monitoring variables */
private boolean stopNextInstruction = false; private boolean stopNextInstruction = false;
@ -145,7 +150,9 @@ public class MicaZMote extends AbstractEmulatedMote implements Mote {
program.load(); program.load();
PlatformFactory factory = new MicaZ.Factory(); PlatformFactory factory = new MicaZ.Factory();
micaZ = (MicaZ) factory.newPlatform(1, program.getProgram()); micaZ = (MicaZ) factory.newPlatform(1, program.getProgram());
myCpu = micaZ.getMicrocontroller(); myCpu = (AtmelMicrocontroller) micaZ.getMicrocontroller();
eeprom = (EEPROM) myCpu.getDevice("eeprom");
avrProperties = (AVRProperties) myCpu.getProperties(); avrProperties = (AVRProperties) myCpu.getProperties();
Simulator sim = myCpu.getSimulator(); Simulator sim = myCpu.getSimulator();
interpreter = (AtmelInterpreter) sim.getInterpreter(); interpreter = (AtmelInterpreter) sim.getInterpreter();
@ -153,6 +160,11 @@ public class MicaZMote extends AbstractEmulatedMote implements Mote {
myMemory = new AvrMoteMemory(program.getProgram().getSourceMapping(), avrProperties, interpreter); myMemory = new AvrMoteMemory(program.getProgram().getSourceMapping(), avrProperties, interpreter);
} }
public void setEEPROM(int address, int i) {
byte[] eedata = eeprom.getContent();
eedata[address] = (byte) i;
}
public void setState(State newState) { public void setState(State newState) {
logger.warn("MicaZ motes can't change state"); logger.warn("MicaZ motes can't change state");
} }

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: MicaZID.java,v 1.2 2009/11/17 14:09:03 joxe Exp $ * $Id: MicaZID.java,v 1.3 2009/11/17 14:30:26 joxe Exp $
*/ */
package se.sics.cooja.avrmote.interfaces; package se.sics.cooja.avrmote.interfaces;
@ -47,6 +47,7 @@ import se.sics.cooja.MoteTimeEvent;
import se.sics.cooja.Simulation; import se.sics.cooja.Simulation;
import se.sics.cooja.TimeEvent; import se.sics.cooja.TimeEvent;
import se.sics.cooja.avrmote.AvrMoteMemory; import se.sics.cooja.avrmote.AvrMoteMemory;
import se.sics.cooja.avrmote.MicaZMote;
import se.sics.cooja.interfaces.MoteID; import se.sics.cooja.interfaces.MoteID;
public class MicaZID extends MoteID { public class MicaZID extends MoteID {
@ -60,7 +61,7 @@ public class MicaZID extends MoteID {
private AvrMoteMemory moteMem; private AvrMoteMemory moteMem;
boolean tosID = false; boolean tosID = false;
boolean contikiID = false; boolean contikiID = false;
private Mote mote; private MicaZMote mote;
private int persistentSetIDCounter = 1000; private int persistentSetIDCounter = 1000;
TimeEvent persistentSetIDEvent = new MoteTimeEvent(mote, 0) { TimeEvent persistentSetIDEvent = new MoteTimeEvent(mote, 0) {
@ -79,7 +80,7 @@ public class MicaZID extends MoteID {
public MicaZID(Mote mote) { public MicaZID(Mote mote) {
this.mote = mote; this.mote = (MicaZMote) mote;
this.moteMem = (AvrMoteMemory) mote.getMemory(); this.moteMem = (AvrMoteMemory) mote.getMemory();
if (moteMem.variableExists("node_id")) { if (moteMem.variableExists("node_id")) {
@ -127,6 +128,10 @@ public class MicaZID extends MoteID {
public void setMoteID(int newID) { public void setMoteID(int newID) {
moteID = newID; moteID = newID;
if (contikiID) { if (contikiID) {
mote.setEEPROM(0, 0xad);
mote.setEEPROM(1, 0xde);
mote.setEEPROM(2, newID);
mote.setEEPROM(3, newID >> 8);
System.out.println("Setting node id: " + newID); System.out.println("Setting node id: " + newID);
moteMem.setIntValueOf("node_id", newID); moteMem.setIntValueOf("node_id", newID);
} }