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); +  } +}  | 
