removing contiki log interface, instead only using the serial port interface
This commit is contained in:
parent
480c023578
commit
c205280f30
|
@ -28,7 +28,7 @@ se.sics.cooja.contikimote.interfaces.ContikiVib.EXTERNAL_INTERRUPT_bool = true
|
||||||
se.sics.cooja.contikimote.interfaces.ContikiCFS.CONSUMPTION_PER_WRITTEN_CHAR_mQ = 2
|
se.sics.cooja.contikimote.interfaces.ContikiCFS.CONSUMPTION_PER_WRITTEN_CHAR_mQ = 2
|
||||||
se.sics.cooja.contikimote.interfaces.ContikiCFS.CONSUMPTION_PER_READ_CHAR_mQ = 1
|
se.sics.cooja.contikimote.interfaces.ContikiCFS.CONSUMPTION_PER_READ_CHAR_mQ = 1
|
||||||
|
|
||||||
se.sics.cooja.contikimote.ContikiMoteType.MOTE_INTERFACES = se.sics.cooja.interfaces.Position se.sics.cooja.interfaces.Battery se.sics.cooja.contikimote.interfaces.ContikiVib se.sics.cooja.contikimote.interfaces.ContikiMoteID se.sics.cooja.contikimote.interfaces.ContikiRS232 se.sics.cooja.contikimote.interfaces.ContikiBeeper se.sics.cooja.contikimote.interfaces.ContikiIPAddress se.sics.cooja.contikimote.interfaces.ContikiRadio se.sics.cooja.contikimote.interfaces.ContikiButton se.sics.cooja.contikimote.interfaces.ContikiPIR se.sics.cooja.contikimote.interfaces.ContikiClock se.sics.cooja.contikimote.interfaces.ContikiLED se.sics.cooja.contikimote.interfaces.ContikiLog se.sics.cooja.contikimote.interfaces.ContikiCFS se.sics.cooja.interfaces.Mote2MoteRelations
|
se.sics.cooja.contikimote.ContikiMoteType.MOTE_INTERFACES = se.sics.cooja.interfaces.Position se.sics.cooja.interfaces.Battery se.sics.cooja.contikimote.interfaces.ContikiVib se.sics.cooja.contikimote.interfaces.ContikiMoteID se.sics.cooja.contikimote.interfaces.ContikiRS232 se.sics.cooja.contikimote.interfaces.ContikiBeeper se.sics.cooja.contikimote.interfaces.ContikiIPAddress se.sics.cooja.contikimote.interfaces.ContikiRadio se.sics.cooja.contikimote.interfaces.ContikiButton se.sics.cooja.contikimote.interfaces.ContikiPIR se.sics.cooja.contikimote.interfaces.ContikiClock se.sics.cooja.contikimote.interfaces.ContikiLED se.sics.cooja.contikimote.interfaces.ContikiCFS se.sics.cooja.interfaces.Mote2MoteRelations
|
||||||
se.sics.cooja.contikimote.ContikiMoteType.C_SOURCES =
|
se.sics.cooja.contikimote.ContikiMoteType.C_SOURCES =
|
||||||
se.sics.cooja.GUI.MOTETYPES = se.sics.cooja.motes.DisturberMoteType se.sics.cooja.contikimote.ContikiMoteType
|
se.sics.cooja.GUI.MOTETYPES = se.sics.cooja.motes.DisturberMoteType se.sics.cooja.contikimote.ContikiMoteType
|
||||||
se.sics.cooja.GUI.PLUGINS = se.sics.cooja.plugins.VisState se.sics.cooja.plugins.VisBattery se.sics.cooja.plugins.VisTraffic se.sics.cooja.plugins.LogListener se.sics.cooja.plugins.MoteInformation se.sics.cooja.plugins.MoteInterfaceViewer se.sics.cooja.plugins.VariableWatcher se.sics.cooja.plugins.EventListener se.sics.cooja.plugins.RadioLogger se.sics.cooja.plugins.ScriptRunner
|
se.sics.cooja.GUI.PLUGINS = se.sics.cooja.plugins.VisState se.sics.cooja.plugins.VisBattery se.sics.cooja.plugins.VisTraffic se.sics.cooja.plugins.LogListener se.sics.cooja.plugins.MoteInformation se.sics.cooja.plugins.MoteInterfaceViewer se.sics.cooja.plugins.VariableWatcher se.sics.cooja.plugins.EventListener se.sics.cooja.plugins.RadioLogger se.sics.cooja.plugins.ScriptRunner
|
||||||
|
|
|
@ -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: ContikiMoteType.java,v 1.34 2009/03/12 18:25:45 nifi Exp $
|
* $Id: ContikiMoteType.java,v 1.35 2009/03/21 15:41:42 fros4943 Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package se.sics.cooja.contikimote;
|
package se.sics.cooja.contikimote;
|
||||||
|
@ -1309,14 +1309,18 @@ public class ContikiMoteType implements MoteType {
|
||||||
} else if (name.equals("commstack")) {
|
} else if (name.equals("commstack")) {
|
||||||
commStack = CommunicationStack.parse(element.getText());
|
commStack = CommunicationStack.parse(element.getText());
|
||||||
} else if (name.equals("moteinterface")) {
|
} else if (name.equals("moteinterface")) {
|
||||||
Class<? extends MoteInterface> moteInterfaceClass =
|
if (element.getText().trim().equals("se.sics.cooja.contikimote.interfaces.ContikiLog")) {
|
||||||
simulation.getGUI().tryLoadClass(
|
/* Backwards compatibility: ContikiLog was removed */
|
||||||
this, MoteInterface.class, element.getText().trim());
|
|
||||||
|
|
||||||
if (moteInterfaceClass == null) {
|
|
||||||
logger.warn("Can't find mote interface class: " + element.getText());
|
|
||||||
} else {
|
} else {
|
||||||
moteInterfacesClasses.add(moteInterfaceClass);
|
Class<? extends MoteInterface> moteInterfaceClass =
|
||||||
|
simulation.getGUI().tryLoadClass(
|
||||||
|
this, MoteInterface.class, element.getText().trim());
|
||||||
|
|
||||||
|
if (moteInterfaceClass == null) {
|
||||||
|
logger.warn("Can't find mote interface class: " + element.getText());
|
||||||
|
} else {
|
||||||
|
moteInterfacesClasses.add(moteInterfaceClass);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if (
|
} else if (
|
||||||
name.equals("contikibasedir") ||
|
name.equals("contikibasedir") ||
|
||||||
|
|
|
@ -1,170 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (c) 2008, 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.
|
|
||||||
*
|
|
||||||
* $Id: ContikiLog.java,v 1.8 2009/02/25 14:46:24 fros4943 Exp $
|
|
||||||
*/
|
|
||||||
|
|
||||||
package se.sics.cooja.contikimote.interfaces;
|
|
||||||
|
|
||||||
import java.awt.*;
|
|
||||||
import java.util.*;
|
|
||||||
import javax.swing.*;
|
|
||||||
import org.apache.log4j.Logger;
|
|
||||||
import org.jdom.Element;
|
|
||||||
|
|
||||||
import se.sics.cooja.*;
|
|
||||||
import se.sics.cooja.contikimote.ContikiMoteInterface;
|
|
||||||
import se.sics.cooja.interfaces.Log;
|
|
||||||
import se.sics.cooja.interfaces.PolledAfterActiveTicks;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Log mote interface. Captures both log_message(,) and printf(..).
|
|
||||||
*
|
|
||||||
* Contiki variables:
|
|
||||||
* <ul>
|
|
||||||
* <li>char simLoggedFlag
|
|
||||||
* (1=mote has new outgoing log messages, else no new)
|
|
||||||
* <li>int simLoggedLength
|
|
||||||
* (length of new log message)
|
|
||||||
* <li>byte[] simLoggedData (data of new log messages)
|
|
||||||
* </ul>
|
|
||||||
* <p>
|
|
||||||
*
|
|
||||||
* Core interface:
|
|
||||||
* <ul>
|
|
||||||
* <li>simlog_interface
|
|
||||||
* </ul>
|
|
||||||
* <p>
|
|
||||||
*
|
|
||||||
* This observable notifies at new mote log output.
|
|
||||||
*
|
|
||||||
* @author Fredrik Osterlind
|
|
||||||
*/
|
|
||||||
public class ContikiLog extends Log implements ContikiMoteInterface, PolledAfterActiveTicks {
|
|
||||||
private static Logger logger = Logger.getLogger(ContikiLog.class);
|
|
||||||
private Mote mote = null;
|
|
||||||
private SectionMoteMemory moteMem = null;
|
|
||||||
|
|
||||||
private String lastLogMessage = null;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates an interface to mote's logging output.
|
|
||||||
*
|
|
||||||
* @param mote Log's mote.
|
|
||||||
* @see Mote
|
|
||||||
* @see se.sics.cooja.MoteInterfaceHandler
|
|
||||||
*/
|
|
||||||
public ContikiLog(Mote mote) {
|
|
||||||
this.mote = mote;
|
|
||||||
this.moteMem = (SectionMoteMemory) mote.getMemory();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String[] getCoreInterfaceDependencies() {
|
|
||||||
return new String[] { "simlog_interface" };
|
|
||||||
}
|
|
||||||
|
|
||||||
public void doActionsAfterTick() {
|
|
||||||
if (moteMem.getByteValueOf("simLoggedFlag") == 1) {
|
|
||||||
int totalLength = moteMem.getIntValueOf("simLoggedLength");
|
|
||||||
byte[] bytes = moteMem.getByteArray("simLoggedData", totalLength);
|
|
||||||
char[] chars = new char[bytes.length];
|
|
||||||
for (int i=0; i < chars.length; i++) {
|
|
||||||
chars[i] = (char) bytes[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
moteMem.setByteValueOf("simLoggedFlag", (byte) 0);
|
|
||||||
moteMem.setIntValueOf("simLoggedLength", 0);
|
|
||||||
|
|
||||||
String messages[] = String.valueOf(chars).split("\n");
|
|
||||||
for (String message: messages) {
|
|
||||||
lastLogMessage = message;
|
|
||||||
|
|
||||||
this.setChanged();
|
|
||||||
this.notifyObservers(mote);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getLastLogMessage() {
|
|
||||||
return lastLogMessage;
|
|
||||||
}
|
|
||||||
|
|
||||||
public JPanel getInterfaceVisualizer() {
|
|
||||||
JPanel panel = new JPanel();
|
|
||||||
panel.setLayout(new BorderLayout());
|
|
||||||
final JTextArea logTextPane = new JTextArea();
|
|
||||||
logTextPane.setOpaque(false);
|
|
||||||
logTextPane.setEditable(false);
|
|
||||||
|
|
||||||
if (lastLogMessage == null) {
|
|
||||||
logTextPane.setText("");
|
|
||||||
} else {
|
|
||||||
logTextPane.append(lastLogMessage + "\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
Observer observer;
|
|
||||||
this.addObserver(observer = new Observer() {
|
|
||||||
public void update(Observable obs, Object obj) {
|
|
||||||
logTextPane.append(lastLogMessage + "\n");
|
|
||||||
logTextPane.setCaretPosition(logTextPane.getDocument().getLength());
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Saving observer reference for releaseInterfaceVisualizer
|
|
||||||
panel.putClientProperty("intf_obs", observer);
|
|
||||||
|
|
||||||
JScrollPane scrollPane = new JScrollPane(logTextPane);
|
|
||||||
scrollPane.setPreferredSize(new Dimension(100,100));
|
|
||||||
panel.add(BorderLayout.NORTH, new JLabel("Last log messages:"));
|
|
||||||
panel.add(BorderLayout.CENTER, scrollPane);
|
|
||||||
return panel;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void releaseInterfaceVisualizer(JPanel panel) {
|
|
||||||
Observer observer = (Observer) panel.getClientProperty("intf_obs");
|
|
||||||
if (observer == null) {
|
|
||||||
logger.fatal("Error when releasing panel, observer is null");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.deleteObserver(observer);
|
|
||||||
}
|
|
||||||
|
|
||||||
public double energyConsumption() {
|
|
||||||
// Does not require energy
|
|
||||||
return 0.0;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Collection<Element> getConfigXML() {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setConfigXML(Collection<Element> configXML, boolean visAvailable) {
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -26,28 +26,20 @@
|
||||||
* 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: ContikiRS232.java,v 1.5 2008/10/28 12:55:20 fros4943 Exp $
|
* $Id: ContikiRS232.java,v 1.6 2009/03/21 15:41:42 fros4943 Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package se.sics.cooja.contikimote.interfaces;
|
package se.sics.cooja.contikimote.interfaces;
|
||||||
|
|
||||||
import java.awt.BorderLayout;
|
|
||||||
import java.awt.Dimension;
|
|
||||||
import java.awt.event.*;
|
|
||||||
import java.util.*;
|
|
||||||
import javax.swing.*;
|
|
||||||
import org.apache.log4j.Logger;
|
import org.apache.log4j.Logger;
|
||||||
import org.jdom.Element;
|
|
||||||
|
|
||||||
import se.sics.cooja.*;
|
import se.sics.cooja.*;
|
||||||
import se.sics.cooja.contikimote.ContikiMoteInterface;
|
import se.sics.cooja.contikimote.ContikiMoteInterface;
|
||||||
|
import se.sics.cooja.dialogs.SerialUI;
|
||||||
import se.sics.cooja.interfaces.PolledAfterActiveTicks;
|
import se.sics.cooja.interfaces.PolledAfterActiveTicks;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Serial port mote interface.
|
* Contiki mote serial port and log interfaces.
|
||||||
* Only supports printable characters.
|
* Not fully implemented yet: does not support writeArray and writeByte
|
||||||
* Note that by default the serial interface is not equal to the log interface:
|
|
||||||
* printf(...) are not forwarded to this interface.
|
|
||||||
*
|
*
|
||||||
* Contiki variables:
|
* Contiki variables:
|
||||||
* <ul>
|
* <ul>
|
||||||
|
@ -70,19 +62,15 @@ import se.sics.cooja.interfaces.PolledAfterActiveTicks;
|
||||||
*
|
*
|
||||||
* @see #getSerialMessages()
|
* @see #getSerialMessages()
|
||||||
*
|
*
|
||||||
* @author Fredrik Österlind
|
* @author Fredrik Osterlind
|
||||||
*/
|
*/
|
||||||
@ClassDescription("Serial port (RS232)")
|
@ClassDescription("Serial port")
|
||||||
public class ContikiRS232 extends MoteInterface implements ContikiMoteInterface, PolledAfterActiveTicks {
|
public class ContikiRS232 extends SerialUI implements ContikiMoteInterface, PolledAfterActiveTicks {
|
||||||
private static Logger logger = Logger.getLogger(ContikiRS232.class);
|
private static Logger logger = Logger.getLogger(ContikiRS232.class);
|
||||||
|
|
||||||
private Mote mote = null;
|
private Mote mote = null;
|
||||||
private SectionMoteMemory moteMem = null;
|
private SectionMoteMemory moteMem = null;
|
||||||
|
|
||||||
private String lastSerialMessage = null;
|
|
||||||
|
|
||||||
private JTextArea logTextPane = null;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Approximate energy consumption of every sent character over RS232 (mQ).
|
* Approximate energy consumption of every sent character over RS232 (mQ).
|
||||||
*/
|
*/
|
||||||
|
@ -99,161 +87,70 @@ public class ContikiRS232 extends MoteInterface implements ContikiMoteInterface,
|
||||||
* @see se.sics.cooja.MoteInterfaceHandler
|
* @see se.sics.cooja.MoteInterfaceHandler
|
||||||
*/
|
*/
|
||||||
public ContikiRS232(Mote mote) {
|
public ContikiRS232(Mote mote) {
|
||||||
// Read class configurations of this mote type
|
ENERGY_CONSUMPTION_PER_CHAR_mQ =
|
||||||
ENERGY_CONSUMPTION_PER_CHAR_mQ = mote.getType().getConfig()
|
mote.getType().getConfig().getDoubleValue(ContikiRS232.class, "CONSUMPTION_PER_CHAR_mQ");
|
||||||
.getDoubleValue(ContikiRS232.class, "CONSUMPTION_PER_CHAR_mQ");
|
|
||||||
|
|
||||||
this.mote = mote;
|
this.mote = mote;
|
||||||
this.moteMem = (SectionMoteMemory) mote.getMemory();
|
this.moteMem = (SectionMoteMemory) mote.getMemory();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String[] getCoreInterfaceDependencies() {
|
public static String[] getCoreInterfaceDependencies() {
|
||||||
return new String[]{"rs232_interface"};
|
return new String[]{"rs232_interface", "simlog_interface" };
|
||||||
}
|
}
|
||||||
|
|
||||||
public void doActionsAfterTick() {
|
public void doActionsAfterTick() {
|
||||||
if (moteMem.getByteValueOf("simSerialSendingFlag") == 1) {
|
if (moteMem.getByteValueOf("simLoggedFlag") == 1) {
|
||||||
int totalLength = moteMem.getIntValueOf("simSerialSendingLength");
|
int len = moteMem.getIntValueOf("simLoggedLength");
|
||||||
byte[] bytes = moteMem.getByteArray("simSerialSendingData", totalLength);
|
byte[] bytes = moteMem.getByteArray("simLoggedData", len);
|
||||||
char[] chars = new char[bytes.length];
|
|
||||||
for (int i = 0; i < chars.length; i++) {
|
myEnergyConsumption = ENERGY_CONSUMPTION_PER_CHAR_mQ * len;
|
||||||
chars[i] = (char) bytes[i];
|
|
||||||
|
moteMem.setByteValueOf("simLoggedFlag", (byte) 0);
|
||||||
|
moteMem.setIntValueOf("simLoggedLength", 0);
|
||||||
|
|
||||||
|
for (byte b: bytes) {
|
||||||
|
dataReceived(b);
|
||||||
}
|
}
|
||||||
|
|
||||||
myEnergyConsumption = ENERGY_CONSUMPTION_PER_CHAR_mQ * totalLength;
|
|
||||||
|
|
||||||
String message = String.valueOf(chars);
|
|
||||||
lastSerialMessage = message;
|
|
||||||
|
|
||||||
moteMem.setByteValueOf("simSerialSendingFlag", (byte) 0);
|
|
||||||
moteMem.setIntValueOf("simSerialSendingLength", 0);
|
|
||||||
|
|
||||||
this.setChanged();
|
|
||||||
this.notifyObservers(mote);
|
|
||||||
} else {
|
} else {
|
||||||
myEnergyConsumption = 0.0;
|
myEnergyConsumption = 0.0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public void writeString(String message) {
|
||||||
* Returns all serial messages sent by mote the last tick that anything was
|
|
||||||
* sent.
|
|
||||||
*
|
|
||||||
* @return Last serial messages sent by mote.
|
|
||||||
*/
|
|
||||||
public String getSerialMessages() {
|
|
||||||
return lastSerialMessage;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Send a serial message to mote.
|
|
||||||
*
|
|
||||||
* @param message
|
|
||||||
* Message that mote should receive
|
|
||||||
*/
|
|
||||||
public void sendSerialMessage(String message) {
|
|
||||||
|
|
||||||
if (logTextPane != null) {
|
|
||||||
logTextPane.append("> " + message + "\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Flag for incoming data
|
|
||||||
moteMem.setByteValueOf("simSerialReceivingFlag", (byte) 1);
|
moteMem.setByteValueOf("simSerialReceivingFlag", (byte) 1);
|
||||||
|
|
||||||
byte[] dataToAppend = message.getBytes();
|
byte[] dataToAppend = message.getBytes();
|
||||||
|
|
||||||
// Increase receiving size
|
/* Append to existing buffer */
|
||||||
int oldSize = moteMem.getIntValueOf("simSerialReceivingLength");
|
int oldSize = moteMem.getIntValueOf("simSerialReceivingLength");
|
||||||
moteMem.setIntValueOf("simSerialReceivingLength", oldSize
|
int newSize = oldSize + dataToAppend.length;
|
||||||
+ dataToAppend.length);
|
moteMem.setIntValueOf("simSerialReceivingLength", newSize);
|
||||||
int newSize = moteMem.getIntValueOf("simSerialReceivingLength");
|
|
||||||
|
|
||||||
// Write buffer characters
|
|
||||||
byte[] oldData = moteMem.getByteArray("simSerialReceivingData", oldSize);
|
byte[] oldData = moteMem.getByteArray("simSerialReceivingData", oldSize);
|
||||||
byte[] newData = new byte[newSize];
|
byte[] newData = new byte[newSize];
|
||||||
|
|
||||||
for (int i = 0; i < oldData.length; i++) {
|
System.arraycopy(oldData, 0, newData, 0, oldData.length);
|
||||||
newData[i] = oldData[i];
|
System.arraycopy(dataToAppend, 0, newData, oldSize, dataToAppend.length);
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = 0; i < message.length(); i++) {
|
|
||||||
newData[i + oldSize] = dataToAppend[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
moteMem.setByteArray("simSerialReceivingData", newData);
|
moteMem.setByteArray("simSerialReceivingData", newData);
|
||||||
|
|
||||||
mote.setState(Mote.State.ACTIVE);
|
mote.setState(Mote.State.ACTIVE);
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public JPanel getInterfaceVisualizer() {
|
|
||||||
JPanel panel = new JPanel();
|
|
||||||
panel.setLayout(new BorderLayout());
|
|
||||||
|
|
||||||
if (logTextPane == null) {
|
|
||||||
logTextPane = new JTextArea();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Send RS232 data visualizer
|
|
||||||
JPanel sendPane = new JPanel();
|
|
||||||
final JTextField sendTextField = new JTextField(15);
|
|
||||||
JButton sendButton = new JButton("Send data");
|
|
||||||
sendButton.addActionListener(new ActionListener() {
|
|
||||||
public void actionPerformed(ActionEvent e) {
|
|
||||||
sendSerialMessage(sendTextField.getText());
|
|
||||||
}
|
|
||||||
});
|
|
||||||
sendPane.add(BorderLayout.WEST, sendTextField);
|
|
||||||
sendPane.add(BorderLayout.EAST, sendButton);
|
|
||||||
|
|
||||||
// Receive RS232 data visualizer
|
|
||||||
logTextPane.setOpaque(false);
|
|
||||||
logTextPane.setEditable(false);
|
|
||||||
|
|
||||||
if (lastSerialMessage == null) {
|
|
||||||
logTextPane.setText("");
|
|
||||||
} else {
|
|
||||||
logTextPane.append(lastSerialMessage);
|
|
||||||
}
|
|
||||||
|
|
||||||
Observer observer;
|
|
||||||
this.addObserver(observer = new Observer() {
|
|
||||||
public void update(Observable obs, Object obj) {
|
|
||||||
logTextPane.append("< " + lastSerialMessage + "\n");
|
|
||||||
logTextPane.setCaretPosition(logTextPane.getDocument().getLength());
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Saving observer reference for releaseInterfaceVisualizer
|
|
||||||
panel.putClientProperty("intf_obs", observer);
|
|
||||||
|
|
||||||
JScrollPane scrollPane = new JScrollPane(logTextPane);
|
|
||||||
scrollPane.setPreferredSize(new Dimension(100, 100));
|
|
||||||
panel.add(BorderLayout.NORTH, new JLabel("Last serial data:"));
|
|
||||||
panel.add(BorderLayout.CENTER, scrollPane);
|
|
||||||
panel.add(BorderLayout.SOUTH, sendPane);
|
|
||||||
return panel;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void releaseInterfaceVisualizer(JPanel panel) {
|
|
||||||
Observer observer = (Observer) panel.getClientProperty("intf_obs");
|
|
||||||
if (observer == null) {
|
|
||||||
logger.fatal("Error when releasing panel, observer is null");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.deleteObserver(observer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public double energyConsumption() {
|
public double energyConsumption() {
|
||||||
return myEnergyConsumption;
|
return myEnergyConsumption;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Collection<Element> getConfigXML() {
|
public Mote getMote() {
|
||||||
return null;
|
return mote;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setConfigXML(Collection<Element> configXML, boolean visAvailable) {
|
public void writeArray(byte[] s) {
|
||||||
|
logger.fatal("NOT IMPLEMENTED");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void writeByte(byte b) {
|
||||||
|
logger.fatal("NOT IMPLEMENTED");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,17 +26,17 @@
|
||||||
* 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: PolledAfterActiveTicks.java,v 1.2 2009/03/09 14:08:54 fros4943 Exp $
|
* $Id: PolledAfterActiveTicks.java,v 1.3 2009/03/21 15:41:42 fros4943 Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package se.sics.cooja.interfaces;
|
package se.sics.cooja.interfaces;
|
||||||
|
|
||||||
import se.sics.cooja.contikimote.interfaces.ContikiLog;
|
import se.sics.cooja.contikimote.interfaces.ContikiRS232;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A mote interface polled after a mote tick ONLY IF the mote is awake.
|
* A mote interface polled after a mote tick ONLY IF the mote is awake.
|
||||||
*
|
*
|
||||||
* @see ContikiLog
|
* @see ContikiRS232
|
||||||
*
|
*
|
||||||
* @author Fredrik Osterlind
|
* @author Fredrik Osterlind
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in a new issue