diff options
author | gdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4> | 2012-08-08 16:45:56 +0000 |
---|---|---|
committer | gdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4> | 2012-08-08 16:45:56 +0000 |
commit | 4bdc2322a82279051981716284f145965321ba07 (patch) | |
tree | 7119ac6ea336975ec65e416db9d51f847b89b6bc /tools | |
parent | ecc767386f69585107ce4678c2cb0ab01bd4145a (diff) | |
download | ChibiOS-4bdc2322a82279051981716284f145965321ba07.tar.gz ChibiOS-4bdc2322a82279051981716284f145965321ba07.tar.bz2 ChibiOS-4bdc2322a82279051981716284f145965321ba07.zip |
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@4543 35acf78f-673a-0410-8e92-d51de3d6d3f4
Diffstat (limited to 'tools')
9 files changed, 280 insertions, 63 deletions
diff --git a/tools/eclipse/config_wizard/META-INF/MANIFEST.MF b/tools/eclipse/config_wizard/META-INF/MANIFEST.MF index 6b14e432e..b7cea1ead 100644 --- a/tools/eclipse/config_wizard/META-INF/MANIFEST.MF +++ b/tools/eclipse/config_wizard/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: ChibiOS-RT_Configuration_Support Bundle-SymbolicName: org.chibios.tools.eclipse.config;singleton:=true -Bundle-Version: 1.1.0 +Bundle-Version: 1.2.0 Bundle-Activator: config_wizard.Activator Require-Bundle: org.eclipse.core.resources, org.eclipse.core.runtime, diff --git a/tools/eclipse/config_wizard/resources/gencfg/lib/code_snippets.xml b/tools/eclipse/config_wizard/resources/gencfg/lib/code_snippets.xml new file mode 100644 index 000000000..2d0e5959a --- /dev/null +++ b/tools/eclipse/config_wizard/resources/gencfg/lib/code_snippets.xml @@ -0,0 +1,50 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<!-- Code Templates -->
+<code
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:noNamespaceSchemaLocation="http://www.chibios.org/xml/schema/common/code_snippets.xsd">
+ <snippets>
+ <snippet>
+ <type>thread_body</type>
+ <name>Empty</name>
+<text><![CDATA[[#ftl]
+[#macro do_code function]
+
+ return 0;
+[/#macro]]]>
+</text>
+ </snippet>
+ <snippet>
+ <type>thread_body</type>
+ <name>Checks for Termination</name>
+<text><![CDATA[[#ftl]
+[#ftl]
+[#macro do_code function]
+
+ while (!chThdShouldTerminate()) {
+ /* Thread activity here. */
+ }
+ return 0;
+[/#macro]]]>
+</text>
+ </snippet>
+ <snippet>
+ <type>thread_body</type>
+ <name>Message Server</name>
+<text><![CDATA[[#ftl]
+[#ftl]
+[#macro do_code function]
+
+ while(TRUE) {
+ msg_t msg, response;
+
+ msg = chMsgWait();
+ /* Process the message here then prepare a response. */
+ chMsgRelease(response);
+ }
+ return 0;
+[/#macro]]]>
+</text>
+ </snippet>
+ </snippets>
+</code>
diff --git a/tools/eclipse/config_wizard/resources/gencfg/lib/libsnippets.ftl b/tools/eclipse/config_wizard/resources/gencfg/lib/libsnippets.ftl new file mode 100644 index 000000000..a0680af04 --- /dev/null +++ b/tools/eclipse/config_wizard/resources/gencfg/lib/libsnippets.ftl @@ -0,0 +1,33 @@ +[#ftl]
+[#--
+ ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010,
+ 2011,2012 Giovanni Di Sirio.
+
+ This file is part of ChibiOS/RT.
+
+ ChibiOS/RT is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ ChibiOS/RT is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ --]
+
+[#--
+ -- Find and return a code template from the templates archive.
+ --]
+[#function GetThreadCode name]
+ [#list doc_snippets.code.snippets.snippet as snippet]
+ [#if (snippet.type[0] == "thread_body") &&
+ ((snippet.name[0]!"")?trim?lower_case == name?trim?lower_case)]
+ [#return snippet.text[0]!"" /]
+ [/#if]
+ [/#list]
+ [#return "/* Thread style not found: " + name + " */" /]
+[/#function]
diff --git a/tools/eclipse/config_wizard/resources/gencfg/processors/processors.xml b/tools/eclipse/config_wizard/resources/gencfg/processors/processors.xml index 6dba55fcd..30a70c069 100644 --- a/tools/eclipse/config_wizard/resources/gencfg/processors/processors.xml +++ b/tools/eclipse/config_wizard/resources/gencfg/processors/processors.xml @@ -1,20 +1,38 @@ <processors>
- <processor>
+ <processor class="board" target="STM32F0xx">
<name>STM32F0xx Board Configuration</name>
<path>resources/gencfg/processors/boards/stm32f0xx/templates</path>
<default>resources/gencfg/xml/stm32f0board.xml</default>
<basefilename>board</basefilename>
</processor>
- <processor>
+ <processor class="board" target="STM32F4xx">
<name>STM32F4xx Board Configuration</name>
<path>resources/gencfg/processors/boards/stm32f4xx/templates</path>
<default>resources/gencfg/xml/stm32f4board.xml</default>
<basefilename>board</basefilename>
</processor>
- <processor>
+ <processor class="board" target="STM32L1xx">
<name>STM32L1xx Board Configuration</name>
<path>resources/gencfg/processors/boards/stm32l1xx/templates</path>
<default>resources/gencfg/xml/stm32l1board.xml</default>
<basefilename>board</basefilename>
</processor>
+ <processor class="build" target="STM32F0xx">
+ <name>STM32F0xx Build Environment Configuration</name>
+ <path>resources/gencfg/processors/builds/stm32f0xx/templates</path>
+ <default>resources/gencfg/xml/stm32f0build.xml</default>
+ <basefilename>build</basefilename>
+ </processor>
+ <processor class="build" target="STM32F4xx">
+ <name>STM32F4xx Build Environment Configuration</name>
+ <path>resources/gencfg/processors/builds/stm32f4xx/templates</path>
+ <default>resources/gencfg/xml/stm32f4build.xml</default>
+ <basefilename>build</basefilename>
+ </processor>
+ <processor class="build" target="STM32L1xx">
+ <name>STM32L1xx Build Environment Configuration</name>
+ <path>resources/gencfg/processors/builds/stm32l1xx/templates</path>
+ <default>resources/gencfg/xml/stm32l1build.xml</default>
+ <basefilename>build</basefilename>
+ </processor>
</processors>
diff --git a/tools/eclipse/config_wizard/resources/gencfg/schema/common/code_snippets.xsd b/tools/eclipse/config_wizard/resources/gencfg/schema/common/code_snippets.xsd new file mode 100644 index 000000000..ad0bad11a --- /dev/null +++ b/tools/eclipse/config_wizard/resources/gencfg/schema/common/code_snippets.xsd @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsd:schema elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + + + <xsd:element name="code"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="snippets" maxOccurs="1" + minOccurs="1"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="snippet" + maxOccurs="unbounded" minOccurs="1"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="type" + maxOccurs="1" minOccurs="1"> + <xsd:simpleType> + <xsd:restriction + base="xsd:string"> + <xsd:enumeration + value="thread_body"> + </xsd:enumeration> + <xsd:enumeration + value="function_body"> + </xsd:enumeration> + <xsd:whiteSpace + value="collapse"> + </xsd:whiteSpace> + </xsd:restriction> + </xsd:simpleType> + </xsd:element> + <xsd:element name="name" + maxOccurs="1" minOccurs="1"> + <xsd:simpleType> + <xsd:restriction + base="xsd:string"> + <xsd:pattern + value="[\w\d\s_]+"> + </xsd:pattern> + <xsd:whiteSpace + value="collapse"> + </xsd:whiteSpace> + </xsd:restriction> + </xsd:simpleType> + </xsd:element> + <xsd:element name="text" + type="xsd:string" maxOccurs="1" minOccurs="1"> + </xsd:element> + </xsd:sequence> + </xsd:complexType> + </xsd:element> + </xsd:sequence> + </xsd:complexType> + </xsd:element> + </xsd:sequence> + </xsd:complexType> + </xsd:element> +</xsd:schema> diff --git a/tools/eclipse/config_wizard/src/org/chibios/tools/eclipse/config/handlers/GenerateFiles.java b/tools/eclipse/config_wizard/src/org/chibios/tools/eclipse/config/handlers/GenerateFiles.java index e6e9b3790..c742d9072 100644 --- a/tools/eclipse/config_wizard/src/org/chibios/tools/eclipse/config/handlers/GenerateFiles.java +++ b/tools/eclipse/config_wizard/src/org/chibios/tools/eclipse/config/handlers/GenerateFiles.java @@ -118,6 +118,7 @@ public class GenerateFiles extends AbstractHandler { return null; } } + /* TODO: refresh output path.*/ return null; } } diff --git a/tools/eclipse/config_wizard/src/org/chibios/tools/eclipse/config/utils/TemplateEngine.java b/tools/eclipse/config_wizard/src/org/chibios/tools/eclipse/config/utils/TemplateEngine.java index 272d6a5c2..60a33f0e2 100644 --- a/tools/eclipse/config_wizard/src/org/chibios/tools/eclipse/config/utils/TemplateEngine.java +++ b/tools/eclipse/config_wizard/src/org/chibios/tools/eclipse/config/utils/TemplateEngine.java @@ -20,6 +20,7 @@ package org.chibios.tools.eclipse.config.utils;
+import java.io.File;
import java.io.IOException;
import java.util.HashMap;
@@ -165,9 +166,12 @@ public class TemplateEngine { } catch (ParserConfigurationException e) {
throw new TemplateException(e.getMessage());
}
- Document dom1;
+ Document dom1, dom_snippets;
try {
dom1 = db.parse(xmldata);
+ java.io.File xmlsnippets = new File(libdir.toString() +
+ "/code_snippets.xml");
+ dom_snippets = db.parse(xmlsnippets);
} catch (SAXException e) {
throw new TemplateException(e.getMessage());
} catch (IOException e) {
@@ -176,10 +180,14 @@ public class TemplateEngine { NodeModel.removeComments(dom1);
NodeModel.mergeAdjacentText(dom1);
+ NodeModel.removeComments(dom_snippets);
TemplateNodeModel doc1 = NodeModel.wrap(dom1);
+ NodeModel.mergeAdjacentText(dom_snippets);
+ TemplateNodeModel doc_snippets = NodeModel.wrap(dom_snippets);
HashMap<String, TemplateNodeModel> xmls = new HashMap<String, TemplateNodeModel>();
xmls.put("doc1", doc1);
+ xmls.put("doc_snippets", doc_snippets);
/* Setting libraries path. */
HashMap<String, String> libs = new HashMap<String, String>();
diff --git a/tools/eclipse/config_wizard/src/org/chibios/tools/eclipse/config/wizards/ConfigurationNewWizardPage.java b/tools/eclipse/config_wizard/src/org/chibios/tools/eclipse/config/wizards/ConfigurationNewWizardPage.java index 2cc7b830b..d503d9748 100644 --- a/tools/eclipse/config_wizard/src/org/chibios/tools/eclipse/config/wizards/ConfigurationNewWizardPage.java +++ b/tools/eclipse/config_wizard/src/org/chibios/tools/eclipse/config/wizards/ConfigurationNewWizardPage.java @@ -122,7 +122,6 @@ public class ConfigurationNewWizardPage extends WizardPage { } }); - populateWizardPanel(); initialize(); setControl(container); } @@ -171,18 +170,9 @@ public class ConfigurationNewWizardPage extends WizardPage { container.setEnabled(false); updateStatus("Container for the resource not selected."); } - } - - /** - * Fills the wizard configuration panel from XML data. - * - * @param configurationTemplateCombo - * the combo box to be populated - */ - private void populateWizardPanel() { - String fpath; /* Retrieving the resource path of the processors.xml file. */ + String fpath; try { Bundle bundle = Platform.getBundle(Activator.PLUGIN_ID); IPath path = new Path("resources/gencfg/processors/processors.xml"); @@ -205,10 +195,8 @@ public class ConfigurationNewWizardPage extends WizardPage { return; } - /* - * Parsing the content of the processors.xml file in order to populate the - * panel objects. - */ + /* Parsing the content of the processors.xml file in order to populate the + panel objects.*/ Element root = processorsDocument.getRootElement(); for (Element processor : root.getChildren("processor")) { String name = processor.getChildText("name"); diff --git a/tools/eclipse/config_wizard/src/org/chibios/tools/eclipse/config/wizards/NewApplicationProjectWizardPage.java b/tools/eclipse/config_wizard/src/org/chibios/tools/eclipse/config/wizards/NewApplicationProjectWizardPage.java index d771b68e8..efc377014 100644 --- a/tools/eclipse/config_wizard/src/org/chibios/tools/eclipse/config/wizards/NewApplicationProjectWizardPage.java +++ b/tools/eclipse/config_wizard/src/org/chibios/tools/eclipse/config/wizards/NewApplicationProjectWizardPage.java @@ -1,17 +1,21 @@ package org.chibios.tools.eclipse.config.wizards;
import java.io.File;
+import java.io.IOException;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.FileLocator;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Platform;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.DirectoryDialog;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.Button;
@@ -19,6 +23,15 @@ import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.widgets.Combo;
+
+import org.jdom2.Document;
+import org.jdom2.Element;
+import org.jdom2.JDOMException;
+import org.jdom2.input.SAXBuilder;
+import org.osgi.framework.Bundle;
+
+import config_wizard.Activator;
public class NewApplicationProjectWizardPage extends WizardPage {
@@ -26,11 +39,13 @@ public class NewApplicationProjectWizardPage extends WizardPage { private Composite container;
private Text projectParentPathText;
private Button btnBrowse;
- private Label lblProjectName;
+ private Label lbl1;
private Text projectNameText;
private Button useCustomPathButton;
- private Label lblFinalProjectPath;
+ private Label lbl3;
private Text projectFinalPathText;
+ private Label lbl4;
+ private Combo platformCombo;
/**
* Constructor for SampleNewWizardPage.
@@ -53,19 +68,20 @@ public class NewApplicationProjectWizardPage extends WizardPage { container.setLayout(layout);
layout.numColumns = 3;
layout.verticalSpacing = 9;
-
- lblProjectName = new Label(container, SWT.NONE);
- lblProjectName.setText("Project name:");
+ /* Layout row 1.*/
+ lbl1 = new Label(container, SWT.NONE);
+ lbl1.setText("Project name:");
projectNameText = new Text(container, SWT.BORDER);
projectNameText.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
- projectNameUpdated();
+ projectPageUpdated();
}
});
projectNameText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
new Label(container, SWT.NONE);
-
+
+ /* Layout row 2.*/
useCustomPathButton = new Button(container, SWT.CHECK);
useCustomPathButton.addSelectionListener(new SelectionAdapter() {
@Override
@@ -73,11 +89,13 @@ public class NewApplicationProjectWizardPage extends WizardPage { if (useCustomPathButton.getSelection()) {
projectParentPathText.setText(ResourcesPlugin.getWorkspace().getRoot().getLocation().toString());
projectParentPathText.setEnabled(false);
+ btnBrowse.setEnabled(false);
updateFinalProjectPathText();
}
else {
projectParentPathText.setText(ResourcesPlugin.getWorkspace().getRoot().getLocation().toString());
projectParentPathText.setEnabled(true);
+ btnBrowse.setEnabled(true);
updateFinalProjectPathText();
}
}
@@ -86,33 +104,49 @@ public class NewApplicationProjectWizardPage extends WizardPage { new Label(container, SWT.NONE);
new Label(container, SWT.NONE);
- Label lbl1 = new Label(container, SWT.NULL);
- lbl1.setText("Project parent path:");
-
+ /* Layout row 3.*/
+ Label lbl2 = new Label(container, SWT.NULL);
+ lbl2.setText("Project parent path:");
projectParentPathText = new Text(container, SWT.BORDER | SWT.SINGLE);
projectParentPathText.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
- projectPathUpdated();
+ projectPageUpdated();
}
});
projectParentPathText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-
btnBrowse = new Button(container, SWT.NONE);
btnBrowse.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
+ /* Prompts the user for a parent directory for the new project.*/
+ DirectoryDialog dlg = new DirectoryDialog(getShell());
+ dlg.setFilterPath(projectParentPathText.getText());
+ dlg.setText("New ChibiOS/RT Project");
+ dlg.setMessage("Select the parent directory for the new ChibiOS/RT application project.");
+ String parent = dlg.open();
+ if (parent != null) {
+ projectParentPathText.setText(parent);
+ projectPageUpdated();
+ }
}
});
btnBrowse.setText("Browse...");
- lblFinalProjectPath = new Label(container, SWT.NONE);
- lblFinalProjectPath.setText("Final project path:");
-
+ /* Layout row 4.*/
+ lbl3 = new Label(container, SWT.NONE);
+ lbl3.setText("Final project path:");
projectFinalPathText = new Text(container, SWT.BORDER);
projectFinalPathText.setEditable(false);
projectFinalPathText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+ new Label(container, SWT.NONE);
+
+ /* Layout row 5.*/
+ lbl4 = new Label(container, SWT.NONE);
+ lbl4.setText("Target platform:");
+ platformCombo = new Combo(container, SWT.READ_ONLY);
+ platformCombo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+ new Label(container, SWT.NONE);
- populateWizardPanel();
initialize();
setControl(container);
}
@@ -121,49 +155,60 @@ public class NewApplicationProjectWizardPage extends WizardPage { * Tests if the current workbench selection is a suitable container to use.
*/
private void initialize() {
-
+
/* Initial state of the check box and project path text.*/
useCustomPathButton.setSelection(true);
projectParentPathText.setText(ResourcesPlugin.getWorkspace().getRoot().getLocation().toString());
projectParentPathText.setEnabled(false);
+ btnBrowse.setEnabled(false);
- /* Update checks on the fields.*/
- projectNameUpdated();
- }
- /**
- * Fills the wizard configuration panel from XML data.
- *
- * @param configurationTemplateCombo
- * the combo box to be populated
- */
- private void populateWizardPanel() {
-
- }
-
- private void projectNameUpdated() {
- String name = projectNameText.getText();
-
- updateFinalProjectPathText();
-
- if (!isValidFilename(name)) {
- updateStatus("Invalid project name.");
+ /* Retrieving the resource path of the processors.xml file. */
+ String fpath;
+ try {
+ Bundle bundle = Platform.getBundle(Activator.PLUGIN_ID);
+ IPath path = new Path("resources/gencfg/processors/processors.xml");
+ fpath = FileLocator.toFileURL(FileLocator.find(bundle, path, null)).getFile();
+ } catch (IOException e) {
+ e.printStackTrace();
return;
}
- IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(name);
- if (project.exists()) {
- updateStatus("Project exists.");
+ /* DOM tree creation. */
+ SAXBuilder builder = new SAXBuilder();
+ Document document;
+ try {
+ document = builder.build(fpath);
+ } catch (JDOMException e) {
+ e.printStackTrace();
+ return;
+ } catch (IOException e) {
+ e.printStackTrace();
return;
}
- updateStatus(null);
+
+ /* Parsing the content of the processors.xml file in order to populate the
+ panel objects.*/
+ Element root = document.getRootElement();
+ for (Element processor : root.getChildren("processor")) {
+ String class_attr = processor.getAttributeValue("class", "");
+ if (class_attr.compareToIgnoreCase("build") == 0) {
+ String name = processor.getAttributeValue("target", "internal error");
+ platformCombo.add(name);
+ }
+ }
+ platformCombo.select(0);
+
+ /* Update checks on the fields.*/
+ projectPageUpdated();
}
- private void projectPathUpdated() {
- File path = new File(projectParentPathText.getText());
+ private void projectPageUpdated() {
updateFinalProjectPathText();
+ /* Checks the project location.*/
+ File path = new File(projectParentPathText.getText());
if (!path.exists()) {
updateStatus("Project path is not valid.");
return;
@@ -172,6 +217,21 @@ public class NewApplicationProjectWizardPage extends WizardPage { updateStatus("Project path is a directory.");
return;
}
+
+ /* Checks the project name.*/
+ String name = projectNameText.getText();
+ if (!isValidFilename(name)) {
+ updateStatus("Invalid project name.");
+ return;
+ }
+
+ /* Checks if the project already exists in the workspace.*/
+ IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(name);
+ if (project.exists()) {
+ updateStatus("Project exists.");
+ return;
+ }
+
updateStatus(null);
}
|