aboutsummaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorgdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2012-07-10 18:47:54 +0000
committergdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2012-07-10 18:47:54 +0000
commit5521ecc4fb61cda3cad92de5f0505c873b6abb99 (patch)
treea2e7f1b6d9e2f6d85fa6894a09036e95a6a5895b /tools
parent30a69000562fda260f742c134501f006c0ec8ca8 (diff)
downloadChibiOS-5521ecc4fb61cda3cad92de5f0505c873b6abb99.tar.gz
ChibiOS-5521ecc4fb61cda3cad92de5f0505c873b6abb99.tar.bz2
ChibiOS-5521ecc4fb61cda3cad92de5f0505c873b6abb99.zip
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@4455 35acf78f-673a-0410-8e92-d51de3d6d3f4
Diffstat (limited to 'tools')
-rw-r--r--tools/gencfg/config.fmpp2
-rw-r--r--tools/gencfg/lib/libcode.ftl261
-rw-r--r--tools/gencfg/lib/libstm32f4xx.ftl34
-rw-r--r--tools/gencfg/processors/hal/stm32f4xx/templates/hal_cfg.c.ftl33
-rw-r--r--tools/gencfg/processors/hal/stm32f4xx/templates/hal_cfg.h.ftl24
-rw-r--r--tools/gencfg/schema/hal/stm32f4xx/stm32f4xx_adc_cfg.xsd2
-rw-r--r--tools/gencfg/xml/stm32f4xx_cfg.xml4
7 files changed, 356 insertions, 4 deletions
diff --git a/tools/gencfg/config.fmpp b/tools/gencfg/config.fmpp
index 0f34b0a03..9fc5a31dd 100644
--- a/tools/gencfg/config.fmpp
+++ b/tools/gencfg/config.fmpp
@@ -1,7 +1,7 @@
# Change the next line to point to the processor you want to use. Processors
# are identified by a file named "config.fmpp" under the "processors" root
# directory.
-inheritConfiguration: processors/boards/stm32f4xx/config.fmpp
+inheritConfiguration: processors/hal/stm32f4xx/config.fmpp
# Settings common to all processors. Do not change the following lines.
freemarkerLinks: {
diff --git a/tools/gencfg/lib/libcode.ftl b/tools/gencfg/lib/libcode.ftl
new file mode 100644
index 000000000..8147e02c4
--- /dev/null
+++ b/tools/gencfg/lib/libcode.ftl
@@ -0,0 +1,261 @@
+[#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 brief=[]]
+ [#if brief[0]??]
+[@utils.FormatStringAsText " * @brief "
+ " * "
+ utils.WithDot(brief[0]?cap_first)
+ boundary /]
+ [/#if]
+[/#macro]
+
+[#--
+ -- This macro generates a detailed description in DoxyGen format.
+ --]
+[#macro EmitDoxygenDetails details=[]]
+ [#if details[0]??]
+[@utils.FormatStringAsText " * @details "
+ " * "
+ utils.WithDot(details[0]?cap_first)
+ boundary /]
+ [/#if]
+[/#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/gencfg/lib/libstm32f4xx.ftl b/tools/gencfg/lib/libstm32f4xx.ftl
new file mode 100644
index 000000000..f6df3a771
--- /dev/null
+++ b/tools/gencfg/lib/libstm32f4xx.ftl
@@ -0,0 +1,34 @@
+[#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 EmitADCConfig config]
+ [#local cfg_name = config.@name[0]?string /]
+/* ADC Config.*/
+/**
+[@code.EmitDoxygenBrief config.@brief /]
+[@code.EmitDoxygenDetails config.details /]
+ */
+const ADCConfig ${cfg_name} = {0};
+[/#macro]
diff --git a/tools/gencfg/processors/hal/stm32f4xx/templates/hal_cfg.c.ftl b/tools/gencfg/processors/hal/stm32f4xx/templates/hal_cfg.c.ftl
index 3f70e952d..e97f20c82 100644
--- a/tools/gencfg/processors/hal/stm32f4xx/templates/hal_cfg.c.ftl
+++ b/tools/gencfg/processors/hal/stm32f4xx/templates/hal_cfg.c.ftl
@@ -21,6 +21,8 @@
[@pp.dropOutputFile /]
[#import "/@lib/libutils.ftl" as utils /]
[#import "/@lib/liblicense.ftl" as license /]
+[#import "/@lib/libcode.ftl" as code /]
+[#import "/@lib/libstm32f4xx.ftl" as stm32f4xx /]
[#assign fname = doc1.configuration.@name[0] /]
[@pp.changeOutputFile name = fname + ".c" /]
/*
@@ -29,3 +31,34 @@
#include "ch.h"
#include "hal.h"
+
+/*===========================================================================*/
+/* Module local definitions. */
+/*===========================================================================*/
+
+/*===========================================================================*/
+/* Module exported variables. */
+/*===========================================================================*/
+
+[#list doc1.configuration.configs.* as config]
+ [#assign config_type = config?node_name /]
+ [#if config_type == "adc_config"]
+ [@stm32f4xx.EmitADCConfig config /]
+ [/#if]
+
+[/#list]
+/*===========================================================================*/
+/* Module local variables. */
+/*===========================================================================*/
+
+/*===========================================================================*/
+/* Module local functions. */
+/*===========================================================================*/
+
+/*===========================================================================*/
+/* Module interrupt handlers. */
+/*===========================================================================*/
+
+/*===========================================================================*/
+/* Module exported functions. */
+/*===========================================================================*/
diff --git a/tools/gencfg/processors/hal/stm32f4xx/templates/hal_cfg.h.ftl b/tools/gencfg/processors/hal/stm32f4xx/templates/hal_cfg.h.ftl
index cfdf73b45..b8f350ff9 100644
--- a/tools/gencfg/processors/hal/stm32f4xx/templates/hal_cfg.h.ftl
+++ b/tools/gencfg/processors/hal/stm32f4xx/templates/hal_cfg.h.ftl
@@ -30,6 +30,30 @@
#ifndef _${fname?upper_case}_H_
#define _${fname?upper_case}_H_
+/*===========================================================================*/
+/* Module constants. */
+/*===========================================================================*/
+
+/*===========================================================================*/
+/* Module pre-compile time settings. */
+/*===========================================================================*/
+
+/*===========================================================================*/
+/* Derived constants and error checks. */
+/*===========================================================================*/
+
+/*===========================================================================*/
+/* Module data structures and types. */
+/*===========================================================================*/
+
+/*===========================================================================*/
+/* Module macros. */
+/*===========================================================================*/
+
+/*===========================================================================*/
+/* External declarations. */
+/*===========================================================================*/
+
#ifdef __cplusplus
extern "C" {
#endif
diff --git a/tools/gencfg/schema/hal/stm32f4xx/stm32f4xx_adc_cfg.xsd b/tools/gencfg/schema/hal/stm32f4xx/stm32f4xx_adc_cfg.xsd
index 18cb6a03b..c038263c2 100644
--- a/tools/gencfg/schema/hal/stm32f4xx/stm32f4xx_adc_cfg.xsd
+++ b/tools/gencfg/schema/hal/stm32f4xx/stm32f4xx_adc_cfg.xsd
@@ -338,7 +338,7 @@
minOccurs="1">
<xs:complexType>
<xs:sequence>
- <xs:element name="channel" maxOccurs="unbounded"
+ <xs:element name="channel" maxOccurs="16"
minOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:string">
diff --git a/tools/gencfg/xml/stm32f4xx_cfg.xml b/tools/gencfg/xml/stm32f4xx_cfg.xml
index 65c9294e0..a0ed7fbb6 100644
--- a/tools/gencfg/xml/stm32f4xx_cfg.xml
+++ b/tools/gencfg/xml/stm32f4xx_cfg.xml
@@ -5,9 +5,9 @@
name="hal_configs">
<details>Application HAL configurations.</details>
<configs>
- <adc_config name="ADCConfig1">
+ <adc_config name="adccfg1">
<groups>
- <group discontinuous_number="1" name="ADCGroupConfig1"
+ <group discontinuous_number="1" name="adcgrpcfg1"
trigger_mode="0 Software" error_callback=""
resolution="0 12 bits" trigger_source="0 Timer 1 CC1 event"
discontinuous_mode="true"