diff --git a/se/sics/mspsim/chip/CC2420.java b/se/sics/mspsim/chip/CC2420.java index a4dc418..2c4299a 100644 --- a/se/sics/mspsim/chip/CC2420.java +++ b/se/sics/mspsim/chip/CC2420.java @@ -661,6 +661,7 @@ public class CC2420 extends Chip implements USARTListener, RFListener, RFSource } private void setReg(int address, int data) { + int oldValue = registers[address]; registers[address] = data; switch(address) { case REG_IOCFG0: @@ -682,12 +683,13 @@ public class CC2420 extends Chip implements USARTListener, RFListener, RFSource autoAck = (data & AUTOACK) != 0; break; case REG_FSCTRL: - if (cl != null) { - updateActiveFrequency(); - cl.changedChannel(activeChannel); - } + if (cl != null) { + updateActiveFrequency(); + cl.changedChannel(activeChannel); + } break; } + configurationChanged(address, oldValue, data); } public void dataReceived(USART source, int data) { diff --git a/se/sics/mspsim/core/Chip.java b/se/sics/mspsim/core/Chip.java index 1e265ee..ab65151 100644 --- a/se/sics/mspsim/core/Chip.java +++ b/se/sics/mspsim/core/Chip.java @@ -181,7 +181,7 @@ public abstract class Chip implements Loggable, EventSource { /* Called by subclasses to inform about changes of configuration */ protected void configurationChanged(int parameter, int oldValue, int newValue) { ConfigurationChangeListener[] listeners = ccListeners; - if (listeners != null) { + if (oldValue != newValue && listeners != null) { for (int i = 0, n = listeners.length; i < n; i++) { listeners[i].configurationChanged(this, parameter, oldValue, newValue); }