diff options
author | gdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4> | 2012-08-04 15:54:07 +0000 |
---|---|---|
committer | gdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4> | 2012-08-04 15:54:07 +0000 |
commit | fda34884b648bcc1eacc81c7e61904c308545ceb (patch) | |
tree | 4ecba85b331bee33fd8cb90b15a1246e2eb924a5 | |
parent | b43e91d43be2e7ccb3d8ea41dc6ce783580d9cdb (diff) | |
download | ChibiOS-fda34884b648bcc1eacc81c7e61904c308545ceb.tar.gz ChibiOS-fda34884b648bcc1eacc81c7e61904c308545ceb.tar.bz2 ChibiOS-fda34884b648bcc1eacc81c7e61904c308545ceb.zip |
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@4506 35acf78f-673a-0410-8e92-d51de3d6d3f4
51 files changed, 3326 insertions, 0 deletions
diff --git a/tools/eclipse/config_wizard/.classpath b/tools/eclipse/config_wizard/.classpath new file mode 100644 index 000000000..232d040e3 --- /dev/null +++ b/tools/eclipse/config_wizard/.classpath @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="lib" path="lib/bsh.jar"/>
+ <classpathentry kind="lib" path="lib/fmpp.jar"/>
+ <classpathentry kind="lib" path="lib/freemarker.jar"/>
+ <classpathentry kind="lib" path="lib/oro.jar"/>
+ <classpathentry kind="lib" path="lib/resolver.jar"/>
+ <classpathentry kind="lib" path="lib/jdom-2.0.2.jar"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/tools/eclipse/config_wizard/.project b/tools/eclipse/config_wizard/.project new file mode 100644 index 000000000..7df6fc0f9 --- /dev/null +++ b/tools/eclipse/config_wizard/.project @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>config_wizard</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/tools/eclipse/config_wizard/.settings/org.eclipse.jdt.core.prefs b/tools/eclipse/config_wizard/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 000000000..da0e3846d --- /dev/null +++ b/tools/eclipse/config_wizard/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,8 @@ +#Mon Jul 30 11:37:30 CEST 2012
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/tools/eclipse/config_wizard/META-INF/MANIFEST.MF b/tools/eclipse/config_wizard/META-INF/MANIFEST.MF new file mode 100644 index 000000000..1eb0a3bef --- /dev/null +++ b/tools/eclipse/config_wizard/META-INF/MANIFEST.MF @@ -0,0 +1,21 @@ +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.0.0 +Bundle-Activator: config_wizard.Activator +Require-Bundle: org.eclipse.core.resources, + org.eclipse.core.runtime, + org.eclipse.ui, + org.eclipse.ui.console;bundle-version="3.5.100", + org.eclipse.ui.ide +Bundle-ActivationPolicy: lazy +Bundle-RequiredExecutionEnvironment: JavaSE-1.6 +Bundle-Vendor: CHIBIOS +Bundle-ClassPath: ., + lib/jdom-2.0.2.jar, + lib/freemarker.jar, + lib/fmpp.jar, + lib/bsh.jar, + lib/oro.jar, + lib/resolver.jar diff --git a/tools/eclipse/config_wizard/bin/config_wizard/Activator.class b/tools/eclipse/config_wizard/bin/config_wizard/Activator.class Binary files differnew file mode 100644 index 000000000..4acd9e4d3 --- /dev/null +++ b/tools/eclipse/config_wizard/bin/config_wizard/Activator.class diff --git a/tools/eclipse/config_wizard/bin/org/chibios/tools/eclipse/config/handlers/CheckDescription.class b/tools/eclipse/config_wizard/bin/org/chibios/tools/eclipse/config/handlers/CheckDescription.class Binary files differnew file mode 100644 index 000000000..649096ab1 --- /dev/null +++ b/tools/eclipse/config_wizard/bin/org/chibios/tools/eclipse/config/handlers/CheckDescription.class diff --git a/tools/eclipse/config_wizard/bin/org/chibios/tools/eclipse/config/handlers/GenerateFiles.class b/tools/eclipse/config_wizard/bin/org/chibios/tools/eclipse/config/handlers/GenerateFiles.class Binary files differnew file mode 100644 index 000000000..dc686d354 --- /dev/null +++ b/tools/eclipse/config_wizard/bin/org/chibios/tools/eclipse/config/handlers/GenerateFiles.class diff --git a/tools/eclipse/config_wizard/bin/org/chibios/tools/eclipse/config/utils/TemplateEngine$1.class b/tools/eclipse/config_wizard/bin/org/chibios/tools/eclipse/config/utils/TemplateEngine$1.class Binary files differnew file mode 100644 index 000000000..fdd9954c2 --- /dev/null +++ b/tools/eclipse/config_wizard/bin/org/chibios/tools/eclipse/config/utils/TemplateEngine$1.class diff --git a/tools/eclipse/config_wizard/bin/org/chibios/tools/eclipse/config/utils/TemplateEngine.class b/tools/eclipse/config_wizard/bin/org/chibios/tools/eclipse/config/utils/TemplateEngine.class Binary files differnew file mode 100644 index 000000000..c50929ac5 --- /dev/null +++ b/tools/eclipse/config_wizard/bin/org/chibios/tools/eclipse/config/utils/TemplateEngine.class diff --git a/tools/eclipse/config_wizard/bin/org/chibios/tools/eclipse/config/utils/TemplateException.class b/tools/eclipse/config_wizard/bin/org/chibios/tools/eclipse/config/utils/TemplateException.class Binary files differnew file mode 100644 index 000000000..f374c70da --- /dev/null +++ b/tools/eclipse/config_wizard/bin/org/chibios/tools/eclipse/config/utils/TemplateException.class diff --git a/tools/eclipse/config_wizard/bin/org/chibios/tools/eclipse/config/wizards/ConfigurationNewWizard$1.class b/tools/eclipse/config_wizard/bin/org/chibios/tools/eclipse/config/wizards/ConfigurationNewWizard$1.class Binary files differnew file mode 100644 index 000000000..52ee47c3a --- /dev/null +++ b/tools/eclipse/config_wizard/bin/org/chibios/tools/eclipse/config/wizards/ConfigurationNewWizard$1.class diff --git a/tools/eclipse/config_wizard/bin/org/chibios/tools/eclipse/config/wizards/ConfigurationNewWizard$2.class b/tools/eclipse/config_wizard/bin/org/chibios/tools/eclipse/config/wizards/ConfigurationNewWizard$2.class Binary files differnew file mode 100644 index 000000000..0f52f0daf --- /dev/null +++ b/tools/eclipse/config_wizard/bin/org/chibios/tools/eclipse/config/wizards/ConfigurationNewWizard$2.class diff --git a/tools/eclipse/config_wizard/bin/org/chibios/tools/eclipse/config/wizards/ConfigurationNewWizard.class b/tools/eclipse/config_wizard/bin/org/chibios/tools/eclipse/config/wizards/ConfigurationNewWizard.class Binary files differnew file mode 100644 index 000000000..723ab1ed0 --- /dev/null +++ b/tools/eclipse/config_wizard/bin/org/chibios/tools/eclipse/config/wizards/ConfigurationNewWizard.class diff --git a/tools/eclipse/config_wizard/bin/org/chibios/tools/eclipse/config/wizards/ConfigurationNewWizardPage$1.class b/tools/eclipse/config_wizard/bin/org/chibios/tools/eclipse/config/wizards/ConfigurationNewWizardPage$1.class Binary files differnew file mode 100644 index 000000000..58d9625eb --- /dev/null +++ b/tools/eclipse/config_wizard/bin/org/chibios/tools/eclipse/config/wizards/ConfigurationNewWizardPage$1.class diff --git a/tools/eclipse/config_wizard/bin/org/chibios/tools/eclipse/config/wizards/ConfigurationNewWizardPage$2.class b/tools/eclipse/config_wizard/bin/org/chibios/tools/eclipse/config/wizards/ConfigurationNewWizardPage$2.class Binary files differnew file mode 100644 index 000000000..e35befef7 --- /dev/null +++ b/tools/eclipse/config_wizard/bin/org/chibios/tools/eclipse/config/wizards/ConfigurationNewWizardPage$2.class diff --git a/tools/eclipse/config_wizard/bin/org/chibios/tools/eclipse/config/wizards/ConfigurationNewWizardPage$3.class b/tools/eclipse/config_wizard/bin/org/chibios/tools/eclipse/config/wizards/ConfigurationNewWizardPage$3.class Binary files differnew file mode 100644 index 000000000..50fab6cee --- /dev/null +++ b/tools/eclipse/config_wizard/bin/org/chibios/tools/eclipse/config/wizards/ConfigurationNewWizardPage$3.class diff --git a/tools/eclipse/config_wizard/bin/org/chibios/tools/eclipse/config/wizards/ConfigurationNewWizardPage$4.class b/tools/eclipse/config_wizard/bin/org/chibios/tools/eclipse/config/wizards/ConfigurationNewWizardPage$4.class Binary files differnew file mode 100644 index 000000000..8bac428cc --- /dev/null +++ b/tools/eclipse/config_wizard/bin/org/chibios/tools/eclipse/config/wizards/ConfigurationNewWizardPage$4.class diff --git a/tools/eclipse/config_wizard/bin/org/chibios/tools/eclipse/config/wizards/ConfigurationNewWizardPage.class b/tools/eclipse/config_wizard/bin/org/chibios/tools/eclipse/config/wizards/ConfigurationNewWizardPage.class Binary files differnew file mode 100644 index 000000000..09a6fa2c0 --- /dev/null +++ b/tools/eclipse/config_wizard/bin/org/chibios/tools/eclipse/config/wizards/ConfigurationNewWizardPage.class diff --git a/tools/eclipse/config_wizard/build.properties b/tools/eclipse/config_wizard/build.properties new file mode 100644 index 000000000..cc671117e --- /dev/null +++ b/tools/eclipse/config_wizard/build.properties @@ -0,0 +1,39 @@ +source.. = src/
+output.. = bin/
+bin.includes = plugin.xml,\
+ META-INF/,\
+ .,\
+ resources/,\
+ lib/bsh.jar,\
+ lib/fmpp.jar,\
+ lib/freemarker.jar,\
+ lib/oro.jar,\
+ lib/resolver.jar,\
+ lib/jdom-2.0.2.jar
+bin.excludes = resources/.svn/,\
+ resources/gencfg/.svn/,\
+ resources/gencfg/.project,\
+ resources/gencfg/.externalToolBuilders/,\
+ resources/gencfg/config.fmpp,\
+ resources/gencfg/fmpp.sh,\
+ resources/gencfg/run.bat,\
+ resources/gencfg/readme.txt,\
+ resources/gencfg/schema/.svn/,\
+ resources/gencfg/schema/boards/.svn/,\
+ resources/gencfg/schema/common/.svn/,\
+ resources/gencfg/schema/hal/.svn/,\
+ resources/gencfg/schema/hal/stm32f4xx/.svn/,\
+ resources/gencfg/schema/common/stm32/.svn/,\
+ resources/gencfg/processors/.svn/,\
+ resources/gencfg/processors/boards/.svn/,\
+ resources/gencfg/processors/hal/.svn/,\
+ resources/gencfg/processors/boards/stm32f4xx/.svn/,\
+ resources/gencfg/processors/boards/stm32f4xx/input/,\
+ resources/gencfg/processors/boards/stm32f4xx/output/,\
+ resources/gencfg/processors/boards/stm32f4xx/templates/.svn/,\
+ resources/gencfg/processors/boards/stm32f4xx/config.fmpp,\
+ resources/gencfg/processors/hal/stm32f4xx/.svn/,\
+ resources/gencfg/processors/hal/stm32f4xx/config.fmpp,\
+ resources/gencfg/processors/hal/stm32f4xx/input/,\
+ resources/gencfg/processors/hal/stm32f4xx/output/,\
+ resources/gencfg/processors/hal/stm32f4xx/templates/.svn/
diff --git a/tools/eclipse/config_wizard/icons/check.gif b/tools/eclipse/config_wizard/icons/check.gif Binary files differnew file mode 100644 index 000000000..18ffabe77 --- /dev/null +++ b/tools/eclipse/config_wizard/icons/check.gif diff --git a/tools/eclipse/config_wizard/icons/chibios.gif b/tools/eclipse/config_wizard/icons/chibios.gif Binary files differnew file mode 100644 index 000000000..ddbf1e1d1 --- /dev/null +++ b/tools/eclipse/config_wizard/icons/chibios.gif diff --git a/tools/eclipse/config_wizard/icons/generate.gif b/tools/eclipse/config_wizard/icons/generate.gif Binary files differnew file mode 100644 index 000000000..55e2d04ad --- /dev/null +++ b/tools/eclipse/config_wizard/icons/generate.gif diff --git a/tools/eclipse/config_wizard/icons/sample.gif b/tools/eclipse/config_wizard/icons/sample.gif Binary files differnew file mode 100644 index 000000000..34fb3c9d8 --- /dev/null +++ b/tools/eclipse/config_wizard/icons/sample.gif diff --git a/tools/eclipse/config_wizard/lib/bsh.jar b/tools/eclipse/config_wizard/lib/bsh.jar Binary files differnew file mode 100644 index 000000000..36fe03d71 --- /dev/null +++ b/tools/eclipse/config_wizard/lib/bsh.jar diff --git a/tools/eclipse/config_wizard/lib/fmpp.jar b/tools/eclipse/config_wizard/lib/fmpp.jar Binary files differnew file mode 100644 index 000000000..8cb8e6262 --- /dev/null +++ b/tools/eclipse/config_wizard/lib/fmpp.jar diff --git a/tools/eclipse/config_wizard/lib/freemarker.jar b/tools/eclipse/config_wizard/lib/freemarker.jar Binary files differnew file mode 100644 index 000000000..b13671dac --- /dev/null +++ b/tools/eclipse/config_wizard/lib/freemarker.jar diff --git a/tools/eclipse/config_wizard/lib/jdom-2.0.2.jar b/tools/eclipse/config_wizard/lib/jdom-2.0.2.jar Binary files differnew file mode 100644 index 000000000..d540bad66 --- /dev/null +++ b/tools/eclipse/config_wizard/lib/jdom-2.0.2.jar diff --git a/tools/eclipse/config_wizard/lib/oro.jar b/tools/eclipse/config_wizard/lib/oro.jar Binary files differnew file mode 100644 index 000000000..23488d260 --- /dev/null +++ b/tools/eclipse/config_wizard/lib/oro.jar diff --git a/tools/eclipse/config_wizard/lib/resolver.jar b/tools/eclipse/config_wizard/lib/resolver.jar Binary files differnew file mode 100644 index 000000000..073d78967 --- /dev/null +++ b/tools/eclipse/config_wizard/lib/resolver.jar diff --git a/tools/eclipse/config_wizard/plugin.xml b/tools/eclipse/config_wizard/plugin.xml new file mode 100644 index 000000000..e2163c8fb --- /dev/null +++ b/tools/eclipse/config_wizard/plugin.xml @@ -0,0 +1,165 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+ <!-- Configuration Wizard. -->
+ <extension
+ point="org.eclipse.ui.newWizards">
+ <category
+ id="org.chibios.tools.eclipse.config"
+ name="ChibiOS/RT">
+ </category>
+ <wizard
+ category="org.chibios.tools.eclipse.config"
+ class="org.chibios.tools.eclipse.config.wizards.ConfigurationNewWizard"
+ icon="icons/chibios.gif"
+ id="org.chibios.tools.eclipse.config.wizards.ConfigurationNewWizard"
+ name="ChibiOS/RT Configuration Wizard">
+ </wizard>
+ </extension>
+
+ <!-- Registers the file extension .chxml as an XML type. -->
+ <extension point="org.eclipse.core.contenttype.contentTypes">
+ <file-association
+ content-type="org.eclipse.core.runtime.xml"
+ file-extensions="chxml">
+ </file-association>
+ </extension>
+
+ <!-- Commands. -->
+ <extension
+ point="org.eclipse.ui.commands">
+ <category
+ id="org.chibios.tools.eclipse.config.commands.category"
+ name="ChibiOS/RT Configuration Category">
+ </category>
+ <!-- Generate Files command. -->
+ <command
+ categoryId="org.chibios.tools.eclipse.config.commands.category"
+ id="org.chibios.tools.eclipse.config.commands.generateFiles"
+ name="Generate Files from Configuration Data">
+ </command>
+ <!-- Check Configuration Data command. -->
+ <command
+ categoryId="org.chibios.tools.eclipse.config.commands.category"
+ id="org.chibios.tools.eclipse.config.commands.checkDescription"
+ name="Check Configuration Data">
+ </command>
+ </extension>
+
+ <!-- Handlers. -->
+ <extension
+ point="org.eclipse.ui.handlers">
+ <!-- Generate Files handler. -->
+ <handler
+ class="org.chibios.tools.eclipse.config.handlers.GenerateFiles"
+ commandId="org.chibios.tools.eclipse.config.commands.generateFiles">
+ </handler>
+ <!-- Check Configuration Data handler. -->
+ <handler
+ class="org.chibios.tools.eclipse.config.handlers.CheckDescription"
+ commandId="org.chibios.tools.eclipse.config.commands.checkDescription">
+ </handler>
+ </extension>
+
+ <!-- Configuration menu and toolbar. -->
+ <extension
+ point="org.eclipse.ui.menus">
+ <menuContribution
+ locationURI="menu:org.eclipse.ui.main.menu?after=additions">
+ <menu
+ id="org.chibios.tools.eclipse.config.menus.configurationMenu"
+ label="Configuration"
+ mnemonic="M">
+ <visibleWhen
+ checkEnabled="false">
+ <with
+ variable="selection">
+ <count
+ value="1">
+ </count>
+ <iterate
+ ifEmpty="false"
+ operator="and">
+ <adapt
+ type="org.eclipse.core.resources.IResource">
+ <test
+ property="org.eclipse.core.resources.extension"
+ value="chcfg">
+ </test>
+ </adapt>
+ </iterate>
+ </with>
+ </visibleWhen>
+ <command
+ commandId="org.chibios.tools.eclipse.config.commands.generateFiles"
+ id="org.chibios.tools.eclipse.config.menus.generateFiles"
+ mnemonic="S">
+ </command>
+ <command
+ commandId="org.chibios.tools.eclipse.config.commands.checkDescription"
+ id="org.chibios.tools.eclipse.config.menus.checkDescription"
+ mnemonic="S">
+ </command>
+ </menu>
+ </menuContribution>
+ <menuContribution
+ locationURI="toolbar:org.eclipse.ui.main.toolbar?after=additions">
+ <toolbar
+ id="org.chibios.tools.eclipse.config.toolbars.sampleToolbar">
+ <command
+ commandId="org.chibios.tools.eclipse.config.commands.generateFiles"
+ icon="icons/generate.gif"
+ id="org.chibios.tools.eclipse.config.toolbars.generateFiles"
+ tooltip="Generate Files from Configuration Data">
+ <visibleWhen
+ checkEnabled="false">
+ <with
+ variable="selection">
+ <count
+ value="1">
+ </count>
+ <iterate
+ ifEmpty="false"
+ operator="and">
+ <adapt
+ type="org.eclipse.core.resources.IResource">
+ <test
+ property="org.eclipse.core.resources.extension"
+ value="chcfg">
+ </test>
+ </adapt>
+ </iterate>
+ </with>
+ </visibleWhen>
+ </command>
+ <command
+ commandId="org.chibios.tools.eclipse.config.commands.checkDescription"
+ icon="icons/check.gif"
+ id="org.chibios.tools.eclipse.config.toolbars.checkDescription"
+ tooltip="Check Configuration Data without generating Files">
+ <visibleWhen
+ checkEnabled="false">
+ <with
+ variable="selection">
+ <count
+ value="1">
+ </count>
+ <iterate
+ ifEmpty="false"
+ operator="and">
+ <adapt
+ type="org.eclipse.core.resources.IResource">
+ <test
+ property="org.eclipse.core.resources.extension"
+ value="chcfg">
+ </test>
+ </adapt>
+ </iterate>
+ </with>
+ </visibleWhen>
+ </command>
+ </toolbar>
+ </menuContribution>
+ </extension>
+
+</plugin>
diff --git a/tools/eclipse/config_wizard/resources/gencfg/lib/libcode.ftl b/tools/eclipse/config_wizard/resources/gencfg/lib/libcode.ftl new file mode 100644 index 000000000..45b94a320 --- /dev/null +++ b/tools/eclipse/config_wizard/resources/gencfg/lib/libcode.ftl @@ -0,0 +1,316 @@ +[#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/>.
+ --]
+
+<#--
+ -- Coding style global settings.
+ -->
+[#assign indentation = " " /]
+[#assign fields_align = 24 /]
+[#assign define_value_align = 36 /]
+[#assign comments_align = 48 /]
+[#assign boundary = 80 /]
+
+[#--
+ -- This macro generates a brief description in DoxyGen format.
+ --]
+[#macro EmitDoxygenBrief object=[]]
+ [#if object.brief[0]??]
+[@utils.FormatStringAsText " * @brief "
+ " * "
+ utils.WithDot(object.brief[0]?cap_first)
+ boundary /]
+ [/#if]
+[/#macro]
+
+[#--
+ -- This macro generates a detailed description in DoxyGen format.
+ --]
+[#macro EmitDoxygenDetails object=[]]
+ [#if object.details[0]??]
+[@utils.FormatStringAsText " * @details "
+ " * "
+ utils.WithDot(object.details[0]?cap_first)
+ boundary /]
+ [/#if]
+[/#macro]
+
+[#--
+ -- This macro generates a notes list in DoxyGen format.
+ --]
+[#macro EmitDoxygenNotes object=[]]
+ [#list object.* as note]
+ [#if note?node_name == "note"]
+ [@utils.FormatStringAsText " * @note "
+ " * "
+ utils.WithDot(note[0]?cap_first)
+ boundary /]
+ [/#if]
+ [/#list]
+[/#macro]
+
+[#--
+ -- This macro generates a pre-requisites list in DoxyGen format.
+ --]
+[#macro EmitDoxygenPrerequisites object=[]]
+ [#list object.* as pre]
+ [#if pre?node_name == "pre"]
+ [@utils.FormatStringAsText " * @pre "
+ " * "
+ utils.WithDot(pre[0]?cap_first)
+ boundary /]
+ [/#if]
+ [/#list]
+[/#macro]
+
+[#--
+ -- This macro generates a post-requisites list in DoxyGen format.
+ --]
+[#macro EmitDoxygenPostrequisites object=[]]
+ [#list object.* as post]
+ [#if post?node_name == "post"]
+ [@utils.FormatStringAsText " * @post "
+ " * "
+ utils.WithDot(post[0]?cap_first)
+ boundary /]
+ [/#if]
+ [/#list]
+[/#macro]
+
+[#--
+ -- This macro generates a complete Doxygen documentation comment.
+ --]
+[#macro EmitDoxygenDocumentationComment object=[]]
+/**
+ [@code.EmitDoxygenBrief object /]
+ [@code.EmitDoxygenDetails object /]
+ [@code.EmitDoxygenPrerequisites object /]
+ [@code.EmitDoxygenPostrequisites object /]
+ [@code.EmitDoxygenNotes object /]
+ */
+[/#macro]
+
+[#--
+ -- This macro generates the parameters description in DoxyGen format.
+ --]
+[#macro EmitDoxygenParams params=[]]
+ [#list params as param]
+ [#local name = (param.@name[0]!"no-name")?trim /]
+ [#local brief = (param.@brief[0]!"")?trim /]
+ [#local dir = (param.@dir[0]!"boh")?trim?lower_case /]
+ [#if dir == "in"]
+[@utils.FormatStringAsText " * @param[in] "
+ " * "
+ utils.IntelligentDot(name + " " + brief?uncap_first)
+ boundary /]
+ [#elseif dir == "out"]
+[@utils.FormatStringAsText " * @param[out] "
+ " * "
+ utils.IntelligentDot(name + " " + brief?uncap_first)
+ boundary /]
+ [#elseif dir == "both"]
+[@utils.FormatStringAsText " * @param[in,out] "
+ " * "
+ utils.IntelligentDot(name + " " + brief?uncap_first)
+ boundary /]
+ [#elseif dir == "boh"]
+[@utils.FormatStringAsText " * @param "
+ " * "
+ utils.IntelligentDot(name + " " + brief?uncap_first)
+ boundary /]
+ [/#if]
+ [/#list]
+[/#macro]
+
+[#--
+ -- This macro generates a return description followed by a retval list
+ -- in DoxyGen format.
+ --]
+[#macro EmitDoxygenReturn return=[]]
+ [#if return[0]?? && ((return[0].@type[0]!"void")?trim != "void")]
+ [#local brief = (return[0].@brief[0]!"")?trim /]
+ [#if brief != ""]
+[@utils.FormatStringAsText " * @return "
+ " * "
+ utils.WithDot(brief?cap_first)
+ boundary /]
+ [/#if]
+ [#list return[0].value as value]
+ [#local label = (value.@name[0]!"no-val")?trim /]
+ [#local brief = (value.@brief[0]!"")?trim /]
+[@utils.FormatStringAsText " * @retval "
+ " * "
+ utils.WithDot(label + " " + brief?uncap_first)
+ boundary /]
+ [/#list]
+ [/#if]
+[/#macro]
+
+[#--
+ -- This macro generates the inner function code (if present).
+ --]
+[#macro EmitCode code=[]]
+ [#if function.code[0]?? && (function.code[0]?trim != "")]
+${indentation}${function.code[0]?trim}
+ [/#if]
+[/#macro]
+
+[#--
+ -- Returns true if the module exports some functions.
+ --]
+[#function HasPublicFunctions module=[]]
+ [#local flag = false /]
+ [#list module.function as function]
+ [#if (function.@visibility[0]!"private") == "public"]
+ [#local flag = true /]
+ [/#if]
+ [/#list]
+ [#return flag /]
+[/#function]
+
+[#--
+ -- Returns true if the module has static functions.
+ --]
+[#function HasPrivateFunctions module=[]]
+ [#local flag = false /]
+ [#list module.function as function]
+ [#if (function.@visibility[0]!"private") == "private"]
+ [#local flag = true /]
+ [/#if]
+ [/#list]
+ [#return flag /]
+[/#function]
+
+[#--
+ -- This macro generates a function prototype from an XML "function"
+ -- node passed as parameter.
+ -- @note Does not generate the final EOL.
+ --]
+[#macro GeneratePrototype function={}]
+ [#if function.return?? && function.return[0]??]
+ [#local rettype = (function.return[0].@type[0]!"void")?trim /]
+ [#else]
+ [#local rettype = "void" /]
+ [/#if]
+ [#local name = (function.@name[0]!"no-name")?trim /]
+ [#local visibility = (function.@visibility[0]!"private")?trim /]
+ [#if function.param?? && function.param[0]??]
+ [#-- If the function has parameters then generates the parameters list --]
+ [#local l1 = rettype + " " + name + "(" /]
+ [#if visibility == "private"]
+ [#local l1 = "static " + l1 /]
+ [/#if]
+ [#local ln = ""?right_pad(l1?length) /]
+ [#list function.param as param]
+ [#local type = (param.@type[0]!"no-type")?trim /]
+ [#if type?contains("$")]
+ [#local pstring = type?replace("$", (param.@name[0]!"no-name")?trim) /]
+ [#else]
+ [#local pstring = type + " " + (param.@name[0]!"no-name")?trim /]
+ [/#if]
+ [#local dir = (param.@dir[0]!"boh")?trim?lower_case /]
+ [#if dir == "in"]
+ [#local pstring = "const " + pstring /]
+ [/#if]
+ [#if param_index == 0]
+ [#local line = l1 + pstring /]
+ [#else]
+ [#if (line + ", " + pstring + " ")?length > boundary]
+${line + ","}
+ [#local line = ln + pstring /]
+ [#else]
+ [#local line = line + ", " + pstring /]
+ [/#if]
+ [/#if]
+ [/#list]
+${line + ")"}[#rt]
+ [#else]
+${rettype + " " + name}(void)[#rt]
+ [/#if]
+[/#macro]
+
+[#--
+ -- This macro generates a function (and its Doxygen documentation)
+ -- from an XML "function" node passed as parameter.
+ --]
+[#macro GenerateFunction function={}]
+/**
+[@EmitDoxygenBrief function.@brief /]
+[@EmitDoxygenDetails function.details /]
+[@EmitDoxygenParams function.param /]
+[@EmitDoxygenReturn function.return /]
+ *
+ * @note --Implementer notes here (or remove the tag)--
+ * @bug --Known problems please here (or remove the tag)--
+ * @todo --Implement this function (then remove the tag)--
+ */
+[@GeneratePrototype function /] {
+ [#if function.code[0]??]
+ [#-- Makes sure to undef the do_code macro --]
+ [#assign inline = "[#ftl][#macro do_code function][/#macro]"?interpret /]
+[@inline /]
+ [#-- Interprets the code within the code element --]
+ [#assign inline = function.code[0]?interpret /]
+[@inline /]
+[@do_code function /]
+ [#else]
+
+${indentation}/* ${function.@name[0]!"no-name"}() Implementation here! */
+ [/#if]
+}
+[/#macro]
+
+[#--
+ -- Generates the implementations for the private functions in the specified
+ -- module.
+ --]
+[#macro GeneratePrivateFunctionsImplementations module]
+ [#list module.function as function]
+ [#if (function.@visibility[0]!"private") == "private"]
+[@code.GenerateFunction function /]
+
+ [/#if]
+ [/#list]
+[/#macro]
+
+[#--
+ -- Generates the prototypes of the public functions in the specified
+ -- module.
+ --]
+[#macro GeneratePublicFunctionsPrototypes indentation module]
+ [#list module.function as function]
+ [#if (function.@visibility[0]!"private")?trim == "public"]
+${indentation}[@code.GeneratePrototype function /];
+ [/#if]
+ [/#list]
+[/#macro]
+
+[#--
+ -- Generates the implementations for the public functions in the specified
+ -- module.
+ --]
+[#macro GeneratePublicFunctionsImplementations module]
+ [#list module.function as function]
+ [#if (function.@visibility[0]!"private") == "public"]
+[@code.GenerateFunction function /]
+
+ [/#if]
+ [/#list]
+[/#macro]
diff --git a/tools/eclipse/config_wizard/resources/gencfg/lib/liblicense.ftl b/tools/eclipse/config_wizard/resources/gencfg/lib/liblicense.ftl new file mode 100644 index 000000000..18581ee29 --- /dev/null +++ b/tools/eclipse/config_wizard/resources/gencfg/lib/liblicense.ftl @@ -0,0 +1,58 @@ +[#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/>.
+ --]
+
+[#--
+ -- Emits the ChibiOS/RT standard license exception text.
+ -- The license exception text is indented by 4 spaces.
+ --]
+[#macro EmitLicenseExceptionAsText]
+
+ ---
+
+ A special exception to the GPL can be applied should you wish to distribute
+ a combined work that includes ChibiOS/RT, without being obliged to provide
+ the source code for any proprietary components. See the file exception.txt
+ for full details of how and when the exception can be applied.
+[/#macro]
+
+[#--
+ -- Emits the ChibiOS/RT standard license text.
+ -- The license text is indented by 4 spaces.
+ --]
+[#macro EmitLicenseAsText]
+ 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/>.
+[/#macro]
diff --git a/tools/eclipse/config_wizard/resources/gencfg/lib/libstm32f4xx.ftl b/tools/eclipse/config_wizard/resources/gencfg/lib/libstm32f4xx.ftl new file mode 100644 index 000000000..81b8f987c --- /dev/null +++ b/tools/eclipse/config_wizard/resources/gencfg/lib/libstm32f4xx.ftl @@ -0,0 +1,144 @@ +[#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/>.
+ --]
+
+[#--
+ -- Emits the STM32F4xx ADC driver constant configuration structures.
+ --]
+[#macro EmitADCConfig config]
+ [#local cfg_name = config.name[0]?string /]
+ [@code.EmitDoxygenDocumentationComment config /]
+const ADCConfig ${cfg_name} = {0};
+
+ [#list config.groups.group as group]
+ [#local grpcfg_name = group.name[0]?string /]
+ [@code.EmitDoxygenDocumentationComment group /]
+const ADCGroupConfig ${grpcfg_name} = {
+ /* Circular conversion flag.*/
+ ${group.circular[0]?string?upper_case},
+ /* Number of channels sampled in the conversion group.*/
+ ${group.channels_sequence.channel?size},
+ /* End of conversion callback or NULL.*/
+ [#if group.conv_callback[0]?string?trim == ""]
+ NULL,
+ [#else]
+ ${group.conv_callback[0]?string?trim},
+ [/#if]
+ /* Error callback or NULL.*/
+ [#if group.error_callback[0]?string?trim == ""]
+ NULL,
+ [#else]
+ ${group.error_callback[0]?string?trim},
+ [/#if]
+ /* CR1 register initialization value.*/
+ [#local resolution = group.resolution[0]?word_list[0]?number /]
+ [#local cr1 = "ADC_CR1_RESOLUTION_N(" + resolution?string + ")" /]
+ [#local disc = group.discontinuous[0]?word_list[0]?number /]
+ [#if disc > 0]
+ [#local cr1 = cr1 + " | ADC_CR1_DISCEN" /]
+ [#local cr1 = cr1 + " | ADC_CR1_DISCNUM_N(" + (disc - 1)?string + ")" /]
+ [/#if]
+ ${cr1},
+ /* CR2 register initialization value.*/
+ [#local exten = group.trigger_mode[0]?word_list[0]?number /]
+ [#local cr2 = "ADC_CR1_EXTEN_N(" + exten?string + ")" /]
+ [#local extsel = group.trigger_source[0]?word_list[0]?number /]
+ [#local cr2 = cr2 + " | ADC_CR1_EXSEL_N(" + extsel?string + ")" /]
+ [#if group.alignment[0]?word_list[0]?number != 0]
+ [#local cr2 = cr2 + " | ADC_CR2_ALIGN" /]
+ [/#if]
+ ${cr2},
+ /* Channels sample time settings.*/
+ [#local smpr1 = "" /]
+ [#local smpr2 = "" /]
+ [#list group.sample_time.* as input]
+ [#local sinput = input?node_name]
+ [#if input_index < 9]
+ [#local smpr2 = smpr2 + "ADC_SMPR2_SMP_" + input?node_name +
+ "(" + input?string + ") | " /]
+ [#elseif input_index == 9]
+ [#local smpr2 = smpr2 + "ADC_SMPR2_SMP_" + input?node_name +
+ "(" + input?string + ")," /]
+ [#elseif input_index < 18]
+ [#local smpr1 = smpr1 + "ADC_SMPR1_SMP_" + input?node_name +
+ "(" + input?string + ") | " /]
+ [#else]
+ [#local smpr1 = smpr1 + "ADC_SMPR1_SMP_" + input?node_name +
+ "(" + input?string + ")," /]
+ [/#if]
+ [/#list]
+ [@utils.FormatStringAsText " " " " smpr1 80 /]
+ [@utils.FormatStringAsText " " " " smpr2 80 /]
+ /* Channels sequence.*/
+ [#local sqr1 = "ADC_SQR1_NUM_CH(" + group.channels_sequence?size + ")" /]
+ [#local sqr2 = "" /]
+ [#local sqr3 = "" /]
+ [#list group.channels_sequence.channel as channel]
+ [#if channel_index <= 5]
+ [#local sqr3 = sqr3 + "ADC_SQR3_SQ" + (channel_index + 1) +
+ "_N(" + channel + ")" /]
+ [#if channel_has_next && channel_index < 5]
+ [#local sqr3 = sqr3 + " | " /]
+ [/#if]
+ [#elseif channel_index <= 11]
+ [#local sqr2 = sqr2 + "ADC_SQR2_SQ" + (channel_index + 1) +
+ "_N(" + channel + ")" /]
+ [#if channel_has_next && channel_index < 11]
+ [#local sqr2 = sqr2 + " | " /]
+ [/#if]
+ [#else]
+ [#local sqr1 = sqr1 + " | ADC_SQR2_SQ" + (channel_index + 1) +
+ "_N(" + channel + ")" /]
+ [/#if]
+ [/#list]
+ [#-- SQR2 could be empty.--]
+ [#if sqr2 == ""]
+ [#local sqr2 = "0" /]
+ [/#if]
+ [#local sqr1 = sqr1 + "," /]
+ [#local sqr2 = sqr2 + "," /]
+ [@utils.FormatStringAsText " " " " sqr1 80 /]
+ [@utils.FormatStringAsText " " " " sqr2 80 /]
+ [@utils.FormatStringAsText " " " " sqr3 80 /]
+};
+ [/#list]
+[/#macro]
+
+[#--
+ -- Emits the STM32F4xx ADC driver configuration external declarations.
+ --]
+[#macro EmitADCConfigExtern config]
+ [#local cfg_name = config.name[0]?string /]
+ [#list config.groups.group as group]
+ [#local grpcfg_name = group.name[0]?string /]
+ [#-- Only emits the comment if there is at least a callback defined.--]
+ /* ADC configuration "${cfg_name}".*/
+ extern const ADCConfig ${cfg_name};
+ /* ADC conversion group "${grpcfg_name}".*/
+ extern const ADCGroupConfig ${grpcfg_name};
+ [#if group.conv_callback[0]?string?trim != ""]
+ void ${group.conv_callback[0]?string?trim}(ADCDriver *, adcsample_t *, size_t);
+ [/#if]
+ [#if group.error_callback[0]?string?trim != ""]
+ void ${group.error_callback[0]?string?trim}(ADCDriver *, adcerror_t);
+ [/#if]
+
+ [/#list]
+[/#macro]
diff --git a/tools/eclipse/config_wizard/resources/gencfg/lib/libutils.ftl b/tools/eclipse/config_wizard/resources/gencfg/lib/libutils.ftl new file mode 100644 index 000000000..03b0622a3 --- /dev/null +++ b/tools/eclipse/config_wizard/resources/gencfg/lib/libutils.ftl @@ -0,0 +1,109 @@ +[#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/>.
+ --]
+
+[#--
+ -- Returns the trimmed text "s" making sure it is terminated by a dot.
+ -- The empty string is always returned as an empty string, the dot is not
+ -- added.
+ --]
+[#function WithDot s]
+ [#local s = s?trim /]
+ [#if s == ""]
+ [#return s /]
+ [/#if]
+ [#if s?ends_with(".")]
+ [#return s /]
+ [/#if]
+ [#return s + "." /]
+[/#function]
+
+[#--
+ -- Returns the trimmed text "s" making sure it is not terminated by a dot.
+ --]
+[#function WithoutDot s]
+ [#local s = s?trim /]
+ [#if s?ends_with(".")]
+ [#return s?substring(0, s?length - 2) /]
+ [/#if]
+ [#return s /]
+[/#function]
+
+[#--
+ -- Returns the trimmed text "s" making sure it is terminated by a dot if the
+ -- text is composed of multiple phrases, if the text is composed of a single
+ -- phrase then makes sure it is *not* terminated by a dot.
+ -- A phrase is recognized by the pattern ". " into the text.
+ -- The empty string is always returned as an empty string, the dot is never
+ -- added.
+ --]
+[#function IntelligentDot s]
+ [#local s = s?trim /]
+ [#if s?contains(". ")]
+ [#return WithDot(s) /]
+ [/#if]
+ [#return WithoutDot(s) /]
+[/#function]
+
+[#--
+ -- Formats a text string in a sequence of strings no longer than "len" (first
+ -- line) or "lenn" (subsequent lines).
+ -- White spaces are normalized between words, sequences of white spaces become
+ -- a single space.
+ --]
+[#function StringToText len1 lenn s]
+ [#local words=s?word_list /]
+ [#local line="" /]
+ [#local lines=[] /]
+ [#list words as word]
+ [#if lines?size == 0]
+ [#local len = len1 /]
+ [#else]
+ [#local len = lenn /]
+ [/#if]
+ [#if (line?length + word?length + 1 > len)]
+ [#local lines = lines + [line?trim] /]
+ [#local line = word + " " /]
+ [#else]
+ [#local line = line + word + " " /]
+ [/#if]
+ [/#list]
+ [#if line != ""]
+ [#local lines = lines + [line?trim] /]
+ [/#if]
+ [#return lines /]
+[/#function]
+
+[#--
+ -- Emits a string "s" as a formatted text, the first line is prefixed by the
+ -- "p1" parameter, subsequent lines are prefixed by the "pn" paramenter.
+ -- Emitted lines are no longer than the "len" parameter.
+ -- White spaces are normalized between words.
+ --]
+[#macro FormatStringAsText p1 pn s len]
+ [#local lines = StringToText(len - p1?length, len - pn?length, s) /]
+ [#list lines as line]
+ [#if line_index == 0]
+${p1}${line}
+ [#else]
+${pn}${line}
+ [/#if]
+ [/#list]
+[/#macro]
diff --git a/tools/eclipse/config_wizard/resources/gencfg/processors/boards/stm32f4xx/config.fmpp b/tools/eclipse/config_wizard/resources/gencfg/processors/boards/stm32f4xx/config.fmpp new file mode 100644 index 000000000..970d936ca --- /dev/null +++ b/tools/eclipse/config_wizard/resources/gencfg/processors/boards/stm32f4xx/config.fmpp @@ -0,0 +1,5 @@ +sourceRoot: templates
+outputRoot: output
+data: {
+ doc1: xml(../input/stm32f4board.xml)
+}
diff --git a/tools/eclipse/config_wizard/resources/gencfg/processors/boards/stm32f4xx/templates/board.c.ftl b/tools/eclipse/config_wizard/resources/gencfg/processors/boards/stm32f4xx/templates/board.c.ftl new file mode 100644 index 000000000..f38fd106a --- /dev/null +++ b/tools/eclipse/config_wizard/resources/gencfg/processors/boards/stm32f4xx/templates/board.c.ftl @@ -0,0 +1,139 @@ +[#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/>.
+ --]
+[@pp.dropOutputFile /]
+[#import "/@lib/libutils.ftl" as utils /]
+[#import "/@lib/liblicense.ftl" as license /]
+[@pp.changeOutputFile name="board.c" /]
+/*
+[@license.EmitLicenseAsText /]
+*/
+
+#include "ch.h"
+#include "hal.h"
+
+#if HAL_USE_PAL || defined(__DOXYGEN__)
+/**
+ * @brief PAL setup.
+ * @details Digital I/O ports static configuration as defined in @p board.h.
+ * This variable is used by the HAL when initializing the PAL driver.
+ */
+const PALConfig pal_default_config =
+{
+ {VAL_GPIOA_MODER, VAL_GPIOA_OTYPER, VAL_GPIOA_OSPEEDR, VAL_GPIOA_PUPDR,
+ VAL_GPIOA_ODR, VAL_GPIOA_AFRL, VAL_GPIOA_AFRH},
+ {VAL_GPIOB_MODER, VAL_GPIOB_OTYPER, VAL_GPIOB_OSPEEDR, VAL_GPIOB_PUPDR,
+ VAL_GPIOB_ODR, VAL_GPIOB_AFRL, VAL_GPIOB_AFRH},
+ {VAL_GPIOC_MODER, VAL_GPIOC_OTYPER, VAL_GPIOC_OSPEEDR, VAL_GPIOC_PUPDR,
+ VAL_GPIOC_ODR, VAL_GPIOC_AFRL, VAL_GPIOC_AFRH},
+ {VAL_GPIOD_MODER, VAL_GPIOD_OTYPER, VAL_GPIOD_OSPEEDR, VAL_GPIOD_PUPDR,
+ VAL_GPIOD_ODR, VAL_GPIOD_AFRL, VAL_GPIOD_AFRH},
+ {VAL_GPIOE_MODER, VAL_GPIOE_OTYPER, VAL_GPIOE_OSPEEDR, VAL_GPIOE_PUPDR,
+ VAL_GPIOE_ODR, VAL_GPIOE_AFRL, VAL_GPIOE_AFRH},
+ {VAL_GPIOF_MODER, VAL_GPIOF_OTYPER, VAL_GPIOF_OSPEEDR, VAL_GPIOF_PUPDR,
+ VAL_GPIOF_ODR, VAL_GPIOF_AFRL, VAL_GPIOF_AFRH},
+ {VAL_GPIOG_MODER, VAL_GPIOG_OTYPER, VAL_GPIOG_OSPEEDR, VAL_GPIOG_PUPDR,
+ VAL_GPIOG_ODR, VAL_GPIOG_AFRL, VAL_GPIOG_AFRH},
+ {VAL_GPIOH_MODER, VAL_GPIOH_OTYPER, VAL_GPIOH_OSPEEDR, VAL_GPIOH_PUPDR,
+ VAL_GPIOH_ODR, VAL_GPIOH_AFRL, VAL_GPIOH_AFRH},
+ {VAL_GPIOI_MODER, VAL_GPIOI_OTYPER, VAL_GPIOI_OSPEEDR, VAL_GPIOI_PUPDR,
+ VAL_GPIOI_ODR, VAL_GPIOI_AFRL, VAL_GPIOI_AFRH}
+};
+#endif
+
+/**
+ * @brief Early initialization code.
+ * @details This initialization must be performed just after stack setup
+ * and before any other initialization.
+ */
+void __early_init(void) {
+
+ stm32_clock_init();
+[#if doc1.board.board_functions.__early_init[0]??]
+ ${doc1.board.board_functions.__early_init[0]}
+[/#if]
+}
+
+#if HAL_USE_SDC || defined(__DOXYGEN__)
+/**
+ * @brief SDC card detection.
+ */
+bool_t sdc_lld_is_card_inserted(SDCDriver *sdcp) {
+[#if doc1.board.board_functions.sdc_lld_is_card_inserted[0]??]
+${doc1.board.board_functions.sdc_lld_is_card_inserted[0]}
+[#else]
+
+ (void)sdcp;
+ /* TODO: Fill the implementation.*/
+ return TRUE;
+[/#if]
+}
+
+/**
+ * @brief SDC card write protection detection.
+ */
+bool_t sdc_lld_is_write_protected(SDCDriver *sdcp) {
+[#if doc1.board.board_functions.sdc_lld_is_write_protected[0]??]
+${doc1.board.board_functions.sdc_lld_is_write_protected[0]}
+[#else]
+
+ (void)sdcp;
+ /* TODO: Fill the implementation.*/
+ return FALSE;
+[/#if]
+}
+#endif /* HAL_USE_SDC */
+
+#if HAL_USE_MMC_SPI || defined(__DOXYGEN__)
+/**
+ * @brief MMC_SPI card detection.
+ */
+bool_t mmc_lld_is_card_inserted(MMCDriver *mmcp) {
+[#if doc1.board.board_functions.mmc_lld_is_card_inserted[0]??]
+${doc1.board.board_functions.mmc_lld_is_card_inserted[0]}
+[#else]
+
+ (void)mmcp;
+ /* TODO: Fill the implementation.*/
+ return TRUE;
+[/#if]
+}
+
+/**
+ * @brief MMC_SPI card write protection detection.
+ */
+bool_t mmc_lld_is_write_protected(MMCDriver *mmcp) {
+[#if doc1.board.board_functions.mmc_lld_is_write_protected[0]??]
+${doc1.board.board_functions.mmc_lld_is_write_protected[0]}
+[#else]
+
+ (void)mmcp;
+ /* TODO: Fill the implementation.*/
+ return FALSE;
+[/#if]
+}
+#endif
+
+/**
+ * @brief Board-specific initialization code.
+ * @todo Add your board-specific code, if any.
+ */
+void boardInit(void) {
+}
diff --git a/tools/eclipse/config_wizard/resources/gencfg/processors/boards/stm32f4xx/templates/board.h.ftl b/tools/eclipse/config_wizard/resources/gencfg/processors/boards/stm32f4xx/templates/board.h.ftl new file mode 100644 index 000000000..c24c0a355 --- /dev/null +++ b/tools/eclipse/config_wizard/resources/gencfg/processors/boards/stm32f4xx/templates/board.h.ftl @@ -0,0 +1,327 @@ +[#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/>.
+ --]
+[@pp.dropOutputFile /]
+[#import "/@lib/libutils.ftl" as utils /]
+[#import "/@lib/liblicense.ftl" as license /]
+[@pp.changeOutputFile name="board.h" /]
+/*
+[@license.EmitLicenseAsText /]
+*/
+
+#ifndef _BOARD_H_
+#define _BOARD_H_
+
+/*
+ * Setup for ${doc1.board.board_name[0]} board.
+ */
+
+/*
+ * Board identifier.
+ */
+#define BOARD_${doc1.board.board_id[0]}
+#define BOARD_NAME "${doc1.board.board_name[0]}"
+
+[#if doc1.board.ethernet_phy[0]??]
+/*
+ * Ethernet PHY type.
+ */
+#define BOARD_PHY_ID ${doc1.board.ethernet_phy.identifier[0]}
+[#if doc1.board.ethernet_phy.bus_type[0]?string == "RMII"]
+#define BOARD_PHY_RMII
+[/#if]
+[/#if]
+
+/*
+ * Board oscillators-related settings.
+[#if doc1.board.clocks.@LSEFrequency[0]?number == 0]
+ * NOTE: LSE not fitted.
+[/#if]
+[#if doc1.board.clocks.@HSEFrequency[0]?number == 0]
+ * NOTE: HSE not fitted.
+[/#if]
+ */
+#if !defined(STM32_LSECLK)
+#define STM32_LSECLK ${doc1.board.clocks.@LSEFrequency[0]}
+#endif
+
+#if !defined(STM32_HSECLK)
+#define STM32_HSECLK ${doc1.board.clocks.@HSEFrequency[0]}
+#endif
+
+[#if doc1.board.clocks.@HSEBypass[0]?string == "true"]
+#define STM32_HSE_BYPASS
+[/#if]
+
+/*
+ * Board voltages.
+ * Required for performance limits calculation.
+ */
+#define STM32_VDD ${doc1.board.clocks.@VDD[0]}
+
+/*
+ * MCU type as defined in the ST header file stm32f4xx.h.
+ */
+#define STM32F4XX
+
+/*
+ * IO pins assignments.
+ */
+[#list doc1.board.ports.* as port]
+ [#assign port_name = port?node_name?upper_case /]
+ [#list port.* as pin]
+ [#assign pin_name = pin?node_name?upper_case /]
+ [#assign name = pin.@ID[0]?string?trim /]
+ [#if name?length == 0]
+ [#assign name = pin_name /]
+ [/#if]
+#define ${(port_name + "_" + name)?right_pad(27, " ")} ${pin_index?string}
+ [/#list]
+
+[/#list]
+/*
+ * I/O ports initial setup, this configuration is established soon after reset
+ * in the initialization code.
+ * Please refer to the STM32 Reference Manual for details.
+ */
+#define PIN_MODE_INPUT(n) (0U << ((n) * 2))
+#define PIN_MODE_OUTPUT(n) (1U << ((n) * 2))
+#define PIN_MODE_ALTERNATE(n) (2U << ((n) * 2))
+#define PIN_MODE_ANALOG(n) (3U << ((n) * 2))
+#define PIN_ODR_LOW(n) (0U << (n))
+#define PIN_ODR_HIGH(n) (1U << (n))
+#define PIN_OTYPE_PUSHPULL(n) (0U << (n))
+#define PIN_OTYPE_OPENDRAIN(n) (1U << (n))
+#define PIN_OSPEED_2M(n) (0U << ((n) * 2))
+#define PIN_OSPEED_25M(n) (1U << ((n) * 2))
+#define PIN_OSPEED_50M(n) (2U << ((n) * 2))
+#define PIN_OSPEED_100M(n) (3U << ((n) * 2))
+#define PIN_PUPDR_FLOATING(n) (0U << ((n) * 2))
+#define PIN_PUPDR_PULLUP(n) (1U << ((n) * 2))
+#define PIN_PUPDR_PULLDOWN(n) (2U << ((n) * 2))
+#define PIN_AFIO_AF(n, v) ((v##U) << ((n % 8) * 4))
+
+[#list doc1.board.ports.* as port]
+ [#assign port_name = port?node_name?upper_case /]
+/*
+ * ${port_name} setup:
+ *
+ [#-- Generating pin descriptions inside the comment.--]
+ [#list port.* as pin]
+ [#assign pin_name = pin?node_name?upper_case /]
+ [#assign name = pin.@ID[0]?string?trim /]
+ [#if name?length == 0]
+ [#assign name = pin_name /]
+ [/#if]
+ [#assign mode = pin.@Mode[0] /]
+ [#assign type = pin.@Type[0] /]
+ [#assign resistor = pin.@Resistor[0] /]
+ [#assign speed = pin.@Speed[0] /]
+ [#assign alternate = pin.@Alternate[0] /]
+ [#if mode == "Input"]
+ [#assign desc = mode + " " + resistor /]
+ [#elseif mode == "Output"]
+ [#assign desc = mode + " " + type + " " + speed /]
+ [#elseif mode == "Alternate"]
+ [#assign desc = mode + " " + alternate /]
+ [#else]
+ [#assign desc = "Analog" /]
+ [/#if]
+ * P${(port?node_name[4..] + pin_index?string)?right_pad(3, " ")} - ${name?right_pad(26, " ")}(${desc?lower_case}).
+ [/#list]
+ */
+ [#--
+ -- Generating MODER register value.
+ --]
+ [#list port.* as pin]
+ [#assign pin_name = pin?node_name?upper_case /]
+ [#assign name = pin.@ID[0]?string?trim /]
+ [#if name?length == 0]
+ [#assign name = pin_name /]
+ [/#if]
+ [#assign mode = pin.@Mode[0] /]
+ [#if mode == "Input"]
+ [#assign out = "PIN_MODE_INPUT(" + port_name + "_" + name + ")" /]
+ [#elseif mode == "Output"]
+ [#assign out = "PIN_MODE_OUTPUT(" + port_name + "_" + name + ")" /]
+ [#elseif mode == "Alternate"]
+ [#assign out = "PIN_MODE_ALTERNATE(" + port_name + "_" + name + ")" /]
+ [#else]
+ [#assign out = "PIN_MODE_ANALOG(" + port_name + "_" + name + ")" /]
+ [/#if]
+ [#if pin_index == 0]
+ [#assign line = "#define VAL_" + port_name + "_MODER (" + out /]
+ [#else]
+ [#assign line = " " + out /]
+ [/#if]
+ [#if pin_index < 15]
+${(line + " |")?right_pad(76, " ") + "\\"}
+ [#else]
+${line + ")"}
+ [/#if]
+ [/#list]
+ [#--
+ -- Generating OTYPER register value.
+ --]
+ [#list port.* as pin]
+ [#assign pin_name = pin?node_name?upper_case /]
+ [#assign name = pin.@ID[0]?string?trim /]
+ [#if name?length == 0]
+ [#assign name = pin_name /]
+ [/#if]
+ [#assign type = pin.@Type[0] /]
+ [#if type == "PushPull"]
+ [#assign out = "PIN_OTYPE_PUSHPULL(" + port_name + "_" + name + ")" /]
+ [#else]
+ [#assign out = "PIN_OTYPE_OPENDRAIN(" + port_name + "_" + name + ")" /]
+ [/#if]
+ [#if pin_index == 0]
+ [#assign line = "#define VAL_" + port_name + "_OTYPER (" + out /]
+ [#else]
+ [#assign line = " " + out /]
+ [/#if]
+ [#if pin_index < 15]
+${(line + " |")?right_pad(76, " ") + "\\"}
+ [#else]
+${line + ")"}
+ [/#if]
+ [/#list]
+ [#--
+ -- Generating SPEEDR register value.
+ --]
+ [#list port.* as pin]
+ [#assign pin_name = pin?node_name?upper_case /]
+ [#assign name = pin.@ID[0]?string?trim /]
+ [#if name?length == 0]
+ [#assign name = pin_name /]
+ [/#if]
+ [#assign speed = pin.@Speed[0] /]
+ [#if speed == "Minimum"]
+ [#assign out = "PIN_OSPEED_2M(" + port_name + "_" + name + ")" /]
+ [#elseif speed == "Low"]
+ [#assign out = "PIN_OSPEED_25M(" + port_name + "_" + name + ")" /]
+ [#elseif speed == "High"]
+ [#assign out = "PIN_OSPEED_50M(" + port_name + "_" + name + ")" /]
+ [#else]
+ [#assign out = "PIN_OSPEED_100M(" + port_name + "_" + name + ")" /]
+ [/#if]
+ [#if pin_index == 0]
+ [#assign line = "#define VAL_" + port_name + "_OSPEEDR (" + out /]
+ [#else]
+ [#assign line = " " + out /]
+ [/#if]
+ [#if pin_index < 15]
+${(line + " |")?right_pad(76, " ") + "\\"}
+ [#else]
+${line + ")"}
+ [/#if]
+ [/#list]
+ [#--
+ -- Generating PUPDR register value.
+ --]
+ [#list port.* as pin]
+ [#assign pin_name = pin?node_name?upper_case /]
+ [#assign name = pin.@ID[0]?string?trim /]
+ [#if name?length == 0]
+ [#assign name = pin_name /]
+ [/#if]
+ [#assign resistor = pin.@Resistor[0] /]
+ [#if resistor == "Floating"]
+ [#assign out = "PIN_PUPDR_FLOATING(" + port_name + "_" + name + ")" /]
+ [#elseif resistor == "PullUp"]
+ [#assign out = "PIN_PUPDR_PULLUP(" + port_name + "_" + name + ")" /]
+ [#else]
+ [#assign out = "PIN_PUPDR_PULLDOWN(" + port_name + "_" + name + ")" /]
+ [/#if]
+ [#if pin_index == 0]
+ [#assign line = "#define VAL_" + port_name + "_PUPDR (" + out /]
+ [#else]
+ [#assign line = " " + out /]
+ [/#if]
+ [#if pin_index < 15]
+${(line + " |")?right_pad(76, " ") + "\\"}
+ [#else]
+${line + ")"}
+ [/#if]
+ [/#list]
+ [#--
+ -- Generating ODR register value.
+ --]
+ [#list port.* as pin]
+ [#assign pin_name = pin?node_name?upper_case /]
+ [#assign name = pin.@ID[0]?string?trim /]
+ [#if name?length == 0]
+ [#assign name = pin_name /]
+ [/#if]
+ [#assign level = pin.@Level[0] /]
+ [#if level == "Low"]
+ [#assign out = "PIN_ODR_LOW(" + port_name + "_" + name + ")" /]
+ [#else]
+ [#assign out = "PIN_ODR_HIGH(" + port_name + "_" + name + ")" /]
+ [/#if]
+ [#if pin_index == 0]
+ [#assign line = "#define VAL_" + port_name + "_ODR (" + out /]
+ [#else]
+ [#assign line = " " + out /]
+ [/#if]
+ [#if pin_index < 15]
+${(line + " |")?right_pad(76, " ") + "\\"}
+ [#else]
+${line + ")"}
+ [/#if]
+ [/#list]
+ [#--
+ -- Generating AFRx registers values.
+ --]
+ [#list port.* as pin]
+ [#assign pin_name = pin?node_name?upper_case /]
+ [#assign name = pin.@ID[0]?string?trim /]
+ [#if name?length == 0]
+ [#assign name = pin_name /]
+ [/#if]
+ [#assign alternate = pin.@Alternate[0]?trim /]
+ [#assign out = "PIN_AFIO_AF(" + port_name + "_" + name + ", " + alternate + ")" /]
+ [#if pin_index == 0]
+ [#assign line = "#define VAL_" + port_name + "_AFRL (" + out /]
+ [#elseif pin_index == 8]
+ [#assign line = "#define VAL_" + port_name + "_AFRH (" + out /]
+ [#else]
+ [#assign line = " " + out /]
+ [/#if]
+ [#if (pin_index == 7) || (pin_index == 15)]
+${line + ")"}
+ [#else]
+${(line + " |")?right_pad(76, " ") + "\\"}
+ [/#if]
+ [/#list]
+
+[/#list]
+
+#if !defined(_FROM_ASM_)
+#ifdef __cplusplus
+extern "C" {
+#endif
+ void boardInit(void);
+#ifdef __cplusplus
+}
+#endif
+#endif /* _FROM_ASM_ */
+
+#endif /* _BOARD_H_ */
diff --git a/tools/eclipse/config_wizard/resources/gencfg/processors/boards/stm32f4xx/templates/board.mk.ftl b/tools/eclipse/config_wizard/resources/gencfg/processors/boards/stm32f4xx/templates/board.mk.ftl new file mode 100644 index 000000000..c88471ac3 --- /dev/null +++ b/tools/eclipse/config_wizard/resources/gencfg/processors/boards/stm32f4xx/templates/board.mk.ftl @@ -0,0 +1,28 @@ +[#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/>.
+ --]
+[@pp.dropOutputFile /]
+[#import "/@lib/libutils.ftl" as utils /]
+[@pp.changeOutputFile name="board.mk" /]
+# List of all the board related files.
+BOARDSRC = ${'$'}{CHIBIOS}/boards/${doc1.board.board_id[0]}/board.c
+
+# Required include directories
+BOARDINC = ${'$'}{CHIBIOS}/boards/${doc1.board.board_id[0]}
diff --git a/tools/eclipse/config_wizard/resources/gencfg/processors/processors.xml b/tools/eclipse/config_wizard/resources/gencfg/processors/processors.xml new file mode 100644 index 000000000..e044f903d --- /dev/null +++ b/tools/eclipse/config_wizard/resources/gencfg/processors/processors.xml @@ -0,0 +1,8 @@ +<processors>
+ <processor>
+ <name>STM32F4xx Board Configuration</name>
+ <path>resources/gencfg/processors/boards/stm32f4xx/templates</path>
+ <default>resources/gencfg/xml/stm32f4board.xml</default>
+ <basefilename>board</basefilename>
+ </processor>
+</processors>
diff --git a/tools/eclipse/config_wizard/resources/gencfg/schema/boards/abstract_board.xsd b/tools/eclipse/config_wizard/resources/gencfg/schema/boards/abstract_board.xsd new file mode 100644 index 000000000..c4c953240 --- /dev/null +++ b/tools/eclipse/config_wizard/resources/gencfg/schema/boards/abstract_board.xsd @@ -0,0 +1,68 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema elementFormDefault="qualified"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+ <xs:include schemaLocation="../common/doc.xsd" />
+
+ <xs:complexType name="AbstractBoardType" abstract="true">
+ <xs:sequence>
+ <xs:element name="board_name" maxOccurs="1" minOccurs="1">
+ <xs:simpleType>
+ <xs:restriction base="xs:string">
+ <xs:whiteSpace value="collapse"></xs:whiteSpace>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:element>
+ <xs:element name="board_id" maxOccurs="1" minOccurs="1">
+ <xs:simpleType>
+ <xs:restriction base="xs:string">
+ <xs:pattern value="\w[\w\d_]*"></xs:pattern>
+ <xs:whiteSpace value="collapse"></xs:whiteSpace>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:element>
+ <xs:element name="board_functions" maxOccurs="1" minOccurs="1">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="__early_init" type="xs:string" maxOccurs="1" minOccurs="0"></xs:element> + <xs:element name="boardInit" type="xs:string" maxOccurs="1" minOccurs="0">
+ </xs:element>
+ <xs:element name="sdc_lld_is_card_inserted" type="xs:string" maxOccurs="1" minOccurs="0">
+ </xs:element>
+ <xs:element name="sdc_lld_is_write_protected" type="xs:string" maxOccurs="1" minOccurs="0">
+ </xs:element>
+ <xs:element name="mmc_lld_is_card_inserted" type="xs:string" maxOccurs="1" minOccurs="0">
+ </xs:element>
+ <xs:element name="mmc_lld_is_write_protected" type="xs:string" maxOccurs="1" minOccurs="0">
+ </xs:element>
+ </xs:sequence>
+ </xs:complexType></xs:element> + <xs:element name="ethernet_phy" type="EthernetPHYType"
+ maxOccurs="1" minOccurs="0">
+ </xs:element>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="EthernetPHYType">
+ <xs:sequence>
+ <xs:element name="identifier" maxOccurs="1" minOccurs="1">
+ <xs:simpleType>
+ <xs:restriction base="xs:string">
+ <xs:whiteSpace value="collapse"></xs:whiteSpace>
+ <xs:pattern value="MII_[\w\d_]+"></xs:pattern>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:element>
+ <xs:element name="bus_type" maxOccurs="1" minOccurs="1">
+ <xs:simpleType>
+ <xs:restriction base="xs:string">
+ <xs:whiteSpace value="collapse"></xs:whiteSpace>
+ <xs:enumeration value="RMII"></xs:enumeration>
+ <xs:enumeration value="MII"></xs:enumeration>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:element>
+ </xs:sequence>
+ </xs:complexType>
+
+</xs:schema>
diff --git a/tools/eclipse/config_wizard/resources/gencfg/schema/boards/stm32f4xx_board.xsd b/tools/eclipse/config_wizard/resources/gencfg/schema/boards/stm32f4xx_board.xsd new file mode 100644 index 000000000..ace3b5acb --- /dev/null +++ b/tools/eclipse/config_wizard/resources/gencfg/schema/boards/stm32f4xx_board.xsd @@ -0,0 +1,89 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema elementFormDefault="qualified"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+ <xs:include schemaLocation="../common/doc.xsd" />
+ <xs:include schemaLocation="../common/stm32/stm32_gpiov2_port.xsd" />
+ <xs:include schemaLocation="abstract_board.xsd" />
+ + <xs:complexType name="STM32F4xxBoardType"> + <xs:complexContent> + <xs:extension base="AbstractBoardType"> + <xs:sequence> + <xs:element name="clocks" maxOccurs="1" minOccurs="1"> + <xs:complexType> + <xs:attribute name="HSEBypass" use="required"> + <xs:simpleType> + <xs:restriction base="xs:string"> + <xs:whiteSpace value="collapse"></xs:whiteSpace> + <xs:enumeration value="false"></xs:enumeration> + <xs:enumeration value="true"></xs:enumeration> + </xs:restriction> + </xs:simpleType> + </xs:attribute>
+ <xs:attribute name="HSEFrequency"
+ use="required">
+ <xs:simpleType>
+ <xs:restriction base="xs:int">
+ <xs:whiteSpace value="collapse"></xs:whiteSpace>
+ <xs:minInclusive value="0"></xs:minInclusive>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="LSEFrequency"
+ use="required">
+ <xs:simpleType>
+ <xs:restriction base="xs:int">
+ <xs:whiteSpace value="collapse"></xs:whiteSpace>
+
+ <xs:minInclusive value="0"></xs:minInclusive>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="VDD" use="required">
+ <xs:simpleType>
+ <xs:restriction base="xs:int">
+ <xs:whiteSpace value="collapse"></xs:whiteSpace>
+
+ <xs:minInclusive value="180"></xs:minInclusive>
+
+ <xs:maxInclusive value="360"></xs:maxInclusive>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ </xs:complexType></xs:element> + <xs:element name="ports" type="portsType" maxOccurs="1"
+ minOccurs="1">
+ </xs:element>
+ </xs:sequence>
+
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+
+ <xs:complexType name="portsType">
+ <xs:sequence>
+ <xs:element name="GPIOA" type="STM32GPIOv2PortType"
+ minOccurs="1" maxOccurs="1"></xs:element>
+ <xs:element name="GPIOB" type="STM32GPIOv2PortType"
+ minOccurs="1" maxOccurs="1"></xs:element>
+ <xs:element name="GPIOC" type="STM32GPIOv2PortType"
+ minOccurs="1" maxOccurs="1"></xs:element>
+ <xs:element name="GPIOD" type="STM32GPIOv2PortType"
+ maxOccurs="1" minOccurs="1"></xs:element>
+ <xs:element name="GPIOE" type="STM32GPIOv2PortType"
+ maxOccurs="1" minOccurs="1"></xs:element>
+ <xs:element name="GPIOF" type="STM32GPIOv2PortType"
+ maxOccurs="1" minOccurs="1"></xs:element>
+ <xs:element name="GPIOG" type="STM32GPIOv2PortType"
+ maxOccurs="1" minOccurs="1"></xs:element>
+ <xs:element name="GPIOH" type="STM32GPIOv2PortType"
+ maxOccurs="1" minOccurs="1"></xs:element>
+ <xs:element name="GPIOI" type="STM32GPIOv2PortType"
+ maxOccurs="1" minOccurs="1"></xs:element>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:element name="board" type="STM32F4xxBoardType"></xs:element>
+
+</xs:schema>
diff --git a/tools/eclipse/config_wizard/resources/gencfg/schema/common/doc.xsd b/tools/eclipse/config_wizard/resources/gencfg/schema/common/doc.xsd new file mode 100644 index 000000000..e5be361d5 --- /dev/null +++ b/tools/eclipse/config_wizard/resources/gencfg/schema/common/doc.xsd @@ -0,0 +1,108 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema elementFormDefault="qualified"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+ <xs:complexType name="NamedItem">
+ <xs:annotation>
+ <xs:documentation>
+ >Generic item with optional name and brief
+ description
+ </xs:documentation>
+ </xs:annotation>
+ <xs:sequence>
+ <xs:element name="name" maxOccurs="1" minOccurs="1">
+ <xs:annotation>
+ <xs:documentation>Name of the object.</xs:documentation>
+ </xs:annotation>
+ <xs:simpleType>
+ <xs:restriction base="xs:string">
+ <xs:whiteSpace value="collapse"></xs:whiteSpace>
+ <xs:pattern value="\w[\w\d_]*"></xs:pattern>
+ <xs:minLength value="1"></xs:minLength>
+ <xs:maxLength value="24"></xs:maxLength>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:element>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="DocumentedItem">
+ <xs:annotation>
+ <xs:documentation>>Something that can have a detailed description
+ attached
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexContent>
+ <xs:extension base="NamedItem">
+ <xs:sequence>
+ <xs:element name="brief" maxOccurs="1" minOccurs="1">
+ <xs:annotation>
+ <xs:documentation>
+ Brief description of the object.
+ </xs:documentation>
+ </xs:annotation>
+ <xs:simpleType>
+ <xs:restriction base="xs:string">
+ <xs:minLength value="0"></xs:minLength>
+ <xs:maxLength value="72"></xs:maxLength>
+ <xs:whiteSpace value="collapse"></xs:whiteSpace>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:element>
+ <xs:element name="details" maxOccurs="1" minOccurs="0">
+ <xs:annotation>
+ <xs:documentation>
+ Object documentation as text, does not preserve
+ formatting.
+ </xs:documentation>
+ </xs:annotation>
+ <xs:simpleType>
+ <xs:restriction base="xs:string">
+ <xs:whiteSpace value="collapse"></xs:whiteSpace>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:element>
+ <xs:element name="pre" maxOccurs="unbounded" minOccurs="0">
+ <xs:annotation>
+ <xs:documentation>
+ Object pre-requisites as text, does not preserve
+ formatting.
+ </xs:documentation>
+ </xs:annotation>
+ <xs:simpleType>
+ <xs:restriction base="xs:string">
+ <xs:whiteSpace value="collapse"></xs:whiteSpace>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:element>
+ <xs:element name="post" maxOccurs="unbounded" minOccurs="0">
+ <xs:annotation>
+ <xs:documentation>
+ Object post-requisites as text, does not preserve
+ formatting.
+ </xs:documentation>
+ </xs:annotation>
+ <xs:simpleType>
+ <xs:restriction base="xs:string">
+ <xs:whiteSpace value="collapse"></xs:whiteSpace>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:element>
+ <xs:element name="note" maxOccurs="unbounded" minOccurs="0">
+ <xs:annotation>
+ <xs:documentation>
+ Object note as text, does not preserve formatting.
+ </xs:documentation>
+ </xs:annotation>
+ <xs:simpleType>
+ <xs:restriction base="xs:string">
+ <xs:whiteSpace value="collapse"></xs:whiteSpace>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:element> + </xs:sequence>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType> + +</xs:schema>
diff --git a/tools/eclipse/config_wizard/resources/gencfg/schema/common/stm32/stm32_gpiov2_port.xsd b/tools/eclipse/config_wizard/resources/gencfg/schema/common/stm32/stm32_gpiov2_port.xsd new file mode 100644 index 000000000..c3ac59487 --- /dev/null +++ b/tools/eclipse/config_wizard/resources/gencfg/schema/common/stm32/stm32_gpiov2_port.xsd @@ -0,0 +1,214 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema
+ elementFormDefault="qualified"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema"> + + <xs:complexType name="STM32GPIOv2PortType"> + + <xs:sequence> + <xs:element + name="pin0" + type="STM32GPIOv2PinType" + maxOccurs="1" + minOccurs="1"></xs:element>
+ <xs:element
+ name="pin1"
+ type="STM32GPIOv2PinType"
+ maxOccurs="1"
+ minOccurs="1"></xs:element>
+ <xs:element
+ name="pin2"
+ type="STM32GPIOv2PinType"
+ maxOccurs="1"
+ minOccurs="1"></xs:element>
+ <xs:element
+ name="pin3"
+ type="STM32GPIOv2PinType"
+ maxOccurs="1"
+ minOccurs="1"></xs:element>
+ <xs:element
+ name="pin4"
+ type="STM32GPIOv2PinType"
+ maxOccurs="1"
+ minOccurs="1"></xs:element>
+ <xs:element
+ name="pin5"
+ type="STM32GPIOv2PinType"
+ maxOccurs="1"
+ minOccurs="1"></xs:element>
+ <xs:element
+ name="pin6"
+ type="STM32GPIOv2PinType"
+ maxOccurs="1"
+ minOccurs="1"></xs:element>
+ <xs:element
+ name="pin7"
+ type="STM32GPIOv2PinType"
+ maxOccurs="1"
+ minOccurs="1"></xs:element>
+ <xs:element
+ name="pin8"
+ type="STM32GPIOv2PinType"
+ maxOccurs="1"
+ minOccurs="1"></xs:element>
+ <xs:element
+ name="pin9"
+ type="STM32GPIOv2PinType"
+ maxOccurs="1"
+ minOccurs="1"></xs:element>
+ <xs:element
+ name="pin10"
+ type="STM32GPIOv2PinType"
+ maxOccurs="1"
+ minOccurs="1"></xs:element>
+ <xs:element
+ name="pin11"
+ type="STM32GPIOv2PinType"
+ maxOccurs="1"
+ minOccurs="1"></xs:element>
+ <xs:element
+ name="pin12"
+ type="STM32GPIOv2PinType"
+ maxOccurs="1"
+ minOccurs="1"></xs:element>
+ <xs:element
+ name="pin13"
+ type="STM32GPIOv2PinType"
+ maxOccurs="1"
+ minOccurs="1"></xs:element>
+ <xs:element
+ name="pin14"
+ type="STM32GPIOv2PinType"
+ maxOccurs="1"
+ minOccurs="1"></xs:element>
+ <xs:element
+ name="pin15"
+ type="STM32GPIOv2PinType"
+ maxOccurs="1"
+ minOccurs="1"></xs:element>
+ </xs:sequence> + </xs:complexType>
+
+ <xs:complexType name="STM32GPIOv2PinType">
+ <xs:annotation>
+ <xs:documentation>
+ Object representing an STM32 pin for the GPIOv2
+ peripheral.
+ </xs:documentation>
+ </xs:annotation>
+ <xs:attribute
+ name="ID"
+ use="required">
+ <xs:annotation>
+ <xs:documentation>Pin identifier, used to generate a #define with the
+ pin name.
+ </xs:documentation>
+ </xs:annotation>
+ <xs:simpleType>
+ <xs:annotation>
+ <xs:documentation>
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:string">
+ <xs:pattern value="\w?[\w\d_]*"></xs:pattern>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute
+ name="Mode"
+ use="required">
+ <xs:annotation>
+ <xs:documentation>
+ Pin mode, as defined for MODER register.
+ </xs:documentation>
+ </xs:annotation>
+ <xs:simpleType>
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="Input"></xs:enumeration>
+ <xs:enumeration value="Output"></xs:enumeration>
+ <xs:enumeration value="Alternate"></xs:enumeration>
+ <xs:enumeration value="Analog"></xs:enumeration>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute> + <xs:attribute + name="Level" + use="required">
+ <xs:annotation>
+ <xs:documentation>Logic level for the ODR register.</xs:documentation>
+ </xs:annotation>
+ <xs:simpleType>
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="High"></xs:enumeration>
+ <xs:enumeration value="Low"></xs:enumeration>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute
+ name="Speed"
+ use="required">
+ <xs:annotation>
+ <xs:documentation>
+ Pin speed as defined in SPEEDR register.
+ </xs:documentation>
+ </xs:annotation>
+ <xs:simpleType>
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="Minimum"></xs:enumeration>
+ <xs:enumeration value="Low"></xs:enumeration>
+ <xs:enumeration value="High"></xs:enumeration>
+ <xs:enumeration value="Maximum"></xs:enumeration>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute> + <xs:attribute + name="Type" + use="required">
+ <xs:annotation>
+ <xs:documentation>
+ Pin type as defined in TYPER register.
+ </xs:documentation>
+ </xs:annotation>
+ <xs:simpleType>
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="PushPull"></xs:enumeration>
+ <xs:enumeration value="OpenDrain"></xs:enumeration>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute
+ name="Resistor"
+ use="required">
+ <xs:annotation>
+ <xs:documentation>
+ Pin pull-up/down resistor as defined in PUDR register.
+ </xs:documentation>
+ </xs:annotation>
+ <xs:simpleType>
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="Floating"></xs:enumeration>
+ <xs:enumeration value="PullUp"></xs:enumeration>
+ <xs:enumeration value="PullDown"></xs:enumeration>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute
+ name="Alternate"
+ use="required">
+ <xs:annotation>
+ <xs:documentation>
+ Pin alternate function number, only valid if
+ "Alternate" is selected
+ in the Mode attribute.
+ </xs:documentation>
+ </xs:annotation>
+ <xs:simpleType>
+ <xs:restriction base="xs:int">
+ <xs:minInclusive value="0"></xs:minInclusive>
+ <xs:maxInclusive value="15"></xs:maxInclusive>
+ <xs:whiteSpace value="collapse"></xs:whiteSpace>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ </xs:complexType>
+</xs:schema>
diff --git a/tools/eclipse/config_wizard/resources/gencfg/xml/stm32f4board.xml b/tools/eclipse/config_wizard/resources/gencfg/xml/stm32f4board.xml new file mode 100644 index 000000000..b1f755a2f --- /dev/null +++ b/tools/eclipse/config_wizard/resources/gencfg/xml/stm32f4board.xml @@ -0,0 +1,321 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<!-- STM32F4xx board Template -->
+<board
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:noNamespaceSchemaLocation="http://www.chibios.org/xml/schema/boards/stm32f4xx_board.xsd">
+ <board_name>-----human readable blard name-----</board_name>
+ <board_id>BOARD_IDENTIFIER</board_id>
+ <board_functions></board_functions>
+ <ethernet_phy>
+ <identifier>MII_KS8721_ID</identifier>
+ <bus_type>RMII</bus_type>
+ </ethernet_phy>
+ <clocks HSEFrequency="8000000" HSEBypass="false" LSEFrequency="32768" VDD="300" /><ports>
+ <GPIOA>
+ <pin0 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin1 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin2 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin3 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin4 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin5 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin6 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin7 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin8 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin9 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin10 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin11 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin12 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin13 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin14 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin15 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ </GPIOA>
+ <GPIOB>
+ <pin0 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin1 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin2 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin3 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin4 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin5 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin6 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin7 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin8 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin9 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin10 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin11 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin12 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin13 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin14 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin15 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ </GPIOB>
+ <GPIOC>
+ <pin0 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin1 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin2 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin3 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin4 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin5 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin6 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin7 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin8 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin9 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin10 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin11 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin12 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin13 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin14 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin15 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ </GPIOC>
+ <GPIOD>
+ <pin0 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin1 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin2 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin3 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin4 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin5 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin6 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin7 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin8 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin9 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin10 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin11 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin12 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin13 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin14 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin15 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ </GPIOD>
+ <GPIOE>
+ <pin0 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin1 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin2 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin3 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin4 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin5 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin6 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin7 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin8 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin9 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin10 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin11 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin12 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin13 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin14 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin15 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ </GPIOE>
+ <GPIOF>
+ <pin0 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin1 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin2 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin3 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin4 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin5 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin6 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin7 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin8 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin9 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin10 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin11 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin12 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin13 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin14 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin15 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ </GPIOF>
+ <GPIOG>
+ <pin0 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin1 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin2 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin3 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin4 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin5 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin6 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin7 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin8 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin9 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin10 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin11 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin12 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin13 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin14 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin15 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ </GPIOG>
+ <GPIOH>
+ <pin0 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin1 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin2 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin3 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin4 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin5 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin6 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin7 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin8 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin9 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin10 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin11 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin12 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin13 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin14 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin15 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ </GPIOH>
+ <GPIOI>
+ <pin0 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin1 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin2 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin3 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin4 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin5 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin6 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin7 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin8 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin9 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin10 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin11 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin12 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin13 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin14 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ <pin15 ID="" Type="PushPull" Speed="Minimum" Resistor="Floating"
+ Level="High" Mode="Input" Alternate="0" />
+ </GPIOI>
+</ports>
+</board>
diff --git a/tools/eclipse/config_wizard/src/config_wizard/Activator.java b/tools/eclipse/config_wizard/src/config_wizard/Activator.java new file mode 100644 index 000000000..1f62c4f62 --- /dev/null +++ b/tools/eclipse/config_wizard/src/config_wizard/Activator.java @@ -0,0 +1,88 @@ +/*
+ 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/>.
+ */
+
+package config_wizard;
+
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class Activator extends AbstractUIPlugin {
+
+ // The plug-in ID
+ public static final String PLUGIN_ID = "org.chibios.tools.eclipse.config"; //$NON-NLS-1$
+
+ // The shared instance
+ private static Activator plugin;
+
+ /**
+ * The constructor
+ */
+ public Activator() {
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext
+ * )
+ */
+ public void start(BundleContext context) throws Exception {
+ super.start(context);
+ plugin = this;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext
+ * )
+ */
+ public void stop(BundleContext context) throws Exception {
+ plugin = null;
+ super.stop(context);
+ }
+
+ /**
+ * Returns the shared instance
+ *
+ * @return the shared instance
+ */
+ public static Activator getDefault() {
+ return plugin;
+ }
+
+ /**
+ * Returns an image descriptor for the image file at the given plug-in
+ * relative path
+ *
+ * @param path
+ * the path
+ * @return the image descriptor
+ */
+ public static ImageDescriptor getImageDescriptor(String path) {
+ return imageDescriptorFromPlugin(PLUGIN_ID, path);
+ }
+}
diff --git a/tools/eclipse/config_wizard/src/org/chibios/tools/eclipse/config/handlers/CheckDescription.java b/tools/eclipse/config_wizard/src/org/chibios/tools/eclipse/config/handlers/CheckDescription.java new file mode 100644 index 000000000..f9e8cd6bf --- /dev/null +++ b/tools/eclipse/config_wizard/src/org/chibios/tools/eclipse/config/handlers/CheckDescription.java @@ -0,0 +1,54 @@ +/* + 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/>. +*/ + +package org.chibios.tools.eclipse.config.handlers; + +import org.eclipse.core.commands.AbstractHandler; +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.commands.ExecutionException; +import org.eclipse.ui.IWorkbenchWindow; +import org.eclipse.ui.handlers.HandlerUtil; +import org.eclipse.jface.dialogs.MessageDialog; + +/** + * Our sample handler extends AbstractHandler, an IHandler base class. + * @see org.eclipse.core.commands.IHandler + * @see org.eclipse.core.commands.AbstractHandler + */ +public class CheckDescription extends AbstractHandler { + /** + * The constructor. + */ + public CheckDescription() { + } + + /** + * the command has been executed, so extract extract the needed information + * from the application context. + */ + public Object execute(ExecutionEvent event) throws ExecutionException { + IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindowChecked(event); + MessageDialog.openInformation( + window.getShell(), + "ChibiOS-RT_Configuration_Support", + "Hello, Eclipse world"); + return null; + } +} 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 new file mode 100644 index 000000000..e10d4c667 --- /dev/null +++ b/tools/eclipse/config_wizard/src/org/chibios/tools/eclipse/config/handlers/GenerateFiles.java @@ -0,0 +1,141 @@ +/* + 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/>. + */ + +package org.chibios.tools.eclipse.config.handlers; + +import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import java.util.Properties; + +import org.chibios.tools.eclipse.config.utils.TemplateEngine; +import org.chibios.tools.eclipse.config.utils.TemplateException; +import org.eclipse.core.commands.AbstractHandler; +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.commands.ExecutionException; +import org.eclipse.core.resources.IFile; +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.ui.IWorkbenchWindow; +import org.eclipse.ui.handlers.HandlerUtil; +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.osgi.framework.Bundle; + +import config_wizard.Activator; + +/** + * Our sample handler extends AbstractHandler, an IHandler base class. + * + * @see org.eclipse.core.commands.IHandler + * @see org.eclipse.core.commands.AbstractHandler + */ +public class GenerateFiles extends AbstractHandler { + + /** + * The constructor. + */ + public GenerateFiles() { + } + + /** + * the command has been executed, so extract extract the needed information + * from the application context. + */ + public Object execute(ExecutionEvent event) throws ExecutionException { + + IWorkbenchWindow window = HandlerUtil + .getActiveWorkbenchWindowChecked(event); + ISelection selection = window.getSelectionService().getSelection(); + if (selection instanceof IStructuredSelection) { + + /* Retrieves the full path of the configuration file. */ + IPath cfgfilepath = ((IFile) ((IStructuredSelection) selection) + .getFirstElement()).getLocation(); + + /* Determines the base path as the parent of the configuration file.*/ + IPath basepath = cfgfilepath.removeLastSegments(1); + + /* Reads the configuration file into a Properties object. */ + Properties cfgfile = new Properties(); + try { + cfgfile.load(new FileReader(cfgfilepath.toFile())); + } catch (IOException e) { + MessageDialog.openInformation(window.getShell(), "I/O Error", + e.getMessage()); + return null; + } + + /* Retrieves source property. */ + String source = cfgfile.getProperty("source"); + if (source == null) { + MessageDialog.openInformation(window.getShell(), "Properties Error", + "Property \"source\" not found in configuration file."); + return null; + } + + /* Retrieves xmlfile property. */ + String xmlfile = cfgfile.getProperty("xmlfile"); + if (xmlfile == null) { + MessageDialog.openInformation(window.getShell(), "Properties Error", + "Property \"xmlfile\" not found in configuration file."); + return null; + } + + /* Retrieves output property. */ + String output = cfgfile.getProperty("output"); + if (output == null) { + MessageDialog.openInformation(window.getShell(), "Properties Error", + "Property \"output\" not found in configuration file."); + return null; + } + + /* Calculating derived paths. */ + IPath sourcepath = new Path(source); + IPath libpath = new Path("resources/gencfg/lib"); + try { + Bundle bundle = Platform.getBundle(Activator.PLUGIN_ID); + sourcepath = new Path(FileLocator.toFileURL( + FileLocator.find(bundle, sourcepath, null)).getFile()); + libpath = new Path(FileLocator.toFileURL( + FileLocator.find(bundle, libpath, null)).getFile()); + } catch (IOException e) { + MessageDialog.openInformation(window.getShell(), "Path Error", + e.getMessage()); + return null; + } + + /* Templates execution. */ + try { + TemplateEngine.process(basepath.addTrailingSeparator().append(xmlfile) + .toFile(), libpath.toFile(), sourcepath.toFile(), + basepath.toFile(), new File(output)); + } catch (TemplateException e) { + MessageDialog.openInformation(window.getShell(), "Processing Error", + e.getMessage()); + return null; + } + } + 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 new file mode 100644 index 000000000..6c2771d9f --- /dev/null +++ b/tools/eclipse/config_wizard/src/org/chibios/tools/eclipse/config/utils/TemplateEngine.java @@ -0,0 +1,213 @@ +/*
+ 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/>.
+ */
+
+package org.chibios.tools.eclipse.config.utils;
+
+import java.io.IOException;
+import java.util.HashMap;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.console.ConsolePlugin;
+import org.eclipse.ui.console.IConsole;
+import org.eclipse.ui.console.IConsoleConstants;
+import org.eclipse.ui.console.IConsoleManager;
+import org.eclipse.ui.console.IConsoleView;
+import org.eclipse.ui.console.MessageConsole;
+import org.eclipse.ui.console.MessageConsoleStream;
+import org.w3c.dom.Document;
+import org.xml.sax.SAXException;
+
+import fmpp.Engine;
+import fmpp.ProcessingException;
+import fmpp.ProgressListener;
+import fmpp.setting.SettingException;
+import fmpp.setting.Settings;
+import freemarker.ext.dom.NodeModel;
+import freemarker.template.TemplateNodeModel;
+
+/**
+ * FMPP wrapper class.
+ */
+public class TemplateEngine {
+
+ private static final String CONSOLE_NAME = "ChibiOS/RT Configuration Tool";
+
+ private static Settings settings;
+ private static MessageConsoleStream out;
+
+ /**
+ * Runs the templates engine.
+ *
+ * @param xmldata
+ * absolute path to XML data file
+ * @param libdir
+ * absolute path to libraries directory
+ * @param sourcedir
+ * absolute path to templates directory
+ * @param basedir
+ * absolute path to project directory
+ * @param outputdir
+ * output directory relative to basedir
+ *
+ * @throws SettingException
+ * @throws ProcessingException
+ */
+ public static void process(java.io.File xmldata, java.io.File libdir,
+ java.io.File sourcedir, java.io.File basedir,
+ java.io.File outputdir) throws TemplateException {
+
+ /* Finds or creates a named console. */
+ MessageConsole console = findConsole(CONSOLE_NAME);
+ activateConsole(console);
+ console.clearConsole();
+ out = console.newMessageStream();
+
+ /*
+ * Instantiates the FMPP Settings engine and associates a listener for
+ * events to be logged.
+ */
+ try {
+ settings = new Settings(basedir);
+ } catch (SettingException e) {
+ e.printStackTrace();
+ return;
+ }
+ settings.addProgressListener(new ProgressListener() {
+ public void notifyProgressEvent(Engine engine, int event,
+ java.io.File src, int pMode,
+ java.lang.Throwable error,
+ java.lang.Object param) {
+
+ if (pMode == Engine.PMODE_IGNORE)
+ return;
+
+ switch (event) {
+ case EVENT_BEGIN_PROCESSING_SESSION:
+ out.println("Starting session");
+ break;
+ case EVENT_END_PROCESSING_SESSION:
+ out.println("Finished");
+ break;
+ case EVENT_BEGIN_FILE_PROCESSING:
+ out.println("Processing " + src.getName());
+ break;
+ case EVENT_END_FILE_PROCESSING:
+ break;
+ case EVENT_IGNORING_DIR:
+ out.println("Ignoring directory " + src.getName());
+ break;
+ case EVENT_SOURCE_NOT_MODIFIED:
+ out.println("Skipping " + src.getName());
+ break;
+ case EVENT_WARNING:
+ out.println("Warning:" + (String) param);
+ break;
+ }
+ }
+ });
+
+ /* Loading data model. */
+ DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
+ dbf.setNamespaceAware(true);
+ dbf.setValidating(false);
+ DocumentBuilder db;
+ try {
+ db = dbf.newDocumentBuilder();
+ } catch (ParserConfigurationException e) {
+ throw new TemplateException(e.getMessage());
+ }
+ Document dom1;
+ try {
+ dom1 = db.parse(xmldata);
+ } catch (SAXException e) {
+ throw new TemplateException(e.getMessage());
+ } catch (IOException e) {
+ throw new TemplateException(e.getMessage());
+ }
+
+ NodeModel.removeComments(dom1);
+ NodeModel.mergeAdjacentText(dom1);
+ TemplateNodeModel doc1 = NodeModel.wrap(dom1);
+
+ HashMap<String, TemplateNodeModel> xmls = new HashMap<String, TemplateNodeModel>();
+ xmls.put("doc1", doc1);
+
+ /* Setting libraries path. */
+ HashMap<String, String> libs = new HashMap<String, String>();
+ libs.put("lib", libdir.toString());
+
+ /* Other settings. */
+ try {
+ settings.add("freemarkerLinks", libs);
+ settings.add("data", xmls);
+ settings.add("sourceRoot", sourcedir.toString());
+ settings.add("outputRoot", outputdir.toString());
+ settings.add("ignoreCvsFiles", true);
+ settings.add("ignoreSvnFiles", true);
+ } catch (SettingException e) {
+ throw new TemplateException(e.getMessage());
+ }
+
+ /* Processor execution. */
+ try {
+ settings.execute();
+ } catch (SettingException e) {
+ throw new TemplateException(e.getMessage());
+ } catch (ProcessingException e) {
+ throw new TemplateException(e.getMessage());
+ }
+ }
+
+ private static MessageConsole findConsole(String name) {
+ ConsolePlugin plugin = ConsolePlugin.getDefault();
+ IConsoleManager conMan = plugin.getConsoleManager();
+ IConsole[] existing = conMan.getConsoles();
+ for (int i = 0; i < existing.length; i++)
+ if (name.equals(existing[i].getName()))
+ return (MessageConsole) existing[i];
+
+ /* No console found, so create a new one. */
+ MessageConsole myConsole = new MessageConsole(name, null);
+ conMan.addConsoles(new IConsole[] { myConsole });
+ return myConsole;
+ }
+
+ private static void activateConsole(MessageConsole console) {
+ IWorkbench wb = PlatformUI.getWorkbench();
+ IWorkbenchWindow win = wb.getActiveWorkbenchWindow();
+ IWorkbenchPage page = win.getActivePage();
+ IConsoleView view;
+ try {
+ view = (IConsoleView) page.showView(IConsoleConstants.ID_CONSOLE_VIEW);
+ } catch (PartInitException e) {
+ e.printStackTrace();
+ return;
+ }
+ view.display(console);
+ }
+}
diff --git a/tools/eclipse/config_wizard/src/org/chibios/tools/eclipse/config/utils/TemplateException.java b/tools/eclipse/config_wizard/src/org/chibios/tools/eclipse/config/utils/TemplateException.java new file mode 100644 index 000000000..73746de1d --- /dev/null +++ b/tools/eclipse/config_wizard/src/org/chibios/tools/eclipse/config/utils/TemplateException.java @@ -0,0 +1,30 @@ +/*
+ 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/>.
+ */
+
+package org.chibios.tools.eclipse.config.utils;
+
+public class TemplateException extends Exception {
+
+ private static final long serialVersionUID = -3317410595937500925L;
+
+ public TemplateException(String msg) {
+ super(msg);
+ }
+}
diff --git a/tools/eclipse/config_wizard/src/org/chibios/tools/eclipse/config/wizards/ConfigurationNewWizard.java b/tools/eclipse/config_wizard/src/org/chibios/tools/eclipse/config/wizards/ConfigurationNewWizard.java new file mode 100644 index 000000000..51002d5e6 --- /dev/null +++ b/tools/eclipse/config_wizard/src/org/chibios/tools/eclipse/config/wizards/ConfigurationNewWizard.java @@ -0,0 +1,221 @@ +/* + 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/>. + */ + +package org.chibios.tools.eclipse.config.wizards; + +import java.lang.reflect.InvocationTargetException; +import java.io.*; + +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jface.wizard.Wizard; +import org.eclipse.ui.INewWizard; +import org.eclipse.ui.IWorkbench; +import org.eclipse.core.runtime.*; +import org.eclipse.jface.operation.*; +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.core.resources.*; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.ui.*; +import org.eclipse.ui.ide.IDE; +import org.osgi.framework.Bundle; + +import config_wizard.Activator; + +/** + * This is a sample new wizard. Its role is to create a new file resource in the + * provided container. If the container resource (a folder or a project) is + * selected in the workspace when the wizard is opened, it will accept it as the + * target container. The wizard creates one file with the extension "chcfg". If + * a sample multi-page editor (also available as a template) is registered for + * the same extension, it will be able to open it. + */ + +public class ConfigurationNewWizard extends Wizard implements INewWizard { + private ConfigurationNewWizardPage page; + private ISelection selection; + + private String containerName; + private String projectFileName; + private String dataFileName; + private String templatesPath; + private String outputDirName; + private String defaultDataFile; + + /** + * Constructor for ConfigurationNewWizard. + */ + public ConfigurationNewWizard() { + super(); + setNeedsProgressMonitor(true); + } + + /** + * Adding the page to the wizard. + */ + public void addPages() { + page = new ConfigurationNewWizardPage(selection); + addPage(page); + } + + /** + * Checks if the wizard page allows to finish. + */ + public boolean canFinish() { + + return page.canFinish(); + } + + /** + * This method is called when 'Finish' button is pressed in the wizard. We + * will create an operation and run it using wizard as execution context. + */ + public boolean performFinish() { + + containerName = page.getContainerName(); + projectFileName = page.getProjectFileName(); + dataFileName = page.getDataFileName(); + templatesPath = page.getTemplatesPath(); + outputDirName = page.getOutputDirName(); + defaultDataFile = page.getDefaultDataFile(); + + IRunnableWithProgress op = new IRunnableWithProgress() { + public void run(IProgressMonitor monitor) + throws InvocationTargetException { + try { + doFinish(monitor); + } catch (CoreException e) { + throw new InvocationTargetException(e); + } finally { + monitor.done(); + } + } + }; + try { + getContainer().run(true, false, op); + } catch (InterruptedException e) { + return false; + } catch (InvocationTargetException e) { + Throwable realException = e.getTargetException(); + MessageDialog.openError(getShell(), "Error", realException.getMessage()); + return false; + } + return true; + } + + /** + * The worker method. It will find the container, create the file if missing + * or just replace its contents, and open the editor on the newly created + * file. + */ + private void doFinish(IProgressMonitor monitor) throws CoreException { + + IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); + IResource resource = root.findMember(new Path(containerName)); + if (!resource.exists() || !(resource instanceof IContainer)) { + throwCoreException("Container \"" + containerName + "\" does not exist."); + } + IContainer container = (IContainer)resource; + monitor.beginTask("Creating " + projectFileName, 3); + + /* Step #1, creates the project file.*/ + final IFile projectFile = container.getFile(new Path(projectFileName)); + try { + InputStream stream = openProjectContentStream(templatesPath, + dataFileName, + outputDirName); + if (projectFile.exists()) { + projectFile.setContents(stream, true, true, monitor); + } else { + projectFile.create(stream, true, monitor); + } + stream.close(); + } catch (IOException e) { + } + monitor.worked(1); + + /* Step #2, creates the XML data file.*/ + final IFile dataFile = container.getFile(new Path(dataFileName)); + Bundle bundle = Platform.getBundle(Activator.PLUGIN_ID); + IPath path = new Path(defaultDataFile); + String s; + try { + s = FileLocator.toFileURL(FileLocator.find(bundle, path, null)).getFile(); + InputStream stream = new FileInputStream(s); + if (dataFile.exists()) { + dataFile.setContents(stream, true, true, monitor); + } else { + dataFile.create(stream, true, monitor); + } + stream.close(); + } catch (IOException e) { + } + monitor.worked(1); + + /* Step #2, opens the XML data file.*/ + monitor.setTaskName("Opening XML data file for editing..."); + getShell().getDisplay().asyncExec(new Runnable() { + public void run() { + IWorkbenchPage page = PlatformUI.getWorkbench() + .getActiveWorkbenchWindow().getActivePage(); + try { + IDE.openEditor(page, projectFile, true); + } catch (PartInitException e) { + } + } + }); + monitor.worked(1); + } + + /** + * We will initialize file contents with a sample text. + */ + private InputStream openProjectContentStream(String templatesPath, + String dataFileName, + String outputDirName) { + + String contents = "# Automatically generated configuration project file.\n\n" + + "# Templates path in the configuration plugin resources, do not modify.\n" + + "source=" + templatesPath + "\n\n" + + "# XML configuration data file path relative to this configuration file.\n" + + "xmlfile=" + dataFileName + "\n\n" + + "# Output directory path relative to directory containing this configuration\n" + + "# file.\n" + + "output=" + outputDirName + "\n"; + return new ByteArrayInputStream(contents.getBytes()); + } + + private void throwCoreException(String message) throws CoreException { + IStatus status = new Status(IStatus.ERROR, + "org.chibios.tools.eclipse.config", IStatus.OK, + message, null); + throw new CoreException(status); + } + + /** + * We will accept the selection in the workbench to see if we can initialize + * from it. + * + * @see IWorkbenchWizard#init(IWorkbench, IStructuredSelection) + */ + public void init(IWorkbench workbench, IStructuredSelection selection) { + this.selection = selection; + } +} 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 new file mode 100644 index 000000000..599c17af0 --- /dev/null +++ b/tools/eclipse/config_wizard/src/org/chibios/tools/eclipse/config/wizards/ConfigurationNewWizardPage.java @@ -0,0 +1,371 @@ +/* + 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/>. + */ + +package org.chibios.tools.eclipse.config.wizards; + +import java.io.IOException; + +import org.eclipse.core.resources.IContainer; +import org.eclipse.core.resources.IResource; +import org.eclipse.core.resources.IWorkspaceRoot; +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.dialogs.MessageDialog; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jface.wizard.WizardPage; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.ModifyEvent; +import org.eclipse.swt.events.ModifyListener; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Text; +import org.eclipse.swt.widgets.Combo; + +import org.osgi.framework.Bundle; + +import org.jdom2.Document; +import org.jdom2.Element; +import org.jdom2.JDOMException; +import org.jdom2.input.SAXBuilder; + +import config_wizard.Activator; + +/** + * The "New" wizard page allows setting the container for the new file as well + * as the file name. The page will only accept file name without the extension + * OR with the extension that matches the expected one (chcfg). + */ + +public class ConfigurationNewWizardPage extends WizardPage { + + private ISelection selection; + private IContainer resourceContainer; + + private Document processorsDocument; + private String currentTemplatesPath; + private String currentDefaultDataFile; + + private Composite container; + private Combo configurationTemplatesCombo; + private Text confProjectFilenameText; + private Text confDataFilenameText; + private Text confOutputDirectoryText; + + /** + * Constructor for SampleNewWizardPage. + * + * @param pageName + */ + public ConfigurationNewWizardPage(ISelection selection) { + + super("wizardPage"); + setTitle("ChibiOS/RT Configuration Project File"); + setDescription("This wizard creates a ChibiOS/RT configuration resource. Configuration resources allow to generate project resources starting from high level descriptions written in XML."); + this.selection = selection; + } + + /** + * @see IDialogPage#createControl(Composite) + */ + public void createControl(Composite parent) { + container = new Composite(parent, SWT.NULL); + GridLayout layout = new GridLayout(); + container.setLayout(layout); + layout.numColumns = 2; + layout.verticalSpacing = 9; + + Label lbl1 = new Label(container, SWT.NULL); + lbl1.setText("Configuration template:"); + + configurationTemplatesCombo = new Combo(container, SWT.READ_ONLY); + configurationTemplatesCombo.setLayoutData(new GridData(SWT.FILL, + SWT.CENTER, true, + false, 1, 1)); + + Label lbl2 = new Label(container, SWT.NULL); + lbl2.setText("Configuration project filename:"); + + confProjectFilenameText = new Text(container, SWT.BORDER | SWT.SINGLE); + confProjectFilenameText.setText("config.chcfg"); + confProjectFilenameText + .setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + confProjectFilenameText.addModifyListener(new ModifyListener() { + public void modifyText(ModifyEvent e) { + confProjectFilenameUpdated(); + } + }); + + Label lbl3 = new Label(container, SWT.NONE); + lbl3.setText("Configuration data filename:"); + + confDataFilenameText = new Text(container, SWT.BORDER); + confDataFilenameText.setText("config.chxml"); + confDataFilenameText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, + false, 1, 1)); + confDataFilenameText.addModifyListener(new ModifyListener() { + public void modifyText(ModifyEvent e) { + confDataFilenameUpdated(); + } + }); + + Label lbl4 = new Label(container, SWT.NONE); + lbl4.setText("Configuration output directory:"); + + confOutputDirectoryText = new Text(container, SWT.BORDER); + confOutputDirectoryText.setText("."); + confOutputDirectoryText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, + true, false, 1, 1)); + + /* Note, it must stay after the creation of the text fields. */ + configurationTemplatesCombo.addModifyListener(new ModifyListener() { + public void modifyText(ModifyEvent e) { + Element processor = getSelectedTemplate(); + String basefilename = processor.getChildText("basefilename"); + confProjectFilenameText.setText(basefilename.concat(".chcfg")); + confDataFilenameText.setText(basefilename.concat(".chxml")); + currentTemplatesPath = processor.getChildText("path"); + currentDefaultDataFile = processor.getChildText("default"); + } + }); + confOutputDirectoryText.addModifyListener(new ModifyListener() { + public void modifyText(ModifyEvent e) { + confOutputDirectoryUpdated(); + } + }); + + populateWizardPanel(); + initialize(); + setControl(container); + } + + public String getContainerName() { + + return resourceContainer.getFullPath().toString(); + } + + public String getProjectFileName() { + + return confProjectFilenameText.getText(); + } + + public String getDataFileName() { + + return confDataFilenameText.getText(); + } + + public String getOutputDirName() { + + return confOutputDirectoryText.getText(); + } + + public String getTemplatesPath() { + + return currentTemplatesPath; + } + + public String getDefaultDataFile() { + + return currentDefaultDataFile; + } + + public boolean canFinish() { + + return container.getEnabled(); + } + + /** + * Tests if the current workbench selection is a suitable container to use. + */ + private void initialize() { + + if (selection != null && selection.isEmpty() == false + && selection instanceof IStructuredSelection) { + IStructuredSelection ssel = (IStructuredSelection) selection; + if (ssel.size() > 1) + return; + Object obj = ssel.getFirstElement(); + if (obj instanceof IResource) { + if (obj instanceof IContainer) + resourceContainer = (IContainer) obj; + else + resourceContainer = ((IResource) obj).getParent(); + } + } + else { + MessageDialog.openError(getShell(), + "Error", "Container for the resource not selected."); + 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. */ + 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; + } + + /* DOM tree creation. */ + SAXBuilder builder = new SAXBuilder(); + try { + processorsDocument = builder.build(fpath); + } catch (JDOMException e) { + e.printStackTrace(); + return; + } catch (IOException e) { + e.printStackTrace(); + return; + } + + /* + * 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"); + configurationTemplatesCombo.add(name); + } + configurationTemplatesCombo.select(0); + } + + /** + * Checks the content of the confProjectFilenameText field. + */ + private void confProjectFilenameUpdated() { + String fileName = getProjectFileName(); + + if (fileName.length() == 0) { + updateStatus("File name must be specified"); + return; + } + if (fileName.replace('\\', '/').indexOf('/', 1) > 0) { + updateStatus("File name must be valid"); + return; + } + int dotLoc = fileName.lastIndexOf('.'); + if (dotLoc != -1) { + String ext = fileName.substring(dotLoc + 1); + if (ext.equalsIgnoreCase("chcfg") == false) { + updateStatus("Configuration project filename extension must be \"chcfg\""); + return; + } + } + updateStatus(null); + } + + /** + * Checks the content of the confProjectFilenameText field. + */ + private void confDataFilenameUpdated() { + String fileName = getDataFileName(); + + if (fileName.length() == 0) { + updateStatus("File name must be specified"); + return; + } + if (fileName.replace('\\', '/').indexOf('/', 1) > 0) { + updateStatus("File name must be valid"); + return; + } + int dotLoc = fileName.lastIndexOf('.'); + if (dotLoc != -1) { + String ext = fileName.substring(dotLoc + 1); + if (ext.equalsIgnoreCase("chxml") == false) { + updateStatus("Configuration project filename extension must be \"chxml\""); + return; + } + } + updateStatus(null); + } + + /** + * Checks the content of the confOutputDirectoryText field. + */ + private void confOutputDirectoryUpdated() { + + IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); + IPath outputPath = resourceContainer.getFullPath().addTrailingSeparator() + .append(getOutputDirName()); + IResource outputContainer = root.findMember(outputPath); + + if (outputContainer == null) { + updateStatus("The directory must exists"); + return; + } + if (!(outputContainer instanceof IContainer)) { + updateStatus("A directory must be specified"); + return; + } + updateStatus(null); + } + + /** + * Returns the XML Element associated to the current selection in the combo + * box. + * + * @return An Element Object. + */ + private Element getSelectedTemplate() { + + for (Element processor : processorsDocument.getRootElement() + .getChildren("processor")) { + String name = processor.getChildText("name"); + String item = configurationTemplatesCombo + .getItem(configurationTemplatesCombo.getSelectionIndex()); + if (name.compareTo(item) == 0) { + return processor; + } + } + return null; + } + + /** + * Updates the status text in the Wizard page. + * + * @param message + * the message to be shown + */ + private void updateStatus(String message) { + + setErrorMessage(message); + setPageComplete(message == null); + } +} |