minor changes due to deletion of static variables.
added support for new contiki mote type information: compilation files
This commit is contained in:
parent
8de17adc2d
commit
89b5f3c2db
1 changed files with 120 additions and 8 deletions
|
@ -26,12 +26,13 @@
|
||||||
* 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.6 2006/11/08 02:14:24 fros4943 Exp $
|
* $Id: ContikiMoteType.java,v 1.7 2007/01/09 10:09:19 fros4943 Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package se.sics.cooja.contikimote;
|
package se.sics.cooja.contikimote;
|
||||||
|
|
||||||
import java.awt.BorderLayout;
|
import java.awt.BorderLayout;
|
||||||
|
import java.awt.Component;
|
||||||
import java.awt.Dimension;
|
import java.awt.Dimension;
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.security.*;
|
import java.security.*;
|
||||||
|
@ -108,6 +109,7 @@ public class ContikiMoteType implements MoteType {
|
||||||
private String contikiBaseDir = null;
|
private String contikiBaseDir = null;
|
||||||
private String contikiCoreDir = null;
|
private String contikiCoreDir = null;
|
||||||
private Vector<File> userPlatformDirs = null;
|
private Vector<File> userPlatformDirs = null;
|
||||||
|
private Vector<File> compilationFiles = null;
|
||||||
private Vector<String> processes = null;
|
private Vector<String> processes = null;
|
||||||
private Vector<String> sensors = null;
|
private Vector<String> sensors = null;
|
||||||
private Vector<String> coreInterfaces = null;
|
private Vector<String> coreInterfaces = null;
|
||||||
|
@ -155,8 +157,75 @@ public class ContikiMoteType implements MoteType {
|
||||||
return new ContikiMote(this, simulation);
|
return new ContikiMote(this, simulation);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean configureAndInit(JFrame parentFrame, Simulation simulation) {
|
public boolean configureAndInit(JFrame parentFrame, Simulation simulation, boolean visAvailable) {
|
||||||
return ContikiMoteTypeDialog.showDialog(parentFrame, simulation, this);
|
if (visAvailable) {
|
||||||
|
return ContikiMoteTypeDialog.showDialog(parentFrame, simulation, this);
|
||||||
|
} else {
|
||||||
|
|
||||||
|
// Create temp output directory if not already exists
|
||||||
|
if (!ContikiMoteType.tempOutputDirectory.exists())
|
||||||
|
ContikiMoteType.tempOutputDirectory.mkdir();
|
||||||
|
if (!ContikiMoteType.tempOutputDirectory.exists()) {
|
||||||
|
logger.fatal(">> Could not create output directory: "
|
||||||
|
+ ContikiMoteType.tempOutputDirectory);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete output files
|
||||||
|
File libFile = new File(ContikiMoteType.tempOutputDirectory,
|
||||||
|
identifier + ContikiMoteType.librarySuffix);
|
||||||
|
File mapFile = new File(ContikiMoteType.tempOutputDirectory,
|
||||||
|
identifier + ContikiMoteType.mapSuffix);
|
||||||
|
File depFile = new File(ContikiMoteType.tempOutputDirectory,
|
||||||
|
identifier + ContikiMoteType.dependSuffix);
|
||||||
|
if (libFile.exists())
|
||||||
|
libFile.delete();
|
||||||
|
if (depFile.exists())
|
||||||
|
depFile.delete();
|
||||||
|
if (mapFile.exists())
|
||||||
|
mapFile.delete();
|
||||||
|
if (libFile.exists()) {
|
||||||
|
logger.fatal(">> Can't delete output file, aborting: " + libFile);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (depFile.exists()) {
|
||||||
|
logger.fatal(">> Can't delete output file, aborting: " + depFile);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (mapFile.exists()) {
|
||||||
|
logger.fatal(">> Can't delete output file, aborting: " + mapFile);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Generate Contiki main source file
|
||||||
|
try {
|
||||||
|
ContikiMoteTypeDialog.generateSourceFile(identifier, sensors, coreInterfaces, processes);
|
||||||
|
} catch (Exception e) {
|
||||||
|
logger.fatal(">> Error during file generation, aborting: " + e.getMessage());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Compile library
|
||||||
|
boolean compilationSucceded = ContikiMoteTypeDialog.compileLibrary(
|
||||||
|
identifier,
|
||||||
|
new File(contikiBaseDir),
|
||||||
|
compilationFiles,
|
||||||
|
hasSystemSymbols,
|
||||||
|
null,
|
||||||
|
null);
|
||||||
|
if (!libFile.exists() || !depFile.exists() || !mapFile.exists())
|
||||||
|
compilationSucceded = false;
|
||||||
|
|
||||||
|
if (!compilationSucceded) {
|
||||||
|
logger.fatal(">> Error during compilation, aborting");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Load compiled library
|
||||||
|
boolean loadingSucceded = doInit(identifier);
|
||||||
|
|
||||||
|
return loadingSucceded;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -252,7 +321,7 @@ public class ContikiMoteType implements MoteType {
|
||||||
initialMemory.setMemorySegment(relDataSectionAddr, initialDataSection);
|
initialMemory.setMemorySegment(relDataSectionAddr, initialDataSection);
|
||||||
initialMemory.setMemorySegment(relBssSectionAddr, initialBssSection);
|
initialMemory.setMemorySegment(relBssSectionAddr, initialBssSection);
|
||||||
|
|
||||||
return false;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -745,6 +814,25 @@ public class ContikiMoteType implements MoteType {
|
||||||
contikiCoreDir = path;
|
contikiCoreDir = path;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns compilation files
|
||||||
|
*
|
||||||
|
* @return Compilation files
|
||||||
|
*/
|
||||||
|
public Vector<File> getCompilationFiles() {
|
||||||
|
return compilationFiles;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets compilation files.
|
||||||
|
*
|
||||||
|
* @param files
|
||||||
|
* New compilation files
|
||||||
|
*/
|
||||||
|
public void setCompilationFiles(Vector<File> files) {
|
||||||
|
compilationFiles = files;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns user platform directories
|
* Returns user platform directories
|
||||||
*
|
*
|
||||||
|
@ -1018,6 +1106,13 @@ public class ContikiMoteType implements MoteType {
|
||||||
element.setText(userPlatform.getPath());
|
element.setText(userPlatform.getPath());
|
||||||
config.add(element);
|
config.add(element);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Compilation files
|
||||||
|
for (File compileFile: compilationFiles) {
|
||||||
|
element = new Element("compilefile");
|
||||||
|
element.setText(compileFile.getPath());
|
||||||
|
config.add(element);
|
||||||
|
}
|
||||||
|
|
||||||
// Contiki processes
|
// Contiki processes
|
||||||
for (String process : getProcesses()) {
|
for (String process : getProcesses()) {
|
||||||
|
@ -1056,14 +1151,15 @@ public class ContikiMoteType implements MoteType {
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean setConfigXML(Simulation simulation,
|
public boolean setConfigXML(Simulation simulation,
|
||||||
Collection<Element> configXML) {
|
Collection<Element> configXML, boolean visAvailable) {
|
||||||
userPlatformDirs = new Vector<File>();
|
userPlatformDirs = new Vector<File>();
|
||||||
|
compilationFiles = new Vector<File>();
|
||||||
processes = new Vector<String>();
|
processes = new Vector<String>();
|
||||||
sensors = new Vector<String>();
|
sensors = new Vector<String>();
|
||||||
coreInterfaces = new Vector<String>();
|
coreInterfaces = new Vector<String>();
|
||||||
moteInterfaces = new Vector<Class<? extends MoteInterface>>();
|
moteInterfaces = new Vector<Class<? extends MoteInterface>>();
|
||||||
mySimulation = simulation;
|
mySimulation = simulation;
|
||||||
|
|
||||||
for (Element element : configXML) {
|
for (Element element : configXML) {
|
||||||
String name = element.getName();
|
String name = element.getName();
|
||||||
|
|
||||||
|
@ -1077,6 +1173,8 @@ public class ContikiMoteType implements MoteType {
|
||||||
contikiCoreDir = element.getText();
|
contikiCoreDir = element.getText();
|
||||||
} else if (name.equals("userplatformdir")) {
|
} else if (name.equals("userplatformdir")) {
|
||||||
userPlatformDirs.add(new File(element.getText()));
|
userPlatformDirs.add(new File(element.getText()));
|
||||||
|
} else if (name.equals("compilefile")) {
|
||||||
|
compilationFiles.add(new File(element.getText()));
|
||||||
} else if (name.equals("process")) {
|
} else if (name.equals("process")) {
|
||||||
processes.add(element.getText());
|
processes.add(element.getText());
|
||||||
} else if (name.equals("sensor")) {
|
} else if (name.equals("sensor")) {
|
||||||
|
@ -1087,7 +1185,7 @@ public class ContikiMoteType implements MoteType {
|
||||||
coreInterfaces.add(element.getText());
|
coreInterfaces.add(element.getText());
|
||||||
} else if (name.equals("moteinterface")) {
|
} else if (name.equals("moteinterface")) {
|
||||||
Class<? extends MoteInterface> moteInterfaceClass =
|
Class<? extends MoteInterface> moteInterfaceClass =
|
||||||
GUI.currentGUI.tryLoadClass(this, MoteInterface.class, element.getText().trim());
|
simulation.getGUI().tryLoadClass(this, MoteInterface.class, element.getText().trim());
|
||||||
|
|
||||||
if (moteInterfaceClass == null) {
|
if (moteInterfaceClass == null) {
|
||||||
logger.warn("Can't find mote interface class: " + element.getText());
|
logger.warn("Can't find mote interface class: " + element.getText());
|
||||||
|
@ -1098,7 +1196,21 @@ public class ContikiMoteType implements MoteType {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean createdOK = configureAndInit(GUI.frame, simulation);
|
// Create class specific configuration
|
||||||
|
myConfig = simulation.getGUI().getPlatformConfig().clone();
|
||||||
|
|
||||||
|
// Merge with all user platform configs (if any)
|
||||||
|
for (File userPlatform : userPlatformDirs) {
|
||||||
|
try {
|
||||||
|
myConfig.appendUserPlatform(userPlatform);
|
||||||
|
} catch (Exception ex) {
|
||||||
|
logger.fatal("Error when parsing user platform config: " + ex);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mySimulation = simulation;
|
||||||
|
boolean createdOK = configureAndInit(GUI.frame, simulation, visAvailable);
|
||||||
return createdOK;
|
return createdOK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue